(List (Com {[LIT_CHARS .]} {[DQ [VarSub XDG_TEST_DIR][LIT_CHARS /include/testfuncs.sh]]}) (FunctionDef assert_exit [] (List (= scope= flags=0 words=[] bindings=[('EXPECT', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]} {[LIT_CHARS 1]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS out.stdout]} {[LIT_CHARS out.stderr]}) (Subshell (Com {[DQ [VarSub @]]} < (FilenameRedirectNode filename={[LIT_CHARS out.stdout]} "> 1), (FilenameRedirectNode filename={[LIT_CHARS out.stderr]} "> 2), > ) ) (= scope= flags=0 words=[] bindings=[('CODE', {[DQ [VarSub ?]]})]) (= scope= flags=0 words=[] bindings=[('LASTCOMMAND', {[DQ [VarSub *]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub EXPECT]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('EXPECT', {[LIT_CHARS 0]})]) ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub EXPECT]]} {[LIT_OTHER "="]} {[LIT_CHARS N]} {[LIT_CHARS -a]} {[DQ [VarSub CODE]]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "Command ("][VarSub *][LIT_CHARS ") gave exit code "][VarSub CODE][LIT_CHARS ", expected nonzero"]]}) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[DQ [VarSub EXPECT]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS N]} {[LIT_OTHER "]"]}) (Com {[LIT_OTHER "["]} {[DQ [VarSub EXPECT]]} {[LIT_CHARS -ne]} {[DQ [VarSub CODE]]} {[LIT_OTHER "]"]}) ) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "Command ("][VarSub *][LIT_CHARS ") gave exit code "][VarSub CODE][LIT_CHARS ", expected "][VarSub EXPECT]]}) ) ) ) (FunctionDef assert_interactive_notroot [] (If (Com {[LIT_OTHER "["]} {[ComSub (Com {[LIT_CHARS whoami]})]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[SQ ]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS assert_interactive]} {[DQ [VarSub @]]}) ) ) (FunctionDef assert_interactive [] (List (= scope= flags=0 words=[] bindings=[('query', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('expect', {[VarSub 2]})]) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub TEST_STATUS]]} {[LIT_OTHER "="]} {[SQ ]} {[LIT_CHARS -a]} {[DQ [VarSub expect]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS C]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Test has already failed. Not bothering to ask '"][VarSub query][LIT_CHARS "'"]]}) (Com {[LIT_CHARS return]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub XDG_TEST_NO_INTERACTIVE]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Assumed '"][VarSub query][LIT_CHARS "' is '"][VarSub expect][LIT_CHARS "'"]]}) (Com {[LIT_CHARS return]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub expect]]} {[LIT_CHARS -a]} {[DQ [VarSub expect]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS C]} {[LIT_OTHER "]"]}) (List (If (Com {[LIT_OTHER "["]} {[DQ [VarSub expect]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS y]} {[LIT_CHARS -a]} {[DQ [VarSub expect]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS n]} {[LIT_CHARS -a]} {[DQ [VarSub expect]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS s]} {[LIT_CHARS -a]} {[DQ [VarSub expect]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS C]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "TEST SYNTAX ERROR: interactive assertions require one of (y,n,s,C) as choices. (found '"][VarSub expect][LIT_CHARS "')"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (Com {[LIT_CHARS unset]} {[LIT_CHARS result]}) (While (Com {[LIT_OTHER "["]} {[DQ [VarSub result]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS y]} {[LIT_CHARS -a]} {[DQ [VarSub result]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS n]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\n"][\ LIT_ESCAPED_CHAR "\\t"][VarSub query][LIT_CHARS " [y/n]: "]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS read]} {[LIT_CHARS result]}) ) ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub expect]]} {[LIT_OTHER "="]} {[LIT_CHARS s]} {[LIT_OTHER "]"]}) (List (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub 3]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "TEST SYNTAX ERROR: 's' requires a variable name"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (Com {[LIT_CHARS eval]} {[DQ [VarSub 3][LIT_CHARS "="][VarSub result]]}) ) (Com {[LIT_OTHER "["]} {[DQ [VarSub result]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [VarSub expect]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "User indicated '"][VarSub result][LIT_CHARS "' instead of '"][VarSub expect][LIT_CHARS "' in response to '"][VarSub query][LIT_CHARS "'"]]}) ) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\n"][\ LIT_ESCAPED_CHAR "\\t"][VarSub query][LIT_CHARS " [enter to continue] "]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS read]} {[LIT_CHARS result]}) ) ) ) ) (FunctionDef assert_file_in_path [] (List (= scope= flags=0 words=[] bindings=[('search_dirs', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub 2]]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('found_files', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS find]} {[VarSub search_dirs]} {[LIT_CHARS -name]} {[DQ [VarSub 1]]})]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub found_files]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "Did not find '"][VarSub 1][LIT_CHARS "' in '"][VarSub 2][LIT_CHARS "'"]]}) ) ) ) (FunctionDef assert_file_not_in_path [] (List (= scope= flags=0 words=[] bindings=[('search_dirs', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub 2]]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('found_files', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS find]} {[VarSub search_dirs]} {[LIT_CHARS -name]} {[DQ [VarSub 1]]})]})]) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub found_files]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "Found '"][VarSub found_files][LIT_CHARS "' in "][VarSub 2]]}) ) ) ) (FunctionDef assert_file [] (List (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -e]} {[DQ [VarSub 1]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "'"][VarSub 1][LIT_CHARS "' does not exist"]]}) (Com {[LIT_CHARS return]}) ) (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub 1]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "'"][VarSub 1][LIT_CHARS "' is not a regular file"]]}) (Com {[LIT_CHARS return]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[DQ [VarSub 2]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('compare', {[ComSub (Com {[LIT_CHARS diff]} {[LIT_CHARS -wB]} {[DQ [VarSub 1]]} {[DQ [VarSub 2]]})]})]) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub compare]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "'"][VarSub 1][LIT_CHARS "' is different from '"][VarSub 2][LIT_CHARS "'. Diff is:"][\ LIT_ESCAPED_CHAR "\\n"][VarSub compare]]}) ) ) ) ) ) (FunctionDef assert_nofile [] (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -e]} {[DQ [VarSub 1]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "'"][VarSub 1][LIT_CHARS "' exists."]]}) ) ) (FunctionDef assert_nostdout [] (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -s]} {[LIT_CHARS out.stdout]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Unexpected output from '"][VarSub LASTCOMMAND][LIT_CHARS "' written to stdout, as shown below:"]]}) (Com {[LIT_CHARS infofile]} {[LIT_CHARS out.stdout]} {[LIT_CHARS stdout] [LIT_OTHER ":"]}) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub TEST_STATUS]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS PASS]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_status]} {[LIT_CHARS WARN]}) ) ) ) ) (FunctionDef assert_nostderr [] (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub XDG_UTILS_DEBUG_LEVEL]]} {[LIT_OTHER "]"]}) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -s]} {[LIT_CHARS out.stderr]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS infofile]} {[LIT_CHARS out.stderr]} {[LIT_CHARS debug] [LIT_OTHER ":"]}) ) (Com {[LIT_OTHER "["]} {[LIT_CHARS -s]} {[LIT_CHARS out.stderr]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Unexpected output from '"][VarSub LASTCOMMAND][LIT_CHARS "' written to stderr, as shown below:"]]}) (Com {[LIT_CHARS infofile]} {[LIT_CHARS out.stderr]} {[LIT_CHARS stderr] [LIT_OTHER ":"]}) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub TEST_STATUS]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS PASS]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_status]} {[LIT_CHARS WARN]}) ) ) ) ) (FunctionDef assert_stderr [] (List (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -s]} {[LIT_CHARS out.stderr]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Expected output from '"][VarSub LASTCOMMAND][LIT_CHARS "' to stderr, but none written"]]}) (Com {[LIT_CHARS test_fail]}) (Com {[LIT_CHARS return]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub 1]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('expfile', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('OK', {[LIT_CHARS Y]})]) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 0]} 4), (FilenameRedirectNode filename={[DQ [VarSub expfile]]} 0), (FilenameRedirectNode filename={[LIT_CHARS out.stderr]} 3), > ) (While (Com {[LIT_CHARS read]} {[LIT_CHARS expline]}) (If (Com {[LIT_CHARS read]} {[LIT_CHARS line]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} 0), > ) (If (Com {[LIT_CHARS expr]} {[DQ [VarSub line]]} {[LIT_OTHER ":"]} {[DQ [VarSub expline]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_OTHER ":"]}) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('OK', {[LIT_CHARS N]})]) (Com {[LIT_CHARS break]}) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('OK', {[LIT_CHARS N]})]) ) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 4]} 0), (DescriptorRedirectNode target={[LIT_CHARS -]} 3), (DescriptorRedirectNode target={[LIT_CHARS -]} 4), > ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub OK]]} {[LIT_OTHER "="]} {[LIT_CHARS N]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Incorrect output from '"][VarSub LASTCOMMAND][LIT_CHARS "' written to stderr, as shown below"]]}) (Com {[LIT_CHARS infofile]} {[DQ [VarSub expfile]]} {[DQ [LIT_CHARS "expected stderr:"]]}) (Com {[LIT_CHARS infofile]} {[LIT_CHARS out.stderr]} {[DQ [LIT_CHARS "received stderr:"]]}) (Com {[LIT_CHARS test_fail]}) ) ) ) ) ) ) (FunctionDef assert_stdout [] (List (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -s]} {[LIT_CHARS out.stdout]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Expected output from '"][VarSub LASTCOMMAND][LIT_CHARS "' to stdout, but none written"]]}) (Com {[LIT_CHARS test_fail]}) (Com {[LIT_CHARS return]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub 1]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('expfile', {[DQ [VarSub 1]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -e]} {[DQ [VarSub expfile]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_status]} {[LIT_CHARS NORESULT]} {[DQ [LIT_CHARS "Could not find file '"][VarSub expfile][LIT_CHARS "' to look up expected pattern!"]]}) (Com {[LIT_CHARS return]}) ) ) (= scope= flags=0 words=[] bindings=[('OK', {[LIT_CHARS Y]})]) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 0]} 4), (FilenameRedirectNode filename={[DQ [VarSub expfile]]} 0), (FilenameRedirectNode filename={[LIT_CHARS out.stdout]} 3), > ) (While (Com {[LIT_CHARS read]} {[LIT_CHARS expline]}) (If (Com {[LIT_CHARS read]} {[LIT_CHARS line]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} 0), > ) (If (Com {[LIT_CHARS expr]} {[DQ [VarSub line]]} {[LIT_OTHER ":"]} {[DQ [VarSub expline]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_OTHER ":"]}) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('OK', {[LIT_CHARS N]})]) (Com {[LIT_CHARS break]}) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('OK', {[LIT_CHARS N]})]) ) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 4]} 0), (DescriptorRedirectNode target={[LIT_CHARS -]} 3), (DescriptorRedirectNode target={[LIT_CHARS -]} 4), > ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub OK]]} {[LIT_OTHER "="]} {[LIT_CHARS N]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS test_infoline]} {[DQ [LIT_CHARS "Incorrect output from '"][VarSub LASTCOMMAND][LIT_CHARS "' written to stdout, as shown below"]]}) (Com {[LIT_CHARS infofile]} {[DQ [VarSub expfile]]} {[DQ [LIT_CHARS "expected stdout:"]]}) (Com {[LIT_CHARS infofile]} {[LIT_CHARS out.stdout]} {[DQ [LIT_CHARS "received stdout:"]]}) (Com {[LIT_CHARS test_fail]}) ) ) ) ) ) ) (FunctionDef require_interactive [] (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub XDG_TEST_NO_INTERACTIVE]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_result]} {[LIT_CHARS UNTESTED]} {[DQ [LIT_CHARS "XDG_TEST_NO_INTERACTIVE is set, but this test needs interactive"]]}) ) ) (FunctionDef require_root [] (If (Com {[LIT_OTHER "["]} {[ComSub (Com {[LIT_CHARS whoami]})]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[SQ ]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_result]} {[LIT_CHARS UNTESTED]} {[DQ [LIT_CHARS "not running as root, but test requires root privileges"]]}) ) ) (FunctionDef require_notroot [] (If (Com {[LIT_OTHER "["]} {[ComSub (Com {[LIT_CHARS whoami]})]} {[LIT_OTHER "="]} {[SQ ]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_result]} {[LIT_CHARS UNTESTED]} {[DQ [LIT_CHARS "running as root, but test must be run as a normal user"]]}) ) ) (FunctionDef set_no_display [] (Com {[LIT_CHARS unset]} {[LIT_CHARS DISPLAY]}) ) (FunctionDef assert_display [] (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub DISPLAY]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "DISPLAY not set!"]]}) ) ) (FunctionDef assert_util_var [] (If (Com {[LIT_OTHER "["]} {[DQ [LIT_CHARS x][VarSub XDGUTIL]]} {[LIT_OTHER "="]} {[LIT_CHARS x]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS test_fail]} {[DQ [LIT_CHARS "XDGUTIL variable not set"]]}) ) ) (FunctionDef use_file [] (List (= scope= flags=0 words=[] bindings=[('src', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('file', {[VarSub src transform_ops=[VS_UNARY_DPOUND {[LIT_SLASH /] [LIT_CHARS "*"] [LIT_SLASH /]}]]})]) (= scope= flags=0 words=[] bindings=[('varname', {[DQ [VarSub 2]]})]) (If (Com {[LIT_OTHER "["]} {[VarSub #]} {[LIT_CHARS -lt]} {[LIT_CHARS 2]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "TEST SYNTAX ERROR: use_file must have two arguments"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (Com {[LIT_CHARS assert_file]} {[DQ [VarSub src]]}) (= scope= flags=0 words=[] bindings=[('outfile', {[DQ [LIT_CHARS xdgtestdata-][VarSub XDG_TEST_ID][LIT_CHARS -][VarSub file]]})]) (Com {[LIT_CHARS eval]} {[DQ [VarSub varname][LIT_CHARS "="][VarSub outfile]]}) (Com {[LIT_CHARS cp]} {[DQ [VarSub src]]} {[DQ [VarSub XDG_TEST_TMPDIR][LIT_CHARS /][VarSub outfile]]}) ) ) (FunctionDef get_unique_name [] (List (= scope= flags=0 words=[] bindings=[('varname', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('file', {[DQ [VarSub 2]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub varname]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "TEST SYNAX ERROR: get_unique_name requries a variable name"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (= scope= flags=0 words=[] bindings=[('outfile', {[DQ [LIT_CHARS xdgtestdata-][VarSub XDG_TEST_ID][LIT_CHARS -][VarSub file]]})]) (Com {[LIT_CHARS eval]} {[DQ [VarSub varname][LIT_CHARS "="][VarSub outfile]]}) ) ) (FunctionDef edit_file [] (List (= scope= flags=0 words=[] bindings=[('file', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('origstr', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('varname', {[DQ [VarSub 3]]})]) (= scope= flags=0 words=[] bindings=[('newstr', {[DQ [VarSub 4]]})]) (If (Com {[LIT_OTHER "["]} {[VarSub #]} {[LIT_CHARS -lt]} {[LIT_CHARS 3]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "TEST SYNTAX ERROR: edit_file must have at least 3 arguments."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 255]}) ) ) (Com {[LIT_CHARS assert_file]} {[DQ [VarSub file]]}) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub newstr]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('newstr', {[DQ [LIT_CHARS xdgtestdata-][VarSub XDG_TEST_ID][LIT_CHARS -][VarSub origstr]]})]) ) (Com {[LIT_CHARS eval]} {[DQ [VarSub varname][LIT_CHARS "="][\ LIT_ESCAPED_CHAR "\\\""][VarSub newstr][\ LIT_ESCAPED_CHAR "\\\""]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -i]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s|"][VarSub origstr][LIT_CHARS "|"][VarSub newstr][LIT_CHARS "|g"]]} {[DQ [VarSub file]]}) ) ) )