JavaBridgeFieldsTest.java revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1// Copyright 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
5package org.chromium.content.browser;
6
7import android.test.suitebuilder.annotation.SmallTest;
8
9import org.chromium.base.test.util.Feature;
10
11/**
12 * Part of the test suite for the Java Bridge. This test tests the
13 * use of fields.
14 */
15public class JavaBridgeFieldsTest extends JavaBridgeTestBase {
16    private class TestObject extends Controller {
17        private String mStringValue;
18
19        // These methods are used to control the test.
20        public synchronized void setStringValue(String x) {
21            mStringValue = x;
22            notifyResultIsReady();
23        }
24        public synchronized String waitForStringValue() {
25            waitForResult();
26            return mStringValue;
27        }
28
29        public boolean booleanField = true;
30        public byte byteField = 42;
31        public char charField = '\u002A';
32        public short shortField = 42;
33        public int intField = 42;
34        public long longField = 42L;
35        public float floatField = 42.0f;
36        public double doubleField = 42.0;
37        public String stringField = "foo";
38        public Object objectField = new Object();
39        public CustomType customTypeField = new CustomType();
40    }
41
42    // A custom type used when testing passing objects.
43    private static class CustomType {
44    }
45
46    TestObject mTestObject;
47
48    @Override
49    protected void setUp() throws Exception {
50        super.setUp();
51        mTestObject = new TestObject();
52        setUpContentView(mTestObject, "testObject");
53    }
54
55    // Note that this requires that we can pass a JavaScript string to Java.
56    protected String executeJavaScriptAndGetStringResult(String script) throws Throwable {
57        executeJavaScript("testObject.setStringValue(" + script + ");");
58        return mTestObject.waitForStringValue();
59    }
60
61    // The Java bridge does not provide access to fields.
62    // FIXME: Consider providing support for this. See See b/4408210.
63    @SmallTest
64    @Feature({"AndroidWebView", "Android-JavaBridge"})
65    public void testFieldTypes() throws Throwable {
66        assertEquals("undefined",
67                executeJavaScriptAndGetStringResult("typeof testObject.booleanField"));
68        assertEquals("undefined",
69                executeJavaScriptAndGetStringResult("typeof testObject.byteField"));
70        assertEquals("undefined",
71                executeJavaScriptAndGetStringResult("typeof testObject.charField"));
72        assertEquals("undefined",
73                executeJavaScriptAndGetStringResult("typeof testObject.shortField"));
74        assertEquals("undefined",
75                executeJavaScriptAndGetStringResult("typeof testObject.intField"));
76        assertEquals("undefined",
77                executeJavaScriptAndGetStringResult("typeof testObject.longField"));
78        assertEquals("undefined",
79                executeJavaScriptAndGetStringResult("typeof testObject.floatField"));
80        assertEquals("undefined",
81                executeJavaScriptAndGetStringResult("typeof testObject.doubleField"));
82        assertEquals("undefined",
83                executeJavaScriptAndGetStringResult("typeof testObject.objectField"));
84        assertEquals("undefined",
85                executeJavaScriptAndGetStringResult("typeof testObject.stringField"));
86        assertEquals("undefined",
87                executeJavaScriptAndGetStringResult("typeof testObject.customTypeField"));
88    }
89}
90