File: 21remove.t

package info (click to toggle)
libmeta-perl 0.014-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 212 kB
  • sloc: perl: 613; makefile: 3
file content (85 lines) | stat: -rw-r--r-- 2,157 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/perl

use v5.14;
use warnings;

use Test2::V0;

use meta;
no warnings qw( meta::experimental );

my $metapkg = meta::package->get( "main" );

# scalar
{
   our $SCALAR_VAR;

   $metapkg->remove_symbol( '$SCALAR_VAR' );

   ok( !$metapkg->try_get_symbol( '$SCALAR_VAR' ),
      '$metapkg no longer has scalar symbol after remove' );
   ok( !$metapkg->try_get_glob( 'SCALAR_VAR' ),
      '$metapkg no longer has old glob after remove' );

   like( dies { $metapkg->remove_symbol( '$SCALAR_VAR' ) },
      qr/^Cannot remove non-existing symbol from package: "\$SCALAR_VAR" /,
      '->remove_symbol on same name throws exception' );
}

# array
{
   our @ARRAY_VAR;

   $metapkg->remove_symbol( '@ARRAY_VAR' );

   ok( !$metapkg->try_get_symbol( '@ARRAY_VAR' ),
      '$metapkg no longer has array symbol after remove' );
   ok( !$metapkg->try_get_glob( 'ARRAY_VAR' ),
      '$metapkg no longer has old glob after remove' );
}

# hash
{
   our %HASH_VAR;

   $metapkg->remove_symbol( '%HASH_VAR' );

   ok( !$metapkg->try_get_symbol( '%HASH_VAR' ),
      '$metapkg no longer has hash symbol after remove' );
   ok( !$metapkg->try_get_glob( 'HASH_VAR' ),
      '$metapkg no longer has old glob after remove' );
}

# hash
{
   sub FUNCTION { }

   $metapkg->remove_symbol( '&FUNCTION' );

   ok( !$metapkg->try_get_symbol( '&FUNCTION' ),
      '$metapkg no longer has code symbol after remove' );
   ok( !$metapkg->try_get_glob( 'FUNCTION' ),
      '$metapkg no longer has old glob after remove' );
}

# can delete one slot without losing them all
{
   our $SHARED;
   our @SHARED;
   our %SHARED;

   $metapkg->remove_symbol( '@SHARED' );

   ok( !$metapkg->try_get_symbol( '@SHARED' ),
      '$metapkg no longer has @SHARED after remove' );
   ok( $metapkg->try_get_symbol( '$SHARED' ),
      '$metapkg still has $SHARED after remove array' );
   ok( $metapkg->try_get_symbol( '%SHARED' ),
      '$metapkg still has %SHARED after remove array' );

   like( dies { $metapkg->remove_symbol( '@SHARED' ) },
      qr/^Cannot remove non-existing symbol from package: "\@SHARED" /,
      '->remove_symbol on same name throws exception' );
}

done_testing;