summaryrefslogtreecommitdiff
path: root/tests/scripts
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2006-02-15 23:54:42 +0000
committerPaul Smith <psmith@gnu.org>2006-02-15 23:54:42 +0000
commit0806a403d65ef6a7f16e2c17aa8286100ebad5d7 (patch)
treeefb7503681a70739ad6e4659ebefc701975ced7f /tests/scripts
parent86af3872a910e314d20ef911fad1819ad90c1291 (diff)
downloadgunmake-0806a403d65ef6a7f16e2c17aa8286100ebad5d7.tar.gz
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.
Diffstat (limited to 'tests/scripts')
-rw-r--r--tests/scripts/functions/error22
-rw-r--r--tests/scripts/functions/foreach21
-rw-r--r--tests/scripts/functions/warning2
-rw-r--r--tests/scripts/functions/word107
-rw-r--r--tests/scripts/options/warn-undefined-variables25
-rw-r--r--tests/scripts/variables/negative46
6 files changed, 183 insertions, 40 deletions
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 )
diff --git a/tests/scripts/options/warn-undefined-variables b/tests/scripts/options/warn-undefined-variables
new file mode 100644
index 0000000..34bfaea
--- /dev/null
+++ b/tests/scripts/options/warn-undefined-variables
@@ -0,0 +1,25 @@
+# -*-perl-*-
+
+$description = "Test the --warn-undefined-variables option.";
+
+$details = "Verify that warnings are printed for referencing undefined variables.";
+
+# Without --warn-undefined-variables, nothing should happen
+run_make_test('
+EMPTY =
+EREF = $(EMPTY)
+UREF = $(UNDEFINED)
+
+SEREF := $(EREF)
+SUREF := $(UREF)
+
+all: ; @echo ref $(EREF) $(UREF)',
+ '', 'ref');
+
+# With --warn-undefined-variables, it should warn me
+run_make_test(undef, '--warn-undefined-variables',
+ "#MAKEFILE#:7: warning: undefined variable `UNDEFINED'
+#MAKEFILE#:9: warning: undefined variable `UNDEFINED'
+ref");
+
+1;
diff --git a/tests/scripts/variables/negative b/tests/scripts/variables/negative
new file mode 100644
index 0000000..16a72b8
--- /dev/null
+++ b/tests/scripts/variables/negative
@@ -0,0 +1,46 @@
+# -*-perl-*-
+
+$description = "Run some negative tests (things that should fail).";
+
+# TEST #0
+# Check that non-terminated variable references are detected (and
+# reported using the best filename/lineno info
+run_make_test('
+foo = bar
+x = $(foo
+y = $x
+
+all: ; @echo $y
+',
+ '', '#MAKEFILE#:3: *** unterminated variable reference. Stop.',
+ 512);
+
+# TEST #1
+# Bogus variable value passed on the command line.
+run_make_test(undef,
+ 'x=\$\(other',
+ '#MAKEFILE#:4: *** unterminated variable reference. Stop.',
+ 512);
+
+# TEST #2
+# Again, but this time while reading the makefile.
+run_make_test('
+foo = bar
+x = $(foo
+y = $x
+
+z := $y
+
+all: ; @echo $y
+',
+ '', '#MAKEFILE#:3: *** unterminated variable reference. Stop.',
+ 512);
+
+# TEST #3
+# Bogus variable value passed on the command line.
+run_make_test(undef,
+ 'x=\$\(other',
+ '#MAKEFILE#:4: *** unterminated variable reference. Stop.',
+ 512);
+
+1;