[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

aroben at apple.com aroben at apple.com
Wed Dec 22 15:23:44 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 9c57d1535202518ea8c810a285dd48b31736236f
Author: aroben at apple.com <aroben at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 2 19:08:40 2010 +0000

    Skip webkitpy.layout_tests.run_webkit_tests_unittest.MainTest on Cygwin Python 2.5.x
    
    It is known to hang on that version of Python. See
    <http://webkit.org/b/48614>.
    
    Reviewed by Adam Barth.
    
    * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py: Use
    skip_if to skip MainTest on Cygwin Python 2.5.x.
    
    * Scripts/webkitpy/test/skip.py: Added.
    (skip_if): If the passed-in condition is false, find all the test_*
    methods of the given class and replace them with a function that just
    logs that we're skipping these tests. This is loosely based on the
    unittest.skip_if decorator added in Python 3.1.
    (_skipped_method): Returns a function that just logs that the tests are
    being skipped. This is used in place of the actual test_* functions.
    
    * Scripts/webkitpy/test/skip_unittest.py: Added.
    (SkipTest.setUp): Create a logger for ourselves and give it a handler
    that logs to a private stream.
    (SkipTest.tearDown): Reset the logger.
    (SkipTest.create_fixture_class): Returns a class that we use to test
    skip_if. It has a single test_* method, test_foo, that just calls
    through to a callback.
    (SkipTest.foo_callback): Record that test_foo was called.
    (SkipTest.test_skip_if_false): Pass skip_if a False condition and test
    that test_foo does get called.
    (SkipTest.test_skip_if_true): Pass skip_if a True condition and test
    that test_foo does not get called and the appropriate message gets
    logged.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71146 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 580ca1b..0921c62 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,38 @@
+2010-11-02  Adam Roben  <aroben at apple.com>
+
+        Skip webkitpy.layout_tests.run_webkit_tests_unittest.MainTest on Cygwin
+        Python 2.5.x
+
+        It is known to hang on that version of Python. See
+        <http://webkit.org/b/48614>.
+
+        Reviewed by Adam Barth.
+
+        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py: Use
+        skip_if to skip MainTest on Cygwin Python 2.5.x.
+
+        * Scripts/webkitpy/test/skip.py: Added.
+        (skip_if): If the passed-in condition is false, find all the test_*
+        methods of the given class and replace them with a function that just
+        logs that we're skipping these tests. This is loosely based on the
+        unittest.skip_if decorator added in Python 3.1.
+        (_skipped_method): Returns a function that just logs that the tests are
+        being skipped. This is used in place of the actual test_* functions.
+
+        * Scripts/webkitpy/test/skip_unittest.py: Added.
+        (SkipTest.setUp): Create a logger for ourselves and give it a handler
+        that logs to a private stream.
+        (SkipTest.tearDown): Reset the logger.
+        (SkipTest.create_fixture_class): Returns a class that we use to test
+        skip_if. It has a single test_* method, test_foo, that just calls
+        through to a callback.
+        (SkipTest.foo_callback): Record that test_foo was called.
+        (SkipTest.test_skip_if_false): Pass skip_if a False condition and test
+        that test_foo does get called.
+        (SkipTest.test_skip_if_true): Pass skip_if a True condition and test
+        that test_foo does not get called and the appropriate message gets
+        logged.
+
 2010-11-02  Adam Barth  <abarth at webkit.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
index 0f09ffa..2672508 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
@@ -49,6 +49,8 @@ from webkitpy.layout_tests import port
 from webkitpy.layout_tests import run_webkit_tests
 from webkitpy.layout_tests.layout_package import dump_render_tree_thread
 from webkitpy.layout_tests.port.test import TestPort
+from webkitpy.python24.versioning import compare_version
+from webkitpy.test.skip import skip_if
 
 from webkitpy.thirdparty.mock import Mock
 
@@ -287,6 +289,8 @@ class MainTest(unittest.TestCase):
         test_port = get_port_for_run(base_args)
         self.assertEqual(None, test_port.tolerance_used_for_diff_image)
 
+MainTest = skip_if(MainTest, sys.platform == 'cygwin' and compare_version(sys, '2.6')[0] < 0, 'new-run-webkit-tests tests hang on Cygwin Python 2.5.2')
+
 
 def _mocked_open(original_open, file_list):
     def _wrapper(name, mode, encoding):
diff --git a/WebKitTools/Scripts/webkitpy/test/skip.py b/WebKitTools/Scripts/webkitpy/test/skip.py
new file mode 100644
index 0000000..8587d56
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/test/skip.py
@@ -0,0 +1,52 @@
+# Copyright (C) 2010 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 logging
+
+_log = logging.getLogger(__name__)
+
+
+def skip_if(klass, condition, message=None, logger=None):
+    """Makes all test_* methods in a given class no-ops if the given condition
+    is False. Backported from Python 3.1+'s unittest.skipIf decorator."""
+    if not logger:
+        logger = _log
+    if not condition:
+        return klass
+    for name in dir(klass):
+        attr = getattr(klass, name)
+        if not callable(attr):
+            continue
+        if not name.startswith('test_'):
+            continue
+        setattr(klass, name, _skipped_method(attr, message, logger))
+    klass._printed_skipped_message = False
+    return klass
+
+
+def _skipped_method(method, message, logger):
+    def _skip(*args):
+        if method.im_class._printed_skipped_message:
+            return
+        method.im_class._printed_skipped_message = True
+        logger.info('Skipping %s.%s: %s' % (method.__module__, method.im_class.__name__, message))
+    return _skip
diff --git a/WebKitTools/Scripts/webkitpy/test/skip_unittest.py b/WebKitTools/Scripts/webkitpy/test/skip_unittest.py
new file mode 100644
index 0000000..f61a1bb
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/test/skip_unittest.py
@@ -0,0 +1,77 @@
+# Copyright (C) 2010 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 StringIO
+import logging
+import unittest
+
+from webkitpy.test.skip import skip_if
+
+
+class SkipTest(unittest.TestCase):
+    def setUp(self):
+        self.logger = logging.getLogger(__name__)
+
+        self.old_level = self.logger.level
+        self.logger.setLevel(logging.INFO)
+
+        self.old_propagate = self.logger.propagate
+        self.logger.propagate = False
+
+        self.log_stream = StringIO.StringIO()
+        self.handler = logging.StreamHandler(self.log_stream)
+        self.logger.addHandler(self.handler)
+
+        self.foo_was_called = False
+
+    def tearDown(self):
+        self.logger.removeHandler(self.handler)
+        self.propagate = self.old_propagate
+        self.logger.setLevel(self.old_level)
+
+    def create_fixture_class(self):
+        class TestSkipFixture(object):
+            def __init__(self, callback):
+                self.callback = callback
+
+            def test_foo(self):
+                self.callback()
+
+        return TestSkipFixture
+
+    def foo_callback(self):
+        self.foo_was_called = True
+
+    def test_skip_if_false(self):
+        klass = skip_if(self.create_fixture_class(), False, 'Should not see this message.', logger=self.logger)
+        klass(self.foo_callback).test_foo()
+        self.assertEqual(self.log_stream.getvalue(), '')
+        self.assertTrue(self.foo_was_called)
+
+    def test_skip_if_true(self):
+        klass = skip_if(self.create_fixture_class(), True, 'Should see this message.', logger=self.logger)
+        klass(self.foo_callback).test_foo()
+        self.assertEqual(self.log_stream.getvalue(), 'Skipping webkitpy.test.skip_unittest.TestSkipFixture: Should see this message.\n')
+        self.assertFalse(self.foo_was_called)
+
+if __name__ == '__main__':
+    unittest.main()

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list