From 0806a403d65ef6a7f16e2c17aa8286100ebad5d7 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 15 Feb 2006 23:54:42 +0000 Subject: Fix Savannah bug #106: keep separate track of which variable we are expanding, and use that info when generating error messages instead of the file info, where appropriate. --- tests/scripts/functions/error | 22 ++++++--- tests/scripts/functions/foreach | 21 ++++++++ tests/scripts/functions/warning | 2 + tests/scripts/functions/word | 107 +++++++++++++++++++++++++++------------- 4 files changed, 112 insertions(+), 40 deletions(-) (limited to 'tests/scripts/functions') diff --git a/tests/scripts/functions/error b/tests/scripts/functions/error index ca9b4e4..0d61177 100644 --- a/tests/scripts/functions/error +++ b/tests/scripts/functions/error @@ -1,3 +1,5 @@ +# -*-Perl-*- + $description = "\ The following test creates a makefile to test the error function."; @@ -5,7 +7,8 @@ $details = ""; open(MAKEFILE,"> $makefile"); -print MAKEFILE <<'EOF'; +print MAKEFILE 'err = $(error Error found!) + ifdef ERROR1 $(error error is $(ERROR1)) endif @@ -25,32 +28,39 @@ endif some: ; @echo Some stuff -EOF +testvar: ; @: $(err) +'; close(MAKEFILE); # Test #1 &run_make_with_options($makefile, "ERROR1=yes", &get_logfile, 512); -$answer = "$makefile:2: *** error is yes. Stop.\n"; +$answer = "$makefile:4: *** error is yes. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #2 &run_make_with_options($makefile, "ERROR2=no", &get_logfile, 512); -$answer = "$makefile:6: *** error is no. Stop.\n"; +$answer = "$makefile:8: *** error is no. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #3 &run_make_with_options($makefile, "ERROR3=maybe", &get_logfile, 512); -$answer = "Some stuff\n$makefile:10: *** error is maybe. Stop.\n"; +$answer = "Some stuff\n$makefile:12: *** error is maybe. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #4 &run_make_with_options($makefile, "ERROR4=definitely", &get_logfile, 512); -$answer = "Some stuff\n$makefile:14: *** error is definitely. Stop.\n"; +$answer = "Some stuff\n$makefile:16: *** error is definitely. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #5 + +&run_make_with_options($makefile, "testvar", &get_logfile, 512); +$answer = "$makefile:22: *** Error found!. Stop.\n"; &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. diff --git a/tests/scripts/functions/foreach b/tests/scripts/functions/foreach index 1fde12e..904c160 100644 --- a/tests/scripts/functions/foreach +++ b/tests/scripts/functions/foreach @@ -57,4 +57,25 @@ $(foreach x,FOREACH,$(eval $(value mktarget)))', '', 'FOREACH'); + +# TEST 2: Check some error conditions. + +run_make_test(' +x = $(foreach ) +y = $x + +all: ; @echo $y', + '', + "#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'. Stop.", + 512); + +run_make_test(' +x = $(foreach ) +y := $x + +all: ; @echo $y', + '', + "#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'. Stop.", + 512); + 1; diff --git a/tests/scripts/functions/warning b/tests/scripts/functions/warning index ac0ad64..cd452d4 100644 --- a/tests/scripts/functions/warning +++ b/tests/scripts/functions/warning @@ -1,3 +1,5 @@ +# -*-Perl-*- + $description = "\ The following test creates a makefile to test the warning function."; diff --git a/tests/scripts/functions/word b/tests/scripts/functions/word index 398cd65..34527ea 100644 --- a/tests/scripts/functions/word +++ b/tests/scripts/functions/word @@ -46,11 +46,7 @@ $answer = "6\n" # Test error conditions -$makefile2 = &get_tmpfile; - -open(MAKEFILE, "> $makefile2"); -print MAKEFILE <<'EOF'; -FOO = foo bar biz baz +run_make_test('FOO = foo bar biz baz word-e1: ; @echo $(word ,$(FOO)) word-e2: ; @echo $(word abc ,$(FOO)) @@ -58,35 +54,78 @@ word-e3: ; @echo $(word 1a,$(FOO)) wordlist-e1: ; @echo $(wordlist ,,$(FOO)) wordlist-e2: ; @echo $(wordlist abc ,,$(FOO)) -wordlist-e3: ; @echo $(wordlist 1, 12a ,$(FOO)) - -EOF - -close(MAKEFILE); - -&run_make_with_options($makefile2, 'word-e1', &get_logfile, 512); -$answer = "$makefile2:3: *** non-numeric first argument to `word' function: ''. Stop.\n"; -&compare_output($answer, &get_logfile(1)); - -&run_make_with_options($makefile2, 'word-e2', &get_logfile, 512); -$answer = "$makefile2:4: *** non-numeric first argument to `word' function: 'abc '. Stop.\n"; -&compare_output($answer, &get_logfile(1)); - -&run_make_with_options($makefile2, 'word-e3', &get_logfile, 512); -$answer = "$makefile2:5: *** non-numeric first argument to `word' function: '1a'. Stop.\n"; -&compare_output($answer, &get_logfile(1)); - -&run_make_with_options($makefile2, 'wordlist-e1', &get_logfile, 512); -$answer = "$makefile2:7: *** non-numeric first argument to `wordlist' function: ''. Stop.\n"; -&compare_output($answer, &get_logfile(1)); - -&run_make_with_options($makefile2, 'wordlist-e2', &get_logfile, 512); -$answer = "$makefile2:8: *** non-numeric first argument to `wordlist' function: 'abc '. Stop.\n"; -&compare_output($answer, &get_logfile(1)); - -&run_make_with_options($makefile2, 'wordlist-e3', &get_logfile, 512); -$answer = "$makefile2:9: *** non-numeric second argument to `wordlist' function: ' 12a '. Stop.\n"; -&compare_output($answer, &get_logfile(1)); +wordlist-e3: ; @echo $(wordlist 1, 12a ,$(FOO))', + 'word-e1', + "#MAKEFILE#:3: *** non-numeric first argument to `word' function: ''. Stop.", + 512); + +run_make_test(undef, + 'word-e2', + "#MAKEFILE#:4: *** non-numeric first argument to `word' function: 'abc '. Stop.", + 512); + +run_make_test(undef, + 'word-e3', + "#MAKEFILE#:5: *** non-numeric first argument to `word' function: '1a'. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e1', + "#MAKEFILE#:7: *** non-numeric first argument to `wordlist' function: ''. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e2', + "#MAKEFILE#:8: *** non-numeric first argument to `wordlist' function: 'abc '. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e3', + "#MAKEFILE#:9: *** non-numeric second argument to `wordlist' function: ' 12a '. Stop.", + 512); + +# Test error conditions again, but this time in a variable reference + +run_make_test('FOO = foo bar biz baz + +W = $(word $x,$(FOO)) +WL = $(wordlist $s,$e,$(FOO)) + +word-e: ; @echo $(W) +wordlist-e: ; @echo $(WL)', + 'word-e x=', + "#MAKEFILE#:3: *** non-numeric first argument to `word' function: ''. Stop.", + 512); + +run_make_test(undef, + 'word-e x=abc', + "#MAKEFILE#:3: *** non-numeric first argument to `word' function: 'abc'. Stop.", + 512); + +run_make_test(undef, + 'word-e x=0', + "#MAKEFILE#:3: *** first argument to `word' function must be greater than 0. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e s= e=', + "#MAKEFILE#:4: *** non-numeric first argument to `wordlist' function: ''. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e s=abc e=', + "#MAKEFILE#:4: *** non-numeric first argument to `wordlist' function: 'abc'. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e s=4 e=12a', + "#MAKEFILE#:4: *** non-numeric second argument to `wordlist' function: '12a'. Stop.", + 512); + +run_make_test(undef, + 'wordlist-e s=0 e=12', + "#MAKEFILE#:4: *** invalid first argument to `wordlist' function: `0'. Stop.", + 512); # TEST #8 -- test $(firstword ) -- cgit v1.2.3