compiler/tests/PPCGuardTest.st
changeset 391 553a5456963b
child 392 9b297f0d949c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/tests/PPCGuardTest.st	Sun Oct 26 01:03:31 2014 +0000
@@ -0,0 +1,128 @@
+"{ Package: 'stx:goodies/petitparser/compiler/tests' }"
+
+TestCase subclass:#PPCGuardTest
+	instanceVariableNames:'guard compiler'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'PetitCompiler-Tests-Core'
+!
+
+PPCGuardTest comment:''
+!
+
+!PPCGuardTest methodsFor:'as yet unclassified'!
+
+setUp
+	super setUp.
+	compiler := PPCMockCompiler new.
+!
+
+testCompiling
+	guard := PPCGuard new initializeFor: ($a asParser / $b asParser) asCompilerTree.
+	guard id: #foo.
+	guard compileGuard: compiler.
+	
+	self assert: compiler lines size = 1.
+	self assert: compiler lines first = '(foo at: context peek asInteger)'.
+!
+
+testCompiling2
+	guard := PPCGuard new initializeFor: (#letter asParser / #digit asParser) asCompilerTree.
+	guard id: #foo.
+	guard compileGuard: compiler.
+	
+	self assert: compiler lines size = 1.
+	self assert: compiler lines first = '(context peek isAlphaNumeric)'.
+!
+
+testCompiling3
+	guard := PPCGuard new initializeFor: ($a asParser, (#letter asParser / #digit asParser)) asCompilerTree.
+	guard id: #foo.
+	guard compileGuard: compiler.
+	
+	self assert: compiler lines size = 1.
+	self assert: compiler lines first = ('(context peek = ', $a printString ,')').
+!
+
+testCompiling4
+	guard := PPCGuard new initializeFor: ('foo' asParser / 'foobar' asParser) asCompilerTree.
+	guard id: #foo.
+	guard compileGuard: compiler.
+	
+	self assert: compiler lines size = 1.
+	self assert: compiler lines first = ('(context peek = ', $f printString ,')').
+!
+
+testMakesSense
+	guard := PPCGuard new initializeFor: #letter asParser.
+	self assert: guard makesSense.
+	
+	guard := PPCGuard new initializeFor: nil asParser asCompilerTree.
+	self assert: guard makesSense not.
+	
+	guard := PPCGuard new initializeFor: (#letter asParser / nil asParser) asCompilerTree.
+	self assert: guard makesSense not.
+	
+	guard := PPCGuard new initializeFor: (#letter asParser / #digit asParser) asCompilerTree.
+	self assert: guard makesSense.
+
+	guard := PPCGuard new initializeFor: (#letter asParser / #digit asParser star) asCompilerTree.
+	self assert: guard makesSense not.
+!
+
+testMessage
+	guard := PPCGuard new initializeFor: #letter asParser asCompilerTree.
+	self assert: (guard message = #isLetter).
+	self assert: (guard message = #isAlphaNumeric) not.
+	
+	guard := PPCGuard new initializeFor: #word asParser asCompilerTree.
+	self assert: (guard message = #isAlphaNumeric).
+	
+	guard := PPCGuard new initializeFor: #digit asParser asCompilerTree.
+	self assert: (guard message = #isDigit).
+	
+	guard := PPCGuard new initializeFor: 'a' asParser asCompilerTree.
+	self assert: (guard message = #isDigit) not.
+	self assert: (guard message = #isLetter) not.
+	self assert: (guard message = #isAlphaNumeric) not.
+	
+!
+
+testMessage2
+	guard := PPCGuard new initializeFor: #letter asParser / #digit asParser.
+	self assert: guard message = #isAlphaNumeric
+	
+!
+
+testTestMessage
+	guard := PPCGuard new initializeFor: #letter asParser.
+	self assert: (guard testMessage: #isLetter).
+	self assert: (guard testMessage: #isAlphaNumeric) not.
+	
+	guard := PPCGuard new initializeFor: #word asParser.
+	self assert: (guard testMessage: #isAlphaNumeric).
+	
+	guard := PPCGuard new initializeFor: #digit asParser.
+	self assert: (guard testMessage: #isDigit).
+	
+	guard := PPCGuard new initializeFor: 'a' asParser.
+	self assert: (guard testMessage: #isDigit) not.
+	self assert: (guard testMessage: #isLetter) not.
+	self assert: (guard testMessage: #isAlphaNumeric) not.
+	
+!
+
+testTestSingleCharacter
+	guard := PPCGuard new initializeFor: $a asParser.
+	self assert: guard testSingleCharacter.
+	
+	guard := PPCGuard new initializeFor: 'foo' asParser.
+	self assert: guard testSingleCharacter.
+	
+	guard := PPCGuard new initializeFor: ('foo' asParser / 'bar' asParser).
+	self assert: guard testSingleCharacter not.
+
+	guard := PPCGuard new initializeFor: ($a asParser, (#letter asParser / #digit asParser)).
+	self assert: guard testSingleCharacter.
+! !
+