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