123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- <?php
- /**
- * Tests for the KVForm module.
- *
- * PHP versions 4 and 5
- *
- * LICENSE: See the COPYING file included in this distribution.
- *
- * @package OpenID
- * @author JanRain, Inc. <openid@janrain.com>
- * @copyright 2005-2008 Janrain, Inc.
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
- */
- require_once 'Auth/OpenID/KVForm.php';
- global $_Tests_Auth_OpenID_kverrors;
- $_Tests_Auth_OpenID_kverrors = null;
- /**
- * Keep a list of the logged errors
- */
- function Tests_Auth_OpenID_kvHandleError($errno, $errmsg)
- {
- global $_Tests_Auth_OpenID_kverrors;
- $_Tests_Auth_OpenID_kverrors[] = $errmsg;
- }
- class Tests_Auth_OpenID_KVForm_TestCase extends PHPUnit_Framework_TestCase {
- var $errs;
- function runTest()
- {
- // Re-set the number of logged errors
- global $_Tests_Auth_OpenID_kverrors;
- $_Tests_Auth_OpenID_kverrors = array();
- set_error_handler("Tests_Auth_OpenID_kvHandleError");
- $this->_runTest();
- // Check to make sure we have the expected number of logged errors
- //$this->assertEquals($this->errs, count($_Tests_Auth_OpenID_kverrors));
- restore_error_handler();
- }
- function _runTest()
- {
- trigger_error('Must be overridden', E_USER_ERROR);
- }
- }
- class Tests_Auth_OpenID_KVForm_TestCase_Parse
- extends Tests_Auth_OpenID_KVForm_TestCase {
- function Tests_Auth_OpenID_KVForm_TestCase_Parse(
- $arr, $str, $lossy, $errs)
- {
- $this->arr = $arr;
- $this->str = $str;
- $this->lossy = $lossy;
- $this->errs = $errs;
- }
- function _runTest()
- {
- // Do one parse, after which arrayToKV and kvToArray should be
- // inverses.
- $parsed1 = Auth_OpenID_KVForm::toArray($this->str);
- $serial1 = Auth_OpenID_KVForm::fromArray($this->arr);
- if ($this->lossy == "neither" || $this->lossy == "str") {
- $this->assertEquals($this->arr, $parsed1, "str was lossy");
- }
- if ($this->lossy == "neither" || $this->lossy == "arr") {
- $this->assertEquals($this->str, $serial1, "array was lossy");
- }
- $parsed2 = Auth_OpenID_KVForm::toArray($serial1);
- $serial2 = Auth_OpenID_KVForm::fromArray($parsed1);
- // Round-trip both
- $parsed3 = Auth_OpenID_KVForm::toArray($serial2);
- $serial3 = Auth_OpenID_KVForm::fromArray($parsed2);
- $this->assertEquals($serial2, $serial3, "serialized forms differ");
- // Check to make sure that they're inverses.
- $this->assertEquals($parsed2, $parsed3, "parsed forms differ");
- }
- }
- class Tests_Auth_OpenID_KVForm_TestCase_Null
- extends Tests_Auth_OpenID_KVForm_TestCase {
- function Tests_Auth_OpenID_KVForm_TestCase_Null($arr, $errs)
- {
- $this->arr = $arr;
- $this->errs = $errs;
- }
- function _runTest()
- {
- $serialized = Auth_OpenID_KVForm::fromArray($this->arr);
- $this->assertTrue($serialized === null,
- 'serialization unexpectedly succeeded');
- }
- }
- class Tests_Auth_OpenID_KVForm extends PHPUnit_Framework_TestSuite {
- function Tests_Auth_OpenID_KVForm($name)
- {
- $this->setName($name);
- $testdata_list = array(
- array("name" => "simple",
- "str" => "college:harvey mudd\n",
- "arr" => array("college" => "harvey mudd"),
- ),
- array("name" => "empty",
- "str" => "",
- "arr" => array(),
- ),
- array("name" => "empty (just newline)",
- "str" => "\n",
- "arr" => array(),
- "lossy" => "str",
- "errors" => 1,
- ),
- array("name" => "empty (double newline)",
- "str" => "\n\n",
- "arr" => array(),
- "lossy" => "str",
- "errors" => 2,
- ),
- array("name" => "empty (no colon)",
- "str" => "East is least\n",
- "arr" => array(),
- "lossy" => "str",
- "errors" => 1,
- ),
- array("name" => "two keys",
- "str" => "city:claremont\nstate:CA\n",
- "arr" => array('city' => 'claremont',
- 'state' => 'CA'),
- ),
- array("name" => "real life",
- "str" => "is_valid:true\ninvalidate_handle:" .
- "{HMAC-SHA1:2398410938412093}\n",
- "arr" => array('is_valid' => 'true',
- 'invalidate_handle' =>
- '{HMAC-SHA1:2398410938412093}'),
- ),
- array("name" => "empty key and value",
- "str" => ":\n",
- "arr" => array(''=>''),
- ),
- array("name" => "empty key, not value",
- "str" => ":missing key\n",
- "arr" => array(''=>'missing key'),
- ),
- array("name" => "whitespace at front of key",
- "str" => " street:foothill blvd\n",
- "arr" => array('street'=>'foothill blvd'),
- "lossy" => "str",
- "errors" => 1,
- ),
- array("name" => "whitespace at front of value",
- "str" => "major: computer science\n",
- "arr" => array('major'=>'computer science'),
- "lossy" => "str",
- "errors" => 1,
- ),
- array("name" => "whitespace around key and value",
- "str" => " dorm : east \n",
- "arr" => array('dorm'=>'east'),
- "lossy" => "str",
- "errors" => 2,
- ),
- array("name" => "missing trailing newline",
- "str" => "e^(i*pi)+1:0",
- "arr" => array('e^(i*pi)+1'=>'0'),
- "lossy" => "str",
- "errors" => 1,
- ),
- array("name" => "missing trailing newline (two key)",
- "str" => "east:west\nnorth:south",
- "arr" => array('east'=>'west',
- 'north'=>'south'),
- "lossy" => "str",
- "errors" => 1,
- ),
- array("name" => "colon in key",
- "arr" => array("k:k" => 'v'),
- "errors" => 1,
- ),
- array("name" => "newline in key",
- "arr" => array("k\nk" => 'v'),
- "errors" => 1,
- ),
- array("name" => "newline in value",
- "arr" => array('k' => "v\nv"),
- "errors" => 1,
- ),
- array("name" => "array whitespace",
- "arr" => array(" k " => "v"),
- "lossy" => "both",
- "str" => " k :v\n",
- "errors" => 2,
- ),
- array("name" => "array ordering 1",
- "arr" => array("a" => "x",
- "b" => "x",
- "c" => "x"),
- "str" => "a:x\nb:x\nc:x\n",
- ),
- array("name" => "array ordering 2",
- "arr" => array("a" => "x",
- "c" => "x",
- "b" => "x"),
- "str" => "a:x\nc:x\nb:x\n",
- ),
- );
- foreach ($testdata_list as $testdata) {
- if (isset($testdata['str'])) {
- $str = $testdata['str'];
- } else {
- $str = null;
- }
- $arr = $testdata["arr"];
- if (isset($testdata['errors'])) {
- $errs = $testdata["errors"];
- } else {
- $errs = 0;
- }
- if (is_null($str)) {
- $test = new Tests_Auth_OpenID_KVForm_TestCase_Null($arr, $errs);
- } else {
- if (isset($testdata['lossy'])) {
- $lossy = $testdata["lossy"];
- } else {
- $lossy = 'neither';
- }
- $test = new Tests_Auth_OpenID_KVForm_TestCase_Parse(
- $arr, $str, $lossy, $errs);
- }
- $test->setName($testdata["name"]);
- $this->addTest($test);
- }
- }
- }
|