aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/default-options/driver.cxx12
-rw-r--r--tests/default-options/testscript104
2 files changed, 105 insertions, 11 deletions
diff --git a/tests/default-options/driver.cxx b/tests/default-options/driver.cxx
index 106f70f..764ab44 100644
--- a/tests/default-options/driver.cxx
+++ b/tests/default-options/driver.cxx
@@ -35,7 +35,7 @@ using namespace std;
using namespace butl;
// Usage: argv[0] [-f <file>] [-d <start-dir>] [-s <sys-dir>] [-h <home-dir>]
-// [-e] <cmd-options>
+// [-x <extra-dir>] [-e] [-t] <cmd-options>
//
// Parse default options files, merge them with the command line options, and
// print the resulting options to STDOUT one per line. Note that the options
@@ -55,6 +55,9 @@ using namespace butl;
// -h
// Home directory.
//
+// -x
+// Extra directory.
+//
// -e
// Print the default options entries (rather than the merged options) to
// STDOUT one per line in the following format:
@@ -129,6 +132,7 @@ main (int argc, const char* argv[])
default_options_files fs;
optional<dir_path> sys_dir;
optional<dir_path> home_dir;
+ optional<dir_path> extra_dir;
vector<dir_path> dirs;
options cmd_ops;
bool print_entries (false);
@@ -158,6 +162,11 @@ main (int argc, const char* argv[])
assert (++i != argc);
home_dir = dir_path (argv[i]);
}
+ else if (op == "-x")
+ {
+ assert (++i != argc);
+ extra_dir = dir_path (argv[i]);
+ }
else if (op == "-e")
{
print_entries = true;
@@ -180,6 +189,7 @@ main (int argc, const char* argv[])
load_default_options<options, scanner, unknow_mode> (
sys_dir,
home_dir,
+ extra_dir,
fs,
[trace] (const path& f, bool remote, bool overwrite)
{
diff --git a/tests/default-options/testscript b/tests/default-options/testscript
index 89164d2..41badf3 100644
--- a/tests/default-options/testscript
+++ b/tests/default-options/testscript
@@ -167,17 +167,17 @@ end
+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
+ +echo 'work' >=$work_dir/.build2/ops
+ +echo 'cfg1' >=$cfg1/.build2/ops
+ +echo 'cfg2' >=$cfg2/.build2/ops
+ +echo 'cfg3' >=$cfg3/.build2/ops
: exists
:
{
: single
:
- $* -f cfg -d $cfg3 -h $home_dir >>EOO
+ $* -f ops -d $cfg3 -h $home_dir >>EOO
work
cfg2
cfg3
@@ -185,20 +185,20 @@ end
: same
:
- $* -f cfg -d $cfg1 -d $cfg1 -h $home_dir >>EOO
+ $* -f ops -d $cfg1 -d $cfg1 -h $home_dir >>EOO
work
cfg1
EOO
: adjacent
:
- $* -f cfg -d $cfg1 -d $cfg2 -h $home_dir >>EOO
+ $* -f ops -d $cfg1 -d $cfg2 -h $home_dir >>EOO
work
EOO
: nested
:
- $* -f cfg -d $cfg2 -d $cfg3 -h $home_dir >>EOO
+ $* -f ops -d $cfg2 -d $cfg3 -h $home_dir >>EOO
work
cfg2
EOO
@@ -209,7 +209,7 @@ end
{
: home-reached
:
- $* -f cfg -d $cfg1 -d $cfg2 -h $work_dir >>EOO
+ $* -f ops -d $cfg1 -d $cfg2 -h $work_dir >>EOO
work
EOO
@@ -217,7 +217,91 @@ end
:
if ($cxx.target.class != 'windows')
{
- $* -f cfg -d $cfg1 -d /non-existent-directory/cfg2
+ $* -f ops -d $cfg1 -d /non-existent-directory/cfg2
}
}
}
+
+: extra-dir
+:
+{
+ : after-traversal
+ :
+ {
+ home_dir = $canonicalize([dir_path] $~/home);
+ mkdir -p $home_dir/.build2;
+ echo 'home' >=$home_dir/.build2/ops;
+
+ extra_dir = $canonicalize([dir_path] $home_dir/extra);
+ mkdir -p $extra_dir;
+ echo 'extra' >=$extra_dir/ops;
+
+ start_dir = $canonicalize([dir_path] $home_dir/start);
+ mkdir -p $start_dir/.build2;
+ echo 'start' >=$start_dir/.build2/ops;
+
+ $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir >>/~%EOO%d
+ %\.+/home/.build2/ops,home,false%
+ %\.+/home/extra/ops,extra,false%
+ %\.+/home/start/.build2/ops,start,false%
+ EOO
+ }
+
+ : inside-traversal
+ :
+ {
+ home_dir = $canonicalize([dir_path] $~/home);
+ mkdir -p $home_dir/.build2;
+ echo 'home' >=$home_dir/.build2/ops;
+
+ d = $home_dir/project/.build2;
+ mkdir -p $d;
+ echo 'project' >=$d/ops;
+
+ touch $home_dir/project/.git;
+
+ d = $home_dir/project/package/.build2;
+ mkdir -p $d;
+ echo 'package' >=$d/ops;
+
+ extra_dir = $canonicalize([dir_path] $home_dir/project/package/extra1);
+ mkdir -p $extra_dir;
+ echo 'extra1' >=$extra_dir/ops;
+
+ start_dir = $canonicalize([dir_path] $home_dir/project/package);
+
+ $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir >>/~%EOO%d;
+ %\.+/home/.build2/ops,home,false%
+ %\.+/home/project/.build2/ops,project,true%
+ %\.+/home/project/package/.build2/ops,package,true%
+ %\.+/home/project/package/extra1/ops,extra1,false%
+ EOO
+
+ extra_dir = $canonicalize([dir_path] $home_dir/project/package/.build2);
+
+ $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir/ >>/~%EOO%d;
+ %\.+/home/.build2/ops,home,false%
+ %\.+/home/project/.build2/ops,project,true%
+ %\.+/home/project/package/.build2/ops,package,false%
+ EOO
+
+ extra_dir = $canonicalize([dir_path] $home_dir/project/extra2);
+ mkdir -p $extra_dir;
+ echo 'extra2' >=$extra_dir/ops;
+
+ $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir >>/~%EOO%d;
+ %\.+/home/.build2/ops,home,false%
+ %\.+/home/project/.build2/ops,project,true%
+ %\.+/home/project/extra2/ops,extra2,false%
+ %\.+/home/project/package/.build2/ops,package,true%
+ EOO
+
+ extra_dir = $canonicalize([dir_path] $home_dir/project/.build2);
+
+ $* -e -f ops -d $start_dir -h $home_dir -x $extra_dir/ >>/~%EOO%d
+ %\.+/home/.build2/ops,home,false%
+ %\.+/home/project/.build2/ops,project,false%
+ %\.+/home/project/package/.build2/ops,package,true%
+ EOO
+ }
+}