From ba9015b07d229ba195e7a9a3f23c3b038374c88c Mon Sep 17 00:00:00 2001 From: Klap-in Date: Tue, 21 May 2013 21:32:54 +0200 Subject: tests for fetch.php of external files --- .../lib/exe/fetch_statuscodes_external.test.php | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 _test/tests/lib/exe/fetch_statuscodes_external.test.php (limited to '_test') diff --git a/_test/tests/lib/exe/fetch_statuscodes_external.test.php b/_test/tests/lib/exe/fetch_statuscodes_external.test.php new file mode 100644 index 000000000..1a2164828 --- /dev/null +++ b/_test/tests/lib/exe/fetch_statuscodes_external.test.php @@ -0,0 +1,116 @@ +markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug'); + } else { + header_remove('X-Test'); + } + + parent::setUp(); + + global $conf; + $conf['fetchsize'] = 500*1024; //500kb + $conf['xsendfile'] = 0; + + global $MIME, $EXT, $CACHE, $INPUT; // variables fetch creates in global scope -- should this be in fetch? + } + + function getUri($hash=null) { + $w = $this->width ? 'w='.$this->width.'&' : ''; + $h = $this->height ? 'h='.$this->height.'&' : ''; + if($hash === null) { + $hash = 'hash='.substr(md5(auth_cookiesalt().$this->media), 0, 6).'&'; + } + + return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media); + } + + function fetchResponse($token, $hash=null){ + $request = new TestRequest(); + return $request->get(array(),str_replace('{%token%}',$token,$this->getUri($hash))); + } + + /** + * modified image request with invalid hash + * expect: 412 status code + */ + function test_invalid_hash() { + $invalid_hash = 'hash='.substr(md5(auth_cookiesalt().'junk'), 0, 6).'&'; + $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; + + $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode()); + + } + + /** + * modified image request with valid token + * expect: header with mime-type + * expect: content + * expect: no error response + */ + function test_valid_token(){ + $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; + + $response = $this->fetchResponse($valid_token); + $this->assertTrue((bool)$response->getHeader('Content-Type')); + $this->assertTrue((bool)($response->getContent())); + + $status_code = $response->getStatusCode(); + $this->assertTrue(is_null($status_code) || (200 == $status_code)); + } + + /** + * modified image request with invalid token + * expect: 412 status code + */ + function test_invalid_token(){ + $invalid_token = 'tok='.media_get_token('junk',200,100).'&'; + $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode()); + } + + /** + * modified image request with no token + * expect: 412 status code + */ + function test_missing_token(){ + $no_token = ''; + $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode()); + } + + /** + * native image request which doesn't require a token + * try: with a token & without a token + * expect: (for both) header with mime-type, content matching source image filesize & no error response + */ + function test_no_token_required(){ + $this->width = $this->height = 0; // no width & height, means image request at native dimensions + $any_token = 'tok='.media_get_token('junk',200,100).'&'; + $no_token = ''; + $file = media_get_from_URL($this->media,'png', -1); + $bytes = filesize($file); + + foreach(array($any_token, $no_token) as $token) { + $response = $this->fetchResponse($token); + $this->assertTrue((bool)$response->getHeader('Content-Type')); + $this->assertEquals(strlen($response->getContent()), $bytes); + + $status_code = $response->getStatusCode(); + $this->assertTrue(is_null($status_code) || (200 == $status_code)); + } + } + +} +//Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From a38a6f25d7e46f47a8f358bb16c766f5b96dae45 Mon Sep 17 00:00:00 2001 From: Klap-in Date: Tue, 21 May 2013 21:41:40 +0200 Subject: fix some minor typos in fetch_imagetoken.test.php --- _test/tests/lib/exe/fetch_imagetoken.test.php | 44 +++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to '_test') diff --git a/_test/tests/lib/exe/fetch_imagetoken.test.php b/_test/tests/lib/exe/fetch_imagetoken.test.php index 9e5b6e4a2..99e642557 100644 --- a/_test/tests/lib/exe/fetch_imagetoken.test.php +++ b/_test/tests/lib/exe/fetch_imagetoken.test.php @@ -23,10 +23,10 @@ class fetch_imagetoken_test extends DokuWikiTest { parent::setUp(); global $conf; - $conf['sendfile'] = 0; + $conf['xsendfile'] = 0; global $MIME, $EXT, $CACHE, $INPUT; // variables fetch creates in global scope -- should this be in fetch? - } + } function getUri() { $w = $this->width ? 'w='.$this->width.'&' : ''; @@ -39,14 +39,14 @@ class fetch_imagetoken_test extends DokuWikiTest { $request = new TestRequest(); return $request->get(array(),str_replace('{%token%}',$token,$this->getUri())); } - - /** + + /** * modified image request with valid token * expect: header with mime-type * expect: content * expect: no error response - */ - function test_valid_token(){ + */ + function test_valid_token(){ $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; $response = $this->fetchResponse($valid_token); $this->assertTrue((bool)$response->getHeader('Content-Type')); @@ -54,24 +54,24 @@ class fetch_imagetoken_test extends DokuWikiTest { $status_code = $response->getStatusCode(); $this->assertTrue(is_null($status_code) || (200 == $status_code)); - } - - /** + } + + /** * modified image request with invalid token - * expect: 412 status code - */ - function test_invalid_token(){ - $invalid_token = 'tok='.media_get_token('junk',200,100).'&'; - $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode()); - } - - /** - * modified image request with no token * expect: 412 status code - */ - function test_missing_token(){ - $no_token = ''; - $this->assertEquals(412,$this->fetchResponse($notoken)->getStatusCode()); + */ + function test_invalid_token(){ + $invalid_token = 'tok='.media_get_token('junk',200,100).'&'; + $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode()); + } + + /** + * modified image request with no token + * expect: 412 status code + */ + function test_missing_token(){ + $no_token = ''; + $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode()); } /** -- cgit v1.2.3 From fa3ed26bfbafa4d05ec77a799259d4a46baadd9a Mon Sep 17 00:00:00 2001 From: Klap-in Date: Sun, 9 Jun 2013 22:16:08 +0200 Subject: update hashes in tests --- _test/tests/lib/exe/fetch_statuscodes_external.test.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to '_test') diff --git a/_test/tests/lib/exe/fetch_statuscodes_external.test.php b/_test/tests/lib/exe/fetch_statuscodes_external.test.php index 1a2164828..bd7b2f93b 100644 --- a/_test/tests/lib/exe/fetch_statuscodes_external.test.php +++ b/_test/tests/lib/exe/fetch_statuscodes_external.test.php @@ -32,9 +32,8 @@ class fetch_statuscodes_external_test extends DokuWikiTest { $w = $this->width ? 'w='.$this->width.'&' : ''; $h = $this->height ? 'h='.$this->height.'&' : ''; if($hash === null) { - $hash = 'hash='.substr(md5(auth_cookiesalt().$this->media), 0, 6).'&'; + $hash = 'hash='.substr(PassHash::hmac('md5', $this->media, auth_cookiesalt()), 0, 6).'&'; } - return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media); } @@ -48,7 +47,7 @@ class fetch_statuscodes_external_test extends DokuWikiTest { * expect: 412 status code */ function test_invalid_hash() { - $invalid_hash = 'hash='.substr(md5(auth_cookiesalt().'junk'), 0, 6).'&'; + $invalid_hash = 'hash='.substr(PassHash::hmac('md5', 'junk', auth_cookiesalt()), 0, 6).'&'; $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode()); -- cgit v1.2.3 From 3fc4f82997eb93a407074db4473cade1a76b6971 Mon Sep 17 00:00:00 2001 From: Klap-in Date: Sat, 20 Jul 2013 01:28:07 +0200 Subject: Added tests for getRevisions and getRevisionInfo from page changelog --- _test/data/meta/mailinglist.changes | 24 +++ _test/data/pages/mailinglist.txt | 11 ++ .../tests/inc/changelog_getRevisionInfo.class.php | 120 +++++++++++++ _test/tests/inc/changelog_getRevisions.class.php | 200 +++++++++++++++++++++ 4 files changed, 355 insertions(+) create mode 100644 _test/data/meta/mailinglist.changes create mode 100644 _test/data/pages/mailinglist.txt create mode 100644 _test/tests/inc/changelog_getRevisionInfo.class.php create mode 100644 _test/tests/inc/changelog_getRevisions.class.php (limited to '_test') diff --git a/_test/data/meta/mailinglist.changes b/_test/data/meta/mailinglist.changes new file mode 100644 index 000000000..348f8258f --- /dev/null +++ b/_test/data/meta/mailinglist.changes @@ -0,0 +1,24 @@ +1360110636 127.0.0.1 C mailinglist pubcie aangemaakt +1361901536 127.0.0.1 E mailinglist pubcie +1362524799 127.0.0.1 E mailinglist pubcie +1362525145 127.0.0.1 E mailinglist pubcie +1362525359 127.0.0.1 E mailinglist pubcie [Data entry] +1362525899 127.0.0.1 E mailinglist pubcie [Data entry] +1362525926 127.0.0.1 E mailinglist pubcie +1362526039 127.0.0.1 E mailinglist pubcie [Data entry] +1362526119 127.0.0.1 E mailinglist pubcie +1362526167 127.0.0.1 E mailinglist pubcie [Data entry] +1362526767 127.0.0.1 E mailinglist pubcie [Data entry] +1362526861 127.0.0.1 E mailinglist pubcie [Data entry] +1362527046 127.0.0.1 E mailinglist pubcie [Data entry] +1362527164 127.0.0.1 E mailinglist pubcie [Data entry] +1363436892 127.0.0.1 E mailinglist pubcie +1368575634 127.0.0.1 E mailinglist pubcie +1368609772 127.0.0.1 E mailinglist pubcie +1368612506 127.0.0.1 E mailinglist pubcie [Data entry] +1368612599 127.0.0.1 E mailinglist pubcie [Data entry] +1368622152 127.0.0.1 E mailinglist pubcie [Data entry] +1368622195 127.0.0.1 E mailinglist pubcie +1368622240 127.0.0.1 E mailinglist pubcie [Data entry] +1371579614 127.0.0.1 E mailinglist pubcie +1374261194 127.0.0.1 E mailinglist pubcie diff --git a/_test/data/pages/mailinglist.txt b/_test/data/pages/mailinglist.txt new file mode 100644 index 000000000..3fbe91b67 --- /dev/null +++ b/_test/data/pages/mailinglist.txt @@ -0,0 +1,11 @@ +====== Mailing Lists ====== + +[[DokuWiki]]'s development is coordinated through multiple Mailinglists hosted by [[http://www.freelists.org|freelists.org]]. + +===== Using the lists ===== + +First you should subscribe to one or several of the mailing lists presented below. After subscribing you can send emails to the list(s) by using the mailing list address stated in its description. If you rather want to use the mailing list through a news group interface, please read the section [[#News group interface]]. + +If you are new to mailing lists in general, please read [[rfc>1855|RFC 1855 - Netiquette Guidelines]], especially the sections 3.1.1 and 3.1.2. Before you ask any questions you should also have a look at [[http://www.catb.org/~esr/faqs/smart-questions.html|How To Ask Questions The Smart Way]]. + +:!: Please note that these documents are linked here solely for the purpose of information. Their respective authors have nothing do to with [[DokuWiki]] and in **no case** should you send email to them, asking for help related to [[DokuWiki]]! diff --git a/_test/tests/inc/changelog_getRevisionInfo.class.php b/_test/tests/inc/changelog_getRevisionInfo.class.php new file mode 100644 index 000000000..9637d21c8 --- /dev/null +++ b/_test/tests/inc/changelog_getRevisionInfo.class.php @@ -0,0 +1,120 @@ +assertEquals($revsexpected, $revs); + } + + /** + * request existing rev + */ + function test_requestrev() { + $rev = 1362525899; + $infoexpected = parseChangelogLine($this->logline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + //returns cached value + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request existing rev with chucked reading + */ + function test_requestrev_chuncked() { + $rev = 1362525899; + $infoexpected = parseChangelogLine($this->logline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 512, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request current version + */ + function test_requestrecentestlogline() { + $rev = 1374261194; + $infoexpected = parseChangelogLine($this->firstlogline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + //returns cached value + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request current version, with chuncked reading + */ + function test_requestrecentestlogline_chuncked() { + $rev = 1374261194; + $infoexpected = parseChangelogLine($this->firstlogline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 512, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request negative revision + */ + function test_negativerev() { + $rev = -10; + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals(false, $info); + } + + /** + * request non existing revision somewhere between existing revisions + */ + function test_notexistingrev() { + $rev = 1362525890; + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals(false, $info); + } + + /** + * sometimes chuncksize is set to true + */ + function test_chuncksizetrue() { + $rev = 1362525899; + $infoexpected = parseChangelogLine($this->logline); + + $info = getRevisionInfo($this->pageid, $rev, true); + $this->assertEquals($infoexpected, $info); + } +} \ No newline at end of file diff --git a/_test/tests/inc/changelog_getRevisions.class.php b/_test/tests/inc/changelog_getRevisions.class.php new file mode 100644 index 000000000..a9be26dae --- /dev/null +++ b/_test/tests/inc/changelog_getRevisions.class.php @@ -0,0 +1,200 @@ +assertEquals($revsexpected, $revs); + } + + /** + * request first recentest revision + * (so skips first line which belongs to the current existing page) + */ + function test_requestlastrev() { + $first = 0; + $num = 1; + $revsexpected = array($this->revsexpected[1]); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * request first recentest revision + * (so skips first line which belongs to the current existing page) + */ + function test_requestonebutlastrev() { + $first = 1; + $num = 1; + $revsexpected = array($this->revsexpected[2]); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * request first recentest revision + * (so skips first line of current existing page) + */ + function test_requestrevswithoffset() { + $first = 10; + $num = 5; + $revsexpected = array_slice($this->revsexpected, $first + 1, $num); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * first = -1 requests recentest logline, without skipping + */ + function test_requestrecentestlogline() { + $first = -1; + $num = 1; + $revsexpected = array($this->revsexpected[0]); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * chunck size = 0 skips chuncked loading + */ + function test_wholefile() { + $first = 0; + $num = 1000; + $revsexpected = array_slice($this->revsexpected, 1); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 0, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * Negative range returns no result + */ + function test_negativenum() { + $first = 0; + $num = -10; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * Negative range returns no result + */ + function test_negativennumoffset() { + $first = 2; + $num = -10; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * zero range returns no result + */ + function test_zeronum() { + $first = 5; + $num = 0; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * get oldest revisions + */ + function test_requestlargeoffset() { + $first = 22; + $num = 50; + $revsexpected = array_slice($this->revsexpected, $first + 1); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * request with too large offset and range + */ + function test_requesttoolargenumberrevs() { + $first = 50; + $num = 50; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + } + +} \ No newline at end of file -- cgit v1.2.3 From 51bd6f039e782dca456022514893aa80bd7c52b9 Mon Sep 17 00:00:00 2001 From: Klap-in Date: Sat, 20 Jul 2013 02:31:50 +0200 Subject: Fixed file names of test classes --- .../tests/inc/changelog_getRevisionInfo.class.php | 120 ------------- _test/tests/inc/changelog_getRevisions.class.php | 200 --------------------- _test/tests/inc/changelog_getrevisioninfo.test.php | 120 +++++++++++++ _test/tests/inc/changelog_getrevisions.test.php | 200 +++++++++++++++++++++ 4 files changed, 320 insertions(+), 320 deletions(-) delete mode 100644 _test/tests/inc/changelog_getRevisionInfo.class.php delete mode 100644 _test/tests/inc/changelog_getRevisions.class.php create mode 100644 _test/tests/inc/changelog_getrevisioninfo.test.php create mode 100644 _test/tests/inc/changelog_getrevisions.test.php (limited to '_test') diff --git a/_test/tests/inc/changelog_getRevisionInfo.class.php b/_test/tests/inc/changelog_getRevisionInfo.class.php deleted file mode 100644 index 9637d21c8..000000000 --- a/_test/tests/inc/changelog_getRevisionInfo.class.php +++ /dev/null @@ -1,120 +0,0 @@ -assertEquals($revsexpected, $revs); - } - - /** - * request existing rev - */ - function test_requestrev() { - $rev = 1362525899; - $infoexpected = parseChangelogLine($this->logline); - - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); - $this->assertEquals($infoexpected, $info); - //returns cached value - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); - $this->assertEquals($infoexpected, $info); - } - - /** - * request existing rev with chucked reading - */ - function test_requestrev_chuncked() { - $rev = 1362525899; - $infoexpected = parseChangelogLine($this->logline); - - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 512, $media = false); - $this->assertEquals($infoexpected, $info); - } - - /** - * request current version - */ - function test_requestrecentestlogline() { - $rev = 1374261194; - $infoexpected = parseChangelogLine($this->firstlogline); - - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); - $this->assertEquals($infoexpected, $info); - //returns cached value - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); - $this->assertEquals($infoexpected, $info); - } - - /** - * request current version, with chuncked reading - */ - function test_requestrecentestlogline_chuncked() { - $rev = 1374261194; - $infoexpected = parseChangelogLine($this->firstlogline); - - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 512, $media = false); - $this->assertEquals($infoexpected, $info); - } - - /** - * request negative revision - */ - function test_negativerev() { - $rev = -10; - - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); - $this->assertEquals(false, $info); - } - - /** - * request non existing revision somewhere between existing revisions - */ - function test_notexistingrev() { - $rev = 1362525890; - - $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); - $this->assertEquals(false, $info); - } - - /** - * sometimes chuncksize is set to true - */ - function test_chuncksizetrue() { - $rev = 1362525899; - $infoexpected = parseChangelogLine($this->logline); - - $info = getRevisionInfo($this->pageid, $rev, true); - $this->assertEquals($infoexpected, $info); - } -} \ No newline at end of file diff --git a/_test/tests/inc/changelog_getRevisions.class.php b/_test/tests/inc/changelog_getRevisions.class.php deleted file mode 100644 index a9be26dae..000000000 --- a/_test/tests/inc/changelog_getRevisions.class.php +++ /dev/null @@ -1,200 +0,0 @@ -assertEquals($revsexpected, $revs); - } - - /** - * request first recentest revision - * (so skips first line which belongs to the current existing page) - */ - function test_requestlastrev() { - $first = 0; - $num = 1; - $revsexpected = array($this->revsexpected[1]); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * request first recentest revision - * (so skips first line which belongs to the current existing page) - */ - function test_requestonebutlastrev() { - $first = 1; - $num = 1; - $revsexpected = array($this->revsexpected[2]); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * request first recentest revision - * (so skips first line of current existing page) - */ - function test_requestrevswithoffset() { - $first = 10; - $num = 5; - $revsexpected = array_slice($this->revsexpected, $first + 1, $num); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * first = -1 requests recentest logline, without skipping - */ - function test_requestrecentestlogline() { - $first = -1; - $num = 1; - $revsexpected = array($this->revsexpected[0]); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * chunck size = 0 skips chuncked loading - */ - function test_wholefile() { - $first = 0; - $num = 1000; - $revsexpected = array_slice($this->revsexpected, 1); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 0, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * Negative range returns no result - */ - function test_negativenum() { - $first = 0; - $num = -10; - $revsexpected = array(); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * Negative range returns no result - */ - function test_negativennumoffset() { - $first = 2; - $num = -10; - $revsexpected = array(); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * zero range returns no result - */ - function test_zeronum() { - $first = 5; - $num = 0; - $revsexpected = array(); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * get oldest revisions - */ - function test_requestlargeoffset() { - $first = 22; - $num = 50; - $revsexpected = array_slice($this->revsexpected, $first + 1); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - } - - /** - * request with too large offset and range - */ - function test_requesttoolargenumberrevs() { - $first = 50; - $num = 50; - $revsexpected = array(); - - $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); - $this->assertEquals($revsexpected, $revs); - } - -} \ No newline at end of file diff --git a/_test/tests/inc/changelog_getrevisioninfo.test.php b/_test/tests/inc/changelog_getrevisioninfo.test.php new file mode 100644 index 000000000..9637d21c8 --- /dev/null +++ b/_test/tests/inc/changelog_getrevisioninfo.test.php @@ -0,0 +1,120 @@ +assertEquals($revsexpected, $revs); + } + + /** + * request existing rev + */ + function test_requestrev() { + $rev = 1362525899; + $infoexpected = parseChangelogLine($this->logline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + //returns cached value + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request existing rev with chucked reading + */ + function test_requestrev_chuncked() { + $rev = 1362525899; + $infoexpected = parseChangelogLine($this->logline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 512, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request current version + */ + function test_requestrecentestlogline() { + $rev = 1374261194; + $infoexpected = parseChangelogLine($this->firstlogline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + //returns cached value + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request current version, with chuncked reading + */ + function test_requestrecentestlogline_chuncked() { + $rev = 1374261194; + $infoexpected = parseChangelogLine($this->firstlogline); + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 512, $media = false); + $this->assertEquals($infoexpected, $info); + } + + /** + * request negative revision + */ + function test_negativerev() { + $rev = -10; + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals(false, $info); + } + + /** + * request non existing revision somewhere between existing revisions + */ + function test_notexistingrev() { + $rev = 1362525890; + + $info = getRevisionInfo($this->pageid, $rev, $chunk_size = 8192, $media = false); + $this->assertEquals(false, $info); + } + + /** + * sometimes chuncksize is set to true + */ + function test_chuncksizetrue() { + $rev = 1362525899; + $infoexpected = parseChangelogLine($this->logline); + + $info = getRevisionInfo($this->pageid, $rev, true); + $this->assertEquals($infoexpected, $info); + } +} \ No newline at end of file diff --git a/_test/tests/inc/changelog_getrevisions.test.php b/_test/tests/inc/changelog_getrevisions.test.php new file mode 100644 index 000000000..a9be26dae --- /dev/null +++ b/_test/tests/inc/changelog_getrevisions.test.php @@ -0,0 +1,200 @@ +assertEquals($revsexpected, $revs); + } + + /** + * request first recentest revision + * (so skips first line which belongs to the current existing page) + */ + function test_requestlastrev() { + $first = 0; + $num = 1; + $revsexpected = array($this->revsexpected[1]); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * request first recentest revision + * (so skips first line which belongs to the current existing page) + */ + function test_requestonebutlastrev() { + $first = 1; + $num = 1; + $revsexpected = array($this->revsexpected[2]); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * request first recentest revision + * (so skips first line of current existing page) + */ + function test_requestrevswithoffset() { + $first = 10; + $num = 5; + $revsexpected = array_slice($this->revsexpected, $first + 1, $num); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * first = -1 requests recentest logline, without skipping + */ + function test_requestrecentestlogline() { + $first = -1; + $num = 1; + $revsexpected = array($this->revsexpected[0]); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * chunck size = 0 skips chuncked loading + */ + function test_wholefile() { + $first = 0; + $num = 1000; + $revsexpected = array_slice($this->revsexpected, 1); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 0, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * Negative range returns no result + */ + function test_negativenum() { + $first = 0; + $num = -10; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * Negative range returns no result + */ + function test_negativennumoffset() { + $first = 2; + $num = -10; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * zero range returns no result + */ + function test_zeronum() { + $first = 5; + $num = 0; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 512, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * get oldest revisions + */ + function test_requestlargeoffset() { + $first = 22; + $num = 50; + $revsexpected = array_slice($this->revsexpected, $first + 1); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + } + + /** + * request with too large offset and range + */ + function test_requesttoolargenumberrevs() { + $first = 50; + $num = 50; + $revsexpected = array(); + + $revs = getRevisions($this->pageid, $first, $num, $chunk_size = 8192, $media = false); + $this->assertEquals($revsexpected, $revs); + } + +} \ No newline at end of file -- cgit v1.2.3 From 5f0edceddab88f91bec7fecf5efa606bbe273fb2 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Tue, 30 Jul 2013 10:15:57 +0200 Subject: added test case for FS#1442 --- _test/tests/inc/tar.test.php | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php index 90bc2e49e..28e709cc3 100644 --- a/_test/tests/inc/tar.test.php +++ b/_test/tests/inc/tar.test.php @@ -248,6 +248,28 @@ class Tar_TestCase extends DokuWikiTest { } } + // FS#1442 + public function test_createlongfile() { + $tar = new Tar(); + $tmp = tempnam(sys_get_temp_dir(), 'dwtartest'); + + $path = '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt'; + + $tar->create($tmp, Tar::COMPRESS_NONE); + $tar->addData($path, 'testcontent1'); + $tar->close(); + + $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number + $data = file_get_contents($tmp); + + // We should find the complete path and a longlink entry + $this->assertTrue(strpos($data, 'testcontent1') !== false, 'content in TAR'); + $this->assertTrue(strpos($data, $path) !== false, 'path in TAR'); + $this->assertTrue(strpos($data, '@LongLink') !== false, '@LongLink in TAR'); + + @unlink($tmp); + } + public function test_createlongpathustar() { $tar = new Tar(); $tmp = tempnam(sys_get_temp_dir(), 'dwtartest'); @@ -360,4 +382,4 @@ class Tar_TestCase extends DokuWikiTest { $this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks } -} \ No newline at end of file +} -- cgit v1.2.3 From f2bbf30b71b15efa7a918944b4ffc74f8b1747a9 Mon Sep 17 00:00:00 2001 From: Guy Brand Date: Wed, 31 Jul 2013 11:38:44 +0200 Subject: Simple test cases for code and file token fix --- _test/tests/inc/parser/parser_code.test.php | 56 +++++++++++++++++++++++++++++ _test/tests/inc/parser/parser_file.test.php | 28 +++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 _test/tests/inc/parser/parser_code.test.php create mode 100644 _test/tests/inc/parser/parser_file.test.php (limited to '_test') diff --git a/_test/tests/inc/parser/parser_code.test.php b/_test/tests/inc/parser/parser_code.test.php new file mode 100644 index 000000000..4f89b4826 --- /dev/null +++ b/_test/tests/inc/parser/parser_code.test.php @@ -0,0 +1,56 @@ +P->addMode('code',new Doku_Parser_Mode_Code()); + } + + function testCode() { + $this->P->parse('Foo Test Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo ')), + array('p_close',array()), + array('code',array('Test',null,null)), + array('p_open',array()), + array('cdata',array(' Bar')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testCodeBash() { + $this->P->parse('Foo Test Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo ')), + array('p_close',array()), + array('code',array('Test','bash',null)), + array('p_open',array()), + array('cdata',array(' Bar')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testCodeToken() { + $this->P->parse('Foo BarTest'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo Bar')), + array('p_close',array()), + array('code',array('Test',null,null)), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } +} + diff --git a/_test/tests/inc/parser/parser_file.test.php b/_test/tests/inc/parser/parser_file.test.php new file mode 100644 index 000000000..924b00382 --- /dev/null +++ b/_test/tests/inc/parser/parser_file.test.php @@ -0,0 +1,28 @@ +P->addMode('file',new Doku_Parser_Mode_File()); + } + + function testFile() { + $this->P->parse('Foo Test Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo ')), + array('p_close',array()), + array('file',array('Test',null,null)), + array('p_open',array()), + array('cdata',array(' Bar')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + +} + -- cgit v1.2.3 From b25974c4272787f8c66d36398d9578e630888451 Mon Sep 17 00:00:00 2001 From: Guy Brand Date: Wed, 31 Jul 2013 12:31:35 +0200 Subject: Fixed instructions on PHPunit --- _test/README | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to '_test') diff --git a/_test/README b/_test/README index a4206f489..5220248b2 100644 --- a/_test/README +++ b/_test/README @@ -1,6 +1,6 @@ ====== DokuWiki Test Suite ====== -This is the test suit to automatically test various parts of DokuWiki. +This is the test suite to automatically test various parts of DokuWiki. ===== Requirements ===== @@ -9,22 +9,33 @@ This is the test suit to automatically test various parts of DokuWiki. ===== PHPUnit Installation ====== -via PEAR: +==== via PEAR installer ==== pear config-set auto_discover 1 - pear upgrade pear install pear.phpunit.de/PHPUnit -on Windows: +==== via Composer ==== - FIXME +Include a composer.json file in your project, which can be as minimal as: + + +{ + "require-dev": { + "phpunit/phpunit": "3.7.*" + } +} + + +==== via PHP archive (PHAR) ==== + +Download http://pear.phpunit.de/get/phpunit.phar and make it executable on your system. -===== Running all Tests ===== +===== Running all tests ===== Just change to the ''_test'' directory and run phpunit: - cd _testing/ + cd _test/ phpunit PHPUnit will fail on some systems with a //headers already sent// error. -- cgit v1.2.3 From 07ff0babae240ba072a3bc8b83a989c4305c24cd Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Wed, 31 Jul 2013 17:20:00 +0200 Subject: Fix the useheading cache invalidation for hidden pages, add tests This adds a new parameter to ft_backlinks() to ignore permissions which is needed for invalidating the cache of linking pages with useheading enabled. This also adds various test cases for ft_backlinks(). --- _test/tests/inc/fulltext_backlinks.test.php | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 _test/tests/inc/fulltext_backlinks.test.php (limited to '_test') diff --git a/_test/tests/inc/fulltext_backlinks.test.php b/_test/tests/inc/fulltext_backlinks.test.php new file mode 100644 index 000000000..058e13498 --- /dev/null +++ b/_test/tests/inc/fulltext_backlinks.test.php @@ -0,0 +1,77 @@ + + */ +class fultext_backlinks_test extends DokuWikiTest { + + public function test_internallink() { + saveWikiText('test:internallinks', '[[internälLink]] [[..:internal link]]', 'Test initialization'); + idx_addPage('test:internallinks'); + + $this->assertEquals(array('test:internallinks'), ft_backlinks('internal_link')); + $this->assertEquals(array('test:internallinks'), ft_backlinks('test:internaellink')); + } + + public function test_links_in_footnotes() { + saveWikiText('test:link_footnotes', '(([[footnote]] [[:foÖtnotel]]))', 'Test initialization'); + idx_addPage('test:link_footnotes'); + + $this->assertEquals(array('test:link_footnotes'), ft_backlinks('test:footnote')); + $this->assertEquals(array('test:link_footnotes'), ft_backlinks('fooetnotel')); + } + + public function test_links_in_hidden_pages() { + global $conf; + $conf['hidepages'] = 'hidden:.*'; + saveWikiText('hidden:links', '[[wiki:hiddenlink|linktitle]]', 'Test initialization'); + idx_addPage('hidden:links'); + saveWikiText('visible:links', '[[wiki:hiddenlink]]', 'Test initialization'); + idx_addPage('visible:links'); + + $this->assertEquals(array('visible:links'), ft_backlinks('wiki:hiddenlink')); + $this->assertEquals(array('visible:links'), ft_backlinks('wiki:hiddenlink', false)); + $this->assertEquals(array('hidden:links', 'visible:links'), ft_backlinks('wiki:hiddenlink', true)); + } + + public function test_links_in_protected_pages() { + global $conf; + global $AUTH_ACL; + $conf['superuser'] = 'alice'; + $conf['useacl'] = 1; + + $AUTH_ACL = array( + '* @ALL 8', + 'secret:* @ALL 0', + ); + + $_SERVER['REMOTE_USER'] = 'eve'; + + saveWikiText('secret:links', '[[wiki:secretlink]]', 'Test initialization'); + idx_addPage('secret:links'); + saveWikiText('public:links', '[[wiki:secretlink]]', 'Test initialization'); + idx_addPage('public:links'); + + $this->assertEquals(array('public:links'), ft_backlinks('wiki:secretlink')); + $this->assertEquals(array('public:links'), ft_backlinks('wiki:secretlink', false)); + $this->assertEquals(array('public:links', 'secret:links'), ft_backlinks('wiki:secretlink', true)); + } + + public function test_links_in_deleted_pages() { + saveWikiText('test:internallinks', '[[internallink]] [[..:internal link]]', 'Test initialization'); + idx_addPage('test:internallinks'); + + $this->assertEquals(array('test:internallinks'), ft_backlinks('test:internallink')); + $this->assertEquals(array('test:internallinks'), ft_backlinks('internal_link')); + + saveWikiText('test:internallinks', '', 'Deleted'); + + $this->assertEquals(array(), ft_backlinks('test:internallink')); + $this->assertEquals(array(), ft_backlinks('internal_link')); + } +} -- cgit v1.2.3 From 020ea9e10577217f17372cb6510d872f9a5c647c Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Wed, 31 Jul 2013 18:15:57 +0200 Subject: unit tests for self deleting of user accounts --- _test/tests/inc/auth_deleteprofile.test.php | 179 ++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 _test/tests/inc/auth_deleteprofile.test.php (limited to '_test') diff --git a/_test/tests/inc/auth_deleteprofile.test.php b/_test/tests/inc/auth_deleteprofile.test.php new file mode 100644 index 000000000..dc38fcd16 --- /dev/null +++ b/_test/tests/inc/auth_deleteprofile.test.php @@ -0,0 +1,179 @@ +cando['delUser'] = $canDeleteUser; + } + + public function checkPass($user, $pass) { + return $pass == 'password'; + } + + public function deleteUsers($users) { + return in_array($_SERVER['REMOTE_USER'], $users); + } + + public function logoff() { + $this->loggedOff = true; + } + +} + +class auth_deleteprofile_test extends DokuWikiTest { + + /* + * Tests: + * + * 1. It works and the user is logged off + * 2. Password matches when config requires it + * 3,4. Auth plugin can prevent & wiki config can prevent + * 5. Any of invalid security token, missing/not set 'delete' flag, missing/unchecked 'confirm_delete' + * + */ + + function test_success() { + + global $ACT, $INPUT, $conf, $auth; + + $ACT = 'profile_delete'; + $conf['profileconfirm'] = false; + $_SERVER['REMOTE_USER'] = 'testuser'; + + $input = array( + 'do' => $ACT, + 'sectok' => getSecurityToken(), + 'delete' => '1', + 'confirm_delete' => '1', + ); + + $_POST = $input; + $_REQUEST = $input; + $INPUT = new Input(); + + $auth = new Mock_Auth_Plugin(); + + $this->assertTrue(auth_deleteprofile()); + $this->assertTrue($auth->loggedOff); + } + + function test_confirmation_required() { + + global $ACT, $INPUT, $conf, $auth; + + $ACT = 'profile_delete'; + $conf['profileconfirm'] = true; + $_SERVER['REMOTE_USER'] = 'testuser'; + + $input = array( + 'do' => $ACT, + 'sectok' => getSecurityToken(), + 'delete' => '1', + 'confirm_delete' => '1', + 'oldpass' => 'wrong', + ); + + $_POST = $input; + $_REQUEST = $input; + $INPUT = new Input(); + + $auth = new Mock_Auth_Plugin(); + + // password check required - it fails, so don't delete profile + $this->assertFalse(auth_deleteprofile()); + + // now it passes, we're good to go + $INPUT->set('oldpass','password'); + $INPUT->post->set('oldpass','password'); + $this->assertTrue(auth_deleteprofile()); + } + + function test_authconfig_prevents() { + + global $ACT, $INPUT, $conf, $auth; + + $ACT = 'profile_delete'; + $conf['profileconfirm'] = false; + $_SERVER['REMOTE_USER'] = 'testuser'; + + $input = array( + 'do' => $ACT, + 'sectok' => getSecurityToken(), + 'delete' => '1', + 'confirm_delete' => '1', + ); + + $_POST = $input; + $_REQUEST = $input; + $INPUT = new Input(); + + $auth = new Mock_Auth_Plugin(false); + $conf['disableactions'] = ''; + $this->assertFalse(auth_deleteprofile()); + } + + function test_wikiconfig_prevents() { + + global $ACT, $INPUT, $conf, $auth; + + $ACT = 'profile_delete'; + $conf['profileconfirm'] = false; + $_SERVER['REMOTE_USER'] = 'testuser'; + + $input = array( + 'do' => $ACT, + 'sectok' => getSecurityToken(), + 'delete' => '1', + 'confirm_delete' => '1', + ); + + $_POST = $input; + $_REQUEST = $input; + $INPUT = new Input(); + + $auth = new Mock_Auth_Plugin(); + $conf['disableactions'] = 'profile_delete'; + + $this->assertFalse(actionOK('profile_delete')); + $this->assertTrue($auth->canDo('delUser')); + + $this->assertFalse(auth_deleteprofile()); + } + + function test_basic_parameters() { + + global $ACT, $INPUT, $conf, $auth; + + $ACT = 'profile_delete'; + $conf['profileconfirm'] = true; + $_SERVER['REMOTE_USER'] = 'testuser'; + + $input = array( + 'do' => $ACT, + 'sectok' => getSecurityToken(), + 'delete' => '1', + 'confirm_delete' => '1', + 'oldpass' => 'password', + ); + + $_POST = $input; + $_REQUEST = $input; + $input_foundation = new Input(); + + $auth = new Mock_Auth_Plugin(); + + $INPUT = clone $input_foundation; + $INPUT->remove('delete'); + $this->assertFalse(auth_deleteprofile()); + + $INPUT = clone $input_foundation; + $INPUT->set('sectok','wrong'); + $this->assertFalse(auth_deleteprofile()); + + $INPUT = clone $input_foundation; + $INPUT->remove('confirm_delete'); + $this->assertFalse(auth_deleteprofile()); + } +} \ No newline at end of file -- cgit v1.2.3 From b40098c3d8f4a41b62694ccd1e660c26301d6df0 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Tue, 30 Jul 2013 18:46:02 +0200 Subject: Add truly random numbers and use them in places where randomness matters --- _test/tests/inc/auth_random.test.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 _test/tests/inc/auth_random.test.php (limited to '_test') diff --git a/_test/tests/inc/auth_random.test.php b/_test/tests/inc/auth_random.test.php new file mode 100644 index 000000000..f380eba53 --- /dev/null +++ b/_test/tests/inc/auth_random.test.php @@ -0,0 +1,20 @@ +assertTrue($rand <= 2000, 'The generated number was above the limit'); + $this->assertTrue($rand >= 300, 'The generate number was too low'); + } + + function testLargeRandoms() { + $min = (1 << 30); + $max = $min + (1 << 33) + 17; + $rand = auth_random($min, $max); + $this->assertTrue($rand >= $min, 'The generated number was too low'); + $this->assertTrue($rand <= $max, 'The generated number was too high'); + } +} -- cgit v1.2.3 From 865faf755070832ca9c794e1f1c190ddda7e0850 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Tue, 30 Jul 2013 18:50:28 +0200 Subject: Add AES from phpseclib and use it for cookie encryption This replaces the deprecated and broken Blowfish implementation that has previously been used and should provide a lot more security. --- _test/tests/inc/auth_encryption.test.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 _test/tests/inc/auth_encryption.test.php (limited to '_test') diff --git a/_test/tests/inc/auth_encryption.test.php b/_test/tests/inc/auth_encryption.test.php new file mode 100644 index 000000000..041eba00e --- /dev/null +++ b/_test/tests/inc/auth_encryption.test.php @@ -0,0 +1,12 @@ +assertEquals($data, auth_decrypt(auth_encrypt($data, $secret), $secret)); + } +} -- cgit v1.2.3 From 87e03c3bebf87c1a71a40fbf873cdd1f836d4fb2 Mon Sep 17 00:00:00 2001 From: Guy Brand Date: Wed, 31 Jul 2013 12:31:35 +0200 Subject: Fixed instructions on PHPunit --- _test/README | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to '_test') diff --git a/_test/README b/_test/README index a4206f489..5220248b2 100644 --- a/_test/README +++ b/_test/README @@ -1,6 +1,6 @@ ====== DokuWiki Test Suite ====== -This is the test suit to automatically test various parts of DokuWiki. +This is the test suite to automatically test various parts of DokuWiki. ===== Requirements ===== @@ -9,22 +9,33 @@ This is the test suit to automatically test various parts of DokuWiki. ===== PHPUnit Installation ====== -via PEAR: +==== via PEAR installer ==== pear config-set auto_discover 1 - pear upgrade pear install pear.phpunit.de/PHPUnit -on Windows: +==== via Composer ==== - FIXME +Include a composer.json file in your project, which can be as minimal as: + + +{ + "require-dev": { + "phpunit/phpunit": "3.7.*" + } +} + + +==== via PHP archive (PHAR) ==== + +Download http://pear.phpunit.de/get/phpunit.phar and make it executable on your system. -===== Running all Tests ===== +===== Running all tests ===== Just change to the ''_test'' directory and run phpunit: - cd _testing/ + cd _test/ phpunit PHPUnit will fail on some systems with a //headers already sent// error. -- cgit v1.2.3 From 818d2283465b76931db168a9e2c72f2c0f004ecc Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Wed, 31 Jul 2013 17:20:00 +0200 Subject: Fix the useheading cache invalidation for hidden pages, add tests This adds a new parameter to ft_backlinks() to ignore permissions which is needed for invalidating the cache of linking pages with useheading enabled. This also adds various test cases for ft_backlinks(). --- _test/tests/inc/fulltext_backlinks.test.php | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 _test/tests/inc/fulltext_backlinks.test.php (limited to '_test') diff --git a/_test/tests/inc/fulltext_backlinks.test.php b/_test/tests/inc/fulltext_backlinks.test.php new file mode 100644 index 000000000..058e13498 --- /dev/null +++ b/_test/tests/inc/fulltext_backlinks.test.php @@ -0,0 +1,77 @@ + + */ +class fultext_backlinks_test extends DokuWikiTest { + + public function test_internallink() { + saveWikiText('test:internallinks', '[[internälLink]] [[..:internal link]]', 'Test initialization'); + idx_addPage('test:internallinks'); + + $this->assertEquals(array('test:internallinks'), ft_backlinks('internal_link')); + $this->assertEquals(array('test:internallinks'), ft_backlinks('test:internaellink')); + } + + public function test_links_in_footnotes() { + saveWikiText('test:link_footnotes', '(([[footnote]] [[:foÖtnotel]]))', 'Test initialization'); + idx_addPage('test:link_footnotes'); + + $this->assertEquals(array('test:link_footnotes'), ft_backlinks('test:footnote')); + $this->assertEquals(array('test:link_footnotes'), ft_backlinks('fooetnotel')); + } + + public function test_links_in_hidden_pages() { + global $conf; + $conf['hidepages'] = 'hidden:.*'; + saveWikiText('hidden:links', '[[wiki:hiddenlink|linktitle]]', 'Test initialization'); + idx_addPage('hidden:links'); + saveWikiText('visible:links', '[[wiki:hiddenlink]]', 'Test initialization'); + idx_addPage('visible:links'); + + $this->assertEquals(array('visible:links'), ft_backlinks('wiki:hiddenlink')); + $this->assertEquals(array('visible:links'), ft_backlinks('wiki:hiddenlink', false)); + $this->assertEquals(array('hidden:links', 'visible:links'), ft_backlinks('wiki:hiddenlink', true)); + } + + public function test_links_in_protected_pages() { + global $conf; + global $AUTH_ACL; + $conf['superuser'] = 'alice'; + $conf['useacl'] = 1; + + $AUTH_ACL = array( + '* @ALL 8', + 'secret:* @ALL 0', + ); + + $_SERVER['REMOTE_USER'] = 'eve'; + + saveWikiText('secret:links', '[[wiki:secretlink]]', 'Test initialization'); + idx_addPage('secret:links'); + saveWikiText('public:links', '[[wiki:secretlink]]', 'Test initialization'); + idx_addPage('public:links'); + + $this->assertEquals(array('public:links'), ft_backlinks('wiki:secretlink')); + $this->assertEquals(array('public:links'), ft_backlinks('wiki:secretlink', false)); + $this->assertEquals(array('public:links', 'secret:links'), ft_backlinks('wiki:secretlink', true)); + } + + public function test_links_in_deleted_pages() { + saveWikiText('test:internallinks', '[[internallink]] [[..:internal link]]', 'Test initialization'); + idx_addPage('test:internallinks'); + + $this->assertEquals(array('test:internallinks'), ft_backlinks('test:internallink')); + $this->assertEquals(array('test:internallinks'), ft_backlinks('internal_link')); + + saveWikiText('test:internallinks', '', 'Deleted'); + + $this->assertEquals(array(), ft_backlinks('test:internallink')); + $this->assertEquals(array(), ft_backlinks('internal_link')); + } +} -- cgit v1.2.3 From e5d09fddcd17a2fe896650b64b81313a7d000975 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Wed, 31 Jul 2013 17:30:08 +0200 Subject: Index media file usage in the metadata index and use it in ft_mediause() --- _test/tests/inc/fulltext_mediause.test.php | 77 ++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 _test/tests/inc/fulltext_mediause.test.php (limited to '_test') diff --git a/_test/tests/inc/fulltext_mediause.test.php b/_test/tests/inc/fulltext_mediause.test.php new file mode 100644 index 000000000..9d5b2dc84 --- /dev/null +++ b/_test/tests/inc/fulltext_mediause.test.php @@ -0,0 +1,77 @@ + + */ +class fultext_mediause_test extends DokuWikiTest { + + public function test_internalmedia() { + saveWikiText('test:internalmedia_usage', '{{internalmedia.png}} {{..:internal media.png}}', 'Test initialization'); + idx_addPage('test:internalmedia_usage'); + + $this->assertEquals(array('test:internalmedia_usage'), ft_mediause('internal_media.png')); + $this->assertEquals(array('test:internalmedia_usage'), ft_mediause('test:internalmedia.png')); + } + + public function test_media_in_links() { + saveWikiText('test:medialinks', '[[doku>wiki:dokuwiki|{{wiki:logo.png}}]] [[http://www.example.com|{{example.png?200x800}}]]', 'Test init'); + idx_addPage('test:medialinks'); + + $this->assertEquals(array('test:medialinks'), ft_mediause('wiki:logo.png')); + $this->assertEquals(array('test:medialinks'), ft_mediause('test:example.png')); + } + + public function test_media_in_footnotes() { + saveWikiText('test:media_footnotes', '(({{footnote.png?20x50}} [[foonote|{{:footlink.png}}]]))', 'Test initialization'); + idx_addPage('test:media_footnotes'); + + $this->assertEquals(array('test:media_footnotes'), ft_mediause('test:footnote.png')); + $this->assertEquals(array('test:media_footnotes'), ft_mediause('footlink.png')); + } + + public function test_media_in_hidden_pages() { + global $conf; + $conf['hidepages'] = 'hidden:.*'; + saveWikiText('hidden:medias', '[[doku>wiki:dokuwiki|{{wiki:hiddenlogo.png}}]]', 'Test initialization'); + idx_addPage('hidden:medias'); + + $this->assertEquals(array(), ft_mediause('wiki:hiddenlogo.png')); + $this->assertEquals(array(), ft_mediause('wiki:hiddenlogo.png', false)); + $this->assertEquals(array('hidden:medias'), ft_mediause('wiki:hiddenlogo.png', true)); + } + + public function test_media_in_protected_pages() { + global $conf; + global $AUTH_ACL; + $conf['superuser'] = 'alice'; + $conf['useacl'] = 1; + + $AUTH_ACL = array( + '* @ALL 8', + 'secret:* @ALL 0', + ); + + $_SERVER['REMOTE_USER'] = 'eve'; + + saveWikiText('secret:medias', '[[doku>wiki:dokuwiki|{{wiki:secretlogo.png}}]]', 'Test initialization'); + idx_addPage('secret:medias'); + + $this->assertEquals(array(), ft_mediause('wiki:secretlogo.png')); + $this->assertEquals(array(), ft_mediause('wiki:secretlogo.png', false)); + $this->assertEquals(array('secret:medias'), ft_mediause('wiki:secretlogo.png', true)); + } + + public function test_media_in_deleted_pages() { + saveWikiText('test:internalmedia_usage', '{{internalmedia.png}} {{..:internal media.png}}', 'Test initialization'); + idx_addPage('test:internalmedia_usage'); + saveWikiText('test:internalmedia_usage', '', 'Deleted'); + + $this->assertEquals(array(), ft_mediause('internal_media.png')); + $this->assertEquals(array(), ft_mediause('test:internalmedia.png')); + } +} -- cgit v1.2.3 From fdd9bab63c332a19e213c2cf7c986b8b95e25af6 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Thu, 1 Aug 2013 11:37:00 +0200 Subject: increase test coverage for code and file code - test correct recognition of downloadable filename token file - test correct recognition of syntax name & downloadable filename tokens --- _test/tests/inc/parser/parser_code.test.php | 16 ++++++++++++++++ _test/tests/inc/parser/parser_file.test.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/parser/parser_code.test.php b/_test/tests/inc/parser/parser_code.test.php index 4f89b4826..c50d2d328 100644 --- a/_test/tests/inc/parser/parser_code.test.php +++ b/_test/tests/inc/parser/parser_code.test.php @@ -40,6 +40,22 @@ class TestOfDoku_Parser_Code extends TestOfDoku_Parser { $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); } + function testCodeDownload() { + $this->P->parse('Foo Test Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo ')), + array('p_close',array()), + array('code',array('Test','bash','script.sh')), + array('p_open',array()), + array('cdata',array(' Bar')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + function testCodeToken() { $this->P->parse('Foo BarTest'); $calls = array ( diff --git a/_test/tests/inc/parser/parser_file.test.php b/_test/tests/inc/parser/parser_file.test.php index 924b00382..39bda8a58 100644 --- a/_test/tests/inc/parser/parser_file.test.php +++ b/_test/tests/inc/parser/parser_file.test.php @@ -24,5 +24,33 @@ class TestOfDoku_Parser_File extends TestOfDoku_Parser { $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); } + function testFileHighlightDownload() { + $this->P->parse('Foo Test Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo ')), + array('p_close',array()), + array('file',array('Test','txt','test.txt')), + array('p_open',array()), + array('cdata',array(' Bar')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testFileToken() { + $this->P->parse('Foo Test Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n".'Foo Test Bar')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + } -- cgit v1.2.3 From 4d4b1f8c22cf406b35a88c7299f8ee2bc033bf4d Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 1 Aug 2013 22:08:23 +0200 Subject: use http_build_query() in HTTPClient this ensures nested POST data is correctly encoded --- _test/tests/inc/httpclient_http.test.php | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php index 387eb53aa..522f0790c 100644 --- a/_test/tests/inc/httpclient_http.test.php +++ b/_test/tests/inc/httpclient_http.test.php @@ -215,5 +215,55 @@ class httpclient_http_test extends DokuWikiTest { $data = $http->get('http://www.wikimatrix.org/cfeed/dokuwiki/-/-'); $this->assertTrue($data !== false, $http->error); } + + function test_postencode(){ + $http = new HTTPClient(); + + + // check simple data + $data = array( + 'öä?' => 'öä?', + 'foo' => 'bang' + ); + $this->assertEquals( + '%C3%B6%C3%A4%3F=%C3%B6%C3%A4%3F&foo=bang', + $http->_postEncode($data), + 'simple' + ); + + // check first level numeric array + $data = array( + 'foo' => 'bang', + 'ärr' => array('ö', 'b', 'c') + ); + $this->assertEquals( + 'foo=bang&%C3%A4rr%5B0%5D=%C3%B6&%C3%A4rr%5B1%5D=b&%C3%A4rr%5B2%5D=c', + $http->_postEncode($data), + 'onelevelnum' + ); + + // check first level associative array + $data = array( + 'foo' => 'bang', + 'ärr' => array('ö'=>'ä', 'b' => 'c') + ); + $this->assertEquals( + 'foo=bang&%C3%A4rr%5B%C3%B6%5D=%C3%A4&%C3%A4rr%5Bb%5D=c', + $http->_postEncode($data), + 'onelevelassoc' + ); + + + // check first level associative array + $data = array( + 'foo' => 'bang', + 'ärr' => array('ö'=>'ä', 'ä' => array('ö'=>'ä')) + ); + $this->assertEquals( + 'foo=bang&%C3%A4rr%5B%C3%B6%5D=%C3%A4&%C3%A4rr%5B%C3%A4%5D%5B%C3%B6%5D=%C3%A4', + $http->_postEncode($data), + 'twolevelassoc' + ); + } } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From 4002c084d5e2ffc82739870cb9f107644d9787ff Mon Sep 17 00:00:00 2001 From: Klap-in Date: Thu, 1 Aug 2013 23:05:18 +0200 Subject: Updated tests, removed hash --- _test/tests/inc/common_ml.test.php | 37 ++++++++- .../lib/exe/fetch_statuscodes_external.test.php | 94 ++++++++++------------ 2 files changed, 79 insertions(+), 52 deletions(-) (limited to '_test') diff --git a/_test/tests/inc/common_ml.test.php b/_test/tests/inc/common_ml.test.php index 6f3b71db4..415c0a88d 100644 --- a/_test/tests/inc/common_ml.test.php +++ b/_test/tests/inc/common_ml.test.php @@ -90,6 +90,25 @@ class common_ml_test extends DokuWikiTest { $this->assertEquals($expect, ml($id, $args)); } + function test_ml_img_external() { + global $conf; + $conf['useslash'] = 0; + $conf['userewrite'] = 0; + + $ids = array( + 'https://example.com/lib/tpl/dokuwiki/images/logo.png', + 'http://example.com/lib/tpl/dokuwiki/images/logo.png', + 'ftp://example.com/lib/tpl/dokuwiki/images/logo.png' + ); + + foreach($ids as $id) { + $tok = media_get_token($id, 0, 0); + + $expect = DOKU_BASE.$this->script.'?tok='.$tok.'&media='.rawurlencode($id); + $this->assertEquals($expect, ml($id)); + } + } + function test_ml_imgresize_array_external() { global $conf; $conf['useslash'] = 0; @@ -107,8 +126,24 @@ class common_ml_test extends DokuWikiTest { $tok = media_get_token($id, $w, 0); $hash = substr(PassHash::hmac('md5', $id, auth_cookiesalt()), 0, 6); - $expect = DOKU_BASE.$this->script.'?hash='.$hash.'&w='.$w.'&tok='.$tok.'&media='.rawurlencode($id); + $expect = DOKU_BASE.$this->script.'?w='.$w.'&tok='.$tok.'&media='.rawurlencode($id); $this->assertEquals($expect, ml($id, $args)); } + + $h = 50; + $args = array('h' => $h); + $tok = media_get_token($id, $h, 0); + + $expect = DOKU_BASE.$this->script.'?h='.$h.'&tok='.$tok.'&media='.rawurlencode($id); + $this->assertEquals($expect, ml($id, $args)); + + $w = 80; + $h = 50; + $args = array('w' => $w, 'h' => $h); + $tok = media_get_token($id, $w, $h); + + $expect = DOKU_BASE.$this->script.'?w='.$w.'&h='.$h.'&tok='.$tok.'&media='.rawurlencode($id); + $this->assertEquals($expect, ml($id, $args)); + } } diff --git a/_test/tests/lib/exe/fetch_statuscodes_external.test.php b/_test/tests/lib/exe/fetch_statuscodes_external.test.php index bd7b2f93b..79a45ec93 100644 --- a/_test/tests/lib/exe/fetch_statuscodes_external.test.php +++ b/_test/tests/lib/exe/fetch_statuscodes_external.test.php @@ -13,7 +13,7 @@ class fetch_statuscodes_external_test extends DokuWikiTest { header('X-Test: check headers working'); $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list(); - if (empty($header_check)) { + if(empty($header_check)) { $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug'); } else { header_remove('X-Test'); @@ -22,50 +22,53 @@ class fetch_statuscodes_external_test extends DokuWikiTest { parent::setUp(); global $conf; - $conf['fetchsize'] = 500*1024; //500kb + $conf['fetchsize'] = 500 * 1024; //500kb $conf['xsendfile'] = 0; - global $MIME, $EXT, $CACHE, $INPUT; // variables fetch creates in global scope -- should this be in fetch? + global $MIME, $EXT, $CACHE, $INPUT; // variables fetch creates in global scope -- should this be in fetch? } - function getUri($hash=null) { + function getUri() { $w = $this->width ? 'w='.$this->width.'&' : ''; $h = $this->height ? 'h='.$this->height.'&' : ''; - if($hash === null) { - $hash = 'hash='.substr(PassHash::hmac('md5', $this->media, auth_cookiesalt()), 0, 6).'&'; - } - return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media); + return '/lib/exe/fetch.php?'.$w.$h.'{%token%}media='.rawurlencode($this->media); } - function fetchResponse($token, $hash=null){ + function fetchResponse($token) { $request = new TestRequest(); - return $request->get(array(),str_replace('{%token%}',$token,$this->getUri($hash))); + return $request->get(array(), str_replace('{%token%}', $token, $this->getUri())); } /** - * modified image request with invalid hash - * expect: 412 status code + * modified image request with valid token + * and not-modified image request with valid token + * + * expect: header with mime-type + * expect: content + * expect: no error response */ - function test_invalid_hash() { - $invalid_hash = 'hash='.substr(PassHash::hmac('md5', 'junk', auth_cookiesalt()), 0, 6).'&'; - $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; + function test_valid_token() { + $valid_token_resize = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; - $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode()); + $this->handlevalidresponse($valid_token_resize); + + //original size + $this->width = $this->height = 0; + $valid_token_original = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; + + $this->handlevalidresponse($valid_token_original); } /** - * modified image request with valid token - * expect: header with mime-type - * expect: content - * expect: no error response + * Performs asserts for valid request + * + * @param $valid_token */ - function test_valid_token(){ - $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; - + private function handlevalidresponse($valid_token){ $response = $this->fetchResponse($valid_token); - $this->assertTrue((bool)$response->getHeader('Content-Type')); - $this->assertTrue((bool)($response->getContent())); + $this->assertTrue((bool) $response->getHeader('Content-Type')); + $this->assertTrue((bool) ($response->getContent())); $status_code = $response->getStatusCode(); $this->assertTrue(is_null($status_code) || (200 == $status_code)); @@ -75,41 +78,30 @@ class fetch_statuscodes_external_test extends DokuWikiTest { * modified image request with invalid token * expect: 412 status code */ - function test_invalid_token(){ - $invalid_token = 'tok='.media_get_token('junk',200,100).'&'; - $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode()); + function test_invalid_token() { + $invalid_tokens = array( + 'invalid_token_wrongid' => media_get_token('junk', 200, 100), + 'invalid_token_wrongh' => media_get_token($this->media, 200, 10), + 'invalid_token_wrongw' => media_get_token($this->media, 20, 100), + 'invalid_token_wrongwh' => media_get_token($this->media, 20, 10) + ); + foreach($invalid_tokens as $invalid_token) + $this->assertEquals(412, $this->fetchResponse('tok='.$invalid_token.'&')->getStatusCode()); + } /** * modified image request with no token + * and not modified image with no token * expect: 412 status code */ - function test_missing_token(){ - $no_token = ''; - $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode()); - } - - /** - * native image request which doesn't require a token - * try: with a token & without a token - * expect: (for both) header with mime-type, content matching source image filesize & no error response - */ - function test_no_token_required(){ - $this->width = $this->height = 0; // no width & height, means image request at native dimensions - $any_token = 'tok='.media_get_token('junk',200,100).'&'; + function test_missing_token() { $no_token = ''; - $file = media_get_from_URL($this->media,'png', -1); - $bytes = filesize($file); - foreach(array($any_token, $no_token) as $token) { - $response = $this->fetchResponse($token); - $this->assertTrue((bool)$response->getHeader('Content-Type')); - $this->assertEquals(strlen($response->getContent()), $bytes); + $this->assertEquals(412, $this->fetchResponse($no_token)->getStatusCode()); - $status_code = $response->getStatusCode(); - $this->assertTrue(is_null($status_code) || (200 == $status_code)); - } + $this->width = $this->height = 0; + $this->assertEquals(412, $this->fetchResponse($no_token)->getStatusCode()); } - } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From 4f93eef69523dad1ba27c5ac5465b037c598ff18 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 1 Aug 2013 23:19:25 +0200 Subject: fixed tar tests FS#2809 Tars strip the leading slash so the tests where wrong. Not sure why they stilldid work sometimes --- _test/tests/inc/tar.test.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to '_test') diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php index 28e709cc3..50664cfc3 100644 --- a/_test/tests/inc/tar.test.php +++ b/_test/tests/inc/tar.test.php @@ -11,7 +11,8 @@ class Tar_TestCase extends DokuWikiTest { public function test_createdynamic() { $tar = new Tar(); - $dir = dirname(__FILE__).'/tar'; + $dir = dirname(__FILE__).'/tar'; + $tdir = ltrim($dir,'/'); $tar->create(); $tar->AddFile("$dir/testdata1.txt"); @@ -24,11 +25,11 @@ class Tar_TestCase extends DokuWikiTest { $this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR'); $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR'); - $this->assertTrue(strpos($data, "$dir/testdata1.txt") !== false, 'Path in TAR'); + $this->assertTrue(strpos($data, "$tdir/testdata1.txt") !== false, 'Path in TAR'); $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR'); $this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR'); - $this->assertTrue(strpos($data, "$dir/foobar/testdata2.txt") === false, 'Path not in TAR'); + $this->assertTrue(strpos($data, "$tdir/foobar/testdata2.txt") === false, 'Path not in TAR'); $this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR'); } @@ -42,6 +43,7 @@ class Tar_TestCase extends DokuWikiTest { $tar = new Tar(); $dir = dirname(__FILE__).'/tar'; + $tdir = ltrim($dir,'/'); $tmp = tempnam(sys_get_temp_dir(), 'dwtartest'); $tar->create($tmp, Tar::COMPRESS_NONE); @@ -57,11 +59,11 @@ class Tar_TestCase extends DokuWikiTest { $this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR'); $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR'); - $this->assertTrue(strpos($data, "$dir/testdata1.txt") !== false, 'Path in TAR'); + $this->assertTrue(strpos($data, "$tdir/testdata1.txt") !== false, 'Path in TAR'); $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR'); $this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR'); - $this->assertTrue(strpos($data, "$dir/foobar/testdata2.txt") === false, 'Path not in TAR'); + $this->assertTrue(strpos($data, "$tdir/foobar/testdata2.txt") === false, 'Path not in TAR'); $this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR'); @unlink($tmp); -- cgit v1.2.3 From 8331f1f44822f6bac623baab10d76fdf6e64b3f7 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 2 Aug 2013 11:10:31 +0200 Subject: FS#2802 correctly fix tar tests When the DokuWiki install was in a deep namespace, the used path name could land in the >100 char limit and trigger ustar format where the filename and directory name are split. This would fail the test. --- _test/tests/inc/tar.test.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to '_test') diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php index 50664cfc3..9801ca1e0 100644 --- a/_test/tests/inc/tar.test.php +++ b/_test/tests/inc/tar.test.php @@ -25,11 +25,17 @@ class Tar_TestCase extends DokuWikiTest { $this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR'); $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR'); - $this->assertTrue(strpos($data, "$tdir/testdata1.txt") !== false, 'Path in TAR'); + // fullpath might be too long to be stored as full path FS#2802 + $this->assertTrue(strpos($data, "$tdir") !== false, 'Path in TAR'); + $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR'); + $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR'); $this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR'); - $this->assertTrue(strpos($data, "$tdir/foobar/testdata2.txt") === false, 'Path not in TAR'); + // fullpath might be too long to be stored as full path FS#2802 + $this->assertTrue(strpos($data, "$tdir/foobar") === false, 'Path not in TAR'); + $this->assertTrue(strpos($data, "foobar.txt") === false, 'File not in TAR'); + $this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR'); } @@ -59,11 +65,17 @@ class Tar_TestCase extends DokuWikiTest { $this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR'); $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR'); - $this->assertTrue(strpos($data, "$tdir/testdata1.txt") !== false, 'Path in TAR'); + // fullpath might be too long to be stored as full path FS#2802 + $this->assertTrue(strpos($data, "$tdir") !== false, 'Path in TAR'); + $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR'); + $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR'); $this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR'); - $this->assertTrue(strpos($data, "$tdir/foobar/testdata2.txt") === false, 'Path not in TAR'); + // fullpath might be too long to be stored as full path FS#2802 + $this->assertTrue(strpos($data, "$tdir/foobar") === false, 'Path not in TAR'); + $this->assertTrue(strpos($data, "foobar.txt") === false, 'File not in TAR'); + $this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR'); @unlink($tmp); -- cgit v1.2.3 From 20284fef7eb61e54db0fd854a9172295aa4f8baa Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 2 Aug 2013 13:44:33 +0200 Subject: HTTPClient don't pull too much bytes when no content-length is given --- _test/tests/inc/httpclient_http.test.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php index 522f0790c..43dd4478f 100644 --- a/_test/tests/inc/httpclient_http.test.php +++ b/_test/tests/inc/httpclient_http.test.php @@ -122,9 +122,14 @@ class httpclient_http_test extends DokuWikiTest { function test_maxbody(){ $http = new HTTPClient(); $http->max_bodysize = 250; + + // this should abort completely $data = $http->get($this->server.'/stream/30'); $this->assertTrue($data === false, 'HTTP response'); + + // this should read just the needed bytes $http->max_bodysize_abort = false; + $http->keep_alive = false; $data = $http->get($this->server.'/stream/30'); $this->assertFalse($data === false, 'HTTP response'); /* should read no more than max_bodysize+1 */ -- cgit v1.2.3 From 0a57f27ea5c1a6d54627f6af15c516f18f44b229 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 3 Aug 2013 17:15:13 +0200 Subject: fixed cleanPath bug in tar library FS#2802 This time the test case was correct and actually showed a bug in the tar library. The error occured only on the first build (directory build/0/) where the zero was stripped from the path name. I added unit tests to the cleanPath function and discovered another bug with handling relative directories. I rewrote the cleanPath() function and now it should finally work. Unit tests FTW! --- _test/tests/inc/tar.test.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php index 9801ca1e0..417f1a853 100644 --- a/_test/tests/inc/tar.test.php +++ b/_test/tests/inc/tar.test.php @@ -58,6 +58,8 @@ class Tar_TestCase extends DokuWikiTest { $tar->addData('another/testdata3.txt', 'testcontent3'); $tar->close(); +copy ($tmp, '/tmp/test.tar'); + $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number $data = file_get_contents($tmp); @@ -66,7 +68,7 @@ class Tar_TestCase extends DokuWikiTest { $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR'); // fullpath might be too long to be stored as full path FS#2802 - $this->assertTrue(strpos($data, "$tdir") !== false, 'Path in TAR'); + $this->assertTrue(strpos($data, "$tdir") !== false, "Path in TAR '$tdir'"); $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR'); $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR'); @@ -396,4 +398,23 @@ class Tar_TestCase extends DokuWikiTest { $this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks } + + + public function test_cleanPath(){ + $tar = new Tar(); + $tests = array ( + '/foo/bar' => 'foo/bar', + '/foo/bar/' => 'foo/bar', + 'foo//bar' => 'foo/bar', + 'foo/0/bar' => 'foo/0/bar', + 'foo/../bar' => 'bar', + 'foo/bang/bang/../../bar' => 'foo/bar', + 'foo/../../bar' => 'bar', + 'foo/.././../bar' => 'bar', + ); + + foreach($tests as $in => $out){ + $this->assertEquals($out, $tar->cleanPath($in), "Input: $in"); + } + } } -- cgit v1.2.3 From b6c97c7072748fa573d54a91c1be14e496fd9990 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 3 Aug 2013 22:26:38 +0200 Subject: FS#2677 support arrays in to, cc, bcc headers in Mailer This does not fix FS#2677, it only adds support for fixing it later. --- _test/tests/inc/mailer.test.php | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index 053e216b8..ef78692b3 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -15,6 +15,11 @@ class TestMailer extends Mailer { public function prepareHeaders() { return parent::prepareHeaders(); } + + public function cleanHeaders() { + parent::cleanHeaders(); + } + } class mailer_test extends DokuWikiTest { @@ -67,6 +72,47 @@ class mailer_test extends DokuWikiTest { $this->assertArrayNotHasKey('Test-Header',$headers); } + function test_addresses(){ + $mail = new TestMailer(); + + $mail->to('andi@splitbrain.org'); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('andi@splitbrain.org', $headers['To']); + + $mail->to(''); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('andi@splitbrain.org', $headers['To']); + + $mail->to('Andreas Gohr '); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('Andreas Gohr ', $headers['To']); + + $mail->to('Andreas Gohr , foo '); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('Andreas Gohr , foo ', $headers['To']); + + $mail->to('Möp , foo '); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('=?UTF-8?B?TcO2cA==?= , foo ', $headers['To']); + + $mail->to(array('Möp ',' foo ')); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('=?UTF-8?B?TcO2cA==?= , foo ', $headers['To']); + + $mail->to(array('Beet, L van ',' foo ')); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('=?UTF-8?B?QmVldCwgTCB2YW4=?= , foo ', $headers['To']); + + + } + function test_simplemail(){ global $conf; $conf['htmlmail'] = 0; -- cgit v1.2.3 From 66d935e75f9ebbb37332c14e0a9425170c7c9330 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 17 Aug 2013 21:33:32 +0200 Subject: Fix backlinks for internal links with parameters This adds the parameter extraction code from the xhtml renderer to the metadata renderer in order to not to include the parameters in the id that is recorded as link target. A test case checks that the link is actually returned as backlink (fails without the fix). --- _test/tests/inc/fulltext_backlinks.test.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/fulltext_backlinks.test.php b/_test/tests/inc/fulltext_backlinks.test.php index 058e13498..b20a16ee1 100644 --- a/_test/tests/inc/fulltext_backlinks.test.php +++ b/_test/tests/inc/fulltext_backlinks.test.php @@ -8,7 +8,7 @@ if (!defined('DOKU_INC')) die(); * * @author Michael Hamann */ -class fultext_backlinks_test extends DokuWikiTest { +class fulltext_backlinks_test extends DokuWikiTest { public function test_internallink() { saveWikiText('test:internallinks', '[[internälLink]] [[..:internal link]]', 'Test initialization'); @@ -74,4 +74,12 @@ class fultext_backlinks_test extends DokuWikiTest { $this->assertEquals(array(), ft_backlinks('test:internallink')); $this->assertEquals(array(), ft_backlinks('internal_link')); } + + function test_parameters() { + saveWikiText('test:links', '[[wiki:syntax?do=export_raw]] [[:web:scripts:add_vhost.sh?do=export_raw]]', 'Init tests'); + idx_addPage('test:links'); + + $this->assertEquals(array('test:links'), ft_backlinks('wiki:syntax')); + $this->assertEquals(array('test:links'), ft_backlinks('web:scripts:add_vhost.sh')); + } } -- cgit v1.2.3 From 8ef75711c492f1188d121995778e82cd5aa95e1b Mon Sep 17 00:00:00 2001 From: Gerrit Uitslag Date: Thu, 19 Sep 2013 21:34:37 +0200 Subject: Extend pageutils_clean_id tests to show more behavior details --- _test/tests/inc/pageutils_clean_id.test.php | 3 +++ 1 file changed, 3 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/pageutils_clean_id.test.php b/_test/tests/inc/pageutils_clean_id.test.php index 478fd2bc4..f67109ba3 100644 --- a/_test/tests/inc/pageutils_clean_id.test.php +++ b/_test/tests/inc/pageutils_clean_id.test.php @@ -43,6 +43,9 @@ class init_clean_id_test extends DokuWikiTest { $tests[] = array('ns._#!ns:page','false','ns._ns:page'); $tests[] = array('ns_:page',false,'ns:page'); $tests[] = array('page...page','false','page...page'); + $tests[] = array('page---page','false','page---page'); + $tests[] = array('page___page','false','page_page'); + $tests[] = array('page_-.page','false','page_-.page'); $tests[] = array(':page',false,'page'); $tests[] = array(':ns:page',false,'ns:page'); $tests[] = array('page:',false,'page'); -- cgit v1.2.3 From 0d9a72ff5d870d72772f5f6b4b83b8ee0b4a1f05 Mon Sep 17 00:00:00 2001 From: Gerrit Uitslag Date: Wed, 25 Sep 2013 18:16:00 +0200 Subject: added unittests for rowspans at first table row --- _test/tests/inc/parser/parser_table.test.php | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/parser/parser_table.test.php b/_test/tests/inc/parser/parser_table.test.php index 96789c38c..542a307b8 100644 --- a/_test/tests/inc/parser/parser_table.test.php +++ b/_test/tests/inc/parser/parser_table.test.php @@ -270,6 +270,64 @@ def'); ); $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); } + + function testCellRowSpanFirstRow() { + $this->P->addMode('table',new Doku_Parser_Mode_Table()); + $this->P->parse(' +abc +|::: ^ d:::^:::| ::: | +| b ^ e | | ::: | +|c ^ ::: | |:::| +def'); + + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n\nabc")), + array('p_close',array()), + array('table_open',array(4, 3, 6)), + array('tablerow_open',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array('')), + array('tablecell_close',array()), + array('tableheader_open',array(1,'right',1)), + array('cdata',array(' d:::')), + array('tableheader_close',array()), + array('tableheader_open',array(1,NULL,1)), + array('cdata',array('')), + array('tableheader_close',array()), + array('tablecell_open',array(1,NULL,3)), + array('cdata',array('')), + array('tablecell_close',array()), + array('tablerow_close',array()), + array('tablerow_open',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array(' b ')), + array('tablecell_close',array()), + array('tableheader_open',array(1,'left',2)), + array('cdata',array(' e ')), + array('tableheader_close',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array(' ')), + array('tablecell_close',array()), + array('tablerow_close',array()), + array('tablerow_open',array()), + array('tablecell_open',array(1,'left',1)), + array('cdata',array('c ')), + array('tablecell_close',array()), + array('tablecell_open',array(1,NULL,1)), + array('cdata',array(' ')), + array('tablecell_close',array()), + array('tablerow_close',array()), + + array('table_close',array(69)), + array('p_open',array()), + array('cdata',array('def')), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } function testCellAlignmentFormatting() { $this->P->addMode('table',new Doku_Parser_Mode_Table()); -- cgit v1.2.3 From 0ee5ed1e998c1e67c4a0b7687977c4e2e0f29494 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 12 Oct 2013 12:41:24 +0200 Subject: IETF's message lint service as a test for Mailer class --- _test/tests/inc/mailer.test.php | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index ef78692b3..fefb6f508 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -156,5 +156,61 @@ class mailer_test extends DokuWikiTest { $this->assertEquals(0, preg_match('/(^|\n)Bcc: (\n|$)/', $header), 'Bcc found in headers.'); $this->assertEquals(0, preg_match('/(^|\n)Cc: (\n|$)/', $header), 'Bcc found in headers.'); } + + /** + * @group internet + */ + function test_lint(){ + // prepare a simple multipart message + $mail = new TestMailer(); + $mail->to(array('Möp ',' foo ')); + $mail->subject('This is a töst'); + $mail->setBody('Hello Wörld, + + please don\'t burn, okay? + '); + $mail->attachContent('some test data', 'text/plain', 'text.txt'); + $msg = $mail->dump(); + $msglines = explode("\n", $msg); + + // ask message lint if it is okay + $html = new HTTPClient(); + $results = $html->post('http://tools.ietf.org/tools/msglint/msglint', array('msg'=>$msg)); + $this->assertTrue($results !== false); + + // parse the result lines + $lines = explode("\n", $results); + $rows = count($lines); + $i=0; + while(trim($lines[$i]) != '-----------' && $i<$rows) $i++; //skip preamble + for($i=$i+1; $i<$rows; $i++){ + $line = trim($lines[$i]); + if($line == '-----------') break; //skip appendix + + // get possible continuation of the line + while($lines[$i+1][0] == ' '){ + $line .= ' '.trim($lines[$i+1]); + $i++; + } + + // check the line for errors + if(substr($line,0,5) == 'ERROR'){ + // get the context in which the error occured + $errorin = ''; + if(preg_match('/line (\d+)$/', $line, $m)){ + $errorin .= "\n".$msglines[$m[1] - 1]; + } + if(preg_match('/lines (\d+)-(\d+)$/', $line, $m)){ + for($x=$m[1]-1; $x<$m[2]; $x++){ + $errorin .= "\n".$msglines[$x]; + } + } + + // raise the error + throw new Exception($line.$errorin); + } + } + + } } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From d6e04b603a81d6c55c3bb71974689892762b6a01 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 12 Oct 2013 13:30:54 +0200 Subject: successfully validate Mailer mails with msglint --- _test/tests/inc/mailer.test.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index fefb6f508..feb454fcf 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -164,6 +164,7 @@ class mailer_test extends DokuWikiTest { // prepare a simple multipart message $mail = new TestMailer(); $mail->to(array('Möp ',' foo ')); + $mail->from('Me '); $mail->subject('This is a töst'); $mail->setBody('Hello Wörld, @@ -173,6 +174,8 @@ class mailer_test extends DokuWikiTest { $msg = $mail->dump(); $msglines = explode("\n", $msg); + //echo $msg; + // ask message lint if it is okay $html = new HTTPClient(); $results = $html->post('http://tools.ietf.org/tools/msglint/msglint', array('msg'=>$msg)); @@ -195,6 +198,10 @@ class mailer_test extends DokuWikiTest { // check the line for errors if(substr($line,0,5) == 'ERROR'){ + // ignore some errors + if(strpos($line, "missing mandatory header 'return-path'")) continue; #set by MDA + if(strpos($line, "bare newline in text body decoded")) continue; #seems to be false positive + // get the context in which the error occured $errorin = ''; if(preg_match('/line (\d+)$/', $line, $m)){ -- cgit v1.2.3 From ec82d005b6a02f137645cd756cccfbab7025047a Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 12 Oct 2013 14:07:59 +0200 Subject: check msglint for warnings, too --- _test/tests/inc/mailer.test.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to '_test') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index feb454fcf..3a89413b4 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -170,7 +170,7 @@ class mailer_test extends DokuWikiTest { please don\'t burn, okay? '); - $mail->attachContent('some test data', 'text/plain', 'text.txt'); + $mail->attachContent('some test data', 'text/plain', 'a text.txt'); $msg = $mail->dump(); $msglines = explode("\n", $msg); @@ -197,7 +197,7 @@ class mailer_test extends DokuWikiTest { } // check the line for errors - if(substr($line,0,5) == 'ERROR'){ + if(substr($line,0,5) == 'ERROR' || substr($line,0,7) == 'WARNING'){ // ignore some errors if(strpos($line, "missing mandatory header 'return-path'")) continue; #set by MDA if(strpos($line, "bare newline in text body decoded")) continue; #seems to be false positive -- cgit v1.2.3 From a467e020fa551217347181ffd6915c7d29e6ff59 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Tue, 15 Oct 2013 11:35:26 +0200 Subject: Added unit tests for CSS shorthand compression FS#2509 --- _test/tests/lib/exe/css_css_compress.test.php | 40 +++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to '_test') diff --git a/_test/tests/lib/exe/css_css_compress.test.php b/_test/tests/lib/exe/css_css_compress.test.php index a7c87b6a7..a614ea2fd 100644 --- a/_test/tests/lib/exe/css_css_compress.test.php +++ b/_test/tests/lib/exe/css_css_compress.test.php @@ -62,6 +62,46 @@ class css_css_compress_test extends DokuWikiTest { $this->assertEquals(css_compress($text), 'a{left:20px;top:20px}'); } + function test_shortening() { + $input = array( + 'margin:0em 0em 0em 0em ul.test margin:0em :0em div#FFFFFF {', + 'margin: 1px 1px 1px 1px;', + 'padding: 1px 2px 1px 2px;', + 'margin: 1px 2px 3px 1px;', + 'padding: 1px 2px 3px 4px;', + 'margin: 00.00em 0em 01.00px 0em;', + 'padding: 0010em 0010.00em 00.00em 00.00100em;', + 'padding: 0010% 0010.00% 00.00% 00.00100xxx;', + 'padding: 0.0em .0em 0.em 00.00em;', + 'padding: 01.0em;', + 'color: #FFFFFF;', + 'color: #777777;', + 'color: #123456;', + 'border: 01.0em solid #ffffff;', + ); + + $expected = array( + 'margin:0em 0em 0em 0em ul.test margin:0em :0em div#FFFFFF{', + 'margin:1px;', + 'padding:1px 2px;', + 'margin:1px 2px 3px 1px;', + 'padding:1px 2px 3px 4px;', + 'margin:0 0 1px 0;', + 'padding:10em 10em 0 .001em;', + 'padding:10% 10% 0 00.00100xxx;', + 'padding:0;', + 'padding:1em;', + 'color:#FFF;', + 'color:#777;', + 'color:#123456;', + 'border:1em solid #fff;', + ); + + $input = array_map('css_compress', $input); + + $this->assertEquals($expected, $input); + } + } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From 74ed54d4f9a7c9796916f33f649ef94619a31704 Mon Sep 17 00:00:00 2001 From: Gerrit Uitslag Date: Wed, 16 Oct 2013 11:29:27 +0200 Subject: fix signature mail unittest, and improve some signatures info plugin --- _test/tests/inc/subscription.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/subscription.test.php b/_test/tests/inc/subscription.test.php index 333400576..34a7b9e4b 100644 --- a/_test/tests/inc/subscription.test.php +++ b/_test/tests/inc/subscription.test.php @@ -237,7 +237,7 @@ class MockupSubscription extends Subscription { return parent::buildregex($user, $style, $data); } - protected function send($subscriber_mail, $subject, $id, $template, $trep, $hrep = null) { + protected function send($subscriber_mail, $subject, $id, $template, $trep, $hrep = null, $headers = array()) { $this->mails[] = $subscriber_mail; return true; } -- cgit v1.2.3 From c8d2e830e238503225cac35736b815864d334b1d Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Wed, 16 Oct 2013 21:50:25 +0100 Subject: escape '$' in mailer test strings --- _test/tests/inc/mailer.test.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to '_test') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index 3a89413b4..dc234232f 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -50,8 +50,8 @@ class mailer_test extends DokuWikiTest { // set a bunch of test headers $mail->setHeader('test-header','bla'); $mail->setHeader('to','A valid ASCII name '); - $mail->setHeader('from',"Thös ne\needs\x00serious cleaning$§%."); - $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning$§%.",false); + $mail->setHeader('from',"Thös ne\needs\x00serious cleaning\$§%."); + $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning\$§%.",false); $mail->setHeader("weird\n*+\x00foo.-_@bar?",'now clean'); // are they set? -- cgit v1.2.3 From 4d8acaacee33f49d51c06f6dae1dbe245018a020 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Wed, 16 Oct 2013 21:52:02 +0100 Subject: remove '&' reference operator from metadata test, not required in php5 --- _test/tests/inc/parserutils_set_metadata_during_rendering.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php b/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php index f08785ca2..18660553d 100644 --- a/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php +++ b/_test/tests/inc/parserutils_set_metadata_during_rendering.test.php @@ -80,7 +80,7 @@ class parserutils_set_metadata_during_rendering_test extends DokuWikiTest { } // wrapper function for the fake plugin controller, return $this for the fake syntax of this test - function &load($type,$name,$new=false,$disabled=false){ + function load($type,$name,$new=false,$disabled=false){ if ($name == 'parserutils_test') { return $this; } else { -- cgit v1.2.3 From 4e2ac2e47ffdfffadfa5674d55f6f96c5e1cae77 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 18 Oct 2013 12:05:50 +0100 Subject: add missing $_SERVER values for init.php when called from cli --- _test/bootstrap.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to '_test') diff --git a/_test/bootstrap.php b/_test/bootstrap.php index 732fef9ed..3f59db515 100644 --- a/_test/bootstrap.php +++ b/_test/bootstrap.php @@ -68,6 +68,13 @@ $default_server_vars = array( 'REQUEST_TIME' => time(), ); +// fixup for $_SERVER when run from CLI, +// some values should be mocked for use by inc/init.php which is called here +// [ $_SERVER is also mocked in TestRequest::execute() ] +if (php_sapi_name() == 'cli') { + $_SERVER = array_merge($default_server_vars, $_SERVER); +} + // create temp directories mkdir(TMP_DIR); -- cgit v1.2.3 From eb9dc16998a7eb887015ef72e4100eb20617e7b8 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 18 Oct 2013 12:27:17 +0100 Subject: set error level so it is propagated correctly to dokuwiki --- _test/bootstrap.php | 1 + 1 file changed, 1 insertion(+) (limited to '_test') diff --git a/_test/bootstrap.php b/_test/bootstrap.php index 732fef9ed..4cb6420bd 100644 --- a/_test/bootstrap.php +++ b/_test/bootstrap.php @@ -15,6 +15,7 @@ require_once DOKU_UNITTEST.'core/TestUtils.php'; define('SIMPLE_TEST', true); // basic behaviours +define('DOKU_E_LEVEL',E_ALL); error_reporting(E_ALL); set_time_limit(0); ini_set('memory_limit','2048M'); -- cgit v1.2.3 From 9aac3abfe47b9ff6977643d06caf0f9520cd55f1 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 18 Oct 2013 12:33:07 +0100 Subject: also use DOKU_E_LEVEL in bootstrap's call to error_reporting() --- _test/bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/bootstrap.php b/_test/bootstrap.php index 4cb6420bd..c3eba048a 100644 --- a/_test/bootstrap.php +++ b/_test/bootstrap.php @@ -16,7 +16,7 @@ define('SIMPLE_TEST', true); // basic behaviours define('DOKU_E_LEVEL',E_ALL); -error_reporting(E_ALL); +error_reporting(DOKU_E_LEVEL); set_time_limit(0); ini_set('memory_limit','2048M'); -- cgit v1.2.3 From d301130ed39d5dad319c60cdb3879c6751611831 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sat, 19 Oct 2013 14:35:22 +0100 Subject: additional auth_nameencode tests (apostrophe & backslash) --- _test/tests/inc/auth_nameencode.test.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/auth_nameencode.test.php b/_test/tests/inc/auth_nameencode.test.php index da9f31f90..074155486 100644 --- a/_test/tests/inc/auth_nameencode.test.php +++ b/_test/tests/inc/auth_nameencode.test.php @@ -19,6 +19,18 @@ class auth_nameencode_test extends DokuWikiTest { $this->assertEquals(auth_nameencode($in),$out); } + function test_apostrophe(){ + $in = 'hey\'you'; + $out = 'hey%27you'; + $this->assertEquals(auth_nameencode($in),$out); + } + + function test_backslash(){ + $in = 'hey\\you'; + $out = 'hey%5cyou'; + $this->assertEquals(auth_nameencode($in),$out); + } + function test_complex(){ $in = 'hey $ you !$%! foo '; $out = 'hey%20%24%20you%20%21%24%25%21%20foo%20'; -- cgit v1.2.3 From a8dba4523d2ecd09dd69a68a36673eaf5c009c57 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 19 Oct 2013 16:09:15 +0200 Subject: Fix FS#2854: Treat numerically different keys as different --- _test/tests/inc/indexer_indexing.test.php | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 _test/tests/inc/indexer_indexing.test.php (limited to '_test') diff --git a/_test/tests/inc/indexer_indexing.test.php b/_test/tests/inc/indexer_indexing.test.php new file mode 100644 index 000000000..8600cf156 --- /dev/null +++ b/_test/tests/inc/indexer_indexing.test.php @@ -0,0 +1,45 @@ + + */ +class indexer_indexing_test extends DokuWikiTest { + public function setUp() { + parent::setUp(); + saveWikiText('testpage', 'Foo bar baz.', 'Test initialization'); + saveWikiText('notfound', 'Foon barn bazn.', 'Test initialization'); + idx_addPage('testpage'); + idx_addPage('notfound'); + } + + public function test_words() { + $indexer = idx_get_indexer(); + $query = array('baz', 'foo'); + $this->assertEquals(array('baz' => array('testpage' => 1), 'foo' => array('testpage' => 1)), $indexer->lookup($query)); + } + + public function test_numerically_identical_words() { + $indexer = idx_get_indexer(); + $indexer->addPageWords('testpage', '0x1 002'); + $indexer->addPageWords('notfound', '0x2'); + $query = array('001', '002'); + $this->assertEquals(array('001' => array('notfound' => 1), '002' => array('testpage' => 1)), $indexer->lookup($query)); + } + + public function test_meta() { + $indexer = idx_get_indexer(); + $indexer->addMetaKeys('testpage', 'testkey', 'testvalue'); + $indexer->addMetaKeys('notfound', 'testkey', 'notvalue'); + $query = 'testvalue'; + $this->assertEquals(array('testpage'), $indexer->lookupKey('testkey', $query)); + } + + public function test_numerically_identical_meta_values() { + $indexer = idx_get_indexer(); + $indexer->addMetaKeys('testpage', 'numkey', array('0001', '01')); + $indexer->addMetaKeys('notfound', 'numkey', array('00001', '000001')); + $query = array('001', '01'); + $this->assertEquals(array('001' => array(), '01' => array('testpage')), $indexer->lookupKey('numkey', $query)); + } +} \ No newline at end of file -- cgit v1.2.3 From 9f5b9cf15569babaa90f0d6f3dd58cefd5439bc5 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 19 Oct 2013 17:10:43 +0200 Subject: Fix the indexer indexing test case (changed the data but not the result) --- _test/tests/inc/indexer_indexing.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/indexer_indexing.test.php b/_test/tests/inc/indexer_indexing.test.php index 8600cf156..628e82e00 100644 --- a/_test/tests/inc/indexer_indexing.test.php +++ b/_test/tests/inc/indexer_indexing.test.php @@ -24,7 +24,7 @@ class indexer_indexing_test extends DokuWikiTest { $indexer->addPageWords('testpage', '0x1 002'); $indexer->addPageWords('notfound', '0x2'); $query = array('001', '002'); - $this->assertEquals(array('001' => array('notfound' => 1), '002' => array('testpage' => 1)), $indexer->lookup($query)); + $this->assertEquals(array('001' => array(), '002' => array('testpage' => 1)), $indexer->lookup($query)); } public function test_meta() { -- cgit v1.2.3 From 698e7df8c9d5c43a93ed6822efa537158682a700 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sat, 19 Oct 2013 18:24:20 +0100 Subject: add tests for usernames with 2 & 3 byte utf8 characters --- _test/tests/inc/auth_nameencode.test.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/auth_nameencode.test.php b/_test/tests/inc/auth_nameencode.test.php index da9f31f90..64e437004 100644 --- a/_test/tests/inc/auth_nameencode.test.php +++ b/_test/tests/inc/auth_nameencode.test.php @@ -42,6 +42,22 @@ class auth_nameencode_test extends DokuWikiTest { $out = '%40hey%24you'; $this->assertEquals(auth_nameencode($in),$out); } + + // include a two byte utf8 character which shouldn't be encoded + function test_hebrew(){ + $in = 'nun-נ8'; + $expect = 'nun%2dנ8'; + + $this->assertEquals($expect, auth_nameencode($in)); + } + + // include a three byte utf8 character which shouldn't be encoded + function test_devanagiri(){ + $in = 'ut-fठ8'; + $expect = 'ut%2dfठ8'; + + $this->assertEquals($expect, auth_nameencode($in)); + } } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From d1612d99b95fed9b053ebdb5e4c12f30aeb69203 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 20 Oct 2013 21:05:09 +0200 Subject: escaped another $ in mailer test --- _test/tests/inc/mailer.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index dc234232f..bac0c39ba 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -63,7 +63,7 @@ class mailer_test extends DokuWikiTest { $this->assertArrayHasKey('From',$headers); $this->assertEquals('Ths neeedsserious cleaning.',$headers['From']); $this->assertArrayHasKey('Bad',$headers); - $this->assertEquals("Thös ne\needs\x00serious cleaning$§%.",$headers['Bad']); + $this->assertEquals("Thös ne\needs\x00serious cleaning\$§%.",$headers['Bad']); $this->assertArrayHasKey('Weird+foo.-_@bar',$headers); // unset a header again -- cgit v1.2.3 From 03a4f627659f89d54c121b485ca89dfaa4a304c0 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sun, 20 Oct 2013 19:36:56 +0100 Subject: change error level to ignore notices --- _test/bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/bootstrap.php b/_test/bootstrap.php index c3eba048a..9f4bb5fbd 100644 --- a/_test/bootstrap.php +++ b/_test/bootstrap.php @@ -15,7 +15,7 @@ require_once DOKU_UNITTEST.'core/TestUtils.php'; define('SIMPLE_TEST', true); // basic behaviours -define('DOKU_E_LEVEL',E_ALL); +define('DOKU_E_LEVEL',E_ALL ^ E_NOTICE); error_reporting(DOKU_E_LEVEL); set_time_limit(0); ini_set('memory_limit','2048M'); -- cgit v1.2.3 From 712c66312b26ec08723b47583b7be846451ed712 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 20 Oct 2013 21:28:32 +0200 Subject: more verbosity in test case --- _test/tests/inc/httpclient_http_proxy.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/httpclient_http_proxy.test.php b/_test/tests/inc/httpclient_http_proxy.test.php index faa7a4280..c53e3579c 100644 --- a/_test/tests/inc/httpclient_http_proxy.test.php +++ b/_test/tests/inc/httpclient_http_proxy.test.php @@ -13,7 +13,7 @@ class httpclient_http_proxy_test extends DokuWikiTest { $http->proxy_port = 8080; $data = $http->get($this->url); - $this->assertFalse($data === false, 'HTTP response'); + $this->assertFalse($data === false, 'HTTP response '.$http->error); $this->assertTrue(strpos($data,'DokuWiki') !== false, 'response content'); } -- cgit v1.2.3 From b7cfeab63d3666a24fad96ae42669a2f55e9da03 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 20 Oct 2013 21:37:54 +0200 Subject: make sure HTTP test uses HTTP only and doesn't get redirected --- _test/tests/inc/httpclient_http_proxy.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/inc/httpclient_http_proxy.test.php b/_test/tests/inc/httpclient_http_proxy.test.php index c53e3579c..4aa039fcc 100644 --- a/_test/tests/inc/httpclient_http_proxy.test.php +++ b/_test/tests/inc/httpclient_http_proxy.test.php @@ -1,7 +1,7 @@ Date: Fri, 25 Oct 2013 13:30:27 +0100 Subject: unittests for auth_loadACL --- _test/tests/inc/auth_loadacl.test.php | 121 ++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 _test/tests/inc/auth_loadacl.test.php (limited to '_test') diff --git a/_test/tests/inc/auth_loadacl.test.php b/_test/tests/inc/auth_loadacl.test.php new file mode 100644 index 000000000..5e7ac3acf --- /dev/null +++ b/_test/tests/inc/auth_loadacl.test.php @@ -0,0 +1,121 @@ +assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + function test_user_substitution() { + $acls = <<assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + function test_group_substitution() { + $acls = <<assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + function test_both_substitution() { + $acls = <<assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + // put it all together - read the standard acl provided with the test suite + function test_standardtestacls(){ + $expect = array( + "*\t@ALL 8", + "private:*\t@ALL 0", + "users:*\t@ALL 1", + "users:testuser:*\ttestuser 16", + "groups:*\t@ALL 1", + "groups:foo:*\t@foo 16", + "groups:bar:*\t@bar 16", + ); + $this->assertEquals($expect, auth_loadACL()); + } + + // FS#2867, '\s' in php regular expressions may match non-space characters utf8 strings + // this is due to locale setting on the server, which may match bytes '\xA0' and '\x85' + // these two bytes are present in valid multi-byte UTF-8 characters. + // this test will use one, 'ठ' (DEVANAGARI LETTER TTHA, e0 a4 a0). There are many others. + function test_FS2867() { + global $USERINFO; + + setlocale(LC_ALL, "English_United States.1252"); // should only succeed on windows systems + setlocale(LC_ALL, "en_US.UTF-8"); // should succeed on other systems + + $_SERVER['REMOTE_USER'] = 'utfठ8'; + $USERINFO['grps'] = array('utfठ16','utfठa'); + + $acls = <<assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } +} + +//Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From 0113757259202e06f0316ef4be0f938b134e6e9c Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 25 Oct 2013 14:42:48 +0100 Subject: skip FS#2867 test if \s doesn't match \xA0 after attempting to change the locale --- _test/tests/inc/auth_loadacl.test.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/auth_loadacl.test.php b/_test/tests/inc/auth_loadacl.test.php index 5e7ac3acf..64ab1b9cf 100644 --- a/_test/tests/inc/auth_loadacl.test.php +++ b/_test/tests/inc/auth_loadacl.test.php @@ -2,6 +2,7 @@ /** * auth_loadACL carries out the user & group substitutions * + * @author Chris Smith */ class auth_loadacl_test extends DokuWikiTest { @@ -99,6 +100,11 @@ ACL; setlocale(LC_ALL, "English_United States.1252"); // should only succeed on windows systems setlocale(LC_ALL, "en_US.UTF-8"); // should succeed on other systems + // no point continuing with this test if \s doesn't match A0 + if (!preg_match('/\s/',"\xa0")) { + $this->markTestSkipped('Unable to change locale.'); + } + $_SERVER['REMOTE_USER'] = 'utfठ8'; $USERINFO['grps'] = array('utfठ16','utfठa'); -- cgit v1.2.3 From 30eae85545994c10dcacb2d7becceaf569c99f65 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 25 Oct 2013 15:15:58 +0100 Subject: ensure locale is set back to the original value --- _test/tests/inc/auth_loadacl.test.php | 3 +++ 1 file changed, 3 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/auth_loadacl.test.php b/_test/tests/inc/auth_loadacl.test.php index 64ab1b9cf..e8d9f6696 100644 --- a/_test/tests/inc/auth_loadacl.test.php +++ b/_test/tests/inc/auth_loadacl.test.php @@ -97,11 +97,13 @@ ACL; function test_FS2867() { global $USERINFO; + $old_locale = setlocale(LC_ALL, '0'); setlocale(LC_ALL, "English_United States.1252"); // should only succeed on windows systems setlocale(LC_ALL, "en_US.UTF-8"); // should succeed on other systems // no point continuing with this test if \s doesn't match A0 if (!preg_match('/\s/',"\xa0")) { + setlocale(LC_ALL, $old_locale); $this->markTestSkipped('Unable to change locale.'); } @@ -121,6 +123,7 @@ ACL; "devangariठttha\t@ALL 2", ); $this->assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + setlocale(LC_ALL, $old_locale); } } -- cgit v1.2.3 From 9269d0b1fb78c217069efd497734c183df9937be Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Tue, 29 Oct 2013 20:52:27 +0100 Subject: Fix the media usage index to include local links --- _test/tests/inc/fulltext_mediause.test.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to '_test') diff --git a/_test/tests/inc/fulltext_mediause.test.php b/_test/tests/inc/fulltext_mediause.test.php index 9d5b2dc84..503b8bc84 100644 --- a/_test/tests/inc/fulltext_mediause.test.php +++ b/_test/tests/inc/fulltext_mediause.test.php @@ -26,6 +26,13 @@ class fultext_mediause_test extends DokuWikiTest { $this->assertEquals(array('test:medialinks'), ft_mediause('test:example.png')); } + public function test_media_in_local_links() { + saveWikiText('test:locallinks', '[[#test|{{wiki:logolocal.png}}]]', 'Test init'); + idx_addPage('test:locallinks'); + + $this->assertEquals(array('test:locallinks'), ft_mediause('wiki:logolocal.png')); + } + public function test_media_in_footnotes() { saveWikiText('test:media_footnotes', '(({{footnote.png?20x50}} [[foonote|{{:footlink.png}}]]))', 'Test initialization'); idx_addPage('test:media_footnotes'); -- cgit v1.2.3 From 5f5982130c1a9b9adb0e294b811327ddcfbd4fef Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Tue, 5 Nov 2013 20:09:45 +0000 Subject: Improve css_loadfile() tests - use TMP_DIR constant rather than /tmp - swap order of parameters in csstest() to match reported 'expected' & 'actual' - add tests for use of 'url()' in @import - add tests for @import of '.less' files (these test will fail per FS#2875) --- _test/tests/lib/exe/css_css_loadfile.test.php | 33 +++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to '_test') diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php index c89b69b2c..0aa27b0af 100644 --- a/_test/tests/lib/exe/css_css_loadfile.test.php +++ b/_test/tests/lib/exe/css_css_loadfile.test.php @@ -3,13 +3,16 @@ require_once DOKU_INC.'lib/exe/css.php'; class css_css_loadfile_test extends DokuWikiTest { + + protected $file = ''; + public function setUp() { - $this->file = tempnam('/tmp', 'css'); + $this->file = tempnam(TMP_DIR, 'css'); } private function csstest($input, $output = null, $location = 'http://www.example.com/') { io_saveFile($this->file, $input); - $this->assertEquals(css_loadfile($this->file, $location), (is_null($output) ? $input : $output)); + $this->assertEquals((is_null($output) ? $input : $output), css_loadfile($this->file, $location)); } public function test_url_relative() { @@ -32,11 +35,15 @@ class css_css_loadfile_test extends DokuWikiTest { public function test_import_relative() { $this->csstest('@import "test/test.png";', '@import "http://www.example.com/test/test.png";'); $this->csstest('@import \'test/test.png\';', '@import \'http://www.example.com/test/test.png\';'); + $this->csstest('@import url(test/test.png);', '@import url(http://www.example.com/test/test.png);'); + $this->csstest('@import url("test/test.png");', '@import url("http://www.example.com/test/test.png");'); } public function test_import_absolute() { $this->csstest('@import "/test/test.png";'); $this->csstest('@import \'/test/test.png\';'); + $this->csstest('@import url(/test/test.png);'); + $this->csstest('@import url("/test/test.png");'); } public function test_import_with_protocol() { @@ -44,6 +51,28 @@ class css_css_loadfile_test extends DokuWikiTest { $this->csstest('@import "https://www.test.com/test/test.png";'); $this->csstest('@import \'http://www.test.com/test/test.png\';'); $this->csstest('@import \'https://www.test.com/test/test.png\';'); + $this->csstest('@import url(http://www.test.com/test/test.png);'); + $this->csstest('@import url("http://www.test.com/test/test.png");'); + } + + public function test_less_basic() { + $this->csstest('@import "test.less"', '@import "/test.less"'); + $this->csstest('@import "/test.less"', '@import "/test.less"'); + $this->csstest('@import url(http://test.less)'); + } + + // more expected use, where less @import(ed) from e.g. lib/plugins/plugin_name + public function test_less_subdirectories() { + + unlink($this->file); + + $dir = TMP_DIR.'/foo/bar'; + mkdir($dir,0777,true); + $this->file = tempnam($dir, 'css'); + + $this->csstest('@import "test.less"', '@import "/foo/bar/test.less"'); + $this->csstest('@import \'test.less\'', '@import \'/foo/bar/test.less\''); + $this->csstest('@import url(test.less)', '@import url(/foo/bar/test.less)'); } public function tearDown() { -- cgit v1.2.3 From 6d7e4640bed01599dac4bbf5c00b0aff8d3dd4ba Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Tue, 5 Nov 2013 20:49:53 +0000 Subject: additional tests where for relative path to @import less file --- _test/tests/lib/exe/css_css_loadfile.test.php | 3 +++ 1 file changed, 3 insertions(+) (limited to '_test') diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php index 0aa27b0af..c336702f8 100644 --- a/_test/tests/lib/exe/css_css_loadfile.test.php +++ b/_test/tests/lib/exe/css_css_loadfile.test.php @@ -58,6 +58,7 @@ class css_css_loadfile_test extends DokuWikiTest { public function test_less_basic() { $this->csstest('@import "test.less"', '@import "/test.less"'); $this->csstest('@import "/test.less"', '@import "/test.less"'); + $this->csstest('@import "foo/test.less"', '@import "/foo/test.less"'); $this->csstest('@import url(http://test.less)'); } @@ -73,6 +74,8 @@ class css_css_loadfile_test extends DokuWikiTest { $this->csstest('@import "test.less"', '@import "/foo/bar/test.less"'); $this->csstest('@import \'test.less\'', '@import \'/foo/bar/test.less\''); $this->csstest('@import url(test.less)', '@import url(/foo/bar/test.less)'); + + $this->csstest('@import "abc/test.less"', '@import "/foo/bar/abc/test.less"'); } public function tearDown() { -- cgit v1.2.3 From ab1fef6644927b857c64c9c153915d50ef2607f1 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Tue, 5 Nov 2013 20:51:07 +0000 Subject: Test to ensure less can parse the @import rewritten by css_loadfile() This test is horrible, but I believe necessary to ensure that the @import of less files actually works. It is horrible as its not a unit test and its not a true functional test. It probably implies the code in css_out() should be refactored to make it easier to test intermediate results. --- _test/tests/lib/exe/css_at_import_less.test.php | 78 +++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 _test/tests/lib/exe/css_at_import_less.test.php (limited to '_test') diff --git a/_test/tests/lib/exe/css_at_import_less.test.php b/_test/tests/lib/exe/css_at_import_less.test.php new file mode 100644 index 000000000..4a6efcf44 --- /dev/null +++ b/_test/tests/lib/exe/css_at_import_less.test.php @@ -0,0 +1,78 @@ +markTestSkipped('Could not create directory.'); + } + + $this->file = tempnam($dir, 'css'); + + $import = ''; + do { + if ($import) unlink($import); + $import = tempnam($dir, 'less'); + $ok = rename($import, $import.'.less'); + } while (!$ok); + + $this->import = $import.'.less'; + } + + private function csstest($input, $expected_css, $expected_less) { + $location = "http://test.com/"; + io_saveFile($this->file, $input); + $css = css_loadfile($this->file, $location); + $less = css_parseless($css); + $this->assertEquals($expected_css, $css); + $this->assertEquals($expected_less, $less); + } + + public function test_basic() { + $this->setUpFiles(); + + $import = preg_replace('#(^.*[/])#','',$this->import); + $in_css = '@import "'.$import.'";'; + $in_less = '@foo: "bar"; +content: @foo;'; + + $expected_css = '@import "/'.$import.'";'; + $expected_less = 'content: "bar";'; + + io_saveFile($this->import, $in_less); + $this->csstest($in_css, $expected_css, $expected_less); + } + + public function test_subdirectory() { + $this->setUpFiles('/foo/bar'); + + $import = preg_replace('#(^.*[/])#','',$this->import); + $in_css = '@import "'.$import.'";'; + $in_less = '@foo: "bar"; +content: @foo;'; + + $expected_css = '@import "/foo/bar/'.$import.'";'; + $expected_less = 'content: "bar";'; + + io_saveFile($this->import, $in_less); + $this->csstest($in_css, $expected_css, $expected_less); + } + + public function tearDown() { + unlink($this->file); + unlink($this->import); + unset($this->file, $this->import); + } +} + +//Setup VIM: ex: et ts=4 sw=4 : -- cgit v1.2.3 From 28ad2ce3c7b348afcc1efbae4fc64a7ea31585ee Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sun, 17 Nov 2013 21:18:25 +0000 Subject: ensure css loadfile test doesn't try to create a directory (and fail) if the directory already exists --- _test/tests/lib/exe/css_css_loadfile.test.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to '_test') diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php index c336702f8..624becd29 100644 --- a/_test/tests/lib/exe/css_css_loadfile.test.php +++ b/_test/tests/lib/exe/css_css_loadfile.test.php @@ -68,7 +68,13 @@ class css_css_loadfile_test extends DokuWikiTest { unlink($this->file); $dir = TMP_DIR.'/foo/bar'; - mkdir($dir,0777,true); + if (!is_dir($dir)) { + mkdir($dir, 0777, true); + } + if (!is_dir($dir)) { + $this->markTestSkipped('Could not create directory.'); + } + $this->file = tempnam($dir, 'css'); $this->csstest('@import "test.less"', '@import "/foo/bar/test.less"'); -- cgit v1.2.3