#!/bin/sh
# Functional check of the installed JLine 4: read lines through
# LineReaderBuilder on a dumb terminal, load the JNI library from the
# jline4 directory, and open a system terminal with the JNI provider on a
# pseudo terminal.
set -e

WORK="${AUTOPKGTEST_TMP:-$(mktemp -d)}"
cd "$WORK"
J=/usr/share/java
CP=$J/jline4-reader.jar:$J/jline4-terminal.jar:$J/jline4-terminal-jni.jar:$J/jline4-native.jar
TRIPLET=$(dpkg-architecture -qDEB_HOST_MULTIARCH)
JAVA="java --enable-native-access=ALL-UNNAMED"

cat > ReadLine.java <<'X'
import org.jline.nativ.JLineNativeLoader;
import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jline.terminal.impl.DumbTerminal;
import org.jline.terminal.spi.TerminalExt;

public class ReadLine {
    public static void main(String[] args) throws Exception {
        if (args.length > 0 && args[0].equals("native")) {
            JLineNativeLoader.initialize();
            System.out.println("native: " + JLineNativeLoader.getNativeLibraryPath());
            return;
        }
        if (args.length > 0 && args[0].equals("jni")) {
            try (Terminal t = TerminalBuilder.builder().system(true).provider("jni").build()) {
                System.out.println("provider: " + ((TerminalExt) t).getProvider().name());
            }
            return;
        }
        try (Terminal t = new DumbTerminal(System.in, System.out)) {
            LineReader r = LineReaderBuilder.builder().terminal(t).build();
            String a = r.readLine("> ");
            String b = r.readLine("> ");
            t.writer().println();
            t.writer().println("got: " + a + "|" + b);
            t.flush();
        }
    }
}
X
javac -cp "$CP" -d . ReadLine.java

printf 'hello jline\n6*7\n' | $JAVA -cp ".:$CP" ReadLine > out.txt
cat out.txt
grep -qx 'got: hello jline|6\*7' out.txt

$JAVA -cp ".:$CP" ReadLine native | tee native.txt
grep -qx "native: /usr/lib/$TRIPLET/jni/jline4/libjlinenative.so" native.txt

# The JNI provider needs a terminal: run under script(1).
script -qec "env TERM=xterm $JAVA -cp .:$CP ReadLine jni" /dev/null < /dev/null | tr -d '\r' | tee jni.txt
grep -q 'provider: jni$' jni.txt
echo "readline: PASS"
