From 0226f8f5f430d34b3cead40c4eb7b458933d16c6 Mon Sep 17 00:00:00 2001
From: wei <>
Date: Wed, 18 Jan 2006 04:20:26 +0000
Subject: update javascript library and usage in web controls

---
 .../framework/Web/UI/utJavascriptSerializer.php    | 181 +++++++++++++++++++++
 1 file changed, 181 insertions(+)
 create mode 100644 tests/UnitTests/framework/Web/UI/utJavascriptSerializer.php

(limited to 'tests/UnitTests')

diff --git a/tests/UnitTests/framework/Web/UI/utJavascriptSerializer.php b/tests/UnitTests/framework/Web/UI/utJavascriptSerializer.php
new file mode 100644
index 00000000..89a54820
--- /dev/null
+++ b/tests/UnitTests/framework/Web/UI/utJavascriptSerializer.php
@@ -0,0 +1,181 @@
+<?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));
+	}
+}
+
+?>
\ No newline at end of file
-- 
cgit v1.2.3