RegressionTests__ParserTests.st
author sr
Wed, 15 Nov 2017 16:41:47 +0100
changeset 1890 9367c7639c2d
parent 1796 de195a6c7aa8
child 2185 210ba8fc2b76
permissions -rw-r--r--
removed not existing Class from project definition
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1796
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     1
"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     3
	      All Rights Reserved
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     4
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     5
 This software is furnished under a license and may be used
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    10
 hereby transferred.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    11
"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    12
"{ Package: 'stx:goodies/regression' }"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    13
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    14
"{ NameSpace: RegressionTests }"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    15
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    16
TestCase subclass:#ParserTests
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    17
	instanceVariableNames:'mockClass'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    18
	classVariableNames:''
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    19
	poolDictionaries:''
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    20
	category:'tests-Regression-Compilers'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    21
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    22
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    23
!ParserTests class methodsFor:'documentation'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    24
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    25
copyright
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    26
"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    27
 COPYRIGHT (c) 2006 by eXept Software AG
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    28
	      All Rights Reserved
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    29
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    30
 This software is furnished under a license and may be used
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    31
 only in accordance with the terms of that license and with the
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    33
 be provided or otherwise made available to, or used by, any
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    34
 other person.  No title to or ownership of the software is
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    35
 hereby transferred.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    36
