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 
  26 package jdk.nashorn.api.javaaccess.test;
  27 
  28 import static org.testng.AssertJUnit.assertEquals;
  29 import static org.testng.AssertJUnit.assertTrue;
  30 import java.util.Arrays;
  31 import javax.script.ScriptEngine;
  32 import javax.script.ScriptEngineManager;
  33 import javax.script.ScriptException;
  34 import org.testng.TestNG;
  35 import org.testng.annotations.AfterClass;
  36 import org.testng.annotations.BeforeClass;
  37 import org.testng.annotations.Test;
  38 
  39 /**
  40  * @test
  41  * @build jdk.nashorn.api.javaaccess.test.SharedObject jdk.nashorn.api.javaaccess.test.Person jdk.nashorn.api.javaaccess.test.BooleanAccessTest
  42  * @run testng/othervm jdk.nashorn.api.javaaccess.test.BooleanAccessTest
  43  */
  44 @SuppressWarnings("javadoc")
  45 public class BooleanAccessTest {
  46 
  47     private static ScriptEngine e = null;
  48     private static SharedObject o = null;
  49 
  50     public static void main(final String[] args) {
  51         TestNG.main(args);
  52     }
  53 
  54     @BeforeClass
  55     public static void setUpClass() throws ScriptException {
  56         final ScriptEngineManager m = new ScriptEngineManager();
  57         e = m.getEngineByName("nashorn");
  58         o = new SharedObject();
  59         e.put("o", o);
  60         e.eval("var SharedObject = Packages.jdk.nashorn.api.javaaccess.test.SharedObject;");
  61     }
  62 
  63     @AfterClass
  64     public static void tearDownClass() {
  65         e = null;
  66         o = null;
  67     }
  68 
  69     @Test
  70     public void accessFieldBoolean() throws ScriptException {
  71         e.eval("var p_boolean = o.publicBoolean;");
  72         assertEquals(o.publicBoolean, e.get("p_boolean"));
  73         assertEquals("boolean", e.eval("typeof p_boolean;"));
  74         e.eval("o.publicBoolean = false;");
  75         assertEquals(false, o.publicBoolean);
  76     }
  77 
  78     @Test
  79     public void accessFieldBooleanArray() throws ScriptException {
  80         e.eval("var p_boolean_array = o.publicBooleanArray;");
  81         assertEquals(o.publicBooleanArray[0], e.eval("o.publicBooleanArray[0]"));
  82         assertTrue(Arrays.equals(o.publicBooleanArray, (boolean[])e.get("p_boolean_array")));
  83         e.eval("var t_boolean_arr = new (Java.type(\"boolean[]\"))(3);" +
  84                 "t_boolean_arr[0] = true;" +
  85                 "t_boolean_arr[1] = false;" +
  86                 "t_boolean_arr[2] = false;" +
  87                 "o.publicBooleanArray = t_boolean_arr;");
  88         assertTrue(Arrays.equals(new boolean[] { true, false, false }, o.publicBooleanArray));
  89         e.eval("o.publicBooleanArray[0] = false;");
  90         assertEquals(false, o.publicBooleanArray[0]);
  91     }
  92 
  93     @Test
  94     public void accessStaticFieldBoolean() throws ScriptException {
  95         e.eval("var ps_boolean = SharedObject.publicStaticBoolean;");
  96         assertEquals(SharedObject.publicStaticBoolean, e.get("ps_boolean"));
  97         assertEquals("boolean", e.eval("typeof ps_boolean;"));
  98         e.eval("SharedObject.publicStaticBoolean = false;");
  99         assertEquals(false, SharedObject.publicStaticBoolean);
 100     }
 101 
 102     @Test
 103     public void accessStaticFieldBooleanArray() throws ScriptException {
 104         e.eval("var ps_boolean_array = SharedObject.publicStaticBooleanArray;");
 105         assertEquals(SharedObject.publicStaticBooleanArray[0], e.eval("SharedObject.publicStaticBooleanArray[0]"));
 106         assertTrue(Arrays.equals(SharedObject.publicStaticBooleanArray, (boolean[])e.get("ps_boolean_array")));
 107         e.eval("var ts_boolean_arr = new (Java.type(\"boolean[]\"))(3);" +
 108                 "ts_boolean_arr[0] = true;" +
 109                 "ts_boolean_arr[1] = false;" +
 110                 "ts_boolean_arr[2] = true;" +
 111                 "SharedObject.publicStaticBooleanArray = ts_boolean_arr;");
 112         assertTrue(Arrays.equals(new boolean[] { true, false, true }, SharedObject.publicStaticBooleanArray));
 113         e.eval("SharedObject.publicStaticBooleanArray[0] = false;");
 114         assertEquals(false, SharedObject.publicStaticBooleanArray[0]);
 115     }
 116 
 117     @Test
 118     public void accessFinalFieldBoolean() throws ScriptException {
 119         e.eval("var pf_boolean = o.publicFinalBoolean;");
 120         assertEquals(o.publicFinalBoolean, e.get("pf_boolean"));
 121         assertEquals("boolean", e.eval("typeof pf_boolean;"));
 122         e.eval("o.publicFinalBoolean = false;");
 123         assertEquals(true, o.publicFinalBoolean);
 124     }
 125 
 126     @Test
 127     public void accessFinalFieldBooleanArray() throws ScriptException {
 128         e.eval("var pf_boolean_array = o.publicFinalBooleanArray;");
 129         assertEquals(o.publicFinalBooleanArray[0], e.eval("o.publicFinalBooleanArray[0]"));
 130         assertTrue(Arrays.equals(o.publicFinalBooleanArray, (boolean[])e.get("pf_boolean_array")));
 131         e.eval("var tf_boolean_arr = new (Java.type(\"boolean[]\"))(3);" +
 132                 "tf_boolean_arr[0] = false;" +
 133                 "tf_boolean_arr[1] = false;" +
 134                 "tf_boolean_arr[2] = true;" +
 135                 "o.publicOFinalbjectArray = tf_boolean_arr;");
 136         assertTrue(Arrays.equals(new boolean[] { false, false, true, false }, o.publicFinalBooleanArray));
 137         e.eval("o.publicFinalBooleanArray[0] = true;");
 138         assertEquals(true, o.publicFinalBooleanArray[0]);
 139     }
 140 
 141     @Test
 142     public void accessStaticFinalFieldBoolean() throws ScriptException {
 143         e.eval("var psf_boolean = SharedObject.publicStaticFinalBoolean;");
 144         assertEquals(SharedObject.publicStaticFinalBoolean, e.get("psf_boolean"));
 145         assertEquals("boolean", e.eval("typeof psf_boolean;"));
 146         e.eval("SharedObject.publicStaticFinalBoolean = false;");
 147         assertEquals(true, SharedObject.publicStaticFinalBoolean);
 148     }
 149 
 150     @Test
 151     public void accessStaticFinalFieldBooleanArray() throws ScriptException {
 152         e.eval("var psf_boolean_array = SharedObject.publicStaticFinalBooleanArray;");
 153         assertEquals(SharedObject.publicStaticFinalBooleanArray[0], e.eval("SharedObject.publicStaticFinalBooleanArray[0]"));
 154         assertTrue(Arrays.equals(SharedObject.publicStaticFinalBooleanArray, (boolean[])e.get("psf_boolean_array")));
 155         e.eval("var tsf_boolean_arr = new (Java.type(\"boolean[]\"))(3);" +
 156                 "tsf_boolean_arr[0] = false;" +
 157                 "tsf_boolean_arr[1] = true;" +
 158                 "tsf_boolean_arr[2] = false;" +
 159                 "SharedObject.publicStaticFinalBooleanArray = tsf_boolean_arr;");
 160         assertTrue(Arrays.equals(new boolean[] { false, true, false, false }, SharedObject.publicStaticFinalBooleanArray));
 161         e.eval("SharedObject.publicStaticFinalBooleanArray[0] = true;");
 162         assertEquals(true, SharedObject.publicStaticFinalBooleanArray[0]);
 163     }
 164 
 165     @Test
 166     public void accessFieldBooleanBoxing() throws ScriptException {
 167         e.eval("var p_boolean_box = o.publicBooleanBox;");
 168         assertEquals(o.publicBooleanBox, e.get("p_boolean_box"));
 169         assertEquals("boolean", e.eval("typeof p_boolean_box;"));
 170         e.eval("o.publicBooleanBox = false;");
 171         assertEquals(false, (boolean)o.publicBooleanBox);
 172     }
 173 
 174     @Test
 175     public void accessStaticFieldBooleanBoxing() throws ScriptException {
 176         e.eval("var ps_boolean_box = SharedObject.publicStaticBooleanBox;");
 177         assertEquals(SharedObject.publicStaticBooleanBox, e.get("ps_boolean_box"));
 178         assertEquals("boolean", e.eval("typeof ps_boolean_box;"));
 179         e.eval("SharedObject.publicStaticBooleanBox = false;");
 180         assertEquals(false, (boolean)SharedObject.publicStaticBooleanBox);
 181     }
 182 
 183     @Test
 184     public void accessFinalFieldBooleanBoxing() throws ScriptException {
 185         e.eval("var pf_boolean_box = o.publicFinalBooleanBox;");
 186         assertEquals(o.publicFinalBooleanBox, e.get("pf_boolean_box"));
 187         assertEquals("boolean", e.eval("typeof pf_boolean_box;"));
 188         e.eval("o.publicFinalBooleanBox = false;");
 189         assertEquals(true, (boolean)o.publicFinalBooleanBox);
 190     }
 191 
 192     @Test
 193     public void accessStaticFinalFieldBooleanBoxing() throws ScriptException {
 194         e.eval("var psf_boolean_box = SharedObject.publicStaticFinalBooleanBox;");
 195         assertEquals(SharedObject.publicStaticFinalBooleanBox, e.get("psf_boolean_box"));
 196         assertEquals("boolean", e.eval("typeof psf_boolean_box;"));
 197         e.eval("SharedObject.publicStaticFinalBooleanBox = false;");
 198         assertEquals(true, (boolean)SharedObject.publicStaticFinalBooleanBox);
 199     }
 200 
 201     @Test
 202     public void accessVolatileField() throws ScriptException {
 203         e.eval("var pv_boolean = o.volatileBoolean;");
 204         assertEquals(o.volatileBoolean, e.get("pv_boolean"));
 205         assertEquals("boolean", e.eval("typeof pv_boolean;"));
 206         e.eval("o.volatileBoolean = false;");
 207         assertEquals(false, o.volatileBoolean);
 208     }
 209 
 210     @Test
 211     public void accessTransientField() throws ScriptException {
 212         e.eval("var pt_boolean = o.transientBoolean;");
 213         assertEquals(o.transientBoolean, e.get("pt_boolean"));
 214         assertEquals("boolean", e.eval("typeof pt_boolean;"));
 215         e.eval("o.transientBoolean = false;");
 216         assertEquals(false, o.transientBoolean);
 217     }
 218 
 219 }