Пример #1
0
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()]))
                                    ]))
        ])
    ]
Пример #2
0
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"),
                ])
    ]
Пример #3
0
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()]))
    ]
Пример #4
0
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)]))
    ]
Пример #5
0
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"),
                ])
    ]
Пример #6
0
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'))
                                ])),
    ]
Пример #7
0
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)
                                ]))
    ]
Пример #8
0
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"))})
    ]