CustomTestCaseMethodCodeGenerator.st
author Jakub Nesveda <jakubnesveda@seznam.cz>
Sat, 11 Oct 2014 00:42:54 +0200
changeset 689 488503cd3baa
parent 688 6bd18ba5e56c
child 703 300ac48af954
permissions -rw-r--r--
fixes in TestCase code generators add RBAbstractClass >> isSubclassOf: and inheritsFrom: to tell if a class is subclass of another class
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     1
"{ Package: 'jn:refactoring_custom' }"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     2
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     3
CustomCodeGenerator subclass:#CustomTestCaseMethodCodeGenerator
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     4
	instanceVariableNames:''
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     5
	classVariableNames:''
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     6
	poolDictionaries:''
656
a95284467938 move all code generators to category Interface-Refactoring-Custom-Generators
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 642
diff changeset
     7
	category:'Interface-Refactoring-Custom-Generators'
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     8
!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
     9
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    10
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    11
!CustomTestCaseMethodCodeGenerator class methodsFor:'accessing-presentation'!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    12
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    13
description
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    14
    "Returns more detailed description of the receiver"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    15
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    16
    ^ 'Creates test method for TestCase from method selection'
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    17
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    18
    "Created: / 24-08-2014 / 16:16:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    19
!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    20
670
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    21
group
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    22
    "Returns a collection strings describing a group to which
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    23
     receiver belongs. A groups may be nested hence the array of
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    24
     strings. For example for subgroup 'Accessors' in group 'Generators'
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    25
     this method should return #('Generators' 'Accessors')."
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    26
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    27
    "/ By default return an empty array which means the item will appear
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    28
    "/ in top-level group.
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    29
    ^ #('Testing')
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    30
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    31
    "Created: / 05-08-2014 / 14:14:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    32
!
f49ac58dd32c Fixes / improvements in testcase generatoris, update to new API.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 661
diff changeset
    33
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    34
label
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    35
    "Returns show label describing the receiver. This label
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    36
     is used in UI as menu item/tree item label."
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    37
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    38
    ^ 'Test method'
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    39
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    40
    "Created: / 24-08-2014 / 16:14:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    41
! !
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    42
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    43
!CustomTestCaseMethodCodeGenerator class methodsFor:'queries'!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    44
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    45
availableInContext:aCustomContext
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    46
    "Returns true if the generator/refactoring is available in given
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    47
     context, false otherwise.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    48
     
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    49
     Called by the UI to figure out what generators / refactorings
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    50
     are available at given point. See class CustomContext for details."
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    51
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    52
    ^ aCustomContext selectedMethods notEmptyOrNil
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    53
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    54
    "Created: / 24-08-2014 / 16:18:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    55
!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    56
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    57
availableInPerspective:aCustomPerspective
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    58
    "Returns true if the generator/refactoring is available in given
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    59
     perspective, false otherwise.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    60
     
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    61
     Called by the UI to figure out what generators / refactorings
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    62
     to show"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    63
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    64
    ^ aCustomPerspective isMethodPerspective
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    65
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    66
    "Created: / 24-08-2014 / 16:16:49 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    67
! !
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    68
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    69
!CustomTestCaseMethodCodeGenerator methodsFor:'executing'!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    70
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    71
buildInContext: aCustomContext
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    72
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    73
    aCustomContext selectedMethods do:[ :method | 
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    74
        | className testClass |
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    75
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    76
        className := method mclass theNonMetaclass name.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    77
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    78
        (className endsWith: 'Tests') ifFalse: [ 
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    79
            | testClass |
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    80
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    81
            className := className, 'Tests'.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    82
            testClass := Smalltalk classNamed: className.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    83
            testClass notNil ifTrue: [ 
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    84
                | selector testSelector |
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    85
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    86
                selector := 'test_', (method selector asString copyReplaceAll: ':' with: '_').
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    87
                testSelector := ''.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    88
                selector do:[ :character | 
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    89
                    character isUppercase ifTrue: [ 
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    90
                        testSelector := testSelector, '_'.
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    91
                    ].
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    92
                    testSelector := testSelector, character asString toLowerCase
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    93
                ].
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    94
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    95
                (testClass includesSelector: testSelector asSymbol) ifFalse: [ 
689
488503cd3baa fixes in TestCase code generators
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 688
diff changeset
    96
                    model createMethod
661
b327c8833f1a same package in generated test cases as in tested classes - CustomTestCaseCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 656
diff changeset
    97
                        package: method package;
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    98
                        class: testClass;
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
    99
                        protocol: 'tests';
642
55cebe41a90b add methodDefinitionTemplate to generated test method to CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 641
diff changeset
   100
                        source: (testSelector, '                            
55cebe41a90b add methodDefinitionTemplate to generated test method to CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 641
diff changeset
   101
                            "/ something ', (method methodDefinitionTemplate asString), '.    
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   102
                            self assert: 1 = 2.
689
488503cd3baa fixes in TestCase code generators
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 688
diff changeset
   103
                        ');
488503cd3baa fixes in TestCase code generators
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 688
diff changeset
   104
                        compile
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   105
                ].
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   106
            ].
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   107
        ].
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   108
    ].
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   109
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   110
    "Created: / 24-08-2014 / 16:24:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
689
488503cd3baa fixes in TestCase code generators
Jakub Nesveda <jakubnesveda@seznam.cz>
parents: 688
diff changeset
   111
    "Modified: / 10-10-2014 / 23:58:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
641
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   112
! !
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   113
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   114
!CustomTestCaseMethodCodeGenerator class methodsFor:'documentation'!
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   115
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   116
version_HG
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   117
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   118
    ^ '$Changeset: <not expanded> $'
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   119
! !
7d609c00bdac add CustomTestCaseMethodCodeGenerator
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff changeset
   120