Changeset View
Changeset View
Standalone View
Standalone View
lilybuild/lilybuild/tests/ci_syntax/rules_test.py
| import unittest | import unittest | ||||
| from lilybuild.ci_syntax.rules import tokenize_rule, make_tree, parse_rule, evaluate_rule | from lilybuild.ci_syntax.rules import tokenize_rule, make_tree, parse_rule, evaluate_rule | ||||
| class RulesTest(unittest.TestCase): | class RulesTest(unittest.TestCase): | ||||
| def test_tokenize(self): | def test_tokenize(self): | ||||
| self.assertEqual(tokenize_rule("$VAR_FOO == ''"), [ | self.assertEqual(tokenize_rule("$VAR_FOO == ''"), [ | ||||
| ('VAR', ('VAR_FOO',)), | ('VAR', ('VAR_FOO',)), | ||||
| ('OP', ('==',)), | ('OP', ('==',)), | ||||
| ('STR_SINGLE', ('',)), | ('STR_SINGLE', ('',)), | ||||
| ]) | ]) | ||||
| self.assertEqual(tokenize_rule("$VAR_FOO =~ /abc/"), [ | |||||
| ('VAR', ('VAR_FOO',)), | |||||
| ('OP', ('=~',)), | |||||
| ('REGEX', ('abc',)), | |||||
| ]) | |||||
| self.assertEqual(tokenize_rule(r"$VAR_FOO =~ /ab\s\/c/"), [ | |||||
| ('VAR', ('VAR_FOO',)), | |||||
| ('OP', ('=~',)), | |||||
| ('REGEX', ('ab\\s\\/c',)), | |||||
| ]) | |||||
| self.assertEqual(tokenize_rule(r'$VAR_FOO == "xxx\""'), [ | self.assertEqual(tokenize_rule(r'$VAR_FOO == "xxx\""'), [ | ||||
| ('VAR', ('VAR_FOO',)), | ('VAR', ('VAR_FOO',)), | ||||
| ('OP', ('==',)), | ('OP', ('==',)), | ||||
| ('STR_DOUBLE', ('xxx\\"',)), | ('STR_DOUBLE', ('xxx\\"',)), | ||||
| ]) | ]) | ||||
| self.assertEqual(tokenize_rule(r'!($VAR_FOO == "xxx\"")'), [ | self.assertEqual(tokenize_rule(r'!($VAR_FOO == "xxx\"")'), [ | ||||
| ('OP', ('!',)), | ('OP', ('!',)), | ||||
| ('PAREN_LEFT', ()), | ('PAREN_LEFT', ()), | ||||
| Show All 11 Lines | def test_tokenize(self): | ||||
| tokenize_rule(r'$VAR_FOO == foo') | tokenize_rule(r'$VAR_FOO == foo') | ||||
| # unterminated strings | # unterminated strings | ||||
| with self.assertRaises(SyntaxError) as m: | with self.assertRaises(SyntaxError) as m: | ||||
| tokenize_rule(r'$VAR_FOO == "foo\"') | tokenize_rule(r'$VAR_FOO == "foo\"') | ||||
| with self.assertRaises(SyntaxError) as m: | with self.assertRaises(SyntaxError) as m: | ||||
| tokenize_rule(r'$VAR_FOO == "foo') | tokenize_rule(r'$VAR_FOO == "foo') | ||||
| with self.assertRaises(SyntaxError) as m: | with self.assertRaises(SyntaxError) as m: | ||||
| tokenize_rule(r'$VAR_FOO == "foo\\\"') | tokenize_rule(r'$VAR_FOO == "foo\\\"') | ||||
| # bareword after regex | |||||
| with self.assertRaises(SyntaxError) as m: | |||||
| tokenize_rule(r"$VAR_FOO =~ /ab\s\/c/d") | |||||
| def test_make_tree(self): | def test_make_tree(self): | ||||
| self.assertEqual(make_tree(tokenize_rule(r'($FOO)')), ('VAR', ('FOO',))) | self.assertEqual(make_tree(tokenize_rule(r'($FOO)')), ('VAR', ('FOO',))) | ||||
| self.assertEqual(make_tree(tokenize_rule(r'($FOO=="foo(") || "xxx"')), ( | self.assertEqual(make_tree(tokenize_rule(r'($FOO=="foo(") || "xxx"')), ( | ||||
| 'OP', ( | 'OP', ( | ||||
| '||', | '||', | ||||
| ('OP', ('==', ('VAR', ('FOO',)), ('STR_DOUBLE', ('foo(',)))), | ('OP', ('==', ('VAR', ('FOO',)), ('STR_DOUBLE', ('foo(',)))), | ||||
| ('STR_DOUBLE', ('xxx',)), | ('STR_DOUBLE', ('xxx',)), | ||||
| ▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | def test_eval(self): | ||||
| self.assertEqual( | self.assertEqual( | ||||
| evaluate_rule(parse_rule("$VAR_FOO == 'xx' && $Z"), { | evaluate_rule(parse_rule("$VAR_FOO == 'xx' && $Z"), { | ||||
| 'VAR_FOO': 'xx', | 'VAR_FOO': 'xx', | ||||
| 'BAR': 'yyy', | 'BAR': 'yyy', | ||||
| }), None) | }), None) | ||||
| self.assertEqual( | self.assertEqual( | ||||
| evaluate_rule(parse_rule(r"$VAR_FOO == 'x\a\\\'x'"), { | evaluate_rule(parse_rule(r"$VAR_FOO == 'x\a\\\'x'"), { | ||||
| 'VAR_FOO': r"xa\'x", | 'VAR_FOO': r"xa\'x", | ||||
| }), True) | |||||
| self.assertEqual( | |||||
| evaluate_rule(parse_rule(r"$VAR_FOO =~ /ab\s\/c/"), { | |||||
| 'VAR_FOO': 'XXab /c/def', | |||||
| }), True) | |||||
| self.assertEqual( | |||||
| evaluate_rule(parse_rule(r"$VAR_FOO =~ /ab\s\/c/"), { | |||||
| 'VAR_FOO': 'ab \\/c', | |||||
| }), False) | |||||
| self.assertEqual( | |||||
| evaluate_rule(parse_rule(r"$VAR_FOO !~ /ab\s\/c/"), { | |||||
| 'VAR_FOO': 'ab \\/c', | |||||
| }), True) | }), True) | ||||