<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">MC uses Version UUID&#39;s correctly to unambiguously identify its ancestry.  </span>Alas, the limitation of FileBased repository&#39;s cannot possibly support this ancestry model:</div>
<div class="gmail_quote"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px"><br></span></div><div class="gmail_quote"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">================</span></div>
<div class="gmail_quote"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Name: ToolBuilder-Tests-fbs.1</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Author: fbs</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Time: 15 December 2013, 9:56:20.616 am</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">UUID: 8772d620-cf6d-a540-9cf4-</span><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">c7925daf8c6a</span><br style="font-family:arial,sans-serif;font-size:12.800000190734863px">
<span style="font-family:arial,sans-serif;font-size:12.800000190734863px">Ancestors: ToolBuilder-Tests-fbs.1</span><br></div><div class="gmail_quote"><span style="font-family:arial,sans-serif;font-size:12.800000190734863px">=================</span></div>
<div class="gmail_quote"><br></div><div class="gmail_quote">The logic of SqueakSource, which sometimes involves diffing versions _on the server_ has not been tested with this situation.  And, we already know its delicate because a few weeks ago we found slow SS trying to diff a package with no ancestry and caught in an endless loop with growing memory.</div>
<div class="gmail_quote"><br></div><div class="gmail_quote">This is a new and unique and unnecessary scenario that invites another endless loop situation in the server.  That&#39;s why I jumped up and down.</div><div class="gmail_quote">
<br></div><div class="gmail_quote"><br></div><div class="gmail_quote"><br></div><div class="gmail_quote">On Sun, Dec 15, 2013 at 4:45 PM, Frank Shearar <span dir="ltr">&lt;<a href="mailto:frank.shearar@gmail.com" target="_blank">frank.shearar@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">What are you talking about? I issued a new package, with a new name.<br>

