#!/bin/sh
# Functional check of the installed Jackson 3 YAML module: read YAML into a
# tree and into records, write YAML back.
set -e

WORK="${AUTOPKGTEST_TMP:-$(mktemp -d)}"
cd "$WORK"
J=/usr/share/java
CP=$J/jackson3-dataformat-yaml.jar:$J/jackson3-databind.jar:$J/jackson3-core.jar
CP=$CP:$J/jackson-annotations.jar:$J/fastdoubleparser.jar:$J/snakeyaml-engine.jar

mkdir -p src/check
cat > src/check/Yaml.java <<'X'
package check;

import java.util.List;

import tools.jackson.databind.JsonNode;
import tools.jackson.dataformat.yaml.PackageVersion;
import tools.jackson.dataformat.yaml.YAMLMapper;

public class Yaml {
    public record Entry(String title, String page, List<Entry> subsection) { }
    public record Sidebar(int index, List<Entry> subsection) { }

    static final String SIDEBAR = String.join("\n",
        "index: 1",
        "subsection:",
        "  - title: Guide",
        "    page: guide.md",
        "  - title: Reference",
        "    subsection:",
        "      - page: ref/a.md",
        "      - page: ref/b.md",
        "");

    public static void main(String[] args) throws Exception {
        YAMLMapper m = YAMLMapper.builder().build();
        JsonNode n = m.readTree(SIDEBAR);
        if (n.get("subsection").get(1).get("subsection").size() != 2) {
            throw new AssertionError(n.toString());
        }
        Sidebar s = m.readValue(SIDEBAR, Sidebar.class);
        if (s.index() != 1 || !s.subsection().get(0).page().equals("guide.md")
                || !s.subsection().get(1).subsection().get(1).page().equals("ref/b.md")) {
            throw new AssertionError(s.toString());
        }
        String out = m.writeValueAsString(s);
        System.out.print(out);
        if (!m.readValue(out, Sidebar.class).equals(s)) {
            throw new AssertionError(out);
        }
        System.out.println("version: " + PackageVersion.VERSION);
    }
}
X

javac -d classes src/check/Yaml.java -cp "$CP"
java -cp "classes:$CP" check.Yaml | tee out.txt
grep -q "^version: $(dpkg-query -W -f '${Version}' libjackson3-dataformat-yaml-java | sed 's/-.*//')$" out.txt
echo OK
