aboutsummaryrefslogtreecommitdiff
path: root/tests/test/script
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test/script')
-rw-r--r--tests/test/script/generated/buildfile8
-rw-r--r--tests/test/script/generated/driver.cxx11
-rw-r--r--tests/test/script/generated/testscript34
-rw-r--r--tests/test/script/generated/testscript.in5
-rw-r--r--tests/test/script/integration/buildfile8
-rw-r--r--tests/test/script/integration/testscript86
6 files changed, 152 insertions, 0 deletions
diff --git a/tests/test/script/generated/buildfile b/tests/test/script/generated/buildfile
new file mode 100644
index 0000000..c27b49d
--- /dev/null
+++ b/tests/test/script/generated/buildfile
@@ -0,0 +1,8 @@
+# file : tests/test/script/generated/buildfile
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+# Test generated testscripts.
+#
+
+./: test{testscript} $b file{*.cxx +*.in}
diff --git a/tests/test/script/generated/driver.cxx b/tests/test/script/generated/driver.cxx
new file mode 100644
index 0000000..e155462
--- /dev/null
+++ b/tests/test/script/generated/driver.cxx
@@ -0,0 +1,11 @@
+// file : tests/test/script/generated/driver.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <iostream>
+
+int
+main ()
+{
+ std::cout << "1.2.3" << std::endl;
+}
diff --git a/tests/test/script/generated/testscript b/tests/test/script/generated/testscript
new file mode 100644
index 0000000..572c73f
--- /dev/null
+++ b/tests/test/script/generated/testscript
@@ -0,0 +1,34 @@
+# file : tests/test/script/generated/testscript
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+test.arguments = test clean
+
+# Note: using common.test from test/, not script/.
+#
+.include ../../common.test
+
+# @@ in module
+#
++cat <<EOI >+build/bootstrap.build
+using version
+EOI
++cat <<EOI >=manifest
+: 1
+name: test
+version: 1.2.3
+EOI
+
++cat <<EOI >=build/root.build
+using cxx
+EOI
+
+: testscript
+:
+ln -s $src_base/driver.cxx ./;
+ln -s $src_base/testscript.in ./;
+$* <<EOI
+exe{driver}: cxx{driver} test{testscript}
+test{testscript}: in{testscript} $src_root/file{manifest} #@@ in module
+test{testscript}: in.symbol = '@'
+EOI
diff --git a/tests/test/script/generated/testscript.in b/tests/test/script/generated/testscript.in
new file mode 100644
index 0000000..b030b39
--- /dev/null
+++ b/tests/test/script/generated/testscript.in
@@ -0,0 +1,5 @@
+# file : tests/test/script/generated/testscript.in
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+$* >'@version@'
diff --git a/tests/test/script/integration/buildfile b/tests/test/script/integration/buildfile
new file mode 100644
index 0000000..1cc1e30
--- /dev/null
+++ b/tests/test/script/integration/buildfile
@@ -0,0 +1,8 @@
+# file : tests/test/script/integration/buildfile
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+# Test integration of testscript into build system.
+#
+
+./: test{testscript} $b
diff --git a/tests/test/script/integration/testscript b/tests/test/script/integration/testscript
new file mode 100644
index 0000000..7074e36
--- /dev/null
+++ b/tests/test/script/integration/testscript
@@ -0,0 +1,86 @@
+# file : tests/test/script/integration/testscript
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+# Note: using common.test from test/, not script/.
+#
+.include ../../common.test
+
+: script-files
+:
+{
+ +touch testscript foo.test bar.test
+
+ : testscript-and-other
+ :
+ $* <<EOI 2>>/EOE != 0
+ ./: test{../testscript ../foo}
+ EOI
+ error: both 'testscript' and other names specified for dir{./}
+ EOE
+
+ : other-and-testscript
+ :
+ $* <<EOI 2>>/EOE != 0
+ ./: test{../foo ../testscript}
+ EOI
+ error: both 'testscript' and other names specified for dir{./}
+ EOE
+
+ : others
+ :
+ $* <<EOI
+ ./: test{../foo ../bar}
+ EOI
+}
+
+: wd-is-file
+:
+: Note that here we can not use portable path modifier as not all slashes are
+: path separators.
+:
+touch foo.test;
+touch test;
+$* <<EOI 2>>~%EOE% != 0
+./: test{foo}
+EOI
+%error: working directory test[/\\] is a file/symlink%
+EOE
+
+: wd-exists-before
+:
+touch foo.test;
+mkdir test &!test/;
+$* <<EOI 2>>/EOE
+./: test{foo}
+EOI
+warning: working directory test/ exists at the beginning of the test
+EOE
+
+: wd-not-empty-before
+:
+touch foo.test;
+mkdir test &!test/;
+touch test/dummy &!test/dummy;
+$* <<EOI 2>>/EOE
+./: test{foo}
+EOI
+warning: working directory test/ exists and is not empty at the beginning of the test
+EOE
+
+: wd-not-empty-after
+:
+: The idea here is to run a nested testscript that creates (but does not
+: clean up) a file in our working directory. Note that an implicit cleanup
+: cancelation is not required as the file is out of the test root directory
+: scope. Also note that we still have to remove everything after detecting the
+: failure.
+:
+cat <<EOI >=foo.test;
+touch ../../dummy
+EOI
+$* <<EOI 2>>/EOE &test/*** != 0
+./: test{foo}
+EOI
+error: working directory test/ is not empty at the end of the test
+EOE