[CORD-1440] Moving the generative toolchain in a library

Change-Id: Ifa8e8f930ac34e1f8952099b7e34842a52f4664d
diff --git a/lib/xos-genx/tests/parse_test.py b/lib/xos-genx/tests/parse_test.py
new file mode 100644
index 0000000..d8d4edc
--- /dev/null
+++ b/lib/xos-genx/tests/parse_test.py
@@ -0,0 +1,114 @@
+import unittest
+from xosgenx.generator import XOSGenerator
+from helpers import FakeArgs, XProtoTestHelpers
+
+class XProtoParseTests(unittest.TestCase):
+    def test_global_options(self):
+
+        xtarget = XProtoTestHelpers.write_tmp_target("{{ options }}")
+
+        xproto = \
+"""
+    option kind = "vsg";
+    option verbose_name = "vSG Service";
+"""
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = xtarget
+        output = XOSGenerator.generate(args)
+        self.assertIn("vsg", output)
+        self.assertIn("vSG Service", output)
+
+    def test_basic_proto(self):
+        xtarget = XProtoTestHelpers.write_tmp_target("{{ proto }}")
+
+        xproto = \
+"""
+message Person {
+  required string name = 1;
+  required int32 id = 2;  // Unique ID number for this person.
+  optional string email = 3 [symphony = "da da da dum"];
+
+  enum PhoneType {
+    MOBILE = 0;
+    HOME = 1;
+    WORK = 2;
+  }
+
+  required  string number = 1;
+  optional PhoneType type = 2;
+
+  repeated PhoneNumber phones = 4;
+}
+"""
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = xtarget
+        output = XOSGenerator.generate(args)
+        self.assertIn("PhoneNumber", output)
+
+    def test_link_extensions(self):
+
+        xtarget = XProtoTestHelpers.write_tmp_target("{{ proto.messages.0.links }}")
+        xproto = \
+"""
+message links {
+    required manytoone vrouter_service->VRouterService:device_ports = 4 [db_index = True, null = False, blank = False];
+}
+"""
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = xtarget
+        output = XOSGenerator.generate(args)
+        self.assertIn("VRouterService", output)
+	
+	pass
+
+    def test_through_extensions(self):
+        xtarget = XProtoTestHelpers.write_tmp_target("{{ proto.messages.0.links.0.through }}")
+        xproto = \
+"""
+message links {
+    required manytomany vrouter_service->VRouterService/ServiceProxy:device_ports = 4 [db_index = True, null = False, blank = False];
+}
+"""
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = xtarget
+        output = XOSGenerator.generate(args)
+        self.assertIn("ServiceProxy", output)
+
+    def test_message_options(self):
+        xtarget = XProtoTestHelpers.write_tmp_target("{{ proto.messages.0.options.type }}")
+        xproto = \
+"""
+message link {
+    option type = "e1000";
+}
+"""
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = xtarget
+        output = XOSGenerator.generate(args)
+        self.assertIn("e1000", output)
+
+	pass
+
+    def test_message_base(self):
+        xtarget = XProtoTestHelpers.write_tmp_target("{{ proto.messages.0.bases }}")
+        xproto = \
+"""
+message base(Base) {
+}
+"""
+
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = xtarget
+        output = XOSGenerator.generate(args)
+        self.assertIn("Base", output)
+
+if __name__ == '__main__':
+    unittest.main()
+
+