aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.travis.yml4
-rw-r--r--.travis/sample-dest/1.txt1
-rw-r--r--.travis/sample-dest/bar/3.txt1
-rw-r--r--.travis/sample-src/%DEST%/1.txt1
-rw-r--r--.travis/sample-src/%DEST%/bar/3.txt1
-rw-r--r--.travis/sample-src/%DEST%/bar/baz/4.txt1
-rw-r--r--.travis/sample-src/%DEST%/foo/2.txt1
-rwxr-xr-x.travis/test.sh110
8 files changed, 120 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..bc7fb60
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,4 @@
+language: minimal
+os: linux
+dist: bionic
+script: ./.travis/test.sh
diff --git a/.travis/sample-dest/1.txt b/.travis/sample-dest/1.txt
new file mode 100644
index 0000000..3a2e3f4
--- /dev/null
+++ b/.travis/sample-dest/1.txt
@@ -0,0 +1 @@
+-1
diff --git a/.travis/sample-dest/bar/3.txt b/.travis/sample-dest/bar/3.txt
new file mode 100644
index 0000000..a83d1d5
--- /dev/null
+++ b/.travis/sample-dest/bar/3.txt
@@ -0,0 +1 @@
+-3
diff --git a/.travis/sample-src/%DEST%/1.txt b/.travis/sample-src/%DEST%/1.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.travis/sample-src/%DEST%/1.txt
@@ -0,0 +1 @@
+1
diff --git a/.travis/sample-src/%DEST%/bar/3.txt b/.travis/sample-src/%DEST%/bar/3.txt
new file mode 100644
index 0000000..00750ed
--- /dev/null
+++ b/.travis/sample-src/%DEST%/bar/3.txt
@@ -0,0 +1 @@
+3
diff --git a/.travis/sample-src/%DEST%/bar/baz/4.txt b/.travis/sample-src/%DEST%/bar/baz/4.txt
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/.travis/sample-src/%DEST%/bar/baz/4.txt
@@ -0,0 +1 @@
+4
diff --git a/.travis/sample-src/%DEST%/foo/2.txt b/.travis/sample-src/%DEST%/foo/2.txt
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/.travis/sample-src/%DEST%/foo/2.txt
@@ -0,0 +1 @@
+2
diff --git a/.travis/test.sh b/.travis/test.sh
new file mode 100755
index 0000000..0e26002
--- /dev/null
+++ b/.travis/test.sh
@@ -0,0 +1,110 @@
+#!/usr/bin/env bash
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+script_name="$( basename -- "${BASH_SOURCE[0]}" )"
+readonly script_name
+
+readonly sample_src_dir_name='sample-src'
+readonly sample_dest_dir_name='sample-dest'
+
+sample_src_dir_path="$script_dir/$sample_src_dir_name"
+readonly sample_src_dir_path
+sample_dest_dir_path="$script_dir/$sample_dest_dir_name"
+readonly sample_dest_dir_path
+
+test_root_dir=
+test_src_dir=
+test_dest_dir=
+
+new_test() {
+ echo 'New test'
+
+ test_root_dir="$( mktemp --directory )"
+ test_src_dir="$test_root_dir/$sample_src_dir_name"
+ test_dest_dir="$test_root_dir/$sample_dest_dir_name"
+
+ echo "Root directory: $test_root_dir"
+ echo "Shared directory: $test_src_dir"
+ echo "%DEST% directory: $test_dest_dir"
+
+ cp -r -- "$sample_src_dir_path" "$test_src_dir"
+ cp -r -- "$sample_dest_dir_path" "$test_dest_dir"
+}
+
+verify_output() {
+ if [ "$#" -ne 1 ]; then
+ echo "usage: ${FUNCNAME[0]} EXPECTED_OUTPUT" >&2
+ return 1
+ fi
+
+ local expected_output="$1"
+ echo 'Expected directory structure:'
+ echo "$expected_output"
+
+ actual_output="$( find "$test_dest_dir" -printf '%h/%f->%l\n' )"
+ echo 'Actual directory structure:'
+ echo "$actual_output"
+
+ if [ "$actual_output" != "$expected_output" ]; then
+ echo "The actual directory structure does not match the expected directory structure!" >&2
+ return 1
+ fi
+}
+
+test_update_works() {
+ new_test
+
+ cd -- "$test_root_dir"
+ DEST="$test_dest_dir" "$script_dir/../bin/update.sh" --shared-dir "$test_src_dir"
+
+ expected_output="$test_dest_dir->
+$test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt
+$test_dest_dir/foo->
+$test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt
+$test_dest_dir/bar->
+$test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt
+$test_dest_dir/bar/baz->
+$test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt"
+
+ verify_output "$expected_output"
+}
+
+test_unlink_works() {
+ new_test
+
+ cd -- "$test_root_dir"
+ DEST="$test_dest_dir" "$script_dir/../bin/update.sh" --shared-dir "$test_src_dir"
+ DEST="$test_dest_dir" "$script_dir/../bin/unlink.sh" --shared-dir "$test_src_dir"
+
+ expected_output="$test_dest_dir->"
+
+ verify_output "$expected_output"
+}
+
+test_unlink_does_not_overwrite_files() {
+ new_test
+
+ cd -- "$test_root_dir"
+ DEST="$test_dest_dir" "$script_dir/../bin/update.sh" --shared-dir "$test_src_dir"
+ rm -- "$test_dest_dir/bar/3.txt"
+ echo '+3' > "$test_dest_dir/bar/3.txt"
+ DEST="$test_dest_dir" "$script_dir/../bin/unlink.sh" --shared-dir "$test_src_dir"
+
+ expected_output="$test_dest_dir->
+$test_dest_dir/bar->
+$test_dest_dir/bar/3.txt->"
+
+ verify_output "$expected_output"
+}
+
+main() {
+ test_update_works
+ test_unlink_works
+ test_unlink_does_not_overwrite_files
+}
+
+main