#!/usr/bin/perl use warnings; use strict; use File::Temp qw(tempfile); BEGIN { use Test::More tests => 23; use_ok("Pod::FromActionscript", "asdoc2pod"); } my $out; my $trivial_input = "/**\n\@author Foo\n*/\nclass Foo{}\n"; my $trivial_output = "=head1 AUTHOR\n\nFoo\n\n"; my $trivial_code = "/*\n\n=head1 AUTHOR\n\nFoo\n\n=cut\n*/\nclass Foo{}\n"; ## Failure cases eval { asdoc2pod(out => \$out); }; like($@, qr/no input/i, "no input"); eval { asdoc2pod(infile => "nosuchfile"); }; like($@, qr/failed to read/i, "no such input file"); eval { asdoc2pod(in => $trivial_input); }; like($@, qr/no output/i, "no output"); eval { asdoc2pod(in => $trivial_input, out => ""); }; like($@, qr/not a ref/i, "output not a reference"); eval { asdoc2pod(in => $trivial_input, outfile => "nosuchdir/out"); }; like($@, qr/failed to write/i, "no such output file"); { local $SIG{__WARN__} = sub {}; asdoc2pod(in => "/**\nfoo\n*/ ", out => \$out); is($out, "", "out of place comment"); $SIG{__WARN__} = sub {die @_}; eval { asdoc2pod(in => "/**\nfoo\n*/ ", out => \$out); }; like($@, qr/unhandled/i, "out of place comment"); eval { asdoc2pod(in => "/**\n\@foo\n*/\nclass Foo{}\n", out => \$out); }; like($@, qr/unhandled.*foo/i, "unknown directive"); } ## Simple successes asdoc2pod(in => "", out => \$out); is($out, "", "empty input"); asdoc2pod(in => "foo", out => \$out); is($out, "", "no comments"); asdoc2pod(in => "foo /*\n bar\n */", out => \$out); is($out, "", "plain comments"); asdoc2pod(in => "foo", out => \$out, code => 1); is($out, "foo", "no comments, code"); asdoc2pod(in => "foo /*\n bar\n */", out => \$out, code => 1); is($out, "foo /*\n bar\n */", "plain comments, code"); asdoc2pod(in => $trivial_input, out => \$out); is($out, $trivial_output, "basic content"); asdoc2pod(in => $trivial_input, out => \$out, code => 1); is($out, $trivial_code, "basic content, code"); eval { asdoc2pod(in => "foo"); }; ok(!$@, "omitting out allowed with empty output"); { my ($ofh, $ofname) = tempfile(UNLINK => 1); asdoc2pod(in => $trivial_input, outfile => $ofh); close($ofh) || die; $out = read_file($ofname); is($out, $trivial_output, "output filehandle"); ($ofh, $ofname) = tempfile(UNLINK => 1); print $ofh ""; close($ofh) || die; asdoc2pod(in => $trivial_input, outfile => $ofname); $out = read_file($ofname); is($out, $trivial_output, "output file"); } asdoc2pod(in => "/** foo **/ ", out => \$out); is($out, "", "non-JavaDoc comment"); ## Complex data my $infile = 't/example/foo.in'; my $expectfile = 't/example/foo.expect'; my $in = read_file($infile); my $expect = read_file($expectfile); asdoc2pod(in => $in, out => \$out); is($out, $expect, "full example, string"); asdoc2pod(infile => $infile, out => \$out); is($out, $expect, "full example, filename"); { open(my $infh, '<', $infile) || die; asdoc2pod(infile => $infh, out => \$out); close($infh) || die; is($out, $expect, "full example, filehandle"); } sub read_file { my $infile = shift; my $in; local *F; local $/ = undef; open(F, '<', $infile) || die; $in = ; close F || die; return $in; }