<?php
/*
* test.php
*
* @(#) test.php,v 1.14 2020/07/26 15:43:03 mlemos Exp
*
*/
$__test_sets = array(
'own'=>array(
'images',
'sample',
'headers',
'lists',
'links',
'strong',
'emphasis',
'code',
'image_links',
'lists_with_code',
),
'original'=>array(
'Amps and angle encoding',
'Auto links',
'Backslash escapes',
'Blockquotes with code blocks',
'Hard-wrapped paragraphs with list-like lines',
'Horizontal rules',
'Inline HTML (Advanced)',
'Inline HTML comments',
'Inline HTML (Simple)',
'Links, inline style',
'Links, reference style',
'Literal quotes in titles',
'Markdown Documentation - Basics',
'Markdown Documentation - Syntax',
'Nested blockquotes',
'Ordered and unordered lists',
'Strong and em together',
'Tabs',
'Tidyness',
)
);
$__tests=array(
'images'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/images.txt',
'expectedfile'=>'expect/images.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/images.md'
)
)
),
'sample'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/sample.txt',
'expectedfile'=>'expect/sample.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/sample.md'
)
)
),
'headers'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/headers.txt',
'expectedfile'=>'expect/headers.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/headers.md'
)
)
),
'lists'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/lists.txt',
'expectedfile'=>'expect/lists.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/lists.md'
)
)
),
'links'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/links.txt',
'expectedfile'=>'expect/links.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/links.md'
)
)
),
'strong'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/strong.txt',
'expectedfile'=>'expect/strong.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/strong.md'
)
)
),
'emphasis'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/emphasis.txt',
'expectedfile'=>'expect/emphasis.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/emphasis.md'
)
)
),
'code'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/code.txt',
'expectedfile'=>'expect/code.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/code.md'
)
)
),
'image_links'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/image_links.txt',
'expectedfile'=>'expect/image_links.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/image_links.md'
)
)
),
'lists_with_code'=>array(
'script'=>'../test_markdown_parser.php',
'generatedfile'=>'generated/lists_with_code.txt',
'expectedfile'=>'expect/lists_with_code.txt',
'options'=>array(
'parameters'=>array(
'File'=>'sample/lists_with_code.md'
)
)
),
'Amps and angle encoding'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Amps-and-angle-encoding.html',
'expectedfile'=>'expect/Amps-and-angle-encoding.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Amps-and-angle-encoding.text'
)
)
),
'Auto links'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Auto-links.html',
'expectedfile'=>'expect/Auto-links.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Auto-links.text'
)
)
),
'Backslash escapes'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Backslash-escapes.html',
'expectedfile'=>'expect/Backslash-escapes.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Backslash-escapes.text'
)
)
),
'Blockquotes with code blocks'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Blockquotes-with-code-blocks.html',
'expectedfile'=>'expect/Blockquotes-with-code-blocks.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Blockquotes-with-code-blocks.text'
)
)
),
'Hard-wrapped paragraphs with list-like lines'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Hard-wrapped-paragraphs-with-list-like-lines.html',
'expectedfile'=>'expect/Hard-wrapped-paragraphs-with-list-like-lines.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Hard-wrapped-paragraphs-with-list-like-lines.text'
)
)
),
'Horizontal rules'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Horizontal-rules.html',
'expectedfile'=>'expect/Horizontal-rules.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Horizontal-rules.text'
)
)
),
'Inline HTML (Advanced)'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Inline-HTML-Advanced.html',
'expectedfile'=>'expect/Inline-HTML-Advanced.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Inline-HTML-Advanced.text'
)
)
),
'Inline HTML comments'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Inline-HTML-comments.html',
'expectedfile'=>'expect/Inline-HTML-comments.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Inline-HTML-comments.text'
)
)
),
'Inline HTML (Simple)'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Inline-HTML-Simple.html',
'expectedfile'=>'expect/Inline-HTML-Simple.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Inline-HTML-Simple.text'
)
)
),
'Links, inline style'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Links-inline-style.html',
'expectedfile'=>'expect/Links-inline-style.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Links-inline-style.text'
)
)
),
'Links, reference style'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Links-reference-style.html',
'expectedfile'=>'expect/Links-reference-style.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Links-reference-style.text'
)
)
),
'Literal quotes in titles'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Literal-quotes-in-titles.html',
'expectedfile'=>'expect/Literal-quotes-in-titles.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Literal-quotes-in-titles.text'
)
)
),
'Markdown Documentation - Basics'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Markdown-Documentation-Basics.html',
'expectedfile'=>'expect/Markdown-Documentation-Basics.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Markdown-Documentation-Basics.text'
)
)
),
'Markdown Documentation - Syntax'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Markdown-Documentation-Syntax.html',
'expectedfile'=>'expect/Markdown-Documentation-Syntax.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Markdown-Documentation-Syntax.text'
)
)
),
'Nested blockquotes'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Nested-blockquotes.html',
'expectedfile'=>'expect/Nested-blockquotes.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Nested-blockquotes.text'
)
)
),
'Ordered and unordered lists'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Ordered-and-unordered-lists.html',
'expectedfile'=>'expect/Ordered-and-unordered-lists.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Ordered-and-unordered-lists.text'
)
)
),
'Strong and em together'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Strong-and-em-together.html',
'expectedfile'=>'expect/Strong-and-em-together.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Strong-and-em-together.text'
)
)
),
'Tabs'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Tabs.html',
'expectedfile'=>'expect/Tabs.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Tabs.text'
)
)
),
'Tidyness'=>array(
'script'=>'../markdown_to_html.php',
'generatedfile'=>'generated/Tidyness.html',
'expectedfile'=>'expect/Tidyness.html',
'options'=>array(
'parameters'=>array(
'File'=>'sample/Tidyness.text'
)
)
),
);
define('__TEST',1);
if(IsSet($_SERVER['argv'])
&& GetType($_SERVER['argv']) == 'array'
&& Count($_SERVER['argv']) > 1)
{
$__few = array();
for($__a = 1; $__a < count($_SERVER['argv']); ++$__a)
{
$__name = $_SERVER['argv'][$__a];
if(!IsSet($__tests[$__name]))
{
if(!IsSet($__test_sets[$__name]))
die($__name." is not a valid test name.\n");
foreach($__test_sets[$__name] as $__set_name)
{
if(!IsSet($__tests[$__set_name]))
die($__set_name." is not a valid test name from the set ".$__name.".\n");
$__few[$__set_name] = $__tests[$__set_name];
}
}
else
$__few[$__name] = $__tests[$__name];
}
$__tests = $__few;
}
for($__different=$__test=$__checked=0, Reset($__tests); $__test<count($__tests); Next($__tests), $__test++)
{
$__name=Key($__tests);
$__script=$__tests[$__name]['script'];
if(!file_exists($__script))
{
echo "\n".'Test script '.$__script.' does not exist.'."\n".str_repeat('_',80)."\n";
continue;
}
echo 'Test "'.$__name.'": ... ';
flush();
if(IsSet($__tests[$__name]['options']))
$__test_options=$__tests[$__name]['options'];
else
$__test_options=array();
ob_start();
require($__script);
$output=ob_get_contents();
ob_end_clean();
$generated=$__tests[$__name]['generatedfile'];
if(!($file = fopen($generated, 'wb')))
die('Could not create the generated output file '.$generated."\n");
if(!fputs($file, $output)
|| !fclose($file))
die('Could not save the generated output to the file '.$generated."\n");
$expected=$__tests[$__name]['expectedfile'];
if(!file_exists($expected))
{
echo "\n".'Expected output file '.$expected.' does not exist.'."\n".str_repeat('_',80)."\n";
continue;
}
$diff=array();
exec('diff "'.$expected.'" "'.$generated.'"', $diff);
if(count($diff))
{
echo "FAILED\n".'Output of script '.$__script.' is different from the expected file '.$expected." .\n".str_repeat('_',80)."\n";
for($line=0; $line<count($diff); $line++)
echo $diff[$line]."\n";
echo str_repeat('_',80)."\n";
flush();
$__different++;
}
else
echo "OK\n";
$__checked++;
}
echo $__checked.' test '.($__checked==1 ? 'was' : 'were').' performed, '.($__checked!=$__test ? (($__test-$__checked==1) ? ' 1 test was skipped, ' : ($__test-$__checked).' tests were skipped, ') : '').($__different ? $__different.' failed' : 'none has failed').'.'."\n";
?>
|