StringAccessTest.java revision 1243:df6c3e9c1a0b
1/*
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package jdk.nashorn.api.javaaccess.test;
27
28import static org.testng.AssertJUnit.assertEquals;
29import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
30import javax.script.ScriptEngine;
31import javax.script.ScriptEngineManager;
32import javax.script.ScriptException;
33import org.testng.TestNG;
34import org.testng.annotations.AfterClass;
35import org.testng.annotations.BeforeClass;
36import org.testng.annotations.Test;
37
38/**
39 * @test
40 * @build jdk.nashorn.api.javaaccess.test.SharedObject jdk.nashorn.api.javaaccess.test.Person jdk.nashorn.api.javaaccess.test.StringAccessTest
41 * @run testng/othervm jdk.nashorn.api.javaaccess.test.StringAccessTest
42 */
43@SuppressWarnings("javadoc")
44public class StringAccessTest {
45
46    private static ScriptEngine e = null;
47    private static SharedObject o = null;
48
49    public static void main(final String[] args) {
50        TestNG.main(args);
51    }
52
53    @BeforeClass
54    public static void setUpClass() throws ScriptException {
55        final ScriptEngineManager m = new ScriptEngineManager();
56        e = m.getEngineByName("nashorn");
57        o = new SharedObject();
58        e.put("o", o);
59        e.eval("var SharedObject = Packages.jdk.nashorn.api.javaaccess.test.SharedObject;");
60    }
61
62    @AfterClass
63    public static void tearDownClass() {
64        e = null;
65        o = null;
66    }
67
68    @Test
69    public void accessFieldString() throws ScriptException {
70        e.eval("var p_string = o.publicString;");
71        assertEquals(o.publicString, e.get("p_string"));
72        assertEquals("string", e.eval("typeof p_string;"));
73        e.eval("o.publicString = 'changedString';");
74        assertEquals("changedString", o.publicString);
75    }
76
77    @Test
78    public void accessFieldStringArray() throws ScriptException {
79        e.eval("var p_string_array = o.publicStringArray;");
80        assertEquals(o.publicStringArray[0], e.eval("o.publicStringArray[0]"));
81        assertArrayEquals(o.publicStringArray, (String[])e.get("p_string_array"));
82        e.eval("var t_string_arr = new (Java.type(\"java.lang.String[]\"))(3);" +
83                "t_string_arr[0] = 'abc';" +
84                "t_string_arr[1] = '123';" +
85                "t_string_arr[2] = 'xyzzzz';" +
86                "o.publicStringArray = t_string_arr;");
87        assertArrayEquals(new String[] { "abc", "123", "xyzzzz" }, o.publicStringArray);
88        e.eval("o.publicStringArray[0] = 'nashorn';");
89        assertEquals("nashorn", o.publicStringArray[0]);
90    }
91
92    @Test
93    public void accessStaticFieldString() throws ScriptException {
94        e.eval("var ps_string = SharedObject.publicStaticString;");
95        assertEquals(SharedObject.publicStaticString, e.get("ps_string"));
96        assertEquals("string", e.eval("typeof ps_string;"));
97        e.eval("SharedObject.publicStaticString = 'changedString';");
98        assertEquals("changedString", SharedObject.publicStaticString);
99    }
100
101    @Test
102    public void accessStaticFieldStringArray() throws ScriptException {
103        e.eval("var ps_string_array = SharedObject.publicStaticStringArray;");
104        assertEquals(SharedObject.publicStaticStringArray[0], e.eval("SharedObject.publicStaticStringArray[0]"));
105        assertArrayEquals(SharedObject.publicStaticStringArray, (String[])e.get("ps_string_array"));
106        e.eval("var ts_string_arr = new (Java.type(\"java.lang.String[]\"))(3);" +
107                "ts_string_arr[0] = 'abc';" +
108                "ts_string_arr[1] = '123';" +
109                "ts_string_arr[2] = 'xyzzzz';" +
110                "SharedObject.publicStaticStringArray = ts_string_arr;");
111        assertArrayEquals(new String[] { "abc", "123", "xyzzzz" }, SharedObject.publicStaticStringArray);
112        e.eval("SharedObject.publicStaticStringArray[0] = 'nashorn';");
113        assertEquals("nashorn", SharedObject.publicStaticStringArray[0]);
114    }
115
116    @Test
117    public void accessFinalFieldString() throws ScriptException {
118        e.eval("var pf_string = o.publicFinalString;");
119        assertEquals(o.publicFinalString, e.get("pf_string"));
120        assertEquals("string", e.eval("typeof pf_string;"));
121        e.eval("o.publicFinalString = 'changedString';");
122        assertEquals("PublicFinalString", o.publicFinalString);
123    }
124
125    @Test
126    public void accessFinalFieldStringArray() throws ScriptException {
127        e.eval("var pf_string_array = o.publicFinalStringArray;");
128        assertEquals(o.publicFinalStringArray[0], e.eval("o.publicFinalStringArray[0]"));
129        assertArrayEquals(o.publicFinalStringArray, (String[])e.get("pf_string_array"));
130        e.eval("var tf_string_arr = new (Java.type(\"java.lang.String[]\"))(3);" +
131                "tf_string_arr[0] = 'abc';" +
132                "tf_string_arr[1] = '123';" +
133                "tf_string_arr[2] = 'xyzzzz';" +
134                "o.publicFinalStringArray = tf_string_arr;");
135        assertArrayEquals(new String[] { "FinalArrayString[0]", "FinalArrayString[1]", "FinalArrayString[2]", "FinalArrayString[3]" }, o.publicFinalStringArray);
136        e.eval("o.publicFinalStringArray[0] = 'nashorn';");
137        assertEquals("nashorn", o.publicFinalStringArray[0]);
138    }
139
140    @Test
141    public void accessStaticFinalFieldString() throws ScriptException {
142        e.eval("var psf_string = SharedObject.publicStaticFinalString;");
143        assertEquals(SharedObject.publicStaticFinalString, e.get("psf_string"));
144        assertEquals("string", e.eval("typeof psf_string;"));
145        e.eval("SharedObject.publicStaticFinalString = 'changedString';");
146        assertEquals("PublicStaticFinalString", SharedObject.publicStaticFinalString);
147    }
148
149    @Test
150    public void accessStaticFinalFieldStringArray() throws ScriptException {
151        e.eval("var psf_string_array = SharedObject.publicStaticFinalStringArray;");
152        assertEquals(SharedObject.publicStaticFinalStringArray[0], e.eval("SharedObject.publicStaticFinalStringArray[0]"));
153        assertArrayEquals(SharedObject.publicStaticFinalStringArray, (String[])e.get("psf_string_array"));
154        e.eval("var tsf_string_arr = new (Java.type(\"java.lang.String[]\"))(3);" +
155                "tsf_string_arr[0] = 'abc';" +
156                "tsf_string_arr[1] = '123';" +
157                "tsf_string_arr[2] = 'xyzzzz';" +
158                "SharedObject.publicStaticFinalStringArray = tsf_string_arr;");
159        assertArrayEquals(new String[] { "StaticFinalArrayString[0]",
160                    "StaticFinalArrayString[1]",
161                    "StaticFinalArrayString[2]",
162                    "StaticFinalArrayString[3]" },
163                SharedObject.publicStaticFinalStringArray);
164        e.eval("SharedObject.publicStaticFinalStringArray[0] = 'nashorn';");
165        assertEquals("nashorn", SharedObject.publicStaticFinalStringArray[0]);
166    }
167
168}
169