Work in progress on compiler. It's blowing up right now.
[gitmo/MooseX-Compiler.git] / t / remove-use-moose.t
index 5cb5d07..ca896be 100644 (file)
@@ -3,32 +3,31 @@ use warnings;
 
 use lib 't/lib';
 
-use Test::MooseX::Compiler qw( save_class );
+use Test::Requires {
+    'MooseX::StrictConstructor' => '0.01',
+};
+
+use Test::MooseX::Compiler qw( save_fragment );
 use Test::More 0.88;
 
 use MooseX::Compiler;
 
 {
     my $code = <<'EOF';
-package Test::Class1;
-
-use strict;
-use warnings;
-
 use Moose;
 
 sub foo { 42 }
-
-1;
 EOF
 
-    save_class( 'Test::Class1', $code );
+    my $class = 'Test::Class1';
+    save_fragment( $class, $code );
 
     my $compiler = MooseX::Compiler->new(
-        class => 'Test::Class1',
+        class => $class,
     );
 
     my $compiled = $compiler->compile_class();
+
     like(
         $compiled,
         qr/^\#\s*use Moose;\n/m,
@@ -44,11 +43,6 @@ EOF
 
 {
     my $code = <<'EOF';
-package Test::Class2;
-
-use strict;
-use warnings;
-
 use Moose 0.1;
 
 sub foo { 42 }
@@ -56,13 +50,15 @@ sub foo { 42 }
 1;
 EOF
 
-    save_class( 'Test::Class1', $code );
+    my $class = 'Test::Class2';
+    save_fragment( $class, $code );
 
     my $compiler = MooseX::Compiler->new(
-        class => 'Test::Class1',
+        class => $class,
     );
 
     my $compiled = $compiler->compile_class();
+
     unlike(
         $compiled,
         qr/^\#\s*use Moose;\n/m,
@@ -76,4 +72,88 @@ EOF
     );
 }
 
+{
+    my $code = <<'EOF';
+use Moose;
+use MooseX::StrictConstructor;
+
+sub foo { 42 }
+EOF
+
+    my $class = 'Test::Class3';
+    save_fragment( $class, $code );
+
+    my $compiler = MooseX::Compiler->new(
+        class => $class,
+    );
+
+    my $compiled = $compiler->compile_class();
+
+    like(
+        $compiled,
+        qr/^\#\s*use Moose;\n/m,
+        'use Moose declaration is commented out in compiled code'
+    );
+
+    like(
+        $compiled,
+        qr/^\#\s*use MooseX::StrictConstructor;\n/m,
+        'use MooseX::StrictConstructor declaration is commented out in compiled code'
+    );
+
+    unlike(
+        $compiled,
+        qr/^use Moose;\n/m,
+        'original use Moose declaration is removed from compiled code'
+    );
+
+    unlike(
+        $compiled,
+        qr/^use MooseX::StrictConstructor;\n/m,
+        'original use MooseX::StrictConstructor declaration is removed from compiled code'
+    );
+}
+
+{
+    my $code = <<'EOF';
+use Moose;
+use MooseX::StrictConstructor 0.01;
+
+sub foo { 42 }
+EOF
+
+    my $class = 'Test::Class4';
+    save_fragment( $class, $code );
+
+    my $compiler = MooseX::Compiler->new(
+        class => $class,
+    );
+
+    my $compiled = $compiler->compile_class();
+
+    like(
+        $compiled,
+        qr/^\#\s*use Moose;\n/m,
+        'use Moose declaration is commented out in compiled code'
+    );
+
+    unlike(
+        $compiled,
+        qr/^use Moose;\n/m,
+        'original use Moose declaration is removed from compiled code'
+    );
+
+    unlike(
+        $compiled,
+        qr/^\#\s*use MooseX::StrictConstructor;\n/m,
+        'use MooseX::StrictConstructor declaration is not commented out in compiled code'
+    );
+
+    like(
+        $compiled,
+        qr/^use\s+MooseX::StrictConstructor\s+0\.01\s+\(\)\s*;\n/m,
+        'original use MooseX::StrictConstructor declaration is preserved, but () is added to prevent importing'
+    );
+}
+
 done_testing();