aboutsummaryrefslogtreecommitdiff
path: root/tests/init.testscript
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-09-04 14:32:11 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-09-04 14:49:21 +0300
commitd1d9fbc899be37bba7b05f31ac5c7a4d15d64811 (patch)
tree99722bfda82125c5ad383917df0af794ff1b9e1f /tests/init.testscript
parent971b29ac8c45da1659a57421f95d4caa237ee6be (diff)
Rename .test/test{} to .testscript/testscript{}
Diffstat (limited to 'tests/init.testscript')
-rw-r--r--tests/init.testscript201
1 files changed, 201 insertions, 0 deletions
diff --git a/tests/init.testscript b/tests/init.testscript
new file mode 100644
index 0000000..17af7e2
--- /dev/null
+++ b/tests/init.testscript
@@ -0,0 +1,201 @@
+# file : tests/init.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+# Here we test both init and deinit commands.
+#
+
+.include common.testscript project.testscript
+
+cxx = cc config.cxx="$recall($cxx.path)"
+
+status += -d prj
+deinit += -d prj
+
+: create-cfg
+:
+: Here we also test that the configuration variable is properly persisted and
+: the project is properly built in the source tree.
+:
+{
+ $clone_prj;
+
+ $* -C @cfg $cxx 'config.cc.poptions=-DTEST' 2>>/~"%EOE%" &prj-cfg/***;
+ initializing in project $~/prj/
+ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized
+ synchronizing:
+ % new prj.+19700101000000%
+ EOE
+
+ sed -n -e 's/^config.cc.poptions = (.+)$/\1/p' prj-cfg/build/config.build \
+ >'-DTEST';
+
+ $status >'prj configured 0.1.0-a.0.19700101000000';
+
+ $build prj/ 2>>~%EOE%;
+ %(mkdir|c\+\+|ld|ln) .+%{4}
+ EOE
+
+ prj/prj/prj 'testscript' >'Hello, testscript!'; # Make sure is forwarded.
+
+ $build prj-cfg/prj/ 2>>/EOE;
+ info: prj-cfg/dir{prj/} is up to date
+ EOE
+
+ $build 'clean:' prj/ 2>>~%EOE%;
+ %rm .+%{3}
+ EOE
+
+ $deinit 2>>/"EOE"
+ deinitializing in project $~/prj/
+ synchronizing:
+ drop prj
+ EOE
+}
+
+: add-cfg
+:
+{
+ $clone_prj;
+
+ # Pre-create configurations.
+ #
+ $new -C prj-cfg1 tmp $cxx 2>! &prj-cfg1/*** &tmp/***;
+ $init -C prj-cfg2 -d tmp $cxx 2>! &prj-cfg2/***;
+
+ $* -A @cfg1 2>>/~"%EOE%";
+ initializing in project $~/prj/
+ added configuration @cfg1 $~/prj-cfg1/ 1 default,forwarded,auto-synchronized
+ synchronizing:
+ % new prj.+19700101000000%
+ EOE
+
+ $* -A prj-cfg2 @cfg2 2>>/~"%EOE%";
+ initializing in project $~/prj/
+ added configuration @cfg2 $~/prj-cfg2/ 2 auto-synchronized
+ synchronizing:
+ % new prj.+19700101000000%
+ EOE
+
+ $status --all >>EOO;
+ in configuration @cfg1:
+ prj configured 0.1.0-a.0.19700101000000
+
+ in configuration @cfg2:
+ prj configured 0.1.0-a.0.19700101000000
+ EOO
+
+ $build prj-cfg1/ 2>>~%EOE%;
+ %(mkdir|c\+\+|ld) .+%{6}
+ EOE
+
+ $build prj-cfg2/ 2>>~%EOE%;
+ %(mkdir|c\+\+|ld) .+%{6}
+ EOE
+
+ $build prj/ 2>>~%EOE%;
+ %(ln|info:) .+%{2}
+ EOE
+
+ $build 'clean:' prj/ 2>>~%EOE%;
+ %rm .+%{3}
+ EOE
+
+ $deinit 2>>/"EOE"
+ deinitializing in project $~/prj/
+ synchronizing:
+ drop prj
+ EOE
+}
+
+: pkg
+:
+: Test initializing a package while creating it inside an already existing
+: project.
+:
+{
+ # Create (and build) the executable single-package project.
+ #
+ cp --no-cleanup -p -r ../prj ./ &prj/***;
+
+ $* -C @cfg $cxx 2>>/~"%EOE%" &prj-cfg/***;
+ initializing in project $~/prj/
+ created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized
+ synchronizing:
+ % new prj.+19700101000000%
+ EOE
+
+ $status >'prj configured 0.1.0-a.0.19700101000000';
+
+ $build prj/ 2>>~%EOE%;
+ %(mkdir|c\+\+|ld|ln) .+%{4}
+ EOE
+
+ # Move the executable package into a separate directory.
+ #
+ mkdir --no-cleanup prj/prj.pkg;
+
+ mv prj/prj prj/build prj/buildfile prj/manifest prj/.gitignore prj/prj.pkg/;
+ mv prj/prj.pkg prj/prj;
+
+ cat <<EOI >=prj/packages.manifest;
+ : 1
+ location: prj/
+ EOI
+
+ # Add the library package.
+ #
+ $new --package -t lib libprj -d prj 2>>/"EOE";
+ created new library package libprj in $~/prj/libprj/
+ EOE
+
+ $init --all -d prj/libprj 2>>/~"%EOE%";
+ initializing in project $~/prj/
+ synchronizing:
+ % upgrade prj.+19700101000000#1%
+ % new libprj.+19700101000000%
+ EOE
+
+ # Factor out some of the executable package functionality into the library.
+ #
+ cat <<EOI >+prj/prj/manifest;
+ depends: libprj
+ EOI
+
+ sed -i -e 's/^(#import .+)$/import libs += libprj%lib{prj}/' \
+ prj/prj/prj/buildfile;
+
+ cat <<EOI >=prj/prj/prj/prj.cxx;
+ #include <iostream>
+
+ #include <libprj/prj.hxx>
+
+ using namespace std;
+
+ int main (int argc, char* argv[])
+ {
+ if (argc < 2)
+ {
+ cerr << "error: missing name" << endl;
+ return 1;
+ }
+
+ prj::say_hello (cout, argv[1]);
+ }
+ EOI
+
+ $build prj-cfg/prj/ 2>>/~"%EOE%";
+ synchronizing $~/prj-cfg/:
+ % upgrade prj.+19700101000000#2%
+ %\(mkdir|version\\.in|c\\+\\+|ld) .+%{7}
+ EOE
+
+ $deinit 2>>/"EOE"
+ deinitializing in project $~/prj/
+ deinitializing package prj
+ deinitializing package libprj
+ synchronizing:
+ drop prj
+ drop libprj
+ EOE
+}