aboutsummaryrefslogtreecommitdiff
path: root/tests/pkg-checkout.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pkg-checkout.test')
-rw-r--r--tests/pkg-checkout.test96
1 files changed, 96 insertions, 0 deletions
diff --git a/tests/pkg-checkout.test b/tests/pkg-checkout.test
new file mode 100644
index 0000000..663a900
--- /dev/null
+++ b/tests/pkg-checkout.test
@@ -0,0 +1,96 @@
+# file : tests/pkg-checkout.test
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include common.test config.test remote-git.test
+
+# Source repository:
+#
+# pkg-checkout
+# `-- git
+# |-- libbar.git -> style-basic.git (prerequisite)
+# `-- style-basic.git
+
+# Prepare repositories used by tests if running in the local mode.
+#
++if ($remote != true)
+ # Create git repositories.
+ #
+ $git_extract $src/git/libbar.tar
+ $git_extract $src/git/style-basic0.tar &$out_git/state0/***
+ $git_extract $src/git/style-basic1.tar &$out_git/state1/***
+end
+
+: git-repos
+:
+if ($git_supported != true)
+{
+ # Skip git repository tests.
+ #
+}
+else
+{
+ rep = "$rep_git/state0"
+
+ rep_add += -d cfg 2>!
+ rep_fetch += -d cfg 2>!
+ pkg_configure += -d cfg 2>!
+ pkg_status += -d cfg
+
+ test.cleanups += &cfg/.bpkg/repositories/*/***
+
+ : unconfigured-dependency
+ :
+ $clone_root_cfg;
+ $rep_add "$rep/libbar.git#master";
+ $rep_fetch;
+
+ $* libmbar/1.0.0 2>>EOE != 0
+ error: no configured package satisfies dependency on style-basic >= 1.0.0
+ EOE
+
+ : configured-dependency
+ :
+ $clone_root_cfg;
+ $rep_add "$rep/libbar.git#master" && $rep_add "$rep/style-basic.git#master";
+ $rep_fetch;
+
+ $pkg_status style-basic | sed -n -e 's/available ([^ ]+).+/\1/p' | set v;
+
+ $* "style-basic/$v" 2>>"EOE" &cfg/style-basic-$v/***;
+ dist style-basic-$v
+ checked out style-basic/$v
+ EOE
+
+ $pkg_configure style-basic;
+
+ $* libmbar/1.0.0 2>>EOE &cfg/libmbar-1.0.0/***
+ dist libmbar-1.0.0
+ checked out libmbar/1.0.0
+ EOE
+
+ : replacement
+ :
+ # @@ Reduce to a single repository when multiple revisions can be specified
+ # in the repository URL fragment.
+ #
+ rep0 = "$rep_git/state0";
+ rep1 = "$rep_git/state1";
+
+ $clone_root_cfg;
+ $rep_add "$rep0/style-basic.git#master";
+ $rep_add "$rep1/style-basic.git#stable";
+ $rep_fetch;
+
+ $pkg_status style-basic | \
+ sed -n -e 's/available ([^ ]+) +([^ ]+).+/\1 \2/p' | set vs;
+
+ echo "$vs" | sed -e 's/([^ ]+).+/\1/' | set v0;
+ echo "$vs" | sed -e 's/([^ ]+) +([^ ]+)/\2/' | set v1;
+
+ $* "style-basic/$v0" 2>!;
+ $pkg_status style-basic >~"/unpacked $v0;.+/";
+
+ $* --replace "style-basic/$v1" 2>! &cfg/style-basic-$v1/***;
+ $pkg_status style-basic >~"/unpacked $v1;.+/"
+}