Esempio n. 1
0
def test_compiler_expression_sum_to_parenthesis(parser):
    tree = parser.parse('1 + (2 + 3)')
    result = Compiler.compile(tree)
    rhs = {'$OBJECT': 'expression', 'expression': 'sum', 'values': [2, 3]}
    args = [{'$OBJECT': 'expression', 'expression': 'sum', 'values': [1, rhs]}]
    assert result['tree']['1']['method'] == 'expression'
    assert result['tree']['1']['args'] == args
Esempio n. 2
0
def test_compiler_set_regular_expression_flags(parser):
    """
    Ensures regular expressions with flags are compiled correctly
    """
    tree = parser.parse('a = /^foo/g')
    result = Compiler.compile(tree)
    assert result['tree']['1']['args'][0]['flags'] == 'g'
Esempio n. 3
0
def test_compiler_if_inline_expression(parser):
    tree = parser.parse('if (random numbers)\n\tx = 0')
    result = Compiler.compile(tree)
    entry = result['entrypoint']
    name = result['tree'][entry]['name']
    assert result['tree']['1']['method'] == 'if'
    assert result['tree']['1']['args'] == [{'$OBJECT': 'path', 'paths': name}]
Esempio n. 4
0
def test_compiler_mutation_chained(parser, source):
    """
    Ensures that chained mutations are compiled correctly
    """
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    args = [
        1, {
            '$OBJECT': 'mutation',
            'mutation': 'increment',
            'arguments': []
        }, {
            '$OBJECT':
            'mutation',
            'mutation':
            'format',
            'arguments': [{
                '$OBJECT': 'argument',
                'name': 'to',
                'argument': {
                    '$OBJECT': 'string',
                    'string': 'string'
                }
            }]
        }
    ]
    assert result['tree']['1']['args'] == args
Esempio n. 5
0
def test_compiler_if_else(parser):
    source = 'if colour == "red"\n\tx = 0\nelse\n\tx = 1'
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    assert result['tree']['1']['exit'] == '3'
    assert result['tree']['3']['method'] == 'else'
    assert result['tree']['4']['parent'] == '3'
Esempio n. 6
0
def test_assignments_int_positive(parser):
    """
    Ensures that assignments to positive integers are compiled correctly
    """
    tree = parser.parse('a = +3')
    result = Compiler.compile(tree)
    assert result['tree']['1']['args'] == [3]
Esempio n. 7
0
def test_compiler_try(parser):
    source = 'try\n\tx=0'
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'try'
    assert result['tree']['1']['enter'] == '2'
    assert result['tree']['2']['parent'] == '1'
Esempio n. 8
0
def test_compiler_try_finally(parser):
    source = 'try\n\tx=0\nfinally\n\tx=1'
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    assert result['tree']['3']['method'] == 'finally'
    assert result['tree']['3']['enter'] == '4'
    assert result['tree']['4']['parent'] == '3'
Esempio n. 9
0
def test_compiler_compile(patch):
    patch.many(Compiler, ['parse_tree', 'compiler', 'get_services'])
    result = Compiler.compile('tree')
    Compiler.compiler().parse_tree.assert_called_with('tree')
    expected = {'tree': Compiler.compiler().lines, 'version': version,
                'services': Compiler.compiler().get_services(),
                'functions': Compiler.compiler().functions}
    assert result == expected
Esempio n. 10
0
def test_compiler_set_object_empty(parser):
    """
    Ensures that assignments to empty objects are compiled correctly
    """
    tree = parser.parse('a = {}')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['args'] == [{'$OBJECT': 'dict', 'items': []}]
Esempio n. 11
0
def test_compiler_set_service(parser):
    """
    Ensures that service assignments are compiled correctly
    """
    tree = parser.parse('a = alpine echo')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'execute'
    assert result['tree']['1']['name'] == ['a']
Esempio n. 12
0
def test_compiler_compile(patch, magic):
    patch.object(Compiler, 'generate')
    patch.object(JSONCompiler, 'compile')
    tree = magic()
    result = Compiler.compile(tree, story=None, features=None)
    Compiler.generate.assert_called_with(tree, None)
    JSONCompiler.compile.assert_called_with(Compiler.generate())
    assert result == JSONCompiler.compile()
Esempio n. 13
0
def test_compiler_function_call(parser):
    source = 'function sum a:int returns int\n\treturn 0\nsum a:1'
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    args = [{'$OBJECT': 'argument', 'name': 'a', 'argument': 1}]
    assert result['tree']['3']['method'] == 'call'
    assert result['tree']['3']['service'] == 'sum'
    assert result['tree']['3']['args'] == args
Esempio n. 14
0
def test_compiler_try_raise(parser):
    source = 'try\n\tx=0\ncatch as error\n\traise'
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    assert result['tree']['1']['exit'] == '3'
    assert result['tree']['3']['method'] == 'catch'
    assert result['tree']['4']['method'] == 'raise'
    assert result['tree']['4']['parent'] == '3'
Esempio n. 15
0
def test_compiler_while(parser):
    tree = parser.parse('while cond\n\tx = 0')
    result = Compiler.compile(tree)
    args = [{'$OBJECT': 'path', 'paths': ['cond']}]
    assert result['tree']['1']['method'] == 'while'
    assert result['tree']['1']['args'] == args
    assert result['tree']['1']['enter'] == '2'
    assert result['tree']['2']['parent'] == '1'
