SmallSense__SmalltalkParserTests.st
author Jan Vrany <jan.vrany@labware.com>
Thu, 01 Jun 2023 20:20:33 +0100
changeset 1149 33f8a8571e92
parent 1141 90c0a06f43ed
permissions -rw-r--r--
Fix class selection drop-in dialog Commit 93164087c56a added class selection dialog to SmallSense's `DialogBox`. This commit selever bugs in the implementation.

"
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
Copyright (C) 2013-2015 Jan Vrany
Copyright (C) 2021 Patrik Svestka

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License. 

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
"
"{ Package: 'stx:goodies/smallsense' }"

"{ NameSpace: SmallSense }"

TestCase subclass:#SmalltalkParserTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'SmallSense-Tests-Obsolete'
!

!SmalltalkParserTests class methodsFor:'documentation'!

copyright
"
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
Copyright (C) 2013-2015 Jan Vrany
Copyright (C) 2021 Patrik Svestka

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License. 

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
"
! !

!SmalltalkParserTests methodsFor:'parseTests'!

test1
    |collector|
    collector := self 
                doForSource:'  
                    |u w b c d tokenValue val uu bb cc dd |
                   u := 3.
                    b:=u.
                    c:=u floor.
                    d floor:u.
                    d floor:3 b:u.
                    self rememberSymbolUsed:tokenValue.
                    array:=#( 3 4 5 6 ).
                    val := ConstantNode type:tokenType value:tokenValue.
                    [u== #Symbol or:[u=3]]ifTrue:[
                    uu := 4.
                    bb:=uu.
                    cc:=uu floor.
                    dd floor:uu.
                    dd floor:3 b:uu.
                    ].
                    dd do:[:w|w seduce.
                    ].
                    ^self.
                    '.
self assert:collector notNil.
self assert:collector tree notNil.

    "Created: / 21-12-2010 / 23:07:13 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 22-02-2011 / 12:35:19 / Jakub <zelenja7@fel.cvut.cz>"
!

test10
    |collector|

    collector := self 
                doForSource:'  
                    | b|
                    u := 3.
                    b:=u.
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression expression) isConstant.
    self assert:(collector tree nextStatement expression) isAssignment.
    self assert:(collector tree nextStatement expression variable) isVariable.
    self 
        assert:(collector tree nextStatement expression expression) isVariable.

    "Created: / 15-02-2011 / 15:23:50 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 16:49:19 / Jakub <zelenja7@fel.cvut.cz>"
!

test11
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                    u := 3
                    b:=u.
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree nextStatement nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name= 'u').
    self assert:(collector tree expression expression) isUnaryMessage.
    self assert:(collector tree expression expression receiver) isConstant.
    self assert:(collector tree expression expression receiver value=3) .
    self assert:(collector tree expression expression selector asString)='b'.
    self assert:(collector tree expression expression args isNil ).
    self assert:(collector tree nextStatement expression) isErrorNode.
    self assert:(collector tree nextStatement expression errorToken)= ':='.
    self assert:(collector tree nextStatement nextStatement expression) isVariable.
    self assert:(collector tree nextStatement nextStatement expression name)='u'.

    "Created: / 15-02-2011 / 15:24:01 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 16:58:56 / Jakub <zelenja7@fel.cvut.cz>"
!

test11a
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                    u := 3
                    b:=u.
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name= 'u').

    self assert:(collector tree expression expression) isErrorNode.
    self assert:(collector tree expression expression children first receiver) isConstant.
    self assert:(collector tree expression expression children first receiver) value =3 .

    self assert:(collector tree nextStatement expression) isAssignment.
    self assert:(collector tree nextStatement expression) variable name = 'b'.
    self assert:(collector tree nextStatement expression) expression isVariable.
    self assert:(collector tree nextStatement expression) expression name = 'u'.

    "Created: / 16-09-2013 / 23:16:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test11b
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                    u := 3 between: 1 and: 10
                    b:=u.
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name= 'u').

    self assert:(collector tree expression expression) isErrorNode.
    self assert:(collector tree expression expression children first receiver) isConstant.
    self assert:(collector tree expression expression children first receiver) value =3 .

    self assert:(collector tree nextStatement expression) isAssignment.
    self assert:(collector tree nextStatement expression) variable name = 'b'.
    self assert:(collector tree nextStatement expression) expression isVariable.
    self assert:(collector tree nextStatement expression) expression name = 'u'.

    "Created: / 16-09-2013 / 23:16:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test11c
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                    u := 3 between: 1 and: 10 + 10
                    b:=u.
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name= 'u').

    self assert:(collector tree expression expression) isErrorNode.
    self assert:(collector tree expression expression children first receiver) isConstant.
    self assert:(collector tree expression expression children first receiver) value =3 .

    self assert:(collector tree nextStatement expression) isAssignment.
    self assert:(collector tree nextStatement expression) variable name = 'b'.
    self assert:(collector tree nextStatement expression) expression isVariable.
    self assert:(collector tree nextStatement expression) expression name = 'u'.

    "Created: / 16-09-2013 / 23:16:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test12
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                     : 3
                    '.
self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree nextStatement  nextStatement) isNil.
    self assert:(collector tree expression) isErrorNode.
    self assert:(collector tree expression errorToken =':').
    self assert:(collector tree nextStatement expression) isConstant.
    self assert:(collector tree nextStatement expression value=3).

    "Created: / 15-02-2011 / 15:25:36 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 17:08:54 / Jakub <zelenja7@fel.cvut.cz>"
