update-copyright: much ado about intervals
[gnulib.git] / tests / test-update-copyright.sh
1 #!/bin/sh
2 # Test suite for update-copyright.
3 # Copyright (C) 2009 Free Software Foundation, Inc.
4 # This file is part of the GNUlib Library.
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19 diffout=`diff -u /dev/null /dev/null 2>&1`
20 if test x"$diffout" = x"" && test $? -eq 0; then
21   compare() { diff -u "$@"; }
22 else
23   compare() { cmp "$@"; }
24 fi
25
26 TMP_BASE=update-copyright.test
27
28 ## ----------------------------- ##
29 ## Examples from documentation.  ##
30 ## ----------------------------- ##
31
32 TMP=$TMP_BASE-ex
33 cat > $TMP.1 <<EOF
34 Copyright @copyright{} 1990-2005, 2007-2009 Free Software
35 Foundation, Inc.
36 EOF
37 cat > $TMP.2 <<EOF
38 # Copyright (C) 1990-2005, 2007-2009 Free Software
39 # Foundation, Inc.
40 EOF
41 cat > $TMP.3 <<EOF
42 /*
43  * Copyright &copy; 90,2005,2007-2009
44  * Free Software Foundation, Inc.
45  */
46 EOF
47 cat > $TMP.4 <<EOF
48 ## Copyright (C) 1990-2005, 2007-2009 Free Software
49 #  Foundation, Inc.
50 EOF
51 cat > $TMP.5 <<EOF
52 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
53 EOF
54 cat > $TMP.6 <<EOF
55 ## Copyright (C) 1990-2005, 2007-2009 Free Software
56 #  Foundation, Inc.
57
58 Copyright (C) 1990-2005, 2007-2009 Free Software Foundation,
59 Inc.
60 EOF
61 cat > $TMP.7 <<EOF
62 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
63
64 # Copyright (C) 1990-2005, 2007-2009 Free Software
65 # Foundation, Inc.
66 EOF
67
68 UPDATE_COPYRIGHT_YEAR=2009 \
69   update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr
70 compare /dev/null $TMP-stdout || exit 1
71 compare - $TMP-stderr <<EOF || exit 1
72 $TMP.4: warning: FSF copyright statement not found
73 $TMP.5: warning: FSF copyright statement not found
74 EOF
75 compare - $TMP.1 <<EOF || exit 1
76 Copyright @copyright{} 1990-2005, 2007-2009 Free Software
77 Foundation, Inc.
78 EOF
79 compare - $TMP.2 <<EOF || exit 1
80 # Copyright (C) 1990-2005, 2007-2009 Free Software
81 # Foundation, Inc.
82 EOF
83 compare - $TMP.3 <<EOF || exit 1
84 /*
85  * Copyright &copy; 90,2005,2007-2009
86  * Free Software Foundation, Inc.
87  */
88 EOF
89 compare - $TMP.4 <<EOF || exit 1
90 ## Copyright (C) 1990-2005, 2007-2009 Free Software
91 #  Foundation, Inc.
92 EOF
93 compare - $TMP.5 <<EOF || exit 1
94 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
95 EOF
96 compare - $TMP.6 <<EOF || exit 1
97 ## Copyright (C) 1990-2005, 2007-2009 Free Software
98 #  Foundation, Inc.
99
100 Copyright (C) 1990-2005, 2007-2009 Free Software Foundation,
101 Inc.
102 EOF
103 compare - $TMP.7 <<EOF || exit 1
104 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
105
106 # Copyright (C) 1990-2005, 2007-2009 Free Software
107 # Foundation, Inc.
108 EOF
109
110 UPDATE_COPYRIGHT_YEAR=2010 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
111   update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr
112 compare /dev/null $TMP-stdout || exit 1
113 compare - $TMP-stderr <<EOF || exit 1
114 $TMP.4: warning: FSF copyright statement not found
115 $TMP.5: warning: FSF copyright statement not found
116 EOF
117 compare - $TMP.1 <<EOF || exit 1
118 Copyright @copyright{} 1990-2005, 2007-2010 Free Software Foundation,
119 Inc.
120 EOF
121 compare - $TMP.2 <<EOF || exit 1
122 # Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc.
123 EOF
124 compare - $TMP.3 <<EOF || exit 1
125 /*
126  * Copyright &copy; 1990, 2005, 2007-2010 Free Software Foundation, Inc.
127  */
128 EOF
129 compare - $TMP.4 <<EOF || exit 1
130 ## Copyright (C) 1990-2005, 2007-2009 Free Software
131 #  Foundation, Inc.
132 EOF
133 compare - $TMP.5 <<EOF || exit 1
134 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
135 EOF
136 compare - $TMP.6 <<EOF || exit 1
137 ## Copyright (C) 1990-2005, 2007-2009 Free Software
138 #  Foundation, Inc.
139
140 Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc.
141 EOF
142 compare - $TMP.7 <<EOF || exit 1
143 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
144
145 # Copyright (C) 1990-2005, 2007-2010 Free Software Foundation, Inc.
146 EOF
147
148 UPDATE_COPYRIGHT_YEAR=2011 \
149   update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr
150 compare /dev/null $TMP-stdout || exit 1
151 compare - $TMP-stderr <<EOF || exit 1
152 $TMP.4: warning: FSF copyright statement not found
153 $TMP.5: warning: FSF copyright statement not found
154 EOF
155 compare - $TMP.1 <<EOF || exit 1
156 Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
157 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
158 2011 Free Software Foundation, Inc.
159 EOF
160 compare - $TMP.2 <<EOF || exit 1
161 # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
162 # 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
163 # Free Software Foundation, Inc.
164 EOF
165 compare - $TMP.3 <<EOF || exit 1
166 /*
167  * Copyright &copy; 1990, 2005, 2007, 2008, 2009, 2010, 2011 Free
168  * Software Foundation, Inc.
169  */
170 EOF
171 compare - $TMP.4 <<EOF || exit 1
172 ## Copyright (C) 1990-2005, 2007-2009 Free Software
173 #  Foundation, Inc.
174 EOF
175 compare - $TMP.5 <<EOF || exit 1
176 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
177 EOF
178 compare - $TMP.6 <<EOF || exit 1
179 ## Copyright (C) 1990-2005, 2007-2009 Free Software
180 #  Foundation, Inc.
181
182 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
183 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
184 Free Software Foundation, Inc.
185 EOF
186 compare - $TMP.7 <<EOF || exit 1
187 Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
188
189 # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
190 # 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
191 # Free Software Foundation, Inc.
192 EOF
193
194 rm $TMP*
195
196 ## -------------- ##
197 ## Current year.  ##
198 ## -------------- ##
199
200 TMP=$TMP_BASE-current-year
201 YEAR=`/usr/bin/perl -e 'print [localtime]->[5] + 1900'`;
202 cat > $TMP <<EOF
203 '\" Copyright (C) 2006
204 '\" Free Software Foundation,
205 '\" Inc.
206 EOF
207 update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
208 compare /dev/null $TMP-stdout || exit 1
209 compare /dev/null $TMP-stderr || exit 1
210 compare - $TMP <<EOF || exit 1
211 '\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc.
212 EOF
213 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
214   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
215 compare /dev/null $TMP-stdout || exit 1
216 compare /dev/null $TMP-stderr || exit 1
217 compare - $TMP <<EOF || exit 1
218 '\" Copyright (C) 2006, $YEAR Free Software Foundation, Inc.
219 EOF
220 rm $TMP*
221
222 ## ------------------ ##
223 ## Surrounding text.  ##
224 ## ------------------ ##
225
226 TMP=$TMP_BASE-surrounding-text
227 cat > $TMP <<EOF
228     Undisturbed text.
229 dnl Undisturbed text.
230 dnl Copyright (C) 89
231 dnl Free Software Foundation, Inc.
232 dnl   Undisturbed text.
233 EOF
234 UPDATE_COPYRIGHT_YEAR=2010 \
235   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
236 compare /dev/null $TMP-stdout || exit 1
237 compare /dev/null $TMP-stderr || exit 1
238 compare - $TMP <<EOF || exit 1
239     Undisturbed text.
240 dnl Undisturbed text.
241 dnl Copyright (C) 1989, 2010 Free Software Foundation, Inc.
242 dnl   Undisturbed text.
243 EOF
244 rm $TMP*
245
246 ## --------------- ##
247 ## Widest prefix.  ##
248 ## --------------- ##
249
250 TMP=$TMP_BASE-widest-prefix
251 cat > $TMP <<EOF
252 #### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
253 #### 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
254 #### 2008 Free Software Foundation, Inc.
255 EOF
256 UPDATE_COPYRIGHT_YEAR=2010 \
257   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
258 compare /dev/null $TMP-stdout || exit 1
259 compare /dev/null $TMP-stderr || exit 1
260 compare - $TMP <<EOF || exit 1
261 #### Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984,
262 #### 1985, 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
263 #### 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
264 EOF
265 UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
266   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
267 compare /dev/null $TMP-stdout || exit 1
268 compare /dev/null $TMP-stderr || exit 1
269 compare - $TMP <<EOF || exit 1
270 #### Copyright (C) 1976-1988, 1999-2008, 2010-2011 Free Software
271 #### Foundation, Inc.
272 EOF
273 rm $TMP*
274
275 ## ------------------- ##
276 ## Prefix too large.  ##
277 ## ------------------- ##
278
279 TMP=$TMP_BASE-prefix-too-large
280 cat > $TMP <<EOF
281 ####  Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
282 ####  1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
283 ####  2008 Free Software Foundation, Inc.
284 EOF
285 UPDATE_COPYRIGHT_YEAR=2010 \
286   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
287 compare /dev/null $TMP-stdout || exit 1
288 compare - $TMP-stderr <<EOF || exit 1
289 $TMP: warning: FSF copyright statement not found
290 EOF
291 compare - $TMP <<EOF || exit 1
292 ####  Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
293 ####  1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
294 ####  2008 Free Software Foundation, Inc.
295 EOF
296 rm $TMP*
297
298 ## ------------- ##
299 ## Blank lines.  ##
300 ## ------------- ##
301
302 TMP=$TMP_BASE-blank-lines
303 cat > $TMP <<EOF
304 #Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
305 #
306 #1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
307 #2008 Free Software Foundation, Inc.
308
309 Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
310
311 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
312 2008 Free Software Foundation, Inc.
313 EOF
314 UPDATE_COPYRIGHT_YEAR=2010 \
315   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
316 compare /dev/null $TMP-stdout || exit 1
317 compare - $TMP-stderr <<EOF || exit 1
318 $TMP: warning: FSF copyright statement not found
319 EOF
320 compare - $TMP <<EOF || exit 1
321 #Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
322 #
323 #1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
324 #2008 Free Software Foundation, Inc.
325
326 Copyright (C) 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985,
327
328 1986, 1987, 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
329 2008 Free Software Foundation, Inc.
330 EOF
331 rm $TMP*
332
333 ## -------------- ##
334 ## Leading tabs.  ##
335 ## -------------- ##
336
337 TMP=$TMP_BASE-leading-tabs
338 cat > $TMP <<EOF
339         Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 98,
340          1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
341         Software Foundation, Inc.
342 EOF
343 UPDATE_COPYRIGHT_YEAR=2010 \
344   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
345 compare /dev/null $TMP-stdout || exit 1
346 compare /dev/null $TMP-stderr || exit 1
347 compare - $TMP <<EOF || exit 1
348         Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
349         1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
350         2007, 2008, 2009, 2010 Free Software Foundation, Inc.
351 EOF
352 UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
353   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
354 compare /dev/null $TMP-stdout || exit 1
355 compare /dev/null $TMP-stderr || exit 1
356 compare - $TMP <<EOF || exit 1
357         Copyright (C) 1987-1988, 1991-2011 Free Software Foundation,
358         Inc.
359 EOF
360 rm $TMP*
361
362 ## -------------------- ##
363 ## Unusual whitespace.  ##
364 ## -------------------- ##
365
366 TMP=$TMP_BASE-unusual-ws
367 cat > $TMP <<EOF
368                 # Copyright (C) 87-88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
369                 # 98, 1999, 2000, 2001, 2002, 2003,             \f         2004, 2005, 2006, 2007, 2008,
370                 # 2009 Free Software Foundation, Inc.
371 EOF
372 UPDATE_COPYRIGHT_YEAR=2010 \
373   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
374 compare /dev/null $TMP-stdout || exit 1
375 compare /dev/null $TMP-stderr || exit 1
376 compare - $TMP <<EOF || exit 1
377                 # Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994,
378                 # 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
379                 # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
380                 # Foundation, Inc.
381 EOF
382 UPDATE_COPYRIGHT_YEAR=2011 UPDATE_COPYRIGHT_USE_INTERVALS=1 \
383   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
384 compare /dev/null $TMP-stdout || exit 1
385 compare /dev/null $TMP-stderr || exit 1
386 compare - $TMP <<EOF || exit 1
387                 # Copyright (C) 1987-1988, 1991-2011 Free Software
388                 # Foundation, Inc.
389 EOF
390 rm $TMP*
391
392 ## --------- ##
393 ## DOS EOL.  ##
394 ## --------- ##
395
396 TMP=$TMP_BASE-dos-eol
397 tr @ '\015' > $TMP <<\EOF
398 Rem Copyright (C) 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@
399 Rem 98, 1999, 2000, 2001, 2002, 2003,  2004, 2005, 2006, 2007, 2008,@
400 Rem 2009 Free Software Foundation, Inc.@
401 EOF
402 UPDATE_COPYRIGHT_YEAR=2010 \
403   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
404 compare /dev/null $TMP-stdout || exit 1
405 compare /dev/null $TMP-stderr || exit 1
406 tr @ '\015' > $TMP-exp <<\EOF
407 Rem Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,@
408 Rem 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,@
409 Rem 2009, 2010 Free Software Foundation, Inc.@
410 EOF
411 compare $TMP-exp $TMP || exit 1
412 rm $TMP*
413
414 ## --------------- ##
415 ## Omitted "(C)".  ##
416 ## --------------- ##
417
418 TMP=$TMP_BASE-omitted-circle-c
419 cat > $TMP <<EOF
420   Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
421   98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
422   2009 Free Software Foundation, Inc.
423 EOF
424 UPDATE_COPYRIGHT_YEAR=2010 \
425   update-copyright $TMP 1> $TMP-stdout 2> $TMP-stderr
426 compare /dev/null $TMP-stdout || exit 1
427 compare /dev/null $TMP-stderr || exit 1
428 compare - $TMP <<EOF || exit 1
429   Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
430   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
431   Free Software Foundation, Inc.
432 EOF
433 rm $TMP*
434
435 ## ------------------ ##
436 ## C-style comments.  ##
437 ## ------------------ ##
438
439 TMP=$TMP_BASE-c-style-comments
440 cat > $TMP.star <<EOF
441 /*  Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
442  *  98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
443  *  2009 Free Software Foundation, Inc.  */
444 EOF
445 cat > $TMP.space <<EOF
446   /*Copyright 87, 88, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
447     98, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
448     2009 Free Software Foundation, Inc.  */
449 EOF
450 cat > $TMP.single-line <<EOF
451 /*   Copyright 87, 1991, 1992 Free Software Foundation, Inc.  */
452 EOF
453 cat > $TMP.single-line-wrapped <<EOF
454  /* Copyright 1988, 1991, 1992, 1993 Free Software Foundation, Inc.  */
455 EOF
456 cat > $TMP.extra-text-star <<EOF
457  /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc.  End
458   * More comments.  */
459 EOF
460 cat > $TMP.extra-text-space <<EOF
461  /* Copyright 1987, 1988, 1991, 1992 Free Software Foundation, Inc. ***
462     * End of comments. */
463 EOF
464 UPDATE_COPYRIGHT_YEAR=2010 \
465   update-copyright $TMP.* 1> $TMP-stdout 2> $TMP-stderr
466 compare /dev/null $TMP-stdout || exit 1
467 compare /dev/null $TMP-stderr || exit 1
468 compare - $TMP.star <<EOF || exit 1
469 /*  Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
470  *  1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
471  *  2009, 2010 Free Software Foundation, Inc.  */
472 EOF
473 compare - $TMP.space <<EOF || exit 1
474   /*Copyright 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
475     1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
476     2009, 2010 Free Software Foundation, Inc.  */
477 EOF
478 compare - $TMP.single-line <<EOF || exit 1
479 /*   Copyright 1987, 1991, 1992, 2010 Free Software Foundation, Inc.  */
480 EOF
481 compare - $TMP.single-line-wrapped <<EOF || exit 1
482  /* Copyright 1988, 1991, 1992, 1993, 2010 Free Software Foundation,
483   * Inc.  */
484 EOF
485 compare - $TMP.extra-text-star <<EOF || exit 1
486  /* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation,
487   * Inc.  End
488   * More comments.  */
489 EOF
490 compare - $TMP.extra-text-space <<EOF || exit 1
491  /* Copyright 1987, 1988, 1991, 1992, 2010 Free Software Foundation,
492     Inc. ***
493     * End of comments. */
494 EOF
495 rm $TMP*
496
497 exit 0