[Pkg] DeltaStreams: DeltaStreams-Tests-gk.8.mcz
squeak-dev-noreply at lists.squeakfoundation.org
squeak-dev-noreply at lists.squeakfoundation.org
Wed Mar 11 13:24:05 UTC 2009
A new version of DeltaStreams-Tests was added to project DeltaStreams:
http://www.squeaksource.com/DeltaStreams/DeltaStreams-Tests-gk.8.mcz
==================== Summary ====================
Name: DeltaStreams-Tests-gk.8
Author: gk
Time: 11 March 2009, 2:24:01 pm
UUID: c22c7087-9ad7-428c-933f-31c4d06421b1
Ancestors: DeltaStreams-Tests-mtf.7
-Added missing methods to make DSDeltaAntiTest run.
-Changed to using DSCompositeClassAddedChange instead of DSChangeSequence (hey, it is abstract!) in DSDeltaApplyTest and DSDeltaCreationTest.
-Small fix in DSDeltaChangeSetTest>>applyChange:
-Added missing methods to make DSDeltaCopyTest run.
-Subtle fix in DSDeltaCreationTest>>testRemoveClass to avoid creating a DSCompositeClassDeletedChange.
- Some fixes in DSDeltaLoggingTest
=============== Diff against DeltaStreams-Tests-mtf.7 ===============
Item was changed:
----- Method: DSDeltaLoggingTest>>testClassName (in category 'class tests') -----
testClassName
+
+ class rename: self newClassAName.
- | old new |
- old := class name.
- new := old, 'NEW'.
- class rename: new.
self assert: (delta classNameChanges size = 1).
+ self assert: (delta classNameChanges first oldName = self oldClassAName).
+ self assert: (delta classNameChanges first newName = self newClassAName)!
- self assert: (delta classNameChanges first oldName = old).
- self assert: (delta classNameChanges first newName = new)!
Item was changed:
----- Method: DSTestResource>>tearDown (in category 'as yet unclassified') -----
tearDown
DSTestCase new removeTestClasses; removeTestPools!
Item was changed:
----- Method: DSDeltaApplyTest>>testRemoveClass (in category 'clean class tests') -----
testRemoveClass
+
-
self assert: (Smalltalk includesKey: self oldClassAName).
self applyChange: (DSClassRemovedChange new
fromChange: self oldClassAChange;
yourself).
self deny: (Smalltalk includesKey: self classBName).!
Item was changed:
----- Method: DSDeltaChangeSetTest>>applyChange: (in category 'as yet unclassified') -----
applyChange: aChange
| stream writer readerClassName readerClass |
+ stream := RWBinaryOrTextStream on: ''.
- stream := RWBinaryOrTextStream new.
writer := DSDstWriter on: stream.
aChange entryWriters do: [:ea | ea writeOn: writer].
readerClassName := #DSDstReader.
readerClass := Smalltalk at: readerClassName.
[Smalltalk removeKey: readerClassName. stream fileIn]
ensure: [Smalltalk at: readerClassName put: readerClass]!
Item was changed:
----- Method: DSDeltaCreationTest>>testCreateClassWithClassMethod (in category 'composite tests') -----
testCreateClassWithClassMethod
| change1 change1a change1b change2 change2a change2b |
self deny: (Smalltalk includesKey: self classBName).
+ change1 := DSCompositeClassAddedChange new
- change1 := DSChangeSequence new
add: (DSClassCreatedChange
fromClass: class);
add: (DSMethodAddedChange
fromClass: class class
selector: self selectorA);
yourself.
self assert: change1 isComposite.
self assert: change1 size = 2.
change1a := change1 changes first.
self assert: change1a isClassCreated.
self validateClassChange: change1a.
change1b := change1 changes second.
self assert: change1b isMethodAdded.
self validateClassMethodChange: change1b.
change2 := self transformCreateClassWithClassMethod: change1.
self assert: change2 isComposite.
self assert: change2 size = 2.
change2a := change2 changes first.
self assert: change2a isClassCreated.
self validateClassChange: change2a.
change2b := change2 changes second.
self assert: change2b isMethodAdded.
self validateClassMethodChange: change2b.
!
Item was changed:
----- Method: DSDeltaApplyTest>>testCreateClassWithClassMethod (in category 'clean class tests') -----
testCreateClassWithClassMethod
| newClass |
self deny: (Smalltalk includesKey: self classBName).
+ self applyChange: (DSCompositeClassAddedChange new add: (DSClassCreatedChange new
- self applyChange: (DSChangeSequence new add: (DSClassCreatedChange new
fromChange: self oldClassAChange;
className: self classBName;
type: #normal;
yourself); add: (DSMethodAddedChange new
className: self classBName;
meta: true;
selector: self selectorB;
stamp: self oldStamp;
source: self methodBSource;
protocol: self oldProtocol;
yourself); yourself).
self assert: (Smalltalk includesKey: self classBName).
newClass := Smalltalk at: self classBName.
self assert: newClass isBehavior.
self deny: newClass isMeta.
self assert: newClass class isMeta.
self assert: newClass isFixed.
self deny: newClass isVariable.
self assert: newClass isPointers.
self deny: newClass isBits.
self deny: newClass isBytes.
self assert: newClass isWords.
self deny: newClass isWeak.
self assert: newClass name == self classBName.
self assert: newClass superclass == self oldSuperclass.
self assert: newClass category == self oldClassCategory.
self assert: newClass instanceVariablesString = self oldInstVarString.
"self assert: class class instanceVariablesString = self oldInstVarString."
self assert: newClass classVariablesString = self oldClassVarString.
self assert: newClass sharedPoolsString = self oldSharedPoolString.
self assert: newClass methodDictionary isEmpty.
self assert: newClass organization categories size = 1.
self assert: newClass organization categories first = Categorizer nullCategory.
self assert: (newClass class selectors includes: self selectorB).
self assert: (newClass class organization categoryOfElement: self selectorB) = self oldProtocol.
self assert: (newClass class sourceCodeAt: self selectorB) = self methodBSource.
self assert: (newClass class compiledMethodAt: self selectorB) timeStamp = self oldStamp.
self assert: newClass hasComment.!
Item was changed:
----- Method: DSDeltaApplyTest>>testCreateClassWithComment (in category 'clean class tests') -----
testCreateClassWithComment
| newClass |
self deny: (Smalltalk includesKey: self classBName).
+ self applyChange: (DSCompositeClassAddedChange new add: (DSClassCreatedChange new
- self applyChange: (DSChangeSequence new add: (DSClassCreatedChange new
fromChange: self oldClassAChange;
className: self classBName;
type: #normal;
yourself); add: (DSClassCommentChange new
fromChange: self oldClassAChange;
className: self classBName;
oldComment: nil;
newComment: self newComment;
oldStamp: nil;
newStamp: self newStamp;
yourself); yourself).
self assert: (Smalltalk includesKey: self classBName).
newClass := Smalltalk at: self classBName.
self assert: newClass isBehavior.
self deny: newClass isMeta.
self assert: newClass class isMeta.
self assert: newClass isFixed.
self deny: newClass isVariable.
self assert: newClass isPointers.
self deny: newClass isBits.
self deny: newClass isBytes.
self assert: newClass isWords.
self deny: newClass isWeak.
self assert: newClass name == self classBName.
self assert: newClass superclass == self oldSuperclass.
self assert: newClass category == self oldClassCategory.
self assert: newClass instanceVariablesString = self oldInstVarString.
"self assert: class class instanceVariablesString = self oldInstVarString."
self assert: newClass classVariablesString = self oldClassVarString.
self assert: newClass sharedPoolsString = self oldSharedPoolString.
self assert: newClass methodDictionary isEmpty.
self assert: newClass class methodDictionary isEmpty.
self assert: newClass organization categories size = 1.
self assert: newClass organization categories first = Categorizer nullCategory.
self assert: newClass class organization categories size = 1.
self assert: newClass class organization categories first = Categorizer nullCategory.
self assert: newClass hasComment.
self assert: newClass organization classComment = self newComment.
self assert: newClass organization commentStamp = self newStamp.
!
Item was changed:
----- Method: DSDeltaApplyTest>>testCreateClassWithInstanceMethod (in category 'clean class tests') -----
testCreateClassWithInstanceMethod
| newClass |
self deny: (Smalltalk includesKey: self classBName).
+ self applyChange: (DSCompositeClassAddedChange new add: (DSClassCreatedChange new
- self applyChange: (DSChangeSequence new add: (DSClassCreatedChange new
fromChange: self oldClassAChange;
className: self classBName;
type: #normal;
yourself); add: (DSMethodAddedChange new
className: self classBName;
meta: false;
selector: self selectorB;
stamp: self oldStamp;
source: self methodBSource;
protocol: self oldProtocol;
yourself); yourself).
self assert: (Smalltalk includesKey: self classBName).
newClass := Smalltalk at: self classBName.
self assert: newClass isBehavior.
self deny: newClass isMeta.
self assert: newClass class isMeta.
self assert: newClass isFixed.
self deny: newClass isVariable.
self assert: newClass isPointers.
self deny: newClass isBits.
self deny: newClass isBytes.
self assert: newClass isWords.
self deny: newClass isWeak.
self assert: newClass name == self classBName.
self assert: newClass superclass == self oldSuperclass.
self assert: newClass category == self oldClassCategory.
self assert: newClass instanceVariablesString = self oldInstVarString.
"self assert: class class instanceVariablesString = self oldInstVarString."
self assert: newClass classVariablesString = self oldClassVarString.
self assert: newClass sharedPoolsString = self oldSharedPoolString.
self assert: (newClass selectors includes: self selectorB).
self assert: (newClass organization categoryOfElement: self selectorB) = self oldProtocol.
self assert: (newClass sourceCodeAt: self selectorB) = self methodBSource.
self assert: (newClass compiledMethodAt: self selectorB) timeStamp = self oldStamp.
self assert: newClass class methodDictionary isEmpty.
self assert: newClass class organization categories size = 1.
self assert: newClass class organization categories first = Categorizer nullCategory.
self assert: newClass hasComment.!
Item was added:
+ ----- Method: DSDeltaCopyTest>>transformCreateClassWithInstanceMethod: (in category 'class transforms') -----
+ transformCreateClassWithInstanceMethod: aChange
+
+ ^ DSCompositeClassAddedChange fromChange: aChange!
Item was changed:
----- Method: DSDeltaLoggingTest>>testClassRemoved (in category 'class tests') -----
testClassRemoved
| compositeChange change |
class removeFromSystem.
+ self assert: (delta classDeletedChanges size = 1).
- self assert: (delta classRemovedChanges size = 1).
compositeChange := delta changes first.
+ self assert: compositeChange isClassDeleted.
- self assert: compositeChange isClassRemoved.
self assert: compositeChange isComposite.
self assert: compositeChange changes size = 3.
change := compositeChange changes first.
self assert: change isMethodRemoved.
change := compositeChange changes second.
self assert: change isMethodRemoved.
change := compositeChange changes third.
self assert: change isClassRemoved.
self deny: change isComposite.
self assert: change className == self oldClassAName.
self assert: change superclassName == self oldSuperclass name.
self assert: change category == self oldClassCategory.
self assert: change instVarNames isEmpty.
self assert: change classVarNames isEmpty.
self assert: change poolDictionaryNames isEmpty.
self assert: change type == #normal.!
Item was added:
+ ----- Method: DSDelta>>classDeletedChanges (in category '*deltastreams-tests') -----
+ classDeletedChanges
+ ^self changes select: [:change | change isClassDeleted]!
Item was changed:
----- Method: DSTestCase>>createTestPools (in category 'private') -----
createTestPools
-
#(a b c d e f) do: [:sym | Smalltalk at: (#DS, sym) asSymbol put: Dictionary new].!
Item was changed:
----- Method: DSDeltaCreationTest>>testRemoveClass (in category 'class tests') -----
testRemoveClass
| change1 change2 change3 |
+ "Note that we use #new here to make sure we only get a DSClassRemovedChange
+ and not a DSCompositeClassDeletedChange"
+ (change1 := DSClassRemovedChange new
- (change1 := DSClassRemovedChange
fromClass: class)
yourself.
self assert: change1 isClassRemoved.
self validateClassChange: change1.
change2 := self transformRemoveClass: change1.
self assert: change2 isClassRemoved.
self validateClassChange: change2.
change3 := change1 asAntiChange.
self assert: change3 isClassAdded.
+ self validateClassChange: change3!
- self validateClassChange: change3.!
Item was changed:
----- Method: DSTestCase>>removeTestPools (in category 'private') -----
removeTestPools
+ #(a b c d e f BadPool) do: [:sym | Smalltalk removeKey: (#DS, sym) asSymbol ifAbsent:[]]!
-
- #(a b c d e f BadPool) do: [:sym | Smalltalk removeKey: (#DS, sym) asSymbol ifAbsent: []]!
Item was added:
+ ----- Method: DSDeltaAntiTest>>transformCreateClassWithInstanceMethod: (in category 'class transforms') -----
+ transformCreateClassWithInstanceMethod: change1
+
+ | change3 ch1 ch2 |
+ change3 := change1 asAntiChange.
+ self assert: change3 changes size = 2.
+ self assert: change3 isClassDeleted.
+
+ ch1 := change3 changes first.
+ ch2 := change3 changes last.
+
+ self validateInstanceMethodChange: ch1.
+ self assert: ch1 isMethodRemoved.
+
+ self validateClassChange: ch2.
+ self assert: ch2 isClassRemoved.
+
+ ^ change3 asAntiChange!
Item was changed:
----- Method: DSTestResource>>setUp (in category 'as yet unclassified') -----
setUp
DSTestCase new createTestPools; createClassAFull!
Item was changed:
----- Method: DSDeltaCreationTest>>testCreateClassWithInstanceMethod (in category 'composite tests') -----
testCreateClassWithInstanceMethod
| change1 change1a change1b change2 change2a change2b |
self deny: (Smalltalk includesKey: self classBName).
+ change1 := DSCompositeClassAddedChange new
- change1 := DSChangeSequence new
add: (DSClassCreatedChange
fromClass: class);
add: (DSMethodAddedChange
fromClass: class
selector: self selectorA);
yourself.
self assert: change1 isComposite.
self assert: change1 size = 2.
change1a := change1 changes first.
self assert: change1a isClassCreated.
self validateClassChange: change1a.
change1b := change1 changes second.
self assert: change1b isMethodAdded.
self validateInstanceMethodChange: change1b.
change2 := self transformCreateClassWithInstanceMethod: change1.
self assert: change2 isComposite.
self assert: change2 size = 2.
change2a := change2 changes first.
self assert: change2a isClassCreated.
self validateClassChange: change2a.
change2b := change2 changes second.
self assert: change2b isMethodAdded.
self validateInstanceMethodChange: change2b.
!
Item was changed:
----- Method: DSDeltaCreationTest>>validateClassChange: (in category 'private') -----
validateClassChange: aChange
+ "Validate that all properties of the given change match the old
+ properties we keep track of in ivars."
+
self validateClassChange: aChange except: nil!
Item was added:
+ ----- Method: DSDeltaCopyTest>>transformCreateClassWithClassMethod: (in category 'class transforms') -----
+ transformCreateClassWithClassMethod: aChange
+
+ ^ DSCompositeClassAddedChange fromChange: aChange!
Item was changed:
----- Method: DSTestCase>>removeTestClasses (in category 'private') -----
removeTestClasses
| name |
^ #(oldClassAName newClassAName classBName badSuperclassName badClassAName badClassName) do: [:ea |
name := self perform: ea.
class := Smalltalk at: name ifAbsent: [nil].
class ifNotNil: [class removeFromSystem]]!
Item was changed:
----- Method: DSTestCase>>modifiesMocks (in category 'testing') -----
modifiesMocks
"If I don't modify my mocks, I don't have to reinvoke the compiler every startUp/tearDown to rebuild them. False by default; subclasses whose test modify mocks should override me to answer true"
"DSTestResource relies on this being false by default"
^ false!
Item was changed:
----- Method: DSDeltaCreationTest>>testCreateNormalClass (in category 'class tests') -----
testCreateNormalClass
| change1 change2 |
(change1 := DSClassCreatedChange
fromClass: class)
yourself.
self assert: change1 isClassCreated.
self validateClassChange: change1.
change2 := self transformCreateNormalClass: change1.
self assert: change2 isClassCreated.
self validateClassChange: change2.!
Item was added:
+ ----- Method: DSDeltaAntiTest>>transformCreateClassWithClassMethod: (in category 'class transforms') -----
+ transformCreateClassWithClassMethod: change1
+
+ | change3 ch1 ch2 |
+ change3 := change1 asAntiChange.
+ self assert: change3 changes size = 2.
+ self assert: change3 isClassDeleted.
+
+ ch1 := change3 changes first.
+ ch2 := change3 changes last.
+
+ self validateClassMethodChange: ch1.
+ self assert: ch1 isMethodRemoved.
+
+ self validateClassChange: ch2.
+ self assert: ch2 isClassRemoved.
+
+ ^ change3 asAntiChange!
Item was changed:
----- Method: DSDeltaCreationTest>>validateClassChange:except: (in category 'private') -----
validateClassChange: aChange except: aSymbol
+ "Validate that all properties of the given change match the old
+ properties we keep track of in ivars - except the property
+ given as aSymbol.
+
+ Example validating all properties except for the name of the class:
+
+ self validateClassChange: aChange except: #class
+ "
+
self assert: aChange isChange.
self assert: aChange isClassChange.
#class == aSymbol or: [self assert: aChange className == self oldClassAName].
self assert: aChange type == #normal.
#superclass == aSymbol or: [self assert: aChange superclassName == self oldSuperclass name].
#instVars == aSymbol or: [self assert: aChange instVarNames = self oldInstVarString scanNames].
#classInstVars == aSymbol or: [self assert: aChange classInstVarNames = self oldInstVarString scanNames].
#classVars == aSymbol or: [self assert: aChange classVarNames = self oldClassVarString scanNames sort].
#sharedPools == aSymbol or: [self assert: aChange poolDictionaryNames = self oldSharedPoolString scanNames].
#category == aSymbol or: [self assert: aChange category = self oldClassCategory].
#comment == aSymbol or: [self assert: aChange comment = self oldComment].
#comment == aSymbol or: [self assert: aChange stamp = self oldStamp].
!
More information about the Packages
mailing list