jenkins-bot has submitted this change and it was merged.
Change subject: Added unit tests for Page pages.
......................................................................
Added unit tests for Page pages.
Change-Id: Ic80a32efc181c2b9b963653bdf2fbced56576706
---
M ProofreadPage.php
M includes/page/ProofreadPageContent.php
M includes/page/ProofreadPagePage.php
A tests/includes/ProofreadPageTestCase.php
M tests/includes/index/ProofreadIndexPageTest.php
A tests/includes/page/ProofreadPageContentTest.php
A tests/includes/page/ProofreadPagePageTest.php
7 files changed, 256 insertions(+), 46 deletions(-)
Approvals:
Tpt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/ProofreadPage.php b/ProofreadPage.php
index ef346b1..b004a03 100644
--- a/ProofreadPage.php
+++ b/ProofreadPage.php
@@ -51,7 +51,7 @@
$wgAutoloadClasses['ProofreadPageDbConnector'] = $dir .
'includes/page/ProofreadPageDbConnector.php';
$wgAutoloadClasses['EditProofreadPagePage'] = $dir .
'includes/page/EditProofreadPagePage.php';
$wgAutoloadClasses['ProofreadPagePage'] =
$dir.'includes/page/ProofreadPagePage.php';
-$wgAutoloadClasses['ProofreadPageValue'] =
$dir.'includes/page/ProofreadPageValue.php';
+$wgAutoloadClasses['ProofreadPageContent'] =
$dir.'includes/page/ProofreadPageContent.php';
$wgExtensionCredits['other'][] = array(
'path' => __FILE__,
@@ -166,8 +166,13 @@
$wgHooks['UnitTestsList'][] = function( array &$files ) {
$dir = __DIR__ . '/tests/includes/';
+ $files[] = $dir . 'ProofreadPageTestCase.php';
+
$files[] = $dir . 'index/ProofreadIndexPageTest.php';
+ $files[] = $dir . 'page/ProofreadPagePageTest.php';
+ $files[] = $dir . 'page/ProofreadPageContentTest.php';
+
return true;
};
diff --git a/includes/page/ProofreadPageContent.php
b/includes/page/ProofreadPageContent.php
index 15a60f3..e758f81 100644
--- a/includes/page/ProofreadPageContent.php
+++ b/includes/page/ProofreadPageContent.php
@@ -55,7 +55,7 @@
* @param $level integer
* @param $proofreader User|string
*/
- public function __construct( $header = '', $body = '', $footer = '',
$level = 1, $proofreader = null ) {
+ public function __construct( $header = '', $body = '', $footer = '',
$level = 1, $proofreader = '' ) {
$this->setHeader( $header );
$this->setBody( $body );
$this->setFooter( $footer );
@@ -147,7 +147,7 @@
* Sets the last proofreader
* @param $proofreader User
*/
- public static function setProofreader( User $user ) {
+ public function setProofreader( User $user ) {
$this->proofreader = $user;
}
@@ -156,7 +156,7 @@
* @param $name string
* @throws MWException
*/
- public static function setProofreaderFromName( $name ) {
+ public function setProofreaderFromName( $name ) {
if ( $name === '' ) {
$this->proofreader = null;
} elseif ( IP::isValid( $name ) ) {
@@ -176,7 +176,7 @@
* @param $level integer
* @throws MWException
*/
- public static function setLevel( $level ) {
+ public function setLevel( $level ) {
if ( !is_integer( $level ) || $level < 0 || $level > 4 ) {
throw new MWException( 'level must be an integer
between 0 and 4.' );
}
@@ -198,31 +198,47 @@
return $text;
}
- /**
- * Parse a wikitext to setup the content of the ProofreadPageValue
- * @param $text string
- * @throws MWException
- */
public function unserialize( $text ) {
- if ( !preg_match(
'/^<noinclude>(.*?)<\/noinclude>(.*?)<noinclude>(.*?)<\/noinclude>$/s', $text,
$m ) ) {
+ if( preg_match(
'/^<noinclude>(.*?)\n\n\n<\/noinclude>(.*?)<noinclude>(.*?)<\/noinclude>$/s',
$text, $m ) ) {
+ $body = $m[2];
+ $footer = $this->cleanTrailingDivTag( $m[3] );
+ } elseif ( preg_match(
'/^<noinclude>(.*?)\n\n\n<\/noinclude>(.*?)$/s', $text, $m ) ) {
+ $footer = '';
+ $body = $this->cleanTrailingDivTag( $m[2] );
+ } else {
throw new MWException( 'The serialize value of the page
is not valid.' );
}
$header = $m[1];
- $this->setBody( $m[2] );
- $this->setFooter( $m[3] );
-
- //Extract quality
- if ( preg_match( '/^<pagequality level=\"(0|1|2|3|4)\"
user=\"(.*?)\" \/>(.*)$/', $header, $m ) ) {
- $this->setHeader( $m[3] );
- $this->setProofreaderFromName( $m[2] );
- $this->setLevel( inval( $m[1] ) );
- } elseif( preg_match(
'/^\{\{PageQuality\|(0|1|2|3|4)(|\|(.*?))\}\}(.*)/is', $header, $m ) ){
- $this->setHeader( $m[4] );
- $this->setProofreaderFromName( $m[3] );
- $this->setLevel( inval( $m[1] ) );
- } else {
- $this->setHeader( $header );
+ if ( preg_match( '/^<pagequality level="(0|1|2|3|4)"
user="(.*?)" \/>(.*?)$/s', $header, $m ) ) {
+ $level = intval( $m[1] );
+ $proofreader = $m[2];
+ $header = $this->cleanHeader( $m[3] );
+ } elseif( preg_match(
'/^\{\{PageQuality\|(0|1|2|3|4)(|\|(.*?))\}\}(.*)/is', $header, $m ) ) {
+ $level = intval( $m[1] );
+ $proofreader = $m[3];
+ $header = $this->cleanHeader( $m[4] );
}
+ $this->setHeader( $header );
+ $this->setBody( $body );
+ $this->setFooter( $footer );
+ $this->setLevel( $level );
+ $this->setProofreaderFromName( $proofreader );
+ }
+
+ public function cleanTrailingDivTag( $text ) {
+ if ( preg_match( '/^(.*?)<\/div>$/s', $text, $m2 ) ) {
+ return $m2[1];
+ } else {
+ return $text;
+ }
+ }
+ public function cleanHeader( $header ) {
+ if( preg_match('/^(.*?)<div class="pagetext">(.*?)$/s',
$header, $mt) ) {
+ $header = $mt[2];
+ } elseif ( preg_match('/^(.*?)<div>(.*?)$/s', $header, $mt) ) {
+ $header = $mt[2];
+ }
+ return $header;
}
/**
@@ -234,8 +250,8 @@
}
/**
- * Create a new ProofreadPageValue from a ProofreadIndexPage
- * @param $index ProofreadIndexPage
+ * Create a new ProofreadPageContent from a ProofreadIndexPage
+ * @param $text string
* @return ProofreadPageValue
*/
public static function newFromWikitext( $text ) {
diff --git a/includes/page/ProofreadPagePage.php
b/includes/page/ProofreadPagePage.php
index 509465c..004dc3c 100644
--- a/includes/page/ProofreadPagePage.php
+++ b/includes/page/ProofreadPagePage.php
@@ -71,15 +71,13 @@
* Returns number of the page in the file if it's a multi-page file or
null
* @return integer|null
*/
- protected function getPageNumber() {
+ public function getPageNumber() {
+ global $wgContLang;
$parts = explode( '/', $this->title->getText() );
if ( count( $parts ) === 1 ) {
return null;
}
$val = $wgContLang->parseFormattedNumber( $parts[count( $parts
) - 1] );
- if ( !is_integer( $val ) ) {
- return null;
- }
return (int) $val;
}
@@ -125,7 +123,7 @@
* Return content of the page
* @return ProofreadPageValue
*/
- protected function getContent() {
+ public function getContent() {
if ( $this->content === null ) {
$rev = Revision::newFromTitle( $this->title );
if ( $rev === null ) {
@@ -139,7 +137,7 @@
/**
* Return content of the page initialised for edition
- * @return ProofreadPageValue
+ * @return ProofreadPageContent
*/
public function getContentForEdition() {
global $wgContLang;
@@ -147,7 +145,7 @@
if ( $content->isEmpty() ) {
$index = $this->getIndex();
if ( $index ) {
- list( $header, $footer, $css, $editWidth ) =
$index->getIndexDataForPage();
+ list( $header, $footer, $css, $editWidth ) =
$index->getIndexDataForPage( $this->title );
$content->setHeader( $header );
$content->setFooter( $footer );
diff --git a/tests/includes/ProofreadPageTestCase.php
b/tests/includes/ProofreadPageTestCase.php
new file mode 100644
index 0000000..9081fe8
--- /dev/null
+++ b/tests/includes/ProofreadPageTestCase.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @group ProofreadPage
+ */
+abstract class ProofreadPageTestCase extends MediaWikiLangTestCase {
+ protected function setUp() {
+ global $wgProofreadPageNamespaceIds, $wgExtraNamespaces,
$wgNamespacesWithSubpages;
+ parent::setUp();
+
+ $wgProofreadPageNamespaceIds = array(
+ 'page' => 250,
+ 'index' => 252
+ );
+ $wgNamespacesWithSubpages[NS_MAIN] = true;
+ }
+}
\ No newline at end of file
diff --git a/tests/includes/index/ProofreadIndexPageTest.php
b/tests/includes/index/ProofreadIndexPageTest.php
index 15bbedd..70d263e 100644
--- a/tests/includes/index/ProofreadIndexPageTest.php
+++ b/tests/includes/index/ProofreadIndexPageTest.php
@@ -3,7 +3,7 @@
/**
* @group ProofreadPage
*/
-class ProofreadIndexPageTest extends MediaWikiLangTestCase {
+class ProofreadIndexPageTest extends ProofreadPageTestCase {
protected static $config = array(
'Title' => array(
@@ -62,17 +62,6 @@
'hidden' => true
),
);
-
- protected function setUp() {
- global $wgProofreadPageNamespaceIds, $wgExtraNamespaces,
$wgNamespacesWithSubpages;
- parent::setUp();
-
- $wgProofreadPageNamespaceIds = array(
- 'page' => 250,
- 'index' => 252
- );
- $wgNamespacesWithSubpages[NS_MAIN] = true;
- }
public function testNewFromTitle() {
$this->assertInstanceOf( 'ProofreadIndexPage',
ProofreadIndexPage::newFromTitle( Title::makeTitle( 252, 'Test.djvu' ) ) );
diff --git a/tests/includes/page/ProofreadPageContentTest.php
b/tests/includes/page/ProofreadPageContentTest.php
new file mode 100644
index 0000000..af70dc1
--- /dev/null
+++ b/tests/includes/page/ProofreadPageContentTest.php
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ * @group ProofreadPage
+ */
+class ProofreadPageContentTest extends ProofreadPageTestCase {
+
+ public function pageProvider() {
+ return array(
+ array( 'Experimental header', 'Experimental body',
'Experimental footer', 2, 'Woot' ),
+ array( 'Experimental header', 'Experimental body', '',
2, 'Woot')
+ );
+ }
+
+ public function stringProvider( ) {
+ return array(
+ array( 'Experimental header', 'Experimental body',
'Experimental footer', 2, 'Woot', '<noinclude>{{PageQuality|2|Woot}}<div
class="pagetext">Experimental header' . "\n\n\n" . '</noinclude>Experimental
body<noinclude>Experimental footer</div></noinclude>' ),
+ array( 'Experimental header', 'Experimental body', '',
2, 'Woot', '<noinclude>{{PageQuality|2|Woot}}<div>Experimental header' .
"\n\n\n" . '</noinclude>Experimental body</div>'),
+ array( 'Experimental header', 'Experimental body',
'Experimental footer', 2, 'Woot', '<noinclude><pagequality level="2"
user="Woot" /><div class="pagetext">Experimental header' . "\n\n\n" .
'</noinclude>Experimental body<noinclude>Experimental footer</div></noinclude>'
),
+ array( 'Experimental header', 'Experimental body', '',
2, 'Woot', '<noinclude><pagequality level="2" user="Woot" /><div>Experimental
header' . "\n\n\n" . '</noinclude>Experimental body</div>' )
+ );
+ }
+
+ public function nameProvider() {
+ return array(
+ array( 'WikiUser' ),
+ array( '' ),
+ array( '172.16.254.7' ),
+ array( '2001:odb8:ac10:fe10:00:00:00:00' )
+ );
+ }
+
+ public function testGetHeader() {
+ $header = "testString";
+ $pageContent = new ProofreadPageContent( $header );
+ $this->assertEquals( $header, $pageContent->getHeader() );
+ }
+
+ public function testGetFooter() {
+ $footer = "testString";
+ $pageContent = new ProofreadPageContent( '', '', $footer );
+ $this->assertEquals( $footer, $pageContent->getFooter() );
+ }
+
+ public function testGetBody() {
+ $body = "testString";
+ $pageContent = new ProofreadPageContent( '', $body );
+ $this->assertEquals( $body, $pageContent->getBody() );
+ }
+
+ public function testGetLevel() {
+ $level = 2;
+ $pageContent = new ProofreadPageContent( '', '', '', $level );
+ $this->assertEquals( $level,
$pageContent->getProofreadingLevels() );
+ }
+
+ public function testSetHeader() {
+ $header = "testString";
+ $pageContent = new ProofreadPageContent();
+ $pageContent->setHeader( $header );
+ $this->assertEquals( $header, $pageContent->getHeader() );
+ }
+
+ public function testSetFooter() {
+ $footer = "testString";
+ $pageContent = new ProofreadPageContent();
+ $pageContent->setFooter( $footer );
+ $this->assertEquals( $footer, $pageContent->getFooter() );
+ }
+
+ public function testSetBody() {
+ $body = "testString";
+ $pageContent = new ProofreadPageContent();
+ $pageContent->setBody( $body);
+ $this->assertEquals( $body, $pageContent->getBody() );
+ }
+
+ public function testSetLevel() {
+ $level = 3;
+ $pageContent = new ProofreadPageContent();
+ $pageContent->setLevel( $level );
+ $this->assertEquals( $level,
$pageContent->getProofreadingLevels() );
+ }
+
+ /**
+ * @dataProvider nameProvider
+ */
+ public function testSetProofreaderFromName( $name ) {
+ $pageContent = new ProofreadPageContent();
+ $pageContent->setProofreaderFromName( $name );
+ $this->assertEquals( $name, $pageContent->getProofreader() );
+ }
+
+ /**
+ * @expectedException Exception
+ */
+ public function testSetProofreaderFromNameException() {
+ $name = null;
+ $pageContent = new ProofreadPageContent();
+ $pageContent->setProofreaderFromName( $name );
+ $this->setExpectedException( 'Name is an invalid username.' );
+ }
+
+ /**
+ * @dataProvider pageProvider
+ */
+ public function testSerialize( $header, $body, $footer, $level,
$proofreader ) {
+ $pageContent = new ProofreadPageContent( $header, $body,
$footer, $level, $proofreader );
+ $serializedString = '<noinclude><pagequality level="' . $level
. '" user="';
+ $serializedString .= $proofreader;
+ $serializedString .= '" /><div class="pagetext">' . $header
."\n\n\n" . '</noinclude>';
+ $serializedString .= $body;
+ $serializedString .= '<noinclude>' . $footer .
'</div></noinclude>';
+ $this->assertEquals( $serializedString,
$pageContent->serialize() );
+ }
+
+ /**
+ * @dataProvider stringProvider
+ */
+ public function testUnserializeOldModel( $header, $body, $footer,
$level, $proofreader, $serializedString ) {
+ $refPageContent = new ProofreadPageContent( $header, $body,
$footer, $level, $proofreader );
+ $pageContent = new ProofreadPageContent();
+ $pageContent->unserialize( $serializedString );
+ $this->assertEquals( $pageContent, $refPageContent );
+ }
+
+ /**
+ * @dataProvider pageProvider
+ */
+ public function testUnserializeNewModel( $header, $body, $footer,
$level, $proofreader ) {
+ $refPageContent = new ProofreadPageContent( $header, $body,
$footer, $level, $proofreader );
+ $text = $refPageContent->serialize();
+ $pageContent = new ProofreadPageContent();
+ $pageContent->unserialize( $text );
+ $this->assertEquals( $pageContent, $refPageContent );
+ }
+
+ public function testNewFromWikiText() {
+ $text = '<noinclude>{{PageQuality|2|Woot}}<div>Experimental
header' . "\n\n\n" . '</noinclude>Experimental
body<noinclude></div></noinclude>';
+ $pageContent = ProofreadPageContent::newFromWikitext( $text );
+ $this->assertInstanceOf( 'ProofreadPageContent', $pageContent );
+ }
+}
\ No newline at end of file
diff --git a/tests/includes/page/ProofreadPagePageTest.php
b/tests/includes/page/ProofreadPagePageTest.php
new file mode 100644
index 0000000..3f15ac7
--- /dev/null
+++ b/tests/includes/page/ProofreadPagePageTest.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @group ProofreadPage
+ */
+class ProofreadPagePageTest extends ProofreadPageTestCase {
+
+ public function testNewFromTitle() {
+ $this->assertInstanceOf( 'ProofreadPagePage',
ProofreadPagePage::newFromTitle( Title::makeTitle( 250, 'Test.djvu' ) ) );
+ }
+
+ public function testGetTitle() {
+ $title = Title::makeTitle( 250, 'Test.djvu' );
+ $page = ProofreadPagePage::newFromTitle( $title );
+ $this->assertEquals( $title, $page->getTitle() );
+ }
+
+ public function testGetPageNumber() {
+ $title = Title::makeTitle( 252, 'Test.djvu' );
+ $page = ProofreadPagePage::newFromTitle( Title::makeTitle( 252,
'Test.djvu/1' ) );
+ $this->assertEquals( 1, $page->getPageNumber() );
+
+ $page = new ProofreadPagePage( $title, null, null );
+ $this->assertEquals( null, $page->getPageNumber() );
+ }
+
+ public function testGetIndex() {
+ $title = Title::makeTitle( 250, 'Test.djvu' );
+ $index = ProofreadIndexPage::newFromTitle( $title );
+ $page = new ProofreadPagePage( $title, null, $index );
+ $this->assertEquals( $index, $page->getIndex() );
+ }
+
+ public function testGetContent() {
+ $title = Title::makeTitle( 250, 'Test.djvu' );
+ $index = ProofreadIndexPage::newFromTitle( $title );
+ $pageContent = new ProofreadPageContent();
+ $page = new ProofreadPagePage( $title, $pageContent, $index );
+ $this->assertEquals( $pageContent, $page->getContent() );
+ }
+
+}
--
To view, visit https://gerrit.wikimedia.org/r/71172
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic80a32efc181c2b9b963653bdf2fbced56576706
Gerrit-PatchSet: 30
Gerrit-Project: mediawiki/extensions/ProofreadPage
Gerrit-Branch: pagePagesRefactoring
Gerrit-Owner: Rtdwivedi <[email protected]>
Gerrit-Reviewer: Rtdwivedi <[email protected]>
Gerrit-Reviewer: Tpt <[email protected]>
Gerrit-Reviewer: Zaran <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits