OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.content.browser; | 5 package org.chromium.content.browser; |
6 | 6 |
7 import android.support.test.filters.SmallTest; | 7 import android.support.test.filters.SmallTest; |
8 | 8 |
9 import dalvik.system.DexClassLoader; | 9 import dalvik.system.DexClassLoader; |
10 | 10 |
11 import org.junit.Assert; | |
12 import org.junit.Before; | |
13 import org.junit.Rule; | |
14 import org.junit.Test; | |
15 import org.junit.runner.RunWith; | |
16 | |
11 import org.chromium.base.annotations.SuppressFBWarnings; | 17 import org.chromium.base.annotations.SuppressFBWarnings; |
18 import org.chromium.base.test.BaseJUnit4ClassRunner; | |
12 import org.chromium.base.test.util.Feature; | 19 import org.chromium.base.test.util.Feature; |
13 import org.chromium.base.test.util.UrlUtils; | 20 import org.chromium.base.test.util.UrlUtils; |
14 import org.chromium.content.browser.JavaBridgeTestCommon.Controller; | 21 import org.chromium.content.browser.JavaBridgeTestCommon.Controller; |
15 | 22 |
16 import java.io.File; | 23 import java.io.File; |
17 | 24 |
18 /** | 25 /** |
19 * Part of the test suite for the Java Bridge. This class tests that | 26 * Part of the test suite for the Java Bridge. This class tests that |
20 * we correctly convert JavaScript values to Java values when passing them to | 27 * we correctly convert JavaScript values to Java values when passing them to |
21 * the methods of injected Java objects. | 28 * the methods of injected Java objects. |
22 * | 29 * |
23 * The conversions should follow | 30 * The conversions should follow |
24 * http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS. Places in | 31 * http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS. Places in |
25 * which the implementation differs from the spec are marked with | 32 * which the implementation differs from the spec are marked with |
26 * LIVECONNECT_COMPLIANCE. | 33 * LIVECONNECT_COMPLIANCE. |
27 * FIXME: Consider making our implementation more compliant, if it will not | 34 * FIXME: Consider making our implementation more compliant, if it will not |
28 * break backwards-compatibility. See b/4408210. | 35 * break backwards-compatibility. See b/4408210. |
29 */ | 36 */ |
30 public class JavaBridgeCoercionTest extends JavaBridgeTestBase { | 37 @RunWith(BaseJUnit4ClassRunner.class) |
38 public class JavaBridgeCoercionTest { | |
39 private static final double ASSERTION_DELTA = 0.00000001; | |
the real yoland
2017/03/08 23:39:03
Set ASSERTION_DELTA to be 0.00000001 for no partic
| |
40 | |
41 @Rule | |
42 public JavaBridgeActivityTestRule mActivityTestRule = new JavaBridgeActivity TestRule(); | |
43 | |
31 @SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD") | 44 @SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD") |
32 private static class TestObject extends Controller { | 45 private static class TestObject extends Controller { |
33 private Object mObjectInstance; | 46 private Object mObjectInstance; |
34 private CustomType mCustomTypeInstance; | 47 private CustomType mCustomTypeInstance; |
35 private CustomType2 mCustomType2Instance; | 48 private CustomType2 mCustomType2Instance; |
36 | 49 |
37 private boolean mBooleanValue; | 50 private boolean mBooleanValue; |
38 private byte mByteValue; | 51 private byte mByteValue; |
39 private char mCharValue; | 52 private char mCharValue; |
40 private short mShortValue; | 53 private short mShortValue; |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
172 public synchronized boolean waitForBooleanValue() { | 185 public synchronized boolean waitForBooleanValue() { |
173 waitForResult(); | 186 waitForResult(); |
174 return mBooleanValue; | 187 return mBooleanValue; |
175 } | 188 } |
176 } | 189 } |
177 | 190 |
178 TestController mTestController; | 191 TestController mTestController; |
179 | 192 |
180 // Note that this requires that we can pass a JavaScript boolean to Java. | 193 // Note that this requires that we can pass a JavaScript boolean to Java. |
181 private void assertRaisesException(String script) throws Throwable { | 194 private void assertRaisesException(String script) throws Throwable { |
182 executeJavaScript("try {" | 195 mActivityTestRule.executeJavaScript("try {" + script + ";" |
183 + script + ";" | |
184 + " testController.setBooleanValue(false);" | 196 + " testController.setBooleanValue(false);" |
185 + "} catch (exception) {" | 197 + "} catch (exception) {" |
186 + " testController.setBooleanValue(true);" | 198 + " testController.setBooleanValue(true);" |
187 + "}"); | 199 + "}"); |
188 assertTrue(mTestController.waitForBooleanValue()); | 200 Assert.assertTrue(mTestController.waitForBooleanValue()); |
189 } | 201 } |
190 | 202 |
191 @Override | 203 @Before |
192 protected void setUp() throws Exception { | 204 public void setUp() throws Exception { |
193 super.setUp(); | |
194 mTestObject = new TestObject(); | 205 mTestObject = new TestObject(); |
195 mTestController = new TestController(); | 206 mTestController = new TestController(); |
196 injectObjectsAndReload(mTestObject, "testObject", mTestController, "test Controller", null); | 207 mActivityTestRule.injectObjectsAndReload( |
208 mTestObject, "testObject", mTestController, "testController", nu ll); | |
197 } | 209 } |
198 | 210 |
199 // Test passing a 32-bit integer JavaScript number to a method of an | 211 // Test passing a 32-bit integer JavaScript number to a method of an |
200 // injected object. Note that JavaScript may choose to represent these | 212 // injected object. Note that JavaScript may choose to represent these |
201 // values as either 32-bit integers or doubles, though this should not | 213 // values as either 32-bit integers or doubles, though this should not |
202 // affect the result. | 214 // affect the result. |
215 @Test | |
203 @SmallTest | 216 @SmallTest |
204 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 217 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
205 public void testPassNumberInt32() throws Throwable { | 218 public void testPassNumberInt32() throws Throwable { |
206 executeJavaScript("testObject.setByteValue(42);"); | 219 mActivityTestRule.executeJavaScript("testObject.setByteValue(42);"); |
207 assertEquals(42, mTestObject.waitForByteValue()); | 220 Assert.assertEquals(42, mTestObject.waitForByteValue()); |
208 executeJavaScript("testObject.setByteValue(" + Byte.MAX_VALUE + " + 42); "); | 221 mActivityTestRule.executeJavaScript( |
209 assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue()); | 222 "testObject.setByteValue(" + Byte.MAX_VALUE + " + 42);"); |
210 | 223 Assert.assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValu e()); |
211 executeJavaScript("testObject.setCharValue(42);"); | 224 |
212 assertEquals(42, mTestObject.waitForCharValue()); | 225 mActivityTestRule.executeJavaScript("testObject.setCharValue(42);"); |
213 | 226 Assert.assertEquals(42, mTestObject.waitForCharValue()); |
214 executeJavaScript("testObject.setShortValue(42);"); | 227 |
215 assertEquals(42, mTestObject.waitForShortValue()); | 228 mActivityTestRule.executeJavaScript("testObject.setShortValue(42);"); |
216 executeJavaScript("testObject.setShortValue(" + Short.MAX_VALUE + " + 42 );"); | 229 Assert.assertEquals(42, mTestObject.waitForShortValue()); |
217 assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue()); | 230 mActivityTestRule.executeJavaScript( |
218 | 231 "testObject.setShortValue(" + Short.MAX_VALUE + " + 42);"); |
219 executeJavaScript("testObject.setIntValue(42);"); | 232 Assert.assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortVa lue()); |
220 assertEquals(42, mTestObject.waitForIntValue()); | 233 |
221 | 234 mActivityTestRule.executeJavaScript("testObject.setIntValue(42);"); |
222 executeJavaScript("testObject.setLongValue(42);"); | 235 Assert.assertEquals(42, mTestObject.waitForIntValue()); |
223 assertEquals(42L, mTestObject.waitForLongValue()); | 236 |
224 | 237 mActivityTestRule.executeJavaScript("testObject.setLongValue(42);"); |
225 executeJavaScript("testObject.setFloatValue(42);"); | 238 Assert.assertEquals(42L, mTestObject.waitForLongValue()); |
226 assertEquals(42.0f, mTestObject.waitForFloatValue()); | 239 |
227 | 240 mActivityTestRule.executeJavaScript("testObject.setFloatValue(42);"); |
228 executeJavaScript("testObject.setDoubleValue(42);"); | 241 Assert.assertEquals(42.0f, mTestObject.waitForFloatValue(), ASSERTION_DE LTA); |
229 assertEquals(42.0, mTestObject.waitForDoubleValue()); | 242 |
243 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(42);"); | |
244 Assert.assertEquals(42.0, mTestObject.waitForDoubleValue(), ASSERTION_DE LTA); | |
230 | 245 |
231 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . | 246 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . |
232 executeJavaScript("testObject.setObjectValue(42);"); | 247 mActivityTestRule.executeJavaScript("testObject.setObjectValue(42);"); |
233 assertNull(mTestObject.waitForObjectValue()); | 248 Assert.assertNull(mTestObject.waitForObjectValue()); |
234 | 249 |
235 // The spec allows the JS engine flexibility in how to format the number . | 250 // The spec allows the JS engine flexibility in how to format the number . |
236 executeJavaScript("testObject.setStringValue(42);"); | 251 mActivityTestRule.executeJavaScript("testObject.setStringValue(42);"); |
237 String str = mTestObject.waitForStringValue(); | 252 String str = mTestObject.waitForStringValue(); |
238 assertTrue("42".equals(str) || "42.0".equals(str)); | 253 Assert.assertTrue("42".equals(str) || "42.0".equals(str)); |
239 | 254 |
240 executeJavaScript("testObject.setBooleanValue(0);"); | 255 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(0);"); |
241 assertFalse(mTestObject.waitForBooleanValue()); | 256 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
242 // LIVECONNECT_COMPLIANCE: Should be true; | 257 // LIVECONNECT_COMPLIANCE: Should be true; |
243 executeJavaScript("testObject.setBooleanValue(42);"); | 258 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(42);"); |
244 assertFalse(mTestObject.waitForBooleanValue()); | 259 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
245 | 260 |
246 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 261 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
247 executeJavaScript("testObject.setCustomTypeValue(42);"); | 262 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(42);" ); |
248 assertNull(mTestObject.waitForCustomTypeValue()); | 263 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
249 } | 264 } |
250 | 265 |
251 // Test passing a floating-point JavaScript number to a method of an | 266 // Test passing a floating-point JavaScript number to a method of an |
252 // injected object. JavaScript represents these values as doubles. | 267 // injected object. JavaScript represents these values as doubles. |
268 @Test | |
253 @SmallTest | 269 @SmallTest |
254 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 270 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
255 public void testPassNumberDouble() throws Throwable { | 271 public void testPassNumberDouble() throws Throwable { |
256 executeJavaScript("testObject.setByteValue(42.1);"); | 272 mActivityTestRule.executeJavaScript("testObject.setByteValue(42.1);"); |
257 assertEquals(42, mTestObject.waitForByteValue()); | 273 Assert.assertEquals(42, mTestObject.waitForByteValue()); |
258 executeJavaScript("testObject.setByteValue(" + Byte.MAX_VALUE + " + 42.1 );"); | 274 mActivityTestRule.executeJavaScript( |
259 assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue()); | 275 "testObject.setByteValue(" + Byte.MAX_VALUE + " + 42.1);"); |
260 executeJavaScript("testObject.setByteValue(" + Byte.MIN_VALUE + " - 42.1 );"); | 276 Assert.assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValu e()); |
261 assertEquals(Byte.MAX_VALUE - 42 + 1, mTestObject.waitForByteValue()); | 277 mActivityTestRule.executeJavaScript( |
262 executeJavaScript("testObject.setByteValue(" + Integer.MAX_VALUE + " + 4 2.1);"); | 278 "testObject.setByteValue(" + Byte.MIN_VALUE + " - 42.1);"); |
263 assertEquals(-1, mTestObject.waitForByteValue()); | 279 Assert.assertEquals(Byte.MAX_VALUE - 42 + 1, mTestObject.waitForByteValu e()); |
264 executeJavaScript("testObject.setByteValue(" + Integer.MIN_VALUE + " - 4 2.1);"); | 280 mActivityTestRule.executeJavaScript( |
265 assertEquals(0, mTestObject.waitForByteValue()); | 281 "testObject.setByteValue(" + Integer.MAX_VALUE + " + 42.1);"); |
282 Assert.assertEquals(-1, mTestObject.waitForByteValue()); | |
283 mActivityTestRule.executeJavaScript( | |
284 "testObject.setByteValue(" + Integer.MIN_VALUE + " - 42.1);"); | |
285 Assert.assertEquals(0, mTestObject.waitForByteValue()); | |
266 | 286 |
267 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value. | 287 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value. |
268 executeJavaScript("testObject.setCharValue(42.1);"); | 288 mActivityTestRule.executeJavaScript("testObject.setCharValue(42.1);"); |
269 assertEquals('\u0000', mTestObject.waitForCharValue()); | 289 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
270 | 290 |
271 executeJavaScript("testObject.setShortValue(42.1);"); | 291 mActivityTestRule.executeJavaScript("testObject.setShortValue(42.1);"); |
272 assertEquals(42, mTestObject.waitForShortValue()); | 292 Assert.assertEquals(42, mTestObject.waitForShortValue()); |
273 executeJavaScript("testObject.setShortValue(" + Short.MAX_VALUE + " + 42 .1);"); | 293 mActivityTestRule.executeJavaScript( |
274 assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue()); | 294 "testObject.setShortValue(" + Short.MAX_VALUE + " + 42.1);"); |
275 executeJavaScript("testObject.setShortValue(" + Short.MIN_VALUE + " - 42 .1);"); | 295 Assert.assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortVa lue()); |
276 assertEquals(Short.MAX_VALUE - 42 + 1, mTestObject.waitForShortValue()); | 296 mActivityTestRule.executeJavaScript( |
277 executeJavaScript("testObject.setShortValue(" + Integer.MAX_VALUE + " + 42.1);"); | 297 "testObject.setShortValue(" + Short.MIN_VALUE + " - 42.1);"); |
278 assertEquals(-1, mTestObject.waitForShortValue()); | 298 Assert.assertEquals(Short.MAX_VALUE - 42 + 1, mTestObject.waitForShortVa lue()); |
279 executeJavaScript("testObject.setShortValue(" + Integer.MIN_VALUE + " - 42.1);"); | 299 mActivityTestRule.executeJavaScript( |
280 assertEquals(0, mTestObject.waitForShortValue()); | 300 "testObject.setShortValue(" + Integer.MAX_VALUE + " + 42.1);"); |
281 | 301 Assert.assertEquals(-1, mTestObject.waitForShortValue()); |
282 executeJavaScript("testObject.setIntValue(42.1);"); | 302 mActivityTestRule.executeJavaScript( |
283 assertEquals(42, mTestObject.waitForIntValue()); | 303 "testObject.setShortValue(" + Integer.MIN_VALUE + " - 42.1);"); |
284 executeJavaScript("testObject.setIntValue(" + Integer.MAX_VALUE + " + 42 .1);"); | 304 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
285 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); | 305 |
286 executeJavaScript("testObject.setIntValue(" + Integer.MIN_VALUE + " - 42 .1);"); | 306 mActivityTestRule.executeJavaScript("testObject.setIntValue(42.1);"); |
287 assertEquals(Integer.MIN_VALUE, mTestObject.waitForIntValue()); | 307 Assert.assertEquals(42, mTestObject.waitForIntValue()); |
288 | 308 mActivityTestRule.executeJavaScript( |
289 executeJavaScript("testObject.setLongValue(42.1);"); | 309 "testObject.setIntValue(" + Integer.MAX_VALUE + " + 42.1);"); |
290 assertEquals(42L, mTestObject.waitForLongValue()); | 310 Assert.assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); |
291 executeJavaScript("testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1 );"); | 311 mActivityTestRule.executeJavaScript( |
292 assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); | 312 "testObject.setIntValue(" + Integer.MIN_VALUE + " - 42.1);"); |
293 executeJavaScript("testObject.setLongValue(" + Long.MIN_VALUE + " - 42.1 );"); | 313 Assert.assertEquals(Integer.MIN_VALUE, mTestObject.waitForIntValue()); |
294 assertEquals(Long.MIN_VALUE, mTestObject.waitForLongValue()); | 314 |
295 | 315 mActivityTestRule.executeJavaScript("testObject.setLongValue(42.1);"); |
296 executeJavaScript("testObject.setFloatValue(42.1);"); | 316 Assert.assertEquals(42L, mTestObject.waitForLongValue()); |
297 assertEquals(42.1f, mTestObject.waitForFloatValue()); | 317 mActivityTestRule.executeJavaScript( |
298 | 318 "testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1);"); |
299 executeJavaScript("testObject.setDoubleValue(42.1);"); | 319 Assert.assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); |
300 assertEquals(42.1, mTestObject.waitForDoubleValue()); | 320 mActivityTestRule.executeJavaScript( |
321 "testObject.setLongValue(" + Long.MIN_VALUE + " - 42.1);"); | |
322 Assert.assertEquals(Long.MIN_VALUE, mTestObject.waitForLongValue()); | |
323 | |
324 mActivityTestRule.executeJavaScript("testObject.setFloatValue(42.1);"); | |
325 Assert.assertEquals(42.1f, mTestObject.waitForFloatValue(), ASSERTION_DE LTA); | |
326 | |
327 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(42.1);"); | |
328 Assert.assertEquals(42.1, mTestObject.waitForDoubleValue(), ASSERTION_DE LTA); | |
301 | 329 |
302 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . | 330 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . |
303 executeJavaScript("testObject.setObjectValue(42.1);"); | 331 mActivityTestRule.executeJavaScript("testObject.setObjectValue(42.1);"); |
304 assertNull(mTestObject.waitForObjectValue()); | 332 Assert.assertNull(mTestObject.waitForObjectValue()); |
305 | 333 |
306 executeJavaScript("testObject.setStringValue(42.1);"); | 334 mActivityTestRule.executeJavaScript("testObject.setStringValue(42.1);"); |
307 assertEquals("42.1", mTestObject.waitForStringValue()); | 335 Assert.assertEquals("42.1", mTestObject.waitForStringValue()); |
308 | 336 |
309 executeJavaScript("testObject.setBooleanValue(0.0);"); | 337 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(0.0);"); |
310 assertFalse(mTestObject.waitForBooleanValue()); | 338 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
311 // LIVECONNECT_COMPLIANCE: Should be true. | 339 // LIVECONNECT_COMPLIANCE: Should be true. |
312 executeJavaScript("testObject.setBooleanValue(42.1);"); | 340 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(42.1);") ; |
313 assertFalse(mTestObject.waitForBooleanValue()); | 341 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
314 | 342 |
315 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 343 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
316 executeJavaScript("testObject.setCustomTypeValue(42.1);"); | 344 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(42.1) ;"); |
317 assertNull(mTestObject.waitForCustomTypeValue()); | 345 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
318 } | 346 } |
319 | 347 |
320 // Test passing JavaScript NaN to a method of an injected object. | 348 // Test passing JavaScript NaN to a method of an injected object. |
349 @Test | |
321 @SmallTest | 350 @SmallTest |
322 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 351 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
323 public void testPassNumberNaN() throws Throwable { | 352 public void testPassNumberNaN() throws Throwable { |
324 executeJavaScript("testObject.setByteValue(Number.NaN);"); | 353 mActivityTestRule.executeJavaScript("testObject.setByteValue(Number.NaN) ;"); |
325 assertEquals(0, mTestObject.waitForByteValue()); | 354 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
326 | 355 |
327 executeJavaScript("testObject.setCharValue(Number.NaN);"); | 356 mActivityTestRule.executeJavaScript("testObject.setCharValue(Number.NaN) ;"); |
328 assertEquals('\u0000', mTestObject.waitForCharValue()); | 357 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
329 | 358 |
330 executeJavaScript("testObject.setShortValue(Number.NaN);"); | 359 mActivityTestRule.executeJavaScript("testObject.setShortValue(Number.NaN );"); |
331 assertEquals(0, mTestObject.waitForShortValue()); | 360 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
332 | 361 |
333 executeJavaScript("testObject.setIntValue(Number.NaN);"); | 362 mActivityTestRule.executeJavaScript("testObject.setIntValue(Number.NaN); "); |
334 assertEquals(0, mTestObject.waitForIntValue()); | 363 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
335 | 364 |
336 executeJavaScript("testObject.setLongValue(Number.NaN);"); | 365 mActivityTestRule.executeJavaScript("testObject.setLongValue(Number.NaN) ;"); |
337 assertEquals(0L, mTestObject.waitForLongValue()); | 366 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
338 | 367 |
339 executeJavaScript("testObject.setFloatValue(Number.NaN);"); | 368 mActivityTestRule.executeJavaScript("testObject.setFloatValue(Number.NaN );"); |
340 assertEquals(Float.NaN, mTestObject.waitForFloatValue()); | 369 Assert.assertEquals(Float.NaN, mTestObject.waitForFloatValue(), ASSERTIO N_DELTA); |
341 | 370 |
342 executeJavaScript("testObject.setDoubleValue(Number.NaN);"); | 371 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(Number.Na N);"); |
343 assertEquals(Double.NaN, mTestObject.waitForDoubleValue()); | 372 Assert.assertEquals(Double.NaN, mTestObject.waitForDoubleValue(), ASSERT ION_DELTA); |
344 | 373 |
345 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . | 374 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . |
346 executeJavaScript("testObject.setObjectValue(Number.NaN);"); | 375 mActivityTestRule.executeJavaScript("testObject.setObjectValue(Number.Na N);"); |
347 assertNull(mTestObject.waitForObjectValue()); | 376 Assert.assertNull(mTestObject.waitForObjectValue()); |
348 | 377 |
349 executeJavaScript("testObject.setStringValue(Number.NaN);"); | 378 mActivityTestRule.executeJavaScript("testObject.setStringValue(Number.Na N);"); |
350 assertTrue("nan".equalsIgnoreCase(mTestObject.waitForStringValue())); | 379 Assert.assertTrue("nan".equalsIgnoreCase(mTestObject.waitForStringValue( ))); |
351 | 380 |
352 executeJavaScript("testObject.setBooleanValue(Number.NaN);"); | 381 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(Number.N aN);"); |
353 assertFalse(mTestObject.waitForBooleanValue()); | 382 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
354 | 383 |
355 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 384 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
356 executeJavaScript("testObject.setCustomTypeValue(Number.NaN);"); | 385 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(Numbe r.NaN);"); |
357 assertNull(mTestObject.waitForCustomTypeValue()); | 386 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
358 } | 387 } |
359 | 388 |
360 // Test passing JavaScript infinity to a method of an injected object. | 389 // Test passing JavaScript infinity to a method of an injected object. |
390 @Test | |
361 @SmallTest | 391 @SmallTest |
362 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 392 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
363 public void testPassNumberInfinity() throws Throwable { | 393 public void testPassNumberInfinity() throws Throwable { |
364 executeJavaScript("testObject.setByteValue(Infinity);"); | 394 mActivityTestRule.executeJavaScript("testObject.setByteValue(Infinity);" ); |
365 assertEquals(-1, mTestObject.waitForByteValue()); | 395 Assert.assertEquals(-1, mTestObject.waitForByteValue()); |
366 | 396 |
367 // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value. | 397 // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value. |
368 executeJavaScript("testObject.setCharValue(Infinity);"); | 398 mActivityTestRule.executeJavaScript("testObject.setCharValue(Infinity);" ); |
369 assertEquals('\u0000', mTestObject.waitForCharValue()); | 399 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
370 | 400 |
371 executeJavaScript("testObject.setShortValue(Infinity);"); | 401 mActivityTestRule.executeJavaScript("testObject.setShortValue(Infinity); "); |
372 assertEquals(-1, mTestObject.waitForShortValue()); | 402 Assert.assertEquals(-1, mTestObject.waitForShortValue()); |
373 | 403 |
374 executeJavaScript("testObject.setIntValue(Infinity);"); | 404 mActivityTestRule.executeJavaScript("testObject.setIntValue(Infinity);") ; |
375 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); | 405 Assert.assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue()); |
376 | 406 |
377 executeJavaScript("testObject.setLongValue(Infinity);"); | 407 mActivityTestRule.executeJavaScript("testObject.setLongValue(Infinity);" ); |
378 assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); | 408 Assert.assertEquals(Long.MAX_VALUE, mTestObject.waitForLongValue()); |
379 | 409 |
380 executeJavaScript("testObject.setFloatValue(Infinity);"); | 410 mActivityTestRule.executeJavaScript("testObject.setFloatValue(Infinity); "); |
381 assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue()); | 411 Assert.assertEquals( |
382 | 412 Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue(), ASSERT ION_DELTA); |
383 executeJavaScript("testObject.setDoubleValue(Infinity);"); | 413 |
384 assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleValue()) ; | 414 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(Infinity) ;"); |
415 Assert.assertEquals( | |
416 Double.POSITIVE_INFINITY, mTestObject.waitForDoubleValue(), ASSE RTION_DELTA); | |
385 | 417 |
386 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . | 418 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number . |
387 executeJavaScript("testObject.setObjectValue(Infinity);"); | 419 mActivityTestRule.executeJavaScript("testObject.setObjectValue(Infinity) ;"); |
388 assertNull(mTestObject.waitForObjectValue()); | 420 Assert.assertNull(mTestObject.waitForObjectValue()); |
389 | 421 |
390 executeJavaScript("testObject.setStringValue(Infinity);"); | 422 mActivityTestRule.executeJavaScript("testObject.setStringValue(Infinity) ;"); |
391 assertTrue("inf".equalsIgnoreCase(mTestObject.waitForStringValue())); | 423 Assert.assertTrue("inf".equalsIgnoreCase(mTestObject.waitForStringValue( ))); |
392 | 424 |
393 executeJavaScript("testObject.setBooleanValue(Infinity);"); | 425 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(Infinity );"); |
394 assertFalse(mTestObject.waitForBooleanValue()); | 426 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
395 | 427 |
396 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 428 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
397 executeJavaScript("testObject.setCustomTypeValue(Infinity);"); | 429 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(Infin ity);"); |
398 assertNull(mTestObject.waitForCustomTypeValue()); | 430 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
399 } | 431 } |
400 | 432 |
401 // Test passing a JavaScript boolean to a method of an injected object. | 433 // Test passing a JavaScript boolean to a method of an injected object. |
434 @Test | |
402 @SmallTest | 435 @SmallTest |
403 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 436 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
404 public void testPassBoolean() throws Throwable { | 437 public void testPassBoolean() throws Throwable { |
405 executeJavaScript("testObject.setBooleanValue(true);"); | 438 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(true);") ; |
406 assertTrue(mTestObject.waitForBooleanValue()); | 439 Assert.assertTrue(mTestObject.waitForBooleanValue()); |
407 executeJavaScript("testObject.setBooleanValue(false);"); | 440 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(false);" ); |
408 assertFalse(mTestObject.waitForBooleanValue()); | 441 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
409 | 442 |
410 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Boolea n. | 443 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Boolea n. |
411 executeJavaScript("testObject.setObjectValue(true);"); | 444 mActivityTestRule.executeJavaScript("testObject.setObjectValue(true);"); |
412 assertNull(mTestObject.waitForObjectValue()); | 445 Assert.assertNull(mTestObject.waitForObjectValue()); |
413 | 446 |
414 executeJavaScript("testObject.setStringValue(false);"); | 447 mActivityTestRule.executeJavaScript("testObject.setStringValue(false);") ; |
415 assertEquals("false", mTestObject.waitForStringValue()); | 448 Assert.assertEquals("false", mTestObject.waitForStringValue()); |
416 executeJavaScript("testObject.setStringValue(true);"); | 449 mActivityTestRule.executeJavaScript("testObject.setStringValue(true);"); |
417 assertEquals("true", mTestObject.waitForStringValue()); | 450 Assert.assertEquals("true", mTestObject.waitForStringValue()); |
418 | 451 |
419 // LIVECONNECT_COMPLIANCE: Should be 1. | 452 // LIVECONNECT_COMPLIANCE: Should be 1. |
420 executeJavaScript("testObject.setByteValue(true);"); | 453 mActivityTestRule.executeJavaScript("testObject.setByteValue(true);"); |
421 assertEquals(0, mTestObject.waitForByteValue()); | 454 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
422 executeJavaScript("testObject.setByteValue(false);"); | 455 mActivityTestRule.executeJavaScript("testObject.setByteValue(false);"); |
423 assertEquals(0, mTestObject.waitForByteValue()); | 456 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
424 | 457 |
425 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1. | 458 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1. |
426 executeJavaScript("testObject.setCharValue(true);"); | 459 mActivityTestRule.executeJavaScript("testObject.setCharValue(true);"); |
427 assertEquals('\u0000', mTestObject.waitForCharValue()); | 460 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
428 executeJavaScript("testObject.setCharValue(false);"); | 461 mActivityTestRule.executeJavaScript("testObject.setCharValue(false);"); |
429 assertEquals('\u0000', mTestObject.waitForCharValue()); | 462 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
430 | 463 |
431 // LIVECONNECT_COMPLIANCE: Should be 1. | 464 // LIVECONNECT_COMPLIANCE: Should be 1. |
432 executeJavaScript("testObject.setShortValue(true);"); | 465 mActivityTestRule.executeJavaScript("testObject.setShortValue(true);"); |
433 assertEquals(0, mTestObject.waitForShortValue()); | 466 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
434 executeJavaScript("testObject.setShortValue(false);"); | 467 mActivityTestRule.executeJavaScript("testObject.setShortValue(false);"); |
435 assertEquals(0, mTestObject.waitForShortValue()); | 468 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
436 | 469 |
437 // LIVECONNECT_COMPLIANCE: Should be 1. | 470 // LIVECONNECT_COMPLIANCE: Should be 1. |
438 executeJavaScript("testObject.setIntValue(true);"); | 471 mActivityTestRule.executeJavaScript("testObject.setIntValue(true);"); |
439 assertEquals(0, mTestObject.waitForIntValue()); | 472 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
440 executeJavaScript("testObject.setIntValue(false);"); | 473 mActivityTestRule.executeJavaScript("testObject.setIntValue(false);"); |
441 assertEquals(0, mTestObject.waitForIntValue()); | 474 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
442 | 475 |
443 // LIVECONNECT_COMPLIANCE: Should be 1. | 476 // LIVECONNECT_COMPLIANCE: Should be 1. |
444 executeJavaScript("testObject.setLongValue(true);"); | 477 mActivityTestRule.executeJavaScript("testObject.setLongValue(true);"); |
445 assertEquals(0L, mTestObject.waitForLongValue()); | 478 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
446 executeJavaScript("testObject.setLongValue(false);"); | 479 mActivityTestRule.executeJavaScript("testObject.setLongValue(false);"); |
447 assertEquals(0L, mTestObject.waitForLongValue()); | 480 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
448 | 481 |
449 // LIVECONNECT_COMPLIANCE: Should be 1.0. | 482 // LIVECONNECT_COMPLIANCE: Should be 1.0. |
450 executeJavaScript("testObject.setFloatValue(true);"); | 483 mActivityTestRule.executeJavaScript("testObject.setFloatValue(true);"); |
451 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 484 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
452 executeJavaScript("testObject.setFloatValue(false);"); | 485 mActivityTestRule.executeJavaScript("testObject.setFloatValue(false);"); |
453 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 486 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
454 | 487 |
455 // LIVECONNECT_COMPLIANCE: Should be 1.0. | 488 // LIVECONNECT_COMPLIANCE: Should be 1.0. |
456 executeJavaScript("testObject.setDoubleValue(true);"); | 489 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(true);"); |
457 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 490 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
458 executeJavaScript("testObject.setDoubleValue(false);"); | 491 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(false);") ; |
459 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 492 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
460 | 493 |
461 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 494 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
462 executeJavaScript("testObject.setCustomTypeValue(true);"); | 495 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(true) ;"); |
463 assertNull(mTestObject.waitForCustomTypeValue()); | 496 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
464 } | 497 } |
465 | 498 |
466 // Test passing a JavaScript string to a method of an injected object. | 499 // Test passing a JavaScript string to a method of an injected object. |
500 @Test | |
467 @SmallTest | 501 @SmallTest |
468 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 502 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
469 public void testPassString() throws Throwable { | 503 public void testPassString() throws Throwable { |
470 executeJavaScript("testObject.setStringValue(\"+042.10\");"); | 504 mActivityTestRule.executeJavaScript("testObject.setStringValue(\"+042.10 \");"); |
471 assertEquals("+042.10", mTestObject.waitForStringValue()); | 505 Assert.assertEquals("+042.10", mTestObject.waitForStringValue()); |
472 | 506 |
473 // Make sure that we distinguish between the empty string and NULL. | 507 // Make sure that we distinguish between the empty string and NULL. |
474 executeJavaScript("testObject.setStringValue(\"\");"); | 508 mActivityTestRule.executeJavaScript("testObject.setStringValue(\"\");"); |
475 assertEquals("", mTestObject.waitForStringValue()); | 509 Assert.assertEquals("", mTestObject.waitForStringValue()); |
476 | 510 |
477 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.String . | 511 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.String . |
478 executeJavaScript("testObject.setObjectValue(\"+042.10\");"); | 512 mActivityTestRule.executeJavaScript("testObject.setObjectValue(\"+042.10 \");"); |
479 assertNull(mTestObject.waitForObjectValue()); | 513 Assert.assertNull(mTestObject.waitForObjectValue()); |
480 | 514 |
481 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 515 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. |
482 executeJavaScript("testObject.setByteValue(\"+042.10\");"); | 516 mActivityTestRule.executeJavaScript("testObject.setByteValue(\"+042.10\" );"); |
483 assertEquals(0, mTestObject.waitForByteValue()); | 517 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
484 | 518 |
485 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 519 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. |
486 executeJavaScript("testObject.setShortValue(\"+042.10\");"); | 520 mActivityTestRule.executeJavaScript("testObject.setShortValue(\"+042.10\ ");"); |
487 assertEquals(0, mTestObject.waitForShortValue()); | 521 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
488 | 522 |
489 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 523 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. |
490 executeJavaScript("testObject.setIntValue(\"+042.10\");"); | 524 mActivityTestRule.executeJavaScript("testObject.setIntValue(\"+042.10\") ;"); |
491 assertEquals(0, mTestObject.waitForIntValue()); | 525 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
492 | 526 |
493 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 527 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. |
494 executeJavaScript("testObject.setLongValue(\"+042.10\");"); | 528 mActivityTestRule.executeJavaScript("testObject.setLongValue(\"+042.10\" );"); |
495 assertEquals(0L, mTestObject.waitForLongValue()); | 529 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
496 | 530 |
497 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 531 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. |
498 executeJavaScript("testObject.setFloatValue(\"+042.10\");"); | 532 mActivityTestRule.executeJavaScript("testObject.setFloatValue(\"+042.10\ ");"); |
499 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 533 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
500 | 534 |
501 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. | 535 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type. |
502 executeJavaScript("testObject.setDoubleValue(\"+042.10\");"); | 536 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(\"+042.10 \");"); |
503 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 537 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
504 | 538 |
505 // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char val ue. | 539 // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char val ue. |
506 executeJavaScript("testObject.setCharValue(\"+042.10\");"); | 540 mActivityTestRule.executeJavaScript("testObject.setCharValue(\"+042.10\" );"); |
507 assertEquals('\u0000', mTestObject.waitForCharValue()); | 541 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
508 | 542 |
509 // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true. | 543 // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true. |
510 executeJavaScript("testObject.setBooleanValue(\"+042.10\");"); | 544 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(\"+042.1 0\");"); |
511 assertFalse(mTestObject.waitForBooleanValue()); | 545 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
512 | 546 |
513 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 547 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
514 executeJavaScript("testObject.setCustomTypeValue(\"+042.10\");"); | 548 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(\"+04 2.10\");"); |
515 assertNull(mTestObject.waitForCustomTypeValue()); | 549 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
516 } | 550 } |
517 | 551 |
518 // Test passing a JavaScript object to a method of an injected object. | 552 // Test passing a JavaScript object to a method of an injected object. |
553 @Test | |
519 @SmallTest | 554 @SmallTest |
520 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 555 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
521 public void testPassJavaScriptObject() throws Throwable { | 556 public void testPassJavaScriptObject() throws Throwable { |
522 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 557 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
523 executeJavaScript("testObject.setObjectValue({foo: 42});"); | 558 mActivityTestRule.executeJavaScript("testObject.setObjectValue({foo: 42} );"); |
524 assertNull(mTestObject.waitForObjectValue()); | 559 Assert.assertNull(mTestObject.waitForObjectValue()); |
525 | 560 |
526 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 561 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
527 executeJavaScript("testObject.setCustomTypeValue({foo: 42});"); | 562 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue({foo: 42});"); |
528 assertNull(mTestObject.waitForCustomTypeValue()); | 563 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
529 | 564 |
530 // LIVECONNECT_COMPLIANCE: Should call toString() on object. | 565 // LIVECONNECT_COMPLIANCE: Should call toString() on object. |
531 executeJavaScript("testObject.setStringValue({foo: 42});"); | 566 mActivityTestRule.executeJavaScript("testObject.setStringValue({foo: 42} );"); |
532 assertEquals("undefined", mTestObject.waitForStringValue()); | 567 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
533 | 568 |
534 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 569 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
535 executeJavaScript("testObject.setByteValue({foo: 42});"); | 570 mActivityTestRule.executeJavaScript("testObject.setByteValue({foo: 42}); "); |
536 assertEquals(0, mTestObject.waitForByteValue()); | 571 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
537 | 572 |
538 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 573 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
539 executeJavaScript("testObject.setCharValue({foo: 42});"); | 574 mActivityTestRule.executeJavaScript("testObject.setCharValue({foo: 42}); "); |
540 assertEquals('\u0000', mTestObject.waitForCharValue()); | 575 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
541 | 576 |
542 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 577 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
543 executeJavaScript("testObject.setShortValue({foo: 42});"); | 578 mActivityTestRule.executeJavaScript("testObject.setShortValue({foo: 42}) ;"); |
544 assertEquals(0, mTestObject.waitForShortValue()); | 579 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
545 | 580 |
546 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 581 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
547 executeJavaScript("testObject.setIntValue({foo: 42});"); | 582 mActivityTestRule.executeJavaScript("testObject.setIntValue({foo: 42});" ); |
548 assertEquals(0, mTestObject.waitForIntValue()); | 583 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
549 | 584 |
550 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 585 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
551 executeJavaScript("testObject.setLongValue({foo: 42});"); | 586 mActivityTestRule.executeJavaScript("testObject.setLongValue({foo: 42}); "); |
552 assertEquals(0L, mTestObject.waitForLongValue()); | 587 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
553 | 588 |
554 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 589 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
555 executeJavaScript("testObject.setFloatValue({foo: 42});"); | 590 mActivityTestRule.executeJavaScript("testObject.setFloatValue({foo: 42}) ;"); |
556 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 591 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
557 | 592 |
558 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 593 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
559 executeJavaScript("testObject.setDoubleValue({foo: 42});"); | 594 mActivityTestRule.executeJavaScript("testObject.setDoubleValue({foo: 42} );"); |
560 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 595 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
561 | 596 |
562 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 597 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
563 executeJavaScript("testObject.setBooleanValue({foo: 42});"); | 598 mActivityTestRule.executeJavaScript("testObject.setBooleanValue({foo: 42 });"); |
564 assertFalse(mTestObject.waitForBooleanValue()); | 599 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
565 } | 600 } |
566 | 601 |
567 // Test passing a Java object to a method of an injected object. Note that | 602 // Test passing a Java object to a method of an injected object. Note that |
568 // this test requires being able to return objects from the methods of | 603 // this test requires being able to return objects from the methods of |
569 // injected objects. This is tested elsewhere. | 604 // injected objects. This is tested elsewhere. |
605 @Test | |
570 @SmallTest | 606 @SmallTest |
571 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 607 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
572 public void testPassJavaObject() throws Throwable { | 608 public void testPassJavaObject() throws Throwable { |
573 executeJavaScript("testObject.setObjectValue(testObject.getObjectInstanc e());"); | 609 mActivityTestRule.executeJavaScript( |
574 assertTrue(mTestObject.getObjectInstance() == mTestObject.waitForObjectV alue()); | 610 "testObject.setObjectValue(testObject.getObjectInstance());"); |
575 executeJavaScript("testObject.setObjectValue(testObject.getCustomTypeIns tance());"); | 611 Assert.assertTrue(mTestObject.getObjectInstance() == mTestObject.waitFor ObjectValue()); |
576 assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForObj ectValue()); | 612 mActivityTestRule.executeJavaScript( |
613 "testObject.setObjectValue(testObject.getCustomTypeInstance());" ); | |
614 Assert.assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.wai tForObjectValue()); | |
577 | 615 |
578 assertRaisesException("testObject.setCustomTypeValue(testObject.getObjec tInstance());"); | 616 assertRaisesException("testObject.setCustomTypeValue(testObject.getObjec tInstance());"); |
579 executeJavaScript("testObject.setCustomTypeValue(testObject.getCustomTyp eInstance());"); | 617 mActivityTestRule.executeJavaScript( |
580 assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForCus tomTypeValue()); | 618 "testObject.setCustomTypeValue(testObject.getCustomTypeInstance( ));"); |
619 Assert.assertTrue( | |
620 mTestObject.getCustomTypeInstance() == mTestObject.waitForCustom TypeValue()); | |
581 assertRaisesException( | 621 assertRaisesException( |
582 "testObject.setCustomTypeValue(testObject.getCustomType2Instance ());"); | 622 "testObject.setCustomTypeValue(testObject.getCustomType2Instance ());"); |
583 | 623 |
584 // LIVECONNECT_COMPLIANCE: Should call toString() on object. | 624 // LIVECONNECT_COMPLIANCE: Should call toString() on object. |
585 executeJavaScript("testObject.setStringValue(testObject.getObjectInstanc e());"); | 625 mActivityTestRule.executeJavaScript( |
586 assertEquals("undefined", mTestObject.waitForStringValue()); | 626 "testObject.setStringValue(testObject.getObjectInstance());"); |
587 | 627 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
588 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 628 |
589 executeJavaScript("testObject.setByteValue(testObject.getObjectInstance( ));"); | 629 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
590 assertEquals(0, mTestObject.waitForByteValue()); | 630 mActivityTestRule.executeJavaScript( |
591 | 631 "testObject.setByteValue(testObject.getObjectInstance());"); |
592 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 632 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
593 executeJavaScript("testObject.setCharValue(testObject.getObjectInstance( ));"); | 633 |
594 assertEquals('\u0000', mTestObject.waitForCharValue()); | 634 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
595 | 635 mActivityTestRule.executeJavaScript( |
596 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 636 "testObject.setCharValue(testObject.getObjectInstance());"); |
597 executeJavaScript("testObject.setShortValue(testObject.getObjectInstance ());"); | 637 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
598 assertEquals(0, mTestObject.waitForShortValue()); | 638 |
599 | 639 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
600 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 640 mActivityTestRule.executeJavaScript( |
601 executeJavaScript("testObject.setIntValue(testObject.getObjectInstance() );"); | 641 "testObject.setShortValue(testObject.getObjectInstance());"); |
602 assertEquals(0, mTestObject.waitForIntValue()); | 642 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
603 | 643 |
604 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 644 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
605 executeJavaScript("testObject.setLongValue(testObject.getObjectInstance( ));"); | 645 mActivityTestRule.executeJavaScript( |
606 assertEquals(0L, mTestObject.waitForLongValue()); | 646 "testObject.setIntValue(testObject.getObjectInstance());"); |
607 | 647 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
608 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 648 |
609 executeJavaScript("testObject.setFloatValue(testObject.getObjectInstance ());"); | 649 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
610 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 650 mActivityTestRule.executeJavaScript( |
611 | 651 "testObject.setLongValue(testObject.getObjectInstance());"); |
612 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 652 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
613 executeJavaScript("testObject.setDoubleValue(testObject.getObjectInstanc e());"); | 653 |
614 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 654 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. |
615 | 655 mActivityTestRule.executeJavaScript( |
616 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | 656 "testObject.setFloatValue(testObject.getObjectInstance());"); |
617 executeJavaScript("testObject.setBooleanValue(testObject.getObjectInstan ce());"); | 657 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
618 assertFalse(mTestObject.waitForBooleanValue()); | 658 |
659 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | |
660 mActivityTestRule.executeJavaScript( | |
661 "testObject.setDoubleValue(testObject.getObjectInstance());"); | |
662 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); | |
663 | |
664 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception. | |
665 mActivityTestRule.executeJavaScript( | |
666 "testObject.setBooleanValue(testObject.getObjectInstance());"); | |
667 Assert.assertFalse(mTestObject.waitForBooleanValue()); | |
619 } | 668 } |
620 | 669 |
621 static void assertFileIsReadable(String filePath) { | 670 static void assertFileIsReadable(String filePath) { |
622 File file = new File(filePath); | 671 File file = new File(filePath); |
623 try { | 672 try { |
624 assertTrue("Test file \"" + filePath + "\" is not readable.", file.c anRead()); | 673 Assert.assertTrue("Test file \"" + filePath + "\" is not readable.", file.canRead()); |
625 } catch (SecurityException e) { | 674 } catch (SecurityException e) { |
626 fail("Got a SecurityException for \"" + filePath + "\": " + e.toStri ng()); | 675 Assert.fail("Got a SecurityException for \"" + filePath + "\": " + e .toString()); |
627 } | 676 } |
628 } | 677 } |
629 | 678 |
630 // Verifies that classes obtained via custom class loaders can be | 679 // Verifies that classes obtained via custom class loaders can be |
631 // passed in and out to injected methods. In real life WebView scenarios | 680 // passed in and out to injected methods. In real life WebView scenarios |
632 // WebView and the app use different class loaders, thus we need to make | 681 // WebView and the app use different class loaders, thus we need to make |
633 // sure that WebView code doesn't attempt to find an app's class using | 682 // sure that WebView code doesn't attempt to find an app's class using |
634 // its own class loader. See crbug.com/491800. | 683 // its own class loader. See crbug.com/491800. |
684 @Test | |
635 @SmallTest | 685 @SmallTest |
636 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 686 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
637 public void testPassJavaObjectFromCustomClassLoader() throws Throwable { | 687 public void testPassJavaObjectFromCustomClassLoader() throws Throwable { |
638 // Compiled bytecode (dex) for the following class: | 688 // Compiled bytecode (dex) for the following class: |
639 // | 689 // |
640 // package org.example; | 690 // package org.example; |
641 // public class SelfConsumingObject { | 691 // public class SelfConsumingObject { |
642 // public SelfConsumingObject getSelf() { | 692 // public SelfConsumingObject getSelf() { |
643 // return this; | 693 // return this; |
644 // } | 694 // } |
645 // public boolean verifySelf(SelfConsumingObject self) { | 695 // public boolean verifySelf(SelfConsumingObject self) { |
646 // return this == self; | 696 // return this == self; |
647 // } | 697 // } |
648 // } | 698 // } |
649 final String dexFileName = "content/test/data/android/SelfConsumingObjec t.dex"; | 699 final String dexFileName = "content/test/data/android/SelfConsumingObjec t.dex"; |
650 assertFileIsReadable(UrlUtils.getIsolatedTestFilePath(dexFileName)); | 700 assertFileIsReadable(UrlUtils.getIsolatedTestFilePath(dexFileName)); |
651 final File optimizedDir = File.createTempFile("optimized", ""); | 701 final File optimizedDir = File.createTempFile("optimized", ""); |
652 assertTrue(optimizedDir.delete()); | 702 Assert.assertTrue(optimizedDir.delete()); |
653 assertTrue(optimizedDir.mkdirs()); | 703 Assert.assertTrue(optimizedDir.mkdirs()); |
654 DexClassLoader loader = new DexClassLoader(UrlUtils.getIsolatedTestFileP ath(dexFileName), | 704 DexClassLoader loader = new DexClassLoader(UrlUtils.getIsolatedTestFileP ath(dexFileName), |
655 optimizedDir.getAbsolutePath(), null, ClassLoader.getSystemClass Loader()); | 705 optimizedDir.getAbsolutePath(), null, ClassLoader.getSystemClass Loader()); |
656 final Object selfConsuming = loader.loadClass( | 706 final Object selfConsuming = loader.loadClass( |
657 "org.example.SelfConsumingObject").newInstance(); | 707 "org.example.SelfConsumingObject").newInstance(); |
658 runTestOnUiThread(new Runnable() { | 708 mActivityTestRule.runOnUiThread(new Runnable() { |
659 @Override | 709 @Override |
660 public void run() { | 710 public void run() { |
661 getContentViewCore().addPossiblyUnsafeJavascriptInterface( | 711 mActivityTestRule.getContentViewCore().addPossiblyUnsafeJavascri ptInterface( |
662 selfConsuming, "selfConsuming", null); | 712 selfConsuming, "selfConsuming", null); |
663 } | 713 } |
664 }); | 714 }); |
665 synchronousPageReload(); | 715 mActivityTestRule.synchronousPageReload(); |
666 executeJavaScript("testObject.setBooleanValue(" | 716 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(" |
667 + "selfConsuming.verifySelf(selfConsuming.getSelf()));"); | 717 + "selfConsuming.verifySelf(selfConsuming.getSelf()));"); |
668 assertTrue(mTestObject.waitForBooleanValue()); | 718 Assert.assertTrue(mTestObject.waitForBooleanValue()); |
669 } | 719 } |
670 | 720 |
671 // Test passing JavaScript null to a method of an injected object. | 721 // Test passing JavaScript null to a method of an injected object. |
722 @Test | |
672 @SmallTest | 723 @SmallTest |
673 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 724 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
674 public void testPassNull() throws Throwable { | 725 public void testPassNull() throws Throwable { |
675 executeJavaScript("testObject.setObjectValue(null);"); | 726 mActivityTestRule.executeJavaScript("testObject.setObjectValue(null);"); |
676 assertNull(mTestObject.waitForObjectValue()); | 727 Assert.assertNull(mTestObject.waitForObjectValue()); |
677 | 728 |
678 executeJavaScript("testObject.setCustomTypeValue(null);"); | 729 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(null) ;"); |
679 assertNull(mTestObject.waitForCustomTypeValue()); | 730 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
680 | 731 |
681 executeJavaScript("testObject.setStringValue(null);"); | 732 mActivityTestRule.executeJavaScript("testObject.setStringValue(null);"); |
682 assertNull(mTestObject.waitForStringValue()); | 733 Assert.assertNull(mTestObject.waitForStringValue()); |
683 | 734 |
684 executeJavaScript("testObject.setByteValue(null);"); | 735 mActivityTestRule.executeJavaScript("testObject.setByteValue(null);"); |
685 assertEquals(0, mTestObject.waitForByteValue()); | 736 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
686 | 737 |
687 executeJavaScript("testObject.setCharValue(null);"); | 738 mActivityTestRule.executeJavaScript("testObject.setCharValue(null);"); |
688 assertEquals('\u0000', mTestObject.waitForCharValue()); | 739 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
689 | 740 |
690 executeJavaScript("testObject.setShortValue(null);"); | 741 mActivityTestRule.executeJavaScript("testObject.setShortValue(null);"); |
691 assertEquals(0, mTestObject.waitForShortValue()); | 742 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
692 | 743 |
693 executeJavaScript("testObject.setIntValue(null);"); | 744 mActivityTestRule.executeJavaScript("testObject.setIntValue(null);"); |
694 assertEquals(0, mTestObject.waitForIntValue()); | 745 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
695 | 746 |
696 executeJavaScript("testObject.setLongValue(null);"); | 747 mActivityTestRule.executeJavaScript("testObject.setLongValue(null);"); |
697 assertEquals(0L, mTestObject.waitForLongValue()); | 748 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
698 | 749 |
699 executeJavaScript("testObject.setFloatValue(null);"); | 750 mActivityTestRule.executeJavaScript("testObject.setFloatValue(null);"); |
700 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 751 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
701 | 752 |
702 executeJavaScript("testObject.setDoubleValue(null);"); | 753 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(null);"); |
703 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 754 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
704 | 755 |
705 executeJavaScript("testObject.setBooleanValue(null);"); | 756 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(null);") ; |
706 assertFalse(mTestObject.waitForBooleanValue()); | 757 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
707 } | 758 } |
708 | 759 |
709 // Test passing JavaScript undefined to a method of an injected object. | 760 // Test passing JavaScript undefined to a method of an injected object. |
761 @Test | |
710 @SmallTest | 762 @SmallTest |
711 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 763 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
712 public void testPassUndefined() throws Throwable { | 764 public void testPassUndefined() throws Throwable { |
713 executeJavaScript("testObject.setObjectValue(undefined);"); | 765 mActivityTestRule.executeJavaScript("testObject.setObjectValue(undefined );"); |
714 assertNull(mTestObject.waitForObjectValue()); | 766 Assert.assertNull(mTestObject.waitForObjectValue()); |
715 | 767 |
716 executeJavaScript("testObject.setCustomTypeValue(undefined);"); | 768 mActivityTestRule.executeJavaScript("testObject.setCustomTypeValue(undef ined);"); |
717 assertNull(mTestObject.waitForCustomTypeValue()); | 769 Assert.assertNull(mTestObject.waitForCustomTypeValue()); |
718 | 770 |
719 // LIVECONNECT_COMPLIANCE: Should be NULL. | 771 // LIVECONNECT_COMPLIANCE: Should be NULL. |
720 executeJavaScript("testObject.setStringValue(undefined);"); | 772 mActivityTestRule.executeJavaScript("testObject.setStringValue(undefined );"); |
721 assertEquals("undefined", mTestObject.waitForStringValue()); | 773 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
722 | 774 |
723 executeJavaScript("testObject.setByteValue(undefined);"); | 775 mActivityTestRule.executeJavaScript("testObject.setByteValue(undefined); "); |
724 assertEquals(0, mTestObject.waitForByteValue()); | 776 Assert.assertEquals(0, mTestObject.waitForByteValue()); |
725 | 777 |
726 executeJavaScript("testObject.setCharValue(undefined);"); | 778 mActivityTestRule.executeJavaScript("testObject.setCharValue(undefined); "); |
727 assertEquals('\u0000', mTestObject.waitForCharValue()); | 779 Assert.assertEquals('\u0000', mTestObject.waitForCharValue()); |
728 | 780 |
729 executeJavaScript("testObject.setShortValue(undefined);"); | 781 mActivityTestRule.executeJavaScript("testObject.setShortValue(undefined) ;"); |
730 assertEquals(0, mTestObject.waitForShortValue()); | 782 Assert.assertEquals(0, mTestObject.waitForShortValue()); |
731 | 783 |
732 executeJavaScript("testObject.setIntValue(undefined);"); | 784 mActivityTestRule.executeJavaScript("testObject.setIntValue(undefined);" ); |
733 assertEquals(0, mTestObject.waitForIntValue()); | 785 Assert.assertEquals(0, mTestObject.waitForIntValue()); |
734 | 786 |
735 executeJavaScript("testObject.setLongValue(undefined);"); | 787 mActivityTestRule.executeJavaScript("testObject.setLongValue(undefined); "); |
736 assertEquals(0L, mTestObject.waitForLongValue()); | 788 Assert.assertEquals(0L, mTestObject.waitForLongValue()); |
737 | 789 |
738 executeJavaScript("testObject.setFloatValue(undefined);"); | 790 mActivityTestRule.executeJavaScript("testObject.setFloatValue(undefined) ;"); |
739 assertEquals(0.0f, mTestObject.waitForFloatValue()); | 791 Assert.assertEquals(0.0f, mTestObject.waitForFloatValue(), ASSERTION_DEL TA); |
740 | 792 |
741 executeJavaScript("testObject.setDoubleValue(undefined);"); | 793 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(undefined );"); |
742 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 794 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
743 | 795 |
744 executeJavaScript("testObject.setBooleanValue(undefined);"); | 796 mActivityTestRule.executeJavaScript("testObject.setBooleanValue(undefine d);"); |
745 assertFalse(mTestObject.waitForBooleanValue()); | 797 Assert.assertFalse(mTestObject.waitForBooleanValue()); |
746 } | 798 } |
747 | 799 |
748 // Verify that ArrayBuffers are not converted into objects or strings when p assed | 800 // Verify that ArrayBuffers are not converted into objects or strings when p assed |
749 // to Java. Basically, ArrayBuffers are treated as generic JavaScript object s. | 801 // to Java. Basically, ArrayBuffers are treated as generic JavaScript object s. |
802 @Test | |
750 @SmallTest | 803 @SmallTest |
751 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 804 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
752 public void testPassArrayBuffer() throws Throwable { | 805 public void testPassArrayBuffer() throws Throwable { |
753 executeJavaScript("buffer = new ArrayBuffer(16);"); | 806 mActivityTestRule.executeJavaScript("buffer = new ArrayBuffer(16);"); |
754 | 807 |
755 executeJavaScript("testObject.setObjectValue(buffer);"); | 808 mActivityTestRule.executeJavaScript("testObject.setObjectValue(buffer);" ); |
756 assertNull(mTestObject.waitForObjectValue()); | 809 Assert.assertNull(mTestObject.waitForObjectValue()); |
757 | 810 |
758 executeJavaScript("testObject.setStringValue(buffer);"); | 811 mActivityTestRule.executeJavaScript("testObject.setStringValue(buffer);" ); |
759 assertEquals("undefined", mTestObject.waitForStringValue()); | 812 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
760 } | 813 } |
761 | 814 |
762 // Verify that ArrayBufferViewss are not converted into objects or strings w hen passed | 815 // Verify that ArrayBufferViewss are not converted into objects or strings w hen passed |
763 // to Java. Basically, ArrayBufferViews are treated as generic JavaScript ob jects. | 816 // to Java. Basically, ArrayBufferViews are treated as generic JavaScript ob jects. |
764 // Here, a DataView is used as an ArrayBufferView instance (since the latter is | 817 // Here, a DataView is used as an ArrayBufferView instance (since the latter is |
765 // an interface and can't be instantiated directly). | 818 // an interface and can't be instantiated directly). |
819 @Test | |
766 @SmallTest | 820 @SmallTest |
767 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 821 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
768 public void testPassDataView() throws Throwable { | 822 public void testPassDataView() throws Throwable { |
769 executeJavaScript("buffer = new ArrayBuffer(16);"); | 823 mActivityTestRule.executeJavaScript("buffer = new ArrayBuffer(16);"); |
770 | 824 |
771 executeJavaScript("testObject.setObjectValue(new DataView(buffer));"); | 825 mActivityTestRule.executeJavaScript("testObject.setObjectValue(new DataV iew(buffer));"); |
772 assertNull(mTestObject.waitForObjectValue()); | 826 Assert.assertNull(mTestObject.waitForObjectValue()); |
773 | 827 |
774 executeJavaScript("testObject.setStringValue(new DataView(buffer));"); | 828 mActivityTestRule.executeJavaScript("testObject.setStringValue(new DataV iew(buffer));"); |
775 assertEquals("undefined", mTestObject.waitForStringValue()); | 829 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
776 } | 830 } |
777 | 831 |
778 // Verify that Date objects are not converted into double values, strings or objects. | 832 // Verify that Date objects are not converted into double values, strings or objects. |
833 @Test | |
779 @SmallTest | 834 @SmallTest |
780 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 835 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
781 public void testPassDateObject() throws Throwable { | 836 public void testPassDateObject() throws Throwable { |
782 executeJavaScript("testObject.setDoubleValue(new Date(2000, 0, 1));"); | 837 mActivityTestRule.executeJavaScript("testObject.setDoubleValue(new Date( 2000, 0, 1));"); |
783 assertEquals(0.0, mTestObject.waitForDoubleValue()); | 838 Assert.assertEquals(0.0, mTestObject.waitForDoubleValue(), ASSERTION_DEL TA); |
784 | 839 |
785 executeJavaScript("testObject.setStringValue(new Date(2000, 0, 1));"); | 840 mActivityTestRule.executeJavaScript("testObject.setStringValue(new Date( 2000, 0, 1));"); |
786 assertEquals("undefined", mTestObject.waitForStringValue()); | 841 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
787 | 842 |
788 executeJavaScript("testObject.setObjectValue(new Date(2000, 0, 1));"); | 843 mActivityTestRule.executeJavaScript("testObject.setObjectValue(new Date( 2000, 0, 1));"); |
789 assertNull(mTestObject.waitForObjectValue()); | 844 Assert.assertNull(mTestObject.waitForObjectValue()); |
790 } | 845 } |
791 | 846 |
792 // Verify that RegExp objects are not converted into strings or objects. | 847 // Verify that RegExp objects are not converted into strings or objects. |
848 @Test | |
793 @SmallTest | 849 @SmallTest |
794 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 850 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
795 public void testPassRegExpObject() throws Throwable { | 851 public void testPassRegExpObject() throws Throwable { |
796 executeJavaScript("testObject.setStringValue(/abc/);"); | 852 mActivityTestRule.executeJavaScript("testObject.setStringValue(/abc/);") ; |
797 assertEquals("undefined", mTestObject.waitForStringValue()); | 853 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
798 | 854 |
799 executeJavaScript("testObject.setObjectValue(/abc/);"); | 855 mActivityTestRule.executeJavaScript("testObject.setObjectValue(/abc/);") ; |
800 assertNull(mTestObject.waitForObjectValue()); | 856 Assert.assertNull(mTestObject.waitForObjectValue()); |
801 } | 857 } |
802 | 858 |
803 // Verify that Function objects are not converted into strings or objects. | 859 // Verify that Function objects are not converted into strings or objects. |
860 @Test | |
804 @SmallTest | 861 @SmallTest |
805 @Feature({"AndroidWebView", "Android-JavaBridge"}) | 862 @Feature({"AndroidWebView", "Android-JavaBridge"}) |
806 public void testPassFunctionObject() throws Throwable { | 863 public void testPassFunctionObject() throws Throwable { |
807 executeJavaScript("func = new Function('a', 'b', 'return a + b');"); | 864 mActivityTestRule.executeJavaScript("func = new Function('a', 'b', 'retu rn a + b');"); |
808 | 865 |
809 executeJavaScript("testObject.setStringValue(func);"); | 866 mActivityTestRule.executeJavaScript("testObject.setStringValue(func);"); |
810 assertEquals("undefined", mTestObject.waitForStringValue()); | 867 Assert.assertEquals("undefined", mTestObject.waitForStringValue()); |
811 | 868 |
812 executeJavaScript("testObject.setObjectValue(func);"); | 869 mActivityTestRule.executeJavaScript("testObject.setObjectValue(func);"); |
813 assertNull(mTestObject.waitForObjectValue()); | 870 Assert.assertNull(mTestObject.waitForObjectValue()); |
814 } | 871 } |
815 } | 872 } |
OLD | NEW |