1use strict; 2use DBIx::Class::Schema::Loader; 3use DBIx::Class::Schema::Loader::Utils 'slurp_file'; 4use File::Path; 5use Test::More tests => 19; 6use Test::Exception; 7use lib qw(t/lib); 8use make_dbictest_db; 9use dbixcsl_test_dir qw/$tdir/; 10 11my $dump_path = "$tdir/dump"; 12 13my %original_class_data; 14 15my ($schema_file_count, $result_file_count); 16 17{ 18 package DBICTest::Schema::1; 19 use Test::More; 20 use base 'DBIx::Class::Schema::Loader'; 21 __PACKAGE__->loader_options( 22 dump_directory => $dump_path, 23 quiet => 1, 24 filter_generated_code => sub { 25 my ($type, $class, $text) = @_; 26 27 like $type, qr/^(?:schema|result)\z/, 28 'got correct file type'; 29 30 if ($type eq 'schema') { 31 $schema_file_count++; 32 is $class, 'DBICTest::Schema::1', 33 'correct class for schema type file passed to filter'; 34 } 35 elsif ($type eq 'result') { 36 $result_file_count++; 37 like $class, qr/^DBICTest::Schema::1::Result::(?:Foo|Bar)\z/, 38 'correct class for result type file passed to filter'; 39 } 40 else { 41 die 'invalid file type passed to filter'; 42 } 43 44 $original_class_data{$class} = $text; 45 if ($class =~ /::1$/) { 46 $text = "No Gotcha!"; 47 } 48 else { 49 $text .= q{my $foo = "Kilroy was here";}; 50 } 51 return $text; 52 }, 53 ); 54} 55 56{ 57 package DBICTest::Schema::2; 58 use base 'DBIx::Class::Schema::Loader'; 59 __PACKAGE__->loader_options( 60 dump_directory => $dump_path, 61 quiet => 1, 62 filter_generated_code => "$^X t/bin/simple_filter", 63 ); 64} 65 66DBICTest::Schema::1->connect($make_dbictest_db::dsn); 67 68# schema is generated in 2 passes 69 70is $schema_file_count, 2, 71 'correct number of schema files passed to filter'; 72 73is $result_file_count, 4, 74 'correct number of result files passed to filter'; 75 76my $foo = slurp_file "$dump_path/DBICTest/Schema/1/Result/Foo.pm"; 77ok(! -e "$dump_path/DBICTest/Schema/1.pm", 78 "No package means no file written"); 79ok($original_class_data{"DBICTest::Schema::1"}, 80 "Even though we processed the missing class"); 81like($foo, qr/# Created by .* THE FIRST PART/s, 82 "We get the whole autogenerated text"); 83like($foo, qr/Kilroy was here/, "Can insert text"); 84 85DBICTest::Schema::2->connect($make_dbictest_db::dsn); 86 87$foo = slurp_file "$dump_path/DBICTest/Schema/2/Result/Foo.pm"; 88 89like $foo, qr/Kilroy was here/, 90 "Can insert text via command filter"; 91 92END { rmtree($dump_path, 1, 1); } 93