tests/PPCompositeParserTest.st
author Claus Gittinger <cg@exept.de>
Sun, 22 Jul 2018 22:41:13 +0200
changeset 633 4be0b0537d80
parent 565 e2529c410388
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
158
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/tests' }"
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
565
e2529c410388 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
     3
"{ NameSpace: Smalltalk }"
e2529c410388 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
     4
158
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
PPAbstractParserTest subclass:#PPCompositeParserTest
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:'parser result'
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
565
e2529c410388 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
     9
	category:'PetitTests-Tests'
158
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
!PPCompositeParserTest class methodsFor:'accessing'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
resources
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	^ Array with: PPParserResource
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!PPCompositeParserTest class methodsFor:'testing'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
isAbstract
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	^ self name = #PPCompositeParserTest
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!PPCompositeParserTest methodsFor:'accessing'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
parserClass
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	self subclassResponsibility
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
parserInstance
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	^ PPParserResource current parserAt: self parserClass
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
parserInstanceFor: aSymbol
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	^ aSymbol = #start
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
		ifTrue: [ self parserInstance ]
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
		ifFalse: [
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
			self parserInstance
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
				productionAt: aSymbol 
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
				ifAbsent: [ self error: 'Production ' , self parserClass name , '>>' , aSymbol printString , ' not found.' ] ]
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
!PPCompositeParserTest methodsFor:'parsing'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
fail: aString rule: aSymbol 
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	| production |
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	production := self parserInstanceFor: aSymbol.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	result := production end parse: aString.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	self
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
		assert: result isPetitFailure
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
		description: 'Able to parse ' , aString printString.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	^ result
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
parse: aString 
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	^ self parse: aString rule: #start
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
parse: aString rule: aSymbol
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
	| production |
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
	production := self parserInstanceFor: aSymbol.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
	result := production end parse: aString.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	self
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
		deny: result isPetitFailure
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
		description: 'Unable to parse ' , aString printString.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	^ result
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!PPCompositeParserTest methodsFor:'running'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
setUp
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	super setUp.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	parser := self parserInstance
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
tearDown
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	super tearDown.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	parser := result := nil
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
!PPCompositeParserTest methodsFor:'utilities'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
assert: aCollection is: anObject
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	self parse: aCollection.
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	self
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
		assert: result = anObject
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
		description: 'Got: ' , result printString , '; Expected: ' , anObject printString
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
		resumable: true
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!PPCompositeParserTest class methodsFor:'documentation'!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
version
565
e2529c410388 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
    95
    ^ '$Header$'
158
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
version_CVS
565
e2529c410388 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
    99
    ^ '$Header$'
158
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
version_SVN
565
e2529c410388 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
   103
    ^ '$Id$'
158
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
! !
6e8ec5d71ae7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105