Home | History | Annotate | Download | only in tests
      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