aboutsummaryrefslogtreecommitdiff
path: root/tests/default-options
diff options
context:
space:
mode:
Diffstat (limited to 'tests/default-options')
-rw-r--r--tests/default-options/driver.cxx38
-rw-r--r--tests/default-options/testscript158
2 files changed, 171 insertions, 25 deletions
diff --git a/tests/default-options/driver.cxx b/tests/default-options/driver.cxx
index 535df31..106f70f 100644
--- a/tests/default-options/driver.cxx
+++ b/tests/default-options/driver.cxx
@@ -45,7 +45,9 @@ using namespace butl;
// Default options file name. Can be specified multiple times.
//
// -d
-// Directory to start the default options files search from.
+// Directory to start the default options files search from. Can be
+// specified multiple times, in which case a common start (parent)
+// directory is deduced.
//
// -s
// System directory.
@@ -59,6 +61,9 @@ using namespace butl;
//
// <file>,<space-separated-options>,<remote>
//
+// -t
+// Trace the default options files search to STDERR.
+//
int
main (int argc, const char* argv[])
{
@@ -94,6 +99,9 @@ main (int argc, const char* argv[])
bool r (false);
while (optional<string> o = s.next ())
{
+ if (*o == "--no-default-options")
+ no_default_options_ = true;
+
push_back (move (*o));
r = true;
}
@@ -105,6 +113,15 @@ main (int argc, const char* argv[])
{
insert (end (), o.begin (), o.end ());
}
+
+ bool
+ no_default_options () const noexcept
+ {
+ return no_default_options_;
+ }
+
+ private:
+ bool no_default_options_ = false;
};
// Parse and validate the arguments.
@@ -112,8 +129,10 @@ main (int argc, const char* argv[])
default_options_files fs;
optional<dir_path> sys_dir;
optional<dir_path> home_dir;
+ vector<dir_path> dirs;
options cmd_ops;
bool print_entries (false);
+ bool trace (false);
for (int i (1); i != argc; ++i)
{
@@ -127,7 +146,7 @@ main (int argc, const char* argv[])
else if (op == "-d")
{
assert (++i != argc);
- fs.start_dir = dir_path (argv[i]);
+ dirs.emplace_back (argv[i]);
}
else if (op == "-s")
{
@@ -143,10 +162,18 @@ main (int argc, const char* argv[])
{
print_entries = true;
}
+ else if (op == "-t")
+ {
+ trace = true;
+ }
else
cmd_ops.push_back (argv[i]);
}
+ // Deduce a common start directory.
+ //
+ fs.start = default_options_start (home_dir, dirs);
+
// Load and print the default options.
//
default_options<options> def_ops (
@@ -154,7 +181,12 @@ main (int argc, const char* argv[])
sys_dir,
home_dir,
fs,
- [] (const path&, bool) {}));
+ [trace] (const path& f, bool remote, bool overwrite)
+ {
+ if (trace)
+ cerr << (overwrite ? "overwriting " : "loading ")
+ << (remote ? "remote " : "local ") << f << endl;
+ }));
if (print_entries)
{
diff --git a/tests/default-options/testscript b/tests/default-options/testscript
index c0c3816..89164d2 100644
--- a/tests/default-options/testscript
+++ b/tests/default-options/testscript
@@ -9,43 +9,46 @@
exit
end
-sys_dir = $canonicalize([dir_path] $~/build2)
-+mkdir -p $sys_dir/local
+: basic
+:
+{
+ sys_dir = $canonicalize([dir_path] $~/build2)
+ +mkdir -p $sys_dir/local
-+echo 'sys-foo' >=$sys_dir/foo
-+echo 'sys-bar' >=$sys_dir/bar
-+echo 'sys-local-foo' >=$sys_dir/local/foo
-+echo 'sys-local-bar' >=$sys_dir/local/bar
+ +echo 'sys-foo' >=$sys_dir/foo
+ +echo 'sys-bar' >=$sys_dir/bar
+ +echo 'sys-local-foo' >=$sys_dir/local/foo
+ +echo 'sys-local-bar' >=$sys_dir/local/bar
-home_dir = $canonicalize([dir_path] $~/home)
-+mkdir -p $home_dir/.build2/local/
+ home_dir = $canonicalize([dir_path] $~/home)
+ +mkdir -p $home_dir/.build2/local/
-+echo 'home-foo' >=$home_dir/.build2/foo
-+echo 'home-bar' >=$home_dir/.build2/bar
-+echo 'home-local-foo' >=$home_dir/.build2/local/foo
-+echo 'home-local-bar' >=$home_dir/.build2/local/bar
+ +echo 'home-foo' >=$home_dir/.build2/foo
+ +echo 'home-bar' >=$home_dir/.build2/bar
+ +echo 'home-local-foo' >=$home_dir/.build2/local/foo
+ +echo 'home-local-bar' >=$home_dir/.build2/local/bar
-: in-home
-:
-{
- d = $home_dir/work/.build2
- +mkdir -p $d/local/
+ work_dir = $home_dir/work
+ +mkdir -p $work_dir/.build2/local/
+
+ d = $work_dir/.build2
+echo 'work-foo' >=$d/foo
+echo 'work-bar' >=$d/bar
+echo 'work-local-foo' >=$d/local/foo
+echo 'work-local-bar' >=$d/local/bar
- d = $home_dir/work/project/.build2
+ d = $work_dir/project/.build2
+mkdir -p $d/local/
- +touch $home_dir/work/project/.git
+
+ +touch $work_dir/project/.git
+echo 'project-foo' >=$d/foo
+echo 'project-bar' >=$d/bar
+echo 'project-local-foo' >=$d/local/foo
+echo 'project-local-bar' >=$d/local/bar
- d = $home_dir/work/project/package/.build2
+ d = $work_dir/project/package/.build2
+mkdir -p $d/local/
+echo 'package-foo' >=$d/foo
@@ -53,11 +56,13 @@ home_dir = $canonicalize([dir_path] $~/home)
+echo 'package-local-foo' >=$d/local/foo
+echo 'package-local-bar' >=$d/local/bar
- start_dir = $canonicalize([dir_path] $home_dir/work/project/package)
+ +echo '--no-default-options' >=$d/local/baz
+
+ start_dir = $canonicalize([dir_path] $work_dir/project/package)
: entries
:
- $* -e -f foo -f bar -d $start_dir -s $sys_dir -h $home_dir cmd-foo cmd-bar >>/~%EOO%d
+ $* -e -t -f foo -f bar -d $start_dir -s $sys_dir -h $home_dir >>/~%EOO%d 2>>/~%EOE%d
%\.+/build2/foo,sys-foo,false%
%\.+/build2/bar,sys-bar,false%
%\.+/build2/local/foo,sys-local-foo,false%
@@ -79,6 +84,31 @@ home_dir = $canonicalize([dir_path] $~/home)
%\.+/home/work/project/package/.build2/local/foo,package-local-foo,true%
%\.+/home/work/project/package/.build2/local/bar,package-local-bar,true%
EOO
+ %loading local \.+/home/work/project/package/.build2/local/bar%
+ %loading local \.+/home/work/project/package/.build2/local/foo%
+ %loading local \.+/home/work/project/package/.build2/bar%
+ %loading local \.+/home/work/project/package/.build2/foo%
+ %overwriting remote \.+/home/work/project/package/.build2/local/bar%
+ %overwriting remote \.+/home/work/project/package/.build2/local/foo%
+ %overwriting remote \.+/home/work/project/package/.build2/bar%
+ %overwriting remote \.+/home/work/project/package/.build2/foo%
+ %loading remote \.+/home/work/project/.build2/local/bar%
+ %loading remote \.+/home/work/project/.build2/local/foo%
+ %loading remote \.+/home/work/project/.build2/bar%
+ %loading remote \.+/home/work/project/.build2/foo%
+ %loading local \.+/home/work/.build2/local/bar%
+ %loading local \.+/home/work/.build2/local/foo%
+ %loading local \.+/home/work/.build2/bar%
+ %loading local \.+/home/work/.build2/foo%
+ %loading local \.+/home/.build2/local/bar%
+ %loading local \.+/home/.build2/local/foo%
+ %loading local \.+/home/.build2/bar%
+ %loading local \.+/home/.build2/foo%
+ %loading local \.+/build2/local/bar%
+ %loading local \.+/build2/local/foo%
+ %loading local \.+/build2/bar%
+ %loading local \.+/build2/foo%
+ EOE
: merged
:
@@ -106,4 +136,88 @@ home_dir = $canonicalize([dir_path] $~/home)
cmd-foo
cmd-bar
EOO
+
+ : no-default-options
+ :
+ $* -e -t -f foo -f baz -f bar -d $start_dir -s $sys_dir -h $home_dir >>/~%EOO%d 2>>/~%EOE%d
+ %\.+/home/work/project/package/.build2/local/foo,package-local-foo,true%
+ %\.+/home/work/project/package/.build2/local/baz,--no-default-options,true%
+ %\.+/home/work/project/package/.build2/local/bar,package-local-bar,true%
+ EOO
+ %loading local \.+/home/work/project/package/.build2/local/bar%
+ %loading local \.+/home/work/project/package/.build2/local/baz%
+ %loading local \.+/home/work/project/package/.build2/local/foo%
+ %overwriting remote \.+/home/work/project/package/.build2/local/bar%
+ %overwriting remote \.+/home/work/project/package/.build2/local/baz%
+ %overwriting remote \.+/home/work/project/package/.build2/local/foo%
+ EOE
+}
+
+: common-start
+:
+{
+ home_dir = $canonicalize([dir_path] $~/home)
+
+ work_dir = $home_dir/work
+ +mkdir -p $work_dir/.build2
+
+ cfg1 = $canonicalize([dir_path] $work_dir/cfg1)
+ cfg2 = $canonicalize([dir_path] $work_dir/cfg2)
+ cfg3 = $canonicalize([dir_path] $cfg2/cfg3)
+
+ +mkdir -p $work_dir/.build2 $cfg1/.build2 $cfg2/.build2 $cfg3/.build2
+
+ +echo 'work' >=$work_dir/.build2/cfg
+ +echo 'cfg1' >=$cfg1/.build2/cfg
+ +echo 'cfg2' >=$cfg2/.build2/cfg
+ +echo 'cfg3' >=$cfg3/.build2/cfg
+
+ : exists
+ :
+ {
+ : single
+ :
+ $* -f cfg -d $cfg3 -h $home_dir >>EOO
+ work
+ cfg2
+ cfg3
+ EOO
+
+ : same
+ :
+ $* -f cfg -d $cfg1 -d $cfg1 -h $home_dir >>EOO
+ work
+ cfg1
+ EOO
+
+ : adjacent
+ :
+ $* -f cfg -d $cfg1 -d $cfg2 -h $home_dir >>EOO
+ work
+ EOO
+
+ : nested
+ :
+ $* -f cfg -d $cfg2 -d $cfg3 -h $home_dir >>EOO
+ work
+ cfg2
+ EOO
+ }
+
+ : not-exists
+ :
+ {
+ : home-reached
+ :
+ $* -f cfg -d $cfg1 -d $cfg2 -h $work_dir >>EOO
+ work
+ EOO
+
+ : root-reached
+ :
+ if ($cxx.target.class != 'windows')
+ {
+ $* -f cfg -d $cfg1 -d /non-existent-directory/cfg2
+ }
+ }
}