Chromium Code Reviews| 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 |