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()