Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: content/shell/android/javatests/src/org/chromium/content_shell/JavaBridgeCoercionTest.java

Issue 10911131: Upstream JavaBridge tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update ContentShellTestBase Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.content_shell;
6
7 import android.test.suitebuilder.annotation.SmallTest;
8
9 import org.chromium.base.test.Feature;
10 import org.chromium.base.test.DisabledTest;
11
12 /**
13 * Part of the test suite for the Java Bridge. This class tests that
14 * we correctly convert JavaScript values to Java values when passing them to
15 * the methods of injected Java objects.
16 *
17 * The conversions should follow
18 * http://jdk6.java.net/plugin2/liveconnect/#JS_JAVA_CONVERSIONS. Places in
19 * which the implementation differs from the spec are marked with
20 * LIVECONNECT_COMPLIANCE.
21 * FIXME: Consider making our implementation more compliant, if it will not
22 * break backwards-compatibility. See b/4408210.
23 */
24 public class JavaBridgeCoercionTest extends JavaBridgeTestBase {
25 private class TestObject extends Controller {
26 private Object objectInstance;
27 private CustomType customTypeInstance;
28 private CustomType2 customType2Instance;
29
30 private boolean mBooleanValue;
31 private byte mByteValue;
32 private char mCharValue;
33 private short mShortValue;
34 private int mIntValue;
35 private long mLongValue;
36 private float mFloatValue;
37 private double mDoubleValue;
38 private String mStringValue;
39 private Object mObjectValue;
40 private CustomType mCustomTypeValue;
41
42 public TestObject() {
43 objectInstance = new Object();
44 customTypeInstance = new CustomType();
45 customType2Instance = new CustomType2();
46 }
47
48 public Object getObjectInstance() {
49 return objectInstance;
50 }
51 public CustomType getCustomTypeInstance() {
52 return customTypeInstance;
53 }
54 public CustomType2 getCustomType2Instance() {
55 return customType2Instance;
56 }
57
58 public synchronized void setBooleanValue(boolean x) {
59 mBooleanValue = x;
60 notifyResultIsReady();
61 }
62 public synchronized void setByteValue(byte x) {
63 mByteValue = x;
64 notifyResultIsReady();
65 }
66 public synchronized void setCharValue(char x) {
67 mCharValue = x;
68 notifyResultIsReady();
69 }
70 public synchronized void setShortValue(short x) {
71 mShortValue = x;
72 notifyResultIsReady();
73 }
74 public synchronized void setIntValue(int x) {
75 mIntValue = x;
76 notifyResultIsReady();
77 }
78 public synchronized void setLongValue(long x) {
79 mLongValue = x;
80 notifyResultIsReady();
81 }
82 public synchronized void setFloatValue(float x) {
83 mFloatValue = x;
84 notifyResultIsReady();
85 }
86 public synchronized void setDoubleValue(double x) {
87 mDoubleValue = x;
88 notifyResultIsReady();
89 }
90 public synchronized void setStringValue(String x) {
91 mStringValue = x;
92 notifyResultIsReady();
93 }
94 public synchronized void setObjectValue(Object x) {
95 mObjectValue = x;
96 notifyResultIsReady();
97 }
98 public synchronized void setCustomTypeValue(CustomType x) {
99 mCustomTypeValue = x;
100 notifyResultIsReady();
101 }
102
103 public synchronized boolean waitForBooleanValue() {
104 waitForResult();
105 return mBooleanValue;
106 }
107 public synchronized byte waitForByteValue() {
108 waitForResult();
109 return mByteValue;
110 }
111 public synchronized char waitForCharValue() {
112 waitForResult();
113 return mCharValue;
114 }
115 public synchronized short waitForShortValue() {
116 waitForResult();
117 return mShortValue;
118 }
119 public synchronized int waitForIntValue() {
120 waitForResult();
121 return mIntValue;
122 }
123 public synchronized long waitForLongValue() {
124 waitForResult();
125 return mLongValue;
126 }
127 public synchronized float waitForFloatValue() {
128 waitForResult();
129 return mFloatValue;
130 }
131 public synchronized double waitForDoubleValue() {
132 waitForResult();
133 return mDoubleValue;
134 }
135 public synchronized String waitForStringValue() {
136 waitForResult();
137 return mStringValue;
138 }
139 public synchronized Object waitForObjectValue() {
140 waitForResult();
141 return mObjectValue;
142 }
143 public synchronized CustomType waitForCustomTypeValue() {
144 waitForResult();
145 return mCustomTypeValue;
146 }
147 }
148
149 // Two custom types used when testing passing objects.
150 private static class CustomType {
151 }
152 private static class CustomType2 {
153 }
154
155 private TestObject mTestObject;
156
157 @Override
158 protected void setUp() throws Exception {
159 super.setUp();
160 mTestObject = new TestObject();
161 setUpContentView(mTestObject, "testObject");
162 }
163
164 // Test passing a JavaScript number in the int32 range to a method of an
165 // injected object.
166 @SmallTest
167 @Feature({"Android-WebView", "Android-JavaBridge"})
168 public void testPassNumberInt32() throws Throwable {
169 executeJavaScript("testObject.setByteValue(42);");
170 assertEquals(42, mTestObject.waitForByteValue());
171 executeJavaScript("testObject.setByteValue(" + Byte.MAX_VALUE + " + 42); ");
172 assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue());
173
174 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value.
175 executeJavaScript("testObject.setCharValue(42);");
176 assertEquals('\u0000', mTestObject.waitForCharValue());
177
178 executeJavaScript("testObject.setShortValue(42);");
179 assertEquals(42, mTestObject.waitForShortValue());
180 executeJavaScript("testObject.setShortValue(" + Short.MAX_VALUE + " + 42 );");
181 assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue());
182
183 executeJavaScript("testObject.setIntValue(42);");
184 assertEquals(42, mTestObject.waitForIntValue());
185
186 executeJavaScript("testObject.setLongValue(42);");
187 assertEquals(42L, mTestObject.waitForLongValue());
188
189 executeJavaScript("testObject.setFloatValue(42);");
190 assertEquals(42.0f, mTestObject.waitForFloatValue());
191
192 executeJavaScript("testObject.setDoubleValue(42);");
193 assertEquals(42.0, mTestObject.waitForDoubleValue());
194
195 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number .
196 executeJavaScript("testObject.setObjectValue(42);");
197 assertNull(mTestObject.waitForObjectValue());
198
199 // The spec allows the JS engine flexibility in how to format the number .
200 executeJavaScript("testObject.setStringValue(42);");
201 String str = mTestObject.waitForStringValue();
202 assertTrue("42".equals(str) || "42.0".equals(str));
203
204 executeJavaScript("testObject.setBooleanValue(0);");
205 assertFalse(mTestObject.waitForBooleanValue());
206 // LIVECONNECT_COMPLIANCE: Should be true;
207 executeJavaScript("testObject.setBooleanValue(42);");
208 assertFalse(mTestObject.waitForBooleanValue());
209
210 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
211 executeJavaScript("testObject.setCustomTypeValue(42);");
212 assertNull(mTestObject.waitForCustomTypeValue());
213 }
214
215 // Test passing a JavaScript number in the double range to a method of an
216 // injected object.
217 /*
218 @SmallTest
219 @Feature({"Android-WebView", "Android-JavaBridge"})
220 Bug: http://code.google.com/p/chromium/issues/detail?id=145881
221 */
222 @DisabledTest
223 public void testPassNumberDouble() throws Throwable {
224 executeJavaScript("testObject.setByteValue(42.1);");
225 assertEquals(42, mTestObject.waitForByteValue());
226 executeJavaScript("testObject.setByteValue(" + Byte.MAX_VALUE + " + 42.1 );");
227 assertEquals(Byte.MIN_VALUE + 42 - 1, mTestObject.waitForByteValue());
228 executeJavaScript("testObject.setByteValue(" + Integer.MAX_VALUE + " + 4 2.1);");
229 assertEquals(-1, mTestObject.waitForByteValue());
230
231 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value.
232 executeJavaScript("testObject.setCharValue(42.1);");
233 assertEquals('\u0000', mTestObject.waitForCharValue());
234
235 executeJavaScript("testObject.setShortValue(42.1);");
236 assertEquals(42, mTestObject.waitForShortValue());
237 executeJavaScript("testObject.setShortValue(" + Short.MAX_VALUE + " + 42 .1);");
238 assertEquals(Short.MIN_VALUE + 42 - 1, mTestObject.waitForShortValue());
239 executeJavaScript("testObject.setShortValue(" + Integer.MAX_VALUE + " + 42.1);");
240 assertEquals(-1, mTestObject.waitForShortValue());
241
242 executeJavaScript("testObject.setIntValue(42.1);");
243 assertEquals(42, mTestObject.waitForIntValue());
244 executeJavaScript("testObject.setIntValue(" + Integer.MAX_VALUE + " + 42 .1);");
245 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue());
246
247 executeJavaScript("testObject.setLongValue(42.1);");
248 assertEquals(42L, mTestObject.waitForLongValue());
249 // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE.
250 executeJavaScript("testObject.setLongValue(" + Long.MAX_VALUE + " + 42.1 );");
251 assertEquals(Long.MIN_VALUE, mTestObject.waitForLongValue());
252
253 executeJavaScript("testObject.setFloatValue(42.1);");
254 assertEquals(42.1f, mTestObject.waitForFloatValue());
255
256 executeJavaScript("testObject.setDoubleValue(42.1);");
257 assertEquals(42.1, mTestObject.waitForDoubleValue());
258
259 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number .
260 executeJavaScript("testObject.setObjectValue(42.1);");
261 assertNull(mTestObject.waitForObjectValue());
262
263 executeJavaScript("testObject.setStringValue(42.1);");
264 assertEquals("42.1", mTestObject.waitForStringValue());
265
266 executeJavaScript("testObject.setBooleanValue(0.0);");
267 assertFalse(mTestObject.waitForBooleanValue());
268 // LIVECONNECT_COMPLIANCE: Should be true.
269 executeJavaScript("testObject.setBooleanValue(42.1);");
270 assertFalse(mTestObject.waitForBooleanValue());
271
272 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
273 executeJavaScript("testObject.setCustomTypeValue(42.1);");
274 assertNull(mTestObject.waitForCustomTypeValue());
275 }
276
277 // Test passing JavaScript NaN to a method of an injected object.
278 /*
279 @SmallTest
280 @Feature({"Android-WebView", "Android-JavaBridge"})
281 Bug: http://code.google.com/p/chromium/issues/detail?id=145881
282 */
283 @DisabledTest
284 public void testPassNumberNaN() throws Throwable {
285 executeJavaScript("testObject.setByteValue(Number.NaN);");
286 assertEquals(0, mTestObject.waitForByteValue());
287
288 executeJavaScript("testObject.setCharValue(Number.NaN);");
289 assertEquals('\u0000', mTestObject.waitForCharValue());
290
291 executeJavaScript("testObject.setShortValue(Number.NaN);");
292 assertEquals(0, mTestObject.waitForShortValue());
293
294 executeJavaScript("testObject.setIntValue(Number.NaN);");
295 assertEquals(0, mTestObject.waitForIntValue());
296
297 executeJavaScript("testObject.setLongValue(Number.NaN);");
298 assertEquals(0L, mTestObject.waitForLongValue());
299
300 executeJavaScript("testObject.setFloatValue(Number.NaN);");
301 assertEquals(Float.NaN, mTestObject.waitForFloatValue());
302
303 executeJavaScript("testObject.setDoubleValue(Number.NaN);");
304 assertEquals(Double.NaN, mTestObject.waitForDoubleValue());
305
306 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number .
307 executeJavaScript("testObject.setObjectValue(Number.NaN);");
308 assertNull(mTestObject.waitForObjectValue());
309
310 executeJavaScript("testObject.setStringValue(Number.NaN);");
311 assertEquals("NaN", mTestObject.waitForStringValue());
312
313 executeJavaScript("testObject.setBooleanValue(Number.NaN);");
314 assertFalse(mTestObject.waitForBooleanValue());
315
316 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
317 executeJavaScript("testObject.setCustomTypeValue(Number.NaN);");
318 assertNull(mTestObject.waitForCustomTypeValue());
319 }
320
321 // Test passing JavaScript infinity to a method of an injected object.
322 /*
323 @SmallTest
324 @Feature({"Android-WebView", "Android-JavaBridge"})
325 Bug: http://code.google.com/p/chromium/issues/detail?id=145881
326 */
327 @DisabledTest
328 public void testPassNumberInfinity() throws Throwable {
329 executeJavaScript("testObject.setByteValue(Infinity);");
330 assertEquals(-1, mTestObject.waitForByteValue());
331
332 // LIVECONNECT_COMPLIANCE: Should convert to maximum numeric char value.
333 executeJavaScript("testObject.setCharValue(Infinity);");
334 assertEquals('\u0000', mTestObject.waitForCharValue());
335
336 executeJavaScript("testObject.setShortValue(Infinity);");
337 assertEquals(-1, mTestObject.waitForShortValue());
338
339 executeJavaScript("testObject.setIntValue(Infinity);");
340 assertEquals(Integer.MAX_VALUE, mTestObject.waitForIntValue());
341
342 // LIVECONNECT_COMPLIANCE: Should be Long.MAX_VALUE.
343 executeJavaScript("testObject.setLongValue(Infinity);");
344 assertEquals(-1L, mTestObject.waitForLongValue());
345
346 executeJavaScript("testObject.setFloatValue(Infinity);");
347 assertEquals(Float.POSITIVE_INFINITY, mTestObject.waitForFloatValue());
348
349 executeJavaScript("testObject.setDoubleValue(Infinity);");
350 assertEquals(Double.POSITIVE_INFINITY, mTestObject.waitForDoubleValue()) ;
351
352 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Number .
353 executeJavaScript("testObject.setObjectValue(Infinity);");
354 assertNull(mTestObject.waitForObjectValue());
355
356 executeJavaScript("testObject.setStringValue(Infinity);");
357 assertEquals("Inf", mTestObject.waitForStringValue());
358
359 executeJavaScript("testObject.setBooleanValue(Infinity);");
360 assertFalse(mTestObject.waitForBooleanValue());
361
362 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
363 executeJavaScript("testObject.setCustomTypeValue(Infinity);");
364 assertNull(mTestObject.waitForCustomTypeValue());
365 }
366
367 // Test passing a JavaScript boolean to a method of an injected object.
368 @SmallTest
369 @Feature({"Android-WebView", "Android-JavaBridge"})
370 public void testPassBoolean() throws Throwable {
371 executeJavaScript("testObject.setBooleanValue(true);");
372 assertTrue(mTestObject.waitForBooleanValue());
373 executeJavaScript("testObject.setBooleanValue(false);");
374 assertFalse(mTestObject.waitForBooleanValue());
375
376 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.Boolea n.
377 executeJavaScript("testObject.setObjectValue(true);");
378 assertNull(mTestObject.waitForObjectValue());
379
380 executeJavaScript("testObject.setStringValue(false);");
381 assertEquals("false", mTestObject.waitForStringValue());
382 executeJavaScript("testObject.setStringValue(true);");
383 assertEquals("true", mTestObject.waitForStringValue());
384
385 // LIVECONNECT_COMPLIANCE: Should be 1.
386 executeJavaScript("testObject.setByteValue(true);");
387 assertEquals(0, mTestObject.waitForByteValue());
388 executeJavaScript("testObject.setByteValue(false);");
389 assertEquals(0, mTestObject.waitForByteValue());
390
391 // LIVECONNECT_COMPLIANCE: Should convert to numeric char value 1.
392 executeJavaScript("testObject.setCharValue(true);");
393 assertEquals('\u0000', mTestObject.waitForCharValue());
394 executeJavaScript("testObject.setCharValue(false);");
395 assertEquals('\u0000', mTestObject.waitForCharValue());
396
397 // LIVECONNECT_COMPLIANCE: Should be 1.
398 executeJavaScript("testObject.setShortValue(true);");
399 assertEquals(0, mTestObject.waitForShortValue());
400 executeJavaScript("testObject.setShortValue(false);");
401 assertEquals(0, mTestObject.waitForShortValue());
402
403 // LIVECONNECT_COMPLIANCE: Should be 1.
404 executeJavaScript("testObject.setIntValue(true);");
405 assertEquals(0, mTestObject.waitForIntValue());
406 executeJavaScript("testObject.setIntValue(false);");
407 assertEquals(0, mTestObject.waitForIntValue());
408
409 // LIVECONNECT_COMPLIANCE: Should be 1.
410 executeJavaScript("testObject.setLongValue(true);");
411 assertEquals(0L, mTestObject.waitForLongValue());
412 executeJavaScript("testObject.setLongValue(false);");
413 assertEquals(0L, mTestObject.waitForLongValue());
414
415 // LIVECONNECT_COMPLIANCE: Should be 1.0.
416 executeJavaScript("testObject.setFloatValue(true);");
417 assertEquals(0.0f, mTestObject.waitForFloatValue());
418 executeJavaScript("testObject.setFloatValue(false);");
419 assertEquals(0.0f, mTestObject.waitForFloatValue());
420
421 // LIVECONNECT_COMPLIANCE: Should be 1.0.
422 executeJavaScript("testObject.setDoubleValue(true);");
423 assertEquals(0.0, mTestObject.waitForDoubleValue());
424 executeJavaScript("testObject.setDoubleValue(false);");
425 assertEquals(0.0, mTestObject.waitForDoubleValue());
426
427 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
428 executeJavaScript("testObject.setCustomTypeValue(true);");
429 assertNull(mTestObject.waitForCustomTypeValue());
430 }
431
432 // Test passing a JavaScript string to a method of an injected object.
433 @SmallTest
434 @Feature({"Android-WebView", "Android-JavaBridge"})
435 public void testPassString() throws Throwable {
436 executeJavaScript("testObject.setStringValue(\"+042.10\");");
437 assertEquals("+042.10", mTestObject.waitForStringValue());
438
439 // Make sure that we distinguish between the empty string and NULL.
440 executeJavaScript("testObject.setStringValue(\"\");");
441 assertEquals("", mTestObject.waitForStringValue());
442
443 // LIVECONNECT_COMPLIANCE: Should create an instance of java.lang.String .
444 executeJavaScript("testObject.setObjectValue(\"+042.10\");");
445 assertNull(mTestObject.waitForObjectValue());
446
447 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
448 executeJavaScript("testObject.setByteValue(\"+042.10\");");
449 assertEquals(0, mTestObject.waitForByteValue());
450
451 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
452 executeJavaScript("testObject.setShortValue(\"+042.10\");");
453 assertEquals(0, mTestObject.waitForShortValue());
454
455 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
456 executeJavaScript("testObject.setIntValue(\"+042.10\");");
457 assertEquals(0, mTestObject.waitForIntValue());
458
459 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
460 executeJavaScript("testObject.setLongValue(\"+042.10\");");
461 assertEquals(0L, mTestObject.waitForLongValue());
462
463 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
464 executeJavaScript("testObject.setFloatValue(\"+042.10\");");
465 assertEquals(0.0f, mTestObject.waitForFloatValue());
466
467 // LIVECONNECT_COMPLIANCE: Should use valueOf() of appropriate type.
468 executeJavaScript("testObject.setDoubleValue(\"+042.10\");");
469 assertEquals(0.0, mTestObject.waitForDoubleValue());
470
471 // LIVECONNECT_COMPLIANCE: Should decode and convert to numeric char val ue.
472 executeJavaScript("testObject.setCharValue(\"+042.10\");");
473 assertEquals('\u0000', mTestObject.waitForCharValue());
474
475 // LIVECONNECT_COMPLIANCE: Non-empty string should convert to true.
476 executeJavaScript("testObject.setBooleanValue(\"+042.10\");");
477 assertFalse(mTestObject.waitForBooleanValue());
478
479 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
480 executeJavaScript("testObject.setCustomTypeValue(\"+042.10\");");
481 assertNull(mTestObject.waitForCustomTypeValue());
482 }
483
484 // Test passing a JavaScript object to a method of an injected object.
485 @SmallTest
486 @Feature({"Android-WebView", "Android-JavaBridge"})
487 public void testPassJavaScriptObject() throws Throwable {
488 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
489 executeJavaScript("testObject.setObjectValue({foo: 42});");
490 assertNull(mTestObject.waitForObjectValue());
491
492 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
493 executeJavaScript("testObject.setCustomTypeValue({foo: 42});");
494 assertNull(mTestObject.waitForCustomTypeValue());
495
496 // LIVECONNECT_COMPLIANCE: Should call toString() on object.
497 executeJavaScript("testObject.setStringValue({foo: 42});");
498 assertEquals("undefined", mTestObject.waitForStringValue());
499
500 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
501 executeJavaScript("testObject.setByteValue({foo: 42});");
502 assertEquals(0, mTestObject.waitForByteValue());
503
504 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
505 executeJavaScript("testObject.setCharValue({foo: 42});");
506 assertEquals('\u0000', mTestObject.waitForCharValue());
507
508 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
509 executeJavaScript("testObject.setShortValue({foo: 42});");
510 assertEquals(0, mTestObject.waitForShortValue());
511
512 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
513 executeJavaScript("testObject.setIntValue({foo: 42});");
514 assertEquals(0, mTestObject.waitForIntValue());
515
516 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
517 executeJavaScript("testObject.setLongValue({foo: 42});");
518 assertEquals(0L, mTestObject.waitForLongValue());
519
520 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
521 executeJavaScript("testObject.setFloatValue({foo: 42});");
522 assertEquals(0.0f, mTestObject.waitForFloatValue());
523
524 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
525 executeJavaScript("testObject.setDoubleValue({foo: 42});");
526 assertEquals(0.0, mTestObject.waitForDoubleValue());
527
528 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
529 executeJavaScript("testObject.setBooleanValue({foo: 42});");
530 assertFalse(mTestObject.waitForBooleanValue());
531 }
532
533 // Test passing a Java object to a method of an injected object. Note that
534 // this test requires being able to return objects from the methods of
535 // injected objects. This is tested elsewhere.
536 @SmallTest
537 @Feature({"Android-WebView", "Android-JavaBridge"})
538 public void testPassJavaObject() throws Throwable {
539 executeJavaScript("testObject.setObjectValue(testObject.getObjectInstanc e());");
540 assertTrue(mTestObject.getObjectInstance() == mTestObject.waitForObjectV alue());
541 executeJavaScript("testObject.setObjectValue(testObject.getCustomTypeIns tance());");
542 assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForObj ectValue());
543
544 executeJavaScript("testObject.setCustomTypeValue(testObject.getObjectIns tance());");
545 assertTrue(mTestObject.getObjectInstance() == mTestObject.waitForCustomT ypeValue());
546 executeJavaScript("testObject.setCustomTypeValue(testObject.getCustomTyp eInstance());");
547 assertTrue(mTestObject.getCustomTypeInstance() == mTestObject.waitForCus tomTypeValue());
548 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception, as the t ypes are unrelated.
549 executeJavaScript("testObject.setCustomTypeValue(testObject.getCustomTyp e2Instance());");
550 assertTrue(mTestObject.getCustomType2Instance() ==
551 (Object)mTestObject.waitForCustomTypeValue());
552
553 // LIVECONNECT_COMPLIANCE: Should call toString() on object.
554 executeJavaScript("testObject.setStringValue(testObject.getObjectInstanc e());");
555 assertEquals("undefined", mTestObject.waitForStringValue());
556
557 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
558 executeJavaScript("testObject.setByteValue(testObject.getObjectInstance( ));");
559 assertEquals(0, mTestObject.waitForByteValue());
560
561 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
562 executeJavaScript("testObject.setCharValue(testObject.getObjectInstance( ));");
563 assertEquals('\u0000', mTestObject.waitForCharValue());
564
565 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
566 executeJavaScript("testObject.setShortValue(testObject.getObjectInstance ());");
567 assertEquals(0, mTestObject.waitForShortValue());
568
569 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
570 executeJavaScript("testObject.setIntValue(testObject.getObjectInstance() );");
571 assertEquals(0, mTestObject.waitForIntValue());
572
573 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
574 executeJavaScript("testObject.setLongValue(testObject.getObjectInstance( ));");
575 assertEquals(0L, mTestObject.waitForLongValue());
576
577 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
578 executeJavaScript("testObject.setFloatValue(testObject.getObjectInstance ());");
579 assertEquals(0.0f, mTestObject.waitForFloatValue());
580
581 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
582 executeJavaScript("testObject.setDoubleValue(testObject.getObjectInstanc e());");
583 assertEquals(0.0, mTestObject.waitForDoubleValue());
584
585 // LIVECONNECT_COMPLIANCE: Should raise a JavaScript exception.
586 executeJavaScript("testObject.setBooleanValue(testObject.getObjectInstan ce());");
587 assertFalse(mTestObject.waitForBooleanValue());
588 }
589
590 // Test passing JavaScript null to a method of an injected object.
591 @SmallTest
592 @Feature({"Android-WebView", "Android-JavaBridge"})
593 public void testPassNull() throws Throwable {
594 executeJavaScript("testObject.setObjectValue(null);");
595 assertNull(mTestObject.waitForObjectValue());
596
597 executeJavaScript("testObject.setCustomTypeValue(null);");
598 assertNull(mTestObject.waitForCustomTypeValue());
599
600 executeJavaScript("testObject.setStringValue(null);");
601 assertNull(mTestObject.waitForStringValue());
602
603 executeJavaScript("testObject.setByteValue(null);");
604 assertEquals(0, mTestObject.waitForByteValue());
605
606 executeJavaScript("testObject.setCharValue(null);");
607 assertEquals('\u0000', mTestObject.waitForCharValue());
608
609 executeJavaScript("testObject.setShortValue(null);");
610 assertEquals(0, mTestObject.waitForShortValue());
611
612 executeJavaScript("testObject.setIntValue(null);");
613 assertEquals(0, mTestObject.waitForIntValue());
614
615 executeJavaScript("testObject.setLongValue(null);");
616 assertEquals(0L, mTestObject.waitForLongValue());
617
618 executeJavaScript("testObject.setFloatValue(null);");
619 assertEquals(0.0f, mTestObject.waitForFloatValue());
620
621 executeJavaScript("testObject.setDoubleValue(null);");
622 assertEquals(0.0, mTestObject.waitForDoubleValue());
623
624 executeJavaScript("testObject.setBooleanValue(null);");
625 assertFalse(mTestObject.waitForBooleanValue());
626 }
627
628 // Test passing JavaScript undefined to a method of an injected object.
629 @SmallTest
630 @Feature({"Android-WebView", "Android-JavaBridge"})
631 public void testPassUndefined() throws Throwable {
632 executeJavaScript("testObject.setObjectValue(undefined);");
633 assertNull(mTestObject.waitForObjectValue());
634
635 executeJavaScript("testObject.setCustomTypeValue(undefined);");
636 assertNull(mTestObject.waitForCustomTypeValue());
637
638 // LIVECONNECT_COMPLIANCE: Should be NULL.
639 executeJavaScript("testObject.setStringValue(undefined);");
640 assertEquals("undefined", mTestObject.waitForStringValue());
641
642 executeJavaScript("testObject.setByteValue(undefined);");
643 assertEquals(0, mTestObject.waitForByteValue());
644
645 executeJavaScript("testObject.setCharValue(undefined);");
646 assertEquals('\u0000', mTestObject.waitForCharValue());
647
648 executeJavaScript("testObject.setShortValue(undefined);");
649 assertEquals(0, mTestObject.waitForShortValue());
650
651 executeJavaScript("testObject.setIntValue(undefined);");
652 assertEquals(0, mTestObject.waitForIntValue());
653
654 executeJavaScript("testObject.setLongValue(undefined);");
655 assertEquals(0L, mTestObject.waitForLongValue());
656
657 executeJavaScript("testObject.setFloatValue(undefined);");
658 assertEquals(0.0f, mTestObject.waitForFloatValue());
659
660 executeJavaScript("testObject.setDoubleValue(undefined);");
661 assertEquals(0.0, mTestObject.waitForDoubleValue());
662
663 executeJavaScript("testObject.setBooleanValue(undefined);");
664 assertFalse(mTestObject.waitForBooleanValue());
665 }
666 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698