diff --git a/petitparser-tests/LICENSE b/petitparser-tests/LICENSE new file mode 100644 index 0000000..ad6b9d2 --- /dev/null +++ b/petitparser-tests/LICENSE @@ -0,0 +1,3 @@ +As of now I consider this to be MIT licensed. I have contacted the author to +get a clarification + Holger (27.11.2011) diff --git a/petitparser-tests/PetitParserTests.st b/petitparser-tests/PetitParserTests.st new file mode 100644 index 0000000..46b906a --- /dev/null +++ b/petitparser-tests/PetitParserTests.st @@ -0,0 +1,172 @@ + +TestResource subclass: PPParserResource [ + | parsers | + + + + + parserAt: aParserClass [ + "Answer a cached instance of aParserClass." + + + ^parsers at: aParserClass name ifAbsentPut: [aParserClass new] + ] + + setUp [ + + super setUp. + parsers := Dictionary new + ] +] + + + +TestCase subclass: PPAbstractParseTest [ + + + + + PPAbstractParseTest class >> isAbstract [ + + ^self name = #PPAbstractParseTest + ] + + PPAbstractParseTest class >> packageNamesUnderTest [ + + ^#('PetitParser' 'PetitTests') + ] + + assert: aParser fail: aCollection [ + + | stream result | + self assert: aParser isPetitParser. + stream := aCollection asPetitStream. + result := aParser parse: stream. + self assert: result isPetitFailure. + self assert: stream position = 0 + ] + + assert: aParser parse: aCollection [ + + self + assert: aParser + parse: aCollection + to: nil + end: aCollection size + ] + + assert: aParser parse: aCollection end: anInteger [ + + self + assert: aParser + parse: aCollection + to: nil + end: anInteger + ] + + assert: aParser parse: aCollection to: anObject [ + + self + assert: aParser + parse: aCollection + to: anObject + end: aCollection size + ] + + assert: aParser parse: aParseObject to: aTargetObject end: anInteger [ + + | stream result | + self assert: aParser isPetitParser. + stream := aParseObject asPetitStream. + result := aParser parse: stream. + aTargetObject isNil + ifTrue: [self deny: result isPetitFailure] + ifFalse: [self assert: result = aTargetObject]. + self assert: stream position = anInteger + ] + + assert: aParser parse: aParserObject toToken: from stop: to [ + + | token | + token := PPToken + on: aParserObject + start: from + stop: to. + ^self + assert: aParser + parse: aParserObject + to: token + ] + + assert: aParser parse: aParserObject toToken: from stop: to end: end [ + + | token | + token := PPToken + on: aParserObject + start: from + stop: to. + ^self + assert: aParser + parse: aParserObject + to: token + end: end + ] +] + + + +PPAbstractParseTest subclass: PPCompositeParserTest [ + | parser | + + + + + PPCompositeParserTest class >> isAbstract [ + + ^self name = #PPCompositeParserTest + ] + + PPCompositeParserTest class >> resources [ + + ^Array with: PPParserResource + ] + + assert: aCollection is: anObject [ + + | result | + result := self parse: aCollection. + self + assert: result = anObject + description: 'Got: ' , result printString , '; Expected: ' + , anObject printString + resumable: true + ] + + parse: aString [ + + ^parser parse: aString onError: [:err :pos | self error: err] + ] + + parse: aString production: aSymbol [ + + ^(parser productionAt: aSymbol) parse: aString + onError: [:err :pos | self error: err] + ] + + parserClass [ + + self subclassResponsibility + ] + + parserInstance [ + + ^PPParserResource current parserAt: self parserClass + ] + + setUp [ + + super setUp. + parser := self parserInstance + ] +] + diff --git a/petitparser-tests/package.xml b/petitparser-tests/package.xml new file mode 100644 index 0000000..dc55a2b --- /dev/null +++ b/petitparser-tests/package.xml @@ -0,0 +1,11 @@ + + PetitParserTests + PP + + git://gitorious.org/gnu-smalltalk-ports/petitparser-tests.git + PetitParser + SUnit + PetitParserTests.st + + PetitParserTests.st +