[squeak-dev] The Trunk: KernelTests-cmm.348.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Aug 29 22:55:08 UTC 2018


Chris Muller uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTests-cmm.348.mcz

==================== Summary ====================

Name: KernelTests-cmm.348
Author: cmm
Time: 29 August 2018, 5:54:41.347658 pm
UUID: 684f3fdd-c6e7-4fbd-a467-5836ba630909
Ancestors: KernelTests-eem.347

Added test which exposes a bug in detection of duplicate inst-var names in class hierarchies.

=============== Diff against KernelTests-eem.347 ===============

Item was changed:
  ClassTestCase subclass: #ClassBuilderTest
+ 	instanceVariableNames: 'baseClass subClass baseClass2 subSubClass'
- 	instanceVariableNames: 'baseClass subClass'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'KernelTests-Classes'!

Item was changed:
  ----- Method: ClassBuilderTest>>cleanup (in category 'utilities') -----
  cleanup
+ 	subSubClass ifNotNil:[subSubClass removeFromSystem].
  	subClass ifNotNil:[subClass removeFromSystem].
  	baseClass ifNotNil:[baseClass removeFromSystem].
+ 	baseClass2 ifNotNil: [baseClass2 removeFromSystem].
  	(Smalltalk organization listAtCategoryNamed: self categoryNameForTemporaryClasses) isEmpty
  		ifTrue: [Smalltalk organization removeCategory: self categoryNameForTemporaryClasses]!

Item was added:
+ ----- Method: ClassBuilderTest>>subSubClassName (in category 'utilities') -----
+ subSubClassName
+ 	^#DummyClassBuilderFormatTestSubSubClass!

Item was changed:
  ----- Method: ClassBuilderTest>>testDuplicateInstanceVariableError (in category 'testing - reshape') -----
  testDuplicateInstanceVariableError
+ 	| didRaise |
+ 	"Define 'var' in a superclass."
+ 	baseClass := Object 
+ 		subclass: self baseClassName
- 	baseClass := Object subclass: self baseClassName
  		instanceVariableNames: 'var'
  		classVariableNames: ''
  		poolDictionaries: ''
  		category: self categoryNameForTemporaryClasses.
+ 	"Ensure trying to define a subclass with same var errors."
+ 	didRaise := false.
+ 	[baseClass subclass: self subClassName
- 
- 	self should:[
- 		subClass := baseClass subclass: self subClassName
  			instanceVariableNames: 'var'
  			classVariableNames: ''
  			poolDictionaries: ''
+ 			category: self categoryNameForTemporaryClasses ] 
+ 		on: DuplicateVariableError do:
+ 			[ : err |
+ 			didRaise := true.
+ 			self assert: err superclass == baseClass.
+ 			self assert: err variable = 'var' ].
+ 	self assert: didRaise.
+ 	"Prepare for next test:  Remove 'var' from superclass."
+ 	baseClass := Object 
+ 		subclass: self baseClassName
- 			category: self categoryNameForTemporaryClasses
- 	] raise: DuplicateVariableError.
- 
- 	[subClass := baseClass subclass: self subClassName
- 			instanceVariableNames: 'var'
- 			classVariableNames: ''
- 			poolDictionaries: ''
- 			category: self categoryNameForTemporaryClasses
- 	] on: DuplicateVariableError do:[:ex|
- 		self assert: ex superclass == baseClass.
- 		self assert: ex variable = 'var'.
- 		ex resume.
- 	].
- 
- 	baseClass := Object subclass: self baseClassName
  		instanceVariableNames: ''
  		classVariableNames: ''
  		poolDictionaries: ''
  		category: self categoryNameForTemporaryClasses.
+ 	"Define a subclass without 'var'..."
+ 	subClass := baseClass
+ 		subclass: self subClassName
+ 		instanceVariableNames: ''
+ 		classVariableNames: ''
+ 		poolDictionaries: ''
+ 		category: self categoryNameForTemporaryClasses.
+ 	"... but with a subclass of THAT, with 'var' defined."
+ 	subSubClass := subClass subclass: self subSubClassName
+ 		instanceVariableNames: 'var'
+ 		classVariableNames: ''
+ 		poolDictionaries: ''
+ 		category: self categoryNameForTemporaryClasses.
+ 	"... as well as a different base class with 'var' already defined..."
+ 	baseClass2 := Object 
+ 		subclass: (self baseClassName,'2') asSymbol
+ 		instanceVariableNames: 'var'
+ 		classVariableNames: ''
+ 		poolDictionaries: ''
+ 		category: self categoryNameForTemporaryClasses.
+ 	"...and now try to move the middle subClass, whose subclass (a.k.a., subSubClass) defines 'var', to the new baseClass which also defines 'var'."
+ 	didRaise := false.
+ 	[baseClass2 subclass: self subClassName
+ 			instanceVariableNames: ''
- 
- 	self should:[
- 		baseClass := Object subclass: self baseClassName
- 			instanceVariableNames: 'var'
  			classVariableNames: ''
  			poolDictionaries: ''
+ 			category: self categoryNameForTemporaryClasses ] 
+ 		on: DuplicateVariableError do:
+ 			[ : err |
+ 			didRaise := true.
+ 			self assert: err superclass == baseClass2.
+ 			self assert: err variable = 'var' ].
+ 	self assert: didRaise!
- 			category: self categoryNameForTemporaryClasses.
- 	] raise: DuplicateVariableError.
- 
- 	[baseClass := Object subclass: self baseClassName
- 			instanceVariableNames: 'var'
- 			classVariableNames: ''
- 			poolDictionaries: ''
- 			category: self categoryNameForTemporaryClasses.
- 	] on: DuplicateVariableError do:[:ex|
- 		self assert: ex superclass == baseClass.
- 		self assert: ex variable = 'var'.
- 		ex resume.
- 	].!



More information about the Squeak-dev mailing list