Update the test template. A few fixes in run_make_test().

Rename implicit_prereq_eval to patternrules, to be the start of a suite
of tests of pattern rules.
This commit is contained in:
Paul Smith 2004-09-22 04:36:17 +00:00
parent 73e7767ffc
commit 29d78ddb28
5 changed files with 66 additions and 122 deletions

View file

@ -1,8 +1,17 @@
2004-09-22 Paul D. Smith <psmith@gnu.org>
* run_make_tests.pl (run_make_test): Don't add newlines to the
makestring or answer if they are completely empty.
* scripts/features/patternrules: Rename from implicit_prereq_eval.
* scripts/test_template: Rework the template.
2004-09-21 Boris Kolpackov <boris@kolpackov.net>
* run_make_tests.pl: Change `#!/usr/local/bin/perl' to be
`#!/usr/bin/env perl'.
* scripts/features/implicit_prereq_eval: Test implicit rule
prerequisite evaluation code.

View file

@ -76,7 +76,7 @@ sub run_make_test
}
# Make sure it ends in a newline.
$makestring =~ /\n$/s or $makestring .= "\n";
$makestring && $makestring !~ /\n$/s and $makestring .= "\n";
# Replace @MAKEFILE@ with the makefile name and @MAKE@ with the path to
# make
@ -91,7 +91,7 @@ sub run_make_test
# Do the same processing on $answer as we did on $makestring.
$answer =~ /\n$/s or $answer .= "\n";
$answer && $answer !~ /\n$/s and $answer .= "\n";
$answer =~ s/#MAKEFILE#/$makefile/g;
$answer =~ s/#MAKE#/$make_name/g;

View file

@ -1,64 +0,0 @@
$description = "Test implicit rule prerequisite evaluation code.";
$details = "The makefile created by this test has a set of implicit rule
pairs with the first rule usually not applying because its prerequisites
cannot be made and the second rule which should succeed.";
open(MAKEFILE,"> $makefile");
# The contents of the Makefile ...
print MAKEFILE <<EOF;
.PHONY: all
all: case.1 case.2 case.3
a: void
# 1 - existing file
#
%.1: void
\@false
%.1: $makefile
\@true
# 2 - phony
#
%.2: void
\@false
%.2: 2.phony
\@true
.PHONY: 2.phony
# 3 - implicit-phony
#
%.3: void
\@false
%.3: 3.implicit-phony
\@true
3.implicit-phony:
EOF
close(MAKEFILE);
&run_make_with_options($makefile,
"",
&get_logfile,
0);
# This makefile doesn't produce anything except exit code.
#
&compare_output("",&get_logfile(1));
# This tells the test driver that the perl test script executed properly.
1;

View file

@ -0,0 +1,40 @@
# -*-perl-*-
$description = "Test pattern rules.";
$details = "";
# Make sure that multiple patterns where the same target can be built are
# searched even if the first one fails to match properly.
run_make_test('
.PHONY: all
all: case.1 case.2 case.3
a: void
# 1 - existing file
%.1: void
@false
%.1: #MAKEFILE#
@true
# 2 - phony
%.2: void
@false
%.2: 2.phony
@true
.PHONY: 2.phony
# 3 - implicit-phony
%.3: void
@false
%.3: 3.implicit-phony
@true
3.implicit-phony:
', '', '');
# This tells the test driver that the perl test script executed properly.
1;

View file

@ -1,64 +1,23 @@
$description = "The following test creates a makefile to ...
<FILL IN DESCRIPTION HERE> ";
# -*-perl-*-
$description = "<FILL IN SHORT DESCRIPTION HERE>";
$details = "<FILL IN DETAILS OF HOW YOU TEST WHAT YOU SAY YOU ARE TESTING>";
# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET
# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF
# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.
# EXAMPLE: $makefile2 = &get_tmpfile;
# Run a make test. See the documentation of run_make_test() in
# run_make_tests.pl, but briefly the first argument is a string with the
# contents of a makefile to be tested, the second is a string containing the
# arguments to be passed to the make invocation, the third is a string
# containing the expected output. The fourth is the expected exit code for
# make. If not specified, it's assumed that the make program should succeed
# (exit with 0).
open(MAKEFILE,"> $makefile");
run_make_test('Your test makefile goes here',
'Arguments to pass to make go here',
'Expected output from the invocation goes here');
# The Contents of the MAKEFILE ...
# There are various special tokens, options, etc. See the full documentation
# in run_make_tests.pl.
print MAKEFILE " <FILL IN THE CONTENTS OF THE MAKEFILE HERE> \n";
# END of Contents of MAKEFILE
close(MAKEFILE);
# Run make. You may specify a makefile, but if you don't want to, just
# insert "" where $make_filename is now. You may also specify specific
# options to run make with, but you also don't have to. (Insert "" where it
# says <FILL IN OPTIONS HERE>), The last field in this subroutine call
# is the code which is returned from make. If you think that make should
# execute with no errors, you may OPTIONALLY put 0; Otherwise put the
# error code that you expect back from make for this test.
# Every time you run make, you just need to say &get_logfile and that
# subroutine will get a new logfile name for you in incrementing order
# according to how many times you call it within ONE test. It is
# reset to 0 at the beginning of every new test script.
&run_make_with_options($makefile,
"<FILL IN OPTIONS HERE>",
&get_logfile,
0);
# THE REST OF THIS FILE DEPENDS HIGHLY ON WHAT KIND OF TEST YOU ARE
# CREATING, SO IT WILL VARY. BASICALLY, YOU MAY INSERT ANYTHING YOU
# WISH AT THIS POINT TO SEE IF THE TEST WORKED OK. IF THERE ARE
# ADDITIONAL TESTS BESIDES &compare_output, AND IT FAILES, YOU
# MUST *** SET $test_passed = 0 !!! ***
# Create the answer to what should be produced by this Makefile
$answer = "<INSERT ANSWER HERE>";
# COMPARE RESULTS
# In this call to compare output, you should use the call &get_logfile(1)
# to send the name of the last logfile created. You may also use
# the special call &get_logfile(1) which returns the same as &get_logfile(1).
&compare_output($answer,&get_logfile(1));
# If you wish to &error ("abort
") if the compare fails, then add a "|| &error ("abort
")" to the
# end of the previous line.
# This tells the test driver that the perl test script executed properly.
1;