diff options
Diffstat (limited to 'Tests/Auth/Yadis/XRI.php')
-rw-r--r-- | Tests/Auth/Yadis/XRI.php | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/Tests/Auth/Yadis/XRI.php b/Tests/Auth/Yadis/XRI.php new file mode 100644 index 0000000..f00fef1 --- /dev/null +++ b/Tests/Auth/Yadis/XRI.php @@ -0,0 +1,141 @@ +<?php + +/** + * XRI resolution / handling tests. + * + * @package Yadis + * @author JanRain, Inc. <openid@janrain.com> + * @copyright 2005 Janrain, Inc. + * @license http://www.gnu.org/copyleft/lesser.html LGPL + */ + +require_once "PHPUnit.php"; +require_once "Services/Yadis/XRIRes.php"; +require_once "Services/Yadis/XRI.php"; +require_once "Services/Yadis/Yadis.php"; + +class Tests_Services_Yadis_XriDiscoveryTestCase extends PHPUnit_TestCase { + function runTest() + { + $this->assertEquals( + Services_Yadis_identifierScheme('=john.smith'), 'XRI'); + + $this->assertEquals( + Services_Yadis_identifierScheme('@smiths/john'), 'XRI'); + + $this->assertEquals( + Services_Yadis_identifierScheme('smoker.myopenid.com'), 'URI'); + + $this->assertEquals( + Services_Yadis_identifierScheme('xri://=john'), 'XRI'); + } +} + +class Tests_Services_Yadis_XriEscapingTestCase extends PHPUnit_TestCase { + function test_escaping_percents() + { + $this->assertEquals(Services_Yadis_escapeForIRI('@example/abc%2Fd/ef'), + '@example/abc%252Fd/ef'); + } + + function runTest() + { + // no escapes + $this->assertEquals('@example/foo/(@bar)', + Services_Yadis_escapeForIRI('@example/foo/(@bar)')); + + // escape slashes + $this->assertEquals('@example/foo/(@bar%2Fbaz)', + Services_Yadis_escapeForIRI('@example/foo/(@bar/baz)')); + + $this->assertEquals('@example/foo/(@bar%2Fbaz)/(+a%2Fb)', + Services_Yadis_escapeForIRI('@example/foo/(@bar/baz)/(+a/b)')); + + // escape query ? and fragment + $this->assertEquals('@example/foo/(@baz%3Fp=q%23r)?i=j#k', + Services_Yadis_escapeForIRI('@example/foo/(@baz?p=q#r)?i=j#k')); + } +} + +class Tests_Services_Yadis_ProxyQueryTestCase extends PHPUnit_TestCase { + function setUp() + { + $this->proxy_url = 'http://xri.example.com/'; + $this->fetcher = Services_Yadis_Yadis::getHTTPFetcher(); + $this->proxy = new Services_Yadis_ProxyResolver($fetcher, + $this->proxy_url); + $this->servicetype = 'xri://+i-service*(+forwarding)*($v*1.0)'; + $this->servicetype_enc = 'xri%3A%2F%2F%2Bi-service%2A%28%2Bforwarding%29%2A%28%24v%2A1.0%29'; + } + + function runTest() + { + $st = $this->servicetype; + $ste = $this->servicetype_enc; + $args_esc = "_xrd_r=application%2Fxrds%2Bxml&_xrd_t=" . $ste; + $h = $this->proxy_url; + $this->assertEquals($h . '=foo?' . $args_esc, + $this->proxy->queryURL('=foo', $st)); + $this->assertEquals($h . '=foo/bar?baz&' . $args_esc, + $this->proxy->queryURL('=foo/bar?baz', $st)); + $this->assertEquals($h . '=foo/bar?baz=quux&' . $args_esc, + $this->proxy->queryURL('=foo/bar?baz=quux', $st)); + $this->assertEquals($h . '=foo/bar?mi=fa&so=la&' . $args_esc, + $this->proxy->queryURL('=foo/bar?mi=fa&so=la', $st)); + + $args_esc = "_xrd_r=application%2Fxrds%2Bxml&_xrd_t=" . $ste; + $h = $this->proxy_url; + $this->assertEquals($h . '=foo/bar??' . $args_esc, + $this->proxy->queryURL('=foo/bar?', $st)); + $this->assertEquals($h . '=foo/bar????' . $args_esc, + $this->proxy->queryURL('=foo/bar???', $st)); + } +} + +class Tests_Services_Yadis_TestGetRootAuthority extends PHPUnit_TestCase { + function runTest() + { + $xris = array( + array("@foo", "@"), + array("@foo*bar", "@"), + array("@*foo*bar", "@"), + array("@foo/bar", "@"), + array("!!990!991", "!"), + array("!1001!02", "!"), + array("=foo*bar", "="), + array("(example.com)/foo", "(example.com)"), + array("(example.com)*bar/foo", "(example.com)"), + array("baz.example.com/foo", "baz.example.com"), + array("baz.example.com:8080/foo", "baz.example.com:8080") + // Looking at the ABNF in XRI Syntax 2.0, I don't think you can + // have example.com*bar. You can do (example.com)*bar, but that + // would mean something else. + // ("example.com*bar/(=baz)", "example.com*bar"), + // ("baz.example.com!01/foo", "baz.example.com!01"), + ); + + foreach ($xris as $tupl) { + list($thexri, $expected_root) = $tupl; + $this->assertEquals(Services_Yadis_XRI($expected_root), + Services_Yadis_rootAuthority($thexri), + 'rootAuthority test ('.$thexri.')'); + } + } +} + +class Tests_Services_Yadis_XRI extends PHPUnit_TestSuite { + function getName() + { + return "Tests_Services_Yadis_XRI"; + } + + function Tests_Services_Yadis_XRI() + { + $this->addTest(new Tests_Services_Yadis_ProxyQueryTestCase()); + $this->addTest(new Tests_Services_Yadis_XriEscapingTestCase()); + $this->addTest(new Tests_Services_Yadis_XriDiscoveryTestCase()); + $this->addTest(new Tests_Services_Yadis_TestGetRootAuthority()); + } +} + +?>
\ No newline at end of file |