#!/usr/bin/env bash

test_description='guardutil/cli'

. lib/test-lib.sh

################################################################

test_begin_subtest "print system info"
guardutil print TEST0 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
ifo: T1
name: TEST0
prefix: T1:
module:
  MOD_PATH/TEST0.py
states (*=requestable):
      3 C *
      1 A *
      0 INIT *
      2 B
    -10 J
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print inherited system info"
guardutil print TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
ifo: T1
name: TEST1
prefix: T1:TEST-
module:
  MOD_PATH/TEST1.py
usercode:
  MOD_PATH/TEST0.py
states (*=requestable):
    100 D *
      3 C *
      1 A *
      0 INIT *
      2 B
    -10 J
initial request: A
nominal state: D
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print system info, assigned indices"
guardutil print TEST_indices \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
ifo: T1
name: TEST_indices
prefix: T1:
module:
  MOD_PATH/TEST_indices.py
states (*=requestable):
   2382 D *
     10 C *
    -10 A *
      0 INIT *
      1 B
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print states"
guardutil states TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
100 D *
3 C *
1 A *
0 INIT *
2 B
-10 J
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print edges"
guardutil edges TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" | sort >OUTPUT
cat <<EOF >EXPECTED
A -> B
B -> A
B -> C
C -> A
C -> D
D -> A
INIT -> A
J -> A
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print path"
guardutil path TEST1 A D \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
A
B
C
D
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print code"
guardutil code TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
MOD_PATH/TEST1.py
MOD_PATH/TEST0.py
EOF
test_expect_equal_file OUTPUT EXPECTED

# test_begin_subtest "print graph"
# guardutil graph -i -f dot TEST1 -o
# cat <<EOF >EXPECTED
# digraph G {
# 	graph [labelloc=t, rankdir=BT, label=<Guardian: TEST1>];
# 	node [label="\N"];
# 	graph [lp="67.5,475.5",
# 		bb="0,0,135,487"];
# 	{
# 		graph [rank=source,
# 			lp="",
# 			bb=""];
# 		INIT [label="INIT (0)", index=0, style=filled, code=<class 'TEST0.INIT'>, goto=False, color=black, request=True, shape=doublecircle, fillcolor="/set19/4", fontcolor=white, pos="67.5,52", width="1.4444", height="1.4444"];
# 	}
# 	{
# 		graph [rank=same,
# 			lp="",
# 			bb=""];
# 		A [label="A (1)", index=1, style=filled, code=<class 'TEST0.A'>, goto=True, color=black, request=True, shape=oval, fillcolor="/set19/3", fontcolor=white, pos="67.5,230", width="0.94444", height="0.5"];
# 	}
# 	{
# 		graph [lp="",
# 			bb=""];
# 		C [label="C (3)", index=3, style=filled, code=<class 'TEST0.C'>, goto=False, color=black, request=True, shape=oval, fillcolor="/set19/2", fontcolor=white, pos="67.5,374", width="0.94444", height="0.5"];
# 		B [label="B (2)", index=2, style=filled, code=<class 'TEST0.B'>, goto=False, color=black, request=False, shape=oval, fillcolor="/pastel19/2", fontcolor=grey30, pos="67.5,302", width="0.94444", height="0.5"];
# 		D [label="D (100)", index=100, style=filled, code=<class 'TEST1.D'>, goto=False, color=black, request=True, shape=oval, fillcolor="/set19/2", fontcolor=white, pos="67.5,446", width="1.3333", height="0.5"];
# 		J [label="J (-10)", index="-10", style=filled, code=<class 'TEST0.J'>, goto=False, color=black, request=False, shape=oval, fillcolor="/pastel19/2", fontcolor=grey30, pos="67.5,158", width="1.1389", height="0.5"];
# 	}
# 	A -> B [key=0, pos="e,67.5,283.59 67.5,248.17 67.5,255.87 67.5,265.03 67.5,273.58"];
# 	C -> D [key=0, pos="e,67.5,427.59 67.5,392.17 67.5,399.87 67.5,409.03 67.5,417.58"];
# 	B -> C [key=0, pos="e,67.5,355.59 67.5,320.17 67.5,327.87 67.5,337.03 67.5,345.58"];
# 	J -> A [key=0, pos="e,67.5,211.59 67.5,176.17 67.5,183.87 67.5,193.03 67.5,201.58"];
# }
# EOF
# test_expect_equal_file TEST1.dot EXPECTED

################################################################

test_done