"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    37
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    38
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    39
!ParserTests methodsFor:'accessing'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    40
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    41
mockClass
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    42
    ^ mockClass
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    43
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    44
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    45
mockClass:something
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    46
    mockClass := something.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    47
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    48
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    49
parserClass
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    50
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    51
    ^Parser
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    52
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    53
    "Created: / 01-07-2010 / 11:53:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    54
    "Modified: / 01-07-2010 / 17:38:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    55
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    56
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    57
!ParserTests methodsFor:'running'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    58
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    59
setUp
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    60
    "prepares the testing environment which consists of mock class instance
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    61
     for sample annotated methods"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    62
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    63
    |testClass|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    64
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    65
    Class withoutUpdatingChangesDo:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    66
        testClass := self class 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    67
                    subclass:'AnnotationTestedClass'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    68
                    classInstanceVariableNames:''
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    69
                    instanceVariableNames:''
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    70
                    classVariableNames:''
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    71
                    poolDictionaries:''.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    72
    ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    73
    self mockClass:testClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    74
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    75
    "Created: / 29-11-2009 / 20:52:00 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    76
    "Modified: / 29-11-2009 / 22:09:27 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    77
    "Modified: / 12-07-2010 / 09:33:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    78
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    79
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    80
tearDown
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    81
    "release allocated resources for testing environment"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    82
    self mockClass: nil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    83
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    84
    "Created: / 29-11-2009 / 20:52:13 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    85
    "Modified: / 29-11-2009 / 22:09:33 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    86
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    87
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    88
!ParserTests methodsFor:'smoke test'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    89
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    90
testParseAllMethods
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    91
    Smalltalk allClassesDo:[:cls |
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    92
        Transcript showCR:cls.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    93
        cls instAndClassMethodsDo:[:mthd |
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    94
            Parser parseMethod:mthd source in:mthd mclass
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    95
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    96
    ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    97
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    98
    "Created: / 28-06-2011 / 22:23:43 / cg"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
    99
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   100
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   101
!ParserTests methodsFor:'tests - annotations'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   102
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   103
testAnnotationWithArrayLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   104
    "Positive testing the structure of unknown annotation definition: the annotation with #(<array>) literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   105
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   106
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   107
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   108
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   109
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   110
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   111
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   112
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   113
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   114
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   115
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   116
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   117
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   118
                        parseMethod:'annotationWithArrayLiteralExample <annotation: #(1 2 3 4)> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   119
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   120
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   121
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   122
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   123
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   124
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   125
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   126
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   127
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   128
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   129
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   130
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   131
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   132
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   133
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   134
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   135
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   136
    self assert:(arguments at:1) = #( 1 2 3 4 ).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   137
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   138
    "Created: / 12-01-2010 / 13:43:19 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   139
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   140
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   141
testAnnotationWithByteArrayLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   142
    "Positive testing the structure of unknown annotation definition: the annotation with #[<byte array>] literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   143
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   144
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   145
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   146
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   147
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   148
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   149
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   150
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   151
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   152
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   153
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   154
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   155
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   156
                        parseMethod:'annotationWithByteArrayLiteralExample <annotation: #[64 128 192]> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   157
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   158
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   159
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   160
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   161
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   162
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   163
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   164
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   165
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   166
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   167
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   168
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   169
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   170
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   171
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   172
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   173
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   174
    self assert:(arguments at:1) = #[ 64 128 192 ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   175
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   176
    "Created: / 12-01-2010 / 13:35:36 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   177
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   178
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   179
testAnnotationWithCharacterLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   180
    "Positive testing the structure of unknown annotation definition: the annotation with character literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   181
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   182
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   183
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   184
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   185
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   186
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   187
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   188
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   189
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   190
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   191
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   192
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   193
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   194
                        parseMethod:'annotationWithCharacterLiteralExample <annotation: $A> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   195
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   196
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   197
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   198
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   199
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   200
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   201
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   202
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   203
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   204
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   205
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   206
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   207
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   208
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   209
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   210
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   211
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   212
    self assert:(arguments at:1) = $A.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   213
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   214
    "Created: / 12-01-2010 / 13:20:37 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   215
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   216
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   217
testAnnotationWithFalseLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   218
    "Positive testing the structure of unknown annotation definition: the annotation with false literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   219
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   220
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   221
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   222
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   223
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   224
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   225
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   226
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   227
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   228
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   229
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   230
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   231
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   232
                        parseMethod:'annotationWithFalseLiteralExample <annotation: false> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   233
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   234
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   235
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   236
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   237
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   238
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   239
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   240
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   241
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   242
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   243
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   244
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   245
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   246
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   247
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   248
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   249
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   250
    self assert:(arguments at:1) = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   251
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   252
    "Created: / 12-01-2010 / 13:13:26 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   253
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   254
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   255
testAnnotationWithInvalidArgument
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   256
    "Negative testing the structure of unknown annotation definition: the annotation with the non-literal argument; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   257
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   258
    |parserState parseErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   259
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   260
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   261
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   262
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   263
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   264
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   265
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   266
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   267
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   268
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   269
                        parseMethod:'annotationWithInvalidArgumentExample <annotation: annotation:> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   270
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   271
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   272
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   273
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   274
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   275
    self assert:parserState errorFlag = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   276
    self assert:parseErrorOccured = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   277
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   278
    "Created: / 12-01-2010 / 13:48:48 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   279
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   280
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   281
testAnnotationWithInvalidContentFollowed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   282
    "Negative testing the structure of unknown annotation definition: the annotation with valid argument followed by invalid content; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   283
    "Test Note: based on the previous parser behaviour this type of situation is not considered as serious,
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   284
     it's considered as ignorable, informing requester and proceeding execution"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   285
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   286
    |parserState annotation arguments ignorableErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   287
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   288
    ignorableErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   289
     " create method for annotation testing purpose " " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   290
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   291
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   292
            ignorableErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   293
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   294
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   295
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   296
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   297
                        parseMethod:'annotationWithInvalidContentFollowedExample <annotation: #argument #argument> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   298
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   299
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   300
     " ignorable error should occured "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   301
    self assert:ignorableErrorOccured = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   302
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   303
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   304
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   305
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   306
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   307
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   308
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   309
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   310
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   311
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   312
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   313
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   314
    self assert:(arguments at:1) = #argument.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   315
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   316
    "Created: / 12-01-2010 / 13:52:16 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   317
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   318
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   319
testAnnotationWithKeywordLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   320
    "Positive testing the structure of unknown annotation definition: the annotation with #<keyword> literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   321
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   322
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   323
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   324
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   325
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   326
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   327
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   328
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   329
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   330
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   331
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   332
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   333
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   334
                        parseMethod:'annotationWithKeywordLiteralExample <annotation: #equals:> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   335
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   336
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   337
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   338
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   339
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   340
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   341
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   342
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   343
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   344
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   345
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   346
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   347
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   348
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   349
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   350
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   351
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   352
    self assert:(arguments at:1) = #equals:.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   353
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   354
    "Created: / 12-01-2010 / 13:30:47 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   355
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   356
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   357
testAnnotationWithMultiKeywordLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   358
    "Positive testing the structure of unknown annotation definition: the annotation with #<multikeyword> literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   359
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   360
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   361
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   362
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   363
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   364
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   365
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   366
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   367
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   368
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   369
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   370
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   371
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   372
                        parseMethod:'annotationWithMultiKeywordLiteralExample <annotation: #equals:from:> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   373
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   374
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   375
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   376
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   377
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   378
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   379
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   380
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   381
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   382
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   383
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   384
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   385
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   386
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   387
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   388
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   389
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   390
    self assert:(arguments at:1) = #equals:from:.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   391
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   392
    "Created: / 12-01-2010 / 13:31:41 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   393
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   394
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   395
testAnnotationWithNegativeNumberLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   396
    "Positive testing the structure of unknown annotation definition: the annotation with negative_number literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   397
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   398
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   399
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   400
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   401
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   402
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   403
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   404
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   405
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   406
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   407
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   408
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   409
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   410
                        parseMethod:'annotationWithNegativeNumberLiteralExample <annotation: -123> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   411
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   412
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   413
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   414
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   415
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   416
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   417
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   418
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   419
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   420
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   421
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   422
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   423
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   424
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   425
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   426
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   427
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   428
    self assert:(arguments at:1) = -123.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   429
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   430
    "Created: / 12-01-2010 / 13:18:46 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   431
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   432
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   433
testAnnotationWithNilLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   434
    "Positive testing the structure of unknown annotation definition: the annotation with nil literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   435
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   436
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   437
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   438
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   439
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   440
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   441
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   442
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   443
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   444
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   445
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   446
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   447
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   448
                        parseMethod:'annotationWithFalseLiteralExample <annotation: nil> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   449
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   450
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   451
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   452
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   453
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   454
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   455
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   456
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   457
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   458
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   459
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   460
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   461
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   462
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   463
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   464
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   465
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   466
    self assert:(arguments at:1) isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   467
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   468
    "Created: / 12-01-2010 / 13:13:59 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   469
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   470
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   471
testAnnotationWithNumberLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   472
    "Positive testing the structure of unknown annotation definition: the annotation with number literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   473
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   474
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   475
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   476
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   477
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   478
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   479
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   480
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   481
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   482
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   483
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   484
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   485
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   486
                        parseMethod:'annotationWithNumberLiteralExample <annotation: 123> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   487
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   488
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   489
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   490
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   491
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   492
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   493
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   494
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   495
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   496
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   497
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   498
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   499
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   500
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   501
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   502
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   503
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   504
    self assert:(arguments at:1) = 123.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   505
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   506
    "Created: / 12-01-2010 / 13:18:15 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   507
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   508
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   509
testAnnotationWithStringLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   510
    "Positive testing the structure of unknown annotation definition: the annotation with string literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   511
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   512
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   513
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   514
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   515
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   516
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   517
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   518
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   519
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   520
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   521
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   522
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   523
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   524
                        parseMethod:'annotationWithCharacterLiteralExample <annotation: ''Hello world!!''> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   525
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   526
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   527
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   528
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   529
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   530
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   531
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   532
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   533
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   534
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   535
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   536
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   537
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   538
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   539
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   540
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   541
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   542
    self assert:(arguments at:1) = 'Hello world!!'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   543
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   544
    "Created: / 12-01-2010 / 13:21:43 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   545
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   546
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   547
testAnnotationWithSymbolLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   548
    "Positive testing the structure of unknown annotation definition: the annotation with #<characters> | #<name> literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   549
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   550
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   551
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   552
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   553
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   554
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   555
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   556
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   557
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   558
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   559
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   560
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   561
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   562
                        parseMethod:'annotationWithSymbolLiteralExample <annotation: #symbol> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   563
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   564
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   565
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   566
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   567
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   568
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   569
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   570
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   571
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   572
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   573
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   574
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   575
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   576
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   577
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   578
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   579
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   580
    self assert:(arguments at:1) = #symbol.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   581
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   582
    "Created: / 12-01-2010 / 13:26:54 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   583
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   584
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   585
testAnnotationWithSymbolLiteral2
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   586
    "Positive testing the structure of unknown annotation definition: the annotation with #<characters> | #<name> literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   587
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   588
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   589
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   590
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   591
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   592
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   593
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   594
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   595
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   596
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   597
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   598
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   599
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   600
                        parseMethod:'annotationWithSymbolLiteralExample <annotation: symbol> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   601
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   602
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   603
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   604
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   605
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   606
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   607
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   608
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   609
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   610
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   611
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   612
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   613
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   614
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   615
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   616
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   617
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   618
    self assert:(arguments at:1) = #symbol.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   619
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   620
    "Created: / 11-07-2010 / 23:00:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   621
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   622
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   623
testAnnotationWithTrueLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   624
    "Positive testing the structure of unknown annotation definition: the annotation with true literal; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   625
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   626
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   627
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   628
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   629
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   630
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   631
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   632
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   633
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   634
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   635
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   636
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   637
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   638
                        parseMethod:'annotationWithTrueLiteralExample <annotation: true> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   639
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   640
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   641
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   642
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   643
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   644
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   645
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   646
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   647
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   648
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   649
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   650
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   651
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   652
    self assert:(annotation at:1) = 'annotation:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   653
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   654
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   655
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   656
    self assert:(arguments at:1) = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   657
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   658
    "Created: / 12-01-2010 / 13:11:22 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   659
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   660
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   661
testCompoundAnnotationLiteral
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   662
    "Positive testing the structure of unknown annotation definition: the annotation is compound of more keywords defining the annotation type; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   663
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   664
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   665
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   666
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   667
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   668
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   669
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   670
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   671
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   672
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   673
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   674
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   675
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   676
                        parseMethod:'compoundAnnotationLiteralExample <annotation: true alt: false> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   677
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   678
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   679
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   680
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   681
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   682
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   683
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   684
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   685
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   686
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   687
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   688
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   689
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   690
    self assert:(annotation at:1) = 'annotation:alt:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   691
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   692
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   693
    self assert:arguments size = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   694
    self assert:(arguments at:1) = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   695
    self assert:(arguments at:2) = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   696
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   697
    "Created: / 12-01-2010 / 13:47:00 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   698
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   699
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   700
testDislocationAfterMethodBody
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   701
    "Negative testing the location of annotation definition: the annotation is situated after MethodSequenceNode; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   702
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   703
    |parserState parseErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   704
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   705
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   706
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   707
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   708
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   709
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   710
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   711
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   712
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   713
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   714
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   715
                        parseMethod:'dislocationInMethodHeaderExample |x| x:=1. ^x. <annotation: #argument>'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   716
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   717
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   718
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   719
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   720
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   721
    self assert:parserState errorFlag = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   722
    self assert:parseErrorOccured = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   723
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   724
    "Created: / 12-01-2010 / 12:42:03 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   725
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   726
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   727
testDislocationInMethodBody
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   728
    "Negative testing the location of annotation definition: the annotation is situated in MethodSequenceNode; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   729
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   730
    |parserState parseErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   731
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   732
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   733
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   734
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   735
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   736
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   737
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   738
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   739
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   740
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   741
                        parseMethod:'dislocationInMethodHeaderExample |x| <annotation: #argument> x:=1. ^x.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   742
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   743
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   744
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   745
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   746
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   747
    self assert:parserState errorFlag = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   748
    self assert:parseErrorOccured = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   749
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   750
    "Created: / 12-01-2010 / 12:31:24 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   751
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   752
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   753
testDislocationInMethodHeader
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   754
    "Negative testing the location of annotation definition: the annotation is situated before <name>|BinaryMethodName|KeywordMethodName; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   755
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   756
    |parserState parseErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   757
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   758
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   759
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   760
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   761
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   762
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   763
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   764
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   765
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   766
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   767
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   768
                        parseMethod:'<annotation: #argument> dislocationInMethodHeaderExample ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   769
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   770
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   771
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   772
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   773
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   774
    self assert:parserState errorFlag = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   775
    self assert:parseErrorOccured = true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   776
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   777
    "Created: / 12-01-2010 / 12:29:46 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   778
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   779
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   780
testEmptyAnnotation
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   781
    "Positive testing the structure of unknown annotation definition: the empty annotation; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   782
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   783
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   784
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   785
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   786
    " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   787
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   788
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   789
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   790
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   791
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   792
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   793
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   794
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   795
                        parseMethod:'emptyAnnotationExample <annotation> |x| x:=1. ^x. '
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   796
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   797
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   798
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   799
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   800
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   801
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   802
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   803
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   804
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   805
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   806
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   807
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   808
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   809
    self assert:(annotation at:1) = 'annotation'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   810
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   811
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   812
    self assert:arguments size = 0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   813
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   814
    "Created: / 12-01-2010 / 13:08:15 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   815
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   816
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   817
testMultipleAnnotationsInMethod
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   818
    "Positive testing the multiple annotation definition and theirs order: the annotations are situated in defined location; see grammar"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   819
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   820
    |parserState parseErrorOccured annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   821
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   822
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   823
    parseErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   824
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   825
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   826
            parseErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   827
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   828
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   829
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   830
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   831
                        parseMethod:'multipleAnnotationsInMethodExample <annotation1: #argument> <annotation2: #argument> |x| x:=1. ^x.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   832
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   833
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   834
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   835
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   836
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   837
    self assert:parserState errorFlag = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   838
    self assert:parseErrorOccured = false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   839
     " find the annotations record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   840
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   841
    self assert:(parserState annotations size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   842
     " check the first annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   843
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   844
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   845
    self assert:(annotation at:1) = 'annotation1:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   846
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   847
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   848
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   849
    self assert:(arguments at:1) = #argument.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   850
     " check the second annotation defined"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   851
    annotation := parserState annotations at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   852
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   853
    self assert:(annotation at:1) = 'annotation2:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   854
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   855
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   856
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   857
    self assert:(arguments at:1) = #argument.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   858
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   859
    "Created: / 12-01-2010 / 12:47:57 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   860
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   861
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   862
!ParserTests methodsFor:'tests - context'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   863
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   864
testContextWithInvalidArgument
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   865
    "Negative testing the context annotation structure for the no-literal argument"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   866
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   867
    |parserState|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   868
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   869
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   870
    self should:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   871
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   872
                        parseMethod:'contextWithNoArgumentsExample <context: context:> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   873
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   874
        ] raise:ParseError.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   875
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   876
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   877
"/    self assert:parserState notNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   878
"/    self assert:parserState == #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   879
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   880
    "Created: / 11-01-2010 / 22:50:54 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   881
    "Modified: / 01-07-2010 / 16:30:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   882
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   883
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   884
testContextWithInvalidContentFollowed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   885
    "Negative testing the context annotation structure 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   886
     with valid argument followed by invalid content (following literal): <context: #return #return>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   887
    "Test Note: based on the previous parser behaviour this type of situation is not considered as serious,
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   888
     it's considered as ignorable, informing requester and proceeding execution"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   889
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   890
    |parserState annotation arguments ignorableErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   891
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   892
    ignorableErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   893
     " create method for annotation testing purpose " " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   894
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   895
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   896
            ignorableErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   897
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   898
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   899
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   900
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   901
                        parseMethod:'contextWithInvalidContentFollowedExample <context: #return #return> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   902
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   903
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   904
     " ignorable error should occured "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   905
    self should:ignorableErrorOccured.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   906
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   907
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   908
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   909
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   910
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   911
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   912
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   913
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   914
    self assert:(annotation at:1) = 'context:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   915
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   916
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   917
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   918
    self assert:(arguments at:1) = #return.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   919
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   920
    "Created: / 09-01-2010 / 13:14:26 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   921
    "Modified: / 11-01-2010 / 23:15:15 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   922
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   923
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   924
testContextWithNoArguments
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   925
    "Negative testing the context annotation structure for the no argument annotation structure <context>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   926
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   927
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   928
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   929
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   930
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   931
                parseMethod:'contextWithNoArgumentsExample <context> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   932
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   933
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   934
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   935
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   936
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   937
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   938
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   939
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   940
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   941
    self assert:(annotation at:1) = 'context'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   942
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   943
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   944
    self assert:arguments size = 0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   945
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   946
    "Created: / 09-01-2010 / 12:41:53 / Pavel Pospíchal <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   947
    "Modified: / 11-01-2010 / 23:15:24 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   948
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   949
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   950
testStxContext
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   951
    "Testing the context annotation structure used in St/X virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   952
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   953
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   954
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   955
    " create method for annotation testing purpose : GenericException>>raiseRequest"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   956
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   957
                parseMethod:'stxContextExample <context: #return> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   958
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   959
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   960
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   961
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   962
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   963
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   964
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   965
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   966
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   967
    self assert:(annotation at:1) = 'context:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   968
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   969
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   970
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   971
    self assert:(arguments at:1) = #return.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   972
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   973
    "Created: / 29-11-2009 / 09:37:38 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   974
    "Modified: / 11-01-2010 / 22:33:21 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   975
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   976
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   977
!ParserTests methodsFor:'tests - exception'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   978
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   979
testExceptionWithInvalidArgument
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   980
    "Negative testing the exception annotation structure for the no-literal argument"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   981
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   982
    |parserState|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   983
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   984
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   985
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   986
                parseMethod:'exceptionWithInvalidArgumentExample <exception: exception:> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   987
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   988
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   989
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   990
    self assert:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   991
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   992
    "Created: / 11-01-2010 / 22:57:43 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   993
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   994
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   995
testExceptionWithInvalidContentFollowed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   996
    "Negative testing the exception annotation structure 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   997
     with valid argument followed by invalid content (following literal): <exception: #handle #handle>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   998
    "Test Note: based on the previous parser behaviour this type of situation is not considered as serious,
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
   999
     it's considered as ignorable, informing requester and proceeding execution"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1000
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1001
    |parserState annotation arguments ignorableErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1002
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1003
    ignorableErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1004
     " create method for annotation testing purpose " " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1005
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1006
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1007
            ignorableErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1008
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1009
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1010
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1011
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1012
                        parseMethod:'exceptionWithInvalidContentFollowedExample <exception: #handle #handle> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1013
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1014
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1015
     " ignorable error should occured "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1016
    self should:ignorableErrorOccured.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1017
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1018
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1019
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1020
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1021
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1022
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1023
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1024
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1025
    self assert:(annotation at:1) = 'exception:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1026
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1027
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1028
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1029
    self assert:(arguments at:1) = #handle.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1030
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1031
    "Created: / 11-01-2010 / 23:02:28 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1032
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1033
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1034
testExceptionWithNoArguments
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1035
    "Negative testing the exception annotation structure for the no argument annotation structure <exception>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1036
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1037
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1038
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1039
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1040
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1041
                parseMethod:'exceptionWithNoArgumentsExample <exception> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1042
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1043
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1044
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1045
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1046
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1047
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1048
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1049
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1050
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1051
    self assert:(annotation at:1) = 'exception'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1052
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1053
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1054
    self assert:arguments size = 0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1055
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1056
    "Created: / 11-01-2010 / 23:06:31 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1057
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1058
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1059
testSt80HandleException
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1060
    "Testing the exception annotation structure used in St-80 virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1061
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1062
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1063
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1064
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1065
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1066
                parseMethod:'st80HandleExceptionExample <exception: #handle> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1067
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1068
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1069
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1070
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1071
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1072
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1073
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1074
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1075
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1076
    self assert:(annotation at:1) = 'exception:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1077
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1078
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1079
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1080
    self assert:(arguments at:1) = #handle.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1081
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1082
    "Created: / 29-11-2009 / 09:36:20 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1083
    "Modified: / 07-12-2009 / 01:38:31 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1084
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1085
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1086
testSt80RaiseException
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1087
    "Testing the exception annotation structure used in St-80 virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1088
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1089
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1090
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1091
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1092
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1093
                parseMethod:'st80RaiseExceptionExample <exception: #raise> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1094
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1095
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1096
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1097
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1098
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1099
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1100
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1101
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1102
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1103
    self assert:(annotation at:1) = 'exception:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1104
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1105
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1106
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1107
    self assert:(arguments at:1) = #raise.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1108
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1109
    "Created: / 29-11-2009 / 22:36:00 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1110
    "Modified: / 12-12-2009 / 21:39:21 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1111
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1112
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1113
testSt80UnwindException
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1114
    "Testing the exception annotation structure used in St-80 virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1115
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1116
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1117
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1118
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1119
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1120
                parseMethod:'st80UnwindExceptionExample <exception: #unwind> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1121
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1122
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1123
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1124
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1125
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1126
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1127
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1128
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1129
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1130
    self assert:(annotation at:1) = 'exception:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1131
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1132
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1133
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1134
    self assert:(arguments at:1) = #unwind.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1135
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1136
    "Created: / 29-11-2009 / 22:36:49 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1137
    "Modified: / 12-12-2009 / 21:39:35 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1138
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1139
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1140
!ParserTests methodsFor:'tests - external function'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1141
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1142
testDolphinExternalFunctionByStdcall
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1143
    "Testing the external function annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1144
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1145
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1146
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1147
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1148
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1149
                parseMethod:'dolphinExternalFunctionByStdcallExample <stdcall: ''hresult CloseThemeData handle''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1150
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1151
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1152
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1153
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1154
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1155
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1156
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1157
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1158
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1159
    self assert:(annotation at:1) = 'stdcall:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1160
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1161
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1162
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1163
    self assert:(arguments at:1) = 'hresult CloseThemeData handle'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1164
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1165
    "Created: / 29-11-2009 / 09:50:11 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1166
    "Modified: / 12-01-2010 / 11:56:15 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1167
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1168
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1169
testSqueakExternalFunctionByApicall
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1170
    "Testing the external function annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1171
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1172
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1173
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1174
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1175
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1176
                parseMethod:'squeakExternalFunctionByApicallExample <apicall: ''long GetCurrentProcessId (void)'' module: ''kernel32.dll''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1177
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1178
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1179
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1180
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1181
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1182
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1183
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1184
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1185
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1186
    self assert:(annotation at:1) = 'apicall:module:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1187
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1188
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1189
    self assert:arguments size = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1190
    self assert:(arguments at:1) = 'long GetCurrentProcessId (void)'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1191
    self assert:(arguments at:2) = 'kernel32.dll'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1192
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1193
    "Created: / 29-11-2009 / 09:49:04 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1194
    "Modified: / 11-01-2010 / 23:29:51 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1195
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1196
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1197
testSqueakExternalFunctionByCdecl
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1198
    "Testing the external function annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1199
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1200
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1201
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1202
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1203
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1204
                parseMethod:'squeakExternalFunctionByCdeclExample <cdecl: ''long fstat (long MacStat* )'' module: ''libc.dylib''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1205
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1206
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1207
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1208
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1209
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1210
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1211
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1212
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1213
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1214
    self assert:(annotation at:1) = 'cdecl:module:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1215
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1216
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1217
    self assert:arguments size = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1218
    self assert:(arguments at:1) = 'long fstat (long MacStat* )'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1219
    self assert:(arguments at:2) = 'libc.dylib'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1220
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1221
    "Created: / 29-11-2009 / 09:49:36 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1222
    "Modified: / 11-01-2010 / 23:18:04 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1223
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1224
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1225
testStVExternalFunctionByApi
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1226
    "Testing the external function annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1227
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1228
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1229
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1230
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1231
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1232
                parseMethod:'stVExternalFunctionByApiExample <api: ''_func _int32 void''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1233
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1234
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1235
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1236
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1237
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1238
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1239
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1240
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1241
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1242
    self assert:(annotation at:1) = 'api:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1243
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1244
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1245
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1246
    self assert:(arguments at:1) = '_func _int32 void'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1247
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1248
    "Created: / 29-11-2009 / 09:47:49 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1249
    "Modified: / 12-12-2009 / 22:08:06 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1250
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1251
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1252
testStVExternalFunctionByOle
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1253
    "Testing the external function annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1254
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1255
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1256
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1257
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1258
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1259
                parseMethod:'stVExternalFunctionByOleExample <ole: ''return varchar2 varchar2''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1260
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1261
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1262
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1263
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1264
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1265
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1266
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1267
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1268
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1269
    self assert:(annotation at:1) = 'ole:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1270
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1271
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1272
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1273
    self assert:(arguments at:1) = 'return varchar2 varchar2'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1274
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1275
    "Created: / 29-11-2009 / 09:48:25 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1276
    "Modified: / 10-12-2009 / 11:18:29 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1277
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1278
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1279
testVwExternalFunctionByC
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1280
    "Testing the external function annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1281
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1282
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1283
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1284
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1285
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1286
                parseMethod:'vwExternalFunctionByCExample <c: ''void func(int x)''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1287
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1288
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1289
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1290
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1291
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1292
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1293
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1294
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1295
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1296
    self assert:(annotation at:1) = 'c:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1297
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1298
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1299
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1300
    self assert:(arguments at:1) = 'void func(int x)'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1301
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1302
    "Created: / 29-11-2009 / 09:46:31 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1303
    "Modified: / 12-12-2009 / 22:08:24 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1304
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1305
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1306
!ParserTests methodsFor:'tests - external functions STX'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1307
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1308
testSTX_ffiCall_01_cdecl
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1309
    |s p|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1310
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1311
    s := '<cdecl: char* ''ffiPrintString'' (char *)>'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1312
    p := Parser new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1313
    p source:s.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1314
    p nextToken.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1315
    p parsePrimitiveOrResourceSpecOrEmpty.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1316
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1317
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1318
testSTX_ffiCall_02_api
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1319
    |s p|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1320
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1321
    s := '<api: char* ''ffiPrintString'' (char *)>'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1322
    p := Parser new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1323
    p source:s.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1324
    p nextToken.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1325
    p parsePrimitiveOrResourceSpecOrEmpty.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1326
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1327
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1328
testSTX_ffiCall_03_c
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1329
    |s p|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1330
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1331
    s := '<C: char* >'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1332
    p := Parser new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1333
    p source:s.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1334
    p nextToken.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1335
    p parsePrimitiveOrResourceSpecOrEmpty.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1336
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1337
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1338
testSTX_ffiCall_04_undefinedClasses
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1339
    |b1 b2|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1340
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1341
    self should:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1342
        b1 := Parser evaluate:'[ NotYetLoadedClass ]'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1343
    ] raise:ParseError.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1344
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1345
    self assert:(b1 == nil).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1346
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1347
    self should:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1348
        b2 := Parser evaluate:'[ NonExistingNameSpace::NotYetLoadedClass ]'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1349
    ] raise:ParseError.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1350
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1351
    self assert:(b2 == nil).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1352
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1353
    "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1354
     self run:#test4
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1355
     self new test4
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1356
    "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1357
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1358
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1359
!ParserTests methodsFor:'tests - primitive'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1360
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1361
testNewSTXPrimitive
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1362
    "Testing the primitive annotation structure used in St/X virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1363
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1364
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1365
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1366
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1367
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1368
                parseMethod:'newSTXPrimitiveExample <primitive> ^self'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1369
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1370
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1371
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1372
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1373
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1374
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1375
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1376
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1377
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1378
    self assert:(annotation at:1) = 'primitive'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1379
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1380
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1381
    self assert:arguments size = 0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1382
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1383
    "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1384
     The primitive specifies method as logic which needs special handling
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1385
     before setting up a stack frame for the method to make it run. The example structure
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1386
     of primitive annotation is following:
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1387
        <primitive>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1388
    "Created: / 29-11-2009 / 09:34:36 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1389
    "Modified: / 06-12-2009 / 21:46:35 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1390
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1391
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1392
testPrimitiveWithInvalidArgument
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1393
    "Negative testing the context annotation structure for the no-literal argument"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1394
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1395
    |parserState|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1396
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1397
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1398
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1399
                parseMethod:'primitiveWithInvalidArgumentExample <primitive: primitive:> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1400
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1401
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1402
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1403
    self assert:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1404
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1405
    "Created: / 12-01-2010 / 08:40:28 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1406
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1407
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1408
testPrimitiveWithInvalidContentFollowed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1409
    "Negative testing the primitive annotation structure 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1410
     with valid argument followed by invalid content (following literal): <context: #return #return>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1411
    "Test Note: based on the previous parser behaviour this type of situation is not considered as serious,
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1412
     it's considered as ignorable, informing requester and proceeding execution"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1413
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1414
    |parserState annotation arguments ignorableErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1415
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1416
    ignorableErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1417
     " create method for annotation testing purpose " " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1418
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1419
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1420
            ignorableErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1421
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1422
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1423
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1424
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1425
                        parseMethod:'primitiveWithInvalidContentFollowedExample <primitive: ''test'' ''test''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1426
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1427
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1428
     " ignorable error should occured "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1429
    self should:ignorableErrorOccured.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1430
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1431
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1432
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1433
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1434
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1435
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1436
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1437
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1438
    self assert:(annotation at:1) = 'primitive:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1439
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1440
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1441
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1442
    self assert:(arguments at:1) = 'test'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1443
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1444
    "Created: / 12-01-2010 / 08:42:01 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1445
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1446
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1447
testSqueakPrimitive
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1448
    "Testing the named primitive annotation structure used in Squeak virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1449
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1450
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1451
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1452
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1453
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1454
                parseMethod:'squeakPrimitiveExample <primitive: ''test''> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1455
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1456
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1457
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1458
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1459
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1460
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1461
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1462
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1463
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1464
    self assert:(annotation at:1) = 'primitive:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1465
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1466
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1467
    self assert:arguments = 'test'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1468
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1469
    "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1470
     The named primitive specifies identifier value used to look up logic which is processed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1471
     before setting up a stack frame for the method to make it run. The example structure
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1472
     of named primitive annotation is following:
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1473
        <primitive: test>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1474
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1475
    "Created: / 29-11-2009 / 09:34:05 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1476
    "Modified: / 07-12-2009 / 01:29:29 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1477
    "Modified: / 04-09-2014 / 12:36:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1478
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1479
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1480
testSt80Primitive
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1481
    "Testing the numbered primitive annotation structure used in ST-80 virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1482
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1483
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1484
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1485
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1486
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1487
                parseMethod:'st80PrimitiveExample <primitive: 1> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1488
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1489
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1490
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1491
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1492
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1493
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1494
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1495
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1496
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1497
    self assert:(annotation at:1) = 'primitive:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1498
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1499
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1500
    self assert:arguments = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1501
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1502
    "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1503
     The numbered primitive specifies index value used to look up logic which is processed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1504
     before setting up a stack frame for the method to make it run. The example structure
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1505
     of numbered primitive annotation is following:
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1506
        <primitive: 1>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1507
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1508
    "Created: / 29-11-2009 / 09:33:18 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1509
    "Modified: / 07-12-2009 / 01:20:27 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1510
    "Modified: / 04-09-2014 / 12:36:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1511
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1512
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1513
testVAgePrimitive
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1514
    "Testing the named primitive annotation structure used in Visual Age virtual machine"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1515
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1516
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1517
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1518
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1519
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1520
                parseMethod:'vAgePrimitiveExample <primitive: #test> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1521
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1522
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1523
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1524
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1525
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1526
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1527
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1528
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1529
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1530
    self assert:(annotation at:1) = 'primitive:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1531
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1532
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1533
    self assert:arguments  = #test.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1534
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1535
    "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1536
     The named primitive specifies identifier value used to look up logic which is processed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1537
     before setting up a stack frame for the method to make it run. The example structure
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1538
     of named primitive annotation is following:
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1539
        <primitive: test>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1540
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1541
    "Created: / 29-11-2009 / 09:34:59 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1542
    "Modified: / 12-12-2009 / 22:09:48 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1543
    "Modified: / 04-09-2014 / 12:37:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1544
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1545
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1546
!ParserTests methodsFor:'tests - resource'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1547
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1548
testResourceWithInvalidArgument
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1549
    "Negative testing the context annotation structure for the no-literal argument"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1550
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1551
    |parserState|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1552
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1553
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1554
    self should:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1555
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1556
                        parseMethod:'resourceWithInvalidArgumentExample <resource: resource:> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1557
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1558
        ] raise:ParseError.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1559
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1560
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1561
"/    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1562
"/    self assert:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1563
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1564
    "Created: / 12-01-2010 / 11:28:13 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1565
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1566
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1567
testResourceWithInvalidContentFollowed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1568
    "Negative testing the resource annotation structure 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1569
     with valid argument followed by invalid content (following literal): <resource: #symbol #(array of symbols)>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1570
    "Test Note: based on the previous parser behaviour this type of situation is not considered as serious,
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1571
     it's considered as ignorable, informing requester and proceeding execution"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1572
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1573
    |parserState annotation arguments ignorableErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1574
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1575
    ignorableErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1576
     " create method for annotation testing purpose " " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1577
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1578
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1579
            ignorableErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1580
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1581
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1582
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1583
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1584
                        parseMethod:'resourceWithInvalidContentFollowedExample <resource: #symbol #(1 2 3)> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1585
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1586
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1587
     " ignorable error should occured "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1588
    self should:ignorableErrorOccured.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1589
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1590
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1591
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1592
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1593
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1594
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1595
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1596
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1597
    self assert:(annotation at:1) = 'resource:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1598
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1599
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1600
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1601
    self assert:(arguments at:1) = #symbol.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1602
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1603
    "Created: / 12-01-2010 / 11:33:22 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1604
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1605
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1606
testResourceWithNoArguments
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1607
    "Negative testing the resource annotation structure for the no argument annotation structure <resource>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1608
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1609
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1610
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1611
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1612
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1613
                parseMethod:'resourceWithNoArgumentsExample <resource> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1614
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1615
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1616
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1617
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1618
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1619
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1620
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1621
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1622
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1623
    self assert:(annotation at:1) = 'resource'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1624
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1625
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1626
    self assert:arguments size = 0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1627
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1628
    "Created: / 12-01-2010 / 11:35:21 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1629
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1630
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1631
testSingleResourcePragma
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1632
    "Testing the resource annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1633
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1634
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1635
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1636
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1637
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1638
                parseMethod:'resourcePragmaExample <resource: #skipInDebuggersWalkBack> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1639
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1640
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1641
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1642
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1643
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1644
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1645
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1646
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1647
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1648
    self assert:(annotation at:1) = 'resource:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1649
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1650
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1651
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1652
    self assert:(arguments at:1) = #skipInDebuggersWalkBack.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1653
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1654
    "Created: / 29-11-2009 / 09:40:17 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1655
    "Modified: / 12-12-2009 / 22:10:53 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1656
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1657
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1658
!ParserTests methodsFor:'tests - scanner'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1659
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1660
test_100_scan_EOLcomment1    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1661
    |parser|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1662
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1663
    parser := self parserClass new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1664
    parser saveComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1665
    parser
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1666
                parseMethod:'foo
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1667
"/
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1668
1'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1669
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1670
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1671
    self deny:parser isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1672
    self deny:parser == #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1673
    self assert:parser comments size == 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1674
    self assert:parser comments first commentString isEmpty.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1675
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1676
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1677
test_101_scan_EOLcomment2    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1678
    |parser|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1679
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1680
    parser := self parserClass new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1681
    parser saveComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1682
    parser
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1683
                parseMethod:'foo
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1684
"/a
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1685
1'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1686
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1687
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1688
    self deny:parser isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1689
    self deny:parser == #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1690
    self assert:parser comments size == 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1691
    self assert:parser comments first commentString = 'a'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1692
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1693
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1694
test_102_scan_EOLcomment3    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1695
    |parser|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1696
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1697
    parser := self parserClass new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1698
    parser saveComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1699
    parser
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1700
                parseMethod:'foo
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1701
"/abc
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1702
1'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1703
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1704
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1705
    self deny:parser isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1706
    self deny:parser == #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1707
    self assert:parser comments size == 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1708
    self assert:parser comments first commentString = 'abc'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1709
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1710
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1711
test_110_scan_DelimitedComment1    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1712
    |parser|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1713
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1714
    parser := self parserClass new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1715
    parser parserFlags allowSTXDelimiterComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1716
    parser saveComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1717
    parser
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1718
                parseMethod:'foo
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1719
"<<END
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1720
bla
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1721
bla bla
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1722
END
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1723
1'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1724
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1725
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1726
    self deny:parser isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1727
    self deny:parser == #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1728
    self assert:parser comments size == 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1729
    self assert:parser comments first commentString = '<<END\bla\bla bla\END\' withCRs.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1730
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1731
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1732
test_110_scan_DelimitedComment2    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1733
    |parser|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1734
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1735
    parser := self parserClass new.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1736
    parser parserFlags allowSTXDelimiterComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1737
    parser saveComments:true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1738
    parser
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1739
                parseMethod:'foo
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1740
"<<<< here is the difference"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1741
1'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1742
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1743
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1744
    self deny:parser isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1745
    self deny:parser == #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1746
    self assert:parser comments size == 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1747
    self assert:parser comments first commentString = '<<END\bla\bla bla\END\' withCRs.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1748
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1749
    "Created: / 04-09-2014 / 12:00:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1750
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1751
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1752
test_120_scan_numbers    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1753
    |s n|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1754
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1755
    n := Scanner scanNumberFrom:(s := ReadStream on:'0').
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1756
    self assert:(n == 0).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1757
    self assert:(s position == 1).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1758
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1759
    n := Scanner scanNumberFrom:(s := ReadStream on:'1234 ').
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1760
    self assert:(n == 1234).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1761
    self assert:(s position == 4).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1762
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1763
    n := Scanner scanNumberFrom:(s := ReadStream on:'1234.0 ').
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1764
    self assert:(n = 1234.0).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1765
    self assert:(s position == 6).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1766
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1767
    n := Scanner scanNumberFrom:(s := ReadStream on:'1234/ ').
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1768
    self assert:(n = 1234).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1769
    self assert:(s position == 4).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1770
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1771
    n := Scanner scanNumberFrom:(s := ReadStream on:'1234/2 ').
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1772
    self assert:(n = (1234/2)).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1773
    self assert:(s position == 6).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1774
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1775
    self assert:( Number readSmalltalkSyntaxFrom:'99d' ) = 99.0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1776
    self assert:( Number readSmalltalkSyntaxFrom:'99.00d' ) = 99.0.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1777
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1778
    self assert:( Number readSmalltalkSyntaxFrom:'12345678901234567890' ) = 12345678901234567890.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1779
    self assert:( Number readSmalltalkSyntaxFrom:'16rAAAAFFFFAAAAFFFF' ) = 16rAAAAFFFFAAAAFFFF.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1780
    self assert:( Number readSmalltalkSyntaxFrom:'(1/10)') = (1/10).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1781
    self assert:( Number readSmalltalkSyntaxFrom:'(1/3)' ) = (1/3).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1782
    self assert:( Number readSmalltalkSyntaxFrom:'(-1/3)' ) = (-1/3).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1783
    self assert:( Number readSmalltalkSyntaxFrom:'(1/-3)' ) = (-1/3).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1784
    self assert:( Number readSmalltalkSyntaxFrom:'(-1/-3)' ) = (1/3).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1785
    self assert:( Number readSmalltalkSyntaxFrom:'-(1/3)' ) = (-1/3).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1786
    self assert:( Number readSmalltalkSyntaxFrom:'-(-1/-3)' ) = (-1/3).
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1787
    self assert:( Number readSmalltalkSyntaxFrom:'+00000123.45') = 00000123.45.  
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1788
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1789
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1790
!ParserTests methodsFor:'tests - sysprim'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1791
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1792
testSysPrimitiveWithInvalidArgument
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1793
    "Negative testing the context annotation structure for the no-literal argument"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1794
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1795
    |parserState|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1796
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1797
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1798
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1799
                parseMethod:'sysPrimitiveWithInvalidArgumentExample <sysprim: sysprim:> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1800
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1801
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1802
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1803
    self assert:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1804
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1805
    "Created: / 12-01-2010 / 11:49:19 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1806
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1807
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1808
testSysPrimitiveWithInvalidContentFollowed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1809
    "Negative testing the sysprim annotation structure 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1810
     with valid argument followed by invalid content (following literal):  <sysprim: #none #none>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1811
    "Test Note: based on the previous parser behaviour this type of situation is not considered as serious,
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1812
     it's considered as ignorable, informing requester and proceeding execution"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1813
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1814
    |parserState annotation arguments ignorableErrorOccured|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1815
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1816
    ignorableErrorOccured := false.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1817
     " create method for annotation testing purpose " " the signal is raised by Parser2::ParseError>>raiseRequest but there is no way how to handle its signal"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1818
    self parserClass parseErrorSignal 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1819
        handle:[:ex | 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1820
            ignorableErrorOccured := true.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1821
            ex proceed
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1822
        ]
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1823
        do:[
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1824
            parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1825
                        parseMethod:'sysPrimitiveWithInvalidContentFollowedExample <sysprim: #none #none> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1826
                        in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1827
        ].
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1828
     " ignorable error should occured "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1829
    self should:ignorableErrorOccured.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1830
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1831
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1832
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1833
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1834
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1835
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1836
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1837
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1838
    self assert:(annotation at:1) = 'sysprim:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1839
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1840
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1841
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1842
    self assert:(arguments at:1) = #none.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1843
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1844
    "Created: / 12-01-2010 / 11:51:14 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1845
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1846
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1847
testSysPrimitiveWithNoArguments
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1848
    "Negative testing the exception annotation structure for the no argument annotation structure <sysprim>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1849
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1850
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1851
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1852
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1853
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1854
                parseMethod:'sysPrimitiveWithNoArgumentsExample <sysprim> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1855
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1856
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1857
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1858
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1859
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1860
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1861
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1862
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1863
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1864
    self assert:(annotation at:1) = 'sysprim'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1865
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1866
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1867
    self assert:arguments size = 0
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1868
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1869
    "Created: / 12-01-2010 / 11:52:40 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1870
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1871
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1872
testVAgeSysPrimitive
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1873
    "Testing the sysprim annotation structure"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1874
    
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1875
    |parserState annotation arguments|
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1876
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1877
    " create method for annotation testing purpose "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1878
    parserState := self parserClass 
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1879
                parseMethod:'vAgeSysPrimitiveExample <sysprim: #none> ^self.'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1880
                in:mockClass.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1881
     " check the parser result "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1882
    self deny:parserState = #Error.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1883
    self deny:parserState isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1884
     " find the annotation record in parser state "
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1885
    self deny:parserState annotations isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1886
    self assert:(parserState annotations size) = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1887
    annotation := parserState annotations at:1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1888
    self assert:(annotation size) = 2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1889
    self assert:(annotation at:1) = 'sysprim:'.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1890
    arguments := annotation at:2.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1891
    self deny:arguments isNil.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1892
    self assert:arguments size = 1.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1893
    self assert:(arguments at:1) = #none.
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1894
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1895
    "Created: / 29-11-2009 / 09:39:11 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1896
    "Modified: / 12-12-2009 / 22:11:28 / pp <Pavel.Pospichal@gmail.com>"
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1897
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1898
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1899
!ParserTests class methodsFor:'documentation'!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1900
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1901
version
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1902
    ^ '$Header$'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1903
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1904
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1905
version_CVS
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1906
    ^ '$Header$'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1907
!
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1908
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1909
version_SVN
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1910
    ^ '$ Id: ParserTests.st 2014 2010-07-12 08:10:01Z vranyj1  $'
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1911
! !
de195a6c7aa8 *** empty log message ***
sr
parents:
diff changeset
  1912