#!/usr/bin/expect set SUGAR_EXECUTABLE $::env(SUGAR_EXECUTABLE) set BUILD_NAME 002 proc abort {reason} { puts "test failed $reason" exit 1 } spawn -noecho $SUGAR_EXECUTABLE tests/002/exit-with-1.mol lex parse 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/002/exit-with-1.mol lex parse /tmp/sugar.generated.$BUILD_NAME 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.$BUILD_NAME expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 1} { abort "executable didn't return exit code 1 but $value instead" }