Esempio n. 16
0
def test_compiler_expression_path(parser):
    """
    Ensures that expressions with paths are compiled correctly.
    """
    tree = parser.parse('x = 3\nx + 2')
    result = Compiler.compile(tree)
    path = {'$OBJECT': 'path', 'paths': ['x']}
    assert result['tree']['2']['args'][0]['values'][0] == path
Esempio n. 17
0
def test_compiler_expression_sum(parser):
    """
    Ensures that sums are compiled correctly
    """
    tree = parser.parse('3 + 2')
    result = Compiler.compile(tree)
    args = [{'$OBJECT': 'expression', 'expression': 'sum', 'values': [3, 2]}]
    assert result['tree']['1']['method'] == 'expression'
    assert result['tree']['1']['args'] == args
Esempio n. 18
0
def test_assignments_mutation(parser):
    """
    Ensures that assigning a mutation on a value is compiled correctly
    """
    tree = parser.parse('0 increase by:1')
    result = Compiler.compile(tree)
    assert result['services'] == []
    assert result['tree']['1']['method'] == 'mutation'
    assert result['tree']['1']['args'][1]['$OBJECT'] == 'mutation'
Esempio n. 19
0
def test_compiler_try_catch(parser):
    source = 'try\n\tx=0\ncatch as error\n\tx=1'
    tree = parser.parse(source)
    result = Compiler.compile(tree)
    assert result['tree']['1']['exit'] == '3'
    assert result['tree']['3']['method'] == 'catch'
    assert result['tree']['3']['output'] == ['error']
    assert result['tree']['3']['enter'] == '4'
    assert result['tree']['4']['parent'] == '3'
Esempio n. 20
0
def test_assignments_null(parser):
    """
    Ensures that assignments to null are compiled correctly
    """
    tree = parser.parse('a = null')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['name'] == ['a']
    assert result['tree']['1']['args'] == [None]
Esempio n. 21
0
def test_compiler_foreach(parser):
    tree = parser.parse('foreach items as item\n\tx = 0')
    result = Compiler.compile(tree)
    args = [{'$OBJECT': 'path', 'paths': ['items']}]
    assert result['tree']['1']['method'] == 'for'
    assert result['tree']['1']['output'] == ['item']
    assert result['tree']['1']['args'] == args
    assert result['tree']['1']['enter'] == '2'
    assert result['tree']['2']['parent'] == '1'
Esempio n. 22
0
def test_assignments_true(parser):
    """
    Ensures that assignments to true are compiled correctly
    """
    tree = parser.parse('a = true')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['name'] == ['a']
    assert result['tree']['1']['args'] == [True]
Esempio n. 23
0
def test_assignments_float(parser):
    """
    Ensures that assignments to floats are compiled correctly
    """
    tree = parser.parse('a = 3.14')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['name'] == ['a']
    assert result['tree']['1']['args'] == [3.14]
Esempio n. 24
0
def test_assignments_list(parser):
    """
    Ensures that assignments to lists are compiled correctly
    """
    tree = parser.parse('a = [1, 2]')
    result = Compiler.compile(tree)
    args = [{'$OBJECT': 'list', 'items': [1, 2]}]
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['args'] == args
Esempio n. 25
0
def test_functions_function_return(parser):
    """
    Ensures that return statements are compiled correctly
    """
    tree = parser.parse('function f\n\treturn 0')
    result = Compiler.compile(tree)
    assert result['tree']['2']['method'] == 'return'
    assert result['tree']['2']['args'] == [0]
    assert result['tree']['2']['parent'] == '1'
Esempio n. 26
0
def test_compiler_set(parser):
    """
    Ensures that assignments to integers are compiled correctly
    """
    tree = parser.parse('a = 0')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['name'] == ['a']
    assert result['tree']['1']['args'] == [0]
Esempio n. 27
0
def test_compiler_set_list_multiline(parser):
    """
    Ensures that assignments to multiline lists are compiled correctly
    """
    tree = parser.parse('a = [\n\t1,\n\t2\n]')
    result = Compiler.compile(tree)
    args = [{'$OBJECT': 'list', 'items': [1, 2]}]
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['args'] == args
Esempio n. 28
0
def test_compiler_set_regular_expression(parser):
    """
    Ensures regular expressions are compiled correctly
    """
    tree = parser.parse('a = /^foo/')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'set'
    assert result['tree']['1']['args'][0]['$OBJECT'] == 'regexp'
    assert result['tree']['1']['args'][0]['regexp'] == '/^foo/'
Esempio n. 29
0
def test_functions_function_returns(parser):
    """
    Ensures that functions with a return type are compiled correctly
    """
    tree = parser.parse('function f returns int\n\tx = 0')
    result = Compiler.compile(tree)
    assert result['tree']['1']['method'] == 'function'
    assert result['tree']['1']['function'] == 'f'
    assert result['tree']['1']['output'] == ['int']
Esempio n. 30
0
def test_compiler_set_mutation(parser):
    """
    Ensures that applying a mutation on a variable is not compiled as a
    service
    """
    tree = parser.parse('a = 0\na increase by:1')
    result = Compiler.compile(tree)
    assert result['services'] == []
    assert result['tree']['2']['method'] == 'expression'
    assert result['tree']['2']['args'][1]['$OBJECT'] == 'mutation'