| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #!/usr/bin/perl
- #
- # MarkdownTester -- Run tests for Markdown implementations
- #
- # Copyright (c) 2004-2005 John Gruber
- # <http://daringfireball.net/projects/markdown/>
- #
- use strict;
- use warnings;
- use Getopt::Long;
- use Benchmark;
- our $VERSION = '1.0.2';
- # Sat 24 Dec 2005
- my $time_start = new Benchmark;
- my $test_dir = "Tests";
- my $script = "./Markdown.pl";
- my $use_tidy = 0;
- my ($flag_version);
- GetOptions (
- "script=s" => \$script,
- "testdir=s" => \$test_dir,
- "tidy" => \$use_tidy,
- "version" => \$flag_version,
- );
- if($flag_version) {
- my $progname = $0;
- $progname =~ s{.*/}{};
- die "$progname version $VERSION\n";
- }
- unless (-d $test_dir) { die "'$test_dir' is not a directory.\n"; }
- unless (-f $script) { die "$script does not exist.\n"; }
- unless (-x $script) { die "$script is not executable.\n"; }
- my $tests_passed = 0;
- my $tests_failed = 0;
- TEST:
- foreach my $testfile (glob "$test_dir/*.text") {
- my $testname = $testfile;
- $testname =~ s{.*/(.+)\.text$}{$1}i;
- print "$testname ... ";
- # Look for a corresponding .html file for each .text file:
- my $resultfile = $testfile;
- $resultfile =~ s{\.text$}{\.html}i;
- unless (-f $resultfile) {
- print "'$resultfile' does not exist.\n\n";
- next TEST;
- }
-
- # open(TEST, $testfile) || die("Can't open testfile: $!");
- open(RESULT, $resultfile) || die("Can't open resultfile: $!");
- undef $/;
- # my $t_input = <TEST>;
- my $t_result = <RESULT>;
- my $t_output = `'$script' '$testfile'`;
- # Normalize the output and expected result strings:
- $t_result =~ s/\s+\z//; # trim trailing whitespace
- $t_output =~ s/\s+\z//; # trim trailing whitespace
- if ($use_tidy) {
- # Escape the strings, pass them through to CLI tidy tool for tag-level equivalency
- $t_result =~ s{'}{'\\''}g; # escape ' chars for shell
- $t_output =~ s{'}{'\\''}g;
- $t_result = `echo '$t_result' | tidy -quiet --show-warnings n`;
- $t_output = `echo '$t_output' | tidy -quiet --show-warnings n`;
- }
- if ($t_output eq $t_result) {
- print "OK\n";
- $tests_passed++;
- }
- else {
- print "FAILED\n\n";
- $tests_failed++;
- }
- }
- print "\n\n";
- print "$tests_passed passed; $tests_failed failed.\n";
- my $time_end = new Benchmark;
- my $time_diff = timediff($time_end, $time_start);
- print "Benchmark: ", timestr($time_diff), "\n";
- __END__
- =pod
- =head1 NAME
- B<MarkdownTest>
- =head1 SYNOPSIS
- B<MarkdownTest.pl> [ B<--options> ] [ I<file> ... ]
- =head1 DESCRIPTION
- =head1 OPTIONS
- Use "--" to end switch parsing. For example, to open a file named "-z", use:
- MarkdownTest.pl -- -z
- =over 4
- =item B<--script>
- Specify the path to the Markdown script to test. Defaults to
- "./Markdown.pl". Example:
- ./MarkdownTest.pl --script ./PHP-Markdown/php-markdown
- =item B<--testdir>
- Specify the path to a directory containing test data. Defaults to "Tests".
- =item B<--tidy>
- Flag to turn on using the command line 'tidy' tool to normalize HTML
- output before comparing script output to the expected test result.
- Assumes that the 'tidy' command is available in your PATH. Defaults to
- off.
- =back
- =head1 BUGS
- =head1 VERSION HISTORY
- 1.0 Mon 13 Dec 2004-2005
- 1.0.1 Mon 19 Sep 2005
- + Better handling of case when foo.text exists, but foo.html doesn't.
- It now prints a message and moves on, rather than dying.
- =head1 COPYRIGHT AND LICENSE
- Copyright (c) 2004-2005 John Gruber
- <http://daringfireball.net/>
- All rights reserved.
- This is free software; you may redistribute it and/or modify it under
- the same terms as Perl itself.
- =cut
|