diff options
Diffstat (limited to 'tests/init.testscript')
-rw-r--r-- | tests/init.testscript | 201 |
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 +} |