Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ SycRenameClassCommand class >> browserContextMenuActivation [

{ #category : '*Calypso-SystemTools-Core' }
SycRenameClassCommand class >> browserShortcutActivation [
<classAnnotation>
" <classAnnotation>"
"Disabled to make the rename shortcut trigger the new solution."

^CmdShortcutActivation renamingFor: ClyClass asCalypsoItemContext
]
Expand All @@ -25,7 +26,8 @@ SycRenameClassCommand class >> sourceCodeMenuActivation [

{ #category : '*Calypso-SystemTools-Core' }
SycRenameClassCommand class >> sourceCodeShortcutActivation [
<classAnnotation>
" <classAnnotation>"
"Disabled to make the rename shortcut trigger the new solution."

^CmdShortcutActivation renamingFor: ClySourceCodeContext
]
31 changes: 31 additions & 0 deletions src/Calypso-SystemTools-Core/SycRenameClassCommand2.extension.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Extension { #name : 'SycRenameClassCommand2' }

{ #category : '*Calypso-SystemTools-Core' }
SycRenameClassCommand2 class >> browserContextMenuActivation [
<classAnnotation>

^CmdContextMenuActivation
byRootGroupItemOrder: 1.2
for: ClyClass asCalypsoItemContext
]

{ #category : '*Calypso-SystemTools-Core' }
SycRenameClassCommand2 class >> browserShortcutActivation [
<classAnnotation>

^CmdShortcutActivation renamingFor: ClyClass asCalypsoItemContext
]

{ #category : '*Calypso-SystemTools-Core' }
SycRenameClassCommand2 class >> sourceCodeMenuActivation [
<classAnnotation>

^SycSourceCodeMenuActivation byRootGroupItemOrder: 1.2 for: ClySourceCodeContext
]

{ #category : '*Calypso-SystemTools-Core' }
SycRenameClassCommand2 class >> sourceCodeShortcutActivation [
<classAnnotation>

^CmdShortcutActivation renamingFor: ClySourceCodeContext
]
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,10 @@ ReSharedVariableShadowingClassNameCondition >> oldName: oldClassNameString model

{ #category : 'displaying' }
ReSharedVariableShadowingClassNameCondition >> violationMessageOn: aStream [

aStream
nextPutAll: 'This name conflicts with an existing shared variable and would change symbol lookup.'

aStream nextPutAll: 'There is existing shared variable with name:';
nextPutAll: name;
cr;
nextPutAll: 'Renaming the class to this name will change existing symbol lookup,';
cr;
nextPutAll: 'since following classes and their methods reference the renaming class.';
cr.
self violator do: [ :v | aStream nextPutAll: v asString; cr. ].

]

Expand Down
9 changes: 9 additions & 0 deletions src/Refactoring-DataForTesting/ReClassToBeRenamed.class.st
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
Class {
#name : 'ReClassToBeRenamed',
#superclass : 'Object',
#instVars : [
'SharedVar'
],
#category : 'Refactoring-DataForTesting-ForDuplication',
#package : 'Refactoring-DataForTesting',
#tag : 'ForDuplication'
}

{ #category : 'as yet unclassified' }
ReClassToBeRenamed >> checkBehaviorPrecondition [

ReClassToBeRenamedChild new
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Class {
#name : 'ReClassToBeRenamedChild',
#superclass : 'ReClassToBeRenamed',
#category : 'Refactoring-DataForTesting-ForDuplication',
#package : 'Refactoring-DataForTesting',
#tag : 'ForDuplication'
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ Class {
#superclass : 'RBClassRefactoring',
#instVars : [
'newName',
'class'
'class',
'notCheckVarName'
],
#category : 'Refactoring-Transformations',
#package : 'Refactoring-Transformations'
Expand Down
67 changes: 67 additions & 0 deletions src/Refactoring-UI-Tests/ReRenameClassDriver2Test.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
"
A ReRenameClassDriver2Test is a test class for testing the behavior of ReRenameClassDriver2
"
Class {
#name : 'ReRenameClassDriver2Test',
#superclass : 'TestCase',
#category : 'Refactoring-UI-Tests-Driver',
#package : 'Refactoring-UI-Tests',
#tag : 'Driver'
}

{ #category : 'tests' }
ReRenameClassDriver2Test >> testDetectsBehaviorPreservingPrecondition [
"Verify that the driver detects a behavior-preserving precondition violation."

| driver |

driver := ReRenameClassDriver2 new
oldName: #ReClassToBeRenamedChild;
newName: #SharedVar;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

driver createAndSetNewRefactoring.

self assert: driver hasFailedBehaviorPreservingPreconditions.
]

{ #category : 'tests' }
ReRenameClassDriver2Test >> testInvalidNewClassNameFails [
"Verify that renaming a class to an invalid class name fails the applicability preconditions."

| driver refactoring |

driver := ReRenameClassDriver2 new.
driver
oldName: #ReClassToBeRenamed;
newName: #newClass;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

refactoring := driver instantiateRefactoring.
refactoring newName: driver newName .

self
should: [ refactoring checkApplicabilityPreconditions ]
raise: Error
]

{ #category : 'tests' }
ReRenameClassDriver2Test >> testValidRenameClassPreconditions [
"Verify that renaming a class to a valid name passes the applicability preconditions."

| driver refactoring |

driver := ReRenameClassDriver2 new.
driver
oldName: #ReClassToBeRenamed;
newName: #NewName;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

refactoring := driver instantiateRefactoring.
refactoring newName: driver newName .

self assert: driver checkApplicabilityPreconditions isNil
]
117 changes: 117 additions & 0 deletions src/Refactoring-UI-Tests/StRenameClassPreviewPresenterTest.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
"
A StRenameClassPreviewPresenterTest is a test class for testing the behavior of StRenameClassPreviewPresenter
"
Class {
#name : 'StRenameClassPreviewPresenterTest',
#superclass : 'TestCase',
#category : 'Refactoring-UI-Tests-UI',
#package : 'Refactoring-UI-Tests',
#tag : 'UI'
}

{ #category : 'tests' }
StRenameClassPreviewPresenterTest >> testBehaviorPanelIsHiddenWhenBehaviorPreconditionIsResolved [
"Verify that the behavior panel is hidden when the behavior-preserving precondition is resolved."

| driver presenter |

driver := ReRenameClassDriver2 new
oldName: #ReClassToBeRenamedChild;
newName: #SharedVar;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

driver createAndSetNewRefactoring.

presenter := StRenameClassPreviewPresenter new.
presenter
driver: driver;
scopes: driver scopes.

presenter defaultLayout.

presenter updateBehaviorPanelVisibility: 'SharedVar'.

self assert: (presenter topLayout children includes: presenter behaviorPanel).

driver newName: #NewClassName.
driver createAndSetNewRefactoring.

presenter updateBehaviorPanelVisibility: 'NewClassName'.

self deny: (presenter topLayout children includes: presenter behaviorPanel)
]

{ #category : 'tests' }
StRenameClassPreviewPresenterTest >> testBehaviorPanelIsShownWhenBehaviorPreconditionFails [
"Verify that the behavior panel is shown when a behavior-preserving precondition fails."

| driver presenter |

driver := ReRenameClassDriver2 new
oldName: #ReClassToBeRenamedChild;
newName: #SharedVar;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

driver createAndSetNewRefactoring.

presenter := StRenameClassPreviewPresenter new.
presenter
driver: driver;
scopes: driver scopes.

presenter defaultLayout.
presenter updateBehaviorPanelVisibility: 'SharedVar'.

self assert: (presenter topLayout children includes: presenter behaviorPanel)
]

{ #category : 'tests' }
StRenameClassPreviewPresenterTest >> testExistingClassNameDisplaysValidationError [
"Verify that entering an existing class name displays a validation error"

| driver presenter |

driver := ReRenameClassDriver2 new
oldName: #ReClassToBeRenamed;
newName: #Object;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

presenter := StRenameClassPreviewPresenter new.
presenter
driver: driver;
scopes: driver scopes.

presenter validateName: 'Object'.

self assert: presenter validationLabel label notEmpty
]

{ #category : 'tests' }
StRenameClassPreviewPresenterTest >> testUpdateChangesWithValidClassNameGeneratesPreview [
"Verify that a valid class name generates the preview changes for the rename refactoring."

| driver presenter |

driver := ReRenameClassDriver2 new
oldName: #ReClassToBeRenamed;
newName: #NewName;
scopes: { RBBrowserEnvironment default };
configureRefactoring.

presenter := StRenameClassPreviewPresenter new.
presenter
driver: driver;
scopes: driver scopes.

presenter newNameInput text: 'NewName'.
presenter validateName: 'NewName'.
presenter updateName.

self assert: driver newName equals: 'NewName'.
self deny: presenter changes isNil


]
Loading