Ejemplo n.º 1
0
    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  [])')
Ejemplo n.º 2
0
    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)')
Ejemplo n.º 3
0
 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()')
Ejemplo n.º 4
0
    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"))')
Ejemplo n.º 5
0
 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  )))')
Ejemplo n.º 6
0
 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)')
Ejemplo n.º 7
0
 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()')
Ejemplo n.º 8
0
 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  ))))))')
Ejemplo n.º 9
0
 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))))))'
     )
Ejemplo n.º 10
0
 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)))')
Ejemplo n.º 11
0
 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)))))')
Ejemplo n.º 12
0
 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)))))')
Ejemplo n.º 13
0
 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)')
Ejemplo n.º 14
0
    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"))))))')
Ejemplo n.º 15
0
    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"))))))')
Ejemplo n.º 16
0
    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"))))))'
        )
Ejemplo n.º 17
0
    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"))))))'
        )
Ejemplo n.º 18
0
 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")))))')
Ejemplo n.º 19
0
 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)'
     )
Ejemplo n.º 20
0
 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)')
Ejemplo n.º 21
0
 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 )')
Ejemplo n.º 22
0
 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 ))')
Ejemplo n.º 23
0
 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))')
Ejemplo n.º 24
0
 def test_works_for_binops(self):
     prog = parse("1 + 2")
     prog.dump().should.contain('(+ 1 2)')
Ejemplo n.º 25
0
 def test_works_for_integer_consts(self):
     prog = parse("1")
     prog.dump().should.contain('(Block\n  (Integer 1))')
Ejemplo n.º 26
0
 def test_works_for_float_consts(self):
     prog = parse("1.0")
     prog.dump().should.contain('(Block\n  (Float 1.0))')
Ejemplo n.º 27
0
 def test_works_for_string_consts(self):
     prog = parse("'andrea'")
     prog.dump().should.contain('(Block\n  (String andrea))')
Ejemplo n.º 28
0
 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))')
Ejemplo n.º 29
0
    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))')
Ejemplo n.º 30
0
 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))')