1898184e3Ssthen#!/usr/bin/perl -w
2898184e3Ssthen
3898184e3SsthenBEGIN {
4898184e3Ssthen    unshift @INC, 't/lib';
5898184e3Ssthen}
6898184e3Ssthen
7898184e3Ssthenuse strict;
8898184e3Ssthenuse warnings;
9898184e3Ssthen
10898184e3Ssthenuse Carp;
11898184e3Ssthenuse Config;
12898184e3Ssthenuse ExtUtils::MM;
13898184e3Ssthenuse MakeMaker::Test::Utils;
14898184e3Ssthenuse File::Temp;
15898184e3Ssthenuse Cwd 'abs_path';
16898184e3Ssthen
17b8851fccSafresh1use ExtUtils::MM;
189f11ffb7Safresh1use Test::More
199f11ffb7Safresh1    !MM->can_run(make()) && $ENV{PERL_CORE} && $Config{'usecrosscompile'}
20b8851fccSafresh1    ? (skip_all => "cross-compiling and make not available")
219f11ffb7Safresh1    : (tests => 18);
22898184e3Ssthen
23898184e3Ssthen#--------------------- Setup
24898184e3Ssthen
25898184e3Ssthenmy $cwd  = abs_path;
26898184e3Ssthenmy $perl = which_perl;
27898184e3Ssthenmy $make = make_run();
28*eac174f2Safresh1my $mm = bless { NAME => "Foo", MAKE => $Config{make}, PARENT_NAME => '', PERL_SRC => '' }, "MM";
29898184e3Ssthen$mm->init_INST;   # *PERLRUN needs INIT_*
30898184e3Ssthen$mm->init_PERL;   # generic ECHO needs ABSPERLRUN
31898184e3Ssthen$mm->init_tools;  # need ECHO
32898184e3Ssthen
33898184e3Ssthen# Run Perl with the currently installing MakeMaker
34898184e3Ssthen$mm->{$_} .= q[ "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"] for qw( PERLRUN FULLPERLRUN ABSPERLRUN );
35898184e3Ssthen
36b8851fccSafresh1#see sub specify_shell
37b8851fccSafresh1my $shell = $^O eq 'MSWin32' && $mm->is_make_type('gmake') ? $ENV{COMSPEC} : undef;
38b8851fccSafresh1
39898184e3Ssthen#------------------- Testing functions
40898184e3Ssthen
41898184e3Ssthensub test_for_echo {
42898184e3Ssthen    my($calls, $want, $name) = @_;
43898184e3Ssthen    my $output_file = $calls->[0][1];
44898184e3Ssthen
45898184e3Ssthen    note "Testing $name";
46898184e3Ssthen
47898184e3Ssthen    my $dir = File::Temp->newdir();
48898184e3Ssthen    chdir $dir;
49898184e3Ssthen    note "Temp dir: $dir";
50898184e3Ssthen
51898184e3Ssthen    # Write a Makefile to test the output of echo
52898184e3Ssthen    {
53898184e3Ssthen        open my $makefh, ">", "Makefile" or croak "Can't open Makefile: $!";
54898184e3Ssthen        print $makefh "FOO=42\n";       # a variable to test with
55898184e3Ssthen
56898184e3Ssthen        for my $key (qw(INST_ARCHLIB INST_LIB PERL ABSPERL ABSPERLRUN ECHO)) {
57898184e3Ssthen            print $makefh "$key=$mm->{$key}\n";
58898184e3Ssthen        }
59b8851fccSafresh1        print $makefh "SHELL=$shell\n" if defined $shell;
60898184e3Ssthen
61898184e3Ssthen        print $makefh "all :\n";
62898184e3Ssthen        for my $args (@$calls) {
63898184e3Ssthen            print $makefh map { "\t$_\n" } $mm->echo(@$args);
64898184e3Ssthen        }
65898184e3Ssthen    }
66898184e3Ssthen
67898184e3Ssthen    # Run the Makefile
68898184e3Ssthen    ok run($make), "make: $name";
69898184e3Ssthen
70898184e3Ssthen    # Check it made the file in question
71898184e3Ssthen    ok -e $output_file, "$output_file exists";
72898184e3Ssthen    open my $fh, "<", $output_file or croak "Can't open $output_file: $!";
73898184e3Ssthen    is join("", <$fh>), $want, "contents";
74898184e3Ssthen
75898184e3Ssthen    chdir $cwd;
76898184e3Ssthen}
77898184e3Ssthen
78898184e3Ssthen
79898184e3Ssthen#---------------- Tests begin
80898184e3Ssthen
81898184e3Ssthentest_for_echo(
82898184e3Ssthen    [["Foo", "bar.txt"]],
83898184e3Ssthen    "Foo\n",
84898184e3Ssthen    "simple echo"
85898184e3Ssthen);
86898184e3Ssthen
87898184e3Ssthentest_for_echo(
88898184e3Ssthen    [["Foo\nBar\nBaz Biff\n", "something.txt"]],
89898184e3Ssthen    "Foo\nBar\nBaz Biff\n",
90898184e3Ssthen    "multiline echo"
91898184e3Ssthen);
92898184e3Ssthen
93898184e3Ssthentest_for_echo(
94898184e3Ssthen    [['$something$', "something.txt"]],
95898184e3Ssthen    '$something$'."\n",
96898184e3Ssthen    "dollar signs escaped"
97898184e3Ssthen);
98898184e3Ssthen
99898184e3Ssthentest_for_echo(
100898184e3Ssthen    [['$(something)', "something.txt"]],
101898184e3Ssthen    '$(something)'."\n",
102898184e3Ssthen    "variables escaped"
103898184e3Ssthen);
104898184e3Ssthen
105898184e3Ssthentest_for_echo(
106898184e3Ssthen    [['Answer: $(FOO)', "bar.txt", { allow_variables => 1 }]],
107898184e3Ssthen    "Answer: 42\n",
108898184e3Ssthen    "allow_variables"
109898184e3Ssthen);
110898184e3Ssthen
111898184e3Ssthentest_for_echo(
112898184e3Ssthen    [
113898184e3Ssthen        ["Foo", "bar.txt"],
114898184e3Ssthen        ["Bar", "bar.txt", { append => 1 }],
115898184e3Ssthen        ["Baz", "bar.txt", 1],
116898184e3Ssthen    ],
117898184e3Ssthen    "Foo\nBar\nBaz\n",
118898184e3Ssthen    "append"
119898184e3Ssthen);
120