]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/commitdiff
Fix and test parent validation in LT::Meta::TC::Autocoerce
authorVincent Pit <vince@profvince.com>
Sun, 22 Aug 2010 13:54:23 +0000 (15:54 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 22 Aug 2010 13:54:23 +0000 (15:54 +0200)
lib/LaTeX/TikZ/Meta/TypeConstraint/Autocoerce.pm
t/02-autocoerce.t

index 0804c7f9efef0c20a870e82f7deab1d7ecc42cfb..c31508b41f6d80dc82aab3e88ecaa80f1eabc33a 100644 (file)
@@ -89,8 +89,9 @@ use Scalar::Util qw/blessed/;
 
 use Sub::Name ();
 
+use LaTeX::TikZ::Tools;
+
 use Any::Moose;
-use Any::Moose 'Util' => [ 'find_meta' ];
 
 =head1 RELATIONSHIPS
 
@@ -163,10 +164,10 @@ around 'new' => sub {
  }
 
  my $parent = delete $args{parent};
- unless (defined $parent and blessed $parent) {
-  $parent = find_meta($parent);
-  Carp::confess("No meta object for parent $parent");
-  $parent = $parent->type_constraint;
+ unless (blessed $parent) {
+  my $parent_name = defined $parent ? "parent $parent" : 'undefined parent';
+  $parent = LaTeX::TikZ::Tools::type_constraint($parent) if defined $parent;
+  Carp::confess("No meta object for $parent_name")   unless defined $parent;
  }
  __PACKAGE__->meta->find_attribute_by_name('parent')
                   ->type_constraint->assert_valid($parent);
index 02ab12b35e4fe25676657df6cf60f2eed9114f16..463614b23ce80b79e95642da2727b0db25dc684d 100644 (file)
@@ -3,12 +3,40 @@
 use strict;
 use warnings;
 
-use Test::More tests => 7 * 4;
+use Test::More tests => 3 + 7 * 4;
 
 use lib 't/lib';
 
 use LaTeX::TikZ::Meta::TypeConstraint::Autocoerce;
 
+{
+ my $tc = eval {
+  LaTeX::TikZ::Meta::TypeConstraint::Autocoerce->new(
+   parent => undef,
+  );
+ };
+ like $@, qr/^No meta object for undefined parent/, 'Undef parent';
+}
+
+{
+ my $parent = 'LaTeX::TikZ::A::Class::Likely::Not::To::Exist';
+ my $tc = eval {
+  LaTeX::TikZ::Meta::TypeConstraint::Autocoerce->new(
+   parent => $parent,
+  );
+ };
+ like $@, qr/^No meta object for parent \Q$parent\E/, 'Nonexistent parent';
+}
+
+{
+ my $tc = eval {
+  LaTeX::TikZ::Meta::TypeConstraint::Autocoerce->new(
+   parent => 'LaTeX::TikZ::Meta::TypeConstraint::Autocoerce',
+  );
+ };
+ is $@, '', 'Valid parent';
+}
+
 {
  package LaTeX::TikZ::TestX;