1#!/bin/bash
2
3if [[ -z "$AWK" || -z "$WORKDIR" ]]; then
4    printf '$AWK and $WORKDIR must be set\n' >&2
5    exit 1
6fi
7
8TEMP0=$WORKDIR/test.temp.0
9TEMP1=$WORKDIR/test.temp.1
10
11RESULT=0
12
13fail() {
14	echo "$1" >&2
15	RESULT=1
16}
17
18echo T.nextfile: tests of nextfile command
19
20# 1st lines of some files
21rm -f $TEMP0
22for i in T.*
23do
24	sed 1q $i >> $TEMP0
25done
26
27$AWK '
28{ print $0; nextfile }	# print first line, quit
29' T.* > $TEMP1
30
31diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1'
32
33$AWK '	# same test but in a for loop
34{ print $0;
35  for (i = 1; i < 10; i++)
36	if (i == 1)
37		nextfile
38  print "nextfile for error"
39}	# print first line, quit
40' T.* > $TEMP1
41
42diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1f'
43
44$AWK '	# same test but in a while loop
45{ print $0;
46  i = 1
47  while (i < 10)
48	if (i++ == 1)
49		nextfile
50  print "nextfile while error"
51}	# print first line, quit
52' T.* > $TEMP1
53
54diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1w'
55
56$AWK '	# same test but in a do loop
57{ print $0;
58  i = 1
59  do {
60	if (i++ == 1)
61		nextfile	# print first line, quit
62  } while (i < 10)
63  print "nextfile do error"
64}
65' T.* > $TEMP1
66
67diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 1d'
68
69
70# 100 lines of some files
71rm -f $TEMP0
72for i in T.*
73do
74	sed 100q $i >> $TEMP0
75done
76
77$AWK '
78{ print }
79FNR == 100 { nextfile }	# print first line, quit
80' T.* > $TEMP1
81
82diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 2'
83
84
85> $TEMP0	# empty
86$AWK ' { nextfile; print $0 }' T.* > $TEMP1
87
88diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 3'
89
90# skip weird args
91rm -f $TEMP0
92for i in T.*
93do
94	sed 1q $i >> $TEMP0
95done
96
97$AWK '
98{ print $0; nextfile }	# print first line, quit
99' T.* > $TEMP1
100
101diff $TEMP0 $TEMP1 || fail 'BAD: T.nextfile 4'
102
103exit $RESULT
104