!

test13
    |collector|

    collector := self 
                doForSource:'  
                    | b|
                    u := 3
                    :=u.
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self 
        assert:(collector tree nextStatement nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name = 'u').
    self assert:(collector tree expression expression) isConstant.
    self assert:(collector tree expression expression value =3).
    self assert:(collector tree nextStatement expression) isErrorNode.
    self assert:(collector tree nextStatement expression errorToken) = ':='.
    self 
        assert:(collector tree nextStatement nextStatement expression) isVariable.
    self 
        assert:(collector tree nextStatement nextStatement expression name) = 'u'.

    "Created: / 15-02-2011 / 16:48:11 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 17-03-2011 / 17:21:48 / Jakub <zelenja7@fel.cvut.cz>"
!

test14
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                    u := 3
                    :u.
                    '.
 self assert:collector notNil.
    self assert:collector tree notNil.
    self 
        assert:(collector tree nextStatement nextStatement nextStatement) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name = 'u').
    self assert:(collector tree expression expression) isConstant.
    self assert:(collector tree expression expression value =3).
    self assert:(collector tree nextStatement expression) isErrorNode.
    self assert:(collector tree nextStatement expression errorToken) = ':'.
    self 
        assert:(collector tree nextStatement nextStatement expression) isVariable.
    self 
        assert:(collector tree nextStatement nextStatement expression name) = 'u'.

    "Created: / 15-02-2011 / 17:03:42 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 19:52:39 / Jakub <zelenja7@fel.cvut.cz>"
!

test15
    |collector|
    collector := self 
                doForSource:'  
                    | b|
                    u := 3
                    =u.
                    '.
 self assert:collector notNil.
    self assert:collector tree notNil.
    self 
        assert:(collector tree nextStatement ) isNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression variable name = 'u').
    self assert:(collector tree expression expression) isBinaryMessage.
    self assert:(collector tree expression expression receiver value =3).
    self assert:(collector tree expression expression receiver ) isConstant.
    self assert:(collector tree expression expression selector )= #=.
    self assert:(collector tree expression expression args size=1 ).
    self assert:(collector tree expression expression arg ) isVariable.    
    self assert:(collector tree expression expression arg name='u' ).

    "Created: / 15-02-2011 / 17:04:33 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 19:56:28 / Jakub <zelenja7@fel.cvut.cz>"
!

test19
    |collector|
    collector := self 
                doForSource:'  
                    |b c|
                   u := 3 u:=
                    c u floor.
                    '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isAssignment.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement expression isUnaryMessage.

    "Created: / 15-02-2011 / 18:15:51 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:00:13 / Jakub <zelenja7@fel.cvut.cz>"
!

test2

    |collector|
    
    collector := self 
                doForSource:'
                    u :'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression name ='u').
    self assert:(collector tree expression) isVariable.
    self assert:(collector tree nextStatement expression isErrorNode).
    self assert: collector tree nextStatement expression errorToken=':'

    "Created: / 09-02-2011 / 20:54:42 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 15:04:33 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified (format): / 17-11-2021 / 12:48:02 / Patrik Svestka <patrik.svestka@gmail.com>"
!

test24
    |collector|
    collector := self 
                doForSource:'  
                    |u w|
                   self :                  '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isSelf.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':'.

    "Created: / 15-02-2011 / 18:37:23 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:02:46 / Jakub <zelenja7@fel.cvut.cz>"
!

test25
    |collector|
"    collector := self 
                doForSource:'  
                    |u w|
                   self :=5                  '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isSelf.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement expression isConstant."

    "Created: / 15-02-2011 / 18:37:56 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 28-02-2011 / 17:28:20 / Jakub <zelenja7@fel.cvut.cz>"
!

test26
    |collector|
    collector := self 
                doForSource:'  
                    |u w|
                   false :=5                  '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isConstant.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement expression isConstant.

    "Created: / 15-02-2011 / 19:50:17 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:05:19 / Jakub <zelenja7@fel.cvut.cz>"
!

test27
    |collector|
    collector := self 
                doForSource:'  
                    |u w|
                   nil :=5                  '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isConstant.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement expression isConstant.

    "Created: / 15-02-2011 / 19:51:02 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:05:32 / Jakub <zelenja7@fel.cvut.cz>"
!

test28
    |collector|
    collector := self 
                doForSource:'  
                    |d w tokenValue|
                   d floor:3 b:u
                    self rememberSymbolUsed:tokenValue.                '.
self assert:collector notNil.
self assert:collector tree notNil.

    "Created: / 15-02-2011 / 19:52:23 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:06:33 / Jakub <zelenja7@fel.cvut.cz>"
!

test29
    |collector|
    collector := self 
                doForSource:'  
                    |d u w|
                   d floor:3 b:u
                    self                 '.
self assert:collector notNil.
self assert:collector tree notNil.

    "Created: / 15-02-2011 / 19:53:15 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:06:46 / Jakub <zelenja7@fel.cvut.cz>"
!

test3
    |collector|

    collector := self doForSource:'
                    u ='.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isBinaryMessage.
    self assert:(collector tree expression receiver name = 'u').
    self assert:(collector tree expression receiver) isVariable.
    self assert:(collector tree expression selector) == #=.
    self assert:(collector tree expression args size) = 1.
    self assert:(collector tree expression arg) isErrorNode.
    self assert:(collector tree expression arg errorToken = 'EOF').

    "Created: / 11-02-2011 / 15:32:58 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 15:20:22 / Jakub <zelenja7@fel.cvut.cz>"
