The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: set ts=2 sts=2 sw=2 expandtab smarttab:
package TestPW;
use strict;
use warnings;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(slurp_file test_basic weaver_input);
our $Data = do { local $/; <DATA> };

use Test::More 0.96;
use Test::Differences 0.500;
use Test::MockObject 1.09;
use Moose::Autobox 0.10;

use PPI;

use Pod::Elemental 0.102360;
use Pod::Elemental::Selectors -all;
use Pod::Elemental::Transformer::Pod5;
use Pod::Elemental::Transformer::Nester;

use Pod::Weaver;
require Software::License::Perl_5;

my $zilla = Test::MockObject->new();
$zilla->set_always(license => Software::License::Perl_5->new({ holder => 'DZHolder', year => 2010, }) );
$zilla->set_always(authors => ['DZAuth Stauner <rwstauner@cpan.org>']);
$zilla->set_always(stash_named => undef);
$zilla->mock(copyright_holder => sub { $_[0]->license->holder });
# proposed changes to Pod::Weaver::Section::Legal look for a license file.  we can ignore that for these tests.
$zilla->set_always(files => []);

sub slurp_file { local (@ARGV, $/) = @_; <> }

sub test_basic {
  my ($weaver, $input, $stopwords) = @_;
  my $expected = $input->{expected};

  my ($paragraphs, $versionp, @nestedh1s) = ( 9, 1, qw(0 1 3 4 5   7 8));
  if( $stopwords ){
    ++$_ for $paragraphs, $versionp, @nestedh1s;
    $expected =~ s/\A=pod\n\n/=pod\n\n=for :stopwords $stopwords\n\n/;
  }

  # copied/modified from Pod::Weaver tests (Pod-Weaver-3.101632/t/basic.t)
  my $woven = $weaver->weave_document($input);

  is($woven->children->length, $paragraphs, "we end up with a $paragraphs-paragraph document");

  for ( @nestedh1s ) {
    my $para = $woven->children->[ $_ ];
    isa_ok($para, 'Pod::Elemental::Element::Nested', "element $_")
      and # only check command if isa Nested
    is($para->command, 'head1', "... and is =head1");
  }

  is(
    $woven->children->[$versionp]->children->[0]->content,
    'version 1.002003',
    "the version is in the version section",
  );

  # XXX: This test is extremely risky as things change upstream.
  # -- rjbs, 2009-10-23
  eq_or_diff(
    $woven->as_pod_string,
    $expected,
    "exactly the pod string we wanted after weaving!",
  );
}

sub weaver_input {
  my ($dir) = @_;
  my $base = $dir ? "$dir/" : 't/eg/';

  # copied/modified from Pod::Weaver tests (Pod-Weaver-3.101632/t/basic.t)
  my $in_pod   = slurp_file("${base}in.pod");
  my $expected = slurp_file("${base}out.pod");
  my $document = Pod::Elemental->read_string($in_pod);

  my $perl_document = $Data;
  my $ppi_document  = PPI::Document->new(\$perl_document);

  return {
    pod_document => $document,
    ppi_document => $ppi_document,
    # below configuration modified by rwstauner
    expected => $expected,

    version  => '1.002003',
    authors  => [
    'Randy Stauner <rwstauner@cpan.org>',
    ],
    license  => Software::License::Perl_5->new({
    holder => 'PWHolder',
    year   => 2010,
    }),
    zilla => $zilla,
  };
}

1;

__DATA__

package Module::Name;
# ABSTRACT: abstract text

my $this = 'a test';