diff options
author | Christopher Smith <chris@jalakai.co.uk> | 2014-03-12 18:39:11 +0000 |
---|---|---|
committer | Christopher Smith <chris@jalakai.co.uk> | 2014-03-12 18:39:11 +0000 |
commit | 4e60057c8ccbee18b94a64208311f9bbb338eec6 (patch) | |
tree | 08d79159aa78693c27f54ecebc3105034dfc5933 /_test/tests | |
parent | 57a6f99d09d3662a8a2ad72e312aa6f53bcc2d01 (diff) | |
parent | 069942acdaa5ba825bc3f92c7093b5071789f1ca (diff) | |
download | rpg-4e60057c8ccbee18b94a64208311f9bbb338eec6.tar.gz rpg-4e60057c8ccbee18b94a64208311f9bbb338eec6.tar.bz2 |
Merge branch 'master' into tablethead
Diffstat (limited to '_test/tests')
22 files changed, 1009 insertions, 103 deletions
diff --git a/_test/tests/general/general_languagelint.php b/_test/tests/general/general_languagelint.php new file mode 100644 index 000000000..c11462640 --- /dev/null +++ b/_test/tests/general/general_languagelint.php @@ -0,0 +1,47 @@ +<?php + +class general_languagelint_test extends DokuWikiTest { + + + function test_core() { + $this->checkFiles(glob(DOKU_INC.'inc/lang/*/*.php')); + } + + function test_plugins() { + $this->checkFiles(glob(DOKU_INC.'lib/plugins/*/lang/*/*.php')); + } + + /** + * Run checks over the given PHP language files + * + * @param $files + */ + private function checkFiles($files){ + foreach($files as $file){ + // try to load the file + include $file; + // check it defines an array + $this->assertTrue(is_array($lang), $file); + unset($lang); + + $this->checkUgly($file); + } + } + + /** + * Checks if the file contains any ugly things like leading whitespace, BOM or trailing + * PHP closing mark + * + * @param $file + * @throws Exception + */ + private function checkUgly($file){ + $content = rtrim(file_get_contents($file)); + if(substr($content,0,5) != '<?php') + throw new Exception("$file does not start with '<?php' - check for BOM"); + + if(substr($content,-2) == '?>') + throw new Exception("$file ends with '?>' - remove it!"); + } + +} diff --git a/_test/tests/inc/auth_loadacl.test.php b/_test/tests/inc/auth_loadacl.test.php new file mode 100644 index 000000000..e8d9f6696 --- /dev/null +++ b/_test/tests/inc/auth_loadacl.test.php @@ -0,0 +1,130 @@ +<?php +/** + * auth_loadACL carries out the user & group substitutions + * + * @author Chris Smith <chris@jalakai.co.uk> + */ + +class auth_loadacl_test extends DokuWikiTest { + + function setUp() { + global $USERINFO; + parent::setUp(); + $_SERVER['REMOTE_USER'] = 'testuser'; + $USERINFO['grps'] = array('foo','bar'); + } + + function tearDown() { + parent::tearDown(); + } + + function auth_loadACL_testwrapper($acls) { + global $config_cascade; + $acl_file = $config_cascade['acl']['default']; + + $config_cascade['acl']['default'] .= '.test'; + file_put_contents($config_cascade['acl']['default'],$acls); + + $result = auth_loadACL(); + + unlink($config_cascade['acl']['default']); + $config_cascade['acl']['default'] = $acl_file; + + return $result; + } + + function test_simple() { + $acls = <<<ACL +* @ALL 2 +ACL; + $expect = array("*\t@ALL 2"); + $this->assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + function test_user_substitution() { + $acls = <<<ACL +%USER% %USER% 2 +ACL; + $expect = array( + "testuser\ttestuser 2", + ); + $this->assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + function test_group_substitution() { + $acls = <<<ACL +%GROUP% %GROUP% 2 +ACL; + $expect = array( + "foo\t@foo 2", + "bar\t@bar 2", + ); + $this->assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + } + + function test_both_substitution() { + $acls = <<<ACL +%GROUP%:%USER% %USER% 2 +%GROUP%:%USER% %GROUP% 2 +ACL; + $expect = array( + "foo:testuser\ttestuser 2", + "bar:testuser\ttestuser 2", + "foo:testuser\t@foo 2", + "bar:testuser\t@bar 2", + ); + $this->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; + + $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.'); + } + + $_SERVER['REMOTE_USER'] = 'utfठ8'; + $USERINFO['grps'] = array('utfठ16','utfठa'); + + $acls = <<<ACL +%GROUP%:%USER% %USER% 2 +%GROUP%:* %GROUP% 4 +devangariठttha @ALL 2 +ACL; + $expect = array( + "utfठ16:utfठ8\tutfठ8 2", + "utfठa:utfठ8\tutfठ8 2", + "utfठ16:*\t@utfठ16 4", + "utfठa:*\t@utfठa 4", + "devangariठttha\t@ALL 2", + ); + $this->assertEquals($expect, $this->auth_loadACL_testwrapper($acls)); + setlocale(LC_ALL, $old_locale); + } +} + +//Setup VIM: ex: et ts=4 : diff --git a/_test/tests/inc/auth_nameencode.test.php b/_test/tests/inc/auth_nameencode.test.php index da9f31f90..86db843d6 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'; @@ -42,6 +54,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 : diff --git a/_test/tests/inc/common_basicinfo.test.php b/_test/tests/inc/common_basicinfo.test.php index 0369474c9..8359c0877 100644 --- a/_test/tests/inc/common_basicinfo.test.php +++ b/_test/tests/inc/common_basicinfo.test.php @@ -18,12 +18,12 @@ class common_infofunctions_test extends DokuWikiTest { function _get_info() { global $USERINFO; - $info = array (
- 'isadmin' => true,
+ $info = array ( + 'isadmin' => true, 'ismanager' => true, - 'userinfo' => $USERINFO,
- 'perm' => 255,
- 'namespace' => false,
+ 'userinfo' => $USERINFO, + 'perm' => 255, + 'namespace' => false, 'ismobile' => false, 'client' => 'testuser', ); diff --git a/_test/tests/inc/common_mediainfo.test.php b/_test/tests/inc/common_mediainfo.test.php index 0e67fbcd9..cc5b17ec7 100644 --- a/_test/tests/inc/common_mediainfo.test.php +++ b/_test/tests/inc/common_mediainfo.test.php @@ -18,12 +18,12 @@ class common_basicinfo_test extends DokuWikiTest { function _get_info() { global $USERINFO; - $info = array (
- 'isadmin' => true,
+ $info = array ( + 'isadmin' => true, 'ismanager' => true, - 'userinfo' => $USERINFO,
- 'perm' => 255,
- 'namespace' => false,
+ 'userinfo' => $USERINFO, + 'perm' => 255, + 'namespace' => false, 'ismobile' => false, 'client' => 'testuser', ); diff --git a/_test/tests/inc/common_pageinfo.test.php b/_test/tests/inc/common_pageinfo.test.php index c54fbce26..2b230d9ce 100644 --- a/_test/tests/inc/common_pageinfo.test.php +++ b/_test/tests/inc/common_pageinfo.test.php @@ -31,18 +31,19 @@ class common_pageinfo_test extends DokuWikiTest { 'ismobile' => false, 'client' => 'testuser', ); - $info['rev'] = null;
- $info['subscribed'] = false;
- $info['locked'] = false;
- $info['exists'] = false;
- $info['writable'] = true;
- $info['editable'] = true;
- $info['lastmod'] = false;
- $info['meta'] = array();
- $info['ip'] = null;
- $info['user'] = null;
- $info['sum'] = null;
- $info['editor'] = null;
+ $info['rev'] = null; + $info['subscribed'] = false; + $info['locked'] = false; + $info['exists'] = false; + $info['writable'] = true; + $info['editable'] = true; + $info['lastmod'] = false; + $info['currentrev'] = false; + $info['meta'] = array(); + $info['ip'] = null; + $info['user'] = null; + $info['sum'] = null; + $info['editor'] = null; return $info; } @@ -72,15 +73,16 @@ class common_pageinfo_test extends DokuWikiTest { $rev = filemtime($filename); $info = $this->_get_expected_pageinfo(); - $info['id'] = 'wiki:syntax';
+ $info['id'] = 'wiki:syntax'; $info['namespace'] = 'wiki'; $info['filepath'] = $filename; - $info['exists'] = true;
- $info['lastmod'] = $rev;
- $info['meta'] = p_get_metadata($ID);
+ $info['exists'] = true; + $info['lastmod'] = $rev; + $info['currentrev'] = $rev; + $info['meta'] = p_get_metadata($ID); $this->assertEquals($info, pageinfo()); - }
+ } /** * check info keys and values for anonymous user @@ -88,8 +90,8 @@ class common_pageinfo_test extends DokuWikiTest { function test_anonymoususer(){ global $ID,$conf,$REV; - unset($_SERVER['REMOTE_USER']);
- global $USERINFO; $USERINFO = array();
+ unset($_SERVER['REMOTE_USER']); + global $USERINFO; $USERINFO = array(); $ID = 'wiki:syntax'; $filename = $conf['datadir'].'/wiki/syntax.txt'; @@ -101,18 +103,19 @@ class common_pageinfo_test extends DokuWikiTest { $info['filepath'] = $filename; $info['exists'] = true; $info['lastmod'] = $rev; + $info['currentrev'] = $rev; $info['meta'] = p_get_metadata($ID); $info['rev'] = ''; - $info = array_merge($info, array(
- 'isadmin' => false,
- 'ismanager' => false,
- 'perm' => 8,
- 'client' => '1.2.3.4',
+ $info = array_merge($info, array( + 'isadmin' => false, + 'ismanager' => false, + 'perm' => 8, + 'client' => '1.2.3.4', )); unset($info['userinfo']); $this->assertEquals($info, pageinfo()); - }
+ } /** * check info keys and values with $REV @@ -131,11 +134,12 @@ class common_pageinfo_test extends DokuWikiTest { $info['namespace'] = 'wiki'; $info['meta'] = p_get_metadata($ID); $info['rev'] = $REV; + $info['currentrev'] = $rev; $info['filepath'] = str_replace('pages','attic',substr($filename,0,-3).$REV.'.txt.gz'); $this->assertEquals($info, pageinfo()); $this->assertEquals($rev-100, $REV); - }
+ } /** * check info keys and values with $RANGE @@ -146,13 +150,14 @@ class common_pageinfo_test extends DokuWikiTest { $ID = 'wiki:syntax'; $filename = $conf['datadir'].'/wiki/syntax.txt'; $rev = filemtime($filename); - $range = '1000-2000';
+ $range = '1000-2000'; $info = $this->_get_expected_pageinfo(); $info['id'] = 'wiki:syntax'; $info['namespace'] = 'wiki'; $info['exists'] = true; $info['lastmod'] = $rev; + $info['currentrev'] = $rev; $info['meta'] = p_get_metadata($ID); $info['filepath'] = $filename; @@ -160,18 +165,18 @@ class common_pageinfo_test extends DokuWikiTest { // expected result $RANGE unchanged $RANGE = $range; - $this->assertEquals($info, pageinfo());
+ $this->assertEquals($info, pageinfo()); $this->assertFalse(isset($REV)); - $this->assertEquals($range,$RANGE);
+ $this->assertEquals($range,$RANGE); // check $RANGE with $REV = current // expected result: $RANGE unchanged, $REV cleared $REV = $rev; - $info['rev'] = '';
+ $info['rev'] = ''; - $this->assertEquals($info, pageinfo());
+ $this->assertEquals($info, pageinfo()); $this->assertEquals('',$REV); - $this->assertEquals($range,$RANGE);
+ $this->assertEquals($range,$RANGE); // check with a real $REV // expected result: $REV and $RANGE are cleared @@ -197,6 +202,7 @@ class common_pageinfo_test extends DokuWikiTest { $info['filepath'] = $filename; $info['exists'] = true; $info['lastmod'] = $rev; + $info['currentrev'] = $rev; $info['meta'] = p_get_metadata($ID); // need $INFO set correctly for addLogEntry() global $INFO; @@ -218,7 +224,7 @@ class common_pageinfo_test extends DokuWikiTest { p_set_metadata($ID,array('last_change' => false)); $this->assertEquals($info, pageinfo()); - $this->assertEquals($info['meta']['last_change'], p_get_metadata($ID,'last_change'));
+ $this->assertEquals($info['meta']['last_change'], p_get_metadata($ID,'last_change')); // fake an external edit, pageinfo should clear the last change from meta data // and not return any editor data @@ -226,6 +232,7 @@ class common_pageinfo_test extends DokuWikiTest { touch($filename,$now); $info['lastmod'] = $now; + $info['currentrev'] = $now; $info['meta']['last_change'] = false; $info['ip'] = null; $info['user'] = null; @@ -251,6 +258,7 @@ class common_pageinfo_test extends DokuWikiTest { $info['filepath'] = $filename; $info['exists'] = true; $info['lastmod'] = $rev; + $info['currentrev'] = $rev; $info['meta'] = p_get_metadata($ID); // setup a draft, make it more recent than the current page 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'); diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php index 43dd4478f..3446e1184 100644 --- a/_test/tests/inc/httpclient_http.test.php +++ b/_test/tests/inc/httpclient_http.test.php @@ -1,15 +1,22 @@ <?php +require_once (__DIR__ . '/httpclient_mock.php'); + class httpclient_http_test extends DokuWikiTest { protected $server = 'http://httpbin.org'; + /** * @group internet */ function test_simpleget(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/get?foo=bar'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('args',$resp); @@ -20,9 +27,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_dget(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->dget($this->server.'/get',array('foo'=>'bar')); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('args',$resp); @@ -33,9 +44,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_gzip(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/gzip'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('gzipped',$resp); @@ -46,9 +61,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_simplepost(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->post($this->server.'/post',array('foo'=>'bar')); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('form',$resp); @@ -59,9 +78,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_redirect(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/redirect/3'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('url',$resp); @@ -72,9 +95,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_relredirect(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/relative-redirect/3'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('url',$resp); @@ -85,9 +112,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_redirectfail(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/redirect/5'); - $this->assertTrue($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data === false, 'HTTP response '.$http->error); $this->assertEquals('Maximum number of redirects exceeded',$http->error); } @@ -95,11 +126,19 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_cookies(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $http->get($this->server.'/cookies/set/foo/bar'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } $this->assertEquals(array('foo' => 'bar'), $http->cookies); $data = $http->get($this->server.'/cookies'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('cookies',$resp); @@ -110,9 +149,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_teapot(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/status/418'); - $this->assertTrue($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data === false, 'HTTP response '.$http->error); $this->assertEquals(418,$http->status); } @@ -120,18 +163,26 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_maxbody(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $http->max_bodysize = 250; // this should abort completely $data = $http->get($this->server.'/stream/30'); - $this->assertTrue($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data === false, 'HTTP response '.$http->error); // 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'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); /* should read no more than max_bodysize+1 */ $this->assertLessThanOrEqual(251,strlen($data)); } @@ -140,24 +191,36 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_maxbodyok(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $http->max_bodysize = 500*1024; $data = $http->get($this->server.'/stream/5'); - $this->assertTrue($data !== false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data !== false, 'HTTP response '.$http->error); $http->max_bodysize_abort = false; $data = $http->get($this->server.'/stream/5'); - $this->assertTrue($data !== false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data !== false, 'HTTP response '.$http->error); } /** * @group internet */ function test_basicauth(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $http->user = 'user'; $http->pass = 'pass'; $data = $http->get($this->server.'/basic-auth/user/pass'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertEquals(array('authenticated'=>true,'user'=>'user'), $resp); @@ -167,11 +230,15 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_basicauthfail(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $http->user = 'user'; $http->pass = 'invalid'; $data = $http->get($this->server.'/basic-auth/user/pass'); - $this->assertTrue($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data === false, 'HTTP response '.$http->error); $this->assertEquals(401,$http->status); } @@ -179,10 +246,10 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_timeout(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $http->timeout = 5; $data = $http->get($this->server.'/delay/10'); - $this->assertTrue($data === false, 'HTTP response'); + $this->assertTrue($data === false, 'HTTP response '.$http->error); $this->assertEquals(-100,$http->status); } @@ -190,9 +257,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_headers(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get($this->server.'/response-headers?baz=&foo=bar'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $resp = json_decode($data, true); $this->assertTrue(is_array($resp), 'JSON response'); $this->assertArrayHasKey('baz',$http->resp_headers); @@ -204,9 +275,13 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_chunked(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get('http://whoopdedo.org/cgi-bin/chunked/2550'); - $this->assertFalse($data === false, 'HTTP response'); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertFalse($data === false, 'HTTP response '.$http->error); $this->assertEquals(2550,strlen($data)); } @@ -216,13 +291,17 @@ class httpclient_http_test extends DokuWikiTest { * @group internet */ function test_wikimatrix(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); $data = $http->get('http://www.wikimatrix.org/cfeed/dokuwiki/-/-'); - $this->assertTrue($data !== false, $http->error); + if($http->noconnection()) { + $this->markTestSkipped('connection timed out'); + return; + } + $this->assertTrue($data !== false, 'HTTP response '.$http->error); } function test_postencode(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); // check simple data diff --git a/_test/tests/inc/httpclient_http_proxy.test.php b/_test/tests/inc/httpclient_http_proxy.test.php index faa7a4280..c44dc7ed7 100644 --- a/_test/tests/inc/httpclient_http_proxy.test.php +++ b/_test/tests/inc/httpclient_http_proxy.test.php @@ -1,20 +1,21 @@ <?php +require_once (__DIR__ . '/httpclient_mock.php'); + class httpclient_http_proxy_test extends DokuWikiTest { - protected $url = 'http://www.dokuwiki.org/README'; + protected $url = 'http://test.dokuwiki.org/README'; /** * @group internet */ function test_simpleget(){ - $http = new HTTPClient(); + $http = new HTTPMockClient(); // proxy provided by Andrwe Lord Weber <dokuwiki@andrwe.org> $http->proxy_host = 'proxy.andrwe.org'; $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'); } - }
\ No newline at end of file diff --git a/_test/tests/inc/httpclient_https_proxy.test.php b/_test/tests/inc/httpclient_https_proxy.test.php index aca3b3be2..9402e91af 100644 --- a/_test/tests/inc/httpclient_https_proxy.test.php +++ b/_test/tests/inc/httpclient_https_proxy.test.php @@ -12,4 +12,19 @@ class httpclient_https_proxy_test extends httpclient_http_proxy_test { } parent::setUp(); } + + /** + * @group internet + */ + function test_connectfail(){ + $http = new HTTPMockClient(); + // proxy provided by Andrwe Lord Weber <dokuwiki@andrwe.org> + $http->proxy_host = 'proxy.andrwe.org'; + $http->proxy_port = 8080; + + // the proxy accepts connections to dokuwiki.org only - the connect call should fail + $data = $http->get('https://www.google.com'); + $this->assertFalse($data); + $this->assertEquals(-150, $http->status); + } }
\ No newline at end of file diff --git a/_test/tests/inc/httpclient_mock.php b/_test/tests/inc/httpclient_mock.php new file mode 100644 index 000000000..038045c8b --- /dev/null +++ b/_test/tests/inc/httpclient_mock.php @@ -0,0 +1,46 @@ +<?php +/** + * Class HTTPMockClient + * + * Does not really mock the client, it still does real connections but will retry failed connections + * to work around shaky connectivity. + */ +class HTTPMockClient extends HTTPClient { + protected $tries; + + /** + * Sets shorter timeout + */ + function __construct() { + parent::__construct(); + $this->timeout = 8; // slightly faster timeouts + } + + /** + * Returns true if the connection timed out + * + * @return bool + */ + function noconnection() { + return ($this->tries === 0); + } + + /** + * Retries sending the request multiple times + * + * @param string $url + * @param string $data + * @param string $method + * @return bool + */ + function sendRequest($url, $data = '', $method = 'GET') { + $this->tries = 2; // configures the number of retries + $return = false; + while($this->tries) { + $return = parent::sendRequest($url, $data, $method); + if($this->status != -100) break; + $this->tries--; + } + return $return; + } +}
\ No newline at end of file diff --git a/_test/tests/inc/indexer_indexing.test.php b/_test/tests/inc/indexer_indexing.test.php new file mode 100644 index 000000000..3d8278d6c --- /dev/null +++ b/_test/tests/inc/indexer_indexing.test.php @@ -0,0 +1,62 @@ +<?php +/** + * Tests the indexing functionality of the indexer + * + * @author Michael Hamann <michael@content-space.de> + */ +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(), '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)); + } + + public function test_numeric_twice() { + $indexer = idx_get_indexer(); + $indexer->addPageWords('testpage', '| 1010 | Dallas |'); + $query = array('1010'); + $this->assertEquals(array('1010' => array('testpage' => 1)), $indexer->lookup($query)); + $indexer->addPageWords('notfound', '| 1010 | Dallas |'); + $this->assertEquals(array('1010' => array('testpage' => 1, 'notfound' => 1)), $indexer->lookup($query)); + } + + public function test_numeric_twice_meta() { + $indexer = idx_get_indexer(); + $indexer->addMetaKeys('testpage', 'onezero', array('1010')); + $indexer->addMetaKeys('notfound', 'onezero', array('1010')); + $query = '1010'; + $this->assertEquals(array('notfound', 'testpage'), $indexer->lookupKey('onezero', $query)); + } +}
\ No newline at end of file diff --git a/_test/tests/inc/io_rmdir.test.php b/_test/tests/inc/io_rmdir.test.php new file mode 100644 index 000000000..3de57fa86 --- /dev/null +++ b/_test/tests/inc/io_rmdir.test.php @@ -0,0 +1,219 @@ +<?php + +class io_rmdir_test extends DokuWikiTest { + + function test_nopes(){ + // set up test dir + $dir = io_mktmpdir(); + $top = dirname($dir); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + + // switch into it + $this->assertTrue(chdir($dir)); + $this->assertEquals($dir, getcwd()); + + + $this->assertFalse(io_rmdir('', false)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir('', true)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir(null, false)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir(null, true)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir(false, false)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir(false, true)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir(array(), false)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFalse(io_rmdir(array(), true)); + clearstatcache(); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + $this->assertFileNotExists("$dir/this/does/not/exist"); + $this->assertTrue(io_rmdir("$dir/this/does/not/exist")); + clearstatcache(); + $this->assertFileNotExists("$dir/this/does/not/exist"); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + } + + + function test_empty_single(){ + // set up test dir + $dir = io_mktmpdir(); + $top = dirname($dir); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + + // delete successfully + $this->assertTrue(io_rmdir($dir, false)); + + // check result + clearstatcache(); + $this->assertFalse(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + // same again with deletefiles + + // set up test dir + $dir = io_mktmpdir(); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + + // delete successfully + $this->assertTrue(io_rmdir($dir, true)); + + // check result + clearstatcache(); + $this->assertFalse(is_dir($dir)); + $this->assertTrue(is_dir($top)); + } + + + function test_empty_hierarchy(){ + // setup hierachy and test it exists + $dir = io_mktmpdir(); + $top = dirname($dir); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(io_mkdir_p("$dir/foo/bar/baz")); + $this->assertTrue(is_dir("$dir/foo/bar/baz")); + $this->assertTrue(io_mkdir_p("$dir/foobar/bar/baz")); + $this->assertTrue(is_dir("$dir/foobar/bar/baz")); + + // delete successfully + $this->assertTrue(io_rmdir($dir, false)); + + // check result + clearstatcache(); + $this->assertFalse(is_dir("$dir/foo/bar/baz")); + $this->assertFalse(is_dir("$dir/foobar/bar/baz")); + $this->assertFalse(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + // same again with deletefiles + + // setup hierachy and test it exists + $dir = io_mktmpdir(); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(io_mkdir_p("$dir/foo/bar/baz")); + $this->assertTrue(is_dir("$dir/foo/bar/baz")); + $this->assertTrue(io_mkdir_p("$dir/foobar/bar/baz")); + $this->assertTrue(is_dir("$dir/foobar/bar/baz")); + + // delete successfully + $this->assertTrue(io_rmdir($dir, true)); + + // check result + clearstatcache(); + $this->assertFalse(is_dir("$dir/foo/bar/baz")); + $this->assertFalse(is_dir("$dir/foobar/bar/baz")); + $this->assertFalse(is_dir($dir)); + $this->assertTrue(is_dir($top)); + } + + function test_full_single(){ + // set up test dir + $dir = io_mktmpdir(); + $top = dirname($dir); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + + // put file + $this->assertTrue(io_saveFile("$dir/testfile.txt", 'foobar')); + $this->assertFileExists("$dir/testfile.txt"); + + // delete unsuccessfully + $this->assertFalse(io_rmdir($dir, false)); + + // check result + clearstatcache(); + $this->assertFileExists("$dir/testfile.txt"); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + // same again with deletefiles + + // delete successfully + $this->assertTrue(io_rmdir($dir, true)); + + // check result + clearstatcache(); + $this->assertFileNotExists("$dir/testfile.txt"); + $this->assertFalse(is_dir($dir)); + $this->assertTrue(is_dir($top)); + } + + function test_full_hierarchy(){ + // setup hierachy and test it exists + $dir = io_mktmpdir(); + $top = dirname($dir); + $this->assertTrue($dir !== false); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(io_mkdir_p("$dir/foo/bar/baz")); + $this->assertTrue(is_dir("$dir/foo/bar/baz")); + $this->assertTrue(io_mkdir_p("$dir/foobar/bar/baz")); + $this->assertTrue(is_dir("$dir/foobar/bar/baz")); + + // put files + $this->assertTrue(io_saveFile("$dir/testfile.txt", 'foobar')); + $this->assertFileExists("$dir/testfile.txt"); + $this->assertTrue(io_saveFile("$dir/foo/testfile.txt", 'foobar')); + $this->assertFileExists("$dir/foo/testfile.txt"); + $this->assertTrue(io_saveFile("$dir/foo/bar/baz/testfile.txt", 'foobar')); + $this->assertFileExists("$dir/foo/bar/baz/testfile.txt"); + + // delete unsuccessfully + $this->assertFalse(io_rmdir($dir, false)); + + // check result + clearstatcache(); + $this->assertFileExists("$dir/testfile.txt"); + $this->assertFileExists("$dir/foo/testfile.txt"); + $this->assertFileExists("$dir/foo/bar/baz/testfile.txt"); + $this->assertTrue(is_dir("$dir/foo/bar/baz")); + $this->assertTrue(is_dir("$dir/foobar/bar/baz")); + $this->assertTrue(is_dir($dir)); + $this->assertTrue(is_dir($top)); + + // delete successfully + $this->assertTrue(io_rmdir($dir, true)); + + // check result + clearstatcache(); + $this->assertFileNotExists("$dir/testfile.txt"); + $this->assertFileNotExists("$dir/foo/testfile.txt"); + $this->assertFileNotExists("$dir/foo/bar/baz/testfile.txt"); + $this->assertFalse(is_dir("$dir/foo/bar/baz")); + $this->assertFalse(is_dir("$dir/foobar/bar/baz")); + $this->assertFalse(is_dir($dir)); + $this->assertTrue(is_dir($top)); + } + +}
\ No newline at end of file diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index 3a89413b4..50d282864 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 <test@example.com>'); - $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? @@ -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 @@ -154,7 +154,19 @@ class mailer_test extends DokuWikiTest { $headers['Cc'] = ''; $header = $mail->prepareHeaders(); $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.'); + $this->assertEquals(0, preg_match('/(^|\n)Cc: (\n|$)/', $header), 'Cc found in headers.'); + } + + function test_nullTOorCCorBCC() { + $mail = new TestMailer(); + $headers = &$mail->propRef('headers'); + $headers['Bcc'] = NULL; + $headers['Cc'] = NULL; + $headers['To'] = NULL; + $header = $mail->prepareHeaders(); + $this->assertEquals(0, preg_match('/(^|\n)Bcc: (\n|$)/', $header), 'Bcc found in headers.'); + $this->assertEquals(0, preg_match('/(^|\n)Cc: (\n|$)/', $header), 'Cc found in headers.'); + $this->assertEquals(0, preg_match('/(^|\n)To: (\n|$)/', $header), 'To found in headers.'); } /** @@ -179,7 +191,10 @@ class mailer_test extends DokuWikiTest { // 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); + if($results === false) { + $this->markTestSkipped('no response from validator'); + return; + } // parse the result lines $lines = explode("\n", $results); diff --git a/_test/tests/inc/parser/parser_table.test.php b/_test/tests/inc/parser/parser_table.test.php index d4596bc8a..3e9651d14 100644 --- a/_test/tests/inc/parser/parser_table.test.php +++ b/_test/tests/inc/parser/parser_table.test.php @@ -849,4 +849,23 @@ def'); ); $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); } + + function testTable_FS1833() { + $syntax = " \n| Row 0 Col 1 |\n"; + $this->P->addMode('table',new Doku_Parser_Mode_Table()); + $this->P->parse($syntax); + $calls = array ( + array('document_start',array()), + array('table_open',array(1, 1, 2)), + array('tablerow_open',array()), + array('tablecell_open',array(1,'left',1)), + array('cdata',array(' Row 0 Col 1 ')), + array('tablecell_close',array()), + array('tablerow_close',array()), + array('table_close',array(strlen($syntax))), + array('document_end',array()), + ); + $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); + } + } diff --git a/_test/tests/inc/parserutils_get_renderer.test.php b/_test/tests/inc/parserutils_get_renderer.test.php new file mode 100644 index 000000000..69aeb3b19 --- /dev/null +++ b/_test/tests/inc/parserutils_get_renderer.test.php @@ -0,0 +1,83 @@ +<?php + +class parserutils_get_renderer_test extends DokuWikiTest { + + private $plugin_controller; + + // test default behaviour / usual settings + function test_p_get_renderer_normal() { + global $conf; + + $old_conf = $conf; + $conf['renderer_xhtml'] = 'xhtml'; + + $this->assertInstanceOf('Doku_Renderer_xhtml', p_get_renderer('xhtml')); + + $conf = $old_conf; + } + + // test get a renderer plugin + function test_p_get_renderer_plugin() { + global $conf; + global $plugin_controller; + + $old_conf = $conf; + $conf['renderer_xhtml'] = 'get_renderer_test'; + $this->plugin_controller = $plugin_controller; + $plugin_controller = $this; + + $this->assertInstanceOf('renderer_plugin_test', p_get_renderer('xhtml')); + + $conf = $old_conf; + $plugin_controller = $this->plugin_controller; + } + + // test fallback succeeds + function test_p_get_renderer_fallback() { + global $conf; + + $old_conf = $conf; + $conf['renderer_xhtml'] = 'badvalue'; + + $this->assertInstanceOf('Doku_Renderer_xhtml', p_get_renderer('xhtml')); + + $conf = $old_conf; + } + + // test fallback fails + /** + * @expectedException PHPUnit_Framework_Error + * @expectedExceptionCode E_USER_WARNING + */ + function test_p_get_renderer_fallback_fail() { + global $conf; + + $old_conf = $conf; + $conf['renderer_junk'] = 'badvalue'; + + $this->assertNull(p_get_renderer('junk')); + + $conf = $old_conf; + } + + // wrapper function for the fake plugin controller, return $this for the fake syntax of this test + function load($type,$name,$new=false,$disabled=false){ + if ($name == 'get_renderer_test') { + return new renderer_plugin_test(); + } else { + return $this->plugin_controller->load($type, $name, $new, $disabled); + } + } + } + +require_once DOKU_INC . 'inc/parser/xhtml.php'; + +class renderer_plugin_test extends Doku_Renderer_xhtml { + + function canRender($format) { + return ($format=='xhtml'); + } + +} + +// vim:ts=4:sw=4:et: 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 { 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; } diff --git a/_test/tests/inc/utf8_strtolower.test.php b/_test/tests/inc/utf8_strtolower.test.php new file mode 100644 index 000000000..85f5b270b --- /dev/null +++ b/_test/tests/inc/utf8_strtolower.test.php @@ -0,0 +1,23 @@ +<?php +// use no mbstring help here +if(!defined('UTF8_NOMBSTRING')) define('UTF8_NOMBSTRING',1); + +class utf8_strtolower_test extends DokuWikiTest { + + function test_givens(){ + $data = array( + 'Αρχιτεκτονική Μελέτη' => 'αρχιτεκτονική μελέτη', // FS#2173 + ); + + foreach($data as $input => $expected) { + $this->assertEquals($expected, utf8_strtolower($input)); + } + + // just make sure our data was correct + if(function_exists('mb_strtolower')) { + foreach($data as $input => $expected) { + $this->assertEquals($expected, mb_strtolower($input, 'utf-8')); + } + } + } +}
\ No newline at end of file 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 @@ +<?php + +require_once DOKU_INC.'lib/exe/css.php'; + +class css_at_import_less_test extends DokuWikiTest { + + protected $file = ''; + protected $import = ''; + + public function setUpFiles($subdir = '') { + + $dir = TMP_DIR . $subdir; + if (!is_dir($dir)) { + mkdir($dir, 0777, true); + } + if (!is_dir($dir)) { + $this->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 : diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php index c89b69b2c..624becd29 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,37 @@ 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 "foo/test.less"', '@import "/foo/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'; + 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"'); + $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() { diff --git a/_test/tests/test/basic.test.php b/_test/tests/test/basic.test.php index 05778ccf9..0639f0c5a 100644 --- a/_test/tests/test/basic.test.php +++ b/_test/tests/test/basic.test.php @@ -33,7 +33,7 @@ class InttestsBasicTest extends DokuWikiTest { $response = $request->execute(); $this->assertTrue( - strpos($response->getContent(), 'DokuWiki') >= 0, + strpos($response->getContent(), 'DokuWiki') !== false, 'DokuWiki was not a word in the output' ); } @@ -60,7 +60,7 @@ class InttestsBasicTest extends DokuWikiTest { $this->assertEquals('wiki:dokuwiki', $request->getPost('id')); // output check - $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0); + $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') !== false); } function testPostGet() { @@ -84,7 +84,7 @@ class InttestsBasicTest extends DokuWikiTest { $this->assertEquals('wiki:dokuwiki', $request->getGet('id')); // output check - $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0); + $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') !== false); } function testGet() { @@ -116,18 +116,18 @@ class InttestsBasicTest extends DokuWikiTest { $this->assertEquals('bar', $request->getGet('test')); // output check - $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0); + $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') !== false); } function testScripts() { $request = new TestRequest(); // doku - $response = $request->get();
- $this->assertEquals('doku.php',$request->getScript());
+ $response = $request->get(); + $this->assertEquals('doku.php',$request->getScript()); - $response = $request->get(array(),'/doku.php?id=wiki:dokuwiki&test=foo');
- $this->assertEquals('doku.php',$request->getScript());
+ $response = $request->get(array(),'/doku.php?id=wiki:dokuwiki&test=foo'); + $this->assertEquals('doku.php',$request->getScript()); // fetch $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png'); @@ -149,8 +149,8 @@ class InttestsBasicTest extends DokuWikiTest { $request = new TestRequest(); $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png'); - $headers = $response->getHeaders();
- $this->assertTrue(!empty($headers));
+ $headers = $response->getHeaders(); + $this->assertTrue(!empty($headers)); } function testGetHeader(){ @@ -168,5 +168,13 @@ class InttestsBasicTest extends DokuWikiTest { $response = new TestResponse('',array_slice($this->some_headers,0,-2)); // slice off the last two headers to leave no status header $this->assertNull($response->getStatusCode()); } + + function testINPUT() { + $request = new TestRequest(); + $response = $request->get(array('id' => 'mailinglist'), '/doku.php'); + + // output check + $this->assertTrue(strpos($response->getContent(), 'Netiquette') !== false); + } } |