!

test30
    |collector|
    collector := self 
                doForSource:'  
                    |array |
                  self rememberSymbolUsed:tokenValue
                    array:=#( 3 4 5 6 ).           '.
self assert:collector notNil.
self assert:collector tree notNil.

    "Created: / 15-02-2011 / 19:54:10 / Jakub <zelenja7@fel.cvut.cz>"
!

test31
    |collector|
    collector := self 
                doForSource:'  
                    |array tokenValue|
                  self rememberSymbolUsed:tokenValue
                    array:=( 3 4 5 6 ).           '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isMessage.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement  expression isUnaryMessage.

    "Created: / 16-02-2011 / 15:51:47 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:15:19 / Jakub <zelenja7@fel.cvut.cz>"
!

test32
    |collector|
    collector := self 
                doForSource:'  
                    |uu w|
                    [u== #Symbol or:[u=3]]ifTrue:[
                    uu := 4.

                    ].

                    '.
self assert:collector notNil.
self assert:collector tree notNil.

    "Created: / 16-02-2011 / 15:54:07 / Jakub <zelenja7@fel.cvut.cz>"
!

test33
    |collector|

    collector := self 
                doForSource:'  
                    |uu w|
                    u== #Symbol or:[u=3]]ifTrue:[
                    uu := 4.

                    ].

                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isMessage.
    self assert:collector tree expression receiver isBinaryMessage.
    self assert:collector tree expression receiver receiver isVariable.
    self assert:collector tree expression receiver receiver name = 'u'.
    self assert:collector tree expression receiver selector = #'=='.
    self assert:collector tree expression receiver args size = 1.
    self assert:collector tree expression receiver arg isConstant.
    self assert:collector tree expression receiver arg value = #Symbol.
    self assert:collector tree expression selector = #or:.
    self assert:collector tree expression args size = 1.
    self assert:collector tree expression arg1 isBlock.
    self assert:collector tree expression arg1 statements expression 
                isBinaryMessage.
    self assert:collector tree nextStatement expression isErrorNode.
    self assert:collector tree nextStatement expression errorToken = ']'.
    self 
        assert:collector tree nextStatement nextStatement expression isMessage.
    self 
        assert:collector tree nextStatement nextStatement expression receiver 
                isErrorNode.
    self 
        assert:collector tree nextStatement nextStatement expression receiver 
                errorToken = 'Keyword'.
    self 
        assert:collector tree nextStatement nextStatement expression selector 
                = #ifTrue:.
    self 
        assert:collector tree nextStatement nextStatement expression args size = 1.
    self 
        assert:collector tree nextStatement nextStatement expression arg1 
                statements expression 
                isAssignment.

    "Created: / 16-02-2011 / 15:55:49 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:52:03 / Jakub <zelenja7@fel.cvut.cz>"
!

test34
    |collector|
    collector := self 
                doForSource:'  
                    |array |
                  self rememberSymbolUsed:tokenValue
                    array:=#( 3 4 5 6 .           '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isMessage.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement  expression isConstant.

    "Created: / 16-02-2011 / 16:09:35 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:16:54 / Jakub <zelenja7@fel.cvut.cz>"
!

test35
    |collector|
    collector := self 
                doForSource:'  
                    |uu w|
                    [u== #Symbol or:u=3]]ifTrue:[
                    uu := 4.

                    ].

                    '.
 self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isBlock.
    self assert:collector tree expression statements expression isMessage.
    self assert:collector tree expression statements expression receiver isBinaryMessage.
    self assert:collector tree expression statements expression receiver receiver isVariable.
    self assert:collector tree expression statements expression receiver receiver name = 'u'.
    self assert:collector tree expression statements expression receiver selector = #'=='.
    self assert:collector tree expression statements expression receiver args size = 1.
    self assert:collector tree expression statements expression receiver arg isConstant.
    self assert:collector tree expression statements expression receiver arg value = #Symbol.
    self assert:collector tree expression statements expression selector = #or:.
    self assert:collector tree expression statements expression args size = 1.
    self assert:collector tree expression statements expression arg1 isBinaryMessage.
    self assert:collector tree nextStatement expression isErrorNode.
    self assert:collector tree nextStatement expression errorToken = ']'.
    self 
        assert:collector tree nextStatement nextStatement expression isMessage.
    self 
        assert:collector tree nextStatement nextStatement expression receiver 
                isErrorNode.
    self 
        assert:collector tree nextStatement nextStatement expression receiver 
                errorToken = 'Keyword'.
    self 
        assert:collector tree nextStatement nextStatement expression selector 
                = #ifTrue:.
    self 
        assert:collector tree nextStatement nextStatement expression args size = 1.
    self 
        assert:collector tree nextStatement nextStatement expression arg1 
                statements expression 
                isAssignment.

    "Created: / 16-02-2011 / 16:47:18 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 20:56:11 / Jakub <zelenja7@fel.cvut.cz>"
!

