1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }" |
|
2 |
|
3 "{ NameSpace: Smalltalk }" |
|
4 |
|
5 TestCase subclass:#PPCLL1OptimizingTest |
|
6 instanceVariableNames:'configuration parser result' |
|
7 classVariableNames:'' |
|
8 poolDictionaries:'' |
|
9 category:'PetitCompiler-Tests-Core' |
|
10 ! |
|
11 |
|
12 !PPCLL1OptimizingTest methodsFor:'as yet unclassified'! |
|
13 |
|
14 assert: object type: class |
|
15 self assert: (object isKindOf: class) |
|
16 ! |
|
17 |
|
18 configuration |
|
19 configuration := PPCLL1Configuration new. |
|
20 configuration arguments generate: false. |
|
21 ^ configuration |
|
22 ! |
|
23 |
|
24 optimize: aPPParser |
|
25 ^ self configuration compile: aPPParser. |
|
26 ! |
|
27 |
|
28 testCompileToken |
|
29 parser := 'foo' asParser token. |
|
30 result := self optimize: parser. |
|
31 |
|
32 self assert: result type: PPCTokenizingParserNode. |
|
33 self assert: result parser type: PPCTokenConsumeNode. |
|
34 self assert: result parser child type: PPCTokenNode. |
|
35 self assert: result parser child child literal = 'foo'. |
|
36 ! |
|
37 |
|
38 testCompileTrim |
|
39 parser := 'foo' asParser token trim. |
|
40 result := self optimize: parser. |
|
41 |
|
42 self assert: result type: PPCTokenizingParserNode. |
|
43 self assert: result parser type: PPCTokenConsumeNode. |
|
44 self assert: result parser child type: PPCTrimmingTokenNode. |
|
45 self assert: result parser child whitespace type: PPCTokenStarSeparatorNode. |
|
46 ! |
|
47 |
|
48 testCompileTrimmingToken |
|
49 parser := 'foo' asParser trimmingToken. |
|
50 result := self optimize: parser. |
|
51 |
|
52 self assert: result type: PPCTokenizingParserNode. |
|
53 self assert: result parser type: PPCTokenConsumeNode. |
|
54 self assert: result parser child type: PPCTrimmingTokenNode. |
|
55 self assert: result parser child whitespace type: PPCTokenStarSeparatorNode. |
|
56 |
|
57 self assert: result tokenizer children size = 2. |
|
58 self assert: (result tokenizer children anySatisfy: [ :e | e isKindOf: PPCTrimmingTokenNode ]) |
|
59 ! |
|
60 |
|
61 testCompileTrimmingToken2 |
|
62 | token | |
|
63 token := 'foo' asParser trimmingToken. |
|
64 parser := token wrapped |
|
65 name: 'fooToken'; |
|
66 yourself. |
|
67 result := self optimize: parser. |
|
68 |
|
69 self assert: result type: PPCTokenizingParserNode. |
|
70 self assert: result parser type: PPCTokenConsumeNode. |
|
71 self assert: result parser name = 'fooToken'. |
|
72 self assert: result parser child name = 'token_fooToken'. |
|
73 |
|
74 self assert: result tokenizer children size = 2. |
|
75 self assert: (result tokenizer children anySatisfy: [ :e | e isKindOf: PPCTrimmingTokenNode ]). |
|
76 self assert: (result tokenizer children anySatisfy: [ :e | e name = 'token_fooToken']). |
|
77 ! ! |
|
78 |
|