diff options
Diffstat (limited to 't/internals.tap')
-rw-r--r-- | t/internals.tap | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/t/internals.tap b/t/internals.tap new file mode 100644 index 000000000..73eed2531 --- /dev/null +++ b/t/internals.tap @@ -0,0 +1,282 @@ +#! /bin/sh +# Copyright (C) 2012-2014 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test some generic Automake-provided internal macros and make functions. + +am_create_testdir=empty +. test-init.sh + +plan_ 13 + +# Filter out Automake comments. +grep -v '^##' "$am_amdir"/header-vars.mk > defn.mk \ + || fatal_ "fetching makefile fragment headers-vars.am" + +# WARNING: there are a lot of embedded tabs in the makefile +# fragments used by this script. They are all deliberate. +# DO NOT "NORMALIZE" THEM TO SPACES! + +i=0 +T () +{ + i=$(($i + 1)) + mkdir T$i.d + cd T$i.d + { + echo 'include ../defn.mk' + echo 'lower = abcdefghijklmnopqrstuvwxyz' + echo 'upper = ABCDEFGHIJKLMNOPQRSTUVWXYZ' + echo 'digits = 0123456789' + } > Makefile + cat >> Makefile + test_name=$1; shift + command_ok_ "$test_name" $MAKE ${1+"$@"} test + cd .. +} + +T 'sanity check' FOO=ok <<'END' +FOO = ko +test: + test $(FOO) = ok + touch sane +END +test -f T1.d/sane || fatal_ "function 'T' is buggy" + +T 'am.util.strip-first-word' <<'END' +test: + test '$(call am.util.strip-first-word,)' = '' + test '$(call am.util.strip-first-word,1)' = '' + test '$(call am.util.strip-first-word,1 1)' = '1' + test '$(call am.util.strip-first-word,1 2)' = '2' + test '$(call am.util.strip-first-word,1 2 3 4 5 6 7 8)' = '2 3 4 5 6 7 8' + test '$(call am.util.strip-first-word, 1 2 )' = '2' +END + +T 'am.util.strip-last-word' <<'END' +test: + test '$(call am.util.strip-last-word,)' = '' + test '$(call am.util.strip-last-word,1)' = '' + test '$(call am.util.strip-last-word,1 1)' = '1' + test '$(call am.util.strip-last-word,1 2)' = '1' + test '$(call am.util.strip-last-word,1 2 3 4 5 6 7 8)' = '1 2 3 4 5 6 7' + test '$(call am.util.strip-last-word, 1 2 )' = '1' +END + +T 'am.util.uniq' <<'END' +test: + test '$(call am.util.uniq,)' = '' + test '$(call am.util.uniq,1)' = '1' + test '$(call am.util.uniq,1 1)' = '1' + test '$(call am.util.uniq,1 2)' = '1 2' + test '$(call am.util.uniq,2 1)' = '2 1' + test '$(call am.util.uniq,1 2 3)' = '1 2 3' + test '$(call am.util.uniq,2 3 1)' = '2 3 1' + test '$(call am.util.uniq,1 1 1)' = '1' + test '$(call am.util.uniq,1 2 1)' = '1 2' + test '$(call am.util.uniq,2 1 1)' = '2 1' + test '$(call am.util.uniq,2 1 1)' = '2 1' + test '$(call am.util.uniq,2 2 1)' = '2 1' + test '$(call am.util.uniq,1 1 1 3 1 1 1)' = '1 3' + test '$(call am.util.uniq,3 1 1 4 1 4 1 1)' = '3 1 4' + test '$(call am.util.uniq, 1 3 1 )' = '1 3' +END + +T 'am.util.strip-suffixes' <<'END' +test: + test '$(call am.util.strip-suffixes,,)' = '' + test '$(call am.util.strip-suffixes, ,)' = '' + test '$(call am.util.strip-suffixes,, )' = '' + test '$(call am.util.strip-suffixes, , )' = '' + test '$(call am.util.strip-suffixes,x,)' = '' + test '$(call am.util.strip-suffixes,x y, )' = '' + test '$(call am.util.strip-suffixes,,x y)' = 'x y' + test '$(call am.util.strip-suffixes, ,x y)' = 'x y' + test '$(call am.util.strip-suffixes,.c,foo.c)' = 'foo' + test '$(call am.util.strip-suffixes,.foo,a.foo b.foo)' = 'a b' + test '$(call am.util.strip-suffixes, x y, ax ay ax)' = 'a a a' + test '$(call am.util.strip-suffixes,x,ax)' = 'a' + test '$(call am.util.strip-suffixes,x,xa)' = 'xa' + test '$(call am.util.strip-suffixes,x,xx)' = 'x' + test '$(call am.util.strip-suffixes,x,xux)' = 'xu' + test '$(call am.util.strip-suffixes, .c .c++, \ + foo.c bar.c++ baz.cxx zap.c)' = 'foo bar baz.cxx zap' + test '$(call am.util.strip-suffixes, .a .b, \ + 1.a.a 2.a.b 3.b.a 4.b.b)' = '1.a 2.a 3.b 4.b' + # Corner cases: the *first* matched suffix is stripped + test '$(call am.util.strip-suffixes,.a .b,x.a.a)' = 'x.a' + test '$(call am.util.strip-suffixes,.a .b,x.a.b)' = 'x.a' + test '$(call am.util.strip-suffixes,.a .b,x.b.a)' = 'x.b' + test '$(call am.util.strip-suffixes,.a .b,x.b.b)' = 'x.b' + test '$(call am.util.strip-suffixes, .a .b.a, foo.b.a bar.a)' \ + = 'foo.b bar' + test '$(call am.util.strip-suffixes, .b.a .a, foo.b.a bar.a)' \ + = 'foo bar' +END + +T 'am.util.toupper' <<'END' +test: + test '$(call am.util.toupper,a)' = A + test '$(call am.util.toupper,A)' = A + test '$(call am.util.toupper,aba)' = ABA + test '$(call am.util.toupper,a b)' = 'A B' + test '$(call am.util.toupper, a B)' = ' A B' + test '$(call am.util.toupper,Ab )' = 'AB ' + test '$(call am.util.toupper,A B c )' = 'A B C ' + test '$(call am.util.toupper,0)' = 0 + test '$(call am.util.toupper,0d)' = 0D + test '$(call am.util.toupper,@:&/?-)' = '@:&/?-' + test '$(call am.util.toupper,a@B)' = A@B + test '$(call am.util.toupper,zxzxzxZXZxzxzxzxzx)' = ZXZXZXZXZXZXZXZXZX + test '$(call am.util.toupper,$(lower))' = '$(upper)' + test '$(call am.util.toupper,$(upper))' = '$(upper)' +END + +T 'am.util.tolower' <<'END' +test: + test '$(call am.util.tolower,A)' = a + test '$(call am.util.tolower,a)' = a + test '$(call am.util.tolower,ABA)' = aba + test '$(call am.util.tolower,A B)' = 'a b' + test '$(call am.util.tolower, A b)' = ' a b' + test '$(call am.util.tolower,aB )' = 'ab ' + test '$(call am.util.tolower,a b C )' = 'a b c ' + test '$(call am.util.tolower,0)' = 0 + test '$(call am.util.tolower,0D)' = 0d + test '$(call am.util.tolower,@:&/?-)' = '@:&/?-' + test '$(call am.util.tolower,a@B)' = a@b + test '$(call am.util.tolower,ZXZXZXzxzXZXZXZXZX)' = zxzxzxzxzxzxzxzxzx + test '$(call am.util.tolower,$(upper))' = '$(lower)' + test '$(call am.util.tolower,$(lower))' = '$(lower)' +END + +T 'am.util.canon' <<'END' +comma = , +dollar = $$ +bslash = \\ +test: + test '$(call am.util.canon,A)' = A + test '$(call am.util.canon, b)' = b + test '$(call am.util.canon, foo )' = foo + test '$(call am.util.canon,$(upper)$(lower)$(digits)_)' = '$(upper)$(lower)$(digits)_' + test '$(call am.util.canon,@)' = '@' + test '$(call am.util.canon,%)' = '_' + test '$(call am.util.canon,.&@!;)' = '__@__' + test '$(call am.util.canon,')' = '_' + test '$(call am.util.canon,$(dollar))' = '_' + test '$(call am.util.canon,$(bslash))' = '_' + test '$(call am.util.canon,$(comma))' = '_' + test '$(call am.util.canon,$(bslash)$(comma))' = '__' + test '$(call am.util.canon,x$(comma)@$(bslash))' = 'x_@_' +END + +FOO_ENVIRON=ok; export FOO_ENVIRON +FOO_UNDEF=; unset FOO_UNDEF +FOO_INDIR=; unset FOO_INDIR +T 'am.vars.is-undef' FOO_CMDLINE=ok <<'END' + +FOO_MAKEFILE_1 = ok +FOO_MAKEFILE_2 := ok +override FOO_OVERRIDE_1 = ok +override FOO_OVERRIDE_2 := ok +FOO_EMPTY_1 = +FOO_EMPTY_2 := + +# Help avoiding typos. +X = $(call am.vars.is-undef,$1) + +test: + @echo UNDEF: + test '$(call X,FOO_UNDEF)' = yes + @echo ENVIRON: + test '$(call X,FOO_ENVIRON)' = yes + @echo MAKEFILE 1: + test -z '$(call X,FOO_MAKEFILE_1)' + @echo MAKEFILE 2: + test -z '$(call X,FOO_MAKEFILE_2)' + @echo CMDLINE: + test -z '$(call X,FOO_CMDLINE)' + @echo OVERRIDE 1: + test -z '$(call X,FOO_OVERRIDE_1)' + @echo OVERRIDE 2: + test -z '$(call X,FOO_OVERRIDE_2)' + @echo EMPTY 1: + test -z '$(call X,FOO_EMPTY_1)' + @echo EMPTY 2: + test -z '$(call X,FOO_EMPTY_2)' + @echo DEFAULT: + test -z '$(call X,CC)' + @echo EXTRA SPACES: + test '$(call X, FOO_UNDEF )' = yes + @echo SANITY CHECKS: + test '$(FOO_ENVIRON)' = ok + test '$(FOO_CMDLINE)' = ok +END +unset FOO_ENVIRON + +T 'am.chars.newline (1)' <<'END' +test: + @echo OK > fo1$(am.chars.newline)@touch ba1$(am.chars.newline)-false > qu1 + test `cat fo1` = OK + test -f ba1 + test -f qu1 +END + +T 'am.chars.newline (2)' <<'END' +my_newline = $(am.chars.newline) +test: + @echo OK > fo2$(my_newline)@touch ba2$(my_newline)-false > qu2 + test `cat fo2` = OK + test -f ba2 + test -f qu2 +END + +T 'am.chars.newline (3)' <<'END' +my_newline = $(am.chars.newline) +command-1 = test x = x$(am.chars.newline) +command-2 = test y = y$(my_newline) +test: + $(command-1)$(command-2)touch n3 + test -f n3 +END + +T 'am.util.file-exists' <<'END' +prepare: + : > 'a' + test -f 'a' + : > '?' + test -f '?' + : > 'foo bar' + test -f 'foo bar' + mkdir 'a b' + test -d 'a b' + : > 'a b'/'c d' + test -f 'a b'/'c d' +test: prepare + test x'$(call am.util.file-exists,.)' = x'yes' + test x'$(call am.util.file-exists,Makefile)' = x'yes' + test x'$(call am.util.file-exists,.././defn.mk)' = x'yes' + test x'$(call am.util.file-exists,none)' = x + test x'$(call am.util.file-exists,Makefile oops)' = x + test x'$(call am.util.file-exists,foo bar)' = x'yes' + test x'$(call am.util.file-exists,a b)' = x'yes' + test x'$(call am.util.file-exists,a b/c d)' = x'yes' + test x'$(call am.util.file-exists,*)' = x + test x'$(call am.util.file-exists,a)' = x'yes' + test x'$(call am.util.file-exists,[ab])' = x + test x'$(call am.util.file-exists,?)' = x'yes' +END + +: |