test36
    |collector|
    collector := self 
                doForSource:'  
                    |uu w|
                    [u== #Symbol ifTrue:[
                    uu := 4.

                    ].

                    '.
   self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isBlock.
    self assert:collector tree expression statements expression isMessage.
    self assert:collector tree expression statements expression receiver isBinaryMessage.
    self assert:collector tree expression statements expression receiver receiver isVariable.
    self assert:collector tree expression statements expression receiver receiver name = 'u'.
    self assert:collector tree expression statements expression receiver selector = #'=='.
    self assert:collector tree expression statements expression receiver args size = 1.
    self assert:collector tree expression statements expression receiver arg isConstant.
    self assert:collector tree expression statements expression receiver arg value = #Symbol.
    self assert:collector tree expression statements expression selector = #ifTrue: .
    self assert:collector tree expression statements expression args size = 1.
    self assert:collector tree expression statements expression arg1 isBlock.
    self assert:collector tree expression statements expression arg1 statements expression 
                isAssignment.

    "Created: / 16-02-2011 / 16:48:07 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 21:13:22 / Jakub <zelenja7@fel.cvut.cz>"
!

test37
    |collector|

    collector := self 
                doForSource:'  
                    |uu w|
                    [u== #Symbol) ifTrue:[
                    uu := 4.

                    ].

                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isBlock.
    self 
        assert:collector tree expression statements expression isBinaryMessage.
    self 
        assert:collector tree expression statements expression receiver name = 'u'.
    self 
        assert:collector tree expression statements expression selector = #'=='.
    self assert:collector tree expression statements expression args size = 1.
    self 
        assert:collector tree expression statements expression arg1 value = #Symbol.
    self 
        assert:collector tree expression statements nextStatement expression 
                isErrorNode.
    self 
        assert:collector tree expression statements nextStatement expression 
                errorToken = ')'.
    self 
        assert:collector tree expression statements nextStatement nextStatement 
                expression isMessage.
    self 
        assert:collector tree expression statements nextStatement nextStatement expression 
                receiver isErrorNode.
    self 
        assert:collector tree expression statements nextStatement nextStatement expression 
                receiver errorToken 
                = 'Keyword'.
    self 
        assert:collector tree expression statements nextStatement nextStatement expression 
                selector = #ifTrue:.
    self 
        assert:collector tree expression statements nextStatement nextStatement expression args 
                size = 1.
    self 
        assert:collector tree expression statements nextStatement nextStatement expression arg1 
                isBlock.
    self 
        assert:collector tree expression statements nextStatement nextStatement expression arg1 
                statements expression 
                isAssignment.

    "Created: / 16-02-2011 / 17:21:06 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 21:25:27 / Jakub <zelenja7@fel.cvut.cz>"
!

test38
    |collector|
    collector := self 
                doForSource:'  
                    |uu w|
                    [:=

                    ].

                    '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isBlock.
self assert:collector tree expression statements expression  isErrorNode.
self assert:collector tree expression statements expression errorToken=':='.

    "Created: / 18-02-2011 / 11:55:35 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 21:40:40 / Jakub <zelenja7@fel.cvut.cz>"
!

test39
    |collector|                
    collector := self 
                doForSource:'  
                    |uu w|
                    :=3

                    '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isErrorNode.
self assert:collector tree expression errorToken=':='.
self assert:collector tree  nextStatement expression isConstant.
self assert:collector tree  nextStatement expression value=3.

    "Created: / 18-02-2011 / 17:11:24 / Jakub <zelenja7@fel.cvut.cz>"
!

test4
    |collector|

    collector := self doForSource:'
                    u 3'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isUnaryMessage.
    self assert:(collector tree expression receiver name = 'u').
    self assert:(collector tree expression receiver) isVariable.
    self assert:(collector tree expression selector asString) = '3'.

    "Created: / 15-02-2011 / 14:13:48 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-03-2011 / 22:10:14 / Jakub <zelenja7@fel.cvut.cz>"
!

