aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/test.fish
blob: 9a91bb278ac10b7a53a896fba44b58a3bd823b6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/local/bin/fish
#
# Main loop of the test suite. I wrote this
# instad of using autotest to provide additional
# testing for fish. :-)


if [ "$argv" != '-n' ]
    set -l res ok

    # begin...end has bug in error redirecting...
    begin
        ../fish -n ./test.fish ^top.tmp.err
        ../fish -n ./test.fish -n ^^top.tmp.err
        ../fish ./test.fish -n ^^top.tmp.err
    end  | tee top.tmp.out
    set -l tmp_status $status
    if not diff top.tmp.out top.out >/dev/null
        set res fail
        echo "Output differs for file test.fish. Diff follows:"
        diff -u top.out top.tmp.out
    end

    if not diff top.tmp.err top.err >/dev/null
        set res fail
        echo "Error output differs for file test.fish. Diff follows:"
        diff -u top.err top.tmp.err
    end

    if test $tmp_status -ne (cat top.status)
        set res fail
        echo "Exit status differs for file test.fish"
    end

    if not ../fish -p /dev/null -c 'echo testing' >/dev/null
        set res fail
        echo "Profiling failed"
    end

    echo "Testing interactive functionality"
    # bug: `fish -n` throws errors on fishscript functions that don't shadow real commands,
    # so we can't use `type -q expect` here.
    if command -s expect >/dev/null
        # we have expect, we can run the interactive tests
        begin
            ../fish -n ./interactive.fish ^interactive.tmp.err
            ../fish ./interactive.fish ^^interactive.tmp.err
        end  | tee interactive.tmp.out
        set -l tmp_status $status
        if not diff interactive.tmp.out interactive.out >/dev/null
            set res fail
            echo "Output differs for file interactive.fish"
        end

        if not diff interactive.tmp.err interactive.err >/dev/null
            set res fail
            echo "Error output differs for file interactive.fish"
        end

        if test $tmp_status -ne (cat interactive.status)
            set res fail
            echo "Exit status differs for file interactive.fish"
        end
    else
        echo "Tests disabled: `expect` not found"
    end

    if test $res = ok
        echo "File test.fish tested ok"
        exit 0
    else
        echo "File test.fish failed tests"
        exit 1
    end
end

echo "Testing high level script functionality"

for i in *.in
    set -l res ok

    set -l base (basename $i .in)
    set template_out (basename $i .in).out
    set template_err (basename $i .in).err
    set template_status (basename $i .in).status

    ../fish <$i >tmp.out ^tmp.err
    set -l tmp_status $status
    if not diff tmp.out $base.out >/dev/null
        set res fail
        echo "Output differs for file $i. Diff follows:"
        diff -u tmp.out $base.out
    end

    if not diff tmp.err $base.err >/dev/null
        set res fail
        echo "Error output differs for file $i. Diff follows:"
        diff -u tmp.err $base.err
    end

    if test $tmp_status -ne (cat $template_status)
        set res fail
        echo "Exit status differs for file $i"
    end

    if test $res = ok
        echo "File $i tested ok"
    else
        echo "File $i failed tests"
    end
end