refactoring_custom/SmallSense__CustomNewSystemBrowserTests.st
author convert-repo
Wed, 11 Dec 2019 04:28:36 +0000
changeset 1116 b51ace366efc
parent 1072 a44c741ee5ef
permissions -rw-r--r--
update tags

"
A custom code generation and refactoring support for Smalltalk/X
Copyright (C) 2013-2015 Jakub Nesveda
Copyright (C) 2015 Jan Vrany

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
"
"{ Package: 'stx:goodies/smallsense/refactoring_custom' }"

"{ NameSpace: SmallSense }"

Smalltalk::TestCase subclass:#CustomNewSystemBrowserTests
	instanceVariableNames:'browser mock menu manager generatorClassMock'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Refactoring-Custom-UI-Tests'
!

!CustomNewSystemBrowserTests class methodsFor:'documentation'!

copyright
"
A custom code generation and refactoring support for Smalltalk/X
Copyright (C) 2013-2015 Jakub Nesveda
Copyright (C) 2015 Jan Vrany

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
"
! !

!CustomNewSystemBrowserTests methodsFor:'initialization & release'!

setUp
    super setUp.

    mock := CustomMock new.
    menu := Menu labels: 'label' values: nil.
    browser := (mock mockOf: Tools::NewSystemBrowser).
    mock createMockGetters: browser class forSelectors: {
        'information'. 'theSingleSelectedClass'. 'switchToClass'. 'selectProtocol'
    }.
    browser
        compileMockMethod: 'information: aString
            self objectAttributeAt: #information put: aString';
        compileMockMethod: 'theSingleSelectedClass: aClass
            self objectAttributeAt: #theSingleSelectedClass put: aClass';
        compileMockMethod: 'createBuffer ^ true';
        compileMockMethod: 'switchToClass: aClass
            self objectAttributeAt: #switchToClass put: aClass';
        compileMockMethod: 'selectProtocol: aProtocol
            self objectAttributeAt: #selectProtocol put: aProtocol';
        compileMockMethod: 'customMenuBuilder
            | builder |

            builder := super customMenuBuilder.
            builder manager: (self objectAttributeAt: #manager).
            ^ builder'.

    manager := mock mockOf: Object.
    manager compileMockMethod: 'generatorsAndRefactoringsSelect: aBlock
        ^ self objectAttributeAt: #codeGenerators';
        objectAttributeAt: #codeGenerators put: OrderedCollection new.  

    browser objectAttributeAt: #manager put: manager.

    generatorClassMock := mock mockClassOf: Object.
    mock createMockGetters: generatorClassMock forSelectors: {'label'. 'group'}.

    "Modified: / 24-01-2015 / 20:08:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

tearDown

    mock unmockAll.
    
    super tearDown.

    "Modified: / 26-12-2014 / 19:17:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!CustomNewSystemBrowserTests methodsFor:'private'!

addGenerator: aLabel group: aGroup
    "Creates initialized code generator mock and adds it to managers generators"
    | generator |

    generator := generatorClassMock new
        objectAttributeAt: #label put: aLabel;
        objectAttributeAt: #group put: aGroup;
        yourself.

    (manager objectAttributeAt: #codeGenerators) add: generator.

    ^ generator

    "Created: / 29-12-2014 / 08:51:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

menuItemLabels
    "Helper which returns labels from menu item as collection as string.
    We are comparing labels, because menu items are not comparable - 
    MenuItem label: 'Label' not equals MenuItem label: 'Label'"

    ^ (OrderedCollection streamContents: [ :stream |
        menu itemsDo: [ :item |
            stream nextPut: item label.
            item submenuChannel notNil ifTrue: [ 
                stream nextPut: (OrderedCollection streamContents: [ :innerStream |
                    item submenuChannel value itemsDo: [ :innerItem |
                        innerStream nextPut: innerItem label
                    ]
                ]) asArray
            ]
        ]
    ]) asArray

    "Created: / 29-12-2014 / 08:52:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!CustomNewSystemBrowserTests methodsFor:'tests'!

test_class_menu_extension_custom_generators
    | expectedMenu actualMenu |

    menu := Menu labels: 'Generate
label' values: nil.

    expectedMenu := {'Generate'. 'Generate - Custom'. {'Generator_01'. '-'. 'Generator_02'}. 'label'}.

    self
        addGenerator: 'Generator_01' group: #();
        addGenerator: 'Generator_02' group: #(Group).

    browser classMenuExtensionCustomGenerators: menu.
    actualMenu := self menuItemLabels.

    self assert: expectedMenu = actualMenu

    "Created: / 29-12-2014 / 08:56:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_class_menu_extension_custom_refactorings
    | expectedMenu actualMenu |

    menu := Menu labels: 'Generate
label' values: nil.

    expectedMenu := {'Generate'. 'Refactor - Custom'. {'Generator_01'. '-'. 'Generator_02'}. 'label'}.

    self
        addGenerator: 'Generator_01' group: #();
        addGenerator: 'Generator_02' group: #(Group).

    browser classMenuExtensionCustomRefactorings: menu.
    actualMenu := self menuItemLabels.

    self assert: expectedMenu = actualMenu

    "Created: / 29-12-2014 / 09:10:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_class_menu_extension_navigate_to_test_case_custom_extensions
    | expectedClass actualClass |

    expectedClass := CustomRBMethodTests.
    browser theSingleSelectedClass: RBMethod.
    browser classMenuExtensionNavigateToTestCase: menu.
    menu lastItem itemValue value. "Call menu item action block"
    actualClass := browser switchToClass.   

    self assert: expectedClass = actualClass.
    self assert: (browser selectProtocol) == #tests

    "Created: / 26-12-2014 / 18:58:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 24-01-2015 / 19:53:29 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_class_menu_extension_navigate_to_test_case_found
    | expectedClass actualClass |

    expectedClass := CustomContextTests.
    browser theSingleSelectedClass: CustomContext.
    browser classMenuExtensionNavigateToTestCase: menu.
    menu lastItem itemValue value. "Call menu item action block"
    actualClass := browser switchToClass.

    self assert: expectedClass = actualClass.
    self assert: (browser selectProtocol) == #tests

    "Created: / 26-12-2014 / 18:53:34 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_class_menu_extension_navigate_to_test_case_not_found
    | expectedInformation actualInformation |

    expectedInformation := 'Test Case named SmallSense::CustomNewSystemBrowserTestsTests not found'.
    browser theSingleSelectedClass: CustomNewSystemBrowserTests.
    browser classMenuExtensionNavigateToTestCase: menu.
    menu lastItem itemValue value. "Call menu item action block"
    actualInformation := browser information.

    self assert: expectedInformation = actualInformation

    "Created: / 26-12-2014 / 18:32:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
    "Modified: / 12-06-2015 / 21:00:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test_class_menu_extension_navigate_to_test_case_placed_after_generate
    | expectedPosition actualPosition foundItem |

    expectedPosition := 3.

    menu := Menu labels: 'Label_01
Generate
Label_02' values: nil.

    browser classMenuExtensionNavigateToTestCase: menu.
    actualPosition := 0.
    foundItem := false.
    menu itemsDo: [ :item |  
        foundItem ifFalse: [
            actualPosition := actualPosition + 1.
            foundItem := (item label = 'Open Test Case Class').
        ]
    ].

    self assert: expectedPosition = actualPosition

    "Created: / 26-12-2014 / 19:01:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_code_view_menu_extension_custom_refactorings
    | expectedMenu actualMenu |

    menu := Menu labels: 'Refactor
label' values: nil.

    expectedMenu := {'Refactor'. 'Refactor - Custom'. {'Generator_01'. '-'. 'Generator_02'}. 'label'}.

    self
        addGenerator: 'Generator_01' group: #();
        addGenerator: 'Generator_02' group: #(Group).

    browser codeViewMenuExtensionCustomRefactorings: menu.
    actualMenu := self menuItemLabels.

    self assert: expectedMenu = actualMenu

    "Created: / 29-12-2014 / 09:16:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_selector_menu_extension_custom_generators
    | expectedMenu actualMenu |

    menu := Menu labels: 'Generate
label' values: nil.

    expectedMenu := {'Generate'. 'Generate - Custom'. {'Generator_01'. '-'. 'Generator_02'}. 'label'}.

    self
        addGenerator: 'Generator_01' group: #();
        addGenerator: 'Generator_02' group: #(Group).

    browser selectorMenuExtensionCustomGenerators: menu.
    actualMenu := self menuItemLabels.

    self assert: expectedMenu = actualMenu

    "Created: / 29-12-2014 / 09:18:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_selector_menu_extension_custom_refactorings
    | expectedMenu actualMenu |

    menu := Menu labels: 'Refactor
label' values: nil.

    expectedMenu := {'Refactor'. 'Refactor - Custom'. {'Generator_01'. '-'. 'Generator_02'}. 'label'}.

    self
        addGenerator: 'Generator_01' group: #();
        addGenerator: 'Generator_02' group: #(Group).

    browser selectorMenuExtensionCustomRefactorings: menu.
    actualMenu := self menuItemLabels.

    self assert: expectedMenu = actualMenu

    "Created: / 29-12-2014 / 09:26:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!

test_variables_menu_extension_custom_generators
    | expectedMenu actualMenu |

    menu := Menu labels: 'Generate
label' values: nil.

    expectedMenu := {'Generate'. 'Generate - Custom'. {'Generator_01'. '-'. 'Generator_02'}. 'label'}.

    self
        addGenerator: 'Generator_01' group: #();
        addGenerator: 'Generator_02' group: #(Group).

    browser variablesMenuExtensionCustomGenerators: menu.
    actualMenu := self menuItemLabels.

    self assert: expectedMenu = actualMenu

    "Created: / 29-12-2014 / 09:31:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !

!CustomNewSystemBrowserTests class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !