1#!/usr/bin/perl
2#
3# Copyright (c) 1997 Shigio Yamaguchi. All rights reserved.
4# Copyright (c) 1999 Tama Communications Corporation. All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27#
28
29#
30# Test script for abs2rel(3) and rel2abs(3).
31#
32$logfile = 'err';
33#
34#       target          base directory  result
35#       --------------------------------------
36@abs2rel = (
37	'.		/		.',
38	'a/b/c		/		a/b/c',
39	'a/b/c		/a		a/b/c',
40	'/a/b/c		a		ERROR',
41);
42@rel2abs = (
43	'.		/		/',
44	'./		/		/',
45	'/a/b/c		/		/a/b/c',
46	'/a/b/c		/a		/a/b/c',
47	'a/b/c		a		ERROR',
48	'..		/a		/',
49	'../		/a		/',
50	'../..		/a		/',
51	'../../		/a		/',
52	'../../..	/a		/',
53	'../../../	/a		/',
54	'../b		/a		/b',
55	'../b/		/a		/b/',
56	'../../b	/a		/b',
57	'../../b/	/a		/b/',
58	'../../../b	/a		/b',
59	'../../../b/	/a		/b/',
60	'../b/c		/a		/b/c',
61	'../b/c/	/a		/b/c/',
62	'../../b/c	/a		/b/c',
63	'../../b/c/	/a		/b/c/',
64	'../../../b/c	/a		/b/c',
65	'../../../b/c/	/a		/b/c/',
66);
67@common = (
68	'/a/b/c		/a/b/c		.',
69	'/a/b/c		/a/b/		c',
70	'/a/b/c		/a/b		c',
71	'/a/b/c		/a/		b/c',
72	'/a/b/c		/a		b/c',
73	'/a/b/c		/		a/b/c',
74	'/a/b/c		/a/b/c		.',
75	'/a/b/c		/a/b/c/		.',
76	'/a/b/c/	/a/b/c		./',
77	'/a/b/		/a/b/c		../',
78	'/a/b		/a/b/c		..',
79	'/a/		/a/b/c		../../',
80	'/a		/a/b/c		../..',
81	'/		/a/b/c		../../../',
82	'/a/b/c		/a/b/z		../c',
83	'/a/b/c		/a/y/z		../../b/c',
84	'/a/b/c		/x/y/z		../../../a/b/c',
85);
86print "TEST start ";
87open(LOG, ">$logfile") || die("cannot open log file '$logfile'.\n");
88$cnt = 0;
89$progname = 'abs2rel';
90foreach (@abs2rel) {
91	@d = split;
92	chop($result = `./$progname $d[0] $d[1]`);
93	if ($d[2] eq $result) {
94		print '.';
95	} else {
96		print 'X';
97		print LOG "$progname $d[0] $d[1] -> $result (It should be '$d[2]')\n";
98		$cnt++;
99	}
100}
101foreach (@common) {
102	@d = split;
103	chop($result = `./$progname $d[0] $d[1]`);
104	if ($d[2] eq $result) {
105		print '.';
106	} else {
107		print 'X';
108		print LOG "$progname $d[0] $d[1] -> $result (It should be '$d[2]')\n";
109		$cnt++;
110	}
111}
112$progname = 'rel2abs';
113foreach (@rel2abs) {
114	@d = split;
115	chop($result = `./$progname $d[0] $d[1]`);
116	if ($d[2] eq $result) {
117		print '.';
118	} else {
119		print 'X';
120		print LOG "$progname $d[0] $d[1] -> $result (It should be '$d[2]')\n";
121		$cnt++;
122	}
123}
124foreach (@common) {
125	@d = split;
126	chop($result = `./$progname $d[2] $d[1]`);
127	if ($d[0] eq $result) {
128		print '.';
129	} else {
130		print 'X';
131		print LOG "$progname $d[2] $d[1] -> $result (It should be '$d[0]')\n";
132		$cnt++;
133	}
134}
135close(LOG);
136if ($cnt == 0) {
137	print " COMPLETED.\n";
138} else {
139	print " $cnt errors detected.\n";
140	open(LOG, $logfile) || die("log file not found.\n");
141	while (<LOG>) {
142		print;
143	}
144	close(LOG);
145}
146