author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Mon, 13 Apr 2015 22:00:44 +0100 | |
changeset 427 | a7f5e6de19d2 |
parent 377 | 6112a403a52d |
permissions | -rw-r--r-- |
376
a2656b27cace
Added monticelloName to package definition to ease export to .mcz
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
375
diff
changeset
|
1 |
"{ Package: 'stx:goodies/petitparser/tests' }" |
0 | 2 |
|
427
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
3 |
"{ NameSpace: Smalltalk }" |
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
4 |
|
190 | 5 |
PPAbstractParserTest subclass:#PPObjectTest |
0 | 6 |
instanceVariableNames:'' |
7 |
classVariableNames:'' |
|
8 |
poolDictionaries:'' |
|
9 |
category:'PetitTests-Tests' |
|
10 |
! |
|
11 |
||
12 |
||
13 |
!PPObjectTest methodsFor:'parsers'! |
|
14 |
||
15 |
integer |
|
16 |
^ PPPredicateObjectParser |
|
427
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
17 |
on: [ :each | each isKindOf: Integer ] |
0 | 18 |
message: 'integer expected' |
19 |
! |
|
20 |
||
21 |
string |
|
22 |
^ PPPredicateObjectParser |
|
427
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
23 |
on: [ :each | each isKindOf: String ] |
0 | 24 |
message: 'string expected' |
25 |
! ! |
|
26 |
||
27 |
!PPObjectTest methodsFor:'testing'! |
|
28 |
||
29 |
testInteger |
|
30 |
self assert: self integer parse: #(123) to: 123. |
|
31 |
self assert: self integer fail: #('abc') |
|
32 |
! |
|
33 |
||
34 |
testString |
|
35 |
self assert: self string parse: #('abc') to: 'abc'. |
|
36 |
self assert: self string fail: #(123) |
|
37 |
! ! |
|
38 |
||
39 |
!PPObjectTest methodsFor:'testing-fancy'! |
|
40 |
||
41 |
testFibonacci |
|
42 |
"This parser accepts fibonacci sequences with arbitrary start pairs." |
|
34 | 43 |
|
0 | 44 |
| parser | |
45 |
parser := ((self integer , self integer) end ==> [ :pair | pair first + pair last ]) |
|
46 |
/ (self integer , (self integer , self integer) and >=> [ :stream :continuation | |
|
47 |
| result | |
|
48 |
result := continuation value. |
|
49 |
(result isPetitFailure or: [ result first + result last first ~= result last last ]) |
|
50 |
ifFalse: [ parser parseOn: stream ] |
|
377
6112a403a52d
Updated to latest version from Moose repository.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
376
diff
changeset
|
51 |
ifTrue: [ PPFailure message: 'invalid fibonacci sequence' context: stream ] ]). |
0 | 52 |
self assert: parser parse: #(1 1) to: 2. |
53 |
self assert: parser parse: #(1 1 2) to: 3. |
|
54 |
self assert: parser parse: #(1 1 2 3) to: 5. |
|
55 |
self assert: parser parse: #(1 1 2 3 5) to: 8. |
|
56 |
self assert: parser parse: #(1 1 2 3 5 8) to: 13. |
|
57 |
self assert: parser parse: #(1 1 2 3 5 8 13) to: 21. |
|
58 |
self assert: parser fail: #(). |
|
59 |
self assert: parser fail: #(1). |
|
60 |
self assert: parser fail: #(1 2 3 4) end: 2 |
|
34 | 61 |
|
0 | 62 |
! ! |
63 |
||
64 |
!PPObjectTest methodsFor:'testing-operators'! |
|
65 |
||
66 |
testChoice |
|
67 |
| parser | |
|
68 |
parser := self integer / self string. |
|
69 |
self assert: parser parse: #(123) to: 123. |
|
70 |
self assert: parser parse: #('abc') to: 'abc' |
|
71 |
! |
|
72 |
||
73 |
testSequence |
|
74 |
| parser | |
|
75 |
parser := self integer , self string. |
|
76 |
self assert: parser parse: #(123 'abc') to: #(123 'abc'). |
|
77 |
self assert: parser fail: #(123 456). |
|
78 |
self assert: parser fail: #('abc' 'def'). |
|
79 |
self assert: parser fail: #('abc' 123) |
|
34 | 80 |
|
0 | 81 |
! ! |
82 |
||
83 |
!PPObjectTest class methodsFor:'documentation'! |
|
84 |
||
34 | 85 |
version |
190 | 86 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPObjectTest.st,v 1.4 2014-03-04 14:34:19 cg Exp $' |
34 | 87 |
! |
88 |
||
89 |
version_CVS |
|
190 | 90 |
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPObjectTest.st,v 1.4 2014-03-04 14:34:19 cg Exp $' |
34 | 91 |
! |
92 |
||
427
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
93 |
version_HG |
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
94 |
|
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
95 |
^ '$Changeset: <not expanded> $' |
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
96 |
! |
a7f5e6de19d2
Merged JK's version from Monticello
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
377
diff
changeset
|
97 |
|
0 | 98 |
version_SVN |
190 | 99 |
^ '$Id: PPObjectTest.st,v 1.4 2014-03-04 14:34:19 cg Exp $' |
0 | 100 |
! ! |
190 | 101 |