compiler/tests/extras/PPCCompositeParserTest.st
changeset 515 b5316ef15274
child 516 3b81c9e53352
equal deleted inserted replaced
502:1e45d3c96ec5 515:b5316ef15274
       
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests/extras' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 PPCompositeParserTest subclass:#PPCCompositeParserTest
       
     6 	instanceVariableNames:''
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Extras-Tests-Support'
       
    10 !
       
    11 
       
    12 !PPCCompositeParserTest class methodsFor:'accessing'!
       
    13 
       
    14 resources
       
    15     ^ Array with: (PPCSetUpBeforeTearDownAfterResource for: self)
       
    16 
       
    17     "Created: / 29-07-2015 / 16:28:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    18 ! !
       
    19 
       
    20 !PPCCompositeParserTest class methodsFor:'queries'!
       
    21 
       
    22 isAbstract
       
    23     "Return if this class is an abstract class.
       
    24      True is returned here for myself only; false for subclasses.
       
    25      Abstract subclasses must redefine again."
       
    26 
       
    27     ^ self == PPCCompositeParserTest.
       
    28 ! !
       
    29 
       
    30 !PPCCompositeParserTest class methodsFor:'utilities'!
       
    31 
       
    32 generateTestsFor: baseTestClass
       
    33     | compiledBaseTestClassName |
       
    34 
       
    35     compiledBaseTestClassName := (baseTestClass name startsWith: 'PP') 
       
    36                             ifTrue:[ 'PPC' , (baseTestClass name copyFrom: 3 to: baseTestClass name size) ]
       
    37                             ifFalse:[ 'PPC' , baseTestClass name ].
       
    38     compiledBaseTestClassName := compiledBaseTestClassName asSymbol.
       
    39 
       
    40     ^ self generateTestsFor: baseTestClass compiledBaseTestCaseName: compiledBaseTestClassName
       
    41 
       
    42     "Created: / 30-07-2015 / 07:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    43     "Modified: / 31-07-2015 / 07:27:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    44 !
       
    45 
       
    46 generateTestsFor: baseTestClass compiledBaseTestCaseName: compiledBaseTestClassName
       
    47     | compiledBaseTestClass compiledUniversalTestClass compiledTokenizedTestClass |
       
    48 
       
    49 
       
    50 
       
    51     compiledBaseTestClass := baseTestClass subclass:compiledBaseTestClassName
       
    52         instanceVariableNames:''
       
    53         classVariableNames:''
       
    54         poolDictionaries:''
       
    55         category: 'PetitCompiler-Extras-Tests-Misc'.
       
    56 
       
    57     compiledBaseTestClass class compile:
       
    58 'isAbstract
       
    59     ^ self == ', compiledBaseTestClassName
       
    60     classified: 'testing'.
       
    61 
       
    62     compiledBaseTestClass class compile:
       
    63 'resources
       
    64     ^ Array with: (PPCSetUpBeforeTearDownAfterResource for: self)'
       
    65     classified: 'resources'.
       
    66 
       
    67     self methodDictionary do:[:method |  
       
    68         compiledBaseTestClass compile: method source classified: method category    
       
    69     ].
       
    70 
       
    71     compiledBaseTestClass compile:
       
    72 'petitParserClass
       
    73     ^ ' , baseTestClass new parserClass name
       
    74     classified: 'accessing'.
       
    75 
       
    76     compiledUniversalTestClass := compiledBaseTestClass subclass: (compiledBaseTestClassName , '_Universal') asSymbol
       
    77         instanceVariableNames:''
       
    78         classVariableNames:''
       
    79         poolDictionaries:''
       
    80         category: 'PetitCompiler-Extras-Tests-Misc'.
       
    81 
       
    82     compiledUniversalTestClass compile: 
       
    83 'compilerConfiguration
       
    84     ^ PPCConfiguration universal'
       
    85     classified: 'accessing'.
       
    86     
       
    87                              
       
    88     compiledTokenizedTestClass := compiledBaseTestClass subclass: (compiledBaseTestClassName , '_Tokenized') asSymbol
       
    89         instanceVariableNames:''
       
    90         classVariableNames:''
       
    91         poolDictionaries:''
       
    92         category: 'PetitCompiler-Extras-Tests-Misc'.
       
    93 
       
    94     compiledTokenizedTestClass compile: 
       
    95 'compilerConfiguration
       
    96     ^ PPCConfiguration tokenizing'
       
    97     classified: 'accessing'.
       
    98 
       
    99     "Created: / 31-07-2015 / 07:26:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   100 ! !
       
   101 
       
   102 !PPCCompositeParserTest methodsFor:'accessing'!
       
   103 
       
   104 compiledParser
       
   105     ^ self compiledParserClass new
       
   106 
       
   107     "Created: / 29-07-2015 / 17:00:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   108 !
       
   109 
       
   110 compiledParserClass
       
   111     ^ Smalltalk at: self compiledParserClassName
       
   112 
       
   113     "Created: / 29-07-2015 / 16:54:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   114 !
       
   115 
       
   116 compiledParserClassName
       
   117     "Return the name of the compiled parser"
       
   118 
       
   119     ^ (self petitParserClass name , 'C_' , 
       
   120             "This is bit hacky!!"
       
   121             ((self compilerConfiguration isKindOf: PPCTokenizingConfiguration) ifTrue:[ 'Tokenizing' ] ifFalse:[ 'Universal' ])) asSymbol
       
   122 
       
   123     "Created: / 29-07-2015 / 16:54:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   124 !
       
   125 
       
   126 compilerConfiguration
       
   127     "Return configuration to use when compiling parser (as instance of PPCConfiguration)"
       
   128 
       
   129     ^ self subclassResponsibility
       
   130 
       
   131     "Created: / 29-07-2015 / 16:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   132 !
       
   133 
       
   134 parserClass
       
   135     ^ self compiledParserClass
       
   136 
       
   137     "Modified: / 29-07-2015 / 18:43:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   138 !
       
   139 
       
   140 parserInstanceFor: aSymbol
       
   141     ^ self parserClass new startSymbol: aSymbol
       
   142 
       
   143     "Modified: / 29-07-2015 / 18:43:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   144 !
       
   145 
       
   146 petitParser
       
   147     ^ self petitParserClass new
       
   148 
       
   149     "Created: / 29-07-2015 / 17:01:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   150 !
       
   151 
       
   152 petitParserClass
       
   153     "Return the name of the petit parser to compile"
       
   154 
       
   155     ^ self subclassResponsibility
       
   156 
       
   157     "Created: / 29-07-2015 / 17:01:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   158 ! !
       
   159 
       
   160 !PPCCompositeParserTest methodsFor:'context'!
       
   161 
       
   162 context
       
   163 
       
   164     ^ PPCContext new 
       
   165 ! !
       
   166 
       
   167 !PPCCompositeParserTest methodsFor:'setup & teardown'!
       
   168 
       
   169 setUpBefore
       
   170     "Called before any of my tests is run (when resources are set up)"
       
   171     | time configuration |
       
   172 
       
   173     configuration := self compilerConfiguration.
       
   174     configuration arguments parserName: self compiledParserClassName.
       
   175     time := Time millisecondsToRun: [
       
   176         self petitParser compileWithConfiguration: configuration.
       
   177     ].
       
   178     Transcript show: self petitParserClass name ; show:' compiled in: '; show: time asString; show: 'ms'; cr.
       
   179 
       
   180     "Created: / 29-07-2015 / 16:29:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   181     "Modified: / 29-07-2015 / 18:40:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   182 !
       
   183 
       
   184 tearDownAfter
       
   185     "Called after all my tests are ryn(when resources are torn down)"
       
   186 
       
   187     "Created: / 29-07-2015 / 16:33:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   188 ! !
       
   189