4 from vppapigen import VPPAPI, Option, ParseError
7 # - test parsing of options, typedefs, enums, defines, CRC
8 # - test JSON, C output
11 class TestVersion(unittest.TestCase):
16 def test_version(self):
17 version_string = 'option version = "1.0.0";'
18 r = self.parser.parse_string(version_string)
19 self.assertTrue(isinstance(r[0], Option))
22 class TestTypedef(unittest.TestCase):
27 def test_duplicatetype(self):
29 typedef foo1 { u8 dummy; };
30 typedef foo1 { u8 dummy; };
32 self.assertRaises(KeyError, self.parser.parse_string, test_string)
35 class TestDefine(unittest.TestCase):
40 def test_unknowntype(self):
41 test_string = 'define foo { foobar foo;};'
42 with self.assertRaises(ParseError) as ctx:
43 self.parser.parse_string(test_string)
44 self.assertIn('Undefined type: foobar', str(ctx.exception))
46 test_string = 'define { u8 foo;};'
47 with self.assertRaises(ParseError) as ctx:
48 self.parser.parse_string(test_string)
52 manual_print dont_trace manual_endian define foo { u8 foo; };
53 define foo_reply {u32 context; i32 retval; };
55 r = self.parser.parse_string(test_string)
56 self.assertIsNotNone(r)
57 s = self.parser.process(r)
58 self.assertIsNotNone(s)
61 self.assertTrue(d.dont_trace)
62 self.assertTrue(d.manual_endian)
63 self.assertTrue(d.manual_print)
64 self.assertFalse(d.autoreply)
67 nonexisting_flag define foo { u8 foo; };
69 with self.assertRaises(ParseError):
70 self.parser.parse_string(test_string)
73 class TestService(unittest.TestCase):
78 def test_service(self):
80 autoreply define show_version { u8 foo;};
81 service { rpc show_version returns show_version_reply; };
83 r = self.parser.parse_string(test_string)
84 s = self.parser.process(r)
85 self.assertEqual(s['Service'][0].caller, 'show_version')
86 self.assertEqual(s['Service'][0].reply, 'show_version_reply')
89 if __name__ == '__main__':
90 unittest.main(verbosity=2)