[WAYANG-#8] add context and platfom Test
Signed-off-by: bertty <bertty@apache.org>
diff --git a/python/src/pywy/dataquanta.py b/python/src/pywy/dataquanta.py
index 3d465c2..9f10eba 100644
--- a/python/src/pywy/dataquanta.py
+++ b/python/src/pywy/dataquanta.py
@@ -7,36 +7,38 @@
from pywy.core import Plugin
class WayangContext:
- """
- This is the entry point for users to work with Wayang.
- """
- plugins: Set[Plugin]
+ """
+ This is the entry point for users to work with Wayang.
+ """
+ plugins: Set[Plugin]
- def __init__(self):
- self.plugins = set()
+ def __init__(self):
+ self.plugins = set()
- """
- add a :class:`Plugin` to the :class:`Context`
- """
- def register(self, p: Plugin):
- self.plugins.add(p)
- return self
+ """
+ add a :class:`Plugin` to the :class:`Context`
+ """
+ def register(self, *plugins: Plugin):
+ for p in plugins:
+ self.plugins.add(p)
+ return self
- """
- remove a :class:`Plugin` from the :class:`Context`
- """
- def unregister(self, p: Plugin):
- self.plugins.remove(p)
- return self
+ """
+ remove a :class:`Plugin` from the :class:`Context`
+ """
+ def unregister(self, *plugins: Plugin):
+ for p in plugins:
+ self.plugins.remove(p)
+ return self
- def textFile(self, file_path: str) -> 'DataQuanta[str]':
- return DataQuanta(self, TextFileSource(file_path))
+ def textFile(self, file_path: str) -> 'DataQuanta[str]':
+ return DataQuanta(self, TextFileSource(file_path))
- def __str__(self):
- return "Plugins: {}".format(str(self.plugins))
+ def __str__(self):
+ return "Plugins: {}".format(str(self.plugins))
- def __repr__(self):
- return self.__str__()
+ def __repr__(self):
+ return self.__str__()
class DataQuanta(GenericTco):
"""
diff --git a/python/src/pywy/tests/unit/core/platform_test.py b/python/src/pywy/tests/unit/core/platform_test.py
index aff1030..e9345a0 100644
--- a/python/src/pywy/tests/unit/core/platform_test.py
+++ b/python/src/pywy/tests/unit/core/platform_test.py
@@ -1,16 +1,14 @@
import unittest
+from pywy.core.platform import Platform
+
class TestUnitCorePlatform(unittest.TestCase):
def setUp(self):
pass
- def test_TO_REMOVE(self):
- """
- TODO REMOVE THIS TEST, IT JUST TO VALIDATE THAT EVERYTHING IS CORRECT IN TERMS OF ENVIRONMENT
- Returns
- -------
-
- """
- self.assertEqual("a", "a")
-
+ def test_create(self):
+ name = "platform"
+ p = Platform(name)
+ self.assertEqual(type(p), Platform)
+ self.assertEqual(p.name, name)
diff --git a/python/src/pywy/tests/unit/dataquanta/context_test.py b/python/src/pywy/tests/unit/dataquanta/context_test.py
new file mode 100644
index 0000000..a74c28b
--- /dev/null
+++ b/python/src/pywy/tests/unit/dataquanta/context_test.py
@@ -0,0 +1,86 @@
+import unittest
+from unittest.mock import Mock
+
+from pywy.dataquanta import WayangContext
+from pywy.dataquanta import DataQuanta
+from pywy.operators.source import TextFileSource
+
+
+class TestUnitDataquantaContext(unittest.TestCase):
+
+ def test_create(self):
+ context = WayangContext()
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 0)
+
+ def test_set_pluggin(self):
+ pluggin = Mock()
+ context = WayangContext().register(pluggin)
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 1)
+
+ def test_register_bulk_pluggins(self):
+ pluggin = Mock()
+ pluggin2 = Mock()
+ context = WayangContext().register(pluggin, pluggin2)
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 2)
+
+ def test_register_one_by_one_pluggins(self):
+ pluggin = Mock()
+ pluggin2 = Mock()
+ context = WayangContext().register(pluggin).register(pluggin2)
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 2)
+
+ def test_register_one_two_times_pluggins(self):
+ pluggin = Mock()
+ context = WayangContext().register(pluggin).register(pluggin)
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 1)
+
+ def test_unregister_pluggins(self):
+ pluggin = Mock()
+ context = WayangContext().register(pluggin)
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 1)
+
+ context = context.unregister(pluggin)
+
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 0)
+
+ def test_unregister_in_bulk_pluggins(self):
+ pluggin = Mock()
+ pluggin2 = Mock()
+ pluggin3 = Mock()
+ context = WayangContext().register(pluggin, pluggin2, pluggin3)
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 3)
+
+ context = context.unregister(pluggin,pluggin3)
+
+ self.assertIsInstance(context, WayangContext)
+ self.assertIsInstance(context.plugins, set)
+ self.assertEqual(len(context.plugins), 1)
+ self.assertEqual(context.plugins.pop(), pluggin2)
+
+ def test_textfile_withoutPlugin(self):
+ path = Mock()
+ context = WayangContext()
+ self.assertIsInstance(context, WayangContext)
+ self.assertEqual(len(context.plugins), 0)
+
+ dataQuanta = context.textFile(path)
+
+ self.assertIsInstance(dataQuanta, DataQuanta)
+ self.assertIsInstance(dataQuanta.operator, TextFileSource)
+ self.assertEqual(context, dataQuanta.context)
\ No newline at end of file