[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