Skip to content

Commit

Permalink
Running the MetaIsATest also with JavaScript enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
JaroslavTulach committed May 23, 2023
1 parent f144268 commit dcc3e87
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.enso.interpreter.test;

import org.enso.interpreter.test.ValuesGenerator.Language;
import org.graalvm.polyglot.Context;

public final class MetaIsAPolyglotTest extends MetaIsATest {
public MetaIsAPolyglotTest() {}

@Override
protected ValuesGenerator createGenerator(Context ctx) {
return ValuesGenerator.create(ctx, Language.values());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;
import java.util.Map;

import org.enso.interpreter.test.ValuesGenerator.Language;
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Source;
import org.graalvm.polyglot.Value;
Expand Down Expand Up @@ -37,99 +38,114 @@ public static void prepareCtx() throws Exception {
var module = ctx.eval(src);
isACheck = module.invokeMember("eval_expression", "check");
assertTrue("it is a function", isACheck.canExecute());
generator = ValuesGenerator.create(ctx);
}

@AfterClass
public static void disposeCtx() {
ctx.close();
}

/** Override to create different values generator.
*
* @param context the context to allocate values in
* @return an instance of values generator
*/
ValuesGenerator createGenerator(Context context) {
return ValuesGenerator.create(context, Language.ENSO, Language.JAVA);
}

private ValuesGenerator generator() {
if (generator == null) {
generator = createGenerator(ctx);
}
return generator;
}

@Test
public void checkNumbersAreNumber() {
var typeNumber = generator.typeNumber();
for (var v : generator.numbers()) {
var typeNumber = generator().typeNumber();
for (var v : generator().numbers()) {
var r = isACheck.execute(v, typeNumber);
assertTrue("Value " + v + " is a number, type: " + v.getMetaObject(), r.asBoolean());
}
}

@Test
public void checkValuesAreAny() throws Exception {
var typeAny = generator.typeAny();
for (var v : generator.allValues()) {
var typeAny = generator().typeAny();
for (var v : generator().allValues()) {
var r = isACheck.execute(v, typeAny);
assertTrue("Value " + v + " is any", r.asBoolean());
}
}

@Test
public void checkNumbersAreNotText() {
for (var v : generator.numbers()) {
var r = isACheck.execute(v, generator.typeText());
for (var v : generator().numbers()) {
var r = isACheck.execute(v, generator().typeText());
assertFalse("Value " + v + " is not a string", r.asBoolean());
}
}

@Test
public void checkTextsAreText() {
for (var v : generator.textual()) {
var r = isACheck.execute(v, generator.typeText());
for (var v : generator().textual()) {
var r = isACheck.execute(v, generator().typeText());
assertTrue("Value " + v + " is a string", r.asBoolean());
}
}

@Test
public void mapsAreMaps() {
for (var v : generator.maps()) {
var r = isACheck.execute(v, generator.typeMap());
for (var v : generator().maps()) {
var r = isACheck.execute(v, generator().typeMap());
assertTrue("Value " + v + " type " + v.getClass().getName() + " is a map", r.asBoolean());
}
}

@Test
public void checkIntegerIsNotInstanceOfInteger() {
var t = generator.typeInteger();
var t = generator().typeInteger();
var r = isACheck.execute(t, t);
assertFalse("Integer is not instance of Integer", r.asBoolean());
}

@Test
public void checkNumberIsNotInstanceOfNumber() {
var t = generator.typeNumber();
var t = generator().typeNumber();
var r = isACheck.execute(t, t);
assertFalse("Number is not instance of Number", r.asBoolean());
}

@Test
public void checkAnyIsInstanceOfAny() {
var t = generator.typeAny();
var t = generator().typeAny();
var r = isACheck.execute(t, t);
assertTrue("Everything is instance of Any even Any", r.asBoolean());
}

@Test
public void checkTextsAreNotNumbers() {
for (var v : generator.textual()) {
var r = isACheck.execute(v, generator.typeNumber());
for (var v : generator().textual()) {
var r = isACheck.execute(v, generator().typeNumber());
assertFalse("Value " + v + " is not a number", r.asBoolean());
}
}

@Test
public void checkArraysAreArrays() {
for (var v : generator.arrayLike()) {
var isVector = isACheck.execute(v, generator.typeVector());
var isArray = isACheck.execute(v, generator.typeArray());
for (var v : generator().arrayLike()) {
var isVector = isACheck.execute(v, generator().typeVector());
var isArray = isACheck.execute(v, generator().typeArray());
assertTrue("Value " + v + " of type " + v.getMetaObject() + " should either be array (" + isArray + ") or vector (" + isVector + ")", isArray.asBoolean() ^ isVector.asBoolean());
}
}

@Test
public void valuesAreNotInstancesOfThemselves() throws Exception {
for (var v : generator.allValues()) {
for (var v : generator().allValues()) {
var r = isACheck.execute(v, v);
if (v.equals(generator.typeNothing())) {
if (v.equals(generator().typeNothing())) {
assertTrue("Nothing is instance of itself", r.asBoolean());
} else {
assertFalse("Value " + v + " shall not be instance of itself", r.isBoolean() && r.asBoolean());
Expand All @@ -140,7 +156,7 @@ public void valuesAreNotInstancesOfThemselves() throws Exception {
@Test
public void constructorVariants() throws Exception {
var found = new HashMap<Value, Value>();
final List<Value> values = generator.constructorsAndValuesAndSumType();
final List<Value> values = generator().constructorsAndValuesAndSumType();
for (var v1 : values) {
for (var v2 : values) {
assertTypeWithCheck(generator, v1, v2, found);
Expand Down Expand Up @@ -171,12 +187,12 @@ private void assertTypeWithCheck(ValuesGenerator g, Value type, Value value, Map
@Test
public void typesAreNotInstancesOfThemselves() throws Exception {
var f = new StringBuilder();
for (var v : generator.allTypes()) {
if (v.equals(generator.typeAny())) {
for (var v : generator().allTypes()) {
if (v.equals(generator().typeAny())) {
continue;
}
var r = isACheck.execute(v, v);
if (v.equals(generator.typeNothing())) {
if (v.equals(generator().typeNothing())) {
assertTrue("Nothing is instance of itself", r.asBoolean());
} else {
if (r.asBoolean()) {
Expand All @@ -190,10 +206,10 @@ public void typesAreNotInstancesOfThemselves() throws Exception {
@Test
public void consistencyWithCase() throws Exception {
var f = new StringBuilder();
for (var t : generator.allTypes()) {
var typeCaseOf = generator.withType(t);
for (var t : generator().allTypes()) {
var typeCaseOf = generator().withType(t);

for (var v : generator.allValues()) {
for (var v : generator().allValues()) {
assertTypeAndValue(typeCaseOf, v, t, f, generator);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,17 @@ public List<Value> maps() {
map.put("C", 3);
collect.add(ctx.asValue(map));
}
if (languages.contains(Language.JAVASCRIPT)) {
var fn = ctx.eval("js", """
(function() {
var map = new Map();
map.set('A', 1);
map.set('B', 2);
return map;
})
""");
collect.add(fn.execute());
}
return collect;
}

Expand Down

0 comments on commit dcc3e87

Please sign in to comment.