2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Affero General Public License version 3 as published by the
8 * Free Software Foundation with the addition of the following permission added
9 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18 * You should have received a copy of the GNU Affero General Public License along with
19 * this program; if not, see http://www.gnu.org/licenses or write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26 * The interactive user interfaces in modified source and object code versions
27 * of this program must display Appropriate Legal Notices, as required under
28 * Section 5 of the GNU Affero General Public License version 3.
30 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31 * these Appropriate Legal Notices must retain the display of the "Powered by
32 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33 * technical reasons, the Appropriate Legal Notices must display the words
34 * "Powered by SugarCRM".
35 ********************************************************************************/
38 require_once 'include/JSON.php';
40 class JSONTest extends Sugar_PHPUnit_Framework_TestCase
42 public function tearDown()
44 unset($_SESSION['asychronous_key']);
47 public function testCanEncodeBasicArray()
49 $array = array('foo' => 'bar', 'bar' => 'foo');
51 '{"foo":"bar","bar":"foo"}',
56 public function testCanEncodeBasicObjects()
58 $obj = new stdClass();
62 '{"foo":"bar","bar":"foo"}',
67 public function testCanEncodeMultibyteData()
69 $array = array('foo' => '契約', 'bar' => '契約');
71 '{"foo":"\u5951\u7d04","bar":"\u5951\u7d04"}',
76 public function testCanDecodeObjectIntoArray()
78 $array = array('foo' => 'bar', 'bar' => 'foo');
80 JSON::decode('{"foo":"bar","bar":"foo"}'),
85 public function testCanDecodeMultibyteData()
87 $array = array('foo' => '契約', 'bar' => '契約');
89 JSON::decode('{"foo":"\u5951\u7d04","bar":"\u5951\u7d04"}'),
94 public function testEncodeWithSecurityEnvelope()
96 $array = array('foo' => 'bar', 'bar' => 'foo');
98 'while(1);/*{"foo":"bar","bar":"foo"}*/',
99 JSON::encode($array,true)
103 public function testDecodeWithValidSecurityEnvelope()
105 $jsonString = '{"asychronous_key":"bar","jsonObject":"foo"}';
106 $_SESSION['asychronous_key'] = 'bar';
108 $this->assertEquals('foo',JSON::decode($jsonString,true));
111 public function testDecodeWithInvalidSecurityEnvelope()
113 $jsonString = '{"asychronous_key":"dog","jsonObject":"foo"}';
114 $_SESSION['asychronous_key'] = 'bar';
116 $this->assertEquals('',JSON::decode($jsonString,true));
119 public function testEncodeRealWorks()
121 $array = array('foo' => 'bar', 'bar' => 'foo');
123 '{"foo":"bar","bar":"foo"}',
124 JSON::encodeReal($array)
128 public function testDecodeRealWorks()
130 $array = array('foo' => 'bar', 'bar' => 'foo');
132 JSON::decodeReal('{"foo":"bar","bar":"foo"}'),
137 public function testCanDecodeHomefinder(){
138 $response = '{"data":{"meta":{"currentPage":1,"totalMatched":1,"totalPages":1,"executionTime":0.025315999984741},"affiliates":[{"name":"Los Angeles Times","profileName":"latimes","parentCompany":"Tribune Company","isActive":true,"hasEcommerceEnabled":true,"profileNameLong":"latimes","homePageUrl":"http:\/\/www.latimes.com\/classified\/realestate\/","createDateTime":"2008-07-25T00:00:00-05:00","updateDateTime":"2011-02-16T00:00:00-06:00","id":137}]},"status":{"code":200,"errorStack":null}}';
140 $decode = $json->decode($response);
141 $this->assertNotEmpty($decode['data']['affiliates'][0]['profileName'], "Did not decode correctly");
144 public function testCanDecodeHomefinderAsObject(){
145 $response = '{"data":{"meta":{"currentPage":1,"totalMatched":1,"totalPages":1,"executionTime":0.025315999984741},"affiliates":[{"name":"Los Angeles Times","profileName":"latimes","parentCompany":"Tribune Company","isActive":true,"hasEcommerceEnabled":true,"profileNameLong":"latimes","homePageUrl":"http:\/\/www.latimes.com\/classified\/realestate\/","createDateTime":"2008-07-25T00:00:00-05:00","updateDateTime":"2011-02-16T00:00:00-06:00","id":137}]},"status":{"code":200,"errorStack":null}}';
147 $decode = $json->decode($response, false, false);
148 $this->assertNotEmpty($decode->data->affiliates[0]->profileName, "Did not decode correctly");