blob: f126cfd71eee7ab3b7cc45b6aa691890d721cef3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.johnzon.jsonlogic;
import org.apache.johnzon.jsonlogic.spi.AsyncOperator;
import org.apache.johnzon.jsonlogic.spi.Operator;
import org.junit.Test;
import javax.json.Json;
import javax.json.JsonBuilderFactory;
import javax.json.JsonObject;
import javax.json.JsonValue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
import static java.util.Collections.emptyMap;
import static org.junit.Assert.assertEquals;
public class JohnzonJsonLogicTest {
private final JohnzonJsonLogic jsonLogic = new JohnzonJsonLogic();
private final JsonBuilderFactory builderFactory = Json.createBuilderFactory(emptyMap());
@Test
public void stage() throws InterruptedException {
// if the async exec is too immediate we will execute the thenAccept callback in main thread
// which is not the goal of this test so let's ensure we are in the expected case
final CountDownLatch waitChainReady = new CountDownLatch(1);
final JohnzonJsonLogic jsonLogic = new JohnzonJsonLogic()
.registerOperator("async", new Operator() {
@Override
public CompletionStage<JsonValue> applyStage(final JohnzonJsonLogic logic,
final JsonValue config,
final JsonValue params) {
return logic.applyStage(
builderFactory.createObjectBuilder().add("async2", "ok").build(),
builderFactory.createObjectBuilder().add("p2", "1").build())
.thenApplyAsync(
previous -> builderFactory.createObjectBuilder()
.add("thread", Thread.currentThread().getName())
.add("config", config)
.add("params", params)
.add("exec2", previous)
.build(),
r -> new Thread(r, "async").start());
}
@Override
public JsonValue apply(final JohnzonJsonLogic logic, final JsonValue config, final JsonValue params) {
throw new UnsupportedOperationException();
}
})
.registerOperator("async2", new AsyncOperator() {
@Override
public CompletionStage<JsonValue> applyStage(final JohnzonJsonLogic logic,
final JsonValue config,
final JsonValue params) {
return CompletableFuture.supplyAsync(() -> {
try {
waitChainReady.await();
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
}
return builderFactory.createObjectBuilder()
.add("thread2", Thread.currentThread().getName())
.add("config2", config)
.add("params2", params)
.build();
}, r -> new Thread(r, "async2").start());
}
@Override
public JsonValue apply(final JohnzonJsonLogic logic, final JsonValue config, final JsonValue params) {
throw new UnsupportedOperationException();
}
});
final CountDownLatch latch = new CountDownLatch(1); // if we use Future.get we break stage threading
final AtomicReference<JsonValue> output = new AtomicReference<>();
jsonLogic
.applyStage(
builderFactory.createObjectBuilder()
.add("async", "a")
.build(),
builderFactory.createObjectBuilder()
.add("p1", "0")
.build())
.thenAccept(result -> {
output.set(builderFactory.createObjectBuilder()
.add("exec1", result)
.add("thenSyncThread", Thread.currentThread().getName())
.build());
latch.countDown();
});
waitChainReady.countDown();
latch.await();
assertEquals("" +
"{" +
"\"exec1\":{\"thread\":\"async\",\"config\":\"a\",\"params\":{\"p1\":\"0\"}," +
"\"exec2\":{\"thread2\":\"async2\",\"config2\":\"ok\",\"params2\":{\"p2\":\"1\"}}}," +
"\"thenSyncThread\":\"async\"" +
"}" +
"",
output.get().toString());
}
@Test
public void varObjectString() {
assertEquals(Json.createValue("b"), jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("var", "a")
.build(),
builderFactory.createObjectBuilder()
.add("a", "b")
.add("c", "d")
.build()));
}
@Test
public void varObjectPtr() {
assertEquals(Json.createValue("ok"), jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("var", "a.b.0")
.build(),
builderFactory.createObjectBuilder()
.add("a", builderFactory.createObjectBuilder()
.add("b", builderFactory.createArrayBuilder()
.add("ok")))
.build()));
}
@Test
public void varObjectStringMissing() {
assertEquals(JsonValue.NULL, jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("var", "a")
.build(),
builderFactory.createObjectBuilder()
.add("c", "d")
.build()));
}
@Test
public void varArrayInt() {
assertEquals(Json.createValue("b"), jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("var", 1)
.build(),
builderFactory.createArrayBuilder()
.add("a")
.add("b")
.build()));
}
@Test
public void varObjectDefault() {
assertEquals(Json.createValue(26), jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("var", builderFactory.createArrayBuilder().add("z").add(26))
.build(),
builderFactory.createObjectBuilder()
.add("a", "b")
.add("c", "d")
.build()));
}
@Test
public void varArrayDefault() {
assertEquals(Json.createValue(26), jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("var", builderFactory.createArrayBuilder().add(10).add(26))
.build(),
builderFactory.createArrayBuilder()
.add("a")
.add("b")
.build()));
}
@Test
public void missing() {
final JsonObject value = builderFactory.createObjectBuilder()
.add("a", 1)
.add("b", 2)
.build();
assertEquals(
JsonValue.EMPTY_JSON_ARRAY,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("missing",
builderFactory.createArrayBuilder()
.add("a")
.add("b"))
.build(),
value));
assertEquals(
builderFactory.createArrayBuilder()
.add("c")
.build(),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("missing", builderFactory.createArrayBuilder()
.add("a")
.add("b")
.add("c"))
.build(),
value));
}
@Test
public void missingSome() {
final JsonObject value = builderFactory.createObjectBuilder()
.add("a", 1)
.add("b", 2)
.build();
assertEquals(
JsonValue.EMPTY_JSON_ARRAY,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("missing_some",
builderFactory.createArrayBuilder()
.add(1)
.add(builderFactory.createArrayBuilder()
.add("a")
.add("c")
.add("d")))
.build(),
value));
assertEquals(
builderFactory.createArrayBuilder()
.add("c")
.add("d")
.build(),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("missing_some", builderFactory.createArrayBuilder()
.add(2)
.add(builderFactory.createArrayBuilder()
.add("a")
.add("c")
.add("d")))
.build(),
value));
}
@Test
public void ifStatic() {
assertEquals(
Json.createValue("yes"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("if",
builderFactory.createArrayBuilder()
.add(true)
.add("yes")
.add("false"))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue("no"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("if",
builderFactory.createArrayBuilder()
.add(false)
.add("yes")
.add("no"))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void ifElsIfElseWithVarEval() {
assertEquals(
Json.createValue("liquid"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("if",
builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("<", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(0)))
.add("freezing")
.add(builderFactory.createObjectBuilder()
.add("<", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100)))
.add("liquid")
.add("gas"))
.build(),
builderFactory.createObjectBuilder().add("temp", 55).build()));
}
@Test
public void lessThan() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("<", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 99).build()));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("<", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 100).build()));
}
@Test
public void lessOrEqualsThan() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("<=", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 100).build()));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("<=", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 101).build()));
}
@Test
public void greaterThan() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add(">", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 101).build()));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add(">", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 100).build()));
}
@Test
public void greaterOrEqualsThan() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add(">=", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 100).build()));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add(">=", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "temp"))
.add(100))
.build(),
builderFactory.createObjectBuilder().add("temp", 99).build()));
}
@Test
public void equalsCoercion() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("==", builderFactory.createArrayBuilder()
.add(1)
.add(1))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("==", builderFactory.createArrayBuilder()
.add("1")
.add(1))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("==", builderFactory.createArrayBuilder()
.add(1)
.add("1"))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("==", builderFactory.createArrayBuilder()
.add(0)
.add(false))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("==", builderFactory.createArrayBuilder()
.add(1)
.add(false))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void equalsNoCoercion() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("===", builderFactory.createArrayBuilder()
.add(1)
.add(1))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("===", builderFactory.createArrayBuilder()
.add("1")
.add(1))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("===", builderFactory.createArrayBuilder()
.add(1)
.add("1"))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("===", builderFactory.createArrayBuilder()
.add(0)
.add(false))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("===", builderFactory.createArrayBuilder()
.add(1)
.add(false))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void negate() {
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("!", true)
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("!", builderFactory.createArrayBuilder().add(true).build())
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void booleanEvaluation() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("!!", true)
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("!!", "a")
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("!!", "")
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("!!", builderFactory.createArrayBuilder().add(true).build())
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void and() {
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("and", builderFactory.createArrayBuilder()
.add(false)
.add(true))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue("a"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("and", builderFactory.createArrayBuilder()
.add(true)
.add("a"))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void or() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("or", builderFactory.createArrayBuilder()
.add(false)
.add(true))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("or", builderFactory.createArrayBuilder()
.add(true)
.add("a"))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue("a"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("or", builderFactory.createArrayBuilder()
.add("a")
.add(true))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue("a"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("or", builderFactory.createArrayBuilder()
.add(false)
.add(JsonValue.EMPTY_JSON_ARRAY)
.add("a")
.add(true))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void min() {
assertEquals(
Json.createValue(100.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("min", builderFactory.createArrayBuilder()
.add(100)
.add(200)
.add(300))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void max() {
assertEquals(
Json.createValue(300.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("max", builderFactory.createArrayBuilder()
.add(100)
.add(200)
.add(300))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void plus() {
assertEquals(
Json.createValue(6.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("+", builderFactory.createArrayBuilder()
.add(4)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue(3.14),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("+", "3.14")
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue(7.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("+", builderFactory.createArrayBuilder()
.add(4)
.add(2)
.add(1))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void minus() {
assertEquals(
Json.createValue(2.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("-", builderFactory.createArrayBuilder()
.add(4)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue(-2.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("-", 2)
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void multiply() {
assertEquals(
Json.createValue(8.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("*", builderFactory.createArrayBuilder()
.add(4)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue(24.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("*", builderFactory.createArrayBuilder()
.add(4)
.add(3)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void divide() {
assertEquals(
Json.createValue(2.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("/", builderFactory.createArrayBuilder()
.add(4)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void modulo() {
assertEquals(
Json.createValue(0.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("%", builderFactory.createArrayBuilder()
.add(4)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
assertEquals(
Json.createValue(1.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("%", builderFactory.createArrayBuilder()
.add(5)
.add(2))
.build(),
JsonValue.EMPTY_JSON_OBJECT));
}
@Test
public void map() {
assertEquals(
builderFactory.createArrayBuilder()
.add(2.)
.add(4.)
.add(6.)
.add(8.)
.add(10.)
.build(),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("map", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "integers"))
.add(builderFactory.createObjectBuilder()
.add("*", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(2))))
.build(),
builderFactory.createObjectBuilder()
.add("integers", builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3)
.add(4)
.add(5))
.build()));
}
@Test
public void filter() {
assertEquals(
builderFactory.createArrayBuilder()
.add(1)
.add(3)
.add(5)
.build(),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("filter", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "integers"))
.add(builderFactory.createObjectBuilder()
.add("%", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(2))))
.build(),
builderFactory.createObjectBuilder()
.add("integers", builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3)
.add(4)
.add(5))
.build()));
}
@Test
public void reduce() {
assertEquals(
Json.createValue(15.),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("reduce", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "integers"))
.add(builderFactory.createObjectBuilder()
.add("+", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", "current"))
.add(builderFactory.createObjectBuilder()
.add("var", "accumulator"))))
.add(0))
.build(),
builderFactory.createObjectBuilder()
.add("integers", builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3)
.add(4)
.add(5))
.build()));
}
@Test
public void all() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("all", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3))
.add(builderFactory.createObjectBuilder()
.add(">", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(0))))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("all", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3))
.add(builderFactory.createObjectBuilder()
.add("<", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(3))))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
@Test
public void some() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("some", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3))
.add(builderFactory.createObjectBuilder()
.add(">", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(2))))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("some", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3))
.add(builderFactory.createObjectBuilder()
.add(">", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(3))))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
@Test
public void none() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("none", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3))
.add(builderFactory.createObjectBuilder()
.add(">", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(3))))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("none", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3))
.add(builderFactory.createObjectBuilder()
.add("<", builderFactory.createArrayBuilder()
.add(builderFactory.createObjectBuilder()
.add("var", ""))
.add(2))))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
@Test
public void merge() {
assertEquals(
builderFactory.createArrayBuilder()
.add(1)
.add(2)
.add(3)
.add("4")
.build(),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("merge", builderFactory.createArrayBuilder()
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2))
.add(3)
.add("4"))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
@Test
public void in() {
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("in", builderFactory.createArrayBuilder()
.add(2)
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("in", builderFactory.createArrayBuilder()
.add(3)
.add(builderFactory.createArrayBuilder()
.add(1)
.add(2)))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
JsonValue.TRUE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("in", builderFactory.createArrayBuilder()
.add("ay")
.add("may"))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
JsonValue.FALSE,
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("in", builderFactory.createArrayBuilder()
.add("cem")
.add("may"))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
@Test
public void cat() {
assertEquals(
Json.createValue("hello json"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("cat", builderFactory.createArrayBuilder()
.add("hell")
.add("o json"))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
@Test
public void substr() {
assertEquals(
Json.createValue("logic"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("substr", builderFactory.createArrayBuilder()
.add("jsonlogic")
.add(4))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
Json.createValue("logic"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("substr", builderFactory.createArrayBuilder()
.add("jsonlogic")
.add(-5))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
Json.createValue("son"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("substr", builderFactory.createArrayBuilder()
.add("jsonlogic")
.add(1)
.add(3))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
assertEquals(
Json.createValue("log"),
jsonLogic.apply(
builderFactory.createObjectBuilder()
.add("substr", builderFactory.createArrayBuilder()
.add("jsonlogic")
.add(4)
.add(-2))
.build(),
JsonValue.EMPTY_JSON_ARRAY));
}
}