|
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 |