use Test::Most tests => 32; use Parse::Path; my $path; die_on_fail; lives_ok { $path = Parse::Path->new( path => 'a.b.c' ); } "Initial path construction didn't die"; isa_ok $path, 'Parse::Path::DZIL', "path"; restore_fail; my $orig_path = $path->clone; # concat $path .= 'd'; lives_and { is($path->as_string, 'a.b.c.d', '.= $') } '.= $ lives'; $path .= ['e', 'f']; lives_and { is($path->as_string, 'a.b.c.d.e.f', '.= []') } '.= [] lives'; # basic overloads lives_and { is(0+$path, 6, '0+') } '0+ lives'; lives_and { is(0-$path, -6, '0-') } '0- lives'; lives_and { is(-$path, -6, '-' ) } '- lives'; lives_and { is("$path", $path->as_string, '""') } '"" lives'; lives_and { is(!$path, '', '!') } '! lives'; # numeric comparisons lives_and { ok($orig_path < $path, '<' ) } '< lives'; lives_and { ok($orig_path <= $path, '<=' ) } '<= lives'; lives_and { ok($path > $orig_path, '>' ) } '> lives'; lives_and { ok($path >= $orig_path, '>=' ) } '>= lives'; lives_and { ok($path == $path, '==' ) } '== lives'; lives_and { ok($path != $orig_path, '!=' ) } '!= lives'; lives_and { is($path <=> $orig_path, 1, '<=>') } '<=> lives'; # string comparisons lives_and { ok($orig_path lt $path, 'lt' ) } 'lt lives'; lives_and { ok($orig_path le $path, 'le' ) } 'le lives'; lives_and { ok($path gt $orig_path, 'gt' ) } 'gt lives'; lives_and { ok($path ge $orig_path, 'ge' ) } 'ge lives'; lives_and { ok($path eq $path, 'eq' ) } 'eq lives'; lives_and { ok($path ne $orig_path, 'ne' ) } 'ne lives'; lives_and { is($path cmp $orig_path, 1, 'cmp') } 'cmp lives'; # different string comparisons $path->_path->[2]{key} = 'a'; $path->_path->[2]{step} = 'a'; lives_and { ok($path lt $orig_path, 'lt aba') } 'lt aba lives'; lives_and { ok($path le $orig_path, 'le aba') } 'le aba lives'; lives_and { ok($orig_path gt $path, 'gt aba') } 'gt aba lives'; lives_and { ok($orig_path ge $path, 'ge aba') } 'ge aba lives'; lives_and { ok($orig_path eq $orig_path,'eq aba') } 'eq aba lives'; lives_and { ok($orig_path ne $path, 'ne aba') } 'ne aba lives'; lives_and { is($orig_path cmp $path, 1, 'cmp aba') } 'cmp aba lives'; # dereferencing lives_and { is ($$path, $path->as_string, '${}') } '${} lives'; lives_and { is_deeply(\@$path, $path->as_array, '@{}') } '@{} lives';