add error cases to GCC example tests
This commit is contained in:
@ -33,6 +33,7 @@ class CMDTEST_gcc < Cmdtest::Testcase
|
||||
|
||||
def test_no_arguments
|
||||
cmd "#{gcc}" do
|
||||
comment "no arguments"
|
||||
stderr_equal [
|
||||
/^.*gcc.*: no input files/,
|
||||
]
|
||||
@ -73,33 +74,62 @@ class CMDTEST_gcc < Cmdtest::Testcase
|
||||
def test_compile_only
|
||||
|
||||
create_file "alpha.c", "int add_alpha(int x, int y) { return x+y; }"
|
||||
create_file "alpha_err.c", "int add_alpha(int x, int y) { return x+y_alpha_err; }"
|
||||
|
||||
cmd "#{gcc} -c alpha.c" do
|
||||
comment "compile one file"
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c alpha_err.c" do
|
||||
comment "compile one file with error"
|
||||
stderr_equal /y_alpha_err/
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
create_file "beta.c", "int add_beta(int x, int y) { return x+y; }"
|
||||
create_file "gamma.c", "int add_gamma(int x, int y) { return x+y; }"
|
||||
create_file "beta_err.c", "int add_beta(int x, int y) { return x+y_beta_err; }"
|
||||
create_file "gamma_err.c", "int add_gamma(int x, int y) { return x+y_gamma_err; }"
|
||||
|
||||
cmd "#{gcc} -c beta.c gamma.c" do
|
||||
created_files "beta.o", "gamma.o"
|
||||
comment "compile two files"
|
||||
written_files "beta.o", "gamma.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c beta_err.c gamma.c" do
|
||||
comment "compile two files, the first with error"
|
||||
stderr_equal /y_beta_err/
|
||||
written_files "gamma.o"
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c beta.c gamma_err.c" do
|
||||
comment "compile two files, the second with error"
|
||||
stderr_equal /y_gamma_err/
|
||||
written_files "beta.o"
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha.c -c" do
|
||||
comment "put -c after the file"
|
||||
written_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} beta.c -c gamma.c" do
|
||||
comment "put -c between two files"
|
||||
written_files "beta.o", "gamma.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c alpha.o" do
|
||||
comment "object file with -c"
|
||||
stderr_equal [
|
||||
/^.*gcc.*: alpha.o: linker input file unused because linking not done/,
|
||||
]
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c alpha.o beta.o" do
|
||||
comment "two object files with -c"
|
||||
stderr_equal [
|
||||
/^.*gcc.*: alpha.o: linker input file unused because linking not done/,
|
||||
/^.*gcc.*: beta.o: linker input file unused because linking not done/,
|
||||
@ -112,18 +142,28 @@ class CMDTEST_gcc < Cmdtest::Testcase
|
||||
def test_compile_output
|
||||
|
||||
create_file "alpha.c", "int add_alpha(int x, int y) { return x+y; }"
|
||||
create_file "beta.c", "int add_beta(int x, int y) { return x+y; }"
|
||||
|
||||
cmd "#{gcc} -c alpha.c -o alpha.o" do
|
||||
comment "-o to select object file output"
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c alpha.c -o beta.o" do
|
||||
comment "-o to select object file output (II)"
|
||||
created_files "beta.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o gamma.o -c alpha.c" do
|
||||
comment "-o first"
|
||||
created_files "gamma.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o gamma.o -c alpha.c beta.c" do
|
||||
comment "-o with two source files give error"
|
||||
stderr_equal /^.*gcc.*: cannot specify -o with -c or -S with multiple files/
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
@ -131,74 +171,114 @@ class CMDTEST_gcc < Cmdtest::Testcase
|
||||
def test_link
|
||||
|
||||
create_file "alpha.c", "int main() { return 17; }"
|
||||
create_file "alpha_err.c", "extern int undefined_var; int main() { return undefined_var; }"
|
||||
|
||||
cmd "#{gcc} -c alpha.c" do
|
||||
comment "compile source file"
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha.o" do
|
||||
comment "link object file"
|
||||
created_files "a.out"
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha.o -o beta" do
|
||||
comment "link object file with -o"
|
||||
created_files "beta"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o gamma alpha.o" do
|
||||
comment "-o first"
|
||||
created_files "gamma"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c alpha_err.c" do
|
||||
created_files "alpha_err.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha_err.o -o alpha_err" do
|
||||
comment "failed linking"
|
||||
stderr_equal /undefined_var/
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_link_2
|
||||
|
||||
create_file "alpha.c", "extern int beta ; int main() { return beta; }"
|
||||
create_file "beta.c", "int beta = 17;"
|
||||
create_file "alpha.c", "extern int beta_var ; int main() { return beta_var; }"
|
||||
create_file "beta.c", "int beta_var = 17;"
|
||||
create_file "beta_err.c", "int beta_var_err = 17;"
|
||||
|
||||
cmd "#{gcc} -c alpha.c beta.c" do
|
||||
comment "compile two source files"
|
||||
created_files "alpha.o", "beta.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha.o beta.o" do
|
||||
comment "link two object files"
|
||||
created_files "a.out"
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha.o beta.o -o beta" do
|
||||
comment "link two object files with -o"
|
||||
created_files "beta"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o gamma alpha.o beta.o" do
|
||||
comment "-o first"
|
||||
created_files "gamma"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c beta_err.c" do
|
||||
created_files "beta_err.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o gamma_err alpha.o beta_err.o" do
|
||||
comment "failed linking of two object files"
|
||||
stderr_equal /beta_var/
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_compile_and_link
|
||||
|
||||
create_file "alpha.c", "extern int beta ; int main() { return beta; }"
|
||||
create_file "beta.c", "int beta = 17;"
|
||||
create_file "alpha.c", "extern int beta_var ; int main() { return beta_var; }"
|
||||
create_file "beta.c", "int beta_var = 17;"
|
||||
create_file "beta_err.c", "int beta_var_err = 17;"
|
||||
|
||||
cmd "#{gcc} alpha.c beta.c" do
|
||||
comment "compile and link two source files"
|
||||
created_files "a.out"
|
||||
end
|
||||
|
||||
cmd "#{gcc} alpha.c beta.c -o gamma" do
|
||||
comment "compile and link two source files with -o"
|
||||
created_files "gamma"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o delta alpha.c beta.c" do
|
||||
comment "-o first"
|
||||
created_files "delta"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o delta_err alpha.c beta_err.c" do
|
||||
comment "failed compile and link two source files"
|
||||
stderr_equal /beta_var/
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
cmd "#{gcc} -c alpha.c" do
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "#{gcc} -o epsilon alpha.o beta.c" do
|
||||
comment "compile one file and link two files"
|
||||
created_files "epsilon"
|
||||
end
|
||||
|
||||
@ -213,16 +293,32 @@ class CMDTEST_gcc < Cmdtest::Testcase
|
||||
"int variable = VALUE;",
|
||||
]
|
||||
|
||||
create_file "alpha_err.c", [
|
||||
"#define VALUE(1729)",
|
||||
"int variable = VALUE;",
|
||||
]
|
||||
|
||||
cmd "#{gcc} -E alpha.c" do
|
||||
stdout_equal /"alpha.c"/
|
||||
stdout_equal /^int variable = 17;/
|
||||
end
|
||||
|
||||
cmd "#{gcc} -E alpha_err.c" do
|
||||
stdout_equal /"alpha_err.c"/
|
||||
stderr_equal /1729/
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
cmd "#{gcc} -E alpha.c -o alpha.preprocessed" do
|
||||
created_files "alpha.preprocessed"
|
||||
file_equal "alpha.preprocessed", /"alpha.c"/
|
||||
file_equal "alpha.preprocessed", /^int variable = 17;/
|
||||
end
|
||||
|
||||
cmd "#{gcc} -E alpha_err.c -o alpha_err.preprocessed" do
|
||||
stderr_equal /1729/
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
Reference in New Issue
Block a user