Regenerated to fix dependency problem.
"{ Package: 'stx:goodies/monticello' }"
MCTestCase subclass:#MCWorkingCopyTest
instanceVariableNames:'savedInitials workingCopy repositoryGroup versions versions2'
classVariableNames:''
poolDictionaries:''
category:'Monticello-Tests'
!
!MCWorkingCopyTest methodsFor:'accessing'!
description
^ self class name
! !
!MCWorkingCopyTest methodsFor:'actions'!
basicMerge: aVersion
aVersion merge
!
load: aVersion
aVersion load
!
merge: aVersion
[[self basicMerge: aVersion]
on: MCMergeResolutionRequest do: [:n | n resume: true]]
on: MCNoChangesException do: [:n | ]
!
snapshot
| version |
[version := workingCopy newVersion]
on: MCVersionNameAndMessageRequest
do: [:n | n resume: (Array with: n suggestedName with: '')].
versions at: version info put: version.
^ version
! !
!MCWorkingCopyTest methodsFor:'asserting'!
assertNameWhenSavingTo: aRepository is: aString
| name |
name := nil.
[aRepository storeVersion: workingCopy newVersion]
on: MCVersionNameAndMessageRequest
do: [:n | name := n suggestedName. n resume: (Array with: name with: '')].
self assert: name = aString
!
assertNumberWhenSavingTo: aRepository is: aNumber
| name |
name := nil.
[aRepository storeVersion: workingCopy newVersion]
on: MCVersionNameAndMessageRequest
do: [:n | name := n suggestedName. n resume: (Array with: name with: '')].
self assert: name = (self packageName, '-', Author initials, '.', aNumber asString)
! !
!MCWorkingCopyTest methodsFor:'private'!
packageName
^ self mockPackage name
! !
!MCWorkingCopyTest methodsFor:'running'!
clearPackageCache
| dir |
dir := MCCacheRepository default directory.
(dir fileNamesMatching: 'MonticelloMocks*') do: [:ea | dir deleteFileNamed: ea].
(dir fileNamesMatching: 'MonticelloTest*') do: [:ea | dir deleteFileNamed: ea].
(dir fileNamesMatching: 'rev*') do: [:ea | dir deleteFileNamed: ea].
(dir fileNamesMatching: 'foo-*') do: [:ea | dir deleteFileNamed: ea].
(dir fileNamesMatching: 'foo2-*') do: [:ea | dir deleteFileNamed: ea].
!
setUp
| repos1 repos2 |
self clearPackageCache.
repositoryGroup := MCRepositoryGroup new.
repositoryGroup disableCache.
workingCopy := MCWorkingCopy forPackage: self mockPackage.
versions := Dictionary new.
versions2 := Dictionary new.
repos1 := MCDictionaryRepository new dictionary: versions.
repos2 := MCDictionaryRepository new dictionary: versions2.
repositoryGroup addRepository: repos1.
repositoryGroup addRepository: repos2.
MCRepositoryGroup default removeRepository: repos1; removeRepository: repos2.
workingCopy repositoryGroup: repositoryGroup.
savedInitials := Author initials.
Author initials: 'abc'.
"Modified: / 13-09-2010 / 12:00:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
tearDown
workingCopy unregister.
self restoreMocks.
self clearPackageCache.
Author initials: savedInitials.
! !
!MCWorkingCopyTest methodsFor:'tests'!
testAncestorMerge
| base revA revB revC |
base := self snapshot.
self change: #a toReturn: 'a1'.
revA := self snapshot.
self change: #b toReturn: 'b1'.
revB := self snapshot.
self change: #c toReturn: 'c1'.
revC := self snapshot.
self should: [self basicMerge: revA] raise: MCNoChangesException.
"Modified: / 13-09-2010 / 12:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
testBackport
| inst base final backported |
inst := self mockInstanceA.
base := self snapshot.
self assert: inst one = 1.
self change: #one toReturn: 2.
self change: #two toReturn: 3.
final := self snapshot.
[workingCopy backportChangesTo: base info]
on: MCChangeSelectionRequest
do: [:e | e resume: e patch].
self assert: inst one = 2.
self assert: inst two = 3.
self assert: workingCopy ancestry ancestors size = 1.
self assert: workingCopy ancestry ancestors first = base info.
self assert: workingCopy ancestry stepChildren size = 1.
self assert: workingCopy ancestry stepChildren first = final info.
backported := self snapshot.
[workingCopy backportChangesTo: base info]
on: MCChangeSelectionRequest
do: [:e | e resume: e patch].
self assert: workingCopy ancestry ancestors size = 1.
self assert: workingCopy ancestry ancestors first = base info.
self assert: workingCopy ancestry stepChildren size = 1.
self assert: workingCopy ancestry stepChildren first = backported info.
!
testDoubleRepeatedMerge
| base motherA1 motherA2 motherB1 motherB2 inst |
base := self snapshot.
self change: #a toReturn: 'a1'.
motherA1 := self snapshot.
self change: #c toReturn: 'c1'.
motherA2 := self snapshot.
self load: base.
self change: #b toReturn: 'b1'.
motherB1 := self snapshot.
self change: #d toReturn: 'd1'.
motherB2 := self snapshot.
self load: base.
self merge: motherA1.
self merge: motherB1.
self change: #a toReturn: 'a2'.
self change: #b toReturn: 'b2'.
self snapshot.
self shouldnt: [self merge: motherA2] raise: Error.
self shouldnt: [self merge: motherB2] raise: Error.
inst := self mockInstanceA.
self assert: inst a = 'a2'.
self assert: inst b = 'b2'.
self assert: inst c = 'c1'.
self assert: inst d = 'd1'.
!
testMergeIntoImageWithNoChanges
| base revB revA1 |
self change: #a toReturn: 'a'.
base := self snapshot.
self change: #b toReturn: 'b'.
revB := self snapshot.
self load: base.
self change: #a toReturn: 'a1'.
revA1 := self snapshot.
self change: #a toReturn: 'a'.
self snapshot.
self merge: revB.
self assert: (workingCopy ancestors size = 2)
!
testMergeIntoUnmodifiedImage
| base revA |
base := self snapshot.
self change: #a toReturn: 'a1'.
revA := self snapshot.
self load: base.
self merge: revA.
self assert: (workingCopy ancestors size = 1)
!
testNaming
| repos version |
repos := MCDictionaryRepository new.
self assertNameWhenSavingTo: repos is: self packageName, '-abc.1'.
self assertNameWhenSavingTo: repos is: self packageName, '-abc.2'.
repos := MCDictionaryRepository new.
self assertNameWhenSavingTo: repos is: self packageName, '-abc.3'.
version := self snapshot.
version info instVarNamed: 'name' put: 'foo-jf.32'.
version load.
self assertNameWhenSavingTo: repos is: 'foo-abc.33'.
self assertNameWhenSavingTo: repos is: 'foo-abc.34'.
version info instVarNamed: 'name' put: 'foo-abc.35'.
repos storeVersion: version.
self assertNameWhenSavingTo: repos is: 'foo-abc.36'.
self assertNameWhenSavingTo: repos is: 'foo-abc.37'.
version info instVarNamed: 'name' put: 'foo-abc.10'.
repos storeVersion: version.
self assertNameWhenSavingTo: repos is: 'foo-abc.38'.
version info instVarNamed: 'name' put: 'foo2-ab.40'.
version load.
self assertNameWhenSavingTo: repos is: 'foo2-abc.41'.
!
testOptimizedLoad
| inst base diffy |
inst := self mockInstanceA.
base := self snapshot.
self change: #one toReturn: 2.
self assert: inst one = 2.
diffy := self snapshot asDiffAgainst: base.
self deny: diffy canOptimizeLoading.
self load: base.
self assert: inst one = 1.
self assert: diffy canOptimizeLoading.
self load: diffy.
self assert: inst one = 2.
!
testRedundantMerge
| base |
base := self snapshot.
self merge: base.
self shouldnt: [self merge: base] raise: Error.
!
testRepeatedMerge
| base mother1 mother2 inst |
base := self snapshot.
self change: #one toReturn: 2.
mother1 := self snapshot.
self change: #two toReturn: 3.
mother2 := self snapshot.
self load: base.
self change: #truth toReturn: false.
self snapshot.
inst := self mockInstanceA.
self assert: inst one = 1.
self assert: inst two = 2.
self merge: mother1.
self assert: inst one = 2.
self assert: inst two = 2.
self change: #one toReturn: 7.
self assert: inst one = 7.
self assert: inst two = 2.
self shouldnt: [self merge: mother2] raise: Error.
self assert: inst one = 7.
self assert: inst two = 3.
!
testRepositoryFallback
| version |
version := self snapshot.
self assert: (repositoryGroup versionWithInfo: version info) == version.
versions removeKey: version info.
versions2 at: version info put: version.
self assert: ( repositoryGroup versionWithInfo: version info) == version.
versions2 removeKey: version info.
self should: [repositoryGroup versionWithInfo: version info] raise: Error.
!
testSelectiveBackport
| inst base intermediate final patch selected |
inst := self mockInstanceA.
base := self snapshot.
self assert: inst one = 1.
self change: #one toReturn: 2.
intermediate := self snapshot.
self change: #two toReturn: 3.
final := self snapshot.
[workingCopy backportChangesTo: base info]
on: MCChangeSelectionRequest
do: [:e |
patch := e patch.
selected := patch operations select: [:ea | ea definition selector = #two].
e resume: (MCPatch operations: selected)].
self assert: inst one = 1.
self assert: inst two = 3.
self assert: workingCopy ancestry ancestors size = 1.
self assert: workingCopy ancestry ancestors first = base info.
self assert: workingCopy ancestry stepChildren size = 1.
self assert: workingCopy ancestry stepChildren first = final info
!
testSimpleMerge
| mother base inst |
inst := self mockInstanceA.
base := self snapshot.
self change: #one toReturn: 2.
mother := self snapshot.
self load: base.
self change: #two toReturn: 3.
self snapshot.
self assert: inst one = 1.
self assert: inst two = 3.
self merge: mother.
self assert: inst one = 2.
self assert: inst two = 3.
!
testSnapshotAndLoad
| base inst |
inst := self mockInstanceA.
base := self snapshot.
self change: #one toReturn: 2.
self assert: inst one = 2.
self load: base.
self assert: inst one = 1.
! !
!MCWorkingCopyTest class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/goodies/monticello/MCWorkingCopyTest.st,v 1.1 2011-08-20 12:26:52 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/goodies/monticello/MCWorkingCopyTest.st,v 1.1 2011-08-20 12:26:52 cg Exp $'
!
version_SVN
^ '§Id: MCWorkingCopyTest.st 10 2010-09-13 11:28:19Z vranyj1 §'
! !