OLD | NEW |
1 #include <AdblockPlus.h> | 1 #include "BaseJsTest.h" |
2 #include <gtest/gtest.h> | |
3 | 2 |
4 TEST(JsValueTest, UndefinedValue) | 3 namespace |
5 { | 4 { |
6 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | 5 class JsValueTest : public BaseJsTest |
| 6 { |
| 7 }; |
| 8 } |
| 9 |
| 10 TEST_F(JsValueTest, UndefinedValue) |
| 11 { |
7 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("undefined"); | 12 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("undefined"); |
8 ASSERT_TRUE(value->IsUndefined()); | 13 ASSERT_TRUE(value->IsUndefined()); |
9 ASSERT_FALSE(value->IsNull()); | 14 ASSERT_FALSE(value->IsNull()); |
10 ASSERT_FALSE(value->IsString()); | 15 ASSERT_FALSE(value->IsString()); |
11 ASSERT_FALSE(value->IsBool()); | 16 ASSERT_FALSE(value->IsBool()); |
12 ASSERT_FALSE(value->IsNumber()); | 17 ASSERT_FALSE(value->IsNumber()); |
13 ASSERT_FALSE(value->IsObject()); | 18 ASSERT_FALSE(value->IsObject()); |
14 ASSERT_FALSE(value->IsArray()); | 19 ASSERT_FALSE(value->IsArray()); |
15 ASSERT_FALSE(value->IsFunction()); | 20 ASSERT_FALSE(value->IsFunction()); |
16 ASSERT_EQ("undefined", value->AsString()); | 21 ASSERT_EQ("undefined", value->AsString()); |
17 ASSERT_FALSE(value->AsBool()); | 22 ASSERT_FALSE(value->AsBool()); |
18 ASSERT_ANY_THROW(value->AsList()); | 23 ASSERT_ANY_THROW(value->AsList()); |
19 ASSERT_ANY_THROW(value->GetProperty("foo")); | 24 ASSERT_ANY_THROW(value->GetProperty("foo")); |
20 ASSERT_ANY_THROW(value->SetProperty("foo", false)); | 25 ASSERT_ANY_THROW(value->SetProperty("foo", false)); |
21 ASSERT_ANY_THROW(value->GetClassName()); | 26 ASSERT_ANY_THROW(value->GetClassName()); |
22 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); | 27 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); |
23 ASSERT_ANY_THROW(value->Call()); | 28 ASSERT_ANY_THROW(value->Call()); |
24 } | 29 } |
25 | 30 |
26 TEST(JsValueTest, NullValue) | 31 TEST_F(JsValueTest, NullValue) |
27 { | 32 { |
28 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
29 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("null"); | 33 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("null"); |
30 ASSERT_FALSE(value->IsUndefined()); | 34 ASSERT_FALSE(value->IsUndefined()); |
31 ASSERT_TRUE(value->IsNull()); | 35 ASSERT_TRUE(value->IsNull()); |
32 ASSERT_FALSE(value->IsString()); | 36 ASSERT_FALSE(value->IsString()); |
33 ASSERT_FALSE(value->IsBool()); | 37 ASSERT_FALSE(value->IsBool()); |
34 ASSERT_FALSE(value->IsNumber()); | 38 ASSERT_FALSE(value->IsNumber()); |
35 ASSERT_FALSE(value->IsObject()); | 39 ASSERT_FALSE(value->IsObject()); |
36 ASSERT_FALSE(value->IsArray()); | 40 ASSERT_FALSE(value->IsArray()); |
37 ASSERT_FALSE(value->IsFunction()); | 41 ASSERT_FALSE(value->IsFunction()); |
38 ASSERT_EQ("null", value->AsString()); | 42 ASSERT_EQ("null", value->AsString()); |
39 ASSERT_FALSE(value->AsBool()); | 43 ASSERT_FALSE(value->AsBool()); |
40 ASSERT_ANY_THROW(value->AsList()); | 44 ASSERT_ANY_THROW(value->AsList()); |
41 ASSERT_ANY_THROW(value->GetProperty("foo")); | 45 ASSERT_ANY_THROW(value->GetProperty("foo")); |
42 ASSERT_ANY_THROW(value->SetProperty("foo", false)); | 46 ASSERT_ANY_THROW(value->SetProperty("foo", false)); |
43 ASSERT_ANY_THROW(value->GetClassName()); | 47 ASSERT_ANY_THROW(value->GetClassName()); |
44 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); | 48 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); |
45 ASSERT_ANY_THROW(value->Call()); | 49 ASSERT_ANY_THROW(value->Call()); |
46 } | 50 } |
47 | 51 |
48 TEST(JsValueTest, StringValue) | 52 TEST_F(JsValueTest, StringValue) |
49 { | 53 { |
50 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
51 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("'123'"); | 54 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("'123'"); |
52 ASSERT_FALSE(value->IsUndefined()); | 55 ASSERT_FALSE(value->IsUndefined()); |
53 ASSERT_FALSE(value->IsNull()); | 56 ASSERT_FALSE(value->IsNull()); |
54 ASSERT_TRUE(value->IsString()); | 57 ASSERT_TRUE(value->IsString()); |
55 ASSERT_FALSE(value->IsBool()); | 58 ASSERT_FALSE(value->IsBool()); |
56 ASSERT_FALSE(value->IsNumber()); | 59 ASSERT_FALSE(value->IsNumber()); |
57 ASSERT_FALSE(value->IsObject()); | 60 ASSERT_FALSE(value->IsObject()); |
58 ASSERT_FALSE(value->IsArray()); | 61 ASSERT_FALSE(value->IsArray()); |
59 ASSERT_FALSE(value->IsFunction()); | 62 ASSERT_FALSE(value->IsFunction()); |
60 ASSERT_EQ("123", value->AsString()); | 63 ASSERT_EQ("123", value->AsString()); |
61 ASSERT_EQ(123, value->AsInt()); | 64 ASSERT_EQ(123, value->AsInt()); |
62 ASSERT_TRUE(value->AsBool()); | 65 ASSERT_TRUE(value->AsBool()); |
63 ASSERT_ANY_THROW(value->AsList()); | 66 ASSERT_ANY_THROW(value->AsList()); |
64 ASSERT_ANY_THROW(value->GetProperty("foo")); | 67 ASSERT_ANY_THROW(value->GetProperty("foo")); |
65 ASSERT_ANY_THROW(value->SetProperty("foo", false)); | 68 ASSERT_ANY_THROW(value->SetProperty("foo", false)); |
66 ASSERT_ANY_THROW(value->GetClassName()); | 69 ASSERT_ANY_THROW(value->GetClassName()); |
67 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); | 70 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); |
68 ASSERT_ANY_THROW(value->Call()); | 71 ASSERT_ANY_THROW(value->Call()); |
69 } | 72 } |
70 | 73 |
71 TEST(JsValueTest, IntValue) | 74 TEST_F(JsValueTest, IntValue) |
72 { | 75 { |
73 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
74 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("12345678901234"); | 76 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("12345678901234"); |
75 ASSERT_FALSE(value->IsUndefined()); | 77 ASSERT_FALSE(value->IsUndefined()); |
76 ASSERT_FALSE(value->IsNull()); | 78 ASSERT_FALSE(value->IsNull()); |
77 ASSERT_FALSE(value->IsString()); | 79 ASSERT_FALSE(value->IsString()); |
78 ASSERT_FALSE(value->IsBool()); | 80 ASSERT_FALSE(value->IsBool()); |
79 ASSERT_TRUE(value->IsNumber()); | 81 ASSERT_TRUE(value->IsNumber()); |
80 ASSERT_FALSE(value->IsObject()); | 82 ASSERT_FALSE(value->IsObject()); |
81 ASSERT_FALSE(value->IsArray()); | 83 ASSERT_FALSE(value->IsArray()); |
82 ASSERT_FALSE(value->IsFunction()); | 84 ASSERT_FALSE(value->IsFunction()); |
83 ASSERT_EQ("12345678901234", value->AsString()); | 85 ASSERT_EQ("12345678901234", value->AsString()); |
84 ASSERT_EQ(12345678901234, value->AsInt()); | 86 ASSERT_EQ(12345678901234, value->AsInt()); |
85 ASSERT_TRUE(value->AsBool()); | 87 ASSERT_TRUE(value->AsBool()); |
86 ASSERT_ANY_THROW(value->AsList()); | 88 ASSERT_ANY_THROW(value->AsList()); |
87 ASSERT_ANY_THROW(value->GetProperty("foo")); | 89 ASSERT_ANY_THROW(value->GetProperty("foo")); |
88 ASSERT_ANY_THROW(value->SetProperty("foo", false)); | 90 ASSERT_ANY_THROW(value->SetProperty("foo", false)); |
89 ASSERT_ANY_THROW(value->GetClassName()); | 91 ASSERT_ANY_THROW(value->GetClassName()); |
90 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); | 92 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); |
91 ASSERT_ANY_THROW(value->Call()); | 93 ASSERT_ANY_THROW(value->Call()); |
92 } | 94 } |
93 | 95 |
94 TEST(JsValueTest, BoolValue) | 96 TEST_F(JsValueTest, BoolValue) |
95 { | 97 { |
96 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
97 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("true"); | 98 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("true"); |
98 ASSERT_FALSE(value->IsUndefined()); | 99 ASSERT_FALSE(value->IsUndefined()); |
99 ASSERT_FALSE(value->IsNull()); | 100 ASSERT_FALSE(value->IsNull()); |
100 ASSERT_FALSE(value->IsString()); | 101 ASSERT_FALSE(value->IsString()); |
101 ASSERT_TRUE(value->IsBool()); | 102 ASSERT_TRUE(value->IsBool()); |
102 ASSERT_FALSE(value->IsNumber()); | 103 ASSERT_FALSE(value->IsNumber()); |
103 ASSERT_FALSE(value->IsObject()); | 104 ASSERT_FALSE(value->IsObject()); |
104 ASSERT_FALSE(value->IsArray()); | 105 ASSERT_FALSE(value->IsArray()); |
105 ASSERT_FALSE(value->IsFunction()); | 106 ASSERT_FALSE(value->IsFunction()); |
106 ASSERT_EQ("true", value->AsString()); | 107 ASSERT_EQ("true", value->AsString()); |
107 ASSERT_TRUE(value->AsBool()); | 108 ASSERT_TRUE(value->AsBool()); |
108 ASSERT_ANY_THROW(value->AsList()); | 109 ASSERT_ANY_THROW(value->AsList()); |
109 ASSERT_ANY_THROW(value->GetProperty("foo")); | 110 ASSERT_ANY_THROW(value->GetProperty("foo")); |
110 ASSERT_ANY_THROW(value->SetProperty("foo", false)); | 111 ASSERT_ANY_THROW(value->SetProperty("foo", false)); |
111 ASSERT_ANY_THROW(value->GetClassName()); | 112 ASSERT_ANY_THROW(value->GetClassName()); |
112 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); | 113 ASSERT_ANY_THROW(value->GetOwnPropertyNames()); |
113 ASSERT_ANY_THROW(value->Call()); | 114 ASSERT_ANY_THROW(value->Call()); |
114 } | 115 } |
115 | 116 |
116 TEST(JsValueTest, ObjectValue) | 117 TEST_F(JsValueTest, ObjectValue) |
117 { | 118 { |
118 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
119 const std::string source("\ | 119 const std::string source("\ |
120 function Foo() {\ | 120 function Foo() {\ |
121 this.x = 2;\ | 121 this.x = 2;\ |
122 this.toString = function() {return 'foo';};\ | 122 this.toString = function() {return 'foo';};\ |
123 this.valueOf = function() {return 123;};\ | 123 this.valueOf = function() {return 123;};\ |
124 };\ | 124 };\ |
125 new Foo()"); | 125 new Foo()"); |
126 AdblockPlus::JsValuePtr value = jsEngine->Evaluate(source); | 126 AdblockPlus::JsValuePtr value = jsEngine->Evaluate(source); |
127 ASSERT_FALSE(value->IsUndefined()); | 127 ASSERT_FALSE(value->IsUndefined()); |
128 ASSERT_FALSE(value->IsNull()); | 128 ASSERT_FALSE(value->IsNull()); |
(...skipping 10 matching lines...) Expand all Loading... |
139 ASSERT_EQ(2, value->GetProperty("x")->AsInt()); | 139 ASSERT_EQ(2, value->GetProperty("x")->AsInt()); |
140 value->SetProperty("x", 12); | 140 value->SetProperty("x", 12); |
141 ASSERT_EQ(12, value->GetProperty("x")->AsInt()); | 141 ASSERT_EQ(12, value->GetProperty("x")->AsInt()); |
142 value->SetProperty("x", jsEngine->NewValue(15)); | 142 value->SetProperty("x", jsEngine->NewValue(15)); |
143 ASSERT_EQ(15, value->GetProperty("x")->AsInt()); | 143 ASSERT_EQ(15, value->GetProperty("x")->AsInt()); |
144 ASSERT_EQ("Foo", value->GetClassName()); | 144 ASSERT_EQ("Foo", value->GetClassName()); |
145 ASSERT_EQ(3u, value->GetOwnPropertyNames().size()); | 145 ASSERT_EQ(3u, value->GetOwnPropertyNames().size()); |
146 ASSERT_ANY_THROW(value->Call()); | 146 ASSERT_ANY_THROW(value->Call()); |
147 } | 147 } |
148 | 148 |
149 TEST(JsValueTest, ArrayValue) | 149 TEST_F(JsValueTest, ArrayValue) |
150 { | 150 { |
151 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
152 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("[5,8,12]"); | 151 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("[5,8,12]"); |
153 ASSERT_FALSE(value->IsUndefined()); | 152 ASSERT_FALSE(value->IsUndefined()); |
154 ASSERT_FALSE(value->IsNull()); | 153 ASSERT_FALSE(value->IsNull()); |
155 ASSERT_FALSE(value->IsString()); | 154 ASSERT_FALSE(value->IsString()); |
156 ASSERT_FALSE(value->IsBool()); | 155 ASSERT_FALSE(value->IsBool()); |
157 ASSERT_FALSE(value->IsNumber()); | 156 ASSERT_FALSE(value->IsNumber()); |
158 ASSERT_TRUE(value->IsObject()); | 157 ASSERT_TRUE(value->IsObject()); |
159 ASSERT_TRUE(value->IsArray()); | 158 ASSERT_TRUE(value->IsArray()); |
160 ASSERT_FALSE(value->IsFunction()); | 159 ASSERT_FALSE(value->IsFunction()); |
161 ASSERT_EQ("5,8,12", value->AsString()); | 160 ASSERT_EQ("5,8,12", value->AsString()); |
162 ASSERT_TRUE(value->AsBool()); | 161 ASSERT_TRUE(value->AsBool()); |
163 ASSERT_EQ(3u, value->AsList().size()); | 162 ASSERT_EQ(3u, value->AsList().size()); |
164 ASSERT_EQ(8, value->AsList()[1]->AsInt()); | 163 ASSERT_EQ(8, value->AsList()[1]->AsInt()); |
165 ASSERT_EQ(3, value->GetProperty("length")->AsInt()); | 164 ASSERT_EQ(3, value->GetProperty("length")->AsInt()); |
166 ASSERT_EQ("Array", value->GetClassName()); | 165 ASSERT_EQ("Array", value->GetClassName()); |
167 ASSERT_ANY_THROW(value->Call()); | 166 ASSERT_ANY_THROW(value->Call()); |
168 } | 167 } |
169 | 168 |
170 TEST(JsValueTest, FunctionValue) | 169 TEST_F(JsValueTest, FunctionValue) |
171 { | 170 { |
172 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
173 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("(function(foo, bar) {retur
n this.x + '/' + foo + '/' + bar;})"); | 171 AdblockPlus::JsValuePtr value = jsEngine->Evaluate("(function(foo, bar) {retur
n this.x + '/' + foo + '/' + bar;})"); |
174 ASSERT_FALSE(value->IsUndefined()); | 172 ASSERT_FALSE(value->IsUndefined()); |
175 ASSERT_FALSE(value->IsNull()); | 173 ASSERT_FALSE(value->IsNull()); |
176 ASSERT_FALSE(value->IsString()); | 174 ASSERT_FALSE(value->IsString()); |
177 ASSERT_FALSE(value->IsBool()); | 175 ASSERT_FALSE(value->IsBool()); |
178 ASSERT_FALSE(value->IsNumber()); | 176 ASSERT_FALSE(value->IsNumber()); |
179 ASSERT_TRUE(value->IsObject()); | 177 ASSERT_TRUE(value->IsObject()); |
180 ASSERT_FALSE(value->IsArray()); | 178 ASSERT_FALSE(value->IsArray()); |
181 ASSERT_TRUE(value->IsFunction()); | 179 ASSERT_TRUE(value->IsFunction()); |
182 ASSERT_TRUE(value->AsBool()); | 180 ASSERT_TRUE(value->AsBool()); |
183 ASSERT_ANY_THROW(value->AsList()); | 181 ASSERT_ANY_THROW(value->AsList()); |
184 ASSERT_EQ(2, value->GetProperty("length")->AsInt()); | 182 ASSERT_EQ(2, value->GetProperty("length")->AsInt()); |
185 | 183 |
186 AdblockPlus::JsValuePtr thisPtr = jsEngine->Evaluate("({x:2})"); | 184 AdblockPlus::JsValuePtr thisPtr = jsEngine->Evaluate("({x:2})"); |
187 AdblockPlus::JsValueList params; | 185 AdblockPlus::JsValueList params; |
188 params.push_back(jsEngine->NewValue(5)); | 186 params.push_back(jsEngine->NewValue(5)); |
189 params.push_back(jsEngine->NewValue("xyz")); | 187 params.push_back(jsEngine->NewValue("xyz")); |
190 ASSERT_EQ("2/5/xyz", value->Call(params, thisPtr)->AsString()); | 188 ASSERT_EQ("2/5/xyz", value->Call(params, thisPtr)->AsString()); |
191 } | 189 } |
192 | 190 |
193 TEST(JsValueTest, ThrowingCoversion) | 191 TEST_F(JsValueTest, ThrowingCoversion) |
194 { | 192 { |
195 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
196 const std::string source("\ | 193 const std::string source("\ |
197 function Foo() {\ | 194 function Foo() {\ |
198 this.toString = function() {throw 'test1';};\ | 195 this.toString = function() {throw 'test1';};\ |
199 this.valueOf = function() {throw 'test2';};\ | 196 this.valueOf = function() {throw 'test2';};\ |
200 };\ | 197 };\ |
201 new Foo()"); | 198 new Foo()"); |
202 AdblockPlus::JsValuePtr value = jsEngine->Evaluate(source); | 199 AdblockPlus::JsValuePtr value = jsEngine->Evaluate(source); |
203 ASSERT_EQ("", value->AsString()); | 200 ASSERT_EQ("", value->AsString()); |
204 ASSERT_EQ(0, value->AsInt()); | 201 ASSERT_EQ(0, value->AsInt()); |
205 } | 202 } |
OLD | NEW |