193 self assert: parser parse: 'fee' to: #(nil 'fee'). |
193 self assert: parser parse: 'fee' to: #(nil 'fee'). |
194 self assert: parser fail: 'foo'. |
194 self assert: parser fail: 'foo'. |
195 ! |
195 ! |
196 |
196 |
197 testCompileNotLiteral |
197 testCompileNotLiteral |
198 parser := 'foo' asParser not compile. |
198 parser := 'foo' asParser not compile. |
199 self assert: parser class methods size = 2. |
199 self assert: parser class methodDictionary size = 2. |
200 |
200 |
201 self assert: parser parse: 'bar' to: nil end: 0. |
201 self assert: parser parse: 'bar' to: nil end: 0. |
202 |
202 |
203 self assert: parser fail: 'foo'. |
203 self assert: parser fail: 'foo'. |
204 self assert: parser parse: '' to: nil end: 0. |
204 self assert: parser parse: '' to: nil end: 0. |
205 |
205 |
206 parser := '''' asParser not compile. |
206 parser := '''' asParser not compile. |
207 self assert: parser class methods size = 2. |
207 self assert: parser class methodDictionary size = 2. |
208 |
208 |
209 self assert: parser parse: 'a' to: nil end: 0. |
209 self assert: parser parse: 'a' to: nil end: 0. |
210 self assert: parser fail: ''''. |
210 self assert: parser fail: ''''. |
211 self assert: parser parse: '' to: nil end: 0. |
211 self assert: parser parse: '' to: nil end: 0. |
212 |
212 |
213 |
213 |
214 parser := ('foo' asParser, 'bar' asParser not) compile. |
214 parser := ('foo' asParser, 'bar' asParser not) compile. |
215 self assert: parser parse: 'foofoo' to: { 'foo'. nil } end: 3. |
215 self assert: parser parse: 'foofoo' to: { 'foo'. nil } end: 3. |
216 |
216 |
217 parser := ('foo' asParser, 'foo' asParser not, #any asParser star) compile. |
217 parser := ('foo' asParser, 'foo' asParser not, #any asParser star) compile. |
218 self assert: parser parse: 'foobar' to: { 'foo'. nil . #($b $a $r) } end: 6. |
218 self assert: parser parse: 'foobar' to: { 'foo'. nil . #($b $a $r) } end: 6. |
219 self assert: parser fail: 'foofoo'. |
219 self assert: parser fail: 'foofoo'. |
|
220 |
|
221 "Modified: / 05-11-2014 / 23:18:39 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
220 ! |
222 ! |
221 |
223 |
222 testCompileOptional |
224 testCompileOptional |
223 parser := #digit asParser optional compile. |
225 parser := #digit asParser optional compile. |
224 |
226 |
385 self assert: parser fail: '123'. |
387 self assert: parser fail: '123'. |
386 self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'seq' ]). |
388 self assert: (context invocations noneSatisfy: [ :e | e beginsWith: 'seq' ]). |
387 ! |
389 ! |
388 |
390 |
389 testSmalltalkToken |
391 testSmalltalkToken |
390 parser := (#letter asParser, (#digit asParser / #letter asParser) star) smalltalkToken compileWithParameters: {#profile -> true}. |
392 parser := (#letter asParser, (#digit asParser / #letter asParser) star) smalltalkToken compileWithParameters: {#profile -> true}. |
391 |
393 |
392 self assert: parser class methods size = 6. |
394 self assert: parser class methodDictionary size = 6. |
393 self assert: parser parse: 'foo'. |
395 self assert: parser parse: 'foo'. |
394 self assert: result inputValue = 'foo'. |
396 self assert: result inputValue = 'foo'. |
395 self assert: context invocationCount = 9. |
397 self assert: context invocationCount = 9. |
396 self assert: context rememberCount = 0. |
398 self assert: context rememberCount = 0. |
397 self assert: context lwRememberCount = 1. |
399 self assert: context lwRememberCount = 1. |
398 self assert: context lwRestoreCount = 0. |
400 self assert: context lwRestoreCount = 0. |
|
401 |
|
402 "Modified: / 05-11-2014 / 23:17:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
399 ! |
403 ! |
400 |
404 |
401 testSmalltalkToken2 |
405 testSmalltalkToken2 |
402 |id| |
406 |id| |
403 id := (#letter asParser, (#digit asParser / #letter asParser) star) |
407 id := (#letter asParser, (#digit asParser / #letter asParser) star) |
422 self assert: parser parse: 'f123a' to: 'f123a'. |
426 self assert: parser parse: 'f123a' to: 'f123a'. |
423 self assert: parser fail: ''. |
427 self assert: parser fail: ''. |
424 ! |
428 ! |
425 |
429 |
426 testToken2 |
430 testToken2 |
427 parser := (#letter asParser, (#digit asParser / #letter asParser) star) token compileWithParameters: {#profile -> true}. |
431 parser := (#letter asParser, (#digit asParser / #letter asParser) star) token compileWithParameters: {#profile -> true}. |
428 |
432 |
429 self assert: parser class methods size = 5. |
433 self assert: parser class methodDictionary size = 5. |
430 self assert: parser parse: 'foo'. |
434 self assert: parser parse: 'foo'. |
431 self assert: result inputValue = 'foo'. |
435 self assert: result inputValue = 'foo'. |
432 self assert: context invocationCount = 7. |
436 self assert: context invocationCount = 7. |
433 self assert: context rememberCount = 0. |
437 self assert: context rememberCount = 0. |
434 self assert: context lwRememberCount = 1. |
438 self assert: context lwRememberCount = 1. |
435 self assert: context lwRestoreCount = 0. |
439 self assert: context lwRestoreCount = 0. |
|
440 |
|
441 "Modified: / 05-11-2014 / 23:17:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
436 ! |
442 ! |
437 |
443 |
438 testTrimmingToken |
444 testTrimmingToken |
439 parser := (#letter asParser, (#digit asParser / #letter asParser) star) trimmingToken compileWithParameters: { #profile -> true }. |
445 parser := (#letter asParser, (#digit asParser / #letter asParser) star) trimmingToken compileWithParameters: { #profile -> true }. |
440 |
446 |
441 self assert: parser class methods size = 6. |
447 self assert: parser class methodDictionary size = 6. |
442 |
448 |
443 self assert: parser parse: 'foo'. |
449 self assert: parser parse: 'foo'. |
444 self assert: result inputValue = 'foo'. |
450 self assert: result inputValue = 'foo'. |
445 |
451 |
446 self assert: context invocationCount = 9. |
452 self assert: context invocationCount = 9. |
447 self assert: context rememberCount = 0. |
453 self assert: context rememberCount = 0. |
448 self assert: context lwRememberCount = 1. |
454 self assert: context lwRememberCount = 1. |
449 self assert: context lwRestoreCount = 0. |
455 self assert: context lwRestoreCount = 0. |
450 |
456 |
451 self assert: parser parse: ' foo '. |
457 self assert: parser parse: ' foo '. |
452 self assert: result inputValue = 'foo'. |
458 self assert: result inputValue = 'foo'. |
453 |
459 |
454 |
460 |
455 |
461 |
456 self assert: parser fail: '123'. |
462 self assert: parser fail: '123'. |
457 |
463 |
458 self assert: context invocationCount = 3. |
464 self assert: context invocationCount = 3. |
459 self assert: context rememberCount = 0. |
465 self assert: context rememberCount = 0. |
460 self assert: context lwRememberCount = 0. |
466 self assert: context lwRememberCount = 0. |
461 self assert: context lwRestoreCount = 0. |
467 self assert: context lwRestoreCount = 0. |
462 |
468 |
463 |
469 |
464 self assert: parser fail: ''. |
470 self assert: parser fail: ''. |
|
471 |
|
472 "Modified: / 06-11-2014 / 00:46:20 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
465 ! ! |
473 ! ! |
466 |
474 |
467 !PPCCompilerTest methodsFor:'tests - first set'! |
475 !PPCCompilerTest methodsFor:'tests - first set'! |
468 |
476 |
469 testFirstSetSuchThat |
477 testFirstSetSuchThat |
615 ! ! |
623 ! ! |
616 |
624 |
617 !PPCCompilerTest methodsFor:'tests - verification'! |
625 !PPCCompilerTest methodsFor:'tests - verification'! |
618 |
626 |
619 testClass |
627 testClass |
620 | compiledParser normalParser source | |
628 | compiledParser normalParser source | |
621 normalParser := PPSmalltalkGrammar new. |
629 normalParser := PPSmalltalkGrammar new. |
622 compiledParser := normalParser compile. |
630 compiledParser := normalParser compile. |
623 |
631 |
624 Class methods do: [ :m | |
632 Class methodsDo: [ :m | |
625 source := m sourceCode. |
633 source := m sourceCode. |
626 self assert: (normalParser parse: source) |
634 self assert: (normalParser parse: source) |
627 equals: (compiledParser parse: source withContext: self context). |
635 equals: (compiledParser parse: source withContext: self context). |
628 ]. |
636 ]. |
|
637 |
|
638 "Modified: / 05-11-2014 / 23:18:52 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
629 ! |
639 ! |
630 |
640 |
631 testObject |
641 testObject |
632 | compiledParser normalParser source | |
642 | compiledParser normalParser source | |
633 normalParser := PPSmalltalkGrammar new. |
643 normalParser := PPSmalltalkGrammar new. |