Skip to content

Instantly share code, notes, and snippets.

@mfulton26
Last active December 6, 2016 13:36
Show Gist options
  • Save mfulton26/8c18f8cc1055f7137c4caf6ab751e89e to your computer and use it in GitHub Desktop.
Save mfulton26/8c18f8cc1055f7137c4caf6ab751e89e to your computer and use it in GitHub Desktop.
import com.google.common.collect.Iterators;
import jdk.nashorn.api.scripting.ScriptObjectMirror;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import javax.script.*;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class ParallelNashornTest {
private static final String SCRIPT = "var Thread = Java.type(\"java.lang.Thread\");\n" +
"var referenceNumberValid = \"0000\";\n" +
"var referenceNumberInvalid = \"0001\";\n" +
"\n" +
"function validate (parameters) {\n" +
" var isValid = false;\n" +
" var statusCode;\n" +
" var referenceNumber = parameters.referenceNumber;\n" +
" var validateNumber = referenceNumber.substr(0, 7);\n" +
" var sum = 0;\n" +
"\n" +
" for (ctr = 0; ctr < validateNumber.length; ctr++) {\n" +
" sum += parseInt(validateNumber.substr(ctr, 1));\n" +
" }\n" +
"\n" +
" var checkDigit = sum % 10;\n" +
" isValid = parseInt(referenceNumber.substr(7, 1)) == checkDigit;\n" +
" statusCode = isValid ? referenceNumberValid : referenceNumberInvalid;\n" +
"\n" +
" print(\"Thread: \" + Thread.currentThread().getId() + \", isValid: \" + isValid + \", referenceNumber: \" + referenceNumber + \", validateNumber: \" + validateNumber + \", sum: \" + sum + \", checkDigit: \" + checkDigit + \", statusCode\" + statusCode);\n" +
"\n" +
" return statusCode;\n" +
"}";
private ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
private CompiledScript script;
public ParallelNashornTest() throws ScriptException {
Compilable compilable = (Compilable) engine;
script = compilable.compile(SCRIPT);
}
@Test(dataProvider = "validReferenceNumbers", timeOut = 3000)
public final void testValidReferenceNumber(String referenceNumber) throws ScriptException {
Map<String, String> parameters = new HashMap<>();
parameters.put("referenceNumber", referenceNumber);
Bindings bindings = engine.createBindings();
script.eval(bindings);
ScriptObjectMirror scriptObjectMirror = (ScriptObjectMirror) bindings.get("validate");
Object result = scriptObjectMirror.call(null, parameters);
String statusCode = ((String) result).substring(0, 3);
Assert.assertEquals(statusCode, "000");
}
@DataProvider(name = "validReferenceNumbers", parallel = true)
private Iterator<Object[]> validReferenceNumbers() throws FileNotFoundException {
return Iterators.forArray(
new Object[]{"18058888"},
new Object[]{"17098881"},
new Object[]{"18028885"},
new Object[]{"17058887"},
new Object[]{"17028884"},
new Object[]{"07009882"},
new Object[]{"07034880"}
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment