mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-26 14:18:38 -05:00
88 lines
3.0 KiB
Python
88 lines
3.0 KiB
Python
#!/usr/bin/python
|
|
|
|
# Copyright 2014 Steven Watanabe
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
# This tests the GLOB rule.
|
|
|
|
import os
|
|
import BoostBuild
|
|
|
|
def test_glob(files, glob, expected, setup=""):
|
|
t = BoostBuild.Tester(["-ffile.jam"], pass_toolset=0)
|
|
t.write("file.jam", setup + """
|
|
for local p in [ SORT %s ]
|
|
{
|
|
ECHO $(p) ;
|
|
}
|
|
UPDATE ;
|
|
""" % glob)
|
|
for f in files:
|
|
t.write(f, "")
|
|
# convert / into \ on windows
|
|
expected = [os.path.join(*p.split("/")) for p in expected]
|
|
expected.sort()
|
|
t.run_build_system(stdout="\n".join(expected + [""]))
|
|
t.cleanup()
|
|
|
|
# one or both arguments empty
|
|
test_glob([], "[ GLOB : ]", [])
|
|
test_glob([], "[ GLOB . : ]", [])
|
|
test_glob([], "[ GLOB : * ]", [])
|
|
|
|
# a single result
|
|
test_glob([], "[ GLOB . : * ]", ["./file.jam"])
|
|
|
|
# * can match any number of characters
|
|
test_glob([], "[ GLOB . : file*.jam ]", ["./file.jam"])
|
|
test_glob([], "[ GLOB . : f*am ]", ["./file.jam"])
|
|
# ? should match a single character, but not more than one
|
|
test_glob([], "[ GLOB . : fi?e.?am ]", ["./file.jam"])
|
|
test_glob([], "[ GLOB . : fi?.jam ]", [])
|
|
# [abc-fh-j] matches a set of characters
|
|
test_glob([], "[ GLOB . : [f][i][l][e].jam ]", ["./file.jam"])
|
|
test_glob([], "[ GLOB . : [fghau][^usdrwe][k-o][^f-s].jam ]", ["./file.jam"])
|
|
# \x matches x
|
|
test_glob([], "[ GLOB . : \\f\\i\\l\\e.jam ]", ["./file.jam"])
|
|
|
|
# multiple results
|
|
test_glob(["test.txt"], "[ GLOB . : * ]", ["./file.jam", "./test.txt"])
|
|
|
|
# directories
|
|
test_glob(["dir1/dir2/test.txt"], "[ GLOB dir1 : * ]", ["dir1/dir2"]);
|
|
|
|
# non-existent directory
|
|
test_glob([], "[ GLOB dir1 : * ] ", [])
|
|
|
|
# multiple directories and patterns
|
|
test_glob(["dir1/file1.txt", "dir2/file1.txt",
|
|
"dir2/file2.txt"],
|
|
"[ GLOB dir1 dir2 : file1* file2* ]",
|
|
["dir1/file1.txt", "dir2/file1.txt",
|
|
"dir2/file2.txt"])
|
|
|
|
# The directory can contain . and ..
|
|
test_glob(["dir/test.txt"], "[ GLOB dir/. : test.txt ]", ["dir/./test.txt"])
|
|
test_glob(["dir/test.txt"], "[ GLOB dir/.. : file.jam ]", ["dir/../file.jam"])
|
|
|
|
# On case insensitive filesystems, the result should
|
|
# be normalized. It should NOT be downcased.
|
|
test_glob(["TEST.TXT"], "[ GLOB . : TEST.TXT ]", ["./TEST.TXT"])
|
|
|
|
case_insensitive = (os.path.normcase("FILE") == "file")
|
|
|
|
if case_insensitive:
|
|
test_glob(["TEST.TXT"], "[ GLOB . : test.txt ]", ["./TEST.TXT"])
|
|
# This used to fail because the caching routines incorrectly
|
|
# reported that . and .. do not exist.
|
|
test_glob(["D1/D2/TEST.TXT"], "[ GLOB D1/./D2 : test.txt ]",
|
|
["D1/./D2/TEST.TXT"])
|
|
test_glob(["D1/TEST.TXT", "TEST.TXT"], "[ GLOB D1/../D1 : test.txt ]",
|
|
["D1/../D1/TEST.TXT"])
|
|
# This also failed because directories that were first found
|
|
# by GLOB were recorded as non-existent.
|
|
test_glob(["D1/D2/TEST.TXT"], "[ GLOB d1/d2 : test.txt ]",
|
|
["D1/D2/TEST.TXT"],
|
|
"GLOB . : * ;")
|