def test_expect_values(self): cases = [ ("VALUES ()", "", values([a_args([])])), ("VALUES", "", values([])), ("VALUES(%s)", "", values([a_args([pyfmt_str])])), (" VALUES (%s) ", "", values([a_args([pyfmt_str])])), ("VALUES(%s, %s)", "", values([a_args([pyfmt_str, pyfmt_str])])), ( "VALUES(%s, %s, LOWER(%s, %s))", "", values([ a_args([ pyfmt_str, pyfmt_str, func("LOWER", a_args([pyfmt_str, pyfmt_str])), ]) ]), ), ( "VALUES (UPPER(%s)), (%s)", "", values([ a_args([func("UPPER", a_args([pyfmt_str]))]), a_args([pyfmt_str]), ]), ), ] for text, want_unconsumed, want_parsed in cases: with self.subTest(text=text): got_unconsumed, got_parsed = expect(text, VALUES) self.assertEqual(got_parsed, want_parsed) self.assertEqual(got_unconsumed, want_unconsumed)
def test_func(self): cases = [ ("_91())", ")", func("_91", a_args([]))), ("_a()", "", func("_a", a_args([]))), ("___()", "", func("___", a_args([]))), ("abc()", "", func("abc", a_args([]))), ( "AF112(%s, LOWER(%s, %s), rand(%s, %s, TAN(%s, %s)))", "", func( "AF112", a_args([ pyfmt_str, func("LOWER", a_args([pyfmt_str, pyfmt_str])), func( "rand", a_args([ pyfmt_str, pyfmt_str, func( "TAN", a_args([pyfmt_str, pyfmt_str]), ), ]), ), ]), ), ), ] for text, want_unconsumed, want_parsed in cases: with self.subTest(text=text): got_unconsumed, got_parsed = expect(text, FUNC) self.assertEqual(got_parsed, want_parsed) self.assertEqual(got_unconsumed, want_unconsumed)
def test_func_eq(self): from google.cloud.spanner_dbapi.parser import func func1 = func("func1", None) func2 = func("func2", None) self.assertFalse(func1 == object) self.assertFalse(func1 == func2) func2.name = func1.name func1.args = 0 func2.args = "0" self.assertFalse(func1 == func2) func1.args = [0] func2.args = [0, 0] self.assertFalse(func1 == func2) func2.args = func1.args self.assertTrue(func1 == func2)
def test_a_args(self): from google.cloud.spanner_dbapi.parser import ARGS from google.cloud.spanner_dbapi.parser import a_args from google.cloud.spanner_dbapi.parser import expect from google.cloud.spanner_dbapi.parser import func from google.cloud.spanner_dbapi.parser import pyfmt_str cases = [ ("()", "", a_args([])), ("(%s)", "", a_args([pyfmt_str])), ("(%s,)", "", a_args([pyfmt_str])), ("(%s),", ",", a_args([pyfmt_str])), ( "(%s,%s, f1(%s, %s))", "", a_args([ pyfmt_str, pyfmt_str, func("f1", a_args([pyfmt_str, pyfmt_str])) ]), ), ] for text, want_unconsumed, want_parsed in cases: with self.subTest(text=text): got_unconsumed, got_parsed = expect(text, ARGS) self.assertEqual(got_parsed, want_parsed) self.assertEqual(got_unconsumed, want_unconsumed)
def test_expect_values(self): from google.cloud.spanner_dbapi.parser import VALUES from google.cloud.spanner_dbapi.parser import a_args from google.cloud.spanner_dbapi.parser import expect from google.cloud.spanner_dbapi.parser import func from google.cloud.spanner_dbapi.parser import pyfmt_str from google.cloud.spanner_dbapi.parser import values cases = [ ("VALUES ()", "", values([a_args([])])), ("VALUES", "", values([])), ("VALUES(%s)", "", values([a_args([pyfmt_str])])), (" VALUES (%s) ", "", values([a_args([pyfmt_str])])), ("VALUES(%s, %s)", "", values([a_args([pyfmt_str, pyfmt_str])])), ( "VALUES(%s, %s, LOWER(%s, %s))", "", values([ a_args([ pyfmt_str, pyfmt_str, func("LOWER", a_args([pyfmt_str, pyfmt_str])), ]) ]), ), ( "VALUES (UPPER(%s)), (%s)", "", values([ a_args([func("UPPER", a_args([pyfmt_str]))]), a_args([pyfmt_str]) ]), ), ] for text, want_unconsumed, want_parsed in cases: with self.subTest(text=text): got_unconsumed, got_parsed = expect(text, VALUES) self.assertEqual(got_parsed, want_parsed) self.assertEqual(got_unconsumed, want_unconsumed)
def test_a_args(self): cases = [ ("()", "", a_args([])), ("(%s)", "", a_args([pyfmt_str])), ("(%s,)", "", a_args([pyfmt_str])), ("(%s),", ",", a_args([pyfmt_str])), ( "(%s,%s, f1(%s, %s))", "", a_args([ pyfmt_str, pyfmt_str, func("f1", a_args([pyfmt_str, pyfmt_str])), ]), ), ] for text, want_unconsumed, want_parsed in cases: with self.subTest(text=text): got_unconsumed, got_parsed = expect(text, ARGS) self.assertEqual(got_parsed, want_parsed) self.assertEqual(got_unconsumed, want_unconsumed)