summaryrefslogtreecommitdiff
path: root/test/mv-rm.test
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /test/mv-rm.test
downloadrelic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz
initial commitHEADmaster
Diffstat (limited to 'test/mv-rm.test')
-rw-r--r--test/mv-rm.test470
1 files changed, 470 insertions, 0 deletions
diff --git a/test/mv-rm.test b/test/mv-rm.test
new file mode 100644
index 0000000..8f318a6
--- /dev/null
+++ b/test/mv-rm.test
@@ -0,0 +1,470 @@
+#
+# Copyright (c) 2011 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.
+#
+# Author contact information:
+# drh@hwaci.com
+# http://www.hwaci.com/drh/
+#
+############################################################################
+#
+# MV / RM Commands
+#
+
+set path [file dirname [info script]]
+
+require_no_open_checkout
+
+########################################
+# Setup: Add Files and Commit #
+########################################
+
+test_setup; set rootDir [file normalize [pwd]]
+
+set undoMsg "\n \"fossil undo\" is\
+available to undo changes to the\
+working checkout."
+
+write_file f1 "f1"
+write_file f2 "f2"
+write_file f3 "f3"
+write_file f4 "f4"
+write_file f5 "f5"
+write_file f6 "f6"
+write_file f7 "f7"
+write_file f8 "f8"
+
+file mkdir [file join $rootDir subdirA]
+# NOTE: There are no files in subdirA.
+
+file mkdir [file join $rootDir subdirB]
+write_file [file join $rootDir subdirB f9] "f9"
+
+file mkdir [file join $rootDir subdirC]
+write_file [file join $rootDir subdirC f10] "f10"
+write_file [file join $rootDir subdirC f11] "f11"
+write_file f12 "f12"
+
+file mkdir [file join $rootDir subdirE a]
+write_file [file join $rootDir subdirE a f14] "f14"
+
+fossil add f1 f2 f3 f4 f5 f6 f7 f8 subdirB/f9 subdirC/f10 subdirC/f11 f12
+fossil add subdirE/a/f14
+fossil commit -m "c1"
+
+########################################
+# Test 1: Soft Move Relative Directory #
+########################################
+
+file mkdir [file join $rootDir subdir1]
+cd [file join $rootDir subdir1]
+
+fossil mv ../f1 .
+test mv-soft-relative-1 {$RESULT eq "RENAME f1 subdir1/f1"}
+
+fossil revert
+test mv-soft-relative-2 {
+ [normalize_result] eq "DELETE subdir1/f1\nREVERT f1${undoMsg}"
+}
+
+cd $rootDir
+
+###################################
+# Test 2: Soft Move Relative File #
+###################################
+
+file mkdir [file join $rootDir subdir2]
+cd [file join $rootDir subdir2]
+
+fossil mv ../f2 ./f2
+test mv-soft-relative-3 {$RESULT eq "RENAME f2 subdir2/f2"}
+
+fossil revert
+test mv-soft-relative-4 {
+ [normalize_result] eq "DELETE subdir2/f2\nREVERT f2${undoMsg}"
+}
+
+cd $rootDir
+
+########################################
+# Test 3: Hard Move Relative Directory #
+########################################
+
+file mkdir [file join $rootDir subdir3]
+cd [file join $rootDir subdir3]
+
+fossil mv --hard ../f3 .
+test mv-hard-relative-1 {
+ [normalize_result] eq "RENAME f3 subdir3/f3\nMOVED_FILE ${rootDir}/f3"
+}
+
+fossil revert
+test mv-hard-relative-2 {
+ [normalize_result] eq "DELETE subdir3/f3\nREVERT f3${undoMsg}"
+}
+
+cd $rootDir
+
+###################################
+# Test 4: Hard Move Relative File #
+###################################
+
+file mkdir [file join $rootDir subdir4]
+cd [file join $rootDir subdir4]
+
+fossil mv --hard ../f4 ./f4
+test mv-hard-relative-3 {
+ [normalize_result] eq "RENAME f4 subdir4/f4\nMOVED_FILE ${rootDir}/f4"
+}
+
+fossil revert
+test mv-hard-relative-4 {
+ [normalize_result] eq "DELETE subdir4/f4\nREVERT f4${undoMsg}"
+}
+
+cd $rootDir
+
+########################################
+# Test 5: Soft Move Absolute Directory #
+########################################
+
+file mkdir [file join $rootDir subdir5]
+cd [file join $rootDir subdir5]
+
+fossil mv [file join $rootDir f5] [file join $rootDir subdir5]
+test mv-soft-absolute-1 {$RESULT eq "RENAME f5 subdir5/f5"}
+
+fossil revert
+test mv-soft-absolute-2 {
+ [normalize_result] eq "DELETE subdir5/f5\nREVERT f5${undoMsg}"
+}
+
+cd $rootDir
+
+###################################
+# Test 6: Soft Move Absolute File #
+###################################
+
+file mkdir [file join $rootDir subdir6]
+cd [file join $rootDir subdir6]
+
+fossil mv [file join $rootDir f6] [file join $rootDir subdir6 f6]
+test mv-soft-absolute-3 {$RESULT eq "RENAME f6 subdir6/f6"}
+
+fossil revert
+test mv-soft-absolute-4 {
+ [normalize_result] eq "DELETE subdir6/f6\nREVERT f6${undoMsg}"
+}
+
+cd $rootDir
+
+########################################
+# Test 7: Hard Move Absolute Directory #
+########################################
+
+file mkdir [file join $rootDir subdir7]
+cd [file join $rootDir subdir7]
+
+fossil mv --hard [file join $rootDir f7] [file join $rootDir subdir7]
+test mv-hard-absolute-1 {
+ [normalize_result] eq "RENAME f7 subdir7/f7\nMOVED_FILE ${rootDir}/f7"
+}
+
+fossil revert
+test mv-hard-absolute-2 {
+ [normalize_result] eq "DELETE subdir7/f7\nREVERT f7${undoMsg}"
+}
+
+cd $rootDir
+
+###################################
+# Test 8: Hard Move Absolute File #
+###################################
+
+file mkdir [file join $rootDir subdir8]
+cd [file join $rootDir subdir8]
+
+fossil mv --hard [file join $rootDir f8] [file join $rootDir subdir8 f8]
+test mv-hard-absolute-3 {
+ [normalize_result] eq "RENAME f8 subdir8/f8\nMOVED_FILE ${rootDir}/f8"
+}
+
+fossil revert
+test mv-hard-absolute-4 {
+ [normalize_result] eq "DELETE subdir8/f8\nREVERT f8${undoMsg}"
+}
+
+cd $rootDir
+
+##########################################
+# Test 9: Soft Remove Relative Directory #
+##########################################
+
+file mkdir [file join $rootDir subdir1]
+cd [file join $rootDir subdir1]
+
+fossil rm ../subdirA
+test rm-soft-relative-1 {$RESULT eq ""}
+
+fossil rm ../subdirB
+test rm-soft-relative-2 {$RESULT eq "DELETED subdirB/f9"}
+
+fossil rm ../subdirC
+test rm-soft-relative-3 {
+ [normalize_result] eq "DELETED subdirC/f10\nDELETED subdirC/f11"
+}
+
+fossil revert
+test rm-soft-relative-4 {
+ [normalize_result] eq \
+ "REVERT subdirB/f9\nREVERT subdirC/f10\nREVERT subdirC/f11${undoMsg}"
+}
+
+cd $rootDir
+
+######################################
+# Test 10: Soft Remove Relative File #
+######################################
+
+file mkdir [file join $rootDir subdir2]
+cd [file join $rootDir subdir2]
+
+fossil rm ../f2
+test rm-soft-relative-5 {$RESULT eq "DELETED f2"}
+
+fossil revert
+test rm-soft-relative-6 {
+ [normalize_result] eq "REVERT f2${undoMsg}"
+}
+
+cd $rootDir
+
+###########################################
+# Test 11: Hard Remove Relative Directory #
+###########################################
+
+file mkdir [file join $rootDir subdir3]
+cd [file join $rootDir subdir3]
+
+fossil rm --hard ../subdirA
+test rm-hard-relative-1 {
+ [normalize_result] eq ""
+}
+
+fossil rm --hard ../subdirB
+test rm-hard-relative-2 {
+ [normalize_result] eq \
+ "DELETED subdirB/f9\nDELETED_FILE ${rootDir}/subdirB/f9"
+}
+
+fossil rm --hard ../subdirC
+test rm-hard-relative-3 {
+ [normalize_result] eq \
+ "DELETED subdirC/f10\nDELETED subdirC/f11\nDELETED_FILE\
+${rootDir}/subdirC/f10\nDELETED_FILE ${rootDir}/subdirC/f11"
+}
+
+fossil revert
+test rm-hard-relative-4 {
+ [normalize_result] eq \
+ "REVERT subdirB/f9\nREVERT subdirC/f10\nREVERT subdirC/f11${undoMsg}"
+}
+
+cd $rootDir
+
+######################################
+# Test 12: Hard Remove Relative File #
+######################################
+
+file mkdir [file join $rootDir subdir4]
+cd [file join $rootDir subdir4]
+
+fossil rm --hard ../f4
+test rm-hard-relative-5 {
+ [normalize_result] eq "DELETED f4\nDELETED_FILE ${rootDir}/f4"
+}
+
+fossil revert
+test rm-hard-relative-6 {
+ [normalize_result] eq "REVERT f4${undoMsg}"
+}
+
+cd $rootDir
+
+###########################################
+# Test 13: Soft Remove Absolute Directory #
+###########################################
+
+file mkdir [file join $rootDir subdir5]
+cd [file join $rootDir subdir5]
+
+fossil rm [file join $rootDir subdirA]
+test rm-soft-absolute-1 {$RESULT eq ""}
+
+fossil rm [file join $rootDir subdirB]
+test rm-soft-absolute-2 {$RESULT eq "DELETED subdirB/f9"}
+
+fossil rm [file join $rootDir subdirC]
+test rm-soft-absolute-3 {
+ [normalize_result] eq "DELETED subdirC/f10\nDELETED subdirC/f11"
+}
+
+fossil revert
+test rm-soft-absolute-4 {
+ [normalize_result] eq \
+ "REVERT subdirB/f9\nREVERT subdirC/f10\nREVERT subdirC/f11${undoMsg}"
+}
+
+cd $rootDir
+
+######################################
+# Test 14: Soft Remove Absolute File #
+######################################
+
+file mkdir [file join $rootDir subdir6]
+cd [file join $rootDir subdir6]
+
+fossil rm [file join $rootDir f6]
+test rm-soft-absolute-5 {$RESULT eq "DELETED f6"}
+
+fossil revert
+test rm-soft-absolute-6 {
+ [normalize_result] eq "REVERT f6${undoMsg}"
+}
+
+cd $rootDir
+
+###########################################
+# Test 15: Hard Remove Absolute Directory #
+###########################################
+
+file mkdir [file join $rootDir subdir7]
+cd [file join $rootDir subdir7]
+
+fossil rm --hard [file join $rootDir subdirA]
+test rm-hard-absolute-1 {$RESULT eq ""}
+
+fossil rm --hard [file join $rootDir subdirB]
+test rm-hard-absolute-2 {
+ [normalize_result] eq \
+ "DELETED subdirB/f9\nDELETED_FILE ${rootDir}/subdirB/f9"
+}
+
+fossil rm --hard [file join $rootDir subdirC]
+test rm-hard-absolute-3 {
+ [normalize_result] eq \
+ "DELETED subdirC/f10\nDELETED subdirC/f11\nDELETED_FILE\
+${rootDir}/subdirC/f10\nDELETED_FILE ${rootDir}/subdirC/f11"
+}
+
+fossil revert
+test rm-hard-absolute-4 {
+ [normalize_result] eq \
+ "REVERT subdirB/f9\nREVERT subdirC/f10\nREVERT subdirC/f11${undoMsg}"
+}
+
+cd $rootDir
+
+######################################
+# Test 16: Hard Remove Absolute File #
+######################################
+
+file mkdir [file join $rootDir subdir8]
+cd [file join $rootDir subdir8]
+
+fossil rm --hard [file join $rootDir f8]
+test rm-hard-absolute-5 {
+ [normalize_result] eq "DELETED f8\nDELETED_FILE ${rootDir}/f8"
+}
+
+fossil revert
+test rm-hard-absolute-6 {
+ [normalize_result] eq "REVERT f8${undoMsg}"
+}
+
+cd $rootDir
+
+#######################################
+# Test 17: Move File to New Directory #
+#######################################
+
+fossil mv --hard f12 d2/f13
+test mv-file-new-directory-1 {
+ [normalize_result] eq "RENAME f12 d2/f13\nMOVED_FILE ${rootDir}/f12"
+}
+
+test mv-file-new-directory-2 {[file size d2/f13] == 3}
+test mv-file-new-directory-3 {[read_file d2/f13] eq "f12"}
+
+fossil revert
+test mv-file-new-directory-4 {
+ [normalize_result] eq "DELETE d2/f13\nREVERT f12${undoMsg}"
+}
+
+test mv-file-new-directory-5 {[file size f12] == 3}
+test mv-file-new-directory-6 {[read_file f12] eq "f12"}
+
+cd $rootDir
+
+############################################
+# Test 18: Move Directory to New Directory #
+############################################
+
+fossil mv --hard subdirC subdirD
+test mv-file-new-directory-7 {
+ [normalize_result] eq "RENAME subdirC/f10 subdirD/f10\nRENAME subdirC/f11 subdirD/f11\nMOVED_FILE ${rootDir}/subdirC/f10\nMOVED_FILE ${rootDir}/subdirC/f11"
+}
+
+test mv-file-new-directory-8 {[file size subdirD/f10] == 3}
+test mv-file-new-directory-9 {[read_file subdirD/f10] eq "f10"}
+test mv-file-new-directory-10 {[file size subdirD/f11] == 3}
+test mv-file-new-directory-11 {[read_file subdirD/f11] eq "f11"}
+
+fossil revert
+test mv-file-new-directory-12 {
+ [normalize_result] eq "DELETE subdirD/f10\nDELETE subdirD/f11\nREVERT subdirC/f10\nREVERT subdirC/f11${undoMsg}"
+}
+
+test mv-file-new-directory-13 {[file size subdirC/f10] == 3}
+test mv-file-new-directory-14 {[read_file subdirC/f10] eq "f10"}
+test mv-file-new-directory-15 {[file size subdirC/f11] == 3}
+test mv-file-new-directory-16 {[read_file subdirC/f11] eq "f11"}
+
+cd $rootDir
+
+###############################################################################
+# Test 19: Follow-up Soft Rename of a Directory Already Renamed on Filesystem #
+###############################################################################
+
+file rename [file join $rootDir subdirE/a] [file join $rootDir subdirE/a_renamed]
+
+fossil mv subdirE/a subdirE/a_renamed
+test mv-soft-already-renamed-directory-1 {
+ [normalize_result] eq "RENAME subdirE/a/f14 subdirE/a_renamed/f14"
+}
+
+test mv-soft-already-renamed-directory-2 {[file size subdirE/a_renamed/f14] == 3}
+test mv-soft-already-renamed-directory-3 {[read_file subdirE/a_renamed/f14] eq "f14"}
+
+fossil revert
+test mv-soft-already-renamed-directory-4 {
+ [normalize_result] eq "DELETE subdirE/a_renamed/f14\nREVERT subdirE/a/f14${undoMsg}"
+}
+
+test mv-soft-already-renamed-directory-5 {[file size subdirE/a/f14] == 3}
+test mv-soft-already-renamed-directory-6 {[read_file subdirE/a/f14] eq "f14"}
+
+file delete -force [file join $rootDir subdirE/a_renamed]
+
+cd $rootDir
+
+###############################################################################
+
+test_cleanup