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

Reply via email to