compiler/tests/PPCCompilerTest.st
changeset 422 116d2b2af905
parent 421 7e08b31e0dae
child 438 20598d7ce9fa
equal deleted inserted replaced
421:7e08b31e0dae 422:116d2b2af905
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
     2 
     4 
     3 PPAbstractParserTest subclass:#PPCCompilerTest
     5 PPAbstractParserTest subclass:#PPCCompilerTest
     4 	instanceVariableNames:'parser result context'
     6 	instanceVariableNames:'parser result context'
     5 	classVariableNames:''
     7 	classVariableNames:''
     6 	poolDictionaries:''
     8 	poolDictionaries:''
   609 	self assert: parser parse: ''.
   611 	self assert: parser parse: ''.
   610 
   612 
   611 	self assert: parser parse: 'zorg' end: 0.	
   613 	self assert: parser parse: 'zorg' end: 0.	
   612 !
   614 !
   613 
   615 
   614 testGuard1
       
   615 	| charSet |
       
   616 	charSet := PPCCompiler new guardCharSet: $a asParser.
       
   617 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | char = $a ])).
       
   618 !
       
   619 
       
   620 testGuard2
       
   621 	| charSet |
       
   622 	charSet := PPCCompiler new guardCharSet: #letter asParser.
       
   623 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | char isLetter ])).
       
   624 !
       
   625 
       
   626 testGuard3
       
   627 	| charSet |
       
   628 	charSet := PPCCompiler new guardCharSet: #letter asParser not.
       
   629 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | char isLetter not ])).
       
   630 !
       
   631 
       
   632 testGuard4
       
   633 	| charSet |
       
   634 	charSet := PPCCompiler new guardCharSet: (#letter asParser, #word asParser star).
       
   635 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | char isLetter ])).
       
   636 !
       
   637 
       
   638 testGuard5
       
   639 	| charSet |
       
   640 	charSet := PPCCompiler new guardCharSet: 'foo' asParser.
       
   641 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | char = $f ])).
       
   642 !
       
   643 
       
   644 testGuard6
       
   645 	| charSet |
       
   646 	charSet := PPCCompiler new guardCharSet: ('foo' asParser trimmingToken asCompilerTree optimizeTree).
       
   647 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | (char = $f) ]))
       
   648 !
       
   649 
       
   650 testGuard7
       
   651 	| charSet |
       
   652 	charSet := PPCCompiler new guardCharSet: ('foo' asParser trimmingToken / 'bar' asParser trimmingToken) asCompilerTree optimizeTree.
       
   653 	self assert: (charSet equals: (PPCharSetPredicate on: [ :char | (char = $f) or: [ char = $b ]] )).
       
   654 !
       
   655 
       
   656 testGuardSmalltlakToken
   616 testGuardSmalltlakToken
   657 	parser := (#letter asParser, #word asParser star) smalltalkToken compileWithParameters: { #profile -> true }.
   617 	parser := (#letter asParser, #word asParser star) smalltalkToken compileWithParameters: { #profile -> true }.
   658 	self assert: parser parse: 'bar'.
   618 	self assert: parser parse: 'bar'.
   659 	self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'seq' ]).
   619 	self assert: (context invocations anySatisfy: [ :e | e beginsWith: 'seq' ]).
   660 	
   620 	
   676 	
   636 	
   677 	self assert: parser parse: 'ab'.
   637 	self assert: parser parse: 'ab'.
   678 	self assert: parser parse: ' ab'.
   638 	self assert: parser parse: ' ab'.
   679 ! !
   639 ! !
   680 
   640 
   681 !PPCCompilerTest methodsFor:'tests - verification'!
       
   682 
       
   683 testClass
       
   684         | compiledParser normalParser source |
       
   685         normalParser := PPSmalltalkGrammar new.
       
   686         compiledParser := normalParser compile.
       
   687         
       
   688         Class methodsDo: [ :m |
       
   689                 source := m sourceCode.
       
   690                 self assert: (normalParser parse: source) 
       
   691                           equals: (compiledParser parse: source withContext: self context). 
       
   692         ].
       
   693 
       
   694     "Modified: / 05-11-2014 / 23:18:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   695 !
       
   696 
       
   697 testObject
       
   698         | compiledParser normalParser source |
       
   699         normalParser := PPSmalltalkGrammar new.
       
   700         compiledParser := normalParser compile.
       
   701         
       
   702         Object methodsDo: [ :m |
       
   703                 source := m sourceCode.
       
   704                 self assert: (normalParser parse: source) 
       
   705                           equals: (compiledParser parse: source withContext: self context). 
       
   706         ].
       
   707 
       
   708     "Modified: / 30-10-2014 / 23:22:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   709 !
       
   710 
       
   711 testWhitespace
       
   712 	| compiledParser normalParser source |
       
   713 	normalParser := PPSmalltalkGrammar new.
       
   714 	compiledParser := normalParser compile.
       
   715 	
       
   716 	source := '  foo ^ 1'.
       
   717 	self assert: (normalParser parse: source) 
       
   718 		  equals: (compiledParser parse: source withContext: self context).
       
   719 ! !
       
   720 
       
   721 !PPCCompilerTest class methodsFor:'documentation'!
   641 !PPCCompilerTest class methodsFor:'documentation'!
   722 
   642 
   723 version_HG
   643 version_HG
   724 
   644 
   725     ^ '$Changeset: <not expanded> $'
   645     ^ '$Changeset: <not expanded> $'