planetiler/planetiler-custommap/src/test/java/com/onthegomap/planetiler/custommap/expression/ExpressionTests.java

69 wiersze
2.2 KiB
Java

package com.onthegomap.planetiler.custommap.expression;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class ExpressionTests {
@ParameterizedTest
@CsvSource(value = {
"1|1|long",
"1+1|2|long",
"'1' + string(1)|11|string",
"coalesce(null, null)||null",
"coalesce(null, 1)|1|long",
"coalesce(1, null)|1|long",
"coalesce(1, 2)|1|long",
"coalesce(null, null, 1)|1|long",
"coalesce(null, 1, 2)|1|long",
"coalesce(1, 2, null)+2|3|long",
"nullif('abc', '')|'abc'|string",
"nullif('', '')|null|null",
"nullif(1, 1)|null|null",
"nullif(1, 12)|1|long",
"'123'.replace('12', 'X')|X3|string",
"'123'.replaceRegex('1(.)', '$1')|23|string",
"string(123)|123|string",
"string({1:2,3:'4'}[1])|2|string",
"'abc'.matches('a.c')|true|boolean",
"'abc'.matches('a.d')|false|boolean",
"{'a': 1}.has('a')|true|boolean",
"{'a': 1}.has('a', 1)|true|boolean",
"{'a': 1}.has('a', 1, 2)|true|boolean",
"{'a': 2}.has('a', 1, 2)|true|boolean",
"{'a': 2}.has('a', 3)|false|boolean",
"{'a': 1}.has('b')|false|boolean",
"coalesce({'a': 1}.get('a'), 2)|1|long",
"coalesce({'a': 1}.get('b'), 2)|2|long",
"{'a': 1}.getOrDefault('a', 2)|1|long",
"{'a': 1}.getOrDefault('b', 2)|2|long",
"max([1, 2, 3])|3|long",
"max([1.1, 2.2, 3.3])|3.3|double",
"min([1, 2, 3])|1|long",
"min([1.1, 2.2, 3.3])|1.1|double",
"max([1])|1|long",
"min([1])|1|long",
}, delimiter = '|')
void testExpression(String in, String expected, String type) {
var expression = ConfigExpressionScript.parse(in, ScriptEnvironment.root());
var result = expression.apply(ScriptContext.empty());
switch (type) {
case "long" -> assertEquals(Long.valueOf(expected), result);
case "double" -> assertEquals(Double.valueOf(expected), result);
case "string" -> assertEquals(expected, result);
case "boolean" -> assertEquals(Boolean.valueOf(expected), result);
case "null" -> assertNull(result);
default -> throw new IllegalArgumentException(type);
}
}
}