1use strict;
2use warnings;
3
4package Test::Deep::HashKeys;
5
6use Test::Deep::Ref;
7
8sub init
9{
10	my $self = shift;
11
12	my %keys;
13	@keys{@_} = ();
14	$self->{val} = \%keys;
15	$self->{keys} = [sort @_];
16}
17
18sub descend
19{
20	my $self = shift;
21	my $got = shift;
22
23	my $exp = $self->{val};
24
25	return 0 unless $self->test_reftype($got, "HASH");
26
27	return Test::Deep::descend($got, $self->hashkeysonly($exp));
28}
29
30sub hashkeysonly
31{
32	require Test::Deep::HashKeysOnly;
33
34	my $self = shift;
35	my $exp = shift;
36
37	return Test::Deep::HashKeysOnly->new(keys %$exp)
38}
39
40package Test::Deep::SuperHashKeys;
41
42use base 'Test::Deep::HashKeys';
43
44sub hashkeysonly
45{
46	require Test::Deep::HashKeysOnly;
47
48	my $self = shift;
49	my $exp = shift;
50
51	return Test::Deep::SuperHashKeysOnly->new(keys %$exp)
52}
53
54package Test::Deep::SubHashKeys;
55
56use base 'Test::Deep::HashKeys';
57
58sub hashkeysonly
59{
60	require Test::Deep::HashKeysOnly;
61
62	my $self = shift;
63	my $exp = shift;
64
65	return Test::Deep::SubHashKeysOnly->new(keys %$exp)
66}
67
681;
69