OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 ASSERT_TRUE(expected == idbKey->number()); | 98 ASSERT_TRUE(expected == idbKey->number()); |
99 } | 99 } |
100 | 100 |
101 class IDBKeyFromValueAndKeyPathTest : public testing::Test { | 101 class IDBKeyFromValueAndKeyPathTest : public testing::Test { |
102 public: | 102 public: |
103 IDBKeyFromValueAndKeyPathTest() | 103 IDBKeyFromValueAndKeyPathTest() |
104 : m_scope(v8::Isolate::GetCurrent()) | 104 : m_scope(v8::Isolate::GetCurrent()) |
105 { | 105 { |
106 } | 106 } |
107 | 107 |
108 ScriptState* scriptState() const { return m_scope.scriptState(); } | 108 ScriptState* getScriptState() const { return m_scope.getScriptState(); } |
109 | 109 |
110 private: | 110 private: |
111 V8TestingScope m_scope; | 111 V8TestingScope m_scope; |
112 }; | 112 }; |
113 | 113 |
114 TEST_F(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyStringValue) | 114 TEST_F(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyStringValue) |
115 { | 115 { |
116 v8::Isolate* isolate = scriptState()->isolate(); | 116 v8::Isolate* isolate = getScriptState()->isolate(); |
117 | 117 |
118 // object = { foo: "zoo" } | 118 // object = { foo: "zoo" } |
119 v8::Local<v8::Object> object = v8::Object::New(isolate); | 119 v8::Local<v8::Object> object = v8::Object::New(isolate); |
120 ASSERT_TRUE(v8CallBoolean(object->Set(scriptState()->context(), v8AtomicStri
ng(isolate, "foo"), v8AtomicString(isolate, "zoo")))); | 120 ASSERT_TRUE(v8CallBoolean(object->Set(getScriptState()->context(), v8AtomicS
tring(isolate, "foo"), v8AtomicString(isolate, "zoo")))); |
121 | 121 |
122 ScriptValue scriptValue(scriptState(), object); | 122 ScriptValue scriptValue(getScriptState(), object); |
123 | 123 |
124 checkKeyPathStringValue(isolate, scriptValue, "foo", "zoo"); | 124 checkKeyPathStringValue(isolate, scriptValue, "foo", "zoo"); |
125 checkKeyPathNullValue(isolate, scriptValue, "bar"); | 125 checkKeyPathNullValue(isolate, scriptValue, "bar"); |
126 } | 126 } |
127 | 127 |
128 TEST_F(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyNumberValue) | 128 TEST_F(IDBKeyFromValueAndKeyPathTest, TopLevelPropertyNumberValue) |
129 { | 129 { |
130 v8::Isolate* isolate = scriptState()->isolate(); | 130 v8::Isolate* isolate = getScriptState()->isolate(); |
131 | 131 |
132 // object = { foo: 456 } | 132 // object = { foo: 456 } |
133 v8::Local<v8::Object> object = v8::Object::New(isolate); | 133 v8::Local<v8::Object> object = v8::Object::New(isolate); |
134 ASSERT_TRUE(v8CallBoolean(object->Set(scriptState()->context(), v8AtomicStri
ng(isolate, "foo"), v8::Number::New(isolate, 456)))); | 134 ASSERT_TRUE(v8CallBoolean(object->Set(getScriptState()->context(), v8AtomicS
tring(isolate, "foo"), v8::Number::New(isolate, 456)))); |
135 | 135 |
136 ScriptValue scriptValue(scriptState(), object); | 136 ScriptValue scriptValue(getScriptState(), object); |
137 | 137 |
138 checkKeyPathNumberValue(isolate, scriptValue, "foo", 456); | 138 checkKeyPathNumberValue(isolate, scriptValue, "foo", 456); |
139 checkKeyPathNullValue(isolate, scriptValue, "bar"); | 139 checkKeyPathNullValue(isolate, scriptValue, "bar"); |
140 } | 140 } |
141 | 141 |
142 TEST_F(IDBKeyFromValueAndKeyPathTest, SubProperty) | 142 TEST_F(IDBKeyFromValueAndKeyPathTest, SubProperty) |
143 { | 143 { |
144 v8::Isolate* isolate = scriptState()->isolate(); | 144 v8::Isolate* isolate = getScriptState()->isolate(); |
145 | 145 |
146 // object = { foo: { bar: "zee" } } | 146 // object = { foo: { bar: "zee" } } |
147 v8::Local<v8::Object> object = v8::Object::New(isolate); | 147 v8::Local<v8::Object> object = v8::Object::New(isolate); |
148 v8::Local<v8::Object> subProperty = v8::Object::New(isolate); | 148 v8::Local<v8::Object> subProperty = v8::Object::New(isolate); |
149 ASSERT_TRUE(v8CallBoolean(subProperty->Set(scriptState()->context(), v8Atomi
cString(isolate, "bar"), v8AtomicString(isolate, "zee")))); | 149 ASSERT_TRUE(v8CallBoolean(subProperty->Set(getScriptState()->context(), v8At
omicString(isolate, "bar"), v8AtomicString(isolate, "zee")))); |
150 ASSERT_TRUE(v8CallBoolean(object->Set(scriptState()->context(), v8AtomicStri
ng(isolate, "foo"), subProperty))); | 150 ASSERT_TRUE(v8CallBoolean(object->Set(getScriptState()->context(), v8AtomicS
tring(isolate, "foo"), subProperty))); |
151 | 151 |
152 ScriptValue scriptValue(scriptState(), object); | 152 ScriptValue scriptValue(getScriptState(), object); |
153 | 153 |
154 checkKeyPathStringValue(isolate, scriptValue, "foo.bar", "zee"); | 154 checkKeyPathStringValue(isolate, scriptValue, "foo.bar", "zee"); |
155 checkKeyPathNullValue(isolate, scriptValue, "bar"); | 155 checkKeyPathNullValue(isolate, scriptValue, "bar"); |
156 } | 156 } |
157 | 157 |
158 class InjectIDBKeyTest : public IDBKeyFromValueAndKeyPathTest { | 158 class InjectIDBKeyTest : public IDBKeyFromValueAndKeyPathTest { |
159 }; | 159 }; |
160 | 160 |
161 TEST_F(InjectIDBKeyTest, ImplicitValues) | 161 TEST_F(InjectIDBKeyTest, ImplicitValues) |
162 { | 162 { |
163 v8::Isolate* isolate = scriptState()->isolate(); | 163 v8::Isolate* isolate = getScriptState()->isolate(); |
164 { | 164 { |
165 v8::Local<v8::String> string = v8String(isolate, "string"); | 165 v8::Local<v8::String> string = v8String(isolate, "string"); |
166 ScriptValue value = ScriptValue(scriptState(), string); | 166 ScriptValue value = ScriptValue(getScriptState(), string); |
167 checkInjectionIgnored(scriptState(), IDBKey::createNumber(123), value, "
length"); | 167 checkInjectionIgnored(getScriptState(), IDBKey::createNumber(123), value
, "length"); |
168 } | 168 } |
169 { | 169 { |
170 v8::Local<v8::Array> array = v8::Array::New(isolate); | 170 v8::Local<v8::Array> array = v8::Array::New(isolate); |
171 ScriptValue value = ScriptValue(scriptState(), array); | 171 ScriptValue value = ScriptValue(getScriptState(), array); |
172 checkInjectionIgnored(scriptState(), IDBKey::createNumber(456), value, "
length"); | 172 checkInjectionIgnored(getScriptState(), IDBKey::createNumber(456), value
, "length"); |
173 } | 173 } |
174 } | 174 } |
175 | 175 |
176 TEST_F(InjectIDBKeyTest, TopLevelPropertyStringValue) | 176 TEST_F(InjectIDBKeyTest, TopLevelPropertyStringValue) |
177 { | 177 { |
178 v8::Isolate* isolate = scriptState()->isolate(); | 178 v8::Isolate* isolate = getScriptState()->isolate(); |
179 | 179 |
180 // object = { foo: "zoo" } | 180 // object = { foo: "zoo" } |
181 v8::Local<v8::Object> object = v8::Object::New(isolate); | 181 v8::Local<v8::Object> object = v8::Object::New(isolate); |
182 ASSERT_TRUE(v8CallBoolean(object->Set(scriptState()->context(), v8AtomicStri
ng(isolate, "foo"), v8AtomicString(isolate, "zoo")))); | 182 ASSERT_TRUE(v8CallBoolean(object->Set(getScriptState()->context(), v8AtomicS
tring(isolate, "foo"), v8AtomicString(isolate, "zoo")))); |
183 | 183 |
184 ScriptValue scriptObject(scriptState(), object); | 184 ScriptValue scriptObject(getScriptState(), object); |
185 checkInjection(scriptState(), IDBKey::createString("myNewKey"), scriptObject
, "bar"); | 185 checkInjection(getScriptState(), IDBKey::createString("myNewKey"), scriptObj
ect, "bar"); |
186 checkInjection(scriptState(), IDBKey::createNumber(1234), scriptObject, "bar
"); | 186 checkInjection(getScriptState(), IDBKey::createNumber(1234), scriptObject, "
bar"); |
187 | 187 |
188 checkInjectionDisallowed(scriptState(), scriptObject, "foo.bar"); | 188 checkInjectionDisallowed(getScriptState(), scriptObject, "foo.bar"); |
189 } | 189 } |
190 | 190 |
191 TEST_F(InjectIDBKeyTest, SubProperty) | 191 TEST_F(InjectIDBKeyTest, SubProperty) |
192 { | 192 { |
193 v8::Isolate* isolate = scriptState()->isolate(); | 193 v8::Isolate* isolate = getScriptState()->isolate(); |
194 | 194 |
195 // object = { foo: { bar: "zee" } } | 195 // object = { foo: { bar: "zee" } } |
196 v8::Local<v8::Object> object = v8::Object::New(isolate); | 196 v8::Local<v8::Object> object = v8::Object::New(isolate); |
197 v8::Local<v8::Object> subProperty = v8::Object::New(isolate); | 197 v8::Local<v8::Object> subProperty = v8::Object::New(isolate); |
198 ASSERT_TRUE(v8CallBoolean(subProperty->Set(scriptState()->context(), v8Atomi
cString(isolate, "bar"), v8AtomicString(isolate, "zee")))); | 198 ASSERT_TRUE(v8CallBoolean(subProperty->Set(getScriptState()->context(), v8At
omicString(isolate, "bar"), v8AtomicString(isolate, "zee")))); |
199 ASSERT_TRUE(v8CallBoolean(object->Set(scriptState()->context(), v8AtomicStri
ng(isolate, "foo"), subProperty))); | 199 ASSERT_TRUE(v8CallBoolean(object->Set(getScriptState()->context(), v8AtomicS
tring(isolate, "foo"), subProperty))); |
200 | 200 |
201 ScriptValue scriptObject(scriptState(), object); | 201 ScriptValue scriptObject(getScriptState(), object); |
202 checkInjection(scriptState(), IDBKey::createString("myNewKey"), scriptObject
, "foo.baz"); | 202 checkInjection(getScriptState(), IDBKey::createString("myNewKey"), scriptObj
ect, "foo.baz"); |
203 checkInjection(scriptState(), IDBKey::createNumber(789), scriptObject, "foo.
baz"); | 203 checkInjection(getScriptState(), IDBKey::createNumber(789), scriptObject, "f
oo.baz"); |
204 checkInjection(scriptState(), IDBKey::createDate(4567), scriptObject, "foo.b
az"); | 204 checkInjection(getScriptState(), IDBKey::createDate(4567), scriptObject, "fo
o.baz"); |
205 checkInjection(scriptState(), IDBKey::createDate(4567), scriptObject, "bar")
; | 205 checkInjection(getScriptState(), IDBKey::createDate(4567), scriptObject, "ba
r"); |
206 checkInjection(scriptState(), IDBKey::createArray(IDBKey::KeyArray()), scrip
tObject, "foo.baz"); | 206 checkInjection(getScriptState(), IDBKey::createArray(IDBKey::KeyArray()), sc
riptObject, "foo.baz"); |
207 checkInjection(scriptState(), IDBKey::createArray(IDBKey::KeyArray()), scrip
tObject, "bar"); | 207 checkInjection(getScriptState(), IDBKey::createArray(IDBKey::KeyArray()), sc
riptObject, "bar"); |
208 | 208 |
209 checkInjectionDisallowed(scriptState(), scriptObject, "foo.bar.baz"); | 209 checkInjectionDisallowed(getScriptState(), scriptObject, "foo.bar.baz"); |
210 checkInjection(scriptState(), IDBKey::createString("zoo"), scriptObject, "fo
o.xyz.foo"); | 210 checkInjection(getScriptState(), IDBKey::createString("zoo"), scriptObject,
"foo.xyz.foo"); |
211 } | 211 } |
212 | 212 |
213 } // namespace | 213 } // namespace |
OLD | NEW |