test/src/jdk/nashorn/internal/runtime/ContextTest.java

Print this page




  47         final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader());
  48         final ScriptObject oldGlobal = Context.getGlobal();
  49         Context.setGlobal(cx.createGlobal());
  50         try {
  51             String code = "22 + 10";
  52             assertTrue(32.0 == ((Number)(eval(cx, "<evalTest>", code))).doubleValue());
  53 
  54             code = "obj = { js: 'nashorn' }; obj.js";
  55             assertEquals(eval(cx, "<evalTest2>", code), "nashorn");
  56         } finally {
  57             Context.setGlobal(oldGlobal);
  58         }
  59     }
  60 
  61     // basic check for JS reflection access - java.util.Map-like access on ScriptObject
  62     @Test
  63     public void reflectionTest() {
  64         final Options options = new Options("");
  65         final ErrorManager errors = new ErrorManager();
  66         final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader());

  67         final ScriptObject oldGlobal = Context.getGlobal();
  68         Context.setGlobal(cx.createGlobal());
  69 
  70         try {
  71             final String code = "var obj = { x: 344, y: 42 }";
  72             eval(cx, "<reflectionTest>", code);
  73 
  74             final Object obj = cx.getGlobal().get("obj");
  75 
  76             assertTrue(obj instanceof ScriptObject);
  77 
  78             final ScriptObject sobj = (ScriptObject)obj;
  79             int count = 0;
  80             for (final Map.Entry<?, ?> ex : sobj.entrySet()) {
  81                 final Object key = ex.getKey();
  82                 if (key.equals("x")) {
  83                     assertTrue(ex.getValue() instanceof Number);
  84                     assertTrue(344.0 == ((Number)ex.getValue()).doubleValue());
  85 
  86                     count++;
  87                 } else if (key.equals("y")) {
  88                     assertTrue(ex.getValue() instanceof Number);
  89                     assertTrue(42.0 == ((Number)ex.getValue()).doubleValue());
  90 
  91                     count++;
  92                 }
  93             }
  94             assertEquals(count, 2);
  95             assertEquals(sobj.size(), 2);
  96 
  97             // add property
  98             sobj.put("zee", "hello");
  99             assertEquals(sobj.get("zee"), "hello");
 100             assertEquals(sobj.size(), 3);
 101 
 102         } finally {
 103             Context.setGlobal(oldGlobal);
 104         }
 105     }
 106 
 107     private Object eval(final Context cx, final String name, final String code) {
 108         final Source source = new Source(name, code);
 109         final ScriptObject global = Context.getGlobal();
 110         final ScriptFunction func = cx.compileScript(source, global);
 111         return func != null ? ScriptRuntime.apply(func, global) : null;
 112     }
 113 }


  47         final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader());
  48         final ScriptObject oldGlobal = Context.getGlobal();
  49         Context.setGlobal(cx.createGlobal());
  50         try {
  51             String code = "22 + 10";
  52             assertTrue(32.0 == ((Number)(eval(cx, "<evalTest>", code))).doubleValue());
  53 
  54             code = "obj = { js: 'nashorn' }; obj.js";
  55             assertEquals(eval(cx, "<evalTest2>", code), "nashorn");
  56         } finally {
  57             Context.setGlobal(oldGlobal);
  58         }
  59     }
  60 
  61     // basic check for JS reflection access - java.util.Map-like access on ScriptObject
  62     @Test
  63     public void reflectionTest() {
  64         final Options options = new Options("");
  65         final ErrorManager errors = new ErrorManager();
  66         final Context cx = new Context(options, errors, Thread.currentThread().getContextClassLoader());
  67         final boolean strict = cx.getEnv()._strict;
  68         final ScriptObject oldGlobal = Context.getGlobal();
  69         Context.setGlobal(cx.createGlobal());
  70 
  71         try {
  72             final String code = "var obj = { x: 344, y: 42 }";
  73             eval(cx, "<reflectionTest>", code);
  74 
  75             final Object obj = cx.getGlobal().get("obj");
  76 
  77             assertTrue(obj instanceof ScriptObject);
  78 
  79             final ScriptObject sobj = (ScriptObject)obj;
  80             int count = 0;
  81             for (final Map.Entry<?, ?> ex : sobj.entrySet()) {
  82                 final Object key = ex.getKey();
  83                 if (key.equals("x")) {
  84                     assertTrue(ex.getValue() instanceof Number);
  85                     assertTrue(344.0 == ((Number)ex.getValue()).doubleValue());
  86 
  87                     count++;
  88                 } else if (key.equals("y")) {
  89                     assertTrue(ex.getValue() instanceof Number);
  90                     assertTrue(42.0 == ((Number)ex.getValue()).doubleValue());
  91 
  92                     count++;
  93                 }
  94             }
  95             assertEquals(count, 2);
  96             assertEquals(sobj.size(), 2);
  97 
  98             // add property
  99             sobj.put("zee", "hello", strict);
 100             assertEquals(sobj.get("zee"), "hello");
 101             assertEquals(sobj.size(), 3);
 102 
 103         } finally {
 104             Context.setGlobal(oldGlobal);
 105         }
 106     }
 107 
 108     private Object eval(final Context cx, final String name, final String code) {
 109         final Source source = new Source(name, code);
 110         final ScriptObject global = Context.getGlobal();
 111         final ScriptFunction func = cx.compileScript(source, global);
 112         return func != null ? ScriptRuntime.apply(func, global) : null;
 113     }
 114 }