test40
    |collector|
    collector := self 
                doForSource:'  
                    |array tokenValue|
                  self rememberSymbolUsed:tokenValue
                    array:=( 3 4 5 6.           '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isMessage.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement  expression isUnaryMessage.

    "Created: / 18-02-2011 / 20:17:31 / Jakub <zelenja7@fel.cvut.cz>"
!

test41
    |collector|
    collector := self 
                doForSource:'  
                    |array tokenValue|
                  self rememberSymbolUsed:tokenValue
                    array:=( 3 4 5 6 :=u           '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isMessage.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement  expression isUnaryMessage.
self assert:collector tree nextStatement nextStatement nextStatement  expression isErrorNode.
self assert:collector tree nextStatement nextStatement nextStatement  expression errorToken=':='.
self assert:collector tree nextStatement nextStatement nextStatement nextStatement  expression isVariable.

    "Created: / 18-02-2011 / 20:35:35 / Jakub <zelenja7@fel.cvut.cz>"
!

test42
    |collector|
    collector := self 
                doForSource:'  
                    |array tokenValue|
                  self rememberSymbolUsed:tokenValue
                    array:= 3 4 5 6 :=u)           '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isMessage.
self assert:collector tree nextStatement expression isErrorNode.
self assert:collector tree nextStatement expression errorToken=':='.
self assert:collector tree nextStatement nextStatement  expression isUnaryMessage.
self assert:collector tree nextStatement nextStatement nextStatement  expression isErrorNode.
self assert:collector tree nextStatement nextStatement nextStatement  expression errorToken=':='.
self assert:collector tree nextStatement nextStatement nextStatement nextStatement  expression isVariable.
self assert:collector tree nextStatement nextStatement nextStatement nextStatement nextStatement expression isErrorNode.
self assert:collector tree nextStatement nextStatement nextStatement nextStatement nextStatement expression errorToken=')'.

    "Created: / 18-02-2011 / 20:37:17 / Jakub <zelenja7@fel.cvut.cz>"
!

test43
    |collector|
    collector := self 
                doForSource:'  
                    |uu w b|
                    [u== #Symbol ifTrue:[
                    uu := 4.

                    ].
                      b:=3
                    '.
   self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isBlock.
    self assert:collector tree expression statements expression isMessage.
    self assert:collector tree expression statements expression receiver isBinaryMessage.
    self assert:collector tree expression statements expression receiver receiver isVariable.
    self assert:collector tree expression statements expression receiver receiver name = 'u'.
    self assert:collector tree expression statements expression receiver selector = #'=='.
    self assert:collector tree expression statements expression receiver args size = 1.
    self assert:collector tree expression statements expression receiver arg isConstant.
    self assert:collector tree expression statements expression receiver arg value = #Symbol.
    self assert:collector tree expression statements expression selector = #ifTrue: .
    self assert:collector tree expression statements expression args size = 1.
    self assert:collector tree expression statements expression arg1 isBlock.
    self assert:collector tree expression statements expression arg1 statements expression 
                isAssignment.

    "Created: / 18-02-2011 / 21:16:10 / Jakub <zelenja7@fel.cvut.cz>"
!

test44
    |collector|
    collector := self 
                doForSource:'  
                    |b c|
                   u :=b b: u:c
                    '.
self assert:collector notNil.
self assert:collector tree notNil.
self assert:collector tree expression isAssignment.

    "Created: / 20-02-2011 / 18:54:11 / Jakub <zelenja7@fel.cvut.cz>"
!

test45
    |collector|
    collector := self 
                doForSource:'
                    | a b |
                    a := [self pr   
                    b := self navigationState isFullClassSourceBrowser
                                                    or:[self isJavaMethod and:[JavaMethod showFullSource]].     
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isAssignment.
    self assert:collector tree expression expression isBlock.
    self assert:collector tree expression expression statements isStatement.
    self assert:collector tree expression expression statements expression isErrorNode.
    self assert:collector tree expression expression statements expression children first isMessage.
    self assert:collector tree expression expression statements expression children first selector = 'pr'.

    "Created: / 19-09-2013 / 11:19:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test46
    |collector|
    collector := self 
                doForSource:'
                    | a b |
                    a := a and:[self pr   
                    b := self navigationState isFullClassSourceBrowser
                                                    or:[self isJavaMethod and:[JavaMethod showFullSource]].     
                    '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:collector tree expression isAssignment.
    self assert:collector tree expression expression isMessage.
    self assert:collector tree expression expression args last isBlock.
    self assert:collector tree expression expression args last statements expression isErrorNode.
    self assert:collector tree expression expression args last statements expression children first isMessage.
    self assert:collector tree expression expression args last statements expression children first selector = 'pr'.

    "Created: / 19-09-2013 / 11:48:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test47
    |collector|
    collector := self 
                doForSource:'
                    |mthd doScrollToTop code codeView doAutoFormat doSyntaxColoring doUpdateCode prevMthd doShowFullClassSource |

                    doAutoFormat := self doAutoFormat value and:[RBFormatter notNil and:[mthd prog
                    doShowFullClassSource := self navigationState isFullClassSourceBrowser
                                                or:[mthd isJavaMethod and:[JavaMethod showFullSource]].
                    doUpdateCode := true.
                    codeView := self codeView.
                    self assert:codeView notNil.

                    code := self sourceOfMethod:mthd.
                    code isText ifTrue:[
                        "/Already done...
                        doSyntaxColoring := false.
                    ] ifFalse:[
                        "/Do no coloring here if CodeView2 is used,
                        "/since CodeView2 itself cares about the coloring!!
                        "/Not working correctly -> do the coloring until fixed in CodeView2
                        "/JV: Then make a bug report because otherwise it won''t be
                        "/    ever fixed.
                        "(UserPreferences current useCodeView2In: #Browser)"false ifTrue:[
                            doSyntaxColoring := code size < 2000
                        ] ifFalse:[
                            doSyntaxColoring := self doSyntaxColoring value == true.
                        ].
                    ].


                    doAutoFormat ifTrue:[
                        Error catch:[
                            code := RBFormatter format:code
                        ].
                    ].

                    doShowFullClassSource ifTrue:[
                        "As whole class source coce is shown,
                         there is no need to set codeview''s content if previous method
                         belonged to the same class. Code is already shown, we need only
                         to scrool to it..."
                        "hmm...hmm...how implement it in a better, more generic way?"        
                        mthd isSynthetic not ifTrue:[
                            prevMthd := navigationState lastMethodShownInCodeView.
                            prevMthd notNil ifTrue:[
                                doUpdateCode := prevMthd isSynthetic or:[mthd mclass ~~ prevMthd mclass]
                            ].


                        ].
                    ].
                    doUpdateCode ifTrue:[
                        doSyntaxColoring ifTrue:[
                            "/ immediate coloring, if code is not too large;
                            "/ otherwise, do it in the background.
                            code size < 2000 " 10000 " ifTrue:[
                                Error handle:[:ex |
                                    Transcript showCR:''error in syntaxHighlighter: '',ex description.
                                ] do:[
                                    code := self syntaxHighlightedCodeFor:code method:mthd.
                                ].
                            ] ifFalse:[
                                self enqueueDelayedStartSyntaxHighlightProcess.
                            ].

                            [
                                codeView modifiedChannel removeDependent:self.
                                codeView modified:false.
                                self showCode:code scrollToTop:doScrollToTop.
                            ] ensure:[
                                codeView modifiedChannel addDependent:self.
                            ]
                        ] ifFalse:[
                            self showCode:code scrollToTop:doScrollToTop.
                        ].
                    ].
                    navigationState lastMethodShownInCodeView: mthd.

                    "/ scroll, for file-based classes (java, ruby, etc.)
                    doShowFullClassSource ifTrue:[
                        mthd sourceLineNumber ~~ 1 ifTrue:[
                            doScrollToTop ifTrue:[ "/ifFalse:[
                                codeView scrollToLine:mthd sourceLineNumber
                            ]
                        ].
                    ].
                    self codeAspect:(code ifNil:[nil] ifNotNil:[SyntaxHighlighter codeAspectMethod]).
                    self normalLabel.
                    self updatePackageInfoForMethod:mthd.'.

    self assert: collector tree notNil.

    "Created: / 19-09-2013 / 11:54:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 20-09-2013 / 00:58:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

test5
    |collector|

    collector := self doForSource:'
                    u +'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isBinaryMessage.
    self assert:(collector tree expression receiver name = 'u').
    self assert:(collector tree expression receiver) isVariable.
    self assert:(collector tree expression selector) isSymbol.
    self assert:(collector tree expression selector asString) = '+'.
    self assert:(collector tree expression args size) = 1.
    self assert:(collector tree expression arg) isErrorNode.
    self assert:(collector tree expression arg errorToken = 'EOF').

    "Created: / 15-02-2011 / 15:18:25 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 15:31:37 / Jakub <zelenja7@fel.cvut.cz>"
!

test6
    |collector|

    collector := self doForSource:'
                    u +.'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isBinaryMessage.
    self assert:(collector tree expression receiver name = 'u').
    self assert:(collector tree expression receiver) isVariable.
    self assert:(collector tree expression selector) isSymbol.
    self assert:(collector tree expression selector asString) = '+'.
    self assert:(collector tree expression args size) = 1.
    self assert:(collector tree expression arg) isErrorNode.
    self assert:(collector tree expression arg errorToken = '.').

    "Created: / 15-02-2011 / 15:19:08 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 15:32:56 / Jakub <zelenja7@fel.cvut.cz>"
!

test7
    |collector|

    collector := self doForSource:'
                    u 3.'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isUnaryMessage.
    self assert:(collector tree expression receiver name = 'u').
    self assert:(collector tree expression receiver) isVariable.
    self assert:(collector tree expression selector asString) = '3'.

    "Created: / 15-02-2011 / 15:19:22 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-03-2011 / 22:10:21 / Jakub <zelenja7@fel.cvut.cz>"
!

test8
    |collector|

    collector := self doForSource:'
                    u =.'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isBinaryMessage.
    self assert:(collector tree expression receiver name = 'u').
    self assert:(collector tree expression receiver) isVariable.
    self assert:(collector tree expression selector) == #'='.
    self assert:(collector tree expression args size) = 1.
    self assert:(collector tree expression arg) isErrorNode.
    self assert:(collector tree expression arg errorToken = '.').

    "Created: / 15-02-2011 / 15:19:38 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 15:34:13 / Jakub <zelenja7@fel.cvut.cz>"
!

test9
    |collector|

    collector := self doForSource:'
                    u :.'.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression name = 'u').
    self assert:(collector tree expression) isVariable.
    self assert:(collector tree nextStatement expression isErrorNode).
    self assert:collector tree nextStatement expression errorToken = ':'.
    self assert:collector tree nextStatement nextStatement isNil.

    "Created: / 15-02-2011 / 15:19:52 / Jakub <zelenja7@fel.cvut.cz>"
    "Modified: / 18-02-2011 / 15:35:42 / Jakub <zelenja7@fel.cvut.cz>"
!

testBadAssignment
    |collector|

    collector := self doForSource:'
                    u := '.
    self assert:collector notNil.
    self assert:collector tree notNil.
    self assert:(collector tree expression) isAssignment.
    self assert:(collector tree expression variable name = 'u').
    self assert:(collector tree expression variable) isVariable.
    self assert:(collector tree expression expression) isErrorNode.
    self assert:(collector tree expression expression errorToken = 'EOF').

    "Modified: / 18-02-2011 / 15:39:33 / Jakub <zelenja7@fel.cvut.cz>"
!

testParsingCascadedMessage
    "Testing if cascaded message gets correctly parsed
     Note: SmallSense::TestCase>>doForSource: is adding 'gen' infront of the source code!! 
           Start/End positions are shifted accordingly"
    | sourcePrefixSize selectorSource collector selectorStartPosition selectorEndPosition cascadedArgument 
      receiver1 receiver2 receiver2LastReceiver receiver3 receiver3LastReceiver |
      
    sourcePrefixSize := 'gen' size. "/ 'gen' size will subtracted from source code, see test comment 'Note:'
    selectorSource := "/ HGWorkingCopy>>merge:
'^ self repository execute:
      (HGCommand merge
          workingDirectory: self path;
          revision: aChangesetOrChangesetId asHGChangesetId asString;
          tool: ''internal:dump'';
          yourself)'.
    
    collector := self doForSource: selectorSource.

    self assert: collector notNil.
    self assert: collector tree notNil.
    self assert: collector tree isReturnNode.  
    self assert: collector isSmalltalkParser.
  
    self deny: collector tree expression isVariable.
    self assert: collector tree expression isMessage.
    self assert: collector tree expression lineNumber = 1.
    self assert: collector tree expression selector = #'execute:'.
    self assert: collector tree expression selectorPartPositions last start = 22.
    self assert: collector tree expression selectorPartPositions last stop = 29. 
    selectorStartPosition := collector tree expression selectorPartPositions last start.
    selectorEndPosition := collector tree expression selectorPartPositions last stop.
    "/ make sure we are getting correct selector
    self assert: collector tree expression selector = 
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).     
    
    self assert: collector tree expression receiver lineNumber = 1.
    self assert: collector tree expression receiver selector = 'repository'.
    "/ why once selectorPosition and in other cases selectorPartPositions
    selectorStartPosition := collector tree expression receiver selectorPosition.
    selectorEndPosition := collector tree expression receiver endPosition.
    self assert: selectorStartPosition = 11. 
    "/ make sure we are getting correct selector
    self assert: collector tree expression receiver selector = 
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).
    
    self assert: collector tree expression receiver receiver isSelf.
    self assert: collector tree expression receiver receiver startPosition = 6.
    "/ tree startPosition must be the same as the beginning self startPosition
    self assert: collector tree expression startPosition = collector tree expression receiver receiver startPosition.
    self assert: collector tree expression receiver receiver endPosition = 9.
    
    "/ 'self repository' start/end position
    self assert: collector tree expression receiver startPosition = 6.
    self assert: collector tree expression receiver endPosition = 20.             

    "/---------------  cascaded argument -----------------------------------
    "/yourself 
    cascadedArgument := collector tree expression arguments last.    
    self assert: cascadedArgument lineNumber = 6.
    self assert: cascadedArgument selector = #yourself.
    "/ cascadedArgument startPosition = 206. cascadedArgument endPosition = 213.
    self assert: cascadedArgument startPosition = cascadedArgument selectorPartPositions last start.
    self assert: cascadedArgument endPosition = cascadedArgument selectorPartPositions last stop.
    "/ tree endPosition must be the same as the yourself endPosition
    self assert: collector tree expression endPosition = cascadedArgument selectorPartPositions last stop.

    selectorStartPosition := cascadedArgument startPosition.
    selectorEndPosition :=  cascadedArgument endPosition.
    "/ make sure we are getting correct selector
    self assert: cascadedArgument selector =
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: cascadedArgument endPosition - sourcePrefixSize).

    "/ tool: ''internal:dump ''    
    receiver1 := cascadedArgument receiver.
    self assert: receiver1 isCascade.    
    self assert: receiver1 lineNumber = 5.
    self assert: receiver1 selector = #'tool:'.
    "/ receiver1 startPosition = 173. receiver1 selectorPartPositions last stop = 177.  
    self assert: receiver1 startPosition = receiver1 selectorPartPositions last start.
    self assert: receiver1 selectorPartPositions last stop = (receiver1 startPosition + receiver1 selector size - 1).
    
    self assert: receiver1 arguments last value = 'internal:dump'.
    self assert: receiver1 arguments last value size = 13.    
    "/ receiver1 arguments last startPosition  = 179 -> +1 for Character space
    self assert:  receiver1 arguments last startPosition  = (receiver1 startPosition + receiver1 selector size + 1).
    "/ receiver1 endPosition = 193. +1 for Character space
    self assert: receiver1 endPosition = (receiver1 startPosition + receiver1 selector size + 1 + receiver1 arguments last value size + 1).
    selectorStartPosition := receiver1 startPosition.
    selectorEndPosition := receiver1 endPosition.
    "/ make sure we are getting correct selector    
    self assert: (receiver1 selector, Character space, '''', receiver1 arguments last value, '''')  =
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).
    
    "/ revision: aChangesetOrChangesetId asHGChangesetId asString
    receiver2 := receiver1 receiver.
    self assert: receiver2 isCascade.    
    self assert: receiver2 lineNumber = 4.
    self assert: receiver2 selector = #'revision:'.
    self assert: receiver2 selector size = 9.   
    "/ receiver2 startPosition = 103. receiver1 selectorPartPositions last stop = 111.  
    self assert: receiver2 startPosition = receiver2 selectorPartPositions last start.
    self assert: receiver2 selectorPartPositions last stop = (receiver2 startPosition + receiver2 selector size - 1).
    
    self assert: receiver2 arguments last isUnaryMessage.    
    self assert: receiver2 arguments last lineNumber = 4.
    self assert: receiver2 arguments last selector = #asString.
    self assert: receiver2 arguments last selector size = 8.
    self assert: receiver2 arguments last selectorPosition = 153.
    selectorStartPosition := receiver2 arguments last selectorPosition. 
    selectorEndPosition := receiver2 arguments last endPosition. "/ = 160
    "/ make sure we are getting correct selector    
    self assert: receiver2 arguments last selector  =
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).
    
    self assert: receiver2 arguments last receiver isUnaryMessage.
    self assert: receiver2 arguments last receiver lineNumber = 4.  
    self assert: receiver2 arguments last receiver selector = #asHGChangesetId.
    self assert: receiver2 arguments last receiver selector size = 15.
    self assert: receiver2 arguments last receiver selectorPosition = 137.
    selectorStartPosition := receiver2 arguments last receiver selectorPosition. 
    selectorEndPosition := receiver2 arguments last receiver endPosition. "/ = 151.
    "/ make sure we are getting correct selector
    self assert: receiver2 arguments last receiver selector  =
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).           
    
    receiver2LastReceiver := receiver2 arguments last receiver receiver.
    self assert: receiver2LastReceiver isVariableNode.
    self assert: receiver2LastReceiver lineNumber = 4.
    self assert: receiver2LastReceiver name = #aChangesetOrChangesetId.
    self assert: receiver2LastReceiver name size = 23. 
    self assert: receiver2LastReceiver endPosition = 135.     
    "/receiver2LastReceiver startPosition  = 113; +1 for Character space
    self assert: receiver2LastReceiver startPosition = (receiver2 startPosition + receiver2 selector size + 1).
  
    selectorStartPosition := receiver2 arguments last startPosition.
    selectorEndPosition := receiver2 arguments last endPosition.
    "/ make sure we are getting correct selector
    self assert: receiver2LastReceiver name =
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: receiver2LastReceiver endPosition - sourcePrefixSize).
    "/ Checking selector: and messages
    selectorStartPosition := receiver2 startPosition.
    selectorEndPosition := receiver2 arguments last endPosition.
    "/ make sure we are getting correct selector
    self assert: (receiver2 selector, Character space, receiver2 arguments last asString) = 
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).
                 
    "HGCommand merge
        workingDirectory:self path"
    receiver3 := receiver2 receiver.
    self assert: receiver3 isMessage.
    self assert: receiver3 lineNumber = 3.
    self assert: receiver3 selector = #'workingDirectory:'.
    self assert: receiver3 selector size = 17.
    self assert: receiver3 selector = (selectorSource copyFrom: (receiver3 selectorPartPositions last start) - sourcePrefixSize "/  = 64.
                                                            to: (receiver3 selectorPartPositions last stop) - sourcePrefixSize)."/  = 80. 
    self assert: receiver3 arguments last isUnaryMessage.
    self assert: receiver3 arguments last lineNumber = 3.
    self assert: receiver3 arguments last selector = #path.    
    self assert: receiver3 arguments last selector size = 4.
    self assert: receiver3 arguments last receiver isSelf.
    selectorStartPosition := receiver3 arguments last receiver startPosition. 
    selectorEndPosition := receiver3 arguments last selectorPosition + receiver3 arguments last selector size.
    "/ make sure we are getting correct selector
    "/ -1 for $;
    self assert: (receiver3 arguments last receiver asString, Character space, receiver3 arguments last selector) = 
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: (selectorEndPosition - sourcePrefixSize) - 1).   
    
    self assert: receiver3 receiver isUnaryMessage. 
    self assert: receiver3 receiver lineNumber = 2.
    self assert: receiver3 receiver selector = #merge.
    self assert: receiver3 receiver selector size = 5.    
    self assert: receiver3 receiver selectorPosition = 48.
    selectorStartPosition := receiver3 receiver selectorPosition.
    selectorEndPosition := selectorStartPosition + receiver3 receiver selector size.
    "/ make sure we are getting correct selector
    "/ -1 for end line
    self assert: receiver3 receiver selector = 
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: (selectorEndPosition - sourcePrefixSize) - 1).
     
    receiver3LastReceiver := receiver3 receiver receiver.
    self assert: receiver3LastReceiver isVariableNode.
    self assert: receiver3LastReceiver lineNumber = 2.
    self assert: receiver3LastReceiver name = #HGCommand.
    selectorStartPosition := receiver3LastReceiver startPosition.
    selectorEndPosition := receiver3LastReceiver endPosition.
    "/ make sure we are getting correct selector
    self assert: receiver3LastReceiver name = 
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize).

    "/ HGCommand complete messages
    selectorStartPosition := receiver3 startPosition. 
    selectorEndPosition := receiver3 endPosition.
    "/ make sure we are getting correct selector
    self assert: receiver3 asString withoutAllSpaces =
                 (selectorSource copyFrom: selectorStartPosition - sourcePrefixSize to: selectorEndPosition - sourcePrefixSize) withoutAllSpaces.

    "Created: / 17-11-2021 / 12:53:37 / Patrik Svestka <patrik.svestka@gmail.com>"
    "Modified (comment): / 24-11-2021 / 10:50:39 / Patrik Svestka <patrik.svestka@gmail.com>"
!

testUnaryNodeCreation
    "Testing if UnaryNode is created correctly from the receiverNode"
    | receiverNode expression selector foldConstants |

    receiverNode := VariableNode type: #MethodArg name: 'aChangesetOrChangesetId' token: (Variable name: 'aChangesetOrChangesetId') index: 1.
    receiverNode startPosition: 198.
    receiverNode endPosition: 220.
    
    selector := 'asHGChangesetId'.
    foldConstants := false.
    
    expression := UnaryNode receiver:receiverNode selector:selector fold:foldConstants.

    self assert: expression startPosition = 198.
    self assert: expression endPosition = 220.

    self assert: expression receiver isVariableNode.
    self assert: expression selector = #asHGChangesetId.

    "Created: / 23-11-2021 / 12:03:53 / Patrik Svestka <patrik.svestka@gmail.com>"
! !

!SmalltalkParserTests class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '$Id$'
! !