aboutsummaryrefslogtreecommitdiff
path: root/tests/init.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/init.test')
-rw-r--r--tests/init.test148
1 files changed, 129 insertions, 19 deletions
diff --git a/tests/init.test b/tests/init.test
index 43ce441..3fc05c6 100644
--- a/tests/init.test
+++ b/tests/init.test
@@ -7,13 +7,13 @@
.include common.test project.test
-new += 2>!
-status += --all
+new += -d prj
+status += -d prj
deinit += -d prj
cxx = cc "config.cxx=$config.cxx"
-: cfg-create
+: create-cfg
:
: We will also test that the configuration variables are properly persisted and
: the project is properly built in the source tree.
@@ -25,23 +25,31 @@ cxx = cc "config.cxx=$config.cxx"
initializing in project $~/prj/
created configuration @cfg $~/prj-cfg/ \(1, default, forwarded, auto-synchronized\)
synchronizing:
- % new prj.0\.1\.0-a\.0\.19700101000000%
+ % new prj.+19700101000000%
EOE
sed -n -e 's/^config.cc.poptions = (.+)$/\1/p' prj-cfg/build/config.build \
>'-DTEST';
- $status --directory prj >'prj configured 0.1.0-a.0.19700101000000';
+ $status >'prj configured 0.1.0-a.0.19700101000000';
- $build prj/ 2>>/EOE &prj/prj/prj$exe;
+ $build prj/ 2>>/EOE;
mkdir prj-cfg/prj/fsdir{prj/}
c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/
ld prj-cfg/prj/prj/exe{prj}
ln prj-cfg/prj/prj/exe{prj} -> prj/prj/
EOE
- $build prj-cfg/ 2>>/EOE;
- info: dir{prj-cfg/} is up to date
+ prj/prj/prj 'testscript' >'Hello, testscript!';
+
+ $build prj-cfg/prj/ 2>>/EOE;
+ info: prj-cfg/dir{prj/} is up to date
+ EOE
+
+ $build 'clean:' prj/ 2>>/EOE;
+ rm prj-cfg/prj/prj/exe{prj}
+ rm prj-cfg/prj/prj/obje{prj}
+ rm prj-cfg/prj/fsdir{prj/}
EOE
$deinit 2>>/"EOE"
@@ -51,31 +59,29 @@ cxx = cc "config.cxx=$config.cxx"
EOE
}
-: cfg-add
+: add-cfg
:
{
- create_cfg = $bpkg create $cxx -d 2>!
-
$clone_prj;
- $create_cfg prj-cfg1/ &prj-cfg1/***;
- $create_cfg prj-cfg2/ &prj-cfg2/***;
+ $bpkg create $cxx -d prj-cfg1/ 2>! &prj-cfg1/***;
+ $bpkg create $cxx -d prj-cfg2/ 2>! &prj-cfg2/***;
- $* -A @cfg1 2>>/~"%EOE%";
+ $* -A @cfg1 2>>/~"%EOE%"; # Shortcut.
initializing in project $~/prj/
added configuration @cfg1 $~/prj-cfg1/ \(1, default, forwarded, auto-synchronized\)
synchronizing:
- % new prj.0\.1\.0-a\.0\.19700101000000%
+ % 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.0\.1\.0-a\.0\.19700101000000%
+ % new prj.+19700101000000%
EOE
- $status --directory prj >>EOO;
+ $status --all >>EOO;
in configuration @cfg1:
prj configured 0.1.0-a.0.19700101000000
@@ -107,5 +113,109 @@ cxx = cc "config.cxx=$config.cxx"
EOE
}
-# @@ Test initializing a package rather than project.
-#
+: 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 prj-cfg/prj/fsdir{prj/}
+ c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/
+ ld prj-cfg/prj/prj/exe{prj}
+ ln prj-cfg/prj/prj/exe{prj} -> prj/prj/
+ EOE
+
+ $build prj-cfg/ 2>>/EOE;
+ info: dir{prj-cfg/} is up to date
+ EOE
+
+ # Move the executable package into a separate directory.
+ #
+ mkdir --no-cleanup prj/prj.pkg;
+
+ # @@ Shouldn't we add mv builtin?
+ #
+ fs = prj/prj/ prj/build/ prj/buildfile prj/manifest prj/.gitignore;
+ cp --no-cleanup -p -r $fs prj/prj.pkg/;
+ rm -r $fs;
+
+ cp --no-cleanup -p -r prj/prj.pkg/ prj/prj;
+ rm -r prj/prj.pkg/;
+
+ cat <<EOI >=prj/packages.manifest;
+ : 1
+ location: prj/
+ EOI
+
+ # Add the library package.
+ #
+ $new --package -t lib libprj 2>>/"EOE";
+ created new library package libprj in $~/prj/libprj/
+ EOE
+
+ $init -a -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 prj-cfg/.+%{2}
+ %.{3}
+ %ld prj-cfg/.+%{2}
+ EOE
+
+ $deinit 2>>/"EOE"
+ deinitializing in project $~/prj/
+ deinitializing package prj
+ deinitializing package libprj
+ synchronizing:
+ drop prj
+ drop libprj
+ EOE
+}