aboutsummaryrefslogtreecommitdiff
path: root/tests/pkg-drop.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pkg-drop.testscript')
-rw-r--r--tests/pkg-drop.testscript447
1 files changed, 447 insertions, 0 deletions
diff --git a/tests/pkg-drop.testscript b/tests/pkg-drop.testscript
new file mode 100644
index 0000000..8750f80
--- /dev/null
+++ b/tests/pkg-drop.testscript
@@ -0,0 +1,447 @@
+# file : tests/pkg-drop.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include common.testscript config.testscript remote.testscript
+
+# Source repository:
+#
+# pkg-drop
+# |-- t4a
+# | |-- libfoo-1.1.0.tar.gz
+# | `-- repositories.manifest
+# |-- t4b -> t4a (prerequisite repository)
+# | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0
+# | `-- repositories.manifest
+# |-- t4c -> t4b (prerequisite repository)
+# | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar
+# | |-- libfoo-1.0.0.tar.gz
+# | `-- repositories.manifest
+# `-- t4d -> t4c (complement)
+# |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz
+# |-- libfox-1.0.0.tar.gz
+# `-- repositories.manifest
+
+# Prepare repositories used by tests if running in the local mode.
+#
++if ($remote != true)
+ rep_create += 2>!
+
+ cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages.manifest
+ cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages.manifest
+ cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages.manifest
+ cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages.manifest
+end
+
+pkg_build += -d cfg --yes 2>!
+pkg_status += -d cfg
+rep_add += -d cfg 2>!
+rep_fetch += -d cfg --auth all --trust-yes 2>!
+
+: no-name
+:
+$clone_cfg;
+$* 2>>EOE != 0
+ error: package name argument expected
+ info: run 'bpkg help pkg-drop' for more information
+ EOE
+
+: unknown-package
+:
+$clone_cfg;
+$* libfoo 2>>/EOE != 0
+ error: package libfoo does not exist in configuration cfg/
+ EOE
+
+: invalid-name
+:
+$clone_cfg;
+$* libfoo/1.0.0 2>>~%EOE% != 0
+ %error: invalid package name 'libfoo/1.0.0': illegal character%
+ EOE
+
+: dependencies-or-dependents
+:
+{
+ +$clone_cfg && $rep_add $rep/t4c && $rep_fetch
+ +$pkg_build libbaz
+
+ test.arguments += --print-only
+
+ : foo-baz-bar
+ :
+ $clone_cfg;
+ $* -y libfoo libbaz libbar >>EOO
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+
+ : dependents
+ :
+ {
+ # Prepare the nested tests to use configuration from the enclosing
+ # 'dependencies-or-dependents' group scope.
+ #
+ clone_cfg = cp -r $~/../cfg ./
+
+ : unconfirmed
+ :
+ {
+ test.arguments += --yes
+
+ : libfoo
+ :
+ $clone_cfg;
+ $* libfoo 2>>EOE != 0
+ following dependent packages will have to be dropped as well:
+ libbar (requires libfoo)
+ libbaz (requires libbar)
+ error: refusing to drop dependent packages with just --yes
+ info: specify --drop-dependent to confirm
+ EOE
+
+ : libfoo-libbar
+ :
+ $clone_cfg;
+ $* libfoo libbar 2>>EOE != 0
+ following dependent packages will have to be dropped as well:
+ libbaz (requires libbar)
+ error: refusing to drop dependent packages with just --yes
+ info: specify --drop-dependent to confirm
+ EOE
+
+ : libfoo-libbaz
+ :
+ $clone_cfg;
+ $* libfoo libbaz 2>>EOE != 0
+ following dependent packages will have to be dropped as well:
+ libbar (requires libfoo)
+ error: refusing to drop dependent packages with just --yes
+ info: specify --drop-dependent to confirm
+ EOE
+ }
+
+ : confirmed
+ :
+ {
+ test.arguments += --drop-dependent
+
+ : libfoo
+ :
+ $clone_cfg;
+ $* libfoo >>EOO
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+
+ : libfoo-libbaz
+ :
+ $clone_cfg;
+ $* libfoo libbaz >>EOO
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+
+ : libbaz-libfoo
+ :
+ $clone_cfg;
+ $* libbaz libfoo >>EOO
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+ }
+ }
+
+ : dependencies
+ :
+ {
+ # Prepare the nested tests to use configuration from the enclosing
+ # 'dependencies-or-dependents' group scope.
+ #
+ clone_cfg = cp -r $~/../cfg ./
+
+ : libbaz
+ :
+ $clone_cfg;
+ $* -y libbaz >>EOO
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+
+ : libbaz-only
+ :
+ $clone_cfg;
+ $* -n libbaz >>EOO
+ drop libbaz
+ EOO
+
+ : libbar-libbaz
+ :
+ $clone_cfg;
+ $* -n libbar libbaz >>EOO
+ drop libbaz
+ drop libbar
+ EOO
+
+ : libbaz-libbar
+ :
+ $clone_cfg;
+ $* -n libbaz libbar >>EOO
+ drop libbaz
+ drop libbar
+ EOO
+
+ : dependencies
+ :
+ : Note that we do not move this test to the dependencies-and-dependents
+ : group as the configuration repository set would be different.
+ :
+ $clone_cfg;
+ $* -y --drop-dependent libbar >>EOO
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+ }
+
+ # Here we combine the test group teardown and the "actual drop" test.
+ #
+ -$pkg_drop -d cfg --yes libbaz 2>>EOE
+ disfigured libbaz
+ disfigured libbar
+ disfigured libfoo
+ purged libbaz
+ purged libbar
+ purged libfoo
+ EOE
+
+ -$pkg_status libbar/1.1.0 >'libbar available [1.1.0]'
+ -$pkg_status libbaz/1.1.0 >'libbaz available 1.1.0'
+ -$pkg_status libfoo/1.1.0 >'libfoo available [1.1.0]'
+}
+
+: dependencies-and-dependents
+:
+{
+ +$clone_cfg && $rep_add $rep/t4d && $rep_fetch
+ +$pkg_build libbiz
+
+ clone_cfg = cp -r ../../cfg ./
+ test.arguments += --print-only
+
+ : drop-dependencies-no-dependents
+ :
+ {
+ test.arguments += --yes
+
+ : libbiz
+ :
+ $clone_cfg;
+ $* libbiz >>EOO
+ drop libbiz
+ drop libbaz
+ drop libbar
+ drop libfoo
+ drop libfox
+ EOO
+
+ : libfox-libbiz
+ :
+ $clone_cfg;
+ $* libfox libbiz >>EOO
+ drop libbiz
+ drop libfox
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+ }
+
+ : drop-dependencies
+ :
+ {
+ test.arguments += --yes --drop-dependent
+
+ : libfox
+ :
+ $clone_cfg;
+ $* libfox >>EOO
+ drop libbiz
+ drop libfox
+ drop libbaz
+ drop libbar
+ drop libfoo
+ EOO
+
+ : libbaz
+ :
+ $clone_cfg;
+ $* libbaz >>EOO
+ drop libbiz
+ drop libbaz
+ drop libbar
+ drop libfoo
+ drop libfox
+ EOO
+
+ : libbar
+ :
+ $clone_cfg;
+ $* libbar >>EOO
+ drop libbiz
+ drop libbaz
+ drop libbar
+ drop libfoo
+ drop libfox
+ EOO
+
+ : libfoo
+ :
+ $clone_cfg;
+ $* libfoo >>EOO
+ drop libbiz
+ drop libbaz
+ drop libbar
+ drop libfoo
+ drop libfox
+ EOO
+ }
+
+ : keep-dependencies
+ {
+ test.arguments += --no --drop-dependent
+
+ : fox-baz
+ :
+ $clone_cfg;
+ $* libfox libbaz >>EOO
+ drop libbiz
+ drop libfox
+ drop libbaz
+ EOO
+
+ : libbaz-libfox
+ :
+ $clone_cfg;
+ $* libbaz libfox >>EOO
+ drop libbiz
+ drop libbaz
+ drop libfox
+ EOO
+
+ : libfox-libbar
+ :
+ $clone_cfg;
+ $* libfox libbar >>EOO
+ drop libbiz
+ drop libfox
+ drop libbaz
+ drop libbar
+ EOO
+
+ : libbar-libfox
+ :
+ $clone_cfg;
+ $* libbar libfox >>EOO
+ drop libbiz
+ drop libbaz
+ drop libbar
+ drop libfox
+ EOO
+ }
+
+ -$pkg_drop -d cfg --yes --drop-dependent libbar 2>>EOE
+ disfigured libbiz
+ disfigured libbaz
+ disfigured libbar
+ disfigured libfoo
+ disfigured libfox
+ purged libbiz
+ purged libbaz
+ purged libbar
+ purged libfoo
+ purged libfox
+ EOE
+
+ -$pkg_status libfox/1.0.0 >'libfox available 1.0.0'
+ -$pkg_status libfoo/1.1.0 >'libfoo available [1.1.0]'
+ -$pkg_status libbar/1.1.0 >'libbar available [1.1.0]'
+ -$pkg_status libbaz/1.1.0 >'libbaz available 1.1.0'
+ -$pkg_status libbiz/1.0.0 >'libbiz available 1.0.0'
+}
+
+: keep-drop-options
+:
+: Test --drop-dependent, --keep-dependent, --keep-unused, option.
+:
+{
+ +$clone_cfg && $rep_add $rep/t4b && $rep_fetch
+
+ : keep-drop-dependent
+ :
+ {
+ $clone_cfg && $pkg_build libbar;
+
+ $* --keep-dependent libfoo 2>>EOE != 0;
+ error: following dependent packages will have to be dropped as well:
+ libbar (requires libfoo)
+ EOE
+
+ $* --drop-dependent libfoo 2>>EOE
+ disfigured libbar
+ disfigured libfoo
+ purged libbar
+ purged libfoo
+ EOE
+ }
+
+ : drop-dependency
+ :
+ {
+ $clone_cfg && $pkg_build libbar;
+
+ $* libbar --yes 2>>EOE
+ disfigured libbar
+ disfigured libfoo
+ purged libbar
+ purged libfoo
+ EOE
+ }
+
+ : keep-dependency
+ :
+ {
+ $clone_cfg && $pkg_build libbar;
+
+ $* --keep-unused libbar 2>>EOE;
+ disfigured libbar
+ purged libbar
+ EOE
+
+ $pkg_status libfoo >'libfoo configured 1.1.0';
+
+ $* libfoo 2>>EOE
+ disfigured libfoo
+ purged libfoo
+ EOE
+ }
+}
+
+: disfigure-only
+:
+: Test --disfigure-only option.
+:
+{
+ $clone_cfg && $rep_add $rep/t4a && $rep_fetch;
+ $pkg_build libfoo;
+
+ $* --disfigure-only libfoo 2>'disfigured libfoo';
+ $pkg_status libfoo >'!libfoo unpacked 1.1.0';
+
+ $* libfoo 2>'purged libfoo'
+}