compiler/tests/extras/PPCCompositeParserTest.st
changeset 510 869853decf31
child 512 694a247a12ba
equal deleted inserted replaced
509:fd22630c7e62 510:869853decf31
       
     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 compiledBaseTestClass compiledUniversalTestClass compiledTokenizedTestClass |
       
    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     compiledBaseTestClass := baseTestClass subclass:compiledBaseTestClassName
       
    41         instanceVariableNames:''
       
    42         classVariableNames:''
       
    43         poolDictionaries:''
       
    44         category: 'PetitCompiler-Extras-Tests-Misc'.
       
    45 
       
    46     compiledBaseTestClass class compile:
       
    47 'isAbstract
       
    48     ^ self == ', compiledBaseTestClassName
       
    49     classified: 'testing'.
       
    50 
       
    51     compiledBaseTestClass class compile:
       
    52 'resources
       
    53     ^ Array with: (PPCSetUpBeforeTearDownAfterResource for: self)'
       
    54     classified: 'resources'.
       
    55 
       
    56     self methodDictionary do:[:method |  
       
    57         compiledBaseTestClass compile: method source classified: method category    
       
    58     ].
       
    59 
       
    60     compiledBaseTestClass compile:
       
    61 'petitParserClass
       
    62     ^ ' , baseTestClass new parserClass name
       
    63     classified: 'accessing'.
       
    64 
       
    65     compiledUniversalTestClass := compiledBaseTestClass subclass: (compiledBaseTestClassName , '_Universal') asSymbol
       
    66         instanceVariableNames:''
       
    67         classVariableNames:''
       
    68         poolDictionaries:''
       
    69         category: 'PetitCompiler-Extras-Tests-Misc'.
       
    70 
       
    71     compiledUniversalTestClass compile: 
       
    72 'compilerConfiguration
       
    73     ^ PPCConfiguration universal'
       
    74     classified: 'accessing'.
       
    75     
       
    76                              
       
    77     compiledTokenizedTestClass := compiledBaseTestClass subclass: (compiledBaseTestClassName , '_Tokenized') asSymbol
       
    78         instanceVariableNames:''
       
    79         classVariableNames:''
       
    80         poolDictionaries:''
       
    81         category: 'PetitCompiler-Extras-Tests-Misc'.
       
    82 
       
    83     compiledTokenizedTestClass compile: 
       
    84 'compilerConfiguration
       
    85     ^ PPCConfiguration tokenizing'
       
    86     classified: 'accessing'.
       
    87 
       
    88     "Created: / 30-07-2015 / 07:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    89 ! !
       
    90 
       
    91 !PPCCompositeParserTest methodsFor:'accessing'!
       
    92 
       
    93 compiledParser
       
    94     ^ self compiledParserClass new
       
    95 
       
    96     "Created: / 29-07-2015 / 17:00:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    97 !
       
    98 
       
    99 compiledParserClass
       
   100     ^ Smalltalk at: self compiledParserClassName
       
   101 
       
   102     "Created: / 29-07-2015 / 16:54:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   103 !
       
   104 
       
   105 compiledParserClassName
       
   106     "Return the name of the compiled parser"
       
   107 
       
   108     ^ (self petitParserClass name , 'C_' , 
       
   109             "This is bit hacky!!"
       
   110             ((self compilerConfiguration isKindOf: PPCTokenizingConfiguration) ifTrue:[ 'Tokenizing' ] ifFalse:[ 'Universal' ])) asSymbol
       
   111 
       
   112     "Created: / 29-07-2015 / 16:54:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   113 !
       
   114 
       
   115 compilerConfiguration
       
   116     "Return configuration to use when compiling parser (as instance of PPCConfiguration)"
       
   117 
       
   118     ^ self subclassResponsibility
       
   119 
       
   120     "Created: / 29-07-2015 / 16:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   121 !
       
   122 
       
   123 parserClass
       
   124     ^ self compiledParserClass
       
   125 
       
   126     "Modified: / 29-07-2015 / 18:43:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   127 !
       
   128 
       
   129 parserInstanceFor: aSymbol
       
   130     ^ self parserClass new startSymbol: aSymbol
       
   131 
       
   132     "Modified: / 29-07-2015 / 18:43:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   133 !
       
   134 
       
   135 petitParser
       
   136     ^ self petitParserClass new
       
   137 
       
   138     "Created: / 29-07-2015 / 17:01:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   139 !
       
   140 
       
   141 petitParserClass
       
   142     "Return the name of the petit parser to compile"
       
   143 
       
   144     ^ self subclassResponsibility
       
   145 
       
   146     "Created: / 29-07-2015 / 17:01:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   147 ! !
       
   148 
       
   149 !PPCCompositeParserTest methodsFor:'context'!
       
   150 
       
   151 context
       
   152 
       
   153     ^ PPCContext new 
       
   154 ! !
       
   155 
       
   156 !PPCCompositeParserTest methodsFor:'setup & teardown'!
       
   157 
       
   158 setUpBefore
       
   159     "Called before any of my tests is run (when resources are set up)"
       
   160     | time configuration |
       
   161 
       
   162     configuration := self compilerConfiguration.
       
   163     configuration arguments parserName: self compiledParserClassName.
       
   164     time := Time millisecondsToRun: [
       
   165         self petitParser compileWithConfiguration: configuration.
       
   166     ].
       
   167     Transcript show: self petitParserClass name ; show:' compiled in: '; show: time asString; show: 'ms'; cr.
       
   168 
       
   169     "Created: / 29-07-2015 / 16:29:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   170     "Modified: / 29-07-2015 / 18:40:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   171 !
       
   172 
       
   173 tearDownAfter
       
   174     "Called after all my tests are ryn(when resources are torn down)"
       
   175 
       
   176     "Created: / 29-07-2015 / 16:33:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   177 ! !
       
   178