1 #!/usr/bin/env python3 2 3 # 4 # Copyright (C) 2018 The Android Open Source Project 5 # 6 # Licensed under the Apache License, Version 2.0 (the "License"); 7 # you may not use this file except in compliance with the License. 8 # You may obtain a copy of the License at 9 # 10 # http://www.apache.org/licenses/LICENSE-2.0 11 # 12 # Unless required by applicable law or agreed to in writing, software 13 # distributed under the License is distributed on an "AS IS" BASIS, 14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 # See the License for the specific language governing permissions and 16 # limitations under the License. 17 # 18 19 """This module contains the unit tests to check the Parser class.""" 20 21 import unittest 22 23 from blueprint import Lexer, Parser, String, VarRef 24 25 26 #------------------------------------------------------------------------------ 27 # Variable Definition 28 #------------------------------------------------------------------------------ 29 30 class DefineVarTest(unittest.TestCase): 31 def test_define_var(self): 32 parser = Parser(None) 33 34 str1 = String(1) 35 parser.define_var('a', str1) 36 self.assertEqual(len(parser.var_defs), 1) 37 self.assertEqual(len(parser.vars), 1) 38 self.assertIn('a', parser.vars) 39 self.assertIs(parser.vars['a'], str1) 40 41 str2 = String(2) 42 parser.define_var('a', str2) 43 self.assertEqual(len(parser.var_defs), 2) 44 self.assertEqual(len(parser.vars), 1) 45 self.assertIn('a', parser.vars) 46 self.assertIs(parser.vars['a'], str2) 47 48 49 def test_create_var_ref(self): 50 parser = Parser(None) 51 52 str1 = String(1) 53 parser.define_var('a', str1) 54 55 var1 = parser.create_var_ref('a') 56 self.assertIsInstance(var1, VarRef) 57 self.assertEqual(var1.name, 'a') 58 self.assertIs(var1.value, str1) 59 60 var2 = parser.create_var_ref('b') 61 self.assertIsInstance(var2, VarRef) 62 self.assertEqual(var2.name, 'b') 63 self.assertIs(var2.value, None) 64 65 66 #------------------------------------------------------------------------------ 67 # Parser 68 #------------------------------------------------------------------------------ 69 70 class ParserTest(unittest.TestCase): 71 def test_assign_string(self): 72 lexer = Lexer('a = "example"') 73 74 parser = Parser(lexer) 75 parser.parse() 76 self.assertEqual(parser.var_defs[0][0], 'a') 77 self.assertEqual(repr(parser.var_defs[0][1]), repr('example')) 78 79 80 def test_list_empty(self): 81 lexer = Lexer('a = []') 82 83 parser = Parser(lexer) 84 parser.parse() 85 self.assertEqual(parser.var_defs[0][0], 'a') 86 self.assertEqual(repr(parser.var_defs[0][1]), repr([])) 87 88 89 def test_list_one_element(self): 90 lexer = Lexer('a = ["x"]') 91 92 parser = Parser(lexer) 93 parser.parse() 94 self.assertEqual(parser.var_defs[0][0], 'a') 95 self.assertEqual(repr(parser.var_defs[0][1]), repr(['x'])) 96 97 98 def test_list_one_element_comma(self): 99 lexer = Lexer('a = ["x",]') 100 101 parser = Parser(lexer) 102 parser.parse() 103 self.assertEqual(parser.var_defs[0][0], 'a') 104 self.assertEqual(repr(parser.var_defs[0][1]), repr(['x'])) 105 106 107 def test_list_two_elements(self): 108 lexer = Lexer('a = ["x", "y"]') 109 110 parser = Parser(lexer) 111 parser.parse() 112 self.assertEqual(parser.var_defs[0][0], 'a') 113 self.assertEqual(repr(parser.var_defs[0][1]), repr(['x', 'y'])) 114 115 116 def test_list_two_elements_comma(self): 117 lexer = Lexer('a = ["x", "y",]') 118 119 parser = Parser(lexer) 120 parser.parse() 121 self.assertEqual(parser.var_defs[0][0], 'a') 122 self.assertEqual(repr(parser.var_defs[0][1]), repr(['x', 'y'])) 123 124 125 def test_dict_empty(self): 126 lexer = Lexer('a = {}') 127 128 parser = Parser(lexer) 129 parser.parse() 130 self.assertEqual(parser.var_defs[0][0], 'a') 131 self.assertEqual(repr(parser.var_defs[0][1]), repr({})) 132 133 134 def test_dict_one_element(self): 135 lexer = Lexer('a = {x: "1"}') 136 137 parser = Parser(lexer) 138 parser.parse() 139 self.assertEqual(parser.var_defs[0][0], 'a') 140 self.assertEqual(repr(parser.var_defs[0][1]), '{x: \'1\'}') 141 142 143 def test_dict_one_element_comma(self): 144 lexer = Lexer('a = {x: "1",}') 145 146 parser = Parser(lexer) 147 parser.parse() 148 self.assertEqual(parser.var_defs[0][0], 'a') 149 self.assertEqual(repr(parser.var_defs[0][1]), '{x: \'1\'}') 150 151 152 def test_dict_two_elements(self): 153 lexer = Lexer('a = {x: "1", y: "2"}') 154 155 parser = Parser(lexer) 156 parser.parse() 157 self.assertEqual(parser.var_defs[0][0], 'a') 158 self.assertEqual(repr(parser.var_defs[0][1]), '{x: \'1\', y: \'2\'}') 159 160 161 def test_dict_two_elements_comma(self): 162 lexer = Lexer('a = {x: "1", y: "2",}') 163 164 parser = Parser(lexer) 165 parser.parse() 166 self.assertEqual(parser.var_defs[0][0], 'a') 167 self.assertEqual(repr(parser.var_defs[0][1]), '{x: \'1\', y: \'2\'}') 168 169 170 if __name__ == '__main__': 171 unittest.main() 172