def test_parens_for_priority(): result = lex_and_parse('(|| 1 > (2 xex: 1) ifTrue: [] )') assert result == [ Object(code=[ Send(obj=Send(obj=IntNumber(1), msg=BinaryMessage( name='>', parameter=Send(obj=IntNumber(2), msg=KeywordMessage( name='xex:', parameters=[IntNumber(1)])))), msg=KeywordMessage(name='ifTrue:', parameters=[Block()])) ]) ] # and now without parens result = lex_and_parse('(|| 1 > 2 xex: 1 ifTrue: [] )') assert result == [ Object(code=[ Send(obj=Send(obj=IntNumber(1), msg=BinaryMessage(name='>', parameter=IntNumber(2))), msg=KeywordMessage(name='xex:', parameters=[ Send(obj=IntNumber(1), msg=KeywordMessage( name='ifTrue:', parameters=[Block()])) ])) ]) ]
def test_parse_cascade_to_kw(): result = lex_and_parse('x: 1 Y: 2; a: 1 B: 2; b') assert result == [ Cascade(obj=Self(), msgs=[ KeywordMessage("x:Y:", [IntNumber(1), IntNumber(2)]), KeywordMessage("a:B:", [IntNumber(1), IntNumber(2)]), Message("b"), ]) ]
def test_parse_chained_messages_kw(): result = lex_and_parse('2 minus ifTrue: []') assert result == [ Send(obj=Send(obj=IntNumber(2), msg=Message('minus')), msg=KeywordMessage(name='ifTrue:', parameters=[Block()])) ]
def test_parse_keyword_message_to_obj_with_parameters(): result = lex_and_parse('asd set: 1') assert result == [ Send(obj=Send(obj=Self(), msg=Message('asd')), msg=KeywordMessage(name='set:', parameters=[IntNumber(1)])) ]
def test_parse_cascade_kw_to_self(): result = lex_and_parse('a: 1; b') assert result == [ Cascade(obj=Self(), msgs=[ KeywordMessage("a:", [IntNumber(1)]), Message("b"), ]) ]
def test_parse_chained_kw_and_unary_msgs(): result = lex_and_parse('ifTrue: [] not not') assert result == [ Send(obj=Self(), msg=KeywordMessage(name='ifTrue:', parameters=[ Send(obj=Send(obj=Block(), msg=Message('not')), msg=Message('not')) ])), ]
def test_parse_keyword_message_to_obj_with_multiple_parameters(): result = lex_and_parse('asd set: 1 And: 2 Also: 3 So: 4') assert result == [ Send(obj=Send(obj=Self(), msg=Message('asd')), msg=KeywordMessage(name='set:And:Also:So:', parameters=[ IntNumber(1), IntNumber(2), IntNumber(3), IntNumber(4) ])) ]
def test_resend(): result = lex_and_parse('''(| p* = xe. | p.msg. p.kwd: x Msg: y. )''') assert result == [ Object(code=[ Resend(parent_name="p", msg=Message("msg")), Resend(parent_name="p", msg=KeywordMessage(name="kwd:Msg:", parameters=[ Send(obj=Self(), msg=Message("x")), Send(obj=Self(), msg=Message("y")) ])) ], parents={"p": Send(obj=Self(), msg=Message("xe"))}) ]