X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Freplication.t;h=5b74ab992f56c2cb5cf40ce497abb71beb6097d1;hb=b75235fe460933adf4e637e6ef4c0bea5cb57aae;hp=1cd2d906f16e2ad30d019acd3bd9d0a565d9a271;hpb=2dc8d9618fd296ecdd4484d3686832de0592e747;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/replication.t b/t/storage/replication.t index 1cd2d90..5b74ab9 100644 --- a/t/storage/replication.t +++ b/t/storage/replication.t @@ -66,7 +66,7 @@ TESTSCHEMACLASSES: { sub init_schema { # current SQLT SQLite producer does not handle DROP TABLE IF EXISTS, trap warnings here - local $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /no such table.+DROP TABLE/ }; + local $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /no such table.+DROP TABLE/s }; my ($class, $schema_method) = @_; @@ -266,6 +266,56 @@ for my $method (qw/by_connect_info by_storage_type/) { => 'configured balancer_type'; } +### check that all Storage::DBI methods are handled by ::Replicated +{ + my @storage_dbi_methods = Class::MOP::Class + ->initialize('DBIx::Class::Storage::DBI')->get_all_method_names; + + my @replicated_methods = DBIx::Class::Storage::DBI::Replicated->meta + ->get_all_method_names; + +# remove constants and OTHER_CRAP + @storage_dbi_methods = grep !/^[A-Z_]+\z/, @storage_dbi_methods; + +# remove CAG accessors + @storage_dbi_methods = grep !/_accessor\z/, @storage_dbi_methods; + +# remove DBIx::Class (the root parent, with CAG and stuff) methods + my @root_methods = Class::MOP::Class->initialize('DBIx::Class') + ->get_all_method_names; + my %count; + $count{$_}++ for (@storage_dbi_methods, @root_methods); + + @storage_dbi_methods = grep $count{$_} != 2, @storage_dbi_methods; + +# make hashes + my %storage_dbi_methods; + @storage_dbi_methods{@storage_dbi_methods} = (); + my %replicated_methods; + @replicated_methods{@replicated_methods} = (); + +# remove ::Replicated-specific methods + for my $method (@replicated_methods) { + delete $replicated_methods{$method} + unless exists $storage_dbi_methods{$method}; + } + @replicated_methods = keys %replicated_methods; + +# check that what's left is implemented + %count = (); + $count{$_}++ for (@storage_dbi_methods, @replicated_methods); + + if ((grep $count{$_} == 2, @storage_dbi_methods) == @storage_dbi_methods) { + pass 'all DBIx::Class::Storage::DBI methods implemented'; + } + else { + my @unimplemented = grep $count{$_} == 1, @storage_dbi_methods; + + fail 'the following DBIx::Class::Storage::DBI methods are unimplemented: ' + . "@unimplemented"; + } +} + ok $replicated->schema->storage->meta => 'has a meta object';