Refactored test code a bit.

This commit is contained in:
Pavel Talanov
2011-11-16 17:44:46 +04:00
parent cc52c0f1c1
commit eec6fd137f
2 changed files with 51 additions and 25 deletions
@@ -3,7 +3,6 @@ package org.jetbrains.k2js.test;
import org.junit.Test; import org.junit.Test;
import org.mozilla.javascript.Context; import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function; import org.mozilla.javascript.Function;
import org.mozilla.javascript.NativeObject;
import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.Scriptable;
import java.util.Arrays; import java.util.Arrays;
@@ -11,8 +10,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.junit.Assert.assertTrue;
/** /**
* @author Talanov Pavel * @author Talanov Pavel
*/ */
@@ -30,39 +27,27 @@ public class KotlinLibTest extends TranslationTest {
return MAIN; return MAIN;
} }
protected void verifyObjectHasExpectedPropertiesOfExpectedTypes private void runPropertyTypeCheck(String objectName, Map<String, Class<? extends Scriptable>> propertyToType)
(NativeObject object, Map<String, Class<? extends Scriptable>> nameToClassMap) { throws Exception {
for (Map.Entry<String, Class<? extends Scriptable>> entry : nameToClassMap.entrySet()) { runRhinoTest(Arrays.asList(kotlinLibraryPath()), new RhinoPropertyTypesChecker(objectName, propertyToType));
String name = entry.getKey();
Class expectedClass = entry.getValue();
assertTrue(object + " must contain key " + name, object.containsKey(name));
assertTrue(object + "'s property " + name + " must be of type " + expectedClass,
expectedClass.isInstance(object.get(name)));
}
} }
@Test @Test
public void kotlinJsLibRunsWithRhino() throws Exception { public void kotlinJsLibRunsWithRhino() throws Exception {
Context context = Context.enter(); Context context = Context.enter();
Scriptable scope = context.initStandardObjects(); Scriptable scope = context.initStandardObjects();
// ss
runFileWithRhino(kotlinLibraryPath(), context, scope); runFileWithRhino(kotlinLibraryPath(), context, scope);
Context.exit(); Context.exit();
} }
@Test @Test
public void classObjectHasCreateMethod() throws Exception { public void classObjectHasCreateMethod() throws Exception {
final Map<String, Class<? extends Scriptable>> nameToClassMap = String objectName = "Class";
new HashMap<String, Class<? extends Scriptable>>(); final Map<String, Class<? extends Scriptable>> propertyToType
nameToClassMap.put("create", Function.class); = new HashMap<String, Class<? extends Scriptable>>();
propertyToType.put("create", Function.class);
runRhinoTest(Arrays.asList(kotlinLibraryPath()), runPropertyTypeCheck(objectName, propertyToType);
new RhinoResultChecker() {
@Override
public void runChecks(Context context, Scriptable scope) throws Exception {
NativeObject object = RhinoUtils.extractObject("Class", scope);
verifyObjectHasExpectedPropertiesOfExpectedTypes(object, nameToClassMap);
}
});
} }
} }
@@ -0,0 +1,41 @@
package org.jetbrains.k2js.test;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.NativeObject;
import org.mozilla.javascript.Scriptable;
import java.util.Map;
import static org.junit.Assert.assertTrue;
/**
* @author Talanov Pavel
*/
public class RhinoPropertyTypesChecker implements RhinoResultChecker {
final private String objectName;
final private Map<String, Class<? extends Scriptable>> propertyToType;
public RhinoPropertyTypesChecker(String objectName, Map<String, Class<? extends Scriptable>> propertyToType) {
this.objectName = objectName;
this.propertyToType = propertyToType;
}
@Override
public void runChecks(Context context, Scriptable scope) throws Exception {
NativeObject object = RhinoUtils.extractObject(objectName, scope);
verifyObjectHasExpectedPropertiesOfExpectedTypes(object, propertyToType);
}
private void verifyObjectHasExpectedPropertiesOfExpectedTypes
(NativeObject object, Map<String, Class<? extends Scriptable>> nameToClassMap) {
for (Map.Entry<String, Class<? extends Scriptable>> entry : nameToClassMap.entrySet()) {
String name = entry.getKey();
Class expectedClass = entry.getValue();
assertTrue(object + " must contain key " + name, object.containsKey(name));
assertTrue(object + "'s property " + name + " must be of type " + expectedClass,
expectedClass.isInstance(object.get(name)));
}
}
}