#!/usr/bin/expect set SUGAR_EXECUTABLE $::env(SUGAR_EXECUTABLE) set BUILD_NAME 007 proc abort {reason} { puts "test failed $reason" exit 1 } spawn -noecho $SUGAR_EXECUTABLE tests/007/exit-with-3.mol tests/007/library.mol lex-all merge-all expect { error { abort "failed to parse" } eof { abort "cannot find the symbol main in lexed output" } main } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 0} { abort "compiler crashed" } # ------------------------------------------------------------------- spawn -noecho $SUGAR_EXECUTABLE tests/007/exit-with-3.mol tests/007/library.mol lex-all merge-all parse expect { error { abort "failed to parse" } eof { abort "cannot find the main procedure" } main } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 0} { abort "compiler crashed" } # ------------------------------------------------------------------- spawn -noecho $SUGAR_EXECUTABLE tests/007/exit-with-3.mol tests/007/library.mol lex-all merge-all parse expect { error { abort "failed to parse" } eof { abort "cannot find the exit-syscall-number procedure" } exit-syscall-number } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 0} { abort "compiler crashed" } # ------------------------------------------------------------------- spawn -noecho $SUGAR_EXECUTABLE tests/007/exit-with-3.mol lex tests/007/library.mol lex merge 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 { error { abort "failed to compile" } eof { abort "didn't output" } Hello } expect eof lassign [wait] pid spawnid os_error_flag value if {$value != 3} { abort "executable didn't return exit code 3 but $value instead" }