gui/tests/PPGrammarRefactoringTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 24 Nov 2014 00:09:23 +0000
changeset 421 7e08b31e0dae
parent 361 39a00be69192
permissions -rw-r--r--
Merged JK's version from Monticello Name: PetitParser-JanKurs.260 Author: JanKurs Time: 17-11-2014, 12:09:05.490 PM UUID: 07411cef-ef69-40db-9d93-d4018a9b34ef Name: PetitTests-JanKurs.65 Author: JanKurs Time: 17-11-2014, 12:09:04.530 PM UUID: f98d613f-f4ce-4e0e-a7e9-310ee7c7e7a6 Name: PetitSmalltalk-JanKurs.78 Author: JanKurs Time: 14-11-2014, 05:05:07.765 PM UUID: 3d68330d-44d5-46c3-9705-97f627b3edbc Name: PetitCompiler-JanKurs.71 Author: JanKurs Time: 18-11-2014, 09:48:35.425 AM UUID: 06352c33-3c76-4382-8536-0cc48e225117 Name: PetitCompiler-Tests-JanKurs.21 Author: JanKurs Time: 17-11-2014, 05:51:53.134 PM UUID: 8d6c0799-14e7-4871-8d91-8b0f9886db83 Name: PetitCompiler-Benchmarks-JanKurs.2 Author: JanKurs Time: 17-11-2014, 05:51:07.887 PM UUID: d5e3a980-7871-487a-a232-e3ca93fc2483

"{ Package: 'stx:goodies/petitparser/gui/tests' }"

TestCase subclass:#PPGrammarRefactoringTest
	instanceVariableNames:'refactoring'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitGui-Tests'
!


!PPGrammarRefactoringTest methodsFor:'accessing'!

change
	^ self refactoring changes
!

changes
	^ self change changes
!

refactoring
	^ refactoring
! !

!PPGrammarRefactoringTest methodsFor:'testing-parsers'!

testAddParser
        self performRefactoring: (PPAddParserRefactoring
                name: #PPMockParser
                category: #'PetitGui-Mock').
        self assert: self changes size = 2.
        self assert: self changes first class = AddClassChange.
        self assert: self changes first definitionClass = PPCompositeParser.
        self assert: self changes first changeClassName = #PPMockParser.
        self assert: self changes first category = #'PetitGui-Mock'.
        self assert: self changes last class = AddMethodChange.
        self assert: self changes last parseTree = (RBParser parseMethod: 'start ^ self shouldBeImplemented')
!

testAddParserWithSuperclass
        self performRefactoring: (PPAddParserRefactoring
                name: #PPMockParser
                category: #'PetitGui-Mock'
                superclass: PPArithmeticParser).
        self assert: self changes size = 2.
        self assert: self changes first class = AddClassChange.
        self assert: self changes first definitionClass = PPArithmeticParser.
        self assert: self changes first changeClassName = #PPMockParser.
        self assert: self changes first category = #'PetitGui-Mock'.
        self assert: self changes last class = AddMethodChange.
        self assert: self changes last parseTree = (RBParser parseMethod: 'start ^ self shouldBeImplemented')
!

testRemoveParser
        self performRefactoring: (PPRemoveParserRefactoring onClass: PPArithmeticParser).
        self assert: self changes size = 1.
        self assert: self changes first class =  RemoveClassChange.
        self assert: self changes first changeClassName = 'PPArithmeticParser'
! !

!PPGrammarRefactoringTest methodsFor:'testing-productions'!

testDefineProduction
        self performRefactoring: (PPDefineProdcutionRefactoring
                onClass: PPArithmeticParser
                source: 'function ^ #any plus , $( , $) ==> [ :e | 0 ]'
                protocols: (Array with: #productions)).
        self assert: self changes size = 2.
        self assert: self changes first class = AddInstanceVariableChange.
        self assert: self changes first variable = 'function'.
        self assert: self changes last class = AddMethodChange.
        self assert: self changes last parseTree = (RBParser parseMethod: 'function ^ #any asParser plus , $( asParser , $) asParser ==> [ :e | 0 ]')
!

testExtractProduction
        self performRefactoring: (PPExtractProdcutionRefactoring
                onClass: PPArithmeticParser
                production: #addition
                interval: (36 to: 60)
                to: #plusOrMinus).
        self assert: self changes size = 3.
        self assert: self changes first class = AddInstanceVariableChange.
        self assert: self changes first variable = 'plusOrMinus'.
        self assert: self changes second class = AddMethodChange.
        self assert: self changes second parseTree = (RBParser parseMethod: 'plusOrMinus ^ $+ asParser / $- asParser').
        self assert: self changes last class = AddMethodChange.
        self assert: self changes last parseTree = (RBParser parseMethod: 'addition ^ (factors separatedBy: plusOrMinus trim) foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]')
!

testRemoveProduction
        self performRefactoring: (PPRemoveProdcutionRefactoring
                onClass: PPArithmeticParser
                production: #addition).
        self assert: self changes size = 2.
        self assert: self changes first class = RemoveMethodChange.
        self assert: self changes first selector = #addition.
        self assert: self changes last class = RemoveInstanceVariableChange.
        self assert: self changes last variable = 'addition'
!

testRenameProduction
        self performRefactoring: (PPRenameProdcutionRefactoring
                onClass: PPArithmeticParser
                rename: #addition
                to: #add).
        self assert: self changes size = 3.
        self assert: self changes first class = RenameInstanceVariableChange.
        self assert: self changes first oldName = 'addition'.
        self assert: self changes first newName = 'add'.
        self assert: self changes second class = AddMethodChange.
        self assert: self changes second parseTree = (RBParser parseMethod: 'add ^ (factors separatedBy: ($+ asParser / $- asParser) trim) foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]').
        self assert: self changes last class = RemoveMethodChange.
        self assert: self changes last selector = #addition
! !

!PPGrammarRefactoringTest methodsFor:'utilities'!

performRefactoring: aRefactoring
	refactoring := aRefactoring.
	aRefactoring primitiveExecute
! !

!PPGrammarRefactoringTest class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/tests/PPGrammarRefactoringTest.st,v 1.2 2014-03-04 23:33:40 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/tests/PPGrammarRefactoringTest.st,v 1.2 2014-03-04 23:33:40 cg Exp $'
! !