You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wayang.apache.org by be...@apache.org on 2022/04/08 17:16:43 UTC

[incubator-wayang] 22/32: [WAYANG-#8] add context and platfom Test

This is an automated email from the ASF dual-hosted git repository.

bertty pushed a commit to branch python-platform
in repository https://gitbox.apache.org/repos/asf/incubator-wayang.git

commit d3147607df2bf8f6efcdc2c918bbdaae4e9303fb
Author: Bertty Contreras-Rojas <be...@databloom.ai>
AuthorDate: Thu Apr 7 17:54:37 2022 +0200

    [WAYANG-#8] add context and platfom Test
    
    Signed-off-by: bertty <be...@apache.org>
---
 python/src/pywy/dataquanta.py                      | 62 ++++++++--------
 python/src/pywy/tests/unit/core/platform_test.py   | 16 ++--
 .../src/pywy/tests/unit/dataquanta/context_test.py | 86 ++++++++++++++++++++++
 3 files changed, 125 insertions(+), 39 deletions(-)

diff --git a/python/src/pywy/dataquanta.py b/python/src/pywy/dataquanta.py
index 3d465c29..9f10eba2 100644
--- a/python/src/pywy/dataquanta.py
+++ b/python/src/pywy/dataquanta.py
@@ -7,36 +7,38 @@ from pywy.core import PywyPlan
 from pywy.core import Plugin
 
 class WayangContext:
-  """
-  This is the entry point for users to work with Wayang.
-  """
-  plugins: Set[Plugin]
-
-  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
-
-  """
-  remove a :class:`Plugin` from the :class:`Context`
-  """
-  def unregister(self, p: Plugin):
-    self.plugins.remove(p)
-    return self
-
-  def textFile(self, file_path: str) -> 'DataQuanta[str]':
-    return DataQuanta(self, TextFileSource(file_path))
-
-  def __str__(self):
-    return "Plugins: {}".format(str(self.plugins))
-
-  def __repr__(self):
-    return self.__str__()
+    """
+    This is the entry point for users to work with Wayang.
+    """
+    plugins: Set[Plugin]
+
+    def __init__(self):
+        self.plugins = set()
+
+    """
+    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, *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 __str__(self):
+        return "Plugins: {}".format(str(self.plugins))
+
+    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 aff1030b..e9345a0c 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 00000000..a74c28ba
--- /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