зеркало из https://github.com/mozilla/pjs.git
Regression test (updated to fix warnings).
This commit is contained in:
Родитель
26dfcfe333
Коммит
5ca93162ba
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* @(#)Bug421071Test.java
|
||||
*
|
||||
* Copyright (c) 2008 Sabre, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
package org.mozilla.javascript.tests;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.ContextFactory;
|
||||
import org.mozilla.javascript.ImporterTopLevel;
|
||||
import org.mozilla.javascript.Script;
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
|
||||
public class Bug421071Test extends TestCase {
|
||||
private ContextFactory factory;
|
||||
private TopLevelScope globalScope;
|
||||
private Script script;
|
||||
|
||||
public void testProblemReplicator() throws Exception {
|
||||
// before debugging please put the breakpoint in the
|
||||
// NativeJavaPackage.getPkgProperty()
|
||||
// and observe names passed in there
|
||||
script = compileScript();
|
||||
runTestScript(); // this one does not get to the
|
||||
// NativeJavaPackage.getPkgProperty() on my
|
||||
// variables
|
||||
runTestScript(); // however this one does
|
||||
}
|
||||
|
||||
private Script compileScript() {
|
||||
String scriptSource = "importPackage(java.util);\n"
|
||||
+ "var searchmon = 3;\n"
|
||||
+ "var searchday = 10;\n"
|
||||
+ "var searchyear = 2008;\n"
|
||||
+ "var searchwkday = 0;\n"
|
||||
+ "\n"
|
||||
+ "var myDate = Calendar.getInstance();\n // this is a java.util.Calendar"
|
||||
+ "myDate.set(Calendar.MONTH, searchmon);\n"
|
||||
+ "myDate.set(Calendar.DATE, searchday);\n"
|
||||
+ "myDate.set(Calendar.YEAR, searchyear);\n"
|
||||
+ "searchwkday.value = myDate.get(Calendar.DAY_OF_WEEK);";
|
||||
Script script;
|
||||
Context context = factory.enterContext();
|
||||
try {
|
||||
script = context.compileString(scriptSource, "testScript", 1, null);
|
||||
return script;
|
||||
} finally {
|
||||
Context.exit();
|
||||
}
|
||||
}
|
||||
|
||||
private void runTestScript() throws InterruptedException {
|
||||
// will start new thread to get as close as possible to original
|
||||
// environment, however the same behavior is exposed using new
|
||||
// ScriptRunner(script).run();
|
||||
Thread thread = new Thread(new ScriptRunner(script));
|
||||
thread.start();
|
||||
thread.join();
|
||||
}
|
||||
|
||||
static class DynamicScopeContextFactory extends ContextFactory {
|
||||
@Override
|
||||
public boolean hasFeature(Context cx, int featureIndex) {
|
||||
if (featureIndex == Context.FEATURE_DYNAMIC_SCOPE)
|
||||
return true;
|
||||
return super.hasFeature(cx, featureIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private TopLevelScope createGlobalScope() {
|
||||
factory = new DynamicScopeContextFactory();
|
||||
ContextFactory.initGlobal(factory);
|
||||
Context context = factory.enterContext();
|
||||
// noinspection deprecation
|
||||
TopLevelScope globalScope = new TopLevelScope(context);
|
||||
Context.exit();
|
||||
return globalScope;
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
globalScope = createGlobalScope();
|
||||
}
|
||||
|
||||
private class TopLevelScope extends ImporterTopLevel {
|
||||
private static final long serialVersionUID = 7831526694313927899L;
|
||||
|
||||
public TopLevelScope(Context context) {
|
||||
super(context);
|
||||
}
|
||||
}
|
||||
|
||||
private class ScriptRunner implements Runnable {
|
||||
private Script script;
|
||||
|
||||
public ScriptRunner(Script script) {
|
||||
this.script = script;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
Context context = factory.enterContext();
|
||||
try {
|
||||
// Run each script in its own scope, to keep global variables
|
||||
// defined in each script separate
|
||||
Scriptable threadScope = context.newObject(globalScope);
|
||||
threadScope.setPrototype(globalScope);
|
||||
threadScope.setParentScope(null);
|
||||
script.exec(context, threadScope);
|
||||
} catch (Exception ee) {
|
||||
ee.printStackTrace();
|
||||
} finally {
|
||||
Context.exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче