261 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			261 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 |