#!/usr/bin/expect set SUGAR_EXECUTABLE $::env(SUGAR_EXECUTABLE) proc abort {reason} { puts "test failed $reason" exit 1 } spawn -noecho $SUGAR_EXECUTABLE tests/003/exit-with-1.mol lex tests/003/library.mol lex merge parse expect { error { abort "failed to parse" } eof { abort "cannot find the exit-syscall-number procedure" } exit-syscall-number } expect { error { abort "failed to parse" } eof { abort "cannot find the main" } main } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 0} { abort "compiler crashed" } spawn -noecho $SUGAR_EXECUTABLE tests/003/exit-with-1.mol lex tests/003/library.mol lex merge parse /tmp/sugar.generated generate assemble expect { error { abort "failed to compile" } eof { abort "didn't run clang" } clang } expect { error { abort "failed to link" } eof { abort "didn't run ld" } ld } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 0} { abort "compiler crashed" } spawn -noecho /tmp/sugar.generated expect { error { abort "failed to compile" } eof { abort "didn't output" } Hello } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 1} { abort "executable didn't return exit code 1 but $value instead" }