aboutsummaryrefslogtreecommitdiff
path: root/tests/rep-add.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rep-add.testscript')
-rw-r--r--tests/rep-add.testscript205
1 files changed, 205 insertions, 0 deletions
diff --git a/tests/rep-add.testscript b/tests/rep-add.testscript
new file mode 100644
index 0000000..b57eb68
--- /dev/null
+++ b/tests/rep-add.testscript
@@ -0,0 +1,205 @@
+# file : tests/rep-add.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include common.testscript config.testscript
+
+rep_list += -d cfg
+
+: location
+:
+{
+ +$clone_cfg
+
+ : none
+ :
+ $* 2>>EOE != 0
+ error: repository location argument expected
+ info: run 'bpkg help rep-add' for more information
+ EOE
+
+ : empty
+ :
+ {
+ $clone_cfg;
+
+ $* '' 2>>EOE != 0
+ error: invalid repository location '': empty URL
+ EOE
+ }
+
+ : unknown-type
+ :
+ $* 'repo' --type unknown 2>>EOE != 0
+ error: invalid value 'unknown' for option '--type'
+ EOE
+
+ : no-version
+ :
+ {
+ $clone_cfg;
+
+ $* 'stable' 2>>/~%EOE% != 0
+ %error: invalid pkg repository location '.+/no-version/stable': missing repository version%
+ info: consider using --type to specify repository type
+ EOE
+ }
+
+ : git-invalid-fragment
+ :
+ {
+ $clone_cfg;
+
+ $* 'git://example.org/repo#' 2>>EOE != 0
+ error: invalid git repository location 'git://example.org/repo#': missing refname or commit id for git repository
+ EOE
+ }
+
+ : pkg-git-scheme
+ :
+ {
+ $clone_cfg;
+
+ $* 'git://example.org/repo' --type pkg 2>>EOE != 0
+ error: invalid pkg repository location 'git://example.org/repo': unsupported scheme for pkg repository
+ EOE
+ }
+
+ : invalid-path
+ :
+ {
+ s="../../../../../../../../../../../../../../../../../../../../../../../"
+ s="$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s"
+
+ $clone_cfg;
+
+ $* "$s" 2>>~%EOE% != 0
+ %error: invalid repository path '.+/': invalid filesystem path%
+ EOE
+ }
+
+ : type-detection
+ :
+ {
+ +$clone_cfg
+
+ : git-scheme
+ :
+ $clone_cfg;
+ $* 'git://example.org/repo#master' 2>>EOE
+ added git:example.org/repo#master
+ EOE
+
+ : http-git
+ :
+ $clone_cfg;
+ $* 'http://example.org/repo.git#master' 2>>EOE
+ added git:example.org/repo#master
+ EOE
+
+ : http-pkg
+ :
+ $clone_cfg;
+ $* 'http://example.org/1/repo' 2>>EOE
+ added pkg:example.org/repo
+ EOE
+
+ : file-git
+ :
+ $clone_cfg && mkdir -p repo/.git;
+
+ $* 'repo' 2>>/~%EOE%
+ %added git:.+/repo%
+ EOE
+
+ : file-pkg
+ :
+ $clone_cfg;
+
+ $* '1/repo' 2>>/~%EOE%
+ %added .+/repo%
+ EOE
+ }
+}
+
+: relative-path
+:
+{
+ $clone_cfg;
+
+ $* ./1/bar/stable 2>>/~%EOE%;
+ %added pkg:.+/relative-path/bar/stable%
+ EOE
+
+ $* ./1/../1/bar/stable 2>>/~%EOE%
+ %unchanged pkg:.+/relative-path/bar/stable%
+ EOE
+}
+
+: absolute-path
+:
+{
+ $clone_cfg;
+
+ $* $~/1/foo/stable 2>>/~%EOE%;
+ %added pkg:.+/absolute-path/foo/stable%
+ EOE
+
+ $* $~/1/../1/foo/stable 2>>/~%EOE%
+ %unchanged pkg:.+/absolute-path/foo/stable%
+ EOE
+}
+
+: remote-url
+:
+{
+ +$clone_cfg
+
+ : pkg
+ :
+ $clone_cfg;
+
+ $* 'http://pkg.example.org/1/testing' 2>>EOE;
+ added pkg:example.org/testing
+ EOE
+
+ $* 'https://www.example.org/1/testing' 2>>EOE;
+ updated pkg:example.org/testing
+ EOE
+
+ $rep_list >>EOO
+ pkg:example.org/testing https://www.example.org/1/testing
+ EOO
+
+ : git
+ :
+ $clone_cfg;
+
+ $* 'git://example.org/testing.git#master' 2>>~%EOE%;
+ %added git:example.org/testing#master%
+ EOE
+
+ $* 'https://www.example.org/testing.git#master' 2>>EOE;
+ updated git:example.org/testing#master
+ EOE
+
+ $rep_list >>EOO
+ git:example.org/testing#master https://www.example.org/testing.git#master
+ EOO
+}
+
+: multiple-locations
+:
+{
+ $clone_cfg;
+
+ $* 'http://pkg.example.org/1/alpha' 'http://pkg.example.org/1/beta' 2>>EOE;
+ added pkg:example.org/alpha
+ added pkg:example.org/beta
+ EOE
+
+ $rep_list >>EOO
+ pkg:example.org/alpha http://pkg.example.org/1/alpha
+ pkg:example.org/beta http://pkg.example.org/1/beta
+ EOO
+}