From 5afbc0a58ec68c8fcddb315dcac957d2b5820690 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Tue, 8 Oct 2024 08:20:34 +0200 Subject: [PATCH] Provided testcase --- .../javascript/tests/ImportClassTest.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/src/test/java/org/mozilla/javascript/tests/ImportClassTest.java diff --git a/tests/src/test/java/org/mozilla/javascript/tests/ImportClassTest.java b/tests/src/test/java/org/mozilla/javascript/tests/ImportClassTest.java new file mode 100644 index 0000000000..5919f94df1 --- /dev/null +++ b/tests/src/test/java/org/mozilla/javascript/tests/ImportClassTest.java @@ -0,0 +1,81 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * + */ +package org.mozilla.javascript.tests; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.ContextFactory; +import org.mozilla.javascript.Script; +import org.mozilla.javascript.drivers.TestUtils; +import org.mozilla.javascript.tools.shell.Global; +import org.mozilla.javascript.tools.shell.ShellContextFactory; + +import java.util.UUID; + +import static org.junit.Assert.assertTrue; + +/** + * @author donnamalayeri + */ +public class ImportClassTest { + + protected final Global global = new Global(); + + public ImportClassTest() { + global.init(contextFactory); + } + + @Before + public void setUp() { + TestUtils.setGlobalContextFactory(contextFactory); + } + + @After + public void tearDown() { + TestUtils.setGlobalContextFactory(null); + } + + private ContextFactory contextFactory = + new ShellContextFactory() { + @Override + protected boolean hasFeature(Context cx, int featureIndex) { + if (featureIndex == Context.FEATURE_ENHANCED_JAVA_ACCESS) return true; + return super.hasFeature(cx, featureIndex); + } + }; + + + @Test + public void importPackageAndClass() { + Object result = runScript("importPackage(java.util);\n" + + "UUID.randomUUID();\n" // calls getPkgProperty("UUID", global, false) + + "importClass(java.util.UUID);\n" + + "UUID.randomUUID();\n"); // calls getPkgProperty("UUID", NativeJavaPackage, true) + assertTrue(Context.jsToJava(result, UUID.class) instanceof UUID); + } + + @Test + public void importInSameContext() { + Object result = runScript("importClass(java.util.UUID);UUID.randomUUID();"); + assertTrue(Context.jsToJava(result, UUID.class) instanceof UUID); + result = runScript("importClass(java.util.UUID);UUID.randomUUID();"); + assertTrue(Context.jsToJava(result, UUID.class) instanceof UUID); + } + + private Object runScript(final String scriptSourceText) { + + return contextFactory.call( + context -> { + Script script = context.compileString(scriptSourceText, "", 1, null); + Object exec = script.exec(context, global); + return exec; + }); + } +}