add example file testing GCC command line interface
This commit is contained in:
parent
2ef8fce6ae
commit
0075282c4a
226
examples/CMDTEST_gcc.rb
Normal file
226
examples/CMDTEST_gcc.rb
Normal file
@ -0,0 +1,226 @@
|
||||
#----------------------------------------------------------------------
|
||||
# CMDTEST_gcc.rb
|
||||
#----------------------------------------------------------------------
|
||||
# Copyright 2010 Johan Holmberg.
|
||||
#----------------------------------------------------------------------
|
||||
# This file is part of "cmdtest".
|
||||
#
|
||||
# "cmdtest" is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# "cmdtest" is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with "cmdtest". If not, see <http://www.gnu.org/licenses/>.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# Example of testing GCC command line interface using "cmdtest".
|
||||
#
|
||||
|
||||
class CMDTEST_gcc < Cmdtest::Testcase
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_no_arguments
|
||||
cmd "gcc" do
|
||||
stderr_equal [
|
||||
/^.*gcc.*: no input files/,
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_nonexisting_input
|
||||
cmd "gcc -c non-existing.c" do
|
||||
stderr_equal [
|
||||
/^.*gcc.*: non-existing.c: No such file/,
|
||||
/^.*gcc.*: no input files/,
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
cmd "gcc non-existing.c" do
|
||||
stderr_equal [
|
||||
/^.*gcc.*: non-existing.c: No such file/,
|
||||
/^.*gcc.*: no input files/,
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
|
||||
cmd "gcc non-existing.o" do
|
||||
stderr_equal [
|
||||
/^.*gcc.*: non-existing.o: No such file/,
|
||||
/^.*gcc.*: no input files/,
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_compile_only
|
||||
|
||||
create_file "alpha.c", "int add_alpha(int x, int y) { return x+y; }"
|
||||
|
||||
cmd "gcc -c alpha.c" do
|
||||
created_files "alpha.o"
|
||||
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; }"
|
||||
|
||||
cmd "gcc -c beta.c gamma.c" do
|
||||
created_files "beta.o", "gamma.o"
|
||||
end
|
||||
|
||||
cmd "gcc alpha.c -c" do
|
||||
written_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "gcc beta.c -c gamma.c" do
|
||||
written_files "beta.o", "gamma.o"
|
||||
end
|
||||
|
||||
cmd "gcc -c alpha.o" do
|
||||
stderr_equal [
|
||||
/^.*gcc.*: alpha.o: linker input file unused because linking not done/,
|
||||
]
|
||||
end
|
||||
|
||||
cmd "gcc -c alpha.o beta.o" do
|
||||
stderr_equal [
|
||||
/^.*gcc.*: alpha.o: linker input file unused because linking not done/,
|
||||
/^.*gcc.*: beta.o: linker input file unused because linking not done/,
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_compile_output
|
||||
|
||||
create_file "alpha.c", "int add_alpha(int x, int y) { return x+y; }"
|
||||
|
||||
cmd "gcc -c alpha.c -o alpha.o" do
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "gcc -c alpha.c -o beta.o" do
|
||||
created_files "beta.o"
|
||||
end
|
||||
|
||||
cmd "gcc -o gamma.o -c alpha.c" do
|
||||
created_files "gamma.o"
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_link
|
||||
|
||||
create_file "alpha.c", "int main() { return 17; }"
|
||||
|
||||
cmd "gcc -c alpha.c" do
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "gcc alpha.o" do
|
||||
created_files "a.out"
|
||||
end
|
||||
|
||||
cmd "gcc alpha.o -o beta" do
|
||||
created_files "beta"
|
||||
end
|
||||
|
||||
cmd "gcc -o gamma alpha.o" do
|
||||
created_files "gamma"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_link_2
|
||||
|
||||
create_file "alpha.c", "extern int beta ; int main() { return beta; }"
|
||||
create_file "beta.c", "int beta = 17;"
|
||||
|
||||
cmd "gcc -c alpha.c beta.c" do
|
||||
created_files "alpha.o", "beta.o"
|
||||
end
|
||||
|
||||
cmd "gcc alpha.o beta.o" do
|
||||
created_files "a.out"
|
||||
end
|
||||
|
||||
cmd "gcc alpha.o beta.o -o beta" do
|
||||
created_files "beta"
|
||||
end
|
||||
|
||||
cmd "gcc -o gamma alpha.o beta.o" do
|
||||
created_files "gamma"
|
||||
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;"
|
||||
|
||||
cmd "gcc alpha.c beta.c" do
|
||||
created_files "a.out"
|
||||
end
|
||||
|
||||
cmd "gcc alpha.c beta.c -o gamma" do
|
||||
created_files "gamma"
|
||||
end
|
||||
|
||||
cmd "gcc -o delta alpha.c beta.c" do
|
||||
created_files "delta"
|
||||
end
|
||||
|
||||
cmd "gcc -c alpha.c" do
|
||||
created_files "alpha.o"
|
||||
end
|
||||
|
||||
cmd "gcc -o epsilon alpha.o beta.c" do
|
||||
created_files "epsilon"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
def test_preprocess
|
||||
|
||||
create_file "alpha.c", [
|
||||
"#define VALUE 17",
|
||||
"int variable = VALUE;",
|
||||
]
|
||||
|
||||
cmd "gcc -E alpha.c" do
|
||||
stdout_equal /"alpha.c"/
|
||||
stdout_equal /^int variable = 17;/
|
||||
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
|
||||
end
|
||||
|
||||
#----------------------------------------
|
||||
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user