X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2Fdbixcsl_common_tests.pm;h=7fa48b45d26a72a23232329e146635e9e6e2dee6;hb=9ef345a5c67a5e95220ac24c9fe8bee512348ba9;hp=f15f94999d45a3e505a53ff9b2f82a1ee110ff1b;hpb=78cf39e4bd10944f9fa11a5cad36fa8459c4df45;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/lib/dbixcsl_common_tests.pm b/t/lib/dbixcsl_common_tests.pm index f15f949..7fa48b4 100644 --- a/t/lib/dbixcsl_common_tests.pm +++ b/t/lib/dbixcsl_common_tests.pm @@ -120,7 +120,7 @@ sub run_tests { $num_rescans++ if $self->{vendor} eq 'Firebird'; plan tests => @connect_info * - (207 + $num_rescans * $col_accessor_map_tests + $extra_count + ($self->{data_type_tests}{test_count} || 0)); + (210 + $num_rescans * $col_accessor_map_tests + $extra_count + ($self->{data_type_tests}{test_count} || 0)); foreach my $info_idx (0..$#connect_info) { my $info = $connect_info[$info_idx]; @@ -156,7 +156,14 @@ sub run_only_extra_tests { $dbh->do($_) for @{ $self->{extra}{create} || [] }; if (not ($self->{vendor} eq 'mssql' && $dbh->{Driver}{Name} eq 'Sybase')) { - $dbh->do($_) for @{ $self->{data_type_tests}{ddl} || []}; + foreach my $ddl (@{ $self->{data_type_tests}{ddl} || []}) { + if (my $cb = $self->{data_types_ddl_cb}) { + $cb->($ddl); + } + else { + $dbh->do($ddl); + } + } } $self->{_created} = 1; @@ -223,6 +230,7 @@ sub setup_schema { qr/^(?:\S+\.)?(?:(?:$self->{vendor}|extra)[_-]?)?loader[_-]?test[0-9]+(?!.*_)/i, result_namespace => RESULT_NAMESPACE, resultset_namespace => RESULTSET_NAMESPACE, + schema_components => [ 'TestSchemaComponent', '+TestSchemaComponentFQN' ], additional_classes => 'TestAdditional', additional_base_classes => 'TestAdditionalBase', left_base_classes => [ qw/TestLeftBase/ ], @@ -384,6 +392,10 @@ sub test_schema { is_deeply $schema_resultset_namespace, RESULTSET_NAMESPACE, 'resultset_namespace set correctly on Schema'; + like $schema_code, +qr/\n__PACKAGE__->load_components\("TestSchemaComponent", "\+TestSchemaComponentFQN"\);\n\n__PACKAGE__->load_namespaces/, + 'schema_components works'; + my @columns_lt2 = $class2->columns; is_deeply( \@columns_lt2, [ qw/id dat dat2 set_primary_key can dbix_class_testcomponent dbix_class_testcomponentmap testcomponent_fqn meta test_role_method test_role_for_map_method crumb_crisp_coating/ ], "Column Ordering" ); @@ -588,6 +600,12 @@ sub test_schema { is( $class2->column_info('crumb_crisp_coating')->{accessor}, 'trivet', 'col_accessor_map is being run' ); + is $class1->column_info('dat')->{is_nullable}, 0, + 'is_nullable=0 detection'; + + is $class2->column_info('set_primary_key')->{is_nullable}, 1, + 'is_nullable=1 detection'; + SKIP: { skip $self->{skip_rels}, 131 if $self->{skip_rels}; @@ -1113,8 +1131,10 @@ EOF find $find_cb, DUMP_DIR; -# system "rm -f /tmp/before_rescan/* /tmp/after_rescan/*"; -# system "cp $tdir/common_dump/DBIXCSL_Test/Schema/*.pm /tmp/before_rescan"; +# system "rm -rf /tmp/before_rescan /tmp/after_rescan"; +# system "mkdir /tmp/before_rescan"; +# system "mkdir /tmp/after_rescan"; +# system "cp -a @{[DUMP_DIR]} /tmp/before_rescan"; my $before_digest = $digest->b64digest; @@ -1129,7 +1149,7 @@ EOF is_deeply(\@new, [ qw/LoaderTest30/ ], "Rescan"); -# system "cp t/_common_dump/DBIXCSL_Test/Schema/*.pm /tmp/after_rescan"; +# system "cp -a @{[DUMP_DIR]} /tmp/after_rescan"; $digest = Digest::MD5->new; find $find_cb, DUMP_DIR; @@ -1435,10 +1455,12 @@ sub create { id INTEGER NOT NULL UNIQUE, id1 INTEGER NOT NULL, id2 INTEGER NOT NULL, - id3 INTEGER $self->{null}, - id4 INTEGER NOT NULL, - UNIQUE (id1, id2), - UNIQUE (id3, id4) + @{[ $self->{vendor} !~ /^(?:DB2|SQLAnywhere)\z/i ? " + id3 INTEGER $self->{null}, + id4 INTEGER NOT NULL, + UNIQUE (id3, id4), + " : '' ]} + UNIQUE (id1, id2) ) $self->{innodb} }, ); @@ -1854,7 +1876,14 @@ sub create { $dbh->do($_) foreach (@statements); if (not ($self->{vendor} eq 'mssql' && $dbh->{Driver}{Name} eq 'Sybase')) { - $dbh->do($_) foreach (@{ $self->{data_type_tests}{ddl} || [] }); + foreach my $ddl (@{ $self->{data_type_tests}{ddl} || [] }) { + if (my $cb = $self->{data_types_ddl_cb}) { + $cb->($ddl); + } + else { + $dbh->do($ddl); + } + } } unless ($self->{skip_rels}) { @@ -2112,15 +2141,16 @@ sub setup_data_type_tests { my %seen_col_names; while (my ($col_def, $expected_info) = each %$types) { - (my $type_alias = $col_def) =~ s/\( ([^)]+) \)//xg; + (my $type_alias = $col_def) =~ s/\( (.+) \)(?=(?:[^()]* '(?:[^']* (?:''|\\')* [^']*)* [^\\']' [^()]*)*\z)//xg; my $size = $1; $size = '' unless defined $size; + $size = '' unless $size =~ /^[\d, ]+\z/; $size =~ s/\s+//g; my @size = split /,/, $size; # some DBs don't like very long column names - if ($self->{vendor} =~ /^(?:firebird|sqlanywhere|oracle|db2)\z/i) { + if ($self->{vendor} =~ /^(?:Firebird|SQLAnywhere|Oracle|DB2)\z/i) { my ($col_def, $default) = $type_alias =~ /^(.*)(default.*)?\z/i; $type_alias = substr $col_def, 0, 15;