Title: [94160] trunk/Tools
Revision
94160
Author
[email protected]
Date
2011-08-31 01:18:58 -0700 (Wed, 31 Aug 2011)

Log Message

Extract reference links from reftest test file.
https://bugs.webkit.org/show_bug.cgi?id=66838

Patch by Ai Makabi <[email protected]> on 2011-08-31
Reviewed by Shinichiro Hamaji.

* Scripts/webkitpy/layout_tests/reftests/__init__.py: Added.
* Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py: Added.
* Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (94159 => 94160)


--- trunk/Tools/ChangeLog	2011-08-31 08:11:46 UTC (rev 94159)
+++ trunk/Tools/ChangeLog	2011-08-31 08:18:58 UTC (rev 94160)
@@ -1,3 +1,14 @@
+2011-08-31  Ai Makabi  <[email protected]>
+
+        Extract reference links from reftest test file.
+        https://bugs.webkit.org/show_bug.cgi?id=66838
+
+        Reviewed by Shinichiro Hamaji.
+
+        * Scripts/webkitpy/layout_tests/reftests/__init__.py: Added.
+        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py: Added.
+        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py: Added.
+
 2011-08-03  Philippe Normand  <[email protected]>
 
         [webkitpy] missing log import in common/net/resultsjsonparser.py

Added: trunk/Tools/Scripts/webkitpy/layout_tests/reftests/__init__.py (0 => 94160)


--- trunk/Tools/Scripts/webkitpy/layout_tests/reftests/__init__.py	                        (rev 0)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/reftests/__init__.py	2011-08-31 08:18:58 UTC (rev 94160)
@@ -0,0 +1 @@
+# Required for Python to search this directory for module files

Added: trunk/Tools/Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py (0 => 94160)


--- trunk/Tools/Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py	                        (rev 0)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py	2011-08-31 08:18:58 UTC (rev 94160)
@@ -0,0 +1,63 @@
+# Copyright (C) 2011 Google 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:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+# OWNER OR 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.
+
+"""Utility module for reftests."""
+
+
+from HTMLParser import HTMLParser
+
+
+class ExtractReferenceLinkParser(HTMLParser):
+
+    def __init__(self):
+        HTMLParser.__init__(self)
+        self.matches = []
+        self.mismatches = []
+
+    def handle_starttag(self, tag, attrs):
+        if tag != "link":
+            return
+        attrs = dict(attrs)
+        if not "rel" in attrs:
+            return
+        if not "href" in attrs:
+            return
+        if attrs["rel"] == "match":
+            self.matches.append(attrs["href"])
+        if attrs["rel"] == "mismatch":
+            self.mismatches.append(attrs["href"])
+
+
+def get_reference_link(html_string):
+    """Returns reference links in the given html_string.
+
+    Returns:
+        a tuple of two URL lists, (matches, mismatches).
+    """
+    parser = ExtractReferenceLinkParser()
+    parser.feed(html_string)
+    parser.close()
+
+    return parser.matches, parser.mismatches

Added: trunk/Tools/Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py (0 => 94160)


--- trunk/Tools/Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py	                        (rev 0)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py	2011-08-31 08:18:58 UTC (rev 94160)
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+# Copyright (C) 2011 Google 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:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+# OWNER OR 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 unittest
+
+from webkitpy.layout_tests.reftests import extract_reference_link
+
+
+class ExtractLinkMatchTest(unittest.TestCase):
+
+    def test_getExtractMatch(self):
+        html_1 = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>CSS Test: DESCRIPTION OF TEST</title>
+<link rel="author" title="NAME_OF_AUTHOR"
+href="" OR http://CONTACT_PAGE"/>
+<link rel="help" href=""
+<link rel="match" href="" />
+<link rel="match" href="" />
+<link rel="mismatch" href="" />
+<link rel="mismatch" href="" />
+<meta name="flags" content="TOKENS" />
+<meta name="assert" content="TEST ASSERTION"/>
+<style type="text/css"><![CDATA[
+CSS FOR TEST
+]]></style>
+</head>
+<body>
+CONTENT OF TEST
+</body>
+</html>
+"""
+        matches, mismatches = extract_reference_link.get_reference_link(html_1)
+        self.assertEqual(matches,
+                         ["green-box-ref.xht", "blue-box-ref.xht"])
+        self.assertEqual(mismatches,
+                         ["red-box-notref.xht", "red-box-notref.xht"])
+
+        html_2 = ""
+        empty_tuple_1 = extract_reference_link.get_reference_link(html_2)
+        self.assertEqual(empty_tuple_1, ([], []))
+
+        # Link does not have a "ref" attribute.
+        html_3 = """<link href=""
+        empty_tuple_2 = extract_reference_link.get_reference_link(html_3)
+        self.assertEqual(empty_tuple_2, ([], []))
+
+        # Link does not have a "href" attribute.
+        html_4 = """<link rel="match"/>"""
+        empty_tuple_3 = extract_reference_link.get_reference_link(html_4)
+        self.assertEqual(empty_tuple_3, ([], []))
+
+        # Link does not have a "/" at the end.
+        html_5 = """<link rel="help" href=""
+        empty_tuple_4 = extract_reference_link.get_reference_link(html_5)
+        self.assertEqual(empty_tuple_4, ([], []))
+
+
+if __name__ == "__main__":
+    unittest.main()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to