Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch testing-improvements Excluding Merge-Ins
This is equivalent to a diff from 9d9bf1ab to 6e23e96a
2024-01-12
| ||
15:48 | Merge current state of testing-improvements. make clean output is now easy to review. ... (check-in: e5bcfd1e user: preben tags: trunk) | |
2024-01-11
| ||
17:55 | In the update tests, also check fossil changes after updating. ... (Leaf check-in: 6e23e96a user: preben tags: testing-improvements) | |
2024-01-10
| ||
17:08 | Syntax error in test rewrite script and a couple of parsing improvments. ... (check-in: 2873af0b user: preben tags: testing-improvements) | |
08:29 | Merge in trunk to include recent test changes. ... (check-in: 383087bf user: preben tags: testing-improvements) | |
2024-01-09
| ||
17:18 | Remerge the Wiki title search enhancement, after fixing it so that it does not disrupt check-in comment search. ... (check-in: 9d9bf1ab user: drh tags: trunk) | |
17:05 | Improvements the "fossil search --fts": Add the --scope and --debug options and improve output formatting. ... (check-in: b7ef90c7 user: drh tags: trunk) | |
2024-01-07
| ||
17:26 | Back out [a402dd2a888d6d74] (wiki title search), as it causes all searches to fail for reasons as yet undetermined. ... (check-in: 48af08bd user: stephan tags: trunk) | |
Changes to test/commit-warning.test.
︙ | ︙ | |||
170 171 172 173 174 175 176 | # of source files that MUST NEVER BE TEXT. # test_block_in_checkout pre-commit-warnings-fossil-1 { fossil test-commit-warning --no-settings } { test pre-commit-warnings-fossil-1 {[normalize_result] eq \ [subst -nocommands -novariables [string trim { | < < < < < < < < < < < < | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | # of source files that MUST NEVER BE TEXT. # test_block_in_checkout pre-commit-warnings-fossil-1 { fossil test-commit-warning --no-settings } { test pre-commit-warnings-fossil-1 {[normalize_result] eq \ [subst -nocommands -novariables [string trim { 1\tcompat/zlib/contrib/blast/test.pk\tbinary data 1\tcompat/zlib/contrib/dotzlib/DotZLib.build\tCR/LF line endings 1\tcompat/zlib/contrib/dotzlib/DotZLib.chm\tbinary data 1\tcompat/zlib/contrib/dotzlib/DotZLib.sln\tCR/LF line endings 1\tcompat/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs\tCR/LF line endings 1\tcompat/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/CodecBase.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/Deflater.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/DotZLib.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj\tCR/LF line endings 1\tcompat/zlib/contrib/dotzlib/DotZLib/GZipStream.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/Inflater.cs\tinvalid UTF-8 1\tcompat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs\tCR/LF line endings 1\tcompat/zlib/contrib/dotzlib/LICENSE_1_0.txt\tCR/LF line endings 1\tcompat/zlib/contrib/dotzlib/readme.txt\tCR/LF line endings 1\tcompat/zlib/contrib/gcc_gvmat64/gvmat64.S\tCR/LF line endings 1\tcompat/zlib/contrib/puff/zeros.raw\tbinary data 1\tcompat/zlib/contrib/testzlib/testzlib.c\tCR/LF line endings 1\tcompat/zlib/contrib/testzlib/testzlib.txt\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/readme.txt\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc10/miniunz.vcxproj\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc10/minizip.vcxproj\tCR/LF line endings |
︙ | ︙ | |||
241 242 243 244 245 246 247 248 249 250 251 252 253 254 | 1\tcompat/zlib/contrib/vstudio/vc9/zlibstat.vcproj\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc9/zlibvc.def\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc9/zlibvc.sln\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc9/zlibvc.vcproj\tCR/LF line endings 1\tcompat/zlib/win32/zlib.def\tCR/LF line endings 1\tcompat/zlib/zlib.3.pdf\tbinary data 1\tcompat/zlib/zlib.map\tCR/LF line endings 1\tskins/blitz/arrow_project.png\tbinary data 1\tskins/blitz/dir.png\tbinary data 1\tskins/blitz/file.png\tbinary data 1\tskins/blitz/fossil_100.png\tbinary data 1\tskins/blitz/fossil_80_reversed_darkcyan.png\tbinary data 1\tskins/blitz/fossil_80_reversed_darkcyan_text.png\tbinary data 1\tskins/blitz/rss_20.png\tbinary data | > < | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | 1\tcompat/zlib/contrib/vstudio/vc9/zlibstat.vcproj\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc9/zlibvc.def\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc9/zlibvc.sln\tCR/LF line endings 1\tcompat/zlib/contrib/vstudio/vc9/zlibvc.vcproj\tCR/LF line endings 1\tcompat/zlib/win32/zlib.def\tCR/LF line endings 1\tcompat/zlib/zlib.3.pdf\tbinary data 1\tcompat/zlib/zlib.map\tCR/LF line endings 1\textsrc/pikchr.wasm\tbinary data 1\tskins/blitz/arrow_project.png\tbinary data 1\tskins/blitz/dir.png\tbinary data 1\tskins/blitz/file.png\tbinary data 1\tskins/blitz/fossil_100.png\tbinary data 1\tskins/blitz/fossil_80_reversed_darkcyan.png\tbinary data 1\tskins/blitz/fossil_80_reversed_darkcyan_text.png\tbinary data 1\tskins/blitz/rss_20.png\tbinary data 1\tsrc/alerts/bflat2.wav\tbinary data 1\tsrc/alerts/bflat3.wav\tbinary data 1\tsrc/alerts/bloop.wav\tbinary data 1\tsrc/alerts/plunk.wav\tbinary data 1\tsrc/sounds/0.wav\tbinary data 1\tsrc/sounds/1.wav\tbinary data 1\tsrc/sounds/2.wav\tbinary data |
︙ | ︙ |
Changes to test/delta1.test.
︙ | ︙ | |||
23 24 25 26 27 28 29 | # Use test script files as the basis for this test. # # For each test, copy the file intact to "./t1". Make # some random changes in "./t2". Then call test-delta on the # two files to make sure that deltas between these two files # work properly. # | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # Use test script files as the basis for this test. # # For each test, copy the file intact to "./t1". Make # some random changes in "./t2". Then call test-delta on the # two files to make sure that deltas between these two files # work properly. # set filelist [lsort [glob $testdir/*]] foreach f $filelist { if {[file isdir $f]} continue set base [file root [file tail $f]] set f1 [read_file $f] write_file t1 $f1 for {set i 0} {$i<100} {incr i} { write_file t2 [random_changes $f1 1 1 0 0.1] |
︙ | ︙ |
Changes to test/fake-editor.tcl.
︙ | ︙ | |||
47 48 49 50 51 52 53 54 55 56 57 58 59 60 | close $channel return "" } ############################################################################### set fileName [lindex $argv 0] if {[file exists $fileName]} { set data [readFile $fileName] } else { set data "" } | > > > > > | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | close $channel return "" } ############################################################################### set fileName [lindex $argv 0] if {[regexp {^CYGWIN} $::tcl_platform(os)]} { # Under Cygwin, we get a Windows path but must access using the unix path. set fileName [exec cygpath --unix $fileName] } if {[file exists $fileName]} { set data [readFile $fileName] } else { set data "" } |
︙ | ︙ |
Changes to test/json.test.
︙ | ︙ | |||
175 176 177 178 179 180 181 182 183 184 185 186 187 188 | proc test_json_payload {testname okfields badfields} { test_dict_keys $testname [dict get $::JR payload] $okfields $badfields } #### VERSION AKA HAI # The JSON API generally assumes we have a respository, so let it have one. test_setup # Stop backoffice from running during this test as it can cause hangs. fossil settings backoffice-disable 1 # Check for basic envelope fields in the result with an error fossil_json -expectError | > > > > > > > > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | proc test_json_payload {testname okfields badfields} { test_dict_keys $testname [dict get $::JR payload] $okfields $badfields } #### VERSION AKA HAI # The JSON API generally assumes we have a respository, so let it have one. # Set FOSSIL_USER to ensure consistent results in "json user list" set _fossil_user "" if [info exists env(FOSSIL_USER)] { set _fossil_user $env(FOSSIL_USER) } set ::env(FOSSIL_USER) "JSON-TEST-USER" test_setup # Stop backoffice from running during this test as it can cause hangs. fossil settings backoffice-disable 1 # Check for basic envelope fields in the result with an error fossil_json -expectError |
︙ | ︙ | |||
885 886 887 888 889 890 891 | # Fossil repository db file could not be found. fossil close fossil_json HAI -expectError test json-RC-4102-CLI-exit {$CODE != 0} test_json_envelope json-RC-4102-CLI-exit {fossil timestamp command procTimeUs \ procTimeMs resultCode resultText} {payload} test json-RC-4102 {[dict get $JR resultCode] eq "FOSSIL-4102"} | < > > > > > > | 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 | # Fossil repository db file could not be found. fossil close fossil_json HAI -expectError test json-RC-4102-CLI-exit {$CODE != 0} test_json_envelope json-RC-4102-CLI-exit {fossil timestamp command procTimeUs \ procTimeMs resultCode resultText} {payload} test json-RC-4102 {[dict get $JR resultCode] eq "FOSSIL-4102"} # FOSSIL-4103 FSL_JSON_E_DB_NOT_VALID # Fossil repository db file is not valid. write_file nope.fossil { This is not a fossil repo. It ought to be a SQLite db with a well-known schema, but it is actually just a block of text. } fossil_json HAI -R nope.fossil -expectError test json-RC-4103-CLI-exit {$CODE != 0} if { $JR ne "" } { test_json_envelope json-RC-4103-CLI {fossil timestamp command procTimeUs \ procTimeMs resultCode resultText} {payload} test json-RC-4103 {[dict get $JR resultCode] eq "FOSSIL-4103"} } else { test json-RC-4103 0 knownBug } ############################################################################### test_cleanup if { $_fossil_user eq "" } { unset ::env(FOSSIL_USER) } else { set ::env(FOSSIL_USER) $_fossil_user } |
Changes to test/merge1.test.
︙ | ︙ | |||
96 97 98 99 100 101 102 | 111 - This is line ONE of the demo program - 1111 >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 222 - The second line program line in code - 2222 333 - This is a test of the merging algohm - 3333 444 - If all goes well, we will be pleased - 4444 555 - we think it well and other stuff too - 5555 } | | | | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | 111 - This is line ONE of the demo program - 1111 >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 222 - The second line program line in code - 2222 333 - This is a test of the merging algohm - 3333 444 - If all goes well, we will be pleased - 4444 555 - we think it well and other stuff too - 5555 } fossil 3-way-merge t1 t3 t2 a32 -expectError test merge1-2.1 {[same_file t32 a32]} fossil 3-way-merge t1 t2 t3 a23 -expectError test merge1-2.2 {[same_file t23 a23]} write_file_indented t1 { 111 - This is line one of the demo program - 1111 222 - The second line program line in code - 2222 333 - This is a test of the merging algohm - 3333 444 - If all goes well, we will be pleased - 4444 |
︙ | ︙ | |||
181 182 183 184 185 186 187 | ======= MERGED IN content follows =============================== (line 1) >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 222 - The second line program line in code - 2222 333 - This is a test of the merging algohm - 3333 444 - If all goes well, we will be pleased - 4444 555 - we think it well and other stuff too - 5555 } | | | | 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | ======= MERGED IN content follows =============================== (line 1) >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 222 - The second line program line in code - 2222 333 - This is a test of the merging algohm - 3333 444 - If all goes well, we will be pleased - 4444 555 - we think it well and other stuff too - 5555 } fossil 3-way-merge t1 t3 t2 a32 -expectError test merge1-4.1 {[same_file t32 a32]} fossil 3-way-merge t1 t2 t3 a23 -expectError test merge1-4.2 {[same_file t23 a23]} write_file_indented t1 { 111 - This is line one of the demo program - 1111 222 - The second line program line in code - 2222 333 - This is a test of the merging algohm - 3333 444 - If all goes well, we will be pleased - 4444 |
︙ | ︙ | |||
328 329 330 331 332 333 334 | GHIJ >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KLMN OPQR STUV XYZ. } | | | 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | GHIJ >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KLMN OPQR STUV XYZ. } fossil 3-way-merge t1 t2 t3 a23 -expectError test merge1-7.1 {[same_file t23 a23]} write_file_indented t2 { abcd efgh 2 ijkl 2 mnop |
︙ | ︙ | |||
396 397 398 399 400 401 402 | GHIJ >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KLMN OPQR STUV XYZ. } | | | 396 397 398 399 400 401 402 403 404 405 406 407 408 | GHIJ >>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KLMN OPQR STUV XYZ. } fossil 3-way-merge t1 t2 t3 a23 -expectError test merge1-7.2 {[same_file t23 a23]} ############################################################################### test_cleanup |
Changes to test/merge2.test.
︙ | ︙ | |||
16 17 18 19 20 21 22 | ############################################################################ # # Tests of the delta mechanism. # test_setup "" | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ############################################################################ # # Tests of the delta mechanism. # test_setup "" set filelist [lsort [glob $testdir/*]] foreach f $filelist { if {[file isdir $f]} continue set base [file root [file tail $f]] if {[string match "utf16*" $base]} continue set f1 [read_file $f] write_file t1 $f1 for {set i 0} {$i<100} {incr i} { |
︙ | ︙ |
Changes to test/merge3.test.
︙ | ︙ | |||
16 17 18 19 20 21 22 | ############################################################################ # # Tests of the 3-way merge # test_setup "" | | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ############################################################################ # # Tests of the 3-way merge # test_setup "" proc merge-test {testid basis v1 v2 result {fossil_args ""}} { write_file t1 [join [string trim $basis] \n]\n write_file t2 [join [string trim $v1] \n]\n write_file t3 [join [string trim $v2] \n]\n fossil 3-way-merge t1 t2 t3 t4 {*}$fossil_args set x [read_file t4] regsub -all \ {<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <+ \(line \d+\)} \ $x {MINE:} x regsub -all \ {\|\|\|\|\|\|\| COMMON ANCESTOR content follows \|+ \(line \d+\)} \ $x {COM:} x |
︙ | ︙ | |||
72 73 74 75 76 77 78 | 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6 7 8 9 } { 1 2 3 4 5c 6 7 8 9 } { 1 2 MINE: 3b 4b 5b COM: 3 4 5 YOURS: 3 4 5c END 6 7 8 9 | | | | | | | | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6 7 8 9 } { 1 2 3 4 5c 6 7 8 9 } { 1 2 MINE: 3b 4b 5b COM: 3 4 5 YOURS: 3 4 5c END 6 7 8 9 } -expectError merge-test 4 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6b 7 8 9 } { 1 2 3 4 5c 6 7 8 9 } { 1 2 MINE: 3b 4b 5b 6b COM: 3 4 5 6 YOURS: 3 4 5c 6 END 7 8 9 } -expectError merge-test 5 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6b 7 8 9 } { 1 2 3 4 5c 6c 7c 8 9 } { 1 2 MINE: 3b 4b 5b 6b 7 COM: 3 4 5 6 7 YOURS: 3 4 5c 6c 7c END 8 9 } -expectError merge-test 6 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6b 7 8b 9 } { 1 2 3 4 5c 6c 7c 8 9 } { 1 2 MINE: 3b 4b 5b 6b 7 COM: 3 4 5 6 7 YOURS: 3 4 5c 6c 7c END 8b 9 } -expectError merge-test 7 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6b 7 8b 9 } { 1 2 3 4 5c 6c 7c 8c 9 } { 1 2 MINE: 3b 4b 5b 6b 7 8b COM: 3 4 5 6 7 8 YOURS: 3 4 5c 6c 7c 8c END 9 } -expectError merge-test 8 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5b 6b 7 8b 9b } { 1 2 3 4 5c 6c 7c 8c 9 } { 1 2 MINE: 3b 4b 5b 6b 7 8b 9b COM: 3 4 5 6 7 8 9 YOURS: 3 4 5c 6c 7c 8c 9 END } -expectError merge-test 9 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5 6 7 8b 9b } { 1 2 3 4 5c 6c 7c 8 9 } { |
︙ | ︙ | |||
145 146 147 148 149 150 151 | 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5 6 7 8b 9b } { 1 2 3b 4c 5 6c 7c 8 9 } { 1 2 MINE: 3b 4b COM: 3 4 YOURS: 3b 4c END 5 6c 7c 8b 9b | | | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | 1 2 3 4 5 6 7 8 9 } { 1 2 3b 4b 5 6 7 8b 9b } { 1 2 3b 4c 5 6c 7c 8 9 } { 1 2 MINE: 3b 4b COM: 3 4 YOURS: 3b 4c END 5 6c 7c 8b 9b } -expectError merge-test 12 { 1 2 3 4 5 6 7 8 9 } { 1 2 3b4b 5 6 7 8b 9b } { 1 2 3b4b 5 6c 7c 8 9 } { |
︙ | ︙ | |||
200 201 202 203 204 205 206 | 1 2 3 4 5 6 7 8 9 } { 1 6 7 8 9 } { 1 2 3 4 9 } { 1 MINE: 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END 9 | | | | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | 1 2 3 4 5 6 7 8 9 } { 1 6 7 8 9 } { 1 2 3 4 9 } { 1 MINE: 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END 9 } -expectError merge-test 25 { 1 2 3 4 5 6 7 8 9 } { 1 7 8 9 } { 1 2 3 9 } { 1 MINE: 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 END 9 } -expectError merge-test 30 { 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 5 6 7 9 } { 1 3 4 5 6 7 8 9 |
︙ | ︙ | |||
255 256 257 258 259 260 261 | 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 9 } { 1 6 7 8 9 } { 1 MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 6 7 8 END 9 | | | | 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 | 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 9 } { 1 6 7 8 9 } { 1 MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 6 7 8 END 9 } -expectError merge-test 35 { 1 2 3 4 5 6 7 8 9 } { 1 2 3 9 } { 1 7 8 9 } { 1 MINE: 2 3 COM: 2 3 4 5 6 7 8 YOURS: 7 8 END 9 } -expectError merge-test 40 { 2 3 4 5 6 7 8 } { 3 4 5 6 7 8 } { 2 3 4 5 6 7 |
︙ | ︙ | |||
310 311 312 313 314 315 316 | 2 3 4 5 6 7 8 } { 6 7 8 } { 2 3 4 } { MINE: 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END | | | | 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 | 2 3 4 5 6 7 8 } { 6 7 8 } { 2 3 4 } { MINE: 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END } -expectError merge-test 45 { 2 3 4 5 6 7 8 } { 7 8 } { 2 3 } { MINE: 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 END } -expectError merge-test 50 { 2 3 4 5 6 7 8 } { 2 3 4 5 6 7 } { 3 4 5 6 7 8 |
︙ | ︙ | |||
364 365 366 367 368 369 370 | 2 3 4 5 6 7 8 } { 2 3 4 } { 6 7 8 } { MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 6 7 8 END | | | | 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 | 2 3 4 5 6 7 8 } { 2 3 4 } { 6 7 8 } { MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 6 7 8 END } -expectError merge-test 55 { 2 3 4 5 6 7 8 } { 2 3 } { 7 8 } { MINE: 2 3 COM: 2 3 4 5 6 7 8 YOURS: 7 8 END } -expectError merge-test 60 { 1 2 3 4 5 6 7 8 9 } { 1 2b 3 4 5 6 7 8 9 } { 1 2 3 4 5 6 7 9 |
︙ | ︙ | |||
419 420 421 422 423 424 425 | 1 2 3 4 5 6 7 8 9 } { 1 2b 3b 4b 5b 6 7 8 9 } { 1 2 3 4 9 } { 1 MINE: 2b 3b 4b 5b 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END 9 | | | | 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | 1 2 3 4 5 6 7 8 9 } { 1 2b 3b 4b 5b 6 7 8 9 } { 1 2 3 4 9 } { 1 MINE: 2b 3b 4b 5b 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END 9 } -expectError merge-test 65 { 1 2 3 4 5 6 7 8 9 } { 1 2b 3b 4b 5b 6b 7 8 9 } { 1 2 3 9 } { 1 MINE: 2b 3b 4b 5b 6b 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 END 9 } -expectError merge-test 70 { 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 5 6 7 9 } { 1 2b 3 4 5 6 7 8 9 |
︙ | ︙ | |||
474 475 476 477 478 479 480 | 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 9 } { 1 2b 3b 4b 5b 6 7 8 9 } { 1 MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 2b 3b 4b 5b 6 7 8 END 9 | | | | 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 | 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 9 } { 1 2b 3b 4b 5b 6 7 8 9 } { 1 MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 2b 3b 4b 5b 6 7 8 END 9 } -expectError merge-test 75 { 1 2 3 4 5 6 7 8 9 } { 1 2 3 9 } { 1 2b 3b 4b 5b 6b 7 8 9 } { 1 MINE: 2 3 COM: 2 3 4 5 6 7 8 YOURS: 2b 3b 4b 5b 6b 7 8 END 9 } -expectError merge-test 80 { 2 3 4 5 6 7 8 } { 2b 3 4 5 6 7 8 } { 2 3 4 5 6 7 |
︙ | ︙ | |||
529 530 531 532 533 534 535 | 2 3 4 5 6 7 8 } { 2b 3b 4b 5b 6 7 8 } { 2 3 4 } { MINE: 2b 3b 4b 5b 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END | | | | 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | 2 3 4 5 6 7 8 } { 2b 3b 4b 5b 6 7 8 } { 2 3 4 } { MINE: 2b 3b 4b 5b 6 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 4 END } -expectError merge-test 85 { 2 3 4 5 6 7 8 } { 2b 3b 4b 5b 6b 7 8 } { 2 3 } { MINE: 2b 3b 4b 5b 6b 7 8 COM: 2 3 4 5 6 7 8 YOURS: 2 3 END } -expectError merge-test 90 { 2 3 4 5 6 7 8 } { 2 3 4 5 6 7 } { 2b 3 4 5 6 7 8 |
︙ | ︙ | |||
584 585 586 587 588 589 590 | 2 3 4 5 6 7 8 } { 2 3 4 } { 2b 3b 4b 5b 6 7 8 } { MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 2b 3b 4b 5b 6 7 8 END | | | | 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 | 2 3 4 5 6 7 8 } { 2 3 4 } { 2b 3b 4b 5b 6 7 8 } { MINE: 2 3 4 COM: 2 3 4 5 6 7 8 YOURS: 2b 3b 4b 5b 6 7 8 END } -expectError merge-test 95 { 2 3 4 5 6 7 8 } { 2 3 } { 2b 3b 4b 5b 6b 7 8 } { MINE: 2 3 COM: 2 3 4 5 6 7 8 YOURS: 2b 3b 4b 5b 6b 7 8 END } -expectError merge-test 100 { 1 2 3 4 5 6 7 8 9 } { 1 2b 3 4 5 7 8 9 a b c d e } { 1 2b 3 4 5 7 8 9 a b c d e |
︙ | ︙ | |||
630 631 632 633 634 635 636 | 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 5 7 8 9b } { 1 2 3 4 5 7 8 9b a b c d e } { 1 2 3 4 5 7 8 MINE: 9b COM: 9 YOURS: 9b a b c d e END | | | | 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 | 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 5 7 8 9b } { 1 2 3 4 5 7 8 9b a b c d e } { 1 2 3 4 5 7 8 MINE: 9b COM: 9 YOURS: 9b a b c d e END } -expectError merge-test 104 { 1 2 3 4 5 6 7 8 9 } { 1 2 3 4 5 7 8 9b a b c d e } { 1 2 3 4 5 7 8 9b } { 1 2 3 4 5 7 8 MINE: 9b a b c d e COM: 9 YOURS: 9b END } -expectError ############################################################################### test_cleanup |
Changes to test/merge4.test.
︙ | ︙ | |||
16 17 18 19 20 21 22 | ############################################################################ # # Tests of the 3-way merge # test_setup "" | | | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ############################################################################ # # Tests of the 3-way merge # test_setup "" proc merge-test {testid basis v1 v2 result1 result2 {fossil_args ""}} { write_file t1 [join [string trim $basis] \n]\n write_file t2 [join [string trim $v1] \n]\n write_file t3 [join [string trim $v2] \n]\n fossil 3-way-merge t1 t2 t3 t4 {*}$fossil_args fossil 3-way-merge t1 t3 t2 t5 {*}$fossil_args set x [read_file t4] regsub -all {<<<<<<< BEGIN MERGE CONFLICT.*<< \(line \d+\)} $x {>} x regsub -all {\|\|\|\|\|\|\|.*======= \(line \d+\)} $x {=} x regsub -all {>>>>>>> END MERGE CONFLICT.*>>>>} $x {<} x set x [split [string trim $x] \n] set y [read_file t5] regsub -all {<<<<<<< BEGIN MERGE CONFLICT.*<< \(line \d+\)} $y {>} y |
︙ | ︙ | |||
59 60 61 62 63 64 65 | 1 2b 3b 4b 5 6b 7b 8b 9 } { 1 2 3 4c 5c 6c 7 8 9 } { 1 > 2b 3b 4b 5 6b 7b 8b = 2 3 4c 5c 6c 7 8 < 9 } { 1 > 2 3 4c 5c 6c 7 8 = 2b 3b 4b 5 6b 7b 8b < 9 | | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 1 2b 3b 4b 5 6b 7b 8b 9 } { 1 2 3 4c 5c 6c 7 8 9 } { 1 > 2b 3b 4b 5 6b 7b 8b = 2 3 4c 5c 6c 7 8 < 9 } { 1 > 2 3 4c 5c 6c 7 8 = 2b 3b 4b 5 6b 7b 8b < 9 } -expectError merge-test 1001 { 1 2 3 4 5 6 7 8 9 } { 1 2b 3b 4 5 6 7b 8b 9 } { 1 2 3 4c 5c 6c 7 8 9 } { |
︙ | ︙ | |||
81 82 83 84 85 86 87 | 2b 3b 4b 5 6b 7b 8b } { 2 3 4c 5c 6c 7 8 } { > 2b 3b 4b 5 6b 7b 8b = 2 3 4c 5c 6c 7 8 < } { > 2 3 4c 5c 6c 7 8 = 2b 3b 4b 5 6b 7b 8b < | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | 2b 3b 4b 5 6b 7b 8b } { 2 3 4c 5c 6c 7 8 } { > 2b 3b 4b 5 6b 7b 8b = 2 3 4c 5c 6c 7 8 < } { > 2 3 4c 5c 6c 7 8 = 2b 3b 4b 5 6b 7b 8b < } -expectError merge-test 1003 { 2 3 4 5 6 7 8 } { 2b 3b 4 5 6 7b 8b } { 2 3 4c 5c 6c 7 8 } { |
︙ | ︙ |
Changes to test/merge5.test.
︙ | ︙ | |||
14 15 16 17 18 19 20 | # http://www.hwaci.com/drh/ # ############################################################################ # # Tests of the "merge" command # | > | > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # http://www.hwaci.com/drh/ # ############################################################################ # # Tests of the "merge" command # if {! $::QUIET} { puts "Skipping Merge5 tests" } protOut { fossil sqlite3 --no-repository reacts badly to SQL dumped from repositories created from fossil older than version 2.0. } test merge5-sqlite3-issue false knownBug test_cleanup_then_return |
︙ | ︙ |
Changes to test/merge_renames.test.
︙ | ︙ | |||
260 261 262 263 264 265 266 | fossil update trunk write_file f1 "f1.2" fossil add f1 fossil commit -b b2 -m "add f1" fossil update trunk fossil merge b1 | | | | 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 | fossil update trunk write_file f1 "f1.2" fossil add f1 fossil commit -b b2 -m "add f1" fossil update trunk fossil merge b1 fossil merge b2 -expectError test_status_list merge_renames-8-1 $RESULT { MERGE f1 WARNING: 1 merge conflicts } fossil revert fossil merge --integrate b1 fossil merge b2 -expectError test_status_list merge_renames-8-2 $RESULT { MERGE f1 WARNING: 1 merge conflicts } ############################################# # Test 9 # |
︙ | ︙ | |||
320 321 322 323 324 325 326 | # Undo and ensure a dry run merge results in no changes fossil undo test_status_list merge_renames-9-5 $RESULT { UNDO f1 UNDO f2 } | | | 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 | # Undo and ensure a dry run merge results in no changes fossil undo test_status_list merge_renames-9-5 $RESULT { UNDO f1 UNDO f2 } fossil merge -n b -expectError test_status_list merge_renames-9-6 $RESULT " $expectedMerge REMINDER: this was a dry run - no files were actually changed. " test merge_renames-9-7 {[fossil changes] eq ""} ################################################################### |
︙ | ︙ |
Changes to test/merge_warn.test.
︙ | ︙ | |||
38 39 40 41 42 43 44 | write_file f4 "f4" fossil add f4 fossil commit -m "add f4" fossil update trunk write_file f1 "f1.1" write_file f3 "f3.1" | | | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | write_file f4 "f4" fossil add f4 fossil commit -m "add f4" fossil update trunk write_file f1 "f1.1" write_file f3 "f3.1" fossil merge --integrate mrg -expectError test_status_list merge_warn-1 $RESULT { WARNING: 1 unmanaged files were overwritten WARNING: 2 merge conflicts DELETE f1 MERGE f2 ADDED f3 (overwrites an unmanaged file), original copy backed up locally WARNING: local edits lost for f1 |
︙ | ︙ |
Added test/rewrite-test-output.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 | #!/usr/bin/env tclsh # Script to anonymise test results for comparison. # - Replaces hashes, pids and similar with fixed strings # - Rewrites temporary paths to standardise them in output # Pick up options set EXTRA 0 set i [lsearch $argv -extra] while { $i >= 0 } { incr EXTRA set argv [lreplace $argv $i $i] set i [lsearch $argv -extra] } # With no arguments or "-", use stdin. set fname "-" if { [llength $argv] > 0 } { set fname [lindex $argv 0] } # Any -options, or an empty first argument, is an error. if { [llength $argv] > 1 || [regexp {^-.+} $fname] } { puts stderr "Error: argument error" puts stderr "usage: \[-extra\] [file tail $argv0] ?FILE" puts stderr " Rewrite test output to ease comparison of outputs." puts stderr " With -extra, more output is rewritten as is summaries" puts stderr " to make diff(1) mor euseful across runs and platforms." exit 1 } elseif { $fname ne "-" && ! [file exists $fname] } { puts stderr "File does not exist: '$fname'" exit 1 } proc common_rewrites { line testname } { # Normalise the fossil commands with path as just fossil regsub {^(?:[A-Z]:)?/.*?/fossil(?:\.exe)? } $line {fossil } line if {[string match "Usage: *" $line]} { regsub {^(Usage: )/.*?/fossil(?:\.exe)? } $line {\1fossil } line regsub {^(Usage: )[A-Z]:\\.*?\\fossil(?:\.exe)? } $line {\1fossil } line } # Accept 40 and 64 byte hashes as such regsub -all {[[:<:]][0-9a-f]{40}[[:>:]]} $line HASH line regsub -all {[[:<:]][0-9a-f]{64}[[:>:]]} $line HASH line # Date and time regsub -all {[[:<:]]\d{4}-\d\d-\d\d \d\d:\d\d:\d\d[[:>:]]} $line {YYYY-mm-dd HH:MM:SS} line if { [lsearch -exact {"amend" "wiki"} $testname] >= 0 } { # With embedded T and milliseconds regsub { \d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}$} $line { YYYY-mm-ddTHH:MM:SS.NNN} line } if { [lsearch -exact {"amend" "th1-hooks" "wiki"} $testname] >= 0 } { regsub {[[:<:]]\d{4}-\d\d-\d\d[[:>:]]} $line {YYYY-mm-dd} line } # Timelines have HH:MM:SS [HASH], but don't mess with the zero'ed version. regsub {^(?!00:00:00 \[0000000000\])\d\d:\d\d:\d\d \[[0-9a-f]{10}\] } $line {HH:MM:SS [HASH] } line # Temporary directories regsub -all {(?:[A-Z]:)?/.*?/repo_\d+/\d+_\d+} $line {/TMP/repo_PID/SEC_SEQ} line # Home directories only seem present with .fossil or _fossil. Simplify to .fossil. regsub -all {(?:[A-Z]:)?/.*?/home_\d+/[._]fossil[[:>:]]} $line {/TMP/home_PID/.fossil} line # Users in output regsub { (\(user: )[^\)]*\)$} $line { \1USER)} line return $line } # # tests/tests_unix/tests_windows contain tuples of # # 1. A regular expression to match current line # 2. A substitution for the current line # # Some common patterns applicable to multiples tests are appended below. # # The common_rewrites procedure is run first, so use e.g. HASH as needed. # dict set tests "amend" { {^(fossil artifact) [0-9a-f]{10}} {\1 HASH} {^U [^ ]+$} {U USER} {^Z [0-9a-f]{32}$} {Z CHECKSUM} {^(ed -s \./ci-comment-).*?(\.txt)$} {\1UNIQ\2} {^(fossil amend HASH -date \{?)\d\d/\d\d/\d{4}} {\1dd/mm/YYYY} {^(fossil amend HASH -date \{.* )\d{4}(\})$} {\1YYYY\2} {^(fossil amend HASH -date \{.* )\d\d:} {\1HH:} {^(fossil amend HASH -date \{)[A-Z][a-z]{2} [A-Z][a-z]{2} [ 0-9]\d } {\1Day Mon dd } {(\] Edit \[)[0-9a-f]{16}.[0-9a-f]{10}(\]: )} {\1HASH1|HASH2\2} {(\] Edit \[.*?&dp=)[0-9a-f]{16}} {\1dp=HASH} } dict set tests "cmdline" { {^(fossil test-echo --args) .*/} {\1 /TMP/} {^(g\.nameOfExe =) \[[^\]]+[/\\]fossil(?:\.exe)?\]$} {\1 [/PATH/FOSSILCMD]} {^(argv\[0\] =) \[[^\]]+[/\\]fossil(?:\.exe)?\]$} {\1 [/PATH/FOSSILCMD]} } dict set tests "contains-selector" { {^(fossil test-contains-selector) .*?/(compare-selector.css )} {\1 /TMP/\2} } dict set tests "json" { {^(Content-Length) \d+$} {\1 LENGTH} {^(Cookie: fossil-)[0-9a-f]{16}(\=HASH%2F)\d+\.\d+(%2Fanonymous)$} {\1CODE\2NOW\3} {^(GET /json/cap\?authToken\=HASH)/\d+\.\d+/(anonymous )} {\1/NOW/\2} {^(Cookie: fossil-)[0-9a-f]{16}\=[0-9A-F]{50}%2F[0-9a-f]{16}%2F(.*)$} {\1CODE=SHA1%2FCODE%2F\2} {("authToken":").+?(")} {\1AUTHTOKEN\2} {("averageArtifactSize":)\d+()} {\1SIZE\2} {("compiler":").+?(")} {\1COMPILER\2} {("loginCookieName":").+?(")} {\1COOKIE\2} {("manifestVersion":"\[)[0-9a-f]{10}(\]")} {\1HASH\2} {("manifestYear":")\d{4}(")} {\1YYYY\2} {("name":").+?(")} {\1NAME\2} {("password":")[0-9a-f]+(")} {\1PASSWORD\2} {("projectCode":")[0-9a-f]{40}(")} {\1HASH\2} {("procTimeMs":)\d+} {\1MSEC} {("procTimeUs":)\d+} {\1USEC} {("releaseVersion":")\d+\.\d+(")} {\1VERSION\2} {("releaseVersionNumber":")\d+(")} {\1VERSION_NUMBER\2} {("timestamp":)\d+} {\1SEC} {("seed":)\d+()} {\1SEED\2} {("uid":)\d+()} {\1UID\2} {("uncompressedArtifactSize":)\d+()} {\1SIZE\2} {("user":").+?(")} {\1USER\2} {("version":"YYYY-mm-dd HH:MM:SS )\[[0-9a-f]{10}\] \(\d+\.\d+\.\d+\)"} {\1[HASH] (major.minor.patch)} {^(Date:) [A-Z][a-z]{2}, \d\d? [A-Z][a-z]{2} \d{4} \d\d:\d\d:\d\d [-+]\d{4}$} {\1 Day, dd Mon YYYY HH:MM:SS TZ} } dict set tests "merge_renames" { {^(size: {7})\d+( bytes)$} {\1N\2} {^(type: {7}Check-in by ).+?( on YYYY-mm-dd HH:MM:SS)$} {\1USER\2} } dict set tests "set-manifest" { {^(project-code: )[0-9a-f]{40}$} {\1HASH} line } dict set tests "stash" { {^(---|\+\+\+) NUL$} {\1 /dev/null} {(^ 1: \[)[0-9a-f]{14}(\] on YYYY-mm-dd HH:MM:SS)$} {\1HASH\2} {(^ 1: \[)[0-9a-f]{14}(\] from YYYY-mm-dd HH:MM:SS)$} {\1HASH\2} } dict set tests "th1" { {^(fossil test-th-source) (?:[A-Z]:)?.*?/(th1-)\d+([.]th1)$} {\1 /TMP/\2PID\3} {^(?:[A-Z]:)?[/\\].*?[/\\]fossil(?:\.exe)?$} {/PATH/FOSSILCMD} {[[:<:]](Content-Security-Policy[[:>:]].*'nonce-)[0-9a-f]{48}(';)} {\1NONCE\2} {^(<link rel="stylesheet" href="/style.css\?id=)[0-9a-f]+(" type="text/css">)$} {\1ID\2} {^\d+\.\d{3}(s by)$} {N.MMM\1} {^(Fossil) \d+\.\d+ \[[0-9a-f]{10}\] (YYYY-mm-dd HH:MM:SS)$} {\1 N.M [HASH] \2} {^(<script nonce=")[0-9a-f]{48}(">/\* style\.c:)\d+} {\1NONCE\2LINENO} } dict set tests "th1-docs" { {^(check-ins: ).*} {\1COUNT} {^(local-root: ).*} {\1/PATH/} {^(repository: ).*} {\1/PATH/REPO} {^(comment: ).*} {\1/COMMENT/} {^(tags: ).*} {\1/TAGS/} {(--ipaddr 127\.0\.0\.1) .*? (--localauth)} {\1 REPO \2} } dict set tests "th1-hooks" { {^(?:/[^:]*/fossil|[A-Z]:\\[^:]*\\fossil\.exe): (unknown command:|use \"help\")} {fossil: \1} {^(project-code: )[0-9a-f]{40}$} {\1HASH} } dict set tests "th1-tcl" { {^(fossil test-th-render --open-config) \{?.*?[/\\]test[/\\]([^/\\]*?)\}?$} {\1 /CHECKOUT/test/\2} {^(fossil)(?:\.exe)?( 3 \{test-th-render --open-config )(?:\{[A-Z]:)?[/\\].*?[/\\]test[/\\](th1-tcl9.txt\})\}?$} {\1\2/CHECKOUT/test/\3} {^\d{10}$} {SEC} } dict set tests "unversioned" { {^(fossil user new uvtester.*) \d+$} {\1 PASSWORD} {^(fossil .*http://uvtester:)\d+(@localhost:)\d+} {\1PASSWORD\2PORT} {^(Pull from http://uvtester@localhost:)\d+} {\1PORT} {^(ERROR \(1\): Usage:) .*?[/\\]fossil(?:\.exe)? (unversioned)} {\1 /PATH/fossil \2} {^(Started Fossil server, pid \")\d+(\", port \")\d+} {\1PID\2PORT} {^(Now in client directory \")(?:[A-Z]:)?/.*?/uvtest_\d+_\d+\"} {\1/TMP/uvtest_SEC_SEQ} {^(Stopped Fossil server, pid \")\d+(\", using argument \")(?:\d+|[^\"]*\.stopper)(\")} {\1PID\2PID_OR_SCRIPT\3} {^(This is unversioned file #4\.) \d+ \d+} {\1 PID SEC} {^(This is unversioned file #4\. PID SEC) \d+ \d+} {\1 PID SEC} {^[0-9a-f]{12}( YYYY-mm-dd HH:MM:SS *)(\d+)( *)\2( unversioned4.txt)$} {HASH \1SZ\3SZ\4} {^[0-9a-f]{40}$} {\1HASH} {^((?:Clone|Pull)? done, wire bytes sent: )\d+( received: )\d+( remote: )(?:127\.0.0\.1|::1)$} {\1SENT\2RECV\3LOCALIP} {^(project-id: )[0-9a-f]{40}$} {\1HASH} {^(server-id: )[0-9a-f]{40}$} {\1HASH} {^(admin-user: uvtester \(password is ").*("\))$} {\1PASSWORD\2} {^(repository: ).*?/uvtest_\d+_\d+/(uvrepo.fossil)$} {\1/TMP/uvtest_SEC_SEQ/\2} {^(local-root: ).*?/uvtest_\d+_\d+/$} {\1/TMP/uvtest_SEC_SEQ/} {^(project-code: )[0-9a-f]{40}$} {\1HASH} } dict set tests "utf" { {^(fossil test-looks-like-utf) (?:[A-Z]:)?/.*?/([^/\\]*?)\}?$} {\1 /TMP/test/\2} {^(File ")(?:[A-Z]:)?/.*?/(utf-check-\d+-\d+-\d+-\d+.jnk" has \d+ bytes\.)$} {\1/TMP/\2} } dict set tests "wiki" { {^(fossil (?:attachment|wiki) .*--technote )[0-9a-f]{21}$} {\1HASH} {^(fossil (?:attachment|wiki) .* (?:a13|f15|fa) --technote )[0-9a-f]+$} {\1ID} {^[0-9a-f]{40}( YYYY-mm-dd HH:MM:SS)} {HASH\1} {(\] Add attachment \[/artifact/)[0-9a-f]{16}(|)} {\1HASH\2} { (to tech note \[/technote/)[0-9a-f]{16}\|[0-9a-f]{10}(\] \(user:)} {\1HASH1|HASH2\2} {^(ambiguous tech note id: )[0-9a-f]+$} {\1ID} {^(Attached fa to tech note )[0-9a-f]{21}(?:[0-9a-f]{19})?\.$} {\1HASH.} {^(Date:) [A-Z][a-z]{2}, \d\d? [A-Z][a-z]{2} \d{4} \d\d:\d\d:\d\d [-+]\d{4}$} {\1 Day, dd Mon YYYY HH:MM:SS TZ} {(Content-Security-Policy.*'nonce-)[0-9a-f]{48}(';)} {\1NONCE\2} {^(<link rel="stylesheet" href="/style.css\?id=)[0-9a-f]+(" type="text/css">)$} {\1ID\2} {^(added by )[^ ]*( on)$} {\1USER\2} {^(<script nonce=['\"])[0-9a-f]{48}(['\"]>/\* [a-z]+\.c:)\d+} {\1NONCE\2LINENO} {^(<script nonce=['\"])[0-9a-f]{48}(['\"]>)$} {\1NONCE\2} {^(projectCode: ")[0-9a-f]{40}(",)$} {\1HASH\2} {^\d+\.\d+(s by)$} {N.SUB\1} {^(window\.fossil.version = ")\d+\.\d+ \[[0-9a-f]{10}\] (YYYY-mm-dd HH:MM:SS(?: UTC";)?)$} {\1N.M [HASH] \2} {^(Fossil) \d+\.\d+ \[[0-9a-f]{10}\]( YYYY-mm-dd HH:MM:SS)$} {\1 N.M [HASH]\2} {^(type: Wiki-edit by ).+?( on YYYY-mm-dd HH:MM:SS)$$} {\1USER\2} {^(size: )\d+( bytes)$} {\1N\2} {^U [^ ]+$} {U USER} {^Z [0-9a-f]{32}$} {Z CHECKSUM} } # # Some pattersn are used in multiple groups # set testnames {"th1" "th1-docs" "th1-hooks"} set pat {^((?:ERROR \(1\): )?/[*]{5} Subprocess) \d+ (exit)} set sub {\1 PID \2} foreach testname $testnames { dict lappend tests $testname $pat $sub } set testnames {"th1-docs" "th1-hooks"} set pat {(?:[A-Z]:)?/.*?/(test-http-(?:in|out))-\d+-\d+-\d+(\.txt)} set sub {/TMP/\1-PID-SEQ-SEC\2} foreach testname $testnames { dict lappend tests $testname $pat $sub } set testnames {"json" "th1" "wiki"} set pat {^(Content-Length:) \d+$} set sub {\1 LENGTH} foreach testname $testnames { dict lappend tests $testname $pat $sub } set testnames {"th1" "wiki"} set pat {^\d+\.\d+(s by)$} set sub {N.SUB\1} foreach testname $testnames { dict lappend tests $testname $pat $sub } # # Main # if { $fname eq "-" } { set fd stdin } else { set fd [open $fname r] } # Platforms we detect set UNKOWN_PLATFORM 0 set UNIX 1 set WINDOWS 2 set CYGWIN 3 # One specific wiki test creates repetitive output of varying length set wiki_f13_cmd1 "fossil wiki create {timestamp of 2399999} f13 --technote 2399999" set wiki_f13_cmd2 "fossil wiki list --technote --show-technote-ids" set wiki_f13_cmd3 "fossil wiki export a13 --technote ID" set collecting_f3 0 set collecting_f3_verbose 0 # Collected lines for summaries in --extra mode set amend_ed_lines [list] set amend_ed_failed 0 set symlinks_lines [list] set symlinks_failed 0 set test_simplify_name_lines [list] set test_simplify_name_failed 0 # State information s we progress set check_json_empty_line 0 set lineno 0 set platform $UNKOWN_PLATFORM set prev_line "" set testname "" while { [gets $fd line] >= 0 } { incr lineno if { $lineno == 1 } { if { [string index $line 0] in {"\UFFEF" "\UFEFF"} } { set line [string range $line 1 end] } } # Remove RESULT status while matching (inserted again in output). # If collecting lines of output, include $result_prefix as needed. regexp {^(RESULT \([01]\): )?(.*)} $line match result_prefix line if { [regsub {^\*{5} ([^ ]+) \*{6}$} $line {\1} new_testname] } { # Pick up test name for special handling below set testname "$new_testname" } elseif { [regexp {^\*{5} End of } $line] } { # Test done. Handle --extra before resetting. if { $EXTRA } { if { $testname eq "symlinks" } { if { $symlinks_failed } { foreach l $symlinks_lines { puts "$l" } } else { puts "All symlinks tests OK (not run on Windows)" } } regsub {(: )\d+( errors so far)} $line {\1N\2} line } set testname "" } elseif { $testname ne "" } { if { $platform == $UNKOWN_PLATFORM } { if { [regexp {^[A-Z]:/.*?/fossil\.exe } $line] } { set platform $WINDOWS } elseif { [regexp {^/.*?/fossil\.exe } $line] } { # No drive, but still .exe - must be CYGWIN set platform $CYGWIN } elseif { [regexp {^/.*?/fossil } $line] } { set platform $UNIX } } # Do common and per testname rewrites set line [common_rewrites $line $testname] if { [dict exists $tests $testname] } { foreach {pat sub} [dict get $tests $testname] { regsub $pat $line $sub line } } # On Windows, HTTP headers may get printed with an extra newline if { $testname eq "json" } { if { $check_json_empty_line == 1 } { if { "$result_prefix$line" eq "" } { set check_json_empty_line 2 continue } set check_json_empty_line 0 } elseif { [regexp {^(?:$|GET |POST |[A-Z][A-Za-z]*(?:-[A-Z][A-Za-z]*)*: )} $line] } { set check_json_empty_line 1 } else { if { $check_json_empty_line == 2 } { # The empty line we skipped was meant to be followed by a new # HTTP header or empty line, but it was not. puts "" } set check_json_empty_line 0 } } # Summarise repetitive output of varying length for f13 in wiki test if { $testname eq "wiki" } { if { $collecting_f3 == 2 } { if { $collecting_f3_verbose == 1 && [regexp {^HASH } $line] } { incr collecting_f3_verbose } elseif { $line eq $wiki_f13_cmd3 } { incr collecting_f3 puts "\[...\]" } else { continue } } elseif { $collecting_f3 == 1 } { if { $line eq $wiki_f13_cmd2 } { incr collecting_f3 } elseif { $collecting_f3_verbose == 0 } { incr collecting_f3_verbose } } elseif { $line eq $wiki_f13_cmd1 } { incr collecting_f3 } } if { $EXTRA } { if { $line eq "ERROR (0): " && $platform == $WINDOWS } { if { [string match "fossil http --in *" $prev_line] } { continue } } if { $testname eq "amend" } { # The amend-comment-5.N tests are not run on Windows if { $line eq "fossil amend {} -close" } { if { $amend_ed_failed } { foreach l $amend_ed_lines { puts "$l" } } else { puts "All amend tests based on ed -s OK (not run on Windows)" } set amend_ed_lines [list] } elseif { [llength $amend_ed_lines] } { if { [regexp {^test amend-comment-5\.\d+ (.*)} $line match status] } { lappend amend_ed_lines "$result_prefix$line" if { $status ne "OK" } { incr amend_ed_failed } continue } elseif { [string range $line 0 4] eq "test " } { # Handle change in tests by simply emitting what we got foreach l $amend_ed_lines { puts "$l" } set amend_ed_lines [list] } else { lappend amend_ed_lines "$result_prefix$line" continue } } elseif { $line eq "fossil settings editor {ed -s}" } { lappend amend_ed_lines "$result_prefix$line" continue } } elseif { $testname eq "cmdline" } { if { [regexp {^(fossil test-echo) (.*)} $line match test args] } { if { ($platform == $UNIX && $args in {"*" "*.*"}) || ($platform == $WINDOWS && $args eq "--args /TMP/fossil-cmd-line-101.txt") || ($platform == $CYGWIN && $args in {"*" "*.*"}) } { set line "$test ARG_FOR_PLATFORM" } } } elseif { $testname eq "commit-warning" } { if { [regexp {^(micro-smile|pale facepalm) .*} $line match desc] } { set line "$desc PLATFORM_SPECIFIC_BYTES" } } elseif { $testname eq "file1" } { # test-simplify-name with question marks is specific to Windows # They all immediately preceed "fossil test-relative-name --chdir . ." if { $line eq "fossil test-relative-name --chdir . ." } { if { $test_simplify_name_failed } { foreach l $test_simplify_name_lines { puts "$l" } } else { puts "ALL Windows specific test-relative-name tests OK (if on Windows)" } set test_simplify_name_lines [list] } elseif { [regexp {^fossil test-simplify-name .*([/\\])\?\1} $line] } { lappend test_simplify_name_lines $line continue } elseif { [llength $test_simplify_name_lines] } { if { [regexp {^test simplify-name-\d+ (.*)} $line match status] } { if { $status ne "OK" } { incr test_simplify_name_failed } } lappend test_simplify_name_lines "$result_prefix$line" continue } } elseif { $testname eq "settings-repo" } { if { [regexp {^fossil test-th-eval (?:--open-config )?\{setting case-sensitive\}$} $prev_line] } { if { ($platform == $UNIX && $line eq "on") || ($platform == $WINDOWS && $line eq "off") || ($platform == $CYGWIN && $line eq "off") } { set line "EXPECTED_FOR_PLATFORM" } } } elseif { $testname eq "symlinks" } { # Collect all lines and post-process at the end lappend symlinks_lines "$result_prefix$line" if { [regexp {^test symlinks-[^ ]* (.*)} $line match status] } { if { $status ne "OK" } { #TODO: incr symlinks_failed } } continue } elseif { $testname in {"th1" "th1-docs" "th1-hooks"} } { # Special case that spans a couple of tests # "Subprocess PID exit(0)" is sent on stderr on Unix. On Windows, there is no output if { [regexp {^(ERROR \(1\): )?/\*{5} Subprocess PID exit\(0\) \*{5}/$} $line match prefix] } { if { $prefix eq "" } { continue } elseif { $prefix eq "ERROR (1): " } { set line "RESULT (0): " } } elseif { $testname eq "th1" } { if { [regexp {^fossil test-th-eval --vfs ([^ ]+) \{globalState vfs\}$} $line match vfs] } { if { ($platform == $UNIX && $vfs == "unix-dotfile") || ($platform == $WINDOWS && $vfs == "win32-longpath") || ($platform == $CYGWIN && $vfs == "win32-longpath") } { regsub $vfs $line {EXEPECTED_VFS} line } } elseif { $prev_line eq "fossil test-th-eval --vfs EXEPECTED_VFS {globalState vfs}" } { # Replace $vfs from previous line regsub "^$vfs\$" $line {EXEPECTED_VFS} line } elseif { $prev_line eq "fossil test-th-eval {set tcl_platform(platform)}" } { if { $platform == $UNIX } { regsub {^unix$} $line {EXPECTED_PLATFORM} line } elseif { $platform == $WINDOWS } { regsub {^windows$} $line {EXPECTED_PLATFORM} line } elseif { $platform == $CYGWIN } { regsub {^unix$} $line {EXPECTED_PLATFORM} line } } elseif { [string match "fossil test-th-eval --th-trace *" $prev_line] } { if { ($result_prefix eq "RESULT (1): " && $line eq "") || ($result_prefix eq "" && $line eq "ERROR (0): ") } { set result_prefix "" set line "RESULT (0): / ERROR (1): " } } } elseif { $testname eq "th1-docs" } { # In th1-docs, the fossil check-out is exposed in various states. regsub {(^project-code:) CE59BB9F186226D80E49D1FA2DB29F935CCA0333} $line {\1 HASH} line if { [regexp {^merged-from: HASH YYYY-mm-dd HH:MM:SS UTC$} $line] } { continue } } } } } elseif { $EXTRA } { # Fix up summaries to be generic and easy to diff(1) if { [regsub {(^\*{5} (Final|Ignored) results: )\d+} $line {\1N} line] } { regsub {\d+} $line {N} line } elseif { [regexp {^(\*{5} (?:Considered failure|Ignored failure|Skipped test))s: (.*)} $line match desc vals] } { if { $vals ne ""} { foreach val [split $vals " "] { puts "$desc: $val" } continue } } } # Not exactly correct if we continue'd, but OK for the purpose set prev_line "$result_prefix$line" puts "$prev_line" } |
Changes to test/set-manifest.test.
︙ | ︙ | |||
44 45 46 47 48 49 50 | test_setup #### Verify classic behavior of the manifest setting # Setting is off by default, and there are no extra files. fossil settings manifest test "set-manifest-1" {[regexp {^manifest *$} $RESULT]} | | | | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | test_setup #### Verify classic behavior of the manifest setting # Setting is off by default, and there are no extra files. fossil settings manifest test "set-manifest-1" {[regexp {^manifest *$} $RESULT]} set filelist [lsort [glob -nocomplain manifest*]] test "set-manifest-1-n" {[llength $filelist] == 0} # Classic behavior: TRUE value creates manifest and manifest.uuid set truths [list true on 1] foreach v $truths { fossil settings manifest $v test "set-manifest-2-$v" {$RESULT eq ""} fossil settings manifest test "set-manifest-2-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} set filelist [lsort [glob manifest*]] test "set-manifest-2-$v-n" {[llength $filelist] == 2} foreach f $filelist { test "set-manifest-2-$v-f-$f" {[file isfile $f]} } } # ... and manifest.uuid is the checkout's hash |
︙ | ︙ | |||
86 87 88 89 90 91 92 | # Classic behavior: FALSE value removes manifest and manifest.uuid set falses [list false off 0] foreach v $falses { fossil settings manifest $v test "set-manifest-3-$v" {$RESULT eq ""} fossil settings manifest test "set-manifest-3-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} | | | | | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | # Classic behavior: FALSE value removes manifest and manifest.uuid set falses [list false off 0] foreach v $falses { fossil settings manifest $v test "set-manifest-3-$v" {$RESULT eq ""} fossil settings manifest test "set-manifest-3-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} set filelist [lsort [glob -nocomplain manifest*]] test "set-manifest-3-$v-n" {[llength $filelist] == 0} } # Classic behavior: unset removes manifest and manifest.uuid fossil unset manifest test "set-manifest-4" {$RESULT eq ""} fossil settings manifest test "set-manifest-4-a" {[regexp {^manifest *$} $RESULT]} set filelist [lsort [glob -nocomplain manifest*]] test "set-manifest-4-n" {[llength $filelist] == 0} ##### Tags Manifest feature extends the manifest setting # Manifest Tags: use letters r, u, and t to select each of manifest, # manifest.uuid, and manifest.tags files. set truths [list r u t ru ut rt rut] foreach v $truths { fossil settings manifest $v test "set-manifest-5-$v" {$RESULT eq ""} fossil settings manifest test "set-manifest-5-$v-a" {[regexp "^manifest\\s+\\(local\\)\\s+$v\\s*$" $RESULT]} set filelist [lsort [glob manifest*]] test "set-manifest-5-$v-n" {[llength $filelist] == [string length $v]} foreach f $filelist { test "set-manifest-5-$v-f-$f" {[file isfile $f]} } } # Quick check for tags applied in trunk |
︙ | ︙ |
Changes to test/settings-repo.test.
︙ | ︙ | |||
38 39 40 41 42 43 44 | set all_settings [get_all_settings] foreach name $all_settings { # # HACK: Make 100% sure that there are no non-default setting values # present anywhere. # | > > > | > | | | | | | | | | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | set all_settings [get_all_settings] foreach name $all_settings { # # HACK: Make 100% sure that there are no non-default setting values # present anywhere. # if {$name eq "manifest"} { fossil unset $name --exact --global -expectError } else { fossil unset $name --exact --global } fossil unset $name --exact # # NOTE: Query for the hard-coded default value of this setting and # save it. # fossil test-th-eval "setting $name" set defaults($name) [normalize_result] } ############################################################################### fossil settings bad-setting some_value -expectError test settings-set-bad-local { [normalize_result] eq "no such setting: bad-setting" } fossil settings bad-setting some_value --global -expectError test settings-set-bad-global { [normalize_result] eq "no such setting: bad-setting" } ############################################################################### fossil unset bad-setting -expectError test settings-unset-bad-local { [normalize_result] eq "no such setting: bad-setting" } fossil unset bad-setting --global -expectError test settings-unset-bad-global { [normalize_result] eq "no such setting: bad-setting" } ############################################################################### fossil settings ssl some_value -expectError test settings-set-ambiguous-local { [normalize_result] eq "ambiguous setting \"ssl\" - might be: ssl-ca-location ssl-identity" } fossil settings ssl some_value --global -expectError test settings-set-ambiguous-global { [normalize_result] eq "ambiguous setting \"ssl\" - might be: ssl-ca-location ssl-identity" } ############################################################################### fossil unset ssl -expectError test settings-unset-ambiguous-local { [normalize_result] eq "ambiguous setting \"ssl\" - might be: ssl-ca-location ssl-identity" } fossil unset ssl --global -expectError test settings-unset-ambiguous-global { [normalize_result] eq "ambiguous setting \"ssl\" - might be: ssl-ca-location ssl-identity" } ############################################################################### |
︙ | ︙ |
Changes to test/settings.test.
︙ | ︙ | |||
90 91 92 93 94 95 96 | set data [normalize_result] test settings-query-local-$name { [regexp -- [string map [list %name% $name] $pattern(1)] $data] || [regexp -- [string map [list %name% $name] $pattern(2)] $data] } | > > > | > | | | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | set data [normalize_result] test settings-query-local-$name { [regexp -- [string map [list %name% $name] $pattern(1)] $data] || [regexp -- [string map [list %name% $name] $pattern(2)] $data] } if {$name eq "manifest"} { fossil settings $name --exact --global -expectError } else { fossil settings $name --exact --global } set data [normalize_result] if {$name eq "manifest"} { test settings-query-global-$name { $data eq "cannot set 'manifest' globally" } } else { test settings-query-global-$name { [regexp -- [string map [list %name% $name] $pattern(1)] $data] || [regexp -- [string map [list %name% $name] $pattern(2)] $data] } } } ############################################################################### fossil settings bad-setting -expectError test settings-query-bad-local { [normalize_result] eq "no such setting: bad-setting" } fossil settings bad-setting --global -expectError test settings-query-bad-global { [normalize_result] eq "no such setting: bad-setting" } ############################################################################### test_cleanup |
Changes to test/stash.test.
︙ | ︙ | |||
204 205 206 207 208 209 210 | # 64 bit intel, 8-byte pointer, 4-byte integer # Stashed renamed file said: # fossil: ./src/delta.c:231: checksum: Assertion '...' failed. # Should be triggered by this stash-WY-1 test. fossil checkout --force c1 fossil clean fossil mv --soft f1 f1new | | | 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | # 64 bit intel, 8-byte pointer, 4-byte integer # Stashed renamed file said: # fossil: ./src/delta.c:231: checksum: Assertion '...' failed. # Should be triggered by this stash-WY-1 test. fossil checkout --force c1 fossil clean fossil mv --soft f1 f1new stash-test WY-1 {-expectError save -m "Reported 2016-02-09"} { REVERT f1 DELETE f1new } -changes { } -addremove { } -exists {f1 f2 f3} -notexists {f1new} -knownbugs {-code -result} # TODO: add tests that verify the saved stash is sensible. Possibly # by applying it and checking results. But until the SQLITE_CONSTRAINT |
︙ | ︙ |
Changes to test/symlinks.test.
︙ | ︙ | |||
21 22 23 24 25 26 27 | set path [file dirname [info script]] if {$is_windows} { puts "Symlinks are not supported on Windows." test_cleanup_then_return } | < < < < < < < | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | set path [file dirname [info script]] if {$is_windows} { puts "Symlinks are not supported on Windows." test_cleanup_then_return } require_no_open_checkout ############################################################################### test_setup; set rootDir [file normalize [pwd]] # Using tempHomePath, allow-symlinks will always be off at this point. |
︙ | ︙ | |||
66 67 68 69 70 71 72 | test symlinks-dir-3 {[file exists [file join $rootDir subdirA f2.txt]] eq 1} test symlinks-dir-4 {[file exists [file join $rootDir symdirA f2.txt]] eq 1} fossil add [file join $rootDir symdirA f1.txt] test symlinks-skip-dir-traversal {[normalize_result] eq \ "SKIP symdirA/f1.txt"} | | < < < | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | test symlinks-dir-3 {[file exists [file join $rootDir subdirA f2.txt]] eq 1} test symlinks-dir-4 {[file exists [file join $rootDir symdirA f2.txt]] eq 1} fossil add [file join $rootDir symdirA f1.txt] test symlinks-skip-dir-traversal {[normalize_result] eq \ "SKIP symdirA/f1.txt"} fossil commit -m "c1" -expectError test symlinks-empty-commit {[normalize_result] eq \ "nothing has changed; use --allow-empty to override"} ############################################################################### fossil ls test symlinks-dir-5 {[normalize_result] eq ""} ############################################################################### fossil extras test symlinks-dir-6 {[normalize_result] eq \ "subdirA/f1.txt\nsubdirA/f2.txt\nsymdirA"} ############################################################################### fossil close |
︙ | ︙ |
Changes to test/tester.tcl.
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package require Tcl 8.6 set testfiledir [file normalize [file dirname [info script]]] set testrundir [pwd] set testdir [file normalize [file dirname $argv0]] set fossilexe [file normalize [lindex $argv 0]] set is_windows [expr {$::tcl_platform(platform) eq "windows"}] if {$::is_windows} { if {[string length [file extension $fossilexe]] == 0} { append fossilexe .exe } set outside_fossil_repo [expr ![file exists "$::testfiledir\\..\\_FOSSIL_"]] } else { | > | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package require Tcl 8.6 set testfiledir [file normalize [file dirname [info script]]] set testrundir [pwd] set testdir [file normalize [file dirname $argv0]] set fossilexe [file normalize [lindex $argv 0]] set is_windows [expr {$::tcl_platform(platform) eq "windows"}] set is_cygwin [regexp {^CYGWIN} $::tcl_platform(os)] if {$::is_windows} { if {[string length [file extension $fossilexe]] == 0} { append fossilexe .exe } set outside_fossil_repo [expr ![file exists "$::testfiledir\\..\\_FOSSIL_"]] } else { |
︙ | ︙ | |||
445 446 447 448 449 450 451 452 453 454 455 456 457 458 | proc require_no_open_checkout {} { if {[info exists ::env(FOSSIL_TEST_DANGEROUS_IGNORE_OPEN_CHECKOUT)] && \ $::env(FOSSIL_TEST_DANGEROUS_IGNORE_OPEN_CHECKOUT) eq "YES_DO_IT"} { return } catch {exec $::fossilexe info} res if {[regexp {local-root:} $res]} { set projectName <unknown> set localRoot <unknown> regexp -line -- {^project-name: (.*)$} $res dummy projectName set projectName [string trim $projectName] regexp -line -- {^local-root: (.*)$} $res dummy localRoot set localRoot [string trim $localRoot] error "Detected an open checkout of project \"$projectName\",\ | > > | 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 | proc require_no_open_checkout {} { if {[info exists ::env(FOSSIL_TEST_DANGEROUS_IGNORE_OPEN_CHECKOUT)] && \ $::env(FOSSIL_TEST_DANGEROUS_IGNORE_OPEN_CHECKOUT) eq "YES_DO_IT"} { return } catch {exec $::fossilexe info} res if {[regexp {local-root:} $res]} { global skipped_tests testfile lappend skipped_tests $testfile set projectName <unknown> set localRoot <unknown> regexp -line -- {^project-name: (.*)$} $res dummy projectName set projectName [string trim $projectName] regexp -line -- {^local-root: (.*)$} $res dummy localRoot set localRoot [string trim $localRoot] error "Detected an open checkout of project \"$projectName\",\ |
︙ | ︙ | |||
482 483 484 485 486 487 488 489 490 491 492 493 | } after [expr {$try * 100}] } error "Could not delete \"$path\", error: $error" } proc test_cleanup_then_return {} { uplevel 1 [list test_cleanup] return -code return } proc test_cleanup {} { | > > | > > > > | 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 | } after [expr {$try * 100}] } error "Could not delete \"$path\", error: $error" } proc test_cleanup_then_return {} { global skipped_tests testfile lappend skipped_tests $testfile uplevel 1 [list test_cleanup] return -code return } proc test_cleanup {} { if {$::KEEP} { # To avoid errors with require_no_open_checkout, cd out of here. if {[info exists ::tempSavedPwd]} {cd $::tempSavedPwd; unset ::tempSavedPwd} return } if {![info exists ::tempRepoPath]} {return} if {![file exists $::tempRepoPath]} {return} if {![file isdirectory $::tempRepoPath]} {return} set tempPathEnd [expr {[string length $::tempPath] - 1}] if {[string length $::tempPath] == 0 || \ [string range $::tempRepoPath 0 $tempPathEnd] ne $::tempPath} { error "Temporary repository path has wrong parent during cleanup." |
︙ | ︙ | |||
516 517 518 519 520 521 522 | # Finally, attempt to gracefully delete the temporary home directory, # unless forbidden by external forces. if {![info exists ::tempKeepHome]} {delete_temporary_home} } proc delete_temporary_home {} { if {$::KEEP} {return}; # All cleanup disabled? | | | 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 | # Finally, attempt to gracefully delete the temporary home directory, # unless forbidden by external forces. if {![info exists ::tempKeepHome]} {delete_temporary_home} } proc delete_temporary_home {} { if {$::KEEP} {return}; # All cleanup disabled? if {$::is_windows || $::is_cygwin} { robust_delete [file join $::tempHomePath _fossil] } else { robust_delete [file join $::tempHomePath .fossil] } robust_delete $::tempHomePath } |
︙ | ︙ | |||
843 844 845 846 847 848 849 850 851 852 853 854 855 856 | lappend bad_test $name if {$::HALT} {exit 1} } } } set bad_test {} set ignored_test {} # Return a random string N characters long. # set vocabulary 01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" append vocabulary " ()*^!.eeeeeeeeaaaaattiioo " set nvocabulary [string length $vocabulary] proc rand_str {N} { | > | 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 | lappend bad_test $name if {$::HALT} {exit 1} } } } set bad_test {} set ignored_test {} set skipped_tests {} # Return a random string N characters long. # set vocabulary 01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" append vocabulary " ()*^!.eeeeeeeeaaaaattiioo " set nvocabulary [string length $vocabulary] proc rand_str {N} { |
︙ | ︙ | |||
1007 1008 1009 1010 1011 1012 1013 | set inFileName [file join $::tempPath [appendArgs test-http-in- $suffix]] set outFileName [file join $::tempPath [appendArgs test-http-out- $suffix]] set data [subst [read_file $dataFileName]] write_file $inFileName $data fossil http --in $inFileName --out $outFileName --ipaddr 127.0.0.1 \ | | | 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 | set inFileName [file join $::tempPath [appendArgs test-http-in- $suffix]] set outFileName [file join $::tempPath [appendArgs test-http-out- $suffix]] set data [subst [read_file $dataFileName]] write_file $inFileName $data fossil http --in $inFileName --out $outFileName --ipaddr 127.0.0.1 \ $repository --localauth --th-trace -expectError set result [expr {[file exists $outFileName] ? [read_file $outFileName] : ""}] if {1} { catch {file delete $inFileName} catch {file delete $outFileName} } |
︙ | ︙ | |||
1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 | error "Could not make directory \"$tempHomePath\",\ please set TEMP variable in environment, error: $error" } protInit $fossilexe set ::tempKeepHome 1 foreach testfile $argv { protOut "***** $testfile ******" if { [catch {source $testdir/$testfile.test} testerror testopts] } { test test-framework-$testfile 0 protOut "!!!!! $testfile: $testerror" protOutDict $testopts" } else { test test-framework-$testfile 1 } protOut "***** End of $testfile: [llength $bad_test] errors so far ******" } unset ::tempKeepHome; delete_temporary_home # Clean up the file descriptor close $possibly_fd0 set nErr [llength $bad_test] if {$nErr>0 || !$::QUIET} { protOut "***** Final results: $nErr errors out of $test_count tests" 1 } if {$nErr>0} { protOut "***** Considered failures: $bad_test" 1 } set nErr [llength $ignored_test] if {$nErr>0 || !$::QUIET} { protOut "***** Ignored results: $nErr ignored errors out of $test_count tests" 1 } if {$nErr>0} { protOut "***** Ignored failures: $ignored_test" 1 } | > > > > > > > > > > > > > | 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 | error "Could not make directory \"$tempHomePath\",\ please set TEMP variable in environment, error: $error" } protInit $fossilexe set ::tempKeepHome 1 # Start in tempHomePath to help avoid errors with require_no_open_checkout set startPwd [pwd] cd $tempHomePath foreach testfile $argv { protOut "***** $testfile ******" if { [catch {source $testdir/$testfile.test} testerror testopts] } { test test-framework-$testfile 0 protOut "!!!!! $testfile: $testerror" protOutDict $testopts" } else { test test-framework-$testfile 1 } protOut "***** End of $testfile: [llength $bad_test] errors so far ******" } cd $startPwd unset ::tempKeepHome; delete_temporary_home # Clean up the file descriptor close $possibly_fd0 set nErr [llength $bad_test] if {$nErr>0 || !$::QUIET} { protOut "***** Final results: $nErr errors out of $test_count tests" 1 } if {$nErr>0} { protOut "***** Considered failures: $bad_test" 1 } set nErr [llength $ignored_test] if {$nErr>0 || !$::QUIET} { protOut "***** Ignored results: $nErr ignored errors out of $test_count tests" 1 } if {$nErr>0} { protOut "***** Ignored failures: $ignored_test" 1 } set nSkipped [llength $skipped_tests] if {$nSkipped>0} { protOut "***** Skipped tests: $skipped_tests" 1 } if {$bad_test>0} { exit 1 } |
Changes to test/th1-docs.test.
︙ | ︙ | |||
28 29 30 31 32 33 34 | fossil test-th-eval "hasfeature tcl" if {[normalize_result] ne "1"} { puts "Fossil was not compiled with Tcl support." test_cleanup_then_return } | < < < < < < < < | < | < > > > > > > > > > < | | | < | | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | fossil test-th-eval "hasfeature tcl" if {[normalize_result] ne "1"} { puts "Fossil was not compiled with Tcl support." test_cleanup_then_return } ############################################################################### test_setup ############################################################################### set env(TH1_ENABLE_DOCS) 1; # TH1 docs must be enabled for this test. set env(TH1_ENABLE_TCL) 1; # Tcl integration must be enabled for this test. ############################################################################### set data [fossil info] regexp -line -- {^repository: (.*)$} $data dummy repository if {[string length $repository] == 0 || ![file exists $repository]} { error "unable to locate repository" } set dataFileName [file join $::testdir th1-docs-input.txt] set origFileStat [file join $::testdir fileStat.th1] if {![file exists $origFileStat]} { error "unable to locate [$origFileStat]" } file copy $origFileStat fileStat.th1 fossil add fileStat.th1 fossil commit -m "Add fileStat.th1" ############################################################################### set RESULT [test_fossil_http \ $repository $dataFileName /doc/trunk/fileStat.th1] test th1-docs-1a {[regexp {<title>Unnamed Fossil Project: fileStat.th1</title>} $RESULT]} test th1-docs-1b {[regexp {>\[[0-9a-f]{40,64}\]<} $RESULT]} test th1-docs-1c {[regexp { contains \d+ files\.} $RESULT]} ############################################################################### test_cleanup |
Changes to test/th1-hooks.test.
︙ | ︙ | |||
144 145 146 147 148 149 150 | test th1-cmd-hooks-1b {[normalize_result] eq \ {<h1><b>command_hook timeline</b></h1> +++ some stuff here +++ <h1><b>command_hook timeline command_notify timeline</b></h1>}} ############################################################################### | | | 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | test th1-cmd-hooks-1b {[normalize_result] eq \ {<h1><b>command_hook timeline</b></h1> +++ some stuff here +++ <h1><b>command_hook timeline command_notify timeline</b></h1>}} ############################################################################### fossil timeline custom3 -expectError; # NOTE: Bad "WHEN" argument. test th1-cmd-hooks-1c {[normalize_result] eq \ {<h1><b>command_hook timeline</b></h1> unknown check-in or invalid date: custom3}} ############################################################################### |
︙ | ︙ | |||
194 195 196 197 198 199 200 | fossil test3 test th1-custom-cmd-3a {[string trim $RESULT] eq \ {<h1><b>command_hook test3</b></h1>}} ############################################################################### | | | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | fossil test3 test th1-custom-cmd-3a {[string trim $RESULT] eq \ {<h1><b>command_hook test3</b></h1>}} ############################################################################### fossil test4 -expectError test th1-custom-cmd-4a {[first_data_line] eq \ {<h1><b>command_hook test4</b></h1>}} test th1-custom-cmd-4b {[regexp -- \ {: unknown command: test4$} [second_data_line]]} |
︙ | ︙ |
Changes to test/th1-tcl.test.
︙ | ︙ | |||
127 128 129 130 131 132 133 | requires Tcl 8.6 or higher.</p>}} ############################################################################### fossil test-th-render --open-config \ [file nativename [file join $path th1-tcl9.txt]] | > > > > > > > | | 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | requires Tcl 8.6 or higher.</p>}} ############################################################################### fossil test-th-render --open-config \ [file nativename [file join $path th1-tcl9.txt]] # Under cygwin, the printed name with Usage: strips the extension if { $::is_cygwin && [file extension $fossilexe] eq ".exe" } { set fossilexeref [string range $fossilexe 0 end-4] } else { set fossilexeref $fossilexe } test th1-tcl-9 {[string trim $RESULT] eq [list [file tail $fossilexeref] 3 \ [list test-th-render --open-config [file nativename [file join $path \ th1-tcl9.txt]]]]} ############################################################################### fossil test-th-eval "tclMakeSafe a" test th1-tcl-10 {[normalize_result] eq \ |
︙ | ︙ |
Changes to test/th1.test.
︙ | ︙ | |||
728 729 730 731 732 733 734 | ############################################################################### fossil test-th-eval "trace {}" test th1-trace-1 {$RESULT eq {}} ############################################################################### | | | 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 | ############################################################################### fossil test-th-eval "trace {}" test th1-trace-1 {$RESULT eq {}} ############################################################################### fossil test-th-eval --th-trace "trace {}" -expectError set normalized_result [normalize_result] regsub -- {\n/\*\*\*\*\* Subprocess \d+ exit\(\d+\) \*\*\*\*\*/} \ $normalized_result {} normalized_result if {$th1Hooks} { test th1-trace-2 {$normalized_result eq \ |
︙ | ︙ | |||
756 757 758 759 760 761 762 | ############################################################################### fossil test-th-eval "trace {this is a trace message.}" test th1-trace-3 {$RESULT eq {}} ############################################################################### | | | 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 | ############################################################################### fossil test-th-eval "trace {this is a trace message.}" test th1-trace-3 {$RESULT eq {}} ############################################################################### fossil test-th-eval --th-trace "trace {this is a trace message.}" -expectError set normalized_result [normalize_result] regsub -- {\n/\*\*\*\*\* Subprocess \d+ exit\(\d+\) \*\*\*\*\*/} \ $normalized_result {} normalized_result if {$th1Hooks} { test th1-trace-4 {$normalized_result eq \ |
︙ | ︙ | |||
1021 1022 1023 1024 1025 1026 1027 | ############################################################################### fossil test-th-eval "globalState vfs" test th1-globalState-14 {[string length $RESULT] == 0} ############################################################################### | | | 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 | ############################################################################### fossil test-th-eval "globalState vfs" test th1-globalState-14 {[string length $RESULT] == 0} ############################################################################### if {$is_windows || $is_cygwin} { set altVfs win32-longpath } else { set altVfs unix-dotfile } ############################################################################### |
︙ | ︙ |
Changes to test/unversioned.test.
︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | puts "The \"sha1\" package is not available." test_cleanup_then_return } require_no_open_checkout test_setup; set rootDir [file normalize [pwd]] fossil test-th-eval --open-config {repository} set repository [normalize_result] if {[string length $repository] == 0} { puts "Detection of the open repository file failed." test_cleanup_then_return } write_file unversioned1.txt "This is unversioned file #1." write_file unversioned2.txt " This is unversioned file #2. " write_file "unversioned space.txt" "\nThis is unversioned file #3.\n" write_file unversioned4.txt "This is unversioned file #4." write_file unversioned5.txt "This is unversioned file #5." set env(VISUAL) [appendArgs \ [info nameofexecutable] " " [file join $path fake-editor.tcl]] ############################################################################### | > > > > > > > > > > | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | puts "The \"sha1\" package is not available." test_cleanup_then_return } require_no_open_checkout test_setup; set rootDir [file normalize [pwd]] # Avoid delays from the backoffice. fossil set backoffice-disable 1 fossil test-th-eval --open-config {repository} set repository [normalize_result] if {[string length $repository] == 0} { puts "Detection of the open repository file failed." test_cleanup_then_return } write_file unversioned1.txt "This is unversioned file #1." write_file unversioned2.txt " This is unversioned file #2. " write_file "unversioned space.txt" "\nThis is unversioned file #3.\n" write_file unversioned4.txt "This is unversioned file #4." write_file unversioned5.txt "This is unversioned file #5." set env(VISUAL) [appendArgs \ [info nameofexecutable] " " [file join $path fake-editor.tcl]] ############################################################################### # Under cygwin, the printed name with Usage: strips the extension if { $::is_cygwin && [file extension $fossilexe] eq ".exe" } { set fossilexeref [string range $fossilexe 0 end-4] } else { set fossilexeref $fossilexe } fossil unversioned -expectError test unversioned-1 {[normalize_result] eq \ [string map [list %fossil% [file nativename $fossilexeref]] {Usage: %fossil%\ unversioned add|cat|edit|export|list|revert|remove|sync|touch}]} ############################################################################### fossil unversioned list test unversioned-2 {[normalize_result] eq {}} |
︙ | ︙ | |||
310 311 312 313 314 315 316 | fossil user new uvtester "Unversioned Test User" $password fossil user capabilities uvtester oy ############################################################################### foreach {pid port outTmpFile} [test_start_server $repository stopArg] {} | > | > > | > | | 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 | fossil user new uvtester "Unversioned Test User" $password fossil user capabilities uvtester oy ############################################################################### foreach {pid port outTmpFile} [test_start_server $repository stopArg] {} if {! $::QUIET} { puts [appendArgs "Started Fossil server, pid \"" $pid \" ", port \"" $port \".] } set remote [appendArgs http://uvtester: $password @localhost: $port /] ############################################################################### set clientDir [file join $tempPath [appendArgs \ uvtest_ [string trim [clock seconds] -] _ [getSeqNo]]] set savedPwd [pwd] file mkdir $clientDir; cd $clientDir if {! $::QUIET} { puts [appendArgs "Now in client directory \"" [pwd] \".] } write_file unversioned-client1.txt "This is unversioned client file #1." ############################################################################### fossil clone --save-http-password $remote uvrepo.fossil fossil open -f uvrepo.fossil ############################################################################### fossil unversioned list test unversioned-45 {[normalize_result] eq {}} |
︙ | ︙ | |||
424 425 426 427 428 429 430 | fossil close test unversioned-56 {[normalize_result] eq {}} ############################################################################### cd $savedPwd; unset savedPwd file delete -force $clientDir | > | > > | > | 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 | fossil close test unversioned-56 {[normalize_result] eq {}} ############################################################################### cd $savedPwd; unset savedPwd file delete -force $clientDir if {! $::QUIET} { puts [appendArgs "Now in server directory \"" [pwd] \".] } ############################################################################### set stopped [test_stop_server $stopArg $pid $outTmpFile] if {! $::QUIET} { puts [appendArgs \ [expr {$stopped ? "Stopped" : "Could not stop"}] \ " Fossil server, pid \"" $pid "\", using argument \"" \ $stopArg \".] } ############################################################################### fossil unversioned list test unversioned-57 {[regexp \ {^[0-9a-f]{12} \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} 35 35\ unversioned-client1\.txt |
︙ | ︙ |
Added test/update.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | # # Copyright (c) 2024 Preben Guldnerg <preben@guldberg.org> # # 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/ # ############################################################################ # # Tests for the "update" command. # # Track number of tests we have set up in test_update_setup. This helps ensure # that generated files are ordered in `fossil update --verbose` mode. set UPDATE_TEST 0 proc test_update_setup {desc} { global UPDATE_TEST incr UPDATE_TEST fossil revert fossil update return [format "test-%02u-%s.txt" $UPDATE_TEST $desc] } # The output is in file name order, so massage $RESULT to remove initial UNCHANGED # files. Only do this if we have the expected branch information. proc test_update {testname message changes {fossil_args ""}} { fossil update --verbose {*}$fossil_args if { [regsub {\n-{79}\nupdated-from: [0-9a-z]{40} .*} $::RESULT {} test_result ] } { regsub {^(?:UNCHANGED [-a-z0-9.]+\n)*} $test_result {} test_result } else { set test_result $::RESULT } test "update-message-$testname" {$message == $test_result} fossil changes test "update-changes-$testname" {$changes == $::RESULT} } # Use a sequence number for file content that is not important for the test. set UPDATE_SEQ_NO 0 proc write_seq_to_file {fname} { global UPDATE_SEQ_NO incr UPDATE_SEQ_NO write_file $fname "$UPDATE_SEQ_NO\n" } # Make sure we are not in an open repository and initialize new repository test_setup ############################################################################### fossil update --verbose test update-already-up-to-date { [regexp {^-{79}\ncheckout: .*\nchanges: +None. Already up-to-date$} $RESULT] } # Remaining tests are carried out in the order update_cmd() performs checks. # # Common approach for tests below: # 1. Set the testname # 2. Set the file name, done by calling update_setup # 3. Set message and changes, the expected message message and subsequent changes # 3. Optionally set up and commit a common base for the next steps # 4. Commit a change to the repository (new tip) # 5. Update to the previous version # 6. Make changes # 7. Call test_update to attempt and update to tip set testname "conflict-standard" set fname [test_update_setup $testname] set message "CONFLICT $fname" set changes "EDITED $fname" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" fossil up previous write_seq_to_file $fname fossil add $fname test_update $testname $message $changes -expectError set testname "add-overwrites" set fname [test_update_setup $testname] set message "ADD $fname - overwrites an unmanaged file, original copy backed up locally" set changes "" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" fossil up previous write_seq_to_file $fname test_update $testname $message $changes -expectError set testname "add-standard" set fname [test_update_setup $testname] set message "ADD $fname" set changes "" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" fossil up previous test_update $testname $message $changes set testname "update-change" set fname [test_update_setup $testname] set message "UPDATE $fname - change to unmanaged file" set changes "DELETED $fname" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" write_seq_to_file $fname fossil commit -m "Update $fname" fossil up previous fossil rm --hard $fname test_update $testname $message $changes set testname "update-standard" set fname [test_update_setup $testname] set message "UPDATE $fname" set changes "" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" write_seq_to_file $fname fossil commit -m "Update $testname" fossil up previous test_update $testname $message $changes set testname "update-missing" set fname [test_update_setup $testname] set message "UPDATE $fname" set changes "" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" write_seq_to_file $fname fossil commit -m "Update $fname" fossil up previous file delete $fname test_update $testname $message $changes set testname "conflict-deleted" set fname [test_update_setup $testname] set message "CONFLICT $fname - edited locally but deleted by update" set changes "" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" fossil rm --hard $fname fossil commit -m "Remove $fname" fossil up previous file delete $fname test_update $testname $message $changes -expectError set testname "remove" set fname [test_update_setup $testname] set message "REMOVE $fname" set changes "" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" fossil rm --hard $fname fossil commit -m "Remove $fname" fossil up previous test_update $testname $message $changes set testname "merge-renamed" set fname [test_update_setup $testname] set message "MERGE $fname -> $fname.renamed" set changes "EDITED $fname.renamed" write_file $fname "center\n" fossil add $fname fossil commit -m "Add $fname" write_file $fname "top\ncenter\n" fossil mv --hard $fname "$fname.renamed" fossil commit -m "Update and rename $fname" fossil up previous write_file $fname "center\nbelow\n" test_update $testname $message $changes set testname "merge-standard" set fname [test_update_setup $testname] set message "MERGE $fname" set changes "EDITED $fname" write_file $fname "center\n" fossil add $fname fossil commit -m "Add $fname" write_file $fname "top\ncenter\n" fossil commit -m "Update $fname" fossil up previous write_file $fname "center\nbelow\n" test_update $testname $message $changes # TODO: test for "Cannot merge symlink" would be platform dependent set testname "merge-conflict" set fname [test_update_setup $testname] set message "MERGE $fname\n***** 1 merge conflicts in $fname" set changes "CONFLICT $fname" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" write_seq_to_file $fname fossil commit -m "Update $fname" fossil up previous write_seq_to_file $fname test_update $testname $message $changes -expectError # TODO: test for "Cannot merge binary file"? set testname "edited" set fname [test_update_setup $testname] set message "EDITED $fname\nADD $fname.other" set changes "EDITED $fname" write_seq_to_file $fname fossil add $fname fossil commit -m "Add $fname" write_seq_to_file "$fname.other" fossil add $fname.other fossil commit -m "Add $fname.other" fossil up previous write_seq_to_file $fname test_update $testname $message $changes set testname "unchanged" set fname [test_update_setup $testname] set message "ADD $fname\nUNCHANGED $fname.unchanged" set changes "" write_seq_to_file "$fname.unchanged" fossil add "$fname.unchanged" fossil commit -m "Add $fname.unchanged" write_seq_to_file "$fname" fossil add "$fname" fossil commit -m "Add $fname" fossil up previous test_update $testname $message $changes ############################################################################### test_cleanup |