Add is_empty method to EU::Typemaps
authorSteffen Mueller <smueller@cpan.org>
Sun, 17 Apr 2011 15:13:43 +0000 (17:13 +0200)
committerSteffen Mueller <smueller@cpan.org>
Tue, 12 Jul 2011 18:54:51 +0000 (20:54 +0200)
dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
dist/ExtUtils-ParseXS/t/510-t-bare.t

index 0bc08cd..0f5d12c 100644 (file)
@@ -635,6 +635,19 @@ sub merge {
   return 1;
 }
 
+=head2 is_empty
+
+Returns a bool indicating whether this typemap is entirely empty.
+
+=cut
+
+sub is_empty {
+  my $self = shift;
+
+  return @{ $self->{typemap_section} } == 0
+      && @{ $self->{input_section} } == 0
+      && @{ $self->{output_section} } == 0;
+}
 
 =head2 _get_typemap_hash
 
index a2f359d..033c0ae 100644 (file)
@@ -2,13 +2,20 @@
 use strict;
 use warnings;
 
-use Test::More tests => 38;
+use Test::More tests => 43;
 use ExtUtils::Typemaps;
 
+# empty typemap
+SCOPE: {
+  ok(ExtUtils::Typemaps->new()->is_empty(), "This is an empty typemap");
+}
+
 # typemap only
 SCOPE: {
   my $map = ExtUtils::Typemaps->new();
   $map->add_typemap(ctype => 'unsigned int', xstype => 'T_IV');
+  ok(!$map->is_empty(), "This is not an empty typemap");
+
   is($map->as_string(), <<'HERE', "Simple typemap matches expectations");
 TYPEMAP
 unsigned int   T_IV
@@ -20,6 +27,7 @@ HERE
   is($type->xstype, 'T_IV');
   is($type->tidy_ctype, 'unsigned int');
 
+
   # test failure
   ok(!$map->get_typemap(ctype => 'foo'), "Access to nonexistent typemap doesn't die");
   ok(!$map->get_inputmap(ctype => 'foo'), "Access to nonexistent inputmap via ctype doesn't die");
@@ -34,8 +42,9 @@ HERE
 # typemap & input
 SCOPE: {
   my $map = ExtUtils::Typemaps->new();
-  $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
   $map->add_inputmap(xstype => 'T_UV', code => '$var = ($type)SvUV($arg);');
+  ok(!$map->is_empty(), "This is not an empty typemap");
+  $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
   is($map->as_string(), <<'HERE', "Simple typemap (with input) matches expectations");
 TYPEMAP
 unsigned int   T_UV
@@ -64,8 +73,9 @@ HERE
 # typemap & output
 SCOPE: {
   my $map = ExtUtils::Typemaps->new();
-  $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
   $map->add_outputmap(xstype => 'T_UV', code => 'sv_setuv($arg, (UV)$var);');
+  ok(!$map->is_empty(), "This is not an empty typemap");
+  $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
   is($map->as_string(), <<'HERE', "Simple typemap (with output) matches expectations");
 TYPEMAP
 unsigned int   T_UV
@@ -92,6 +102,7 @@ SCOPE: {
   $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
   $map->add_inputmap(xstype => 'T_UV', code => '$var = ($type)SvUV($arg);');
   $map->add_outputmap(xstype => 'T_UV', code => 'sv_setuv($arg, (UV)$var);');
+  ok(!$map->is_empty(), "This is not an empty typemap");
   is($map->as_string(), <<'HERE', "Simple typemap (with in- & output) matches expectations");
 TYPEMAP
 unsigned int   T_UV