diff options
Diffstat (limited to 'tests/name/pattern.test')
-rw-r--r-- | tests/name/pattern.test | 332 |
1 files changed, 0 insertions, 332 deletions
diff --git a/tests/name/pattern.test b/tests/name/pattern.test deleted file mode 100644 index 8d8840c..0000000 --- a/tests/name/pattern.test +++ /dev/null @@ -1,332 +0,0 @@ -# file : tests/name/pattern.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -.include ../common.test - -+cat <<EOI >=build/root.build -define txt: file -txt{*}: extension = txt -EOI - -$* <'print pp%*.txt' >'pp%*.txt' : project-simple -$* <'print pp%{*.txt -x*}' >'pp%*.txt pp%-x*' : project-group - -$* <"print '*.txt'" >'*.txt' : quoted-single -$* <'print "*.txt"' >'*.txt' : quoted-double -$* <<EOI >'*.txt' : quoted-expansion -pat = '*' -print "$(pat).txt" -EOI - -: detect -: -: Test pattern_mode parsing logic. -{ - : second-pattern - : - touch foo.txt; - $* <'print {foo *.txt}' >'foo foo.txt' - - : independent-patterns - : - touch foo.txt -bar; - $* <'print {*.txt foo* -b*}' >'foo.txt foo.txt -bar' - - : second-inclusion - : - touch foo.txt bar.txt; - $* <'print {f*.txt +b*.txt}' >'foo.txt bar.txt' -} - -: diagnostics -: -{ - : simple - : - $* <'print {*.txt +foo file{bar}}' 2>>EOE != 0 - <stdin>:1:19: error: name pattern inclusion or exclusion expected - EOE - - : inclusion-exclusion-sign - : - $* <'print {*.txt -foo bar}' 2>>EOE != 0 - <stdin>:1:19: error: name pattern inclusion or exclusion expected - EOE - - : inclusion-quoted - : - $* <'print {*.txt -foo "+bar"}' 2>>EOE != 0 - <stdin>:1:19: error: name pattern inclusion or exclusion expected - EOE - - : empty-inclusion-exclusion - : - $* <'print {*.txt -}' 2>>EOE != 0 - <stdin>:1:8: error: empty name pattern - EOE - - : inconsistent-result - : - $* <'print {*.txt +foo/}' 2>>EOE != 0 - <stdin>:1:8: error: inconsistent file/directory result in name pattern - EOE -} - -: basics -: -{ - touch foo.txt; - $* <'print *.txt' >'foo.txt' : simple-file - - mkdir foo; - $* <'print */' >/'foo/' : simple-dir - - touch foo.txt; - $* <'print {*.txt}' >'foo.txt' : group - - touch foo.txt; - $* <'print {+*.txt}' >'foo.txt' : plus-prefixed - - mkdir dir && touch dir/foo.txt; - $* <'print dir/{*.txt}' >'dir/foo.txt' : dir - - touch foo.txt; - $* <'print file{*.txt}' >'file{foo.txt}' : type - - touch foo.txt; - $* <'print x@{*.txt}' >'x@foo.txt' : pair - - touch bar.txt; - $* <'print x@dir/file{f*.txt}' >'' : empty - - mkdir dir && touch dir/foo.txt; - $* <'print **.txt' >/'dir/foo.txt' : recursive - - mkdir dir && touch dir/foo.txt; - $* <'print d*/*.txt' >/'dir/foo.txt' : multi-pattern - - touch foo.txt bar.txt; - $* <'print {*.txt -bar.txt}' >'foo.txt' : exclude-non-pattern - - mkdir baz; - touch foo.txt bar.txt baz/fox.txt baz/box.txt; - $* <'print {**.txt -b*.txt -b*/*}' >'foo.txt' : exclude-pattern - - touch foo.txt bar.txt baz.txt; - $* <'print {*.txt -{*z.txt bar.txt}}' >'foo.txt' : exclude-group - - touch bar.txt; - $* <'print {f*.txt +bar.txt}' >'bar.txt' : include-non-wildcard - - touch bar.txt; - $* <'print {f*.txt +b*.txt}' >'bar.txt' : include-pattern - - mkdir bar; - $* <'print {f*/ +{b*/}}' >/'bar/' : include-group - - touch foo.txt fox.txt; - $* <'print {*.txt -f*.txt +*x.txt}' >'fox.txt' : include-exclude-order - - touch foo.txt; - $* <'print {+foo.txt} {+bar.txt}' >'foo.txt' : non-wildcard -} - -: target-type -: -: Test target type-specific pattern amendment logic. -{ - : append-extension - : - touch foo.txt bar.txt; - $* <'print txt{* -bar}' >'txt{foo}' - - : existing-extension - : - touch foo.txt bar.txt; - $* <'print txt{*.txt -bar.txt}' >'txt{foo.txt}' - - : append-slash - : - mkdir foo bar; - $* <'print dir{* -bar}' >/'dir{foo/}' - - : existing-slash - : - mkdir foo bar; - $* <'print dir{*/ -bar/}' >/'dir{foo/}' -} - -: dot -: -: Test filtering of hidden files/directories. -{ - touch foo.txt .foo.txt; - $* <'print *.txt' >'foo.txt' : file-excl - - touch foo.txt .foo.txt; - $* <'print .*.txt' >'.foo.txt' : file-incl - - mkdir dir .dir; - $* <'print */' >/'dir/' : dir-excl - - mkdir dir .dir; - $* <'print .*/' >/'.dir/' : dir-incl - - mkdir dir .dir && touch dir/foo.txt .dir/foo.txt; - $* <'print */*.txt' >/'dir/foo.txt'; - $* <'print **.txt' >/'dir/foo.txt' : dir-interm-excl - - mkdir dir .dir && touch dir/foo.txt .dir/foo.txt; - $* <'print .*/*.txt' >/'.dir/foo.txt' : dir-interm-incl -} - -: expansion -: -: Test interaction with expansion/concatenation/re-parse. -{ - # Do we want to recognize patterns in non-concatenating expansion? - # - # pat = '*.txt' - # print $pat - # - # While this case is probably better rewritten as (i.e., move pattern search - # to variable assignment): - # - # pat = *.txt - # print $pat - # - # One may also want to do something like this: - # - # pat = '*.txt' - # print dir1/{$pat} - # print dir2/{$pat} - # - # Instead, he should write it as follows: - # - # pat = '*.txt' - # print dir1/{+$pat} - # print dir2/{+$pat} - # - # Note that if we make it work, escaping this case will be pretty hairy: - # - # filters = --include '*.txt' --exclude '*.obj' - # options += $filters - - : prefixed-pattern-via-expansion - : - : Pattern is prefixed with the literal unquoted plus character, that is - : stripped. - : - touch foo.txt; - $* <<EOI >foo.txt - pat = '*.txt' - print {+$pat} - EOI - - : non-prefixed-pattern-via-concat-expansion - : - : Plus character is a part of the pattern and so is not stripped. - : - touch +foo.txt; - $* <<EOI >'+foo.txt' - pat = '+*' - ext = 'txt' - print {$pat.$ext} - EOI - - : not-pattern-expansion - : - $* <<EOI >'+*.txt' - pat = '+*.txt' - print {$pat} - EOI - - : not-pattern-quoted - : - $* <<EOI >'+*.txt' - print {'+*.txt'} - EOI - - : pattern-via-expansion-list - : - touch foo.txt bar.hxx; - $* <<EOI >'bar.hxx foo.txt' - pats = '*.hxx' '*.txt' - print {+{$pats}} - EOI - - : pattern-via-expansion-type - : - touch foo.txt; - $* <<EOI >'txt{foo}' - pat = '*' - print txt{+$pat} - EOI - - : pattern-via-expansion-dir - : - mkdir dir; - touch dir/foo.txt; - $* <<EOI >dir/foo.txt - pat = '*.txt' - print dir/{+$pat} - EOI - - : pattern-via-expansion-dir-type - : - mkdir dir; - touch dir/foo.txt; - $* <<EOI >dir/txt{foo} - pat = '*' - print dir/txt{+$pat} - EOI - - : pattern-via-concat - : - touch foo.txt; - $* <<EOI >'foo.txt' - ext = txt - print *.$ext - EOI - - : pattern-via-concat-expansion - : - touch foo.txt; - $* <<EOI >'foo.txt' - pat = 'f*' - ext = txt - print $pat.$ext - EOI -} - -: command-line -: -: Test pattern expansion on the command line. -{ - : variable - : - { - mkdir dir; - $* <'print $d' 'd=*/' >/'dir/' : dir - - mkdir dir; - $* <'print $d' 'd=dir{*}' >/'dir{dir/}' : dir-type - - touch foo.txt; - $* <'print $f' 'f=*.txt' >'foo.txt' : feil - } - - : buildspec - : - { - test.arguments = - test.options += --buildfile buildfile - - mkdir dir && cat <'./:' >=dir/buildfile; - $* '*/' : dir - - mkdir dir dir1 && cat <'./:' >=dir/buildfile; - $* 'update(dir{* -dir1})' : dir-type - } -} |