head 1.2; access; symbols INITIAL:1.1.1.1 VENDOR:1.1.1; locks; strict; comment @# @; 1.2 date 2002.08.27.19.04.33; author rse; state Exp; branches; next 1.1; 1.1 date 2002.01.21.13.32.35; author rse; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2002.01.21.13.32.35; author rse; state Exp; branches; next ; desc @@ 1.2 log @add path_canon() function for non-physical-fs-based canonifcations of a path @ text @ @@abs2rel = ( 'a/b/c / a/b/c', 'a/b/c /a a/b/c', '/a/b/c a ERROR', ); @@rel2abs = ( '/a/b/c / /a/b/c', '/a/b/c /a /a/b/c', 'a/b/c a ERROR', '.. /a /', '../ /a /', '../.. /a /', '../../ /a /', '../../.. /a /', '../../../ /a /', '../b /a /b', '../b/ /a /b/', '../../b /a /b', '../../b/ /a /b/', '../../../b /a /b', '../../../b/ /a /b/', '../b/c /a /b/c', '../b/c/ /a /b/c/', '../../b/c /a /b/c', '../../b/c/ /a /b/c/', '../../../b/c /a /b/c', '../../../b/c/ /a /b/c/', ); @@common = ( '/a/b/c /a/b/c .', '/a/b/c /a/b/ c', '/a/b/c /a/b c', '/a/b/c /a/ b/c', '/a/b/c /a b/c', '/a/b/c / a/b/c', '/a/b/c /a/b/c .', '/a/b/c /a/b/c/ .', '/a/b/c/ /a/b/c ./', '/a/b/ /a/b/c ../', '/a/b /a/b/c ..', '/a/ /a/b/c ../../', '/a /a/b/c ../..', '/ /a/b/c ../../../', '/a/b/c /a/b/z ../c', '/a/b/c /a/y/z ../../b/c', '/a/b/c /x/y/z ../../../a/b/c', ); @@canon = ( 'a a', 'a/ a', 'a/b a/b', 'a////b a/b', '. .', 'a/.. .', 'a/../../.. ../..', '/a/../../../b /b', ); $cnt = 0; $progname = './path_test'; foreach (@@abs2rel) { @@d = split; chop($result = `./$progname abs2rel $d[0] $d[1]`); if ($d[2] eq $result) { print STDERR "OK: abs2rel: $d[0] $d[1] -> $result\n"; } else { print STDERR "ERROR: abs2rel: $d[0] $d[1] -> $result (It should be '$d[2]')\n"; $cnt++; } } foreach (@@common) { @@d = split; chop($result = `./$progname abs2rel $d[0] $d[1]`); if ($d[2] eq $result) { print STDERR "OK: abs2rel: $d[0] $d[1] -> $result\n"; } else { print STDERR "ERROR: abs2rel: $d[0] $d[1] -> $result (It should be '$d[2]')\n"; $cnt++; } } foreach (@@rel2abs) { @@d = split; chop($result = `./$progname rel2abs $d[0] $d[1]`); if ($d[2] eq $result) { print STDERR "OK: rel2abs: $d[0] $d[1] -> $result\n"; } else { print STDERR "ERROR: rel2abs: $d[0] $d[1] -> $result (It should be '$d[2]')\n"; $cnt++; } } foreach (@@common) { @@d = split; chop($result = `./$progname rel2abs $d[2] $d[1]`); if ($d[0] eq $result) { print STDERR "OK: rel2abs: $d[0] $d[1] -> $result\n"; } else { print STDERR "ERROR: rel2abs: $d[0] $d[1] -> $result (It should be '$d[2]')\n"; $cnt++; } } foreach (@@canon) { @@d = split; chop($result = `./$progname canon $d[0]`); if ($d[1] eq $result) { print STDERR "OK: canon: $d[0] -> $result\n"; } else { print STDERR "ERROR: canon: $d[0] -> $result (It should be '$d[1]')\n"; $cnt++; } } close(LOG); if ($cnt == 0) { print STDERR "Total: OK.\n"; } else { print STDERR "Total: $cnt errors detected.\n"; } @ 1.1 log @Initial revision @ text @d3 3 a5 3 'a/b/c / a/b/c', 'a/b/c /a a/b/c', '/a/b/c a ERROR', d9 21 a29 21 '/a/b/c / /a/b/c', '/a/b/c /a /a/b/c', 'a/b/c a ERROR', '.. /a /', '../ /a /', '../.. /a /', '../../ /a /', '../../.. /a /', '../../../ /a /', '../b /a /b', '../b/ /a /b/', '../../b /a /b', '../../b/ /a /b/', '../../../b /a /b', '../../../b/ /a /b/', '../b/c /a /b/c', '../b/c/ /a /b/c/', '../../b/c /a /b/c', '../../b/c/ /a /b/c/', '../../../b/c /a /b/c', '../../../b/c/ /a /b/c/', d33 28 a60 17 '/a/b/c /a/b/c .', '/a/b/c /a/b/ c', '/a/b/c /a/b c', '/a/b/c /a/ b/c', '/a/b/c /a b/c', '/a/b/c / a/b/c', '/a/b/c /a/b/c .', '/a/b/c /a/b/c/ .', '/a/b/c/ /a/b/c ./', '/a/b/ /a/b/c ../', '/a/b /a/b/c ..', '/a/ /a/b/c ../../', '/a /a/b/c ../..', '/ /a/b/c ../../../', '/a/b/c /a/b/z ../c', '/a/b/c /a/y/z ../../b/c', '/a/b/c /x/y/z ../../../a/b/c', a103 1 print 'X'; d105 11 @ 1.1.1.1 log @Welcome OSSP path (filesystem path manipulation library) This is currently just a collection of reused components, assembled together from various vendor sources. @ text @@