--- /dev/null
+use strictures 2;
+use Test::More;
+use IO::All;
+use Role::Tiny;
+use Moose;
+
+sub check_module {
+ my ($module) = @_;
+ if ($module->isa('Moo::Object')) {
+ my $meta = $module->meta;
+ foreach my $name ($meta->get_attribute_list) {
+ my $attr = $meta->get_attribute($name);
+ if (my $tc = $attr->type_constraint) {
+ pass("${module}->${name} isa ${tc}");
+ } else {
+ fail("${module}->${name} UNTYPED");
+ }
+ }
+ }
+}
+
+foreach my $file (io('lib')->all_files(0)) {
+ (my $name = $file->name) =~ s/^lib\///;
+ require $name;
+ (my $module = join '::', split '/', $name) =~ s/\.pm$//;
+ check_module($module);
+}
+
+done_testing;