Diff
Modified: trunk/Tools/ChangeLog (265276 => 265277)
--- trunk/Tools/ChangeLog 2020-08-05 04:19:05 UTC (rev 265276)
+++ trunk/Tools/ChangeLog 2020-08-05 05:15:29 UTC (rev 265277)
@@ -1,3 +1,25 @@
+2020-08-04 Jonathan Bedard <jbed...@apple.com>
+
+ [webkitcorepy] Add mocks.ContextStack
+ https://bugs.webkit.org/show_bug.cgi?id=214484
+
+ Reviewed by Dewei Zhu.
+
+ Add a class which allows a context leveraging mock to stack. This is useful when
+ mocking requests or subprocess, where a single function (or class of functions)
+ is handling calls that are destined for different for different mock handlers.
+
+ * Scripts/libraries/webkitcorepy/webkitcorepy/mocks: Added.
+ * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py: Added.
+ * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/context_stack.py: Added.
+ (ContextStack): Class which stacks mock handlers.
+ * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks: Added.
+ * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/__init__.py: Added.
+ * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/context_stack_unittest.py: Added.
+ (to_be_replaced): Function to be mocked
+ (ExampleStack): Example mock handler.
+ (ContextStack): Test suite.
+
2020-08-04 Fujii Hironori <hironori.fu...@sony.com>
[webkitcorepy] REGRESSION(r265254): autoinstaller is failing to execute setup.py on win32 Python
Modified: trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py (265276 => 265277)
--- trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py 2020-08-05 04:19:05 UTC (rev 265276)
+++ trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py 2020-08-05 05:15:29 UTC (rev 265277)
@@ -29,7 +29,7 @@
from webkitcorepy.version import Version
from webkitcorepy.string_utils import BytesIO, StringIO, UnicodeIO, unicode
-version = Version(0, 1, 0)
+version = Version(0, 1, 1)
from webkitcorepy.autoinstall import Package, AutoInstall
if sys.version_info > (3, 0):
Copied: trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py (from rev 265276, trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py) (0 => 265277)
--- trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py (rev 0)
+++ trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py 2020-08-05 05:15:29 UTC (rev 265277)
@@ -0,0 +1,23 @@
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitcorepy.mocks.context_stack import ContextStack
Copied: trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/context_stack.py (from rev 265276, trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py) (0 => 265277)
--- trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/context_stack.py (rev 0)
+++ trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/context_stack.py 2020-08-05 05:15:29 UTC (rev 265277)
@@ -0,0 +1,42 @@
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+class ContextStack(object):
+
+ def __init__(self, cls):
+ self.previous = None
+ self.patches = []
+ self.cls = cls
+
+ def __enter__(self):
+ self.previous = self.top
+ self.cls.top = self
+ for patch in self.patches:
+ patch.__enter__()
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ for patch in reversed(self.patches):
+ patch.__exit__(exc_type, exc_value, traceback)
+ self.cls.top = self.previous
+ self.previous = None
Copied: trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/__init__.py (from rev 265276, trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py) (0 => 265277)
--- trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/__init__.py (rev 0)
+++ trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/__init__.py 2020-08-05 05:15:29 UTC (rev 265277)
@@ -0,0 +1,21 @@
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Added: trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/context_stack_unittest.py (0 => 265277)
--- trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/context_stack_unittest.py (rev 0)
+++ trunk/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/context_stack_unittest.py 2020-08-05 05:15:29 UTC (rev 265277)
@@ -0,0 +1,85 @@
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import mock
+import unittest
+
+from webkitcorepy import mocks
+
+
+def to_be_replaced():
+ return None
+
+
+class ExampleStack(mocks.ContextStack):
+ top = None
+
+ def __init__(self):
+ super(ExampleStack, self).__init__(cls=ExampleStack)
+ self.patches.append(mock.patch(
+ 'webkitcorepy.tests.mocks.context_stack_unittest.to_be_replaced',
+ new=lambda: str(self),
+ ))
+
+ @classmethod
+ def height(cls):
+ count = 0
+ current = cls.top
+ while current:
+ current = current.previous
+ count += 1
+ return count
+
+
+class ContextStack(unittest.TestCase):
+
+ def test_stacking(self):
+ stack_1 = ExampleStack()
+ stack_2 = ExampleStack()
+
+ self.assertIsNone(ExampleStack.top)
+ self.assertEqual(0, ExampleStack.height())
+ with stack_1:
+ self.assertEqual(1, ExampleStack.height())
+ self.assertEqual(ExampleStack.top, stack_1)
+ self.assertIsNone(ExampleStack.top.previous)
+
+ with stack_2:
+ self.assertEqual(2, ExampleStack.height())
+ self.assertEqual(ExampleStack.top, stack_2)
+ self.assertEqual(ExampleStack.top.previous, stack_1)
+
+ self.assertEqual(1, ExampleStack.height())
+ self.assertEqual(ExampleStack.top, stack_1)
+ self.assertIsNone(ExampleStack.top.previous)
+
+ def test_patch(self):
+ stack_1 = ExampleStack()
+ stack_2 = ExampleStack()
+
+ self.assertIsNone(to_be_replaced())
+ with stack_1:
+ self.assertEqual(str(stack_1), to_be_replaced())
+ with stack_2:
+ self.assertEqual(str(stack_2), to_be_replaced())
+
+ self.assertEqual(str(stack_1), to_be_replaced())