(List (= scope= flags=0 words=[] bindings=[('DIR', {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub BASH_SOURCE bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]})]]}) (Com {[LIT_CHARS pwd]}) )]})]) (= scope= flags=0 words=[] bindings=[('ZIPPER', {[VarSub PWD] [LIT_CHARS /] [VarSub 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('UNZIP', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('ZIP', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[VarSub DIR] [LIT_CHARS /testenv.sh]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "testenv.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (FunctionDef assert_unzip_same_as_zipper [] (List (= scope= flags=0 words=[] bindings=[('folder1', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -d]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.XXXXXXXX]})]})]) (= scope= flags=0 words=[] bindings=[('folder2', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -d]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.XXXXXXXX]})]})]) (= scope= flags=0 words=[] bindings=[('zipfile', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub folder1]}) (AndOr OP_OR_IF (Com {[VarSub UNZIP]} {[LIT_CHARS -q]} {[VarSub zipfile]} {[VarSub @]}) (Com {[LIT_CHARS true]}) ) ) ) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub folder2]}) (Com {[VarSub ZIPPER]} {[LIT_CHARS x]} {[VarSub zipfile]} {[VarSub @]}) ) ) (Fork (Com {[LIT_CHARS diff]} {[LIT_CHARS -r]} {[VarSub folder1]} {[VarSub folder2]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Unzip and Zipper resulted in different output"]]}) ) ) ) (FunctionDef assert_zipper_same_after_unzip [] (List (= scope= flags=0 words=[] bindings=[('dir', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('zipfile', {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]})]) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub dir]]}) (Com {[VarSub ZIPPER]} {[LIT_CHARS c]} {[VarSub zipfile]} {[DQ [VarSub @]]}) ) ) (= scope= flags=0 words=[] bindings=[('folder', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -d]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.XXXXXXXX]})]})]) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub folder]}) (AndOr OP_OR_IF (Com {[VarSub UNZIP]} {[LIT_CHARS -q]} {[VarSub zipfile]}) (Com {[LIT_CHARS true]}) ) ) ) (Fork (Com {[LIT_CHARS diff]} {[LIT_CHARS -r]} {[DQ [VarSub dir]]} {[VarSub folder]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Unzip after zipper output differ"]]}) ) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub dir]]}) (Com {[VarSub ZIPPER]} {[LIT_CHARS cC]} {[VarSub zipfile]} {[DQ [VarSub @]]}) ) ) (= scope= flags=0 words=[] bindings=[('folder', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -d]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.XXXXXXXX]})]})]) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub folder]}) (AndOr OP_OR_IF (Com {[VarSub UNZIP]} {[LIT_CHARS -q]} {[VarSub zipfile]}) (Com {[LIT_CHARS true]}) ) ) ) (Fork (Com {[LIT_CHARS diff]} {[LIT_CHARS -r]} {[DQ [VarSub dir]]} {[VarSub folder]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Unzip after zipper output differ"]]}) ) ) ) (FunctionDef test_zipper [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/some/other/path]}) (Com {[LIT_CHARS touch]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/empty_file]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS toto]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/file]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS titi]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/other_file]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/other_file]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS tata]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/file]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('filelist', {[DQ [ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]}) (Pipeline (Com {[LIT_CHARS find]} {[LIT_CHARS .]}) (Com {[LIT_CHARS sed]} {[SQ ]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[SQ ]}) ) )]]})]) (Com {[LIT_CHARS assert_zipper_same_after_unzip]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]} {[VarSub filelist]}) (Com {[LIT_CHARS assert_unzip_same_as_zipper]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub filelist]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test.content]} "> 1), > ) (Com {[LIT_CHARS assert_zipper_same_after_unzip]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]} {[LIT_OTHER "@"] [VarSub TEST_TMPDIR] [LIT_CHARS /test.content]}) (Com {[LIT_CHARS assert_unzip_same_as_zipper]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]}) (Com {[VarSub ZIPPER]} {[LIT_CHARS cf]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} {[VarSub filelist]}) ) ) (Com {[VarSub ZIPPER]} {[LIT_CHARS v]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS file]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS other_file]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS path]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS /]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS abcdefghi]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test.zip]} "> 1), > ) (Com {[LIT_CHARS cat]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test.zip]} >"> 1), > ) (Com {[VarSub ZIPPER]} {[LIT_CHARS v]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test.zip]} < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS file]]}) (Com {[LIT_CHARS expect_log]} {[DQ [LIT_CHARS other_file]]}) (Com {[LIT_CHARS expect_not_log]} {[DQ [LIT_CHARS path]]}) ) ) (FunctionDef test_zipper_unzip_selective_files [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/some/other/path]}) (Com {[LIT_CHARS touch]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/empty_file]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS toto]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/file]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS titi]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/other_file]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/other_file]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS tata]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/file]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('filelist', {[DQ [ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]}) (Pipeline (Com {[LIT_CHARS find]} {[LIT_CHARS .]}) (Com {[LIT_CHARS sed]} {[SQ ]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[SQ ]}) ) )]]})]) (Com {[LIT_CHARS assert_zipper_same_after_unzip]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]} {[VarSub filelist]}) (Com {[LIT_CHARS assert_unzip_same_as_zipper]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} {[LIT_CHARS path/to/some/empty_file]} {[LIT_CHARS path/to/some/other_file]}) ) ) (FunctionDef test_zipper_unzip_to_optional_dir [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/some/other/path]}) (Com {[LIT_CHARS touch]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/empty_file]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS toto]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/file]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS titi]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/other_file]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test/path/to/some/other_file]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS tata]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /test/file]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('filelist', {[DQ [ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]}) (Pipeline (Com {[LIT_CHARS find]} {[LIT_CHARS .]}) (Com {[LIT_CHARS sed]} {[SQ ]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[SQ ]}) ) )]]})]) (Com {[LIT_CHARS assert_zipper_same_after_unzip]} {[VarSub TEST_TMPDIR] [LIT_CHARS /test]} {[VarSub filelist]}) (Com {[LIT_CHARS assert_unzip_same_as_zipper]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} {[LIT_CHARS -d]} {[LIT_CHARS output_dir2]} {[LIT_CHARS path/to/some/empty_file]} {[LIT_CHARS path/to/some/other_file]}) ) ) (FunctionDef test_zipper_compression [] (List (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /a]} "> 1), > ) (For i [{[ComSub (Com {[LIT_CHARS seq]} {[LIT_CHARS 1]} {[LIT_CHARS 1000]})]}]) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS a]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /a]} >"> 1), > ) ) (Com {[VarSub ZIPPER]} {[LIT_CHARS cCf]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} {[VarSub TEST_TMPDIR] [LIT_CHARS /a]}) (= scope= flags=0 words=[] bindings=[('out_size', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -c]}) (Com {[LIT_CHARS xargs]}) )]})]) (= scope= flags=0 words=[] bindings=[('in_size', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[VarSub TEST_TMPDIR] [LIT_CHARS /a]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -c]}) (Com {[LIT_CHARS xargs]}) )]})]) (Com {[LIT_CHARS check_gt]} {[DQ [VarSub in_size]]} {[DQ [VarSub out_size]]} {[DQ [LIT_CHARS "Output size is greater than input size"]]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -fr]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[VarSub ZIPPER]} {[LIT_CHARS x]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]}) ) ) (Fork (Com {[LIT_CHARS diff]} {[VarSub TEST_TMPDIR] [LIT_CHARS /a]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out/a]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Unzip using zipper after zipper output differ"]]}) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -fr]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[VarSub UNZIP]} {[LIT_CHARS -q]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]}) ) ) (Fork (Com {[LIT_CHARS diff]} {[VarSub TEST_TMPDIR] [LIT_CHARS /a]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out/a]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Unzip after zipper output differ"]]}) ) ) ) (FunctionDef test_zipper_specify_path [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /files]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS toto]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /files/a.txt]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS titi]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /files/b.txt]} "> 1), > ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -fr]} {[VarSub TEST_TMPDIR] [LIT_CHARS /expect/foo/bar]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /expect/foo/bar]}) (Com {[LIT_CHARS touch]} {[VarSub TEST_TMPDIR] [LIT_CHARS /expect/empty.txt]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS toto]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /expect/foo/a.txt]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS titi]]} < (FilenameRedirectNode filename={[VarSub TEST_TMPDIR] [LIT_CHARS /expect/foo/bar/b.txt]} "> 1), > ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -fr]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[VarSub ZIPPER]} {[LIT_CHARS cC]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]} {[LIT_CHARS empty.txt] [LIT_OTHER "="]} {[LIT_CHARS foo/a.txt] [LIT_OTHER "="] [VarSub TEST_TMPDIR] [LIT_CHARS /files/a.txt]} {[LIT_CHARS foo/bar/b.txt] [LIT_OTHER "="] [VarSub TEST_TMPDIR] [LIT_CHARS /files/b.txt]}) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) (Com {[VarSub UNZIP]} {[LIT_CHARS -q]} {[VarSub TEST_TMPDIR] [LIT_CHARS /output.zip]}) ) ) (Fork (Com {[LIT_CHARS diff]} {[LIT_CHARS -r]} {[VarSub TEST_TMPDIR] [LIT_CHARS /expect]} {[VarSub TEST_TMPDIR] [LIT_CHARS /out]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "Unzip after zipper output is not expected"]]}) ) ) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS "zipper tests"]]}) )