Esempio n. 1
0
    def visit_binop(self, binop):
        # special case 'is defined' pseudo binop
        if "is defined" == binop.op:
            return self.is_defined(binop.left)

        self.result += 1
        # visit operands
        op = binop.op
        left = self.visit(binop.left)
        if "||" == op or "&&" == op:
            right = binop.right
        else:
            right = self.visit(binop.right)

        # hack (sic): ternary
        if binop.value:
            value = self.visit(binop.value)
        else:
            value = null

        self.result -= 1

        # operate
        try:
            return self.visit(left.operate(op, right, value))
        except CoercionError as e:
            # disregard coercion issues in equality
            # checks, and simply return false
            if op == "==":
                return Boolean(False)
            elif op == "!=":
                return Boolean(True)
            raise e
Esempio n. 2
0
def old_json_function(content, local=None, name_prefix=None, evaluator=None):
    def convert(content, prefix=None):
        if prefix:
            prefix = prefix + "-"
        else:
            prefix = ""
        for key in content:
            val = content[key]
            name = prefix + key
            if isinstance(val, dict):
                convert(val, name)
            else:
                val = coerce(val, raw=False)
                if val.node_name == "string":
                    val = parse_string(val.string)
                scope.add(Ident(name_prefix + name, val))

    if name_prefix:
        assert_string(name_prefix, "name_prefix")
        name_prefix = name_prefix.value
    else:
        name_prefix = ""

    if local:
        local = local.to_boolean()
    else:
        local = Boolean(local)

    if local.is_true():
        scope = evaluator.get_current_scope()
    else:
        scope = evaluator.common.scope()

    convert(content)
Esempio n. 3
0
def test_string():
    assert String("hello", "there").node_name == "string"
    assert str(String("hello", null)) == "'hello'"
    assert str(String("hello", "there")) == "therehellothere"
    assert str(String("hello")) == "'hello'"
    assert String("hello").to_boolean() == true
    assert String("z").to_boolean() == Boolean(True)
    assert String("").to_boolean() == false
Esempio n. 4
0
def test_boolean():
    unit = Unit(1, "Hz")
    from stilus.nodes.boolean import true

    assert unit.to_boolean() == true
    unit = Unit(10)
    from stilus.nodes.boolean import Boolean

    assert unit.to_boolean() == Boolean(10)
Esempio n. 5
0
def test_expression_operate_in():
    # empty expression
    expression = Expression()
    other_expression = Expression()
    other_expression.append(Ident("foo"))
    other_expression.append(Ident("bar"))
    assert expression.operate("in", other_expression) == Boolean(False)
    with pytest.raises(StilusError):
        other_expression.operate("in", expression) == Boolean(True)

    # same expression
    expression = Expression()
    expression.append(Ident("foo"))
    expression.append(Ident("bar"))
    assert expression.operate("in", expression) == Boolean(False)

    # other expression
    expression = Expression()
    expression.append(Ident("foo"))
    expression.append(Ident("bar"))
    other_expression = Expression()
    other_expression.append(Ident("bar"))
    assert other_expression.operate("in", expression) == Boolean(True)
Esempio n. 6
0
 def is_defined(self, node):
     if "ident" == node.node_name:
         return Boolean(self.lookup(node.name))
     else:
         raise ParseError(f'invalid "is defined" '
                          f"check on non-variable {node}")
Esempio n. 7
0
def test_is_false():
    assert Boolean(False).is_false()
Esempio n. 8
0
def test_is_true():
    assert Boolean(True).is_true()
Esempio n. 9
0
def test_name():
    boolean = Boolean(False)
    assert boolean.node_name == "boolean"
Esempio n. 10
0
def test_false():
    assert false == Boolean(False)
Esempio n. 11
0
def test_true():
    assert true == Boolean(True)
Esempio n. 12
0
def test_string():
    boolean = Boolean(False)
    assert f"{boolean}" == "false"
Esempio n. 13
0
def test_negate():
    boolean = Boolean(True)
    assert boolean.negate().is_false()