173 lines
5.3 KiB
PHP
173 lines
5.3 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Tests for the TrustRoot module
|
||
|
*/
|
||
|
|
||
|
require_once "Auth/OpenID/TrustRoot.php";
|
||
|
require_once "Tests/Auth/OpenID/TestUtil.php";
|
||
|
|
||
|
class Tests_Auth_OpenID_TRParseCase extends PHPUnit_Framework_TestCase {
|
||
|
function Tests_Auth_OpenID_TRParseCase($desc, $case, $expected)
|
||
|
{
|
||
|
$this->setName($desc);
|
||
|
$this->case = $case;
|
||
|
$this->expected = $expected;
|
||
|
}
|
||
|
|
||
|
function runTest()
|
||
|
{
|
||
|
$is_sane = Auth_OpenID_TrustRoot::isSane($this->case);
|
||
|
$parsed = (bool)Auth_OpenID_TrustRoot::_parse($this->case);
|
||
|
switch ($this->expected) {
|
||
|
case 'sane':
|
||
|
$this->assertTrue($parsed, "Did not parse");
|
||
|
$this->assertTrue($is_sane, "Is not sane");
|
||
|
break;
|
||
|
case 'insane':
|
||
|
$this->assertTrue($parsed, "Did not parse");
|
||
|
$this->assertFalse($is_sane, "Is sane");
|
||
|
break;
|
||
|
default:
|
||
|
$this->assertFalse($parsed, "Did parse");
|
||
|
$this->assertFalse($is_sane, "Is sane");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Tests_Auth_OpenID_TRMatchCase extends PHPUnit_Framework_TestCase {
|
||
|
function Tests_Auth_OpenID_TRMatchCase($desc, $tr, $rt, $matches)
|
||
|
{
|
||
|
$this->setName($desc);
|
||
|
$this->tr = $tr;
|
||
|
$this->rt = $rt;
|
||
|
$this->matches = $matches;
|
||
|
}
|
||
|
|
||
|
function runTest()
|
||
|
{
|
||
|
$matches = Auth_OpenID_TrustRoot::match($this->tr, $this->rt);
|
||
|
$this->assertEquals((bool)$this->matches, (bool)$matches);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Tests_Auth_OpenID_parseHeadings($data, $c)
|
||
|
{
|
||
|
$heading_pat = '/(^|\n)' . $c . '{40}\n([^\n]+)\n' . $c . '{40}\n()/';
|
||
|
$offset = 0;
|
||
|
$headings = array();
|
||
|
while (true) {
|
||
|
preg_match($heading_pat, substr($data, $offset), $matches,
|
||
|
PREG_OFFSET_CAPTURE);
|
||
|
if (!$matches) {
|
||
|
break;
|
||
|
}
|
||
|
$start = $matches[0][1];
|
||
|
$heading = $matches[2][0];
|
||
|
$end = $matches[3][1];
|
||
|
$headings[] = array('heading' => $heading,
|
||
|
'start' => $offset + $start,
|
||
|
'end' => $offset + $end,
|
||
|
);
|
||
|
$offset += $end;
|
||
|
}
|
||
|
return $headings;
|
||
|
}
|
||
|
|
||
|
function Tests_Auth_OpenID_getSections($data)
|
||
|
{
|
||
|
$headings = Tests_Auth_OpenID_parseHeadings($data, '-');
|
||
|
$sections = array();
|
||
|
$n = count($headings);
|
||
|
for ($i = 0; $i < $n; ) {
|
||
|
$secdata = $headings[$i];
|
||
|
list($numtests, $desc) = explode(': ', $secdata['heading']);
|
||
|
$start = $secdata['end'];
|
||
|
$i += 1;
|
||
|
if ($i < $n) {
|
||
|
$blob = substr($data, $start, $headings[$i]['start'] - $start);
|
||
|
} else {
|
||
|
$blob = substr($data, $start);
|
||
|
}
|
||
|
$lines = explode("\n", trim($blob));
|
||
|
if (count($lines) != $numtests) {
|
||
|
trigger_error('Parse failure: ' . var_export($secdata, true),
|
||
|
E_USER_ERROR);
|
||
|
}
|
||
|
$sections[] = array('desc' => $desc, 'lines' => $lines,);
|
||
|
}
|
||
|
return $sections;
|
||
|
}
|
||
|
|
||
|
function Tests_Auth_OpenID_trParseTests($head, $tests)
|
||
|
{
|
||
|
$tests = array('fail' => $tests[0],
|
||
|
'insane' => $tests[1],
|
||
|
'sane' => $tests[2]);
|
||
|
$testobjs = array();
|
||
|
foreach ($tests as $expected => $testdata) {
|
||
|
$lines = $testdata['lines'];
|
||
|
foreach ($lines as $line) {
|
||
|
$desc = sprintf("%s - %s: %s", $head,
|
||
|
$testdata['desc'], var_export($line, true));
|
||
|
$testobjs[] = new Tests_Auth_OpenID_TRParseCase(
|
||
|
$desc, $line, $expected);
|
||
|
}
|
||
|
}
|
||
|
return $testobjs;
|
||
|
}
|
||
|
|
||
|
function Tests_Auth_OpenID_trMatchTests($head, $tests)
|
||
|
{
|
||
|
$tests = array(true => $tests[0], false => $tests[1]);
|
||
|
$testobjs = array();
|
||
|
foreach ($tests as $expected => $testdata) {
|
||
|
$lines = $testdata['lines'];
|
||
|
foreach ($lines as $line) {
|
||
|
$pat = '/^([^ ]+) +([^ ]+)$/';
|
||
|
preg_match($pat, $line, $matches);
|
||
|
list($_, $tr, $rt) = $matches;
|
||
|
$desc = sprintf("%s - %s: %s %s", $head, $testdata['desc'],
|
||
|
var_export($tr, true), var_export($rt, true));
|
||
|
$testobjs[] = new Tests_Auth_OpenID_TRMatchCase(
|
||
|
$desc, $tr, $rt, $expected);
|
||
|
}
|
||
|
}
|
||
|
return $testobjs;
|
||
|
}
|
||
|
|
||
|
function Tests_Auth_OpenID_trustRootTests()
|
||
|
{
|
||
|
$data = Tests_Auth_OpenID_readdata('trustroot.txt');
|
||
|
list($parsehead, $matchhead) = Tests_Auth_OpenID_parseHeadings($data, '=');
|
||
|
$pe = $parsehead['end'];
|
||
|
$parsedata = substr($data, $pe, $matchhead['start'] - $pe);
|
||
|
$parsetests = Tests_Auth_OpenID_getSections($parsedata);
|
||
|
$parsecases = Tests_Auth_OpenID_trParseTests($parsehead['heading'],
|
||
|
$parsetests);
|
||
|
|
||
|
$matchdata = substr($data, $matchhead['end']);
|
||
|
$matchtests = Tests_Auth_OpenID_getSections($matchdata);
|
||
|
$matchcases = Tests_Auth_OpenID_trMatchTests($matchhead['heading'],
|
||
|
$matchtests);
|
||
|
|
||
|
return array_merge($parsecases, $matchcases);
|
||
|
}
|
||
|
|
||
|
class Tests_Auth_OpenID_TrustRoot extends PHPUnit_Framework_TestSuite {
|
||
|
function Tests_Auth_OpenID_TrustRoot($name)
|
||
|
{
|
||
|
$this->setName($name);
|
||
|
|
||
|
foreach (Tests_Auth_OpenID_trustRootTests() as $test) {
|
||
|
$this->_addTestByValue($test);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _addTestByValue($test) {
|
||
|
$this->addTest($test);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|