&quot;ToolBuilder-Kernel&quot; is not &quot;Toolbuilder-Kernel&quot;. Seriously, I don&#39;t<br>
appreciate this tone, Chris.<br>
<br>
Yes, I screwed up. But I don&#39;t need you jumping up and down.<br>
<br>
If you knew that a case sensitive difference in the package name was<br>
inadequate, maybe you should have warned me. That would have been<br>
useful. MC versions have UUIDs. If they do not use these versions to<br>
determine their ancestry, the model is _broken_.<br>
<span><font color="#888888"><br>
frank<br>
</font></span><div><div><br>
On 15 December 2013 22:33, Chris Muller &lt;<a href="mailto:asqueaker@gmail.com" target="_blank">asqueaker@gmail.com</a>&gt; wrote:<br>
&gt; Now I&#39;m starting to cuss!  I don&#39;t know why you didn&#39;t just start over again<br>
&gt; but I cannot tolerate a corrupt MC model from the get-go for this new<br>
&gt; package.<br>
&gt;<br>
&gt; MC cannot support two versions with the same exact name, _especially_ in the<br>
&gt; same ancestry!<br>
&gt;<br>
&gt; I didn&#39;t want to hassle you yet again so I went ahead and re-did it -- made<br>
&gt; ToolBuilder-Tests-cmm.1 and updated update-fbs.272 to point to that one.<br>
&gt; Deleted your fbs.1 from the repository.<br>
&gt;<br>
&gt;  - Chris<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Sun, Dec 15, 2013 at 4:25 PM, &lt;<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Chris Muller uploaded a new version of ToolBuilder-Tests to project The<br>
&gt;&gt; Trunk:<br>
&gt;&gt; <a href="http://source.squeak.org/trunk/ToolBuilder-Tests-cmm.1.mcz" target="_blank">http://source.squeak.org/trunk/ToolBuilder-Tests-cmm.1.mcz</a><br>
&gt;&gt;<br>
&gt;&gt; ==================== Summary ====================<br>
&gt;&gt;<br>
&gt;&gt; Name: ToolBuilder-Tests-cmm.1<br>
&gt;&gt; Author: cmm<br>
&gt;&gt; Time: 15 December 2013, 4:25:47.507 pm<br>
&gt;&gt; UUID: e77685b9-ca09-40c0-b84e-6caee75f4075<br>
&gt;&gt; Ancestors:<br>
&gt;&gt;<br>
&gt;&gt; ToolBuilder-Tests contains the specification that a compliant ToolBuilder<br>
&gt;&gt; must fulfill, together with the unit tests for ToolBuilder-Kernel.<br>
&gt;&gt;<br>
&gt;&gt; ==================== Snapshot ====================<br>
&gt;&gt;<br>
&gt;&gt; SystemOrganization addCategory: #&#39;ToolBuilder-Tests&#39;!<br>
&gt;&gt;<br>
&gt;&gt; TestCase subclass: #PluggableMenuItemSpecTests<br>
&gt;&gt;         instanceVariableNames: &#39;&#39;<br>
&gt;&gt;         classVariableNames: &#39;&#39;<br>
&gt;&gt;         poolDictionaries: &#39;&#39;<br>
&gt;&gt;         category: &#39;ToolBuilder-Tests&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method:<br>
&gt;&gt; PluggableMenuItemSpecTests&gt;&gt;testBeCheckableMakesItemCheckable (in category<br>
&gt;&gt; &#39;as yet unclassified&#39;) -----<br>
&gt;&gt; testBeCheckableMakesItemCheckable<br>
&gt;&gt;         | itemSpec |<br>
&gt;&gt;         itemSpec := PluggableMenuItemSpec new.<br>
&gt;&gt;         itemSpec beCheckable.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;Item not<br>
&gt;&gt; checkable&#39;.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: PluggableMenuItemSpecTests&gt;&gt;testByDefaultNotCheckable (in<br>
&gt;&gt; category &#39;as yet unclassified&#39;) -----<br>
&gt;&gt; testByDefaultNotCheckable<br>
&gt;&gt;         | itemSpec |<br>
&gt;&gt;         itemSpec := PluggableMenuItemSpec new.<br>
&gt;&gt;         self deny: itemSpec isCheckable.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: PluggableMenuItemSpecTests&gt;&gt;testNoMarkerMakesItemChecked (in<br>
&gt;&gt; category &#39;as yet unclassified&#39;) -----<br>
&gt;&gt; testNoMarkerMakesItemChecked<br>
&gt;&gt;         | itemSpec |<br>
&gt;&gt;         itemSpec := PluggableMenuItemSpec new.<br>
&gt;&gt;         itemSpec label: &#39;&lt;no&gt;no&#39;.<br>
&gt;&gt;         itemSpec analyzeLabel.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;item not<br>
&gt;&gt; checkable&#39;.<br>
&gt;&gt;         self deny: itemSpec checked description: &#39;item checked&#39;.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: PluggableMenuItemSpecTests&gt;&gt;testOffMarkerMakesItemChecked<br>
&gt;&gt; (in category &#39;as yet unclassified&#39;) -----<br>
&gt;&gt; testOffMarkerMakesItemChecked<br>
&gt;&gt;         | itemSpec |<br>
&gt;&gt;         itemSpec := PluggableMenuItemSpec new.<br>
&gt;&gt;         itemSpec label: &#39;&lt;off&gt;off&#39;.<br>
&gt;&gt;         itemSpec analyzeLabel.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;item not<br>
&gt;&gt; checkable&#39;.<br>
&gt;&gt;         self deny: itemSpec checked description: &#39;item checked&#39;.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: PluggableMenuItemSpecTests&gt;&gt;testOnMarkerMakesItemChecked (in<br>
&gt;&gt; category &#39;as yet unclassified&#39;) -----<br>
&gt;&gt; testOnMarkerMakesItemChecked<br>
&gt;&gt;         | itemSpec |<br>
&gt;&gt;         itemSpec := PluggableMenuItemSpec new.<br>
&gt;&gt;         itemSpec label: &#39;&lt;on&gt;on&#39;.<br>
&gt;&gt;         itemSpec analyzeLabel.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;item not<br>
&gt;&gt; checkable&#39;.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;item not<br>
&gt;&gt; checked&#39;.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: PluggableMenuItemSpecTests&gt;&gt;testYesMarkerMakesItemChecked<br>
&gt;&gt; (in category &#39;as yet unclassified&#39;) -----<br>
&gt;&gt; testYesMarkerMakesItemChecked<br>
&gt;&gt;         | itemSpec |<br>
&gt;&gt;         itemSpec := PluggableMenuItemSpec new.<br>
&gt;&gt;         itemSpec label: &#39;&lt;yes&gt;on&#39;.<br>
&gt;&gt;         itemSpec analyzeLabel.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;item not<br>
&gt;&gt; checkable&#39;.<br>
&gt;&gt;         self assert: itemSpec isCheckable description: &#39;item not<br>
&gt;&gt; checked&#39;.!<br>
&gt;&gt;<br>
&gt;&gt; TestCase subclass: #ToolBuilderTests<br>
&gt;&gt;         instanceVariableNames: &#39;builder widget queries&#39;<br>
&gt;&gt;         classVariableNames: &#39;&#39;<br>
&gt;&gt;         poolDictionaries: &#39;&#39;<br>
&gt;&gt;         category: &#39;ToolBuilder-Tests&#39;!<br>
&gt;&gt;<br>
&gt;&gt; !ToolBuilderTests commentStamp: &#39;ar 2/11/2005 15:01&#39; prior: 0!<br>
&gt;&gt; Some tests to make sure ToolBuilder does what it says.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests class&gt;&gt;isAbstract (in category &#39;testing&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; isAbstract<br>
&gt;&gt;         ^self == ToolBuilderTests!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;acceptWidgetText (in category &#39;support&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; acceptWidgetText<br>
&gt;&gt;         &quot;accept text in widget&quot;<br>
&gt;&gt;         ^ self subclassResponsibility!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;assertItemFiresWith: (in category<br>
&gt;&gt; &#39;tests-menus&#39;) -----<br>
&gt;&gt; assertItemFiresWith: aBlock<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableMenuSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         aBlock value: spec.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self fireMenuItemWidget.<br>
&gt;&gt;         self assert: (queries includes: #fireMenuAction)!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;buttonWidgetEnabled (in category<br>
&gt;&gt; &#39;support&#39;) -----<br>
&gt;&gt; buttonWidgetEnabled<br>
&gt;&gt;         &quot;Answer whether the current widget (a button) is currently<br>
&gt;&gt; enabled&quot;<br>
&gt;&gt;<br>
&gt;&gt;         ^ widget getModelState!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;changeListWidget (in category &#39;support&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; changeListWidget<br>
&gt;&gt;         &quot;Change the list widget&#39;s selection index&quot;<br>
&gt;&gt;         self subclassResponsibility!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;expectedButtonSideEffects (in category<br>
&gt;&gt; &#39;support&#39;) -----<br>
&gt;&gt; expectedButtonSideEffects<br>
&gt;&gt;         &quot;side effect queries we expect to see on buttons&quot;<br>
&gt;&gt;         ^#()!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;fireButton (in category &#39;tests-button&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; fireButton<br>
&gt;&gt;         queries add: #fireButton.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;fireButtonWidget (in category &#39;support&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; fireButtonWidget<br>
&gt;&gt;         &quot;Fire the widget, e.g., perform what is needed for the guy to<br>
&gt;&gt; trigger its action&quot;<br>
&gt;&gt;         self subclassResponsibility!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;fireMenuAction (in category &#39;tests-menus&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; fireMenuAction<br>
&gt;&gt;         queries add: #fireMenuAction!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;fireMenuItemWidget (in category<br>
&gt;&gt; &#39;tests-menus&#39;) -----<br>
&gt;&gt; fireMenuItemWidget<br>
&gt;&gt;         self subclassResponsibility!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getChildren (in category &#39;tests-panel&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getChildren<br>
&gt;&gt;         queries add: #getChildren.<br>
&gt;&gt;         ^#()!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getChildrenOf: (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getChildrenOf: item<br>
&gt;&gt;         queries add: #getChildrenOf.<br>
&gt;&gt;         ^(1 to: 9) asArray!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getColor (in category &#39;tests-text&#39;) -----<br>
&gt;&gt; getColor<br>
&gt;&gt;         queries add: #getColor.<br>
&gt;&gt;         ^Color tan!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getEnabled (in category &#39;tests-button&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getEnabled<br>
&gt;&gt;         queries add: #getEnabled.<br>
&gt;&gt;         ^true!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getHelpOf: (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getHelpOf: item<br>
&gt;&gt;         ^&#39;help&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getIconOf: (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getIconOf: item<br>
&gt;&gt;         queries add: #getIconOf.<br>
&gt;&gt;         ^nil!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getLabel (in category &#39;tests-button&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getLabel<br>
&gt;&gt;         queries add: #getLabel.<br>
&gt;&gt;         ^&#39;TestLabel&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getLabelOf: (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getLabelOf: item<br>
&gt;&gt;         queries add: #getLabelOf.<br>
&gt;&gt;         ^item asString!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getList (in category &#39;tests-lists&#39;) -----<br>
&gt;&gt; getList<br>
&gt;&gt;         queries add: #getList.<br>
&gt;&gt;         ^(1 to: 100) collect:[:i| i printString].!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getListIndex (in category &#39;tests-lists&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getListIndex<br>
&gt;&gt;         queries add: #getListIndex.<br>
&gt;&gt;         ^13!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getListSelection (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; getListSelection<br>
&gt;&gt;         queries add: #getListSelection.<br>
&gt;&gt;         ^&#39;55&#39;!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getMenu: (in category &#39;tests-lists&#39;) -----<br>
&gt;&gt; getMenu: aMenu<br>
&gt;&gt;         queries add: #getMenu.<br>
&gt;&gt;         ^aMenu!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getRoots (in category &#39;tests-trees&#39;) -----<br>
&gt;&gt; getRoots<br>
&gt;&gt;         queries add: #getRoots.<br>
&gt;&gt;         ^(1 to: 9) asArray!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getState (in category &#39;tests-button&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; getState<br>
&gt;&gt;         queries add: #getState.<br>
&gt;&gt;         ^true!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getText (in category &#39;tests-text&#39;) -----<br>
&gt;&gt; getText<br>
&gt;&gt;         queries add: #getText.<br>
&gt;&gt;         ^Text new!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getTextSelection (in category<br>
&gt;&gt; &#39;tests-text&#39;) -----<br>
&gt;&gt; getTextSelection<br>
&gt;&gt;         queries add: #getTextSelection.<br>
&gt;&gt;         ^(1 to: 0)!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;getTreeSelectionPath (in category<br>
&gt;&gt; &#39;tests-trees&#39;) -----<br>
&gt;&gt; getTreeSelectionPath<br>
&gt;&gt;         queries add: #getTreeSelectionPath.<br>
&gt;&gt;         ^{2. 4. 3}!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;hasChildren: (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; hasChildren: item<br>
&gt;&gt;         queries add: #hasChildren.<br>
&gt;&gt;         ^true!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;keyPress: (in category &#39;tests-lists&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; keyPress: key<br>
&gt;&gt;         queries add: #keyPress.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeButton (in category &#39;tests-button&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeButton<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeButtonSpec.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         ^widget!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeButtonSpec (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; makeButtonSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec name: #button.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec label: #getLabel.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         spec state: #getState.<br>
&gt;&gt;         spec enabled: #getEnabled.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeInputField (in category &#39;tests-input&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeInputField<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeInputFieldSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeInputFieldSpec (in category<br>
&gt;&gt; &#39;tests-input&#39;) -----<br>
&gt;&gt; makeInputFieldSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableInputFieldSpec new.<br>
&gt;&gt;         spec name: #input.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec getText: #getText.<br>
&gt;&gt;         spec selection: #getTextSelection.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         &quot;&lt;-- the following cannot be tested very well --&gt;&quot;<br>
&gt;&gt;         spec setText: #setText:.<br>
&gt;&gt;         spec menu: #getMenu:.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeItemList (in category &#39;tests-lists&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeItemList<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeItemListSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeItemListSpec (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; makeItemListSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableListSpec new.<br>
&gt;&gt;         spec name: #list.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec list: #getList.<br>
&gt;&gt;         spec getSelected: #getListSelection.<br>
&gt;&gt;         &quot;&lt;-- the following cannot be tested very well --&gt;&quot;<br>
&gt;&gt;         spec setSelected: #setListSelection:.<br>
&gt;&gt;         spec menu: #getMenu:.<br>
&gt;&gt;         spec keyPress: #keyPress:.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeList (in category &#39;tests-lists&#39;) -----<br>
&gt;&gt; makeList<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeListSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeListSpec (in category &#39;tests-lists&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeListSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableListSpec new.<br>
&gt;&gt;         spec name: #list.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec list: #getList.<br>
&gt;&gt;         spec getIndex: #getListIndex.<br>
&gt;&gt;         &quot;&lt;-- the following cannot be tested very well --&gt;&quot;<br>
&gt;&gt;         spec setIndex: #setListIndex:.<br>
&gt;&gt;         spec menu: #getMenu:.<br>
&gt;&gt;         spec keyPress: #keyPress:.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makePanel (in category &#39;tests-panel&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makePanel<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makePanelSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makePanelSpec (in category &#39;tests-panel&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makePanelSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggablePanelSpec new.<br>
&gt;&gt;         spec name: #panel.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec children: #getChildren.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeText (in category &#39;tests-text&#39;) -----<br>
&gt;&gt; makeText<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeTextSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeTextSpec (in category &#39;tests-text&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeTextSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableTextSpec new.<br>
&gt;&gt;         spec name: #text.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec getText: #getText.<br>
&gt;&gt;         spec selection: #getTextSelection.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         &quot;&lt;-- the following cannot be tested very well --&gt;&quot;<br>
&gt;&gt;         spec setText: #setText:.<br>
&gt;&gt;         spec menu: #getMenu:.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeTree (in category &#39;tests-trees&#39;) -----<br>
&gt;&gt; makeTree<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeTreeSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeTreeSpec (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeTreeSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableTreeSpec new.<br>
&gt;&gt;         spec name: #tree.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec roots: #getRoots.<br>
&gt;&gt;         &quot;&lt;-- the following cannot be tested very well --&gt;&quot;<br>
&gt;&gt;         spec getSelectedPath: #getTreeSelectionPath.<br>
&gt;&gt;         spec getChildren: #getChildrenOf:.<br>
&gt;&gt;         spec hasChildren: #hasChildren:.<br>
&gt;&gt;         spec label: #getLabelOf:.<br>
&gt;&gt;         spec icon: #getIconOf:.<br>
&gt;&gt;         spec help: #getHelpOf:.<br>
&gt;&gt;         spec setSelected: #setTreeSelection:.<br>
&gt;&gt;         spec menu: #getMenu:.<br>
&gt;&gt;         spec keyPress: #keyPress:.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeWindow (in category &#39;tests-window&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; makeWindow<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeWindowSpec.<br>
&gt;&gt;         widget := builder build: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;makeWindowSpec (in category<br>
&gt;&gt; &#39;tests-window&#39;) -----<br>
&gt;&gt; makeWindowSpec<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableWindowSpec new.<br>
&gt;&gt;         spec name: #window.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec children: #getChildren.<br>
&gt;&gt;         spec label: #getLabel.<br>
&gt;&gt;         spec closeAction: #noteWindowClosed.<br>
&gt;&gt;         ^spec!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;noteWindowClosed (in category<br>
&gt;&gt; &#39;tests-window&#39;) -----<br>
&gt;&gt; noteWindowClosed<br>
&gt;&gt;         queries add: #noteWindowClosed.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;openWindow (in category &#39;tests-window&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; openWindow<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := self makeWindowSpec.<br>
&gt;&gt;         widget := builder open: spec.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;returnFalse (in category &#39;support&#39;) -----<br>
&gt;&gt; returnFalse<br>
&gt;&gt;         ^false!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;returnTrue (in category &#39;support&#39;) -----<br>
&gt;&gt; returnTrue<br>
&gt;&gt;         ^true!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;setListIndex: (in category &#39;tests-lists&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; setListIndex: index<br>
&gt;&gt;         queries add: #setListIndex.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;setListSelection: (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; setListSelection: newIndex<br>
&gt;&gt;         queries add: #setListSelection.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;setText: (in category &#39;tests-text&#39;) -----<br>
&gt;&gt; setText: newText<br>
&gt;&gt;         queries add: #setText.<br>
&gt;&gt;         ^false!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;setTreeSelection: (in category<br>
&gt;&gt; &#39;tests-trees&#39;) -----<br>
&gt;&gt; setTreeSelection: node<br>
&gt;&gt;         queries add: #setTreeSelection.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;setUp (in category &#39;support&#39;) -----<br>
&gt;&gt; setUp<br>
&gt;&gt;         queries := IdentitySet new.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;shutDown (in category &#39;support&#39;) -----<br>
&gt;&gt; shutDown<br>
&gt;&gt;         self myDependents: nil!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testAddTargetSelectorArgumentList (in<br>
&gt;&gt; category &#39;tests-menus&#39;) -----<br>
&gt;&gt; testAddTargetSelectorArgumentList<br>
&gt;&gt;         self assertItemFiresWith:<br>
&gt;&gt;                 [:spec | spec<br>
&gt;&gt;                                 add: &#39;Menu Item&#39;<br>
&gt;&gt;                                 target: self<br>
&gt;&gt;                                 selector: #fireMenuAction<br>
&gt;&gt;                                 argumentList: #()]!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonFiresBlock (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonFiresBlock<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec action: [self fireButton].<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self fireButtonWidget.<br>
&gt;&gt;         self assert: (queries includes: #fireButton).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonFiresMessage (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonFiresMessage<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec action: (MessageSend receiver: self selector: #fireButton<br>
&gt;&gt; arguments: #()).<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self fireButtonWidget.<br>
&gt;&gt;         self assert: (queries includes: #fireButton).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonFiresSymbol (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonFiresSymbol<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec action: #fireButton.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self fireButtonWidget.<br>
&gt;&gt;         self assert: (queries includes: #fireButton).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonInitiallyDisabled (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonInitiallyDisabled<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec label: #getLabel.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         spec state: #getState.<br>
&gt;&gt;         spec enabled: #returnFalse.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         self deny: (self buttonWidgetEnabled)!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonInitiallyDisabledSelector (in<br>
&gt;&gt; category &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonInitiallyDisabledSelector<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec label: #getLabel.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         spec state: #getState.<br>
&gt;&gt;         spec enabled: #returnFalse.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         self deny: (self buttonWidgetEnabled)!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonInitiallyEnabled (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonInitiallyEnabled<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec label: #getLabel.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         spec state: #getState.<br>
&gt;&gt;         spec enabled: #returnTrue.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         self assert: (self buttonWidgetEnabled)!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonInitiallyEnabledSelector (in<br>
&gt;&gt; category &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonInitiallyEnabledSelector<br>
&gt;&gt;         | spec |<br>
&gt;&gt;         spec := builder pluggableButtonSpec new.<br>
&gt;&gt;         spec model: self.<br>
&gt;&gt;         spec label: #getLabel.<br>
&gt;&gt;         spec color: #getColor.<br>
&gt;&gt;         spec state: #getState.<br>
&gt;&gt;         spec enabled: #returnTrue.<br>
&gt;&gt;         widget := builder build: spec.<br>
&gt;&gt;         self assert: (self buttonWidgetEnabled)!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testButtonWidgetID (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testButtonWidgetID<br>
&gt;&gt;         self makeButton.<br>
&gt;&gt;         self assert: (builder widgetAt: #button) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetButtonColor (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testGetButtonColor<br>
&gt;&gt;         self makeButton.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getColor.<br>
&gt;&gt;         self assert: (queries includes: #getColor).<br>
&gt;&gt;         self assert: self widgetColor = self getColor.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetButtonEnabled (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testGetButtonEnabled<br>
&gt;&gt;         self makeButton.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getEnabled.<br>
&gt;&gt;         self assert: (queries includes: #getEnabled).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetButtonLabel (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testGetButtonLabel<br>
&gt;&gt;         self makeButton.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getLabel.<br>
&gt;&gt;         self assert: (queries includes: #getLabel).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetButtonSideEffects (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testGetButtonSideEffects<br>
&gt;&gt;         self makeButton.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self expectedButtonSideEffects do:[:sym|<br>
&gt;&gt;                 self assert: (queries includes: sym).<br>
&gt;&gt;                 queries remove: sym.<br>
&gt;&gt;         ].<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetButtonState (in category<br>
&gt;&gt; &#39;tests-button&#39;) -----<br>
&gt;&gt; testGetButtonState<br>
&gt;&gt;         self makeButton.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getState.<br>
&gt;&gt;         self assert: (queries includes: #getState).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetInputFieldColor (in category<br>
&gt;&gt; &#39;tests-input&#39;) -----<br>
&gt;&gt; testGetInputFieldColor<br>
&gt;&gt;         self makeInputField.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getColor.<br>
&gt;&gt;         self assert: (queries includes: #getColor).<br>
&gt;&gt;         self assert: self widgetColor = self getColor.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetInputFieldSelection (in category<br>
&gt;&gt; &#39;tests-input&#39;) -----<br>
&gt;&gt; testGetInputFieldSelection<br>
&gt;&gt;         self makeInputField.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getTextSelection.<br>
&gt;&gt;         self assert: (queries includes: #getTextSelection).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetInputFieldSideEffectFree (in<br>
&gt;&gt; category &#39;tests-input&#39;) -----<br>
&gt;&gt; testGetInputFieldSideEffectFree<br>
&gt;&gt;         self makeInputField.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetInputFieldText (in category<br>
&gt;&gt; &#39;tests-input&#39;) -----<br>
&gt;&gt; testGetInputFieldText<br>
&gt;&gt;         self makeInputField.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getText.<br>
&gt;&gt;         self assert: (queries includes: #getText).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetItemListSideEffectFree (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testGetItemListSideEffectFree<br>
&gt;&gt;         self makeItemList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetList (in category &#39;tests-lists&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; testGetList<br>
&gt;&gt;         self makeList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getList.<br>
&gt;&gt;         self assert: (queries includes: #getList).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetListIndex (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testGetListIndex<br>
&gt;&gt;         self makeList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getListIndex.<br>
&gt;&gt;         self assert: (queries includes: #getListIndex).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetListSelection (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testGetListSelection<br>
&gt;&gt;         self makeItemList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getListSelection.<br>
&gt;&gt;         self assert: (queries includes: #getListSelection).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetListSideEffectFree (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testGetListSideEffectFree<br>
&gt;&gt;         self makeList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetPanelChildren (in category<br>
&gt;&gt; &#39;tests-panel&#39;) -----<br>
&gt;&gt; testGetPanelChildren<br>
&gt;&gt;         self makePanel.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getChildren.<br>
&gt;&gt;         self assert: (queries includes: #getChildren).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetPanelSideEffectFree (in category<br>
&gt;&gt; &#39;tests-panel&#39;) -----<br>
&gt;&gt; testGetPanelSideEffectFree<br>
&gt;&gt;         self makePanel.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetText (in category &#39;tests-text&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; testGetText<br>
&gt;&gt;         self makeText.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getText.<br>
&gt;&gt;         self assert: (queries includes: #getText).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetTextColor (in category<br>
&gt;&gt; &#39;tests-text&#39;) -----<br>
&gt;&gt; testGetTextColor<br>
&gt;&gt;         self makeText.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getColor.<br>
&gt;&gt;         self assert: (queries includes: #getColor).<br>
&gt;&gt;         self assert: self widgetColor = self getColor.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetTextSelection (in category<br>
&gt;&gt; &#39;tests-text&#39;) -----<br>
&gt;&gt; testGetTextSelection<br>
&gt;&gt;         self makeText.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getTextSelection.<br>
&gt;&gt;         self assert: (queries includes: #getTextSelection).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetTextSideEffectFree (in category<br>
&gt;&gt; &#39;tests-text&#39;) -----<br>
&gt;&gt; testGetTextSideEffectFree<br>
&gt;&gt;         self makeText.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetWindowChildren (in category<br>
&gt;&gt; &#39;tests-window&#39;) -----<br>
&gt;&gt; testGetWindowChildren<br>
&gt;&gt;         self makeWindow.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getChildren.<br>
&gt;&gt;         self assert: (queries includes: #getChildren).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetWindowLabel (in category<br>
&gt;&gt; &#39;tests-window&#39;) -----<br>
&gt;&gt; testGetWindowLabel<br>
&gt;&gt;         self makeWindow.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getLabel.<br>
&gt;&gt;         self assert: (queries includes: #getLabel).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testGetWindowSideEffectFree (in category<br>
&gt;&gt; &#39;tests-window&#39;) -----<br>
&gt;&gt; testGetWindowSideEffectFree<br>
&gt;&gt;         self makeWindow.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #testSignalWithNoDiscernableEffect.<br>
&gt;&gt;         self assert: queries isEmpty.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testInputWidgetID (in category<br>
&gt;&gt; &#39;tests-input&#39;) -----<br>
&gt;&gt; testInputWidgetID<br>
&gt;&gt;         self makeInputField.<br>
&gt;&gt;         self assert: (builder widgetAt: #input) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testItemListWidgetID (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testItemListWidgetID<br>
&gt;&gt;         self makeItemList.<br>
&gt;&gt;         self assert: (builder widgetAt: #list) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testListWidgetID (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testListWidgetID<br>
&gt;&gt;         self makeList.<br>
&gt;&gt;         self assert: (builder widgetAt: #list) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testPanelWidgetID (in category<br>
&gt;&gt; &#39;tests-panel&#39;) -----<br>
&gt;&gt; testPanelWidgetID<br>
&gt;&gt;         self makePanel.<br>
&gt;&gt;         self assert: (builder widgetAt: #panel) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testSetInputField (in category<br>
&gt;&gt; &#39;tests-input&#39;) -----<br>
&gt;&gt; testSetInputField<br>
&gt;&gt;         self makeInputField.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self acceptWidgetText.<br>
&gt;&gt;         self assert: (queries includes: #setText).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testSetListIndex (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testSetListIndex<br>
&gt;&gt;         self makeList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changeListWidget.<br>
&gt;&gt;         self assert: (queries includes: #setListIndex).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testSetListSelection (in category<br>
&gt;&gt; &#39;tests-lists&#39;) -----<br>
&gt;&gt; testSetListSelection<br>
&gt;&gt;         self makeItemList.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changeListWidget.<br>
&gt;&gt;         self assert: (queries includes: #setListSelection).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testSetText (in category &#39;tests-text&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; testSetText<br>
&gt;&gt;         self makeText.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self acceptWidgetText.<br>
&gt;&gt;         self assert: (queries includes: #setText).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testTextWidgetID (in category<br>
&gt;&gt; &#39;tests-text&#39;) -----<br>
&gt;&gt; testTextWidgetID<br>
&gt;&gt;         self makeText.<br>
&gt;&gt;         self assert: (builder widgetAt: #text) == widget!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testTreeExpandPath (in category<br>
&gt;&gt; &#39;tests-trees&#39;) -----<br>
&gt;&gt; testTreeExpandPath<br>
&gt;&gt;         &quot;@@@@: REMOVE THIS - it&#39;s a hack (changed: #openPath)&quot;<br>
&gt;&gt;         self makeTree.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: {#openPath. &#39;4&#39;. &#39;2&#39;. &#39;3&#39;}.<br>
&gt;&gt;         self waitTick.<br>
&gt;&gt;         self assert: (queries includes: #getChildrenOf).<br>
&gt;&gt;         self assert: (queries includes: #setTreeSelection).<br>
&gt;&gt;         self assert: (queries includes: #getLabelOf).<br>
&gt;&gt; !<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testTreeExpandPathFirst (in category<br>
&gt;&gt; &#39;tests-trees&#39;) -----<br>
&gt;&gt; testTreeExpandPathFirst<br>
&gt;&gt;         &quot;@@@@: REMOVE THIS - it&#39;s a hack (changed: #openPath)&quot;<br>
&gt;&gt;         self makeTree.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: {#openPath. &#39;1&#39;. &#39;2&#39;. &#39;2&#39;}.<br>
&gt;&gt;         self waitTick.<br>
&gt;&gt;         self assert: (queries includes: #getChildrenOf).<br>
&gt;&gt;         self assert: (queries includes: #setTreeSelection).<br>
&gt;&gt;         self assert: (queries includes: #getLabelOf).<br>
&gt;&gt; !<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testTreeGetSelectionPath (in category<br>
&gt;&gt; &#39;tests-trees&#39;) -----<br>
&gt;&gt; testTreeGetSelectionPath<br>
&gt;&gt;         self makeTree.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getTreeSelectionPath.<br>
&gt;&gt;         self waitTick.<br>
&gt;&gt;         self assert: (queries includes: #getTreeSelectionPath).<br>
&gt;&gt;         self assert: (queries includes: #getChildrenOf).<br>
&gt;&gt;         self assert: (queries includes: #setTreeSelection).<br>
&gt;&gt; !<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testTreeRoots (in category &#39;tests-trees&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; testTreeRoots<br>
&gt;&gt;         self makeTree.<br>
&gt;&gt;         queries := IdentitySet new.<br>
&gt;&gt;         self changed: #getRoots.<br>
&gt;&gt;         self assert: (queries includes: #getRoots).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testTreeWidgetID (in category<br>
&gt;&gt; &#39;tests-trees&#39;) -----<br>
&gt;&gt; testTreeWidgetID<br>
&gt;&gt;         self makeTree.<br>
&gt;&gt;         self assert: (builder widgetAt: #tree) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testWindowCloseAction (in category<br>
&gt;&gt; &#39;tests-window&#39;) -----<br>
&gt;&gt; testWindowCloseAction<br>
&gt;&gt;         self openWindow.<br>
&gt;&gt;         builder close: widget.<br>
&gt;&gt;         self assert: (queries includes: #noteWindowClosed).!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;testWindowID (in category &#39;tests-window&#39;)<br>
&gt;&gt; -----<br>
&gt;&gt; testWindowID<br>
&gt;&gt;         self makeWindow.<br>
&gt;&gt;         self assert: (builder widgetAt: #window) == widget.!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;waitTick (in category &#39;support&#39;) -----<br>
&gt;&gt; waitTick<br>
&gt;&gt;         ^nil!<br>
&gt;&gt;<br>
&gt;&gt; ----- Method: ToolBuilderTests&gt;&gt;widgetColor (in category &#39;support&#39;) -----<br>
&gt;&gt; widgetColor<br>
&gt;&gt;         &quot;Answer color from widget&quot;<br>
&gt;&gt;         self subclassResponsibility<br>
&gt;&gt;<br>
&gt;&gt;         &quot;NOTE: You can bail out if you don&#39;t know how to get the color<br>
&gt;&gt; from the widget:<br>
&gt;&gt;                 ^self getColor<br>
&gt;&gt;         will work.&quot;!<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div></div>