1use utf8;
2use strict;
3
4use Test::More tests=>32;
5
6use_ok('Data::HashArray');
7use Data::HashArray;
8
9
10my $a = Data::HashArray->new(
11					  {code=>'FR', name=>'France', size=>'medium'},
12					  {code=>'TR', name=>'Turkey', size=>'medium'},
13					  {code=>'US', name=>'United States', size=>'large'}
14					  );
15
16my $expected;
17
18# ACCESS
19$expected = 'United States';
20is($a->[2]->{name}, $expected, 'Subscript access [2]');
21
22$expected = 'France';
23is($a->[0]->{name}, $expected, 'Subscript access [0]');
24
25$expected = 'France';
26is($a->{name}, $expected, 'OVERLOADED hash access.');
27
28# HASHING over fields
29my $h;
30
31# HASH on 'code'
32$h = $a->hash('code');  		# One level hash (returns a hash of a HashArray of hashes)
33
34foreach my $country (@$a) {
35	my $code  	= $country->{code};
36	my $name 	= $country->{name};
37	my $size	= $country->{size};
38
39	is($h->{$code}->{code}, $code, "Hashed keying on 'code'. Check 'code' on key '$code'");
40	is($h->{$code}->{name}, $name, "Hashed keying on 'code'. Check 'name' on key '$code'");
41	is($h->{$code}->{size}, $size, "Hashed keying on 'code'. Check 'size' on key '$code'");
42}
43
44# HASH on 'code' with a CODE reference.
45$h = $a->hash( sub {shift->{code};});			# One level hash (returns a hash of a HashArray of hashes)
46foreach my $country (@$a) {
47	my $code  	= $country->{code};
48	my $name 	= $country->{name};
49	my $size	= $country->{size};
50
51	is($h->{$code}->{code}, $code, "CODE-REF. Hashed keying on 'code'. Check 'code' on key '$code'");
52	is($h->{$code}->{name}, $name, "CODE-REF. Hashed keying on 'code'. Check 'name' on key '$code'");
53	is($h->{$code}->{size}, $size, "CODE-REF. Hashed keying on 'code'. Check 'size' on key '$code'");
54}
55
56# HASH on 'size, code'
57$h = $a->hash('size', 'code');	# Two level hash (returns a hash of a hash of a HashArray  of hashes)
58
59foreach my $country (@$a) {
60	my $code  	= $country->{code};
61	my $name 	= $country->{name};
62	my $size	= $country->{size};
63
64	is($h->{$size}->{$code}->{code}, $code, "Hashed keying on 'size, code'. Check 'code' on key '$code'");
65	is($h->{$size}->{$code}->{name}, $name, "Hashed keying on 'size, code'. Check 'name' on key '$code'");
66	is($h->{$size}->{$code}->{size}, $size, "Hashed keying on 'size, code'. Check 'size' on key '$code'");
67}
68
69
70#	print STDERR "\nTest OVER baby!\n";
71ok(1);	# survived everything
72
73
741;
75
76