def test_works(self): prog = parse("[10, 20, 25]") prog.dump().should.contain('(Block\n [(Integer 10), (Integer 20), (Integer 25)])') prog = parse("[100]") prog.dump().should.contain('(Block\n [(Integer 100)])') prog = parse("[]") prog.dump().should.contain('(Block\n [])')
def test_works_for_expressions(self): prog = parse("1 + 2 * 3") prog.dump().should.contain('(+ 1 (* 2 3))') prog = parse("10 / 2 * 3 - 1") prog.dump().should.contain('(- (* (/ 10 2) 3) 1)') prog = parse("10 * 2 / 3 - 1") prog.dump().should.contain('(- (/ (* 10 2) 3) 1)')
def test_has_a_default_constructor_when_no_constructor_is_specified(self): expr = """ class Integer end """ prog = parse(expr) prog.dump().should.contain('(class Integer(Block\n (:init()')
def test_works_for_assignments(self): prog = parse("one = 1") prog.dump().should.contain('(Block\n (= one 1))') prog = parse("twotwo = 2.2") prog.dump().should.contain('(Block\n (= twotwo 2.2))') prog = parse('some = "string"') prog.dump().should.contain('(Block\n (= some "string"))') prog = parse('v1 = v2') prog.dump().should.contain('(Block\n (= v1 v2))') # won't be implement this for a while, even if the syntax supports prog = parse("'one' < 'two'") prog.dump().should.contain('(Block\n (< "one" "two"))')
def test_has_a_representation(self): expr = """ class Integer < Object end """ prog = parse(expr) prog.dump().should.contain( f'(class Integer(Block\n (:init() (Block\n )))')
def test_has_a_representation_with_one_arg(self): expr = """ class Integer def :init(val) end end """ prog = parse(expr) prog.dump().should.contain('(class Integer(Block\n (:init(val)')
def test_has_a_representation_for_no_args(self): expr = """ class Integer def :init() end end """ prog = parse(expr) prog.dump().should.contain('(class Integer(Block\n (:init()')
def test_should_have_only_one_default_constructor(self): expr = """ class Integer def :init() end end """ prog = parse(expr) prog.dump().should.be.equal('(Program\n (Block\n (class Integer(Block\n (:init() (Block\n ))))))')
def test_works(self): expr = """ if true a = 10.5 end """ prog = parse(expr) prog.dump().should.contain( '(Program\n (Block\n If((Bool true)) Then((Block\n (= a 10.5))))))' )
def test_has_representation_for_breaks(self): expr = """ for item in list break end """ prog = parse(expr) prog.dump().should.contain( f'(Program\n (Block\n For((Var item) in (VarValue list)) ' f'(Block\n Break)))')
def test_has_a_representation(self): expr = """ for item in list print(item) end """ prog = parse(expr) prog.dump().should.contain( f'(Program\n (Block\n For((Var item) in (VarValue list)) ' f'(Block\n (Print (VarValue item)))))')
def test_has_a_representation_for_lists(self): expr = """ for item in [1, 2, 3] print(item) end """ prog = parse(expr) prog.dump().should.contain( f'(Program\n (Block\n For((Var item) in [(Integer 1), (Integer 2), (Integer 3)]) ' f'(Block\n (Print (VarValue item)))))')
def test_has_a_representation_for_no_args(self): expr = """ class Integer def do_it() true end end """ prog = parse(expr) prog.dump().should.contain( '(class Integer(Block\n (do_it() (Block\n (Bool true)')
def test_works_for_if_with_expressions(self): expr = """ if 1 + 3 * 4 - 5 + 2 beta = 'gamma' end """ prog = parse(expr) prog.dump().should.be.equal( '(Program\n (Block\n If((+ (- (+ 1 (* 3 4)) 5) 2)) ' 'Then((Block\n (= beta "gamma"))))))')
def test_works_for_if_with_strings(self): expr = """ if "pocoio" beta = 'gamma' end """ prog = parse(expr) prog.dump().should.be.equal( '(Program\n (Block\n If((String pocoio)) ' 'Then((Block\n (= beta "gamma"))))))')
def test_works_for_if_with_consts(self): expr = """ if 1 beta = 'gamma' end """ prog = parse(expr) prog.dump().should.be.equal( '(Program\n (Block\n If((Integer 1)) Then((Block\n (= beta "gamma"))))))' )
def test_works_for_if_with_variables(self): expr = """ if alpha beta = 'gamma' end """ prog = parse(expr) prog.dump().should.be.equal( '(Program\n (Block\n If((VarValue alpha)) Then((Block\n (= beta "gamma"))))))' )
def test_works_for_if_then_else_conditionals(self): expr = """ if false a = 'right' else b = 'wrong' end """ prog = parse(expr) prog.dump().should.be.equal('(Program\n (Block\n If((Bool false)) ' 'Then((Block\n (= a "right")))) ' 'Else((Block\n (= b "wrong")))))')
def test_has_a_representation_for_returning_type(self): expr = """ class Integer def Cint32 do_it(val::Cint32) true end end """ prog = parse(expr) prog.dump().should.contain( '(class Integer(Block\n (Cint32 do_it(val::Cint32) (Block\n (Bool true)' )
def test_has_a_representation_for_returns(self): expr = """ class Integer def Cint32 do_it(val::Cint32) return 15 end end """ prog = parse(expr) prog.dump().should.contain( '(class Integer(Block\n (Cint32 do_it(val::Cint32) (Block\n ' '(Return (Integer 15)')
def test_has_a_representation(self): expr = """ class MyClass def say_42() return 42 end end mc = MyClass() mc.say_42() """ prog = parse(expr) prog.dump().should.contain('(= mc MyClass())\n(mc.say_42 )')
def test_has_representation_for_assigning_to_variables(self): expr = """ class MyClass def say_42() return 42 end end mc = MyClass() forty_two = mc.say_42() """ prog = parse(expr) prog.dump().should.contain( '(= mc MyClass())\n(= forty_two (mc.say_42 ))')
def test_has_representation_for_parameters(self): expr = """ class MyClass def say_42() return 42 end end mc = MyClass() mc.say_42(1, "2") """ prog = parse(expr) prog.dump().should.contain( '(= mc MyClass())\n(mc.say_42 (Integer 1), (String 2))')
def test_works_for_binops(self): prog = parse("1 + 2") prog.dump().should.contain('(+ 1 2)')
def test_works_for_integer_consts(self): prog = parse("1") prog.dump().should.contain('(Block\n (Integer 1))')
def test_works_for_float_consts(self): prog = parse("1.0") prog.dump().should.contain('(Block\n (Float 1.0))')
def test_works_for_string_consts(self): prog = parse("'andrea'") prog.dump().should.contain('(Block\n (String andrea))')
def test_works_for_bool_consts(self): prog = parse("true") prog.dump().should.contain('(Block\n (Bool true))') prog = parse("false") prog.dump().should.contain('(Block\n (Bool false))')
def test_works_comparison(self): prog = parse("2 > 1") prog.dump().should.contain('(Block\n (> 2 1))') prog = parse("1 < 2") prog.dump().should.contain('(Block\n (< 1 2))') prog = parse("22.98 > 0.92") prog.dump().should.contain('(Block\n (> 22.98 0.92))') prog = parse("1.2 < 2.9") prog.dump().should.contain('(Block\n (< 1.2 2.9))') prog = parse("12 == 29") prog.dump().should.contain('(Block\n (== 12 29))') prog = parse("0.212 == 2.19") prog.dump().should.contain('(Block\n (== 0.212 2.19))') prog = parse("12 != 29") prog.dump().should.contain('(Block\n (!= 12 29))') prog = parse("0.212 != 2.19") prog.dump().should.contain('(Block\n (!= 0.212 2.19))') prog = parse("2 >= 1") prog.dump().should.contain('(Block\n (>= 2 1))') prog = parse("1 <= 2") prog.dump().should.contain('(Block\n (<= 1 2))') prog = parse("22.98 >= 0.92") prog.dump().should.contain('(Block\n (>= 22.98 0.92))') prog = parse("1.2 <= 2.9") prog.dump().should.contain('(Block\n (<= 1.2 2.9))')
def test_works_for_multiline(self): prog = parse("1 * 2\n4 + 3\n2 - 1 + 4 * 2") prog.dump().should.contain('(* 1 2)\n(+ 4 3)\n(+ (- 2 1) (* 4 2))')