<?php require_once(PRADO_DIR.'/Web/Javascripts/TJavascriptSerializer.php'); class testSerializerObject { public $public = 'public data'; protected $protected = 'protected data'; private $private = 'private !'; } class testComponentObject extends TComponent { public $public = 'public data'; protected $protected = 'protected data'; private $private = 'private !'; public function getData() { return "component data"; } } class utJavascriptSerializer extends UnitTestCase { function testString() { $string = "Stan's world!"; $expect = "'Stan\\'s world!'"; $js = new TJavascriptSerializer($string); $this->assertEqual($expect, $js->toJavascript()); $string = ""; $expect = "''"; $js = new TJavascriptSerializer($string); $this->assertEqual($expect, $js->toJavascript()); } function testInteger() { $int = 10; $expect = "10"; $js = new TJavascriptSerializer($int); $this->assertEqual($expect, $js->toJavascript()); } function testFloat() { $float = 10.2; $expect = "10.2"; $js = new TJavascriptSerializer($float); $this->assertEqual($expect, $js->toJavascript()); $float = INF; $expect = "Number.POSITIVE_INFINITY"; $js = new TJavascriptSerializer($float); $this->assertEqual($expect, $js->toJavascript()); $expect = "Number.NEGATIVE_INFINITY"; $js = new TJavascriptSerializer(-$float); $this->assertEqual($expect, $js->toJavascript()); } function testBoolean() { $bool = false; $expect = "false"; $js = new TJavascriptSerializer($bool); $this->assertEqual($expect, $js->toJavascript()); $expect = "true"; $js = new TJavascriptSerializer(!$bool); $this->assertEqual($expect, $js->toJavascript()); } function testNull() { $null = null; $expect = "null"; $js = new TJavascriptSerializer($null); $this->assertEqual($expect, $js->toJavascript()); } function testArray() { $data[0] = 1; $data[1] = "hello"; $data[2] = 1.20; $data[3] = true; $data[4] = false; $data[5] = null; $data[6] = array("one"); $expect = "[1,'hello',1.2,true,false,null,['one']]"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toJavascript()); $data = array(); $expect = "[]"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toJavascript(true)); } function testMap() { $data['hello'] = 'world'; $data['more'] = array('yes' => 'yah!'); $expect = "{'hello':'world','more':{'yes':'yah!'}}"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toMap()); } function testObject() { $data = new testSerializerObject; $expect = "{'public':'public data'}"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toJavascript()); } //should not serialize components! function testComponent() { $data = new testComponentObject; $expect = "{'public':'public data','Data':'component data'}"; $js = new TJavascriptSerializer($data); try { $js->toJavascript(); $this->fail(); } catch(TException $e) { $this->pass(); } } function testComplexStrings() { $data[] = "\"It's slash \/ wonderful\""; $expect = "['\\\"It\'s slash \\\\/ wonderful\\\"']"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toJavascript()); } function testArrayString() { $data[] = "['hello', 1]"; $data[] = "{'asd':'asdasd'}"; $data[] = "[hasdkj}"; $expect = "[['hello', 1],{'asd':'asdasd'},'[hasdkj}']"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toJavascript()); } function testArrayComplex() { $data = array("hello", 1, 2.12, array("world", null, "", array())); $expect = "['hello',1,2.12,['world',null]]"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toJavascript()); $expect = "['hello',1,2.12,['world',null,'',[]]]"; $this->assertEqual($expect, $js->toJavascript(true)); } function testListComplex() { $data = array("hello"=>"world", 1, 2.12); $data["more"] = array("the" => "world", null, "good"=>"", array()); $expect = "{'hello':'world','0':1,'1':2.12,'more':{'the':'world','0':null}}"; $js = new TJavascriptSerializer($data); $this->assertEqual($expect, $js->toMap()); $expect = "{'hello':'world','0':1,'1':2.12,'more':{'the':'world','0':null,'good':'','1':{}}}"; $this->assertEqual($expect, $js->toMap(true)); } } ?>