#!/usr/bin/perl
my
$reps
=
shift
|| 10;
my
%files
;
find(
{
wanted
=>
sub
{
return
unless
$File::Find::name
=~ /\.text$/;
(
my
$html_file
=
$File::Find::name
) =~ s/\.text$/.xhtml/;
return
unless
-f
$html_file
;
$files
{
$File::Find::name
} = read_file(
$File::Find::name
);
},
no_chdir
=> 1,
},
't/mdtest-data'
);
my
%captured
;
for
my
$file
(
keys
%files
) {
my
$ch
= Markdent::Handler::CaptureEvents->new();
my
$parser
= Markdent::Parser->new(
handler
=>
$ch
);
$parser
->parse(
markdown
=>
$files
{
$file
} );
$captured
{
$file
} = nfreeze(
$ch
->captured_events() );
}
cmpthese(
$reps
, {
'parse from scratch'
=> \
&parse
,
'replay from captured events'
=> \
&replay
,
},
);
sub
parse {
for
my
$file
(
keys
%files
) {
my
$html
= _html_handler();
my
$parser
= Markdent::Parser->new(
handler
=>
$html
);
$parser
->parse(
markdown
=>
$files
{
$file
} );
}
}
sub
replay {
for
my
$file
(
keys
%files
) {
my
$html
= _html_handler();
my
$captured
= thaw(
$captured
{
$file
} );
$captured
->replay_events(
$html
);
}
}
sub
_html_handler {
my
$buffer
=
q{}
;
open
my
$fh
,
'>'
, \
$buffer
or
die
$!;
return
Markdent::Handler::HTMLStream->new(
title
=>
'Benchmark'
,
output
=>
$fh
,
);
}