#!/bin/sh
# Functional check of the installed jar and its Debian dependencies:
# parse and render Liquid templates (ANTLR 4 runtime), with variables
# from a JSON string (Jackson), the date filter (strftime4j), a for loop
# with filters, and an include from a snippets folder.
set -e

WORK="${AUTOPKGTEST_TMP:-$(mktemp -d)}"
cd "$WORK"
J=/usr/share/java
CP=$J/liqp.jar:$J/antlr4-runtime.jar:$J/strftime4j.jar:$J/jackson-core.jar:$J/jackson-databind.jar:$J/jackson-annotations.jar:$J/jackson-datatype-jsr310.jar

mkdir -p snippets
printf 'Hello, {{ greet }}!' > snippets/greet.liquid

cat > Render.java <<'X'
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import liqp.Template;
import liqp.TemplateParser;

public class Render {
    static void check(String expected, String got) {
        System.out.println(got);
        if (!expected.equals(got))
            throw new AssertionError("expected [" + expected + "], got [" + got + "]");
    }
    public static void main(String[] args) {
        TemplateParser parser = new TemplateParser.Builder().build();
        check("hi tobi", parser.parse("hi {{name}}").render("name", "tobi"));
        check("A, B, C",
              parser.parse("{% for x in items %}{{ x | upcase }}{% unless forloop.last %}, {% endunless %}{% endfor %}")
                    .render("{\"items\": [\"a\", \"b\", \"c\"]}"));
        ZonedDateTime t = ZonedDateTime.of(2021, 2, 16, 23, 43, 0, 0, ZoneOffset.ofHours(-2));
        check("16 February 2021",
              parser.parse("{{ when | date: \"%d %B %Y\" }}").render("when", t));
        check("Hello, world!",
              parser.parse("{% include 'greet' with 'world' %}").render());
        String tree = parser.parse("{{ a | size }}").toStringTree();
        System.out.println(tree);
        if (!tree.contains("size")) throw new AssertionError("no filter in the parse tree");
    }
}
X
javac -cp "$CP" -d . Render.java
java -cp ".:$CP" Render
echo "render: PASS"
