Last active
December 6, 2016 13:36
-
-
Save mfulton26/8c18f8cc1055f7137c4caf6ab751e89e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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