[squeak-dev] The Trunk: MorphicTests-pre.53.mcz

patrick.rein at hpi.uni-potsdam.de patrick.rein at hpi.uni-potsdam.de
Fri Oct 4 14:24:49 UTC 2019


I have to add that there seems to be an interaction between the Workspace and the form rendering which renders the first example broken for now. It works if you create a TextMorph instead. I have to look into this which might take a few days.

Bests
Patrick

>Hi Hannes,
>
>yes that needs to be updated. Thanks for checking it out! I will upload a change in a few minutes.
>
>(In the future, it would be nice If TextAnchor would work like shown in the comment. But for now we have to use the special character...)
>
>Bests
>Patrick
>
>>The example given in the class comment of TextAnchor does not work.
>>
>>Workspace new
>>		contents: (Text withAll: 'foo') , (Text string: '*' attribute:
>>(TextAnchor new anchoredMorph: EllipseMorph new)) , (Text withAll:
>>'bar');
>>		openLabel: 'Text with Morph'.
>>
>>(Squeak 5.3-19046)
>>
>>Does it need to be updated?
>>
>>--Hannes
>>
>>On Fri, 4 Oct 2019 09:22:22 0000, commits at source.squeak.org
>><commits at source.squeak.org> wrote:
>>> Patrick Rein uploaded a new version of MorphicTests to project The Trunk:
>>> http://source.squeak.org/trunk/MorphicTests-pre.53.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: MorphicTests-pre.53
>>> Author: pre
>>> Time: 4 October 2019, 11:22:21.819303 am
>>> UUID: d1d84e3f-afe5-624c-a1be-287b3465240e
>>> Ancestors: MorphicTests-mt.52
>>>
>>> Adds Test for the placement of text anchors
>>>
>>> =============== Diff against MorphicTests-mt.52 ===============
>>>
>>> Item was changed:
>>>   SystemOrganization addCategory: #'MorphicTests-Basic'!
>>> + SystemOrganization addCategory: #'MorphicTests-Events'!
>>>   SystemOrganization addCategory: #'MorphicTests-Kernel'!
>>>   SystemOrganization addCategory: #'MorphicTests-Layouts'!
>>>   SystemOrganization addCategory: #'MorphicTests-Support'!
>>>   SystemOrganization addCategory: #'MorphicTests-Text Support'!
>>>   SystemOrganization addCategory: #'MorphicTests-ToolBuilder'!
>>>   SystemOrganization addCategory: #'MorphicTests-Widgets'!
>>>   SystemOrganization addCategory: #'MorphicTests-Worlds'!
>>> - SystemOrganization addCategory: #'MorphicTests-Events'!
>>>
>>> Item was changed:
>>> + TestCase subclass: #TextAnchorTest
>>> + 	instanceVariableNames: 'anchoredMorph anchorAttribute text textMorph'
>>> - HashAndEqualsTestCase subclass: #TextAnchorTest
>>> - 	instanceVariableNames: ''
>>>   	classVariableNames: ''
>>>   	poolDictionaries: ''
>>>   	category: 'MorphicTests-Text Support'!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>after:paddingChangesTo: (in category
>>> 'utility') -----
>>> + after: aBlock paddingChangesTo: assertBlock
>>> +
>>> + 	anchoredMorph := TextAnchorTestMorph new.
>>> + 	anchorAttribute anchoredMorph: anchoredMorph.
>>> + 	aBlock value.
>>> + 	self prepareTextMorph.
>>> + 	assertBlock value: (textMorph paragraph lines first).	!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>prepareTextMorph (in category 'utility')
>>> -----
>>> + prepareTextMorph
>>> +
>>> + 	textMorph := text asMorph.
>>> + 	self refreshTextMorph.!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>refreshTextMorph (in category 'utility')
>>> -----
>>> + refreshTextMorph
>>> +
>>> + 	textMorph changed; imageForm. "This triggers a redraw and thereby
>>> positions the embedded morphs."!
>>>
>>> Item was changed:
>>> + ----- Method: TextAnchorTest>>setUp (in category 'running') -----
>>> - ----- Method: TextAnchorTest>>setUp (in category 'initialize-release')
>>> -----
>>>   setUp
>>> +
>>>   	super setUp.
>>> + 	anchoredMorph := TextAnchorTestMorph new.
>>> + 	anchorAttribute := TextAnchor new anchoredMorph: anchoredMorph.
>>> + 	text := Text streamContents: [:stream |
>>> + 		stream
>>> + 			nextPutAll: 'Here is a contrived example ';
>>> + 			nextPutAll: (Text
>>> + 				string: Character startOfHeader asString
>>> + 				attributes: {
>>> + 					anchorAttribute.
>>> + 					TextColor color: Color transparent});
>>> + 			nextPutAll: ' whose morph is in the center.' ].
>>> + 	self prepareTextMorph.!
>>> - 	prototypes
>>> - 		add: (TextAnchor new anchoredMorph: RectangleMorph new initialize);
>>> - 		
>>> - 		add: (TextAnchor new anchoredMorph: EllipseMorph new initialize) !
>>>
>>> Item was changed:
>>> + ----- Method: TextAnchorTest>>testBeginWithAnAnchor (in category 'tests')
>>> -----
>>> - ----- Method: TextAnchorTest>>testBeginWithAnAnchor (in category
>>> 'initialize-release') -----
>>>   testBeginWithAnAnchor
>>> + 	
>>> + 	text := Text streamContents: [:stream |
>>> + 		stream
>>> + 			nextPutAll: (Text
>>> + 				string: Character startOfHeader asString
>>> + 				attributes: {
>>> + 					anchorAttribute.
>>> - 	| text morph model |
>>> - 	text := Text streamContents:
>>> - 		[ : stream | stream
>>> - 			 nextPutAll:
>>> - 			(Text
>>> - 				string: (String value: 1)
>>> - 				attributes: {TextAnchor new anchoredMorph: Morph new.
>>>   					TextColor color: Color transparent}) ;
>>> + 			nextPutAll: ' should be able to begin with an embedded object. '].
>>> + 	self prepareTextMorph.
>>> + 	self
>>> + 		assert: (anchoredMorph ownerChain includes: textMorph);
>>> + 		assert: anchoredMorph topLeft >= textMorph topLeft.!
>>> - 			 nextPutAll: ' should be able to begin with an embedded object. ' ].
>>> - 	model := text -> nil.
>>> - 	morph := PluggableTextMorph
>>> - 		on: model
>>> - 		text: #key
>>> - 		accept: nil.
>>> - 	[ morph openInWorld ] ensure: [ morph delete ]!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testHavingADocumentAnchorAndRelativeTextAnchorPosition (in
>>> category 'tests') -----
>>> + testHavingADocumentAnchorAndRelativeTextAnchorPosition
>>> + 	
>>> + 	anchoredMorph := Morph new.
>>> + 	anchoredMorph textAnchorProperties
>>> + 		positionInDocument: 20 @ 10;
>>> + 		anchorLayout: #document.
>>> + 	anchorAttribute anchoredMorph: anchoredMorph.
>>> + 	self prepareTextMorph.
>>> + 	
>>> + 	self
>>> + 		assert: (anchoredMorph ownerChain includes: textMorph);
>>> + 		 assert: anchoredMorph topLeft >= textMorph topLeft;
>>> + 		 assert: anchoredMorph top > textMorph top!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testHavingADocumentAnchorShouldNotAffectTheLineHeight (in
>>> category 'tests') -----
>>> + testHavingADocumentAnchorShouldNotAffectTheLineHeight
>>> + 	
>>> + 	| firstLine |
>>> + 	anchoredMorph := Morph new.
>>> + 	anchoredMorph height: 50.
>>> + 	anchoredMorph textAnchorProperties
>>> + 		positionInDocument: 20 @ 10;
>>> + 		anchorLayout: #document.
>>> + 	anchorAttribute anchoredMorph: anchoredMorph.
>>> + 	self prepareTextMorph.
>>> + 	
>>> + 	firstLine := textMorph paragraph lines first.
>>> + 	self	
>>> + 		assert: (firstLine bottom - firstLine top) < 25
>>> + 		description: '#document layouted anchor should not affect line height'.
>>> + 	!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testHavingAMultilineDocumentAnchorAndRelativeTextAnchorPosition
>>> (in category 'tests') -----
>>> + testHavingAMultilineDocumentAnchorAndRelativeTextAnchorPosition
>>> + 	
>>> + 	| secondLine |
>>> + 	text := Text streamContents: [ :stream |
>>> + 		stream
>>> + 			nextPutAll: 'Example with more than one line.
>>> + Here is an example ';
>>> + 			nextPutAll: (Text
>>> + 				string: Character startOfHeader asString
>>> + 				attributes: {anchorAttribute});
>>> + 			nextPutAll: ' without a morph in the center.' ].
>>> + 	anchoredMorph := Morph new
>>> + 		height: 50;
>>> + 		yourself.
>>> + 	anchoredMorph textAnchorProperties
>>> + 		positionInDocument: 20 @ 10;
>>> + 		anchorLayout: #document.
>>> + 	anchorAttribute anchoredMorph: anchoredMorph.
>>> + 	self prepareTextMorph.
>>> +
>>> + 	secondLine := textMorph paragraph lines second.
>>> + 	self
>>> + 		assert: (anchoredMorph ownerChain includes: textMorph);
>>> + 		assert: anchoredMorph topLeft >= textMorph topLeft;
>>> + 		assert: anchoredMorph top > textMorph top;
>>> + 		assert: anchoredMorph top > secondLine top.!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testHavingAnAnchorCanBeAlignedDifferently
>>> (in category 'tests') -----
>>> + testHavingAnAnchorCanBeAlignedDifferently
>>> +
>>> + 	| line |
>>> + 	anchoredMorph textAnchorProperties verticalAlignment: #(top baseline).
>>> + 	anchoredMorph textAnchorProperties padding. 1.
>>> + 	self prepareTextMorph.
>>> + 	line := textMorph paragraph lines first.
>>> + 	self assert: anchoredMorph top = (line top + line baseline).!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testHavingAnAnchorInTheCenter (in category
>>> 'tests') -----
>>> + testHavingAnAnchorInTheCenter
>>> + 	
>>> + 	self
>>> + 		assert: (anchoredMorph ownerChain includes: textMorph);
>>> + 		assert: anchoredMorph topLeft > textMorph topLeft!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testHavingAnAnchorInTheCenterWithHorizontalPadding (in
>>> category 'tests') -----
>>> + testHavingAnAnchorInTheCenterWithHorizontalPadding
>>> +
>>> + 	anchoredMorph textAnchorProperties padding. 30 at 0.
>>> + 	
>>> + 	self
>>> + 		assert: (anchoredMorph ownerChain includes: textMorph);
>>> + 		assert: (anchoredMorph topLeft > textMorph topLeft)!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testHavingAnInlineAnchorAndRelativeTextAnchorPosition (in
>>> category 'tests') -----
>>> + testHavingAnInlineAnchorAndRelativeTextAnchorPosition
>>> + 	
>>> + 	| positionWithRelativePosition positionWithoutRelativePosition |
>>> + 	anchoredMorph textAnchorProperties
>>> + 		positionInDocument: 20 at 10;
>>> + 		anchorLayout: #inline.
>>> + 	self refreshTextMorph.
>>> + 	positionWithRelativePosition := anchoredMorph topLeft.
>>> + 	
>>> + 	anchoredMorph textAnchorProperties positionInDocument: nil.
>>> + 	self refreshTextMorph.
>>> + 	positionWithoutRelativePosition := anchoredMorph topLeft.
>>> + 	
>>> + 	self	assert: positionWithRelativePosition =
>>> positionWithoutRelativePosition!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testLayoutingSetsTheMorphPosition (in
>>> category 'tests') -----
>>> + testLayoutingSetsTheMorphPosition
>>> + 	
>>> + 	anchoredMorph := Morph new.
>>> + 	anchoredMorph textAnchorProperties
>>> + 		anchorLayout: #inline.
>>> + 	anchorAttribute anchoredMorph: anchoredMorph.
>>> + 	self prepareTextMorph.
>>> + 	
>>> + 	textMorph position: 100 at 100.
>>> + 	
>>> + 	self assert: anchoredMorph position > (100 at 100).!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testPaddingBottom (in category
>>> 'tests-padding') -----
>>> + testPaddingBottom
>>> +
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph height: 20.
>>> + 			anchoredMorph textAnchorProperties verticalAlignment: #(bottom
>>> baseline).
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding bottom: 10)]
>>> + 		paddingChangesTo: [:line |
>>> + 			self assert: anchoredMorph bottom + 10 = line baseline ]!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testPaddingBottomAndBottom (in category
>>> 'tests-padding') -----
>>> + testPaddingBottomAndBottom
>>> +
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph height: 20.
>>> + 			anchoredMorph textAnchorProperties verticalAlignment: #(bottom bottom).
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding bottom: 10)]
>>> + 		paddingChangesTo: [:line |
>>> + 			self assert: anchoredMorph bottom + 10 = line bottom ]!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testPaddingBottomAndBottomWithConvenienceAlignment (in
>>> category 'tests-padding') -----
>>> + testPaddingBottomAndBottomWithConvenienceAlignment
>>> +
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph height: 20.
>>> + 			anchoredMorph textAnchorProperties verticalAlignment: #bottom.
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding bottom: 10)]
>>> + 		paddingChangesTo: [:line |
>>> + 			self assert: anchoredMorph bottom + 10 = line bottom ]!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testPaddingTop (in category 'tests-padding')
>>> -----
>>> + testPaddingTop
>>> +
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph height: 20.
>>> + 			anchoredMorph textAnchorProperties verticalAlignment: #(top baseline).
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding top: 10)]
>>> + 		paddingChangesTo: [:line | | anchoredMorphTop |
>>> +  			anchoredMorphTop := anchoredMorph top - textMorph top.
>>> +  			self assert: anchoredMorphTop - 10 = line baseline ]!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testPaddingTopAndBottom (in category
>>> 'tests-padding') -----
>>> + testPaddingTopAndBottom
>>> + 	
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph height: 30.
>>> + 			anchoredMorph textAnchorProperties verticalAlignment: #(#bottom
>>> #bottom).
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding bottom: 10).
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding top: 10).]
>>> + 		paddingChangesTo: [:line |
>>> + 			self assert: anchoredMorph bottom + 10 = line bottom.
>>> + 			self deny: anchoredMorph top - 10= line top description: 'We only apply
>>> padding to the morph position'.]!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testPaddingTopAndTop (in category
>>> 'tests-padding') -----
>>> + testPaddingTopAndTop
>>> +
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph height: 20.
>>> + 			anchoredMorph textAnchorProperties verticalAlignment: #(top baseline).
>>> + 			anchoredMorph textAnchorProperties padding: (anchoredMorph
>>> textAnchorProperties padding top: 10)]
>>> + 		paddingChangesTo: [:line | | anchoredMorphTop |
>>> +  			anchoredMorphTop := anchoredMorph top - textMorph top.
>>> +  			self assert: anchoredMorphTop - 10 = line baseline ]!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testTextAnchorWithAForm (in category
>>> 'tests') -----
>>> + testTextAnchorWithAForm
>>> +
>>> + 	anchorAttribute anchoredMorph: (Form dotOfSize: 60).
>>> + 	self prepareTextMorph.
>>> + 	
>>> + 	self
>>> + 		assert: textMorph paragraph lines first baseline > 20;
>>> + 		assert: textMorph submorphs isEmpty!
>>>
>>> Item was added:
>>> + ----- Method:
>>> TextAnchorTest>>testTextAnchorWithMorphDefiningItsOwnBaseline (in category
>>> 'tests') -----
>>> + testTextAnchorWithMorphDefiningItsOwnBaseline
>>> +
>>> + 	self
>>> + 		after: [
>>> + 			anchoredMorph textAnchorProperties
>>> + 				morphBaselineGetter: #myBaseline;
>>> + 				verticalAlignment: #(baseline baseline).
>>> + 			anchoredMorph height: 20]
>>> + 		paddingChangesTo: [:line |
>>> +  			self assert: anchoredMorph top + 5 = line baseline ]!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTest>>testTextAnchorsDoNotBreakNormalRendering (in
>>> category 'tests') -----
>>> + testTextAnchorsDoNotBreakNormalRendering
>>> + 	
>>> + 	text := Text streamContents: [ :stream |
>>> + 		stream
>>> + 			nextPutAll: 'Here is an example ';
>>> + 			nextPutAll: (Text
>>> + 				string: Character startOfHeader asString
>>> + 				attributes: {});
>>> + 			nextPutAll: ' without a morph in the center. ' ].
>>> + 	
>>> + 	[self
>>> + 		shouldnt: [
>>> + 			self prepareTextMorph.
>>> + 			textMorph openInWorld]
>>> + 		raise: Error] ensure: [ textMorph delete ]!
>>>
>>> Item was added:
>>> + Morph subclass: #TextAnchorTestMorph
>>> + 	instanceVariableNames: ''
>>> + 	classVariableNames: ''
>>> + 	poolDictionaries: ''
>>> + 	category: 'MorphicTests-Text Support'!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTestMorph>>initialize (in category
>>> 'initialization') -----
>>> + initialize
>>> +
>>> + 	super initialize.
>>> + 	self height: 20.!
>>>
>>> Item was added:
>>> + ----- Method: TextAnchorTestMorph>>myBaseline (in category 'text-anchor')
>>> -----
>>> + myBaseline
>>> +
>>> + 	^ 5!
>>>
>>>
>>>
>>
>


More information about the Squeak-dev mailing list