Artifact 7c20e28f641dbb3ab991fa85f20abed0ff7e20d4:
- File test/revert.test — part of check-in [1a5ac30583] at 2013-01-26 08:26:31 on branch trunk — Fix revert tests 5 and 6 so they aren't carbon copies. Minor comment cleanup (user: joel size: 3468) [more...]
# # Tests for 'fossil revert' # # catch {exec $::fossilexe info} res puts res=$res if {![regexp {use --repository} $res]} { puts stderr "Cannot run this test within an open checkout" return } # Fossil will write data on $HOME, running 'fossil new' here. # We need not to clutter the $HOME of the test caller. # set env(HOME) [pwd] # Normalize file status lists (like those returned by 'fossil changes') # so they can be compared using simple string comparison # proc normalize-status-list {list} { set normalized [list] set matches [regexp -all -inline -line {^\s*([A-Z]+)\s+(.*)$} $list] foreach {_ status file} $matches { lappend normalized [list $status [string trim $file]] } set normalized [lsort -index 1 $normalized] return $normalized } # Test 'fossil revert' against expected results from 'fossil changes' and # 'fossil addremove --test', as well as by verifying the existence of files # on the file system. 'fossil undo' is called after each test # proc revert-test {testid args} { global RESULT set passed 1 if {[llength $args] % 2} { set revertArgs [lindex $args 0] set args [lrange $args 1 end] } else { set revertArgs {} } set args [dict merge { -changes {} -addremove {} -exists {} -notexists {} } $args] fossil revert {*}$revertArgs set statusListTests [list -changes changes -addremove {addremove --test}] foreach {key fossilArgs} $statusListTests { set expected [normalize-status-list [dict get $args $key]] set result [normalize-status-list [fossil {*}$fossilArgs]] if {$result ne $expected} { set passed 0 protOut " Expected:\n [join $expected "\n "]" protOut " Got:\n [join $result "\n "]" } } set fileExistsTests [list -exists 1 does -notexists 0 should] foreach {key expected verb} $fileExistsTests { foreach path [dict get $args $key] { if {[file exists $path] != $expected} { set passed 0 protOut " Failure: File $verb not exist: $path" } } } fossil undo test revert-$testid $passed } # Create the repo # fossil new rep.fossil fossil open rep.fossil # Prepare first commit # write_file f1 "f1" write_file f2 "f2" write_file f3 "f3" fossil add f1 f2 f3 fossil commit -m "c1" # Make changes to be reverted # # Add f0 write_file f0 "f0" fossil add f0 # Remove f1 exec rm f1 fossil rm f1 # Edit f2 write_file f2 "f2.1" # Rename f3 to f3n exec mv f3 f3n fossil mv f3 f3n # Test 'fossil revert' with no arguments # revert-test 1 -addremove { ADDED f0 } -exists {f0 f1 f2 f3} -notexists f3n # Test with a single filename argument # revert-test 2 f0 -changes { DELETED f1 EDITED f2 RENAMED f3n } -addremove { ADDED f0 } -exists {f0 f2 f3n} -notexists f3 revert-test 3 f1 -changes { ADDED f0 EDITED f2 RENAMED f3n } -exists {f0 f1 f2 f3n} -notexists f3 revert-test 4 f2 -changes { ADDED f0 DELETED f1 RENAMED f3n } -exists {f0 f2 f3n} -notexists {f1 f3} # Both files involved in a rename are reverted regardless of which filename # is used as an argument to 'fossil revert' # revert-test 5 f3 -changes { ADDED f0 DELETED f1 EDITED f2 } -exists {f0 f2 f3} -notexists {f1 f3n} revert-test 6 f3n -changes { ADDED f0 DELETED f1 EDITED f2 } -exists {f0 f2 f3} -notexists {f1 f3n} # Test with multiple filename arguments # revert-test 7 {f0 f2 f3n} -changes { DELETED f1 } -addremove { ADDED f0 } -exists {f0 f2 f3} -notexists {f1 f3n}