#!/usr/bin/perl use strict; BEGIN { $^W = 1; } use Test::More; use Test::Differences; use PPI; BEGIN { if ($PPI::VERSION =~ /_/) { plan skip_all => "Need released version of PPI. You have $PPI::VERSION"; exit 0; } } plan tests => 5; use PPIx::EditorTools::RenamePackage; my $munged = PPIx::EditorTools::RenamePackage->new->rename( code => "package TestPackage;\nuse strict;\nBEGIN { $^W = 1; }\n1;\n", replacement => 'NewPackage' ); isa_ok( $munged, 'PPIx::EditorTools::ReturnObject' ); isa_ok( $munged->element, 'PPI::Statement::Package' ); eq_or_diff( $munged->code, "package NewPackage;\nuse strict;\nBEGIN { $^W = 1; }\n1;\n", 'simple package' ); eq_or_diff( $munged->ppi->serialize, "package NewPackage;\nuse strict;\nBEGIN { $^W = 1; }\n1;\n", 'simple package' ); my $code = <<'END_CODE'; use MooseX::Declare; class Test { has a_var => ( is => 'rw', isa => 'Str' ); has b_var => ( is => 'rw', isa => 'Str' ); method some_method { my $x_var = 1; print "Do stuff with ${x_var}\n"; $x_var += 1; my %hash; for my $i (1..5) { $hash{$i} = $x_var; } } } END_CODE my $shiny_replacement = <<'SHINY_REPLACEMENT'; use MooseX::Declare; class NewPackage { has a_var => ( is => 'rw', isa => 'Str' ); has b_var => ( is => 'rw', isa => 'Str' ); method some_method { my $x_var = 1; print "Do stuff with ${x_var}\n"; $x_var += 1; my %hash; for my $i (1..5) { $hash{$i} = $x_var; } } } SHINY_REPLACEMENT TODO: { local $TODO = 'RenamePackage does not support MooseX::Declare yet'; # The unimplemented stuff throws warnings local $^W = 0; my $result = eval { my $munged = PPIx::EditorTools::RenamePackage->new->rename( code => $code, replacement => 'NewPackage', ); $munged->code; }; eq_or_diff( $result, $shiny_replacement, 'replace scalar' ); }