diff options
author | Brian Dessent <brian@dessent.net> | 2008-03-09 04:10:10 +0000 |
---|---|---|
committer | Brian Dessent <brian@dessent.net> | 2008-03-09 04:10:10 +0000 |
commit | 59fb00ae07d9cfbfac3735f541149bed2c7625cb (patch) | |
tree | de577bf100b29e165aaddd3c7a2076b422feb7f7 /winsup/utils/testsuite.h | |
parent | 68d2dd03a33cfa5c0feff6ce5618062a6ea3b613 (diff) | |
download | cygnal-59fb00ae07d9cfbfac3735f541149bed2c7625cb.tar.gz cygnal-59fb00ae07d9cfbfac3735f541149bed2c7625cb.tar.bz2 cygnal-59fb00ae07d9cfbfac3735f541149bed2c7625cb.zip |
* Makefile.in: Add a 'check' target that builds and runs
testsuite.exe from path-testsuite.o and testsuite.o.
* path.cc: Include testsuite.h.
(struct mnt): Change to a mnt_t typedef and don't define
mount_table when TESTSUITE is defined.
(find2): Don't include when TESTSUITE is defined to avoid warning.
(get_cygdrive0): Ditto.
(get_cygdrive): Ditto.
(read_mounts): Provide empty implementation when TESTSUITE is
defined.
(vconcat): Use the isslash macro.
(unconvert_slashes): New helper to convert to backslashses.
(rel_vconcat): Handle relative paths more gracefully.
(cygpath): Skip a leading "./" sequence. Avoid double-slashes.
Normalize final output to backslashes and remove redundant path
sequences.
* testsuite.cc: New file implementing testsuite driver.
* testsuite.h: New header implementing harness mount table and
series of tests.
Diffstat (limited to 'winsup/utils/testsuite.h')
-rw-r--r-- | winsup/utils/testsuite.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/winsup/utils/testsuite.h b/winsup/utils/testsuite.h new file mode 100644 index 000000000..3bc360ab5 --- /dev/null +++ b/winsup/utils/testsuite.h @@ -0,0 +1,131 @@ +/* testsuite.h + + Copyright 2008 Red Hat, Inc. + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +/* This file implements a test harness for the MinGW implementation of + POSIX path translation in utils/path.cc. This code is used by strace + and cygcheck which cannot depend on the Cygwin DLL. The tests below + are a basic set of sanity checks for translating relative and + absolute paths from POSIX form to Win32 form based on the contents of + a mount table. */ + +/* Including this file should be a no-op if TESTSUITE is not defined. */ +#ifdef TESTSUITE + +/* These definitions are common to both the testsuite mount table + as well as the testsuite definitions themselves, so define them + here so that they are only defined in one location. */ +#define TESTSUITE_ROOT "X:\\xyzroot" +#define TESTSUITE_CYGDRIVE "/testcygdrive" + +/* Define a mount table in the form that read_mounts() would populate. + This is used in place of actually reading the host mount + table from the registry for the duration of the testsuite. This + table should match the battery of tests below. */ + +#if defined(TESTSUITE_MOUNT_TABLE) +static mnt_t mount_table[] = { +/* native posix flags issys */ + { TESTSUITE_ROOT, (char*)"/", MOUNT_BINARY | MOUNT_SYSTEM, 1 }, + { "O:\\other", (char*)"/otherdir", MOUNT_BINARY | MOUNT_SYSTEM, 1 }, + { "S:\\some\\dir", (char*)"/somedir", MOUNT_BINARY | MOUNT_SYSTEM, 1 }, + { TESTSUITE_ROOT"\\bin", (char*)"/usr/bin", MOUNT_BINARY | MOUNT_SYSTEM, 1 }, + { TESTSUITE_ROOT"\\lib", (char*)"/usr/lib", MOUNT_BINARY | MOUNT_SYSTEM, 1 }, + { ".", (char*)TESTSUITE_CYGDRIVE, MOUNT_BINARY | MOUNT_SYSTEM | MOUNT_CYGDRIVE, 1 }, + { NULL, (char*)NULL, 0, 0 } +}; + + +/* Define the main set of tests. This is defined here instead of in + testsuite.cc so that all test harness data is in one place and not + spread over several files. */ + +#elif defined(TESTSUITE_TESTS) +#define NO_CWD "N/A" +static test_t testsuite_tests[] = { + { NO_CWD, "/file.ext", TESTSUITE_ROOT"\\file.ext" }, + { NO_CWD, "/dir/file.ext", TESTSUITE_ROOT"\\dir\\file.ext" }, + { NO_CWD, "/foo/dir/file.ext", TESTSUITE_ROOT"\\foo\\dir\\file.ext" }, + { NO_CWD, "/bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" }, + { NO_CWD, "/bin/dir/file.ext", TESTSUITE_ROOT"\\bin\\dir\\file.ext" }, + { NO_CWD, "/lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" }, + { NO_CWD, "/lib/dir/file.ext", TESTSUITE_ROOT"\\lib\\dir\\file.ext" }, + { NO_CWD, "/usr/bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" }, + { NO_CWD, "/usr/bin/dir/file.ext", TESTSUITE_ROOT"\\bin\\dir\\file.ext" }, + { NO_CWD, "/usr/lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" }, + { NO_CWD, "/usr/lib/dir/file.ext", TESTSUITE_ROOT"\\lib\\dir\\file.ext" }, + { NO_CWD, "/home/file.ext", TESTSUITE_ROOT"\\home\\file.ext" }, + { NO_CWD, "/home/foo/file.ext", TESTSUITE_ROOT"\\home\\foo\\file.ext" }, + { NO_CWD, "/home/foo/dir/file.ext", TESTSUITE_ROOT"\\home\\foo\\dir\\file.ext" }, + { NO_CWD, "/usr/file.ext", TESTSUITE_ROOT"\\usr\\file.ext" }, + { NO_CWD, "/usr/share/file.ext", TESTSUITE_ROOT"\\usr\\share\\file.ext" }, + { TESTSUITE_ROOT, "foo", TESTSUITE_ROOT"\\foo" }, + { TESTSUITE_ROOT, "./foo", TESTSUITE_ROOT"\\foo" }, + { TESTSUITE_ROOT, "foo/bar", TESTSUITE_ROOT"\\foo\\bar" }, + { TESTSUITE_ROOT, "./foo/bar", TESTSUITE_ROOT"\\foo\\bar" }, + { TESTSUITE_ROOT, "foo/./bar", TESTSUITE_ROOT"\\foo\\bar" }, + { TESTSUITE_ROOT, "./foo/./bar", TESTSUITE_ROOT"\\foo\\bar" }, + { TESTSUITE_ROOT, "bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" }, + { TESTSUITE_ROOT, "lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" }, + { TESTSUITE_ROOT, "usr/bin/file.ext", TESTSUITE_ROOT"\\bin\\file.ext" }, + { TESTSUITE_ROOT, "usr/lib/file.ext", TESTSUITE_ROOT"\\lib\\file.ext" }, + { TESTSUITE_ROOT, "etc/file.ext", TESTSUITE_ROOT"\\etc\\file.ext" }, + { TESTSUITE_ROOT, "etc/foo/file.ext", TESTSUITE_ROOT"\\etc\\foo\\file.ext" }, + { TESTSUITE_ROOT"\\bin", "foo", TESTSUITE_ROOT"\\bin\\foo" }, + { TESTSUITE_ROOT"\\bin", "./foo", TESTSUITE_ROOT"\\bin\\foo" }, + { TESTSUITE_ROOT"\\bin", "foo/bar", TESTSUITE_ROOT"\\bin\\foo\\bar" }, + { TESTSUITE_ROOT"\\bin", "./foo/bar", TESTSUITE_ROOT"\\bin\\foo\\bar" }, + { TESTSUITE_ROOT"\\bin", "foo/./bar", TESTSUITE_ROOT"\\bin\\foo\\bar" }, + { TESTSUITE_ROOT"\\bin", "./foo/./bar", TESTSUITE_ROOT"\\bin\\foo\\bar" }, + { TESTSUITE_ROOT"\\bin\\foo", "bar", TESTSUITE_ROOT"\\bin\\foo\\bar" }, + { TESTSUITE_ROOT"\\bin\\foo", "./bar", TESTSUITE_ROOT"\\bin\\foo\\bar" }, + { TESTSUITE_ROOT"\\bin\\foo", "bar/baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" }, + { TESTSUITE_ROOT"\\bin\\foo", "./bar/baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" }, + { TESTSUITE_ROOT"\\bin\\foo", "bar/./baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" }, + { TESTSUITE_ROOT"\\bin\\foo", "./bar/./baz", TESTSUITE_ROOT"\\bin\\foo\\bar\\baz" }, + { TESTSUITE_ROOT"\\tmp", "foo", TESTSUITE_ROOT"\\tmp\\foo" }, + { TESTSUITE_ROOT"\\tmp", "./foo", TESTSUITE_ROOT"\\tmp\\foo" }, + { TESTSUITE_ROOT"\\tmp", "foo/bar", TESTSUITE_ROOT"\\tmp\\foo\\bar" }, + { TESTSUITE_ROOT"\\tmp", "./foo/bar", TESTSUITE_ROOT"\\tmp\\foo\\bar" }, + { NO_CWD, "/otherdir/file.ext", "O:\\other\\file.ext" }, + { NO_CWD, "/otherdir/./file.ext", "O:\\other\\file.ext" }, + { NO_CWD, "/otherdir/foo/file.ext", "O:\\other\\foo\\file.ext" }, + { "O:\\other", "file.ext", "O:\\other\\file.ext" }, + { "O:\\other", "./file.ext", "O:\\other\\file.ext" }, + { "O:\\other", "foo/file.ext", "O:\\other\\foo\\file.ext" }, + { "O:\\other\\foo", "file.ext", "O:\\other\\foo\\file.ext" }, + { "O:\\other\\foo", "./file.ext", "O:\\other\\foo\\file.ext" }, + { "O:\\other\\foo", "bar/file.ext", "O:\\other\\foo\\bar\\file.ext" }, + { NO_CWD, "/somedir/file.ext", "S:\\some\\dir\\file.ext" }, + { NO_CWD, "/somedir/./file.ext", "S:\\some\\dir\\file.ext" }, + { NO_CWD, "/somedir/foo/file.ext", "S:\\some\\dir\\foo\\file.ext" }, + { "S:\\some\\dir", "file.ext", "S:\\some\\dir\\file.ext" }, + { "S:\\some\\dir", "./file.ext", "S:\\some\\dir\\file.ext" }, + { "S:\\some\\dir", "foo/file.ext", "S:\\some\\dir\\foo\\file.ext" }, + { "S:\\some\\dir\\foo", "file.ext", "S:\\some\\dir\\foo\\file.ext" }, + { "S:\\some\\dir\\foo", "./file.ext", "S:\\some\\dir\\foo\\file.ext" }, + { "S:\\some\\dir\\foo", "bar/file.ext", "S:\\some\\dir\\foo\\bar\\file.ext" }, + { NO_CWD, "//server/share/foo/bar", "\\\\server\\share\\foo\\bar" }, + { NO_CWD, NULL, NULL } +}; + +#else + +/* Redirect calls to GetCurrentDirectory() to the testsuite instead. */ +#ifdef GetCurrentDirectory +#undef GetCurrentDirectory +#endif +#define GetCurrentDirectory testsuite_getcwd + +DWORD testsuite_getcwd (DWORD, LPSTR); + +#endif + +#endif /* TESTSUITE */ + |