def visitBoolean_literal(self, ctx: RSQLParser.Boolean_literalContext): if ctx.TRUE(): return Vars.const(True) elif ctx.FALSE(): return Vars.const(False) else: raise NotImplementedError(ctx)
def visitNumeric_literal(self, ctx: RSQLParser.Numeric_literalContext): textual = ctx.getText() if ctx.DECIMAL_LITERAL(): return Vars.const(float(textual)) elif ctx.INT_LITERAL(): return Vars.const(int(textual)) else: raise NotImplementedError(ctx)
def test_set_and(self): expected = { 'a': 2, 'b': 3, } obj = { 'a': 1 } setter = Setters.key('a', Vars.const(2)) & Setters.key('b', Vars.const(3)) result = setter(obj) self.assertEqual(result, expected)
def test_update_all(self): file_repository = InMemoryRepository( pk_factory=Vars.key('name'), initial_data=self.sample_content, ) file_repository.update( Setters.key('name', Vars.const('Updated ') + Vars.key('name')), )
def test_set_with_dynamic(self): expected = { 'a': 2, 'b': 1, } obj = { 'a': 1 } setter = Setters.key('b', Vars.key('a')) & Setters.key('a', Vars.const(2)) result = setter(obj) self.assertEqual(result, expected)
def test_set_with_const(self): expected = {'a': 2} obj = {'a': 1} setter = Setters.key('a', Vars.const(2)) result = setter(obj) self.assertEqual(result, expected)
def test_ne_same_const(self): var = Vars.const('const') != Vars.const('const') optimized_var = var.optimize() self.assertTrue(Const.is_false(optimized_var))
def test_eq_same_const(self): var = Vars.const('const') == Vars.const('const') optimized_var = var.optimize() self.assertTrue(Const.is_true(optimized_var))
def test_false_and(self): var = Vars.const(False) & Vars.key('any') optimized_var = var.optimize() self.assertTrue(Const.is_false(optimized_var))
def test_or_true(self): var = Vars.key('any') | Vars.const(True) optimized_var = var.optimize() self.assertTrue(Const.is_true(optimized_var))
def visitString_literal(self, ctx: RSQLParser.String_literalContext): if ctx.STRING_LITERAL(): return Vars.const(ast.literal_eval(ctx.getText())) else: raise NotImplementedError(ctx)
def visitArray_value(self, ctx: RSQLParser.Array_valueContext): return Vars.const(tuple([self.visit(value) for value in ctx.value()]))