#! ./tesh

p This tests whether TESH correctly sorts command output

< p Test sorting and filtering of output
< 
< $ true
< 
< ! output sort
< $ true
< 
< $ printf 'profiling: foo\n'
< 
< $ printf 'profiling: foo'
< 
< ! output sort
< $ printf 'profiling: foo\n'
< 
< ! output sort
< $ printf 'profiling: foo'
< 
< $ printf 'a\nb\nc\nd\n'
< > a
< > b
< > c
< > d
< 
< $ printf 'a\nb\nc\nd'
< > a
< > b
< > c
< > d
< 
< ! output sort
< $ printf 'c\nd\nb\na\n'
< > a
< > b
< > c
< > d
< 
< ! output sort
< $ printf 'c\nd\nb\na'
< > a
< > b
< > c
< > d
< 
< $ printf 'a\nprofiling: foo\nprofiling: bar\nb\nc\nd\nprofiling: baz\n'
< > a
< > b
< > c
< > d
< 
< $ printf 'a\nprofiling: foo\nprofiling: bar\nb\nc\nd\nprofiling: baz'
< > a
< > b
< > c
< > d
< 
< ! output sort
< $ printf 'c\nprofiling: foo\nprofiling: bar\nd\nb\na\nprofiling: baz\n'
< > a
< > b
< > c
< > d
< 
< ! output sort
< $ printf 'c\nprofiling: foo\nprofiling: bar\nd\nb\na\nprofiling: baz'
< > a
< > b
< > c
< > d
$ ${bindir:=.}/tesh --ignore-jenkins
> Ignore all cruft seen on SimGrid's continous integration servers
> Test suite from stdin
> [(stdin):1] Test sorting and filtering of output
> [(stdin):3] true
> [(stdin):6] true
> [(stdin):8] printf 'profiling: foo\n'
> [(stdin):10] printf 'profiling: foo'
> [(stdin):13] printf 'profiling: foo\n'
> [(stdin):16] printf 'profiling: foo'
> [(stdin):18] printf 'a\nb\nc\nd\n'
> [(stdin):24] printf 'a\nb\nc\nd'
> [(stdin):31] printf 'c\nd\nb\na\n'
> [(stdin):38] printf 'c\nd\nb\na'
> [(stdin):44] printf 'a\nprofiling: foo\nprofiling: bar\nb\nc\nd\nprofiling: baz\n'
> [(stdin):50] printf 'a\nprofiling: foo\nprofiling: bar\nb\nc\nd\nprofiling: baz'
> [(stdin):57] printf 'c\nprofiling: foo\nprofiling: bar\nd\nb\na\nprofiling: baz\n'
> [(stdin):64] printf 'c\nprofiling: foo\nprofiling: bar\nd\nb\na\nprofiling: baz'
> Test suite from stdin OK

p Check the Right Prefix Length (19) for "output sort"
! output sort 19
< 12345678901234567 B line
< 12345678901234567 A line
$ cat
> 12345678901234567 A line
> 12345678901234567 B line

! output sort 19
< 123456789012345678 B line
< 123456789012345678 A line
$ cat
> 123456789012345678 B line
> 123456789012345678 A line

! expect return 2
! output ignore
< ! output sort 19
< < 123456789012345678 B line
< < 123456789012345678 A line
< $ cat
< > 123456789012345678 A line
< > 123456789012345678 B line
$ ${bindir:=.}/tesh 

p Check user-defined prefix length for "output sort"
! output sort 5
< 000 B line
< 000 A line
$ cat
> 000 A line
> 000 B line

! output sort 4
< 000 B line
< 000 A line
$ cat
> 000 B line
> 000 A line

! expect return 2
! output ignore
< ! output sort 4
< < 000 B line
< < 000 A line
< $ cat
< > 000 A line
< > 000 B line
$ ${bindir:=.}/tesh
