Skip to content

Commit

Permalink
Copied test cases from mozilla#561
Browse files Browse the repository at this point in the history
  • Loading branch information
rPraml committed Nov 9, 2021
1 parent 4c02bc2 commit 69a1e88
Show file tree
Hide file tree
Showing 2 changed files with 183 additions and 0 deletions.
89 changes: 89 additions & 0 deletions testsrc/org/mozilla/javascript/tests/AccessingJavaList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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 java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.tools.shell.Global;

public class AccessingJavaList extends TestCase {
protected final Global global = new Global();

public AccessingJavaList() {
global.init(ContextFactory.getGlobal());
}

public void testAccessingJavaListIntegerValues() {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

assertEquals(2, runScriptAsInt("value[1]", list));
assertEquals(3, runScriptAsInt("value[2]", list));
}

public void testUpdateingJavaListIntegerValues() {
List<Number> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

assertEquals(2, runScriptAsInt("value[1]", list));
assertEquals(5, runScriptAsInt("value[1]=5;value[1]", list));
assertEquals(5, list.get(1).intValue());
}

public void testAccessingJavaListStringValues() {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

assertEquals("b", runScriptAsString("value[1]", list));
assertEquals("c", runScriptAsString("value[2]", list));
}

public void testUpdatetingJavaListStringValues() {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

assertEquals("b", runScriptAsString("value[1]", list));
assertEquals("f", runScriptAsString("value[1]=\"f\";value[1]", list));
assertEquals("f", list.get(1));
}

private int runScriptAsInt(final String scriptSourceText, final Object value) {
return ContextFactory.getGlobal()
.call(
context -> {
Scriptable scope = context.initStandardObjects(global);
scope.put("value", scope, Context.javaToJS(value, scope));
return (int)
Context.toNumber(
context.evaluateString(
scope, scriptSourceText, "", 1, null));
});
}

private String runScriptAsString(final String scriptSourceText, final Object value) {
return ContextFactory.getGlobal()
.call(
context -> {
Scriptable scope = context.initStandardObjects(global);
scope.put("value", scope, Context.javaToJS(value, scope));
return Context.toString(
context.evaluateString(scope, scriptSourceText, "", 1, null));
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package org.mozilla.javascript.tests;

import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Scriptable;

public class FindingJavaStringsFromJSArray extends TestCase {
public void testFindingJSStringFromJavaList() {
List<String> list = new ArrayList<>();
list.add("foo");
list.add("bar");
list.add("baz");

assertEquals(-1, runScriptAsInt("value.indexOf(\"foobar\")", list));
assertEquals(1, runScriptAsInt("value.indexOf(\"bar\")", list));
assertEquals(0, runScriptAsInt("value.includes(\"foobar\")", list));
assertEquals(1, runScriptAsInt("value.includes(\"bar\")", list));
}

public void testFindingJSStringFromJavaArray() {
String[] array = new String[3];
array[0] = "foo";
array[1] = "bar";
array[2] = "baz";

assertEquals(-1, runScriptAsInt("value.indexOf(\"foobar\")", array));
assertEquals(1, runScriptAsInt("value.indexOf(\"bar\")", array));
assertEquals(0, runScriptAsInt("value.includes(\"foobar\")", array));
assertEquals(1, runScriptAsInt("value.includes(\"bar\")", array));
}

public void testFindingJavaStringFromJavaList() {
List<String> list = new ArrayList<>();
list.add("foo");
list.add("bar");
list.add("baz");

assertEquals(-1, runScriptAsInt("value.indexOf(value2)", list, "foobar"));
assertEquals(1, runScriptAsInt("value.indexOf(value2)", list, "bar"));
assertEquals(0, runScriptAsInt("value.includes(value2)", list, "foobar"));
assertEquals(1, runScriptAsInt("value.includes(value2)", list, "bar"));
}

public void testFindingJavaStringFromJavaArray() {
String[] array = new String[3];
array[0] = "foo";
array[1] = "bar";
array[2] = "baz";

assertEquals(-1, runScriptAsInt("value.indexOf(value2)", array, "foobar"));
assertEquals(1, runScriptAsInt("value.indexOf(value2)", array, "bar"));
}

public void testFindingJavaStringFromJSArray() {
assertEquals(-1, runScriptAsInt("[\"foo\", \"bar\", \"baz\"].indexOf(value)", "foobar"));
assertEquals(1, runScriptAsInt("[\"foo\", \"bar\", \"baz\"].indexOf(value)", "bar"));
}

public void testFindingJSStringFromJSArray() {
assertEquals(-1, runScriptAsInt("[\"foo\", \"bar\", \"baz\"].indexOf(\"foobar\")", null));
assertEquals(1, runScriptAsInt("[\"foo\", \"bar\", \"baz\"].indexOf(\"bar\")", null));
}

private int runScriptAsInt(final String scriptSourceText, final Object value) {
return ContextFactory.getGlobal()
.call(
context -> {
Scriptable scope = context.initStandardObjects();
scope.put("value", scope, Context.javaToJS(value, scope));
return (int)
Context.toNumber(
context.evaluateString(
scope, scriptSourceText, "", 1, null));
});
}

private int runScriptAsInt(
final String scriptSourceText, final Object value, final Object value2) {
return ContextFactory.getGlobal()
.call(
context -> {
Scriptable scope = context.initStandardObjects();
scope.put("value", scope, Context.javaToJS(value, scope));
scope.put("value2", scope, Context.javaToJS(value2, scope));
return (int)
Context.toNumber(
context.evaluateString(
scope, scriptSourceText, "", 1, null));
});
}
}

0 comments on commit 69a1e88

Please sign in to comment.