| OLD | NEW |
| (Empty) |
| 1 # Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | |
| 2 # | |
| 3 # Redistribution and use in source and binary forms, with or without | |
| 4 # modification, are permitted provided that the following conditions | |
| 5 # are met: | |
| 6 # | |
| 7 # 1. Redistributions of source code must retain the above | |
| 8 # copyright notice, this list of conditions and the following | |
| 9 # disclaimer. | |
| 10 # 2. Redistributions in binary form must reproduce the above | |
| 11 # copyright notice, this list of conditions and the following | |
| 12 # disclaimer in the documentation and/or other materials | |
| 13 # provided with the distribution. | |
| 14 # | |
| 15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY | |
| 16 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
| 18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE | |
| 19 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, | |
| 20 # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |
| 21 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| 22 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
| 23 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR | |
| 24 # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF | |
| 25 # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 26 # SUCH DAMAGE. | |
| 27 | |
| 28 import os | |
| 29 import unittest | |
| 30 | |
| 31 from webkitpy.common.system.outputcapture import OutputCapture | |
| 32 from webkitpy.w3c.test_parser import TestParser | |
| 33 | |
| 34 | |
| 35 options = {'all': False, 'no_overwrite': False} | |
| 36 | |
| 37 | |
| 38 class TestParserTest(unittest.TestCase): | |
| 39 | |
| 40 def test_analyze_test_reftest_one_match(self): | |
| 41 test_html = """<head> | |
| 42 <link rel="match" href="green-box-ref.xht" /> | |
| 43 </head> | |
| 44 """ | |
| 45 test_path = '/some/madeup/path/' | |
| 46 parser = TestParser(options, test_path + 'somefile.html') | |
| 47 test_info = parser.analyze_test(test_contents=test_html) | |
| 48 | |
| 49 self.assertNotEqual(test_info, None, 'did not find a test') | |
| 50 self.assertTrue('test' in test_info.keys(), 'did not find a test file') | |
| 51 self.assertTrue('reference' in test_info.keys(), 'did not find a referen
ce file') | |
| 52 self.assertTrue(test_info['reference'].startswith(test_path), 'reference
path is not correct') | |
| 53 self.assertFalse('refsupport' in test_info.keys(), 'there should be no r
efsupport files for this test') | |
| 54 self.assertFalse('jstest' in test_info.keys(), 'test should not have bee
n analyzed as a jstest') | |
| 55 | |
| 56 def test_analyze_test_reftest_multiple_matches(self): | |
| 57 test_html = """<head> | |
| 58 <link rel="match" href="green-box-ref.xht" /> | |
| 59 <link rel="match" href="blue-box-ref.xht" /> | |
| 60 <link rel="match" href="orange-box-ref.xht" /> | |
| 61 </head> | |
| 62 """ | |
| 63 oc = OutputCapture() | |
| 64 oc.capture_output() | |
| 65 try: | |
| 66 test_path = '/some/madeup/path/' | |
| 67 parser = TestParser(options, test_path + 'somefile.html') | |
| 68 test_info = parser.analyze_test(test_contents=test_html) | |
| 69 finally: | |
| 70 _, _, logs = oc.restore_output() | |
| 71 | |
| 72 self.assertNotEqual(test_info, None, 'did not find a test') | |
| 73 self.assertTrue('test' in test_info.keys(), 'did not find a test file') | |
| 74 self.assertTrue('reference' in test_info.keys(), 'did not find a referen
ce file') | |
| 75 self.assertTrue(test_info['reference'].startswith(test_path), 'reference
path is not correct') | |
| 76 self.assertFalse('refsupport' in test_info.keys(), 'there should be no r
efsupport files for this test') | |
| 77 self.assertFalse('jstest' in test_info.keys(), 'test should not have bee
n analyzed as a jstest') | |
| 78 | |
| 79 self.assertEqual(logs, 'Multiple references are not supported. Importing
the first ref defined in somefile.html\n') | |
| 80 | |
| 81 def test_analyze_test_reftest_match_and_mismatch(self): | |
| 82 test_html = """<head> | |
| 83 <link rel="match" href="green-box-ref.xht" /> | |
| 84 <link rel="match" href="blue-box-ref.xht" /> | |
| 85 <link rel="mismatch" href="orange-box-notref.xht" /> | |
| 86 </head> | |
| 87 """ | |
| 88 oc = OutputCapture() | |
| 89 oc.capture_output() | |
| 90 | |
| 91 try: | |
| 92 test_path = '/some/madeup/path/' | |
| 93 parser = TestParser(options, test_path + 'somefile.html') | |
| 94 test_info = parser.analyze_test(test_contents=test_html) | |
| 95 finally: | |
| 96 _, _, logs = oc.restore_output() | |
| 97 | |
| 98 self.assertNotEqual(test_info, None, 'did not find a test') | |
| 99 self.assertTrue('test' in test_info.keys(), 'did not find a test file') | |
| 100 self.assertTrue('reference' in test_info.keys(), 'did not find a referen
ce file') | |
| 101 self.assertTrue(test_info['reference'].startswith(test_path), 'reference
path is not correct') | |
| 102 self.assertFalse('refsupport' in test_info.keys(), 'there should be no r
efsupport files for this test') | |
| 103 self.assertFalse('jstest' in test_info.keys(), 'test should not have bee
n analyzed as a jstest') | |
| 104 | |
| 105 self.assertEqual(logs, 'Multiple references are not supported. Importing
the first ref defined in somefile.html\n') | |
| 106 | |
| 107 def test_analyze_test_reftest_with_ref_support_Files(self): | |
| 108 """ Tests analyze_test() using a reftest that has refers to a reference
file outside of the tests directory and the reference file has paths to other su
pport files """ | |
| 109 | |
| 110 test_html = """<html> | |
| 111 <head> | |
| 112 <link rel="match" href="../reference/green-box-ref.xht" /> | |
| 113 </head> | |
| 114 """ | |
| 115 ref_html = """<head> | |
| 116 <link href="support/css/ref-stylesheet.css" rel="stylesheet" type="text/css"> | |
| 117 <style type="text/css"> | |
| 118 background-image: url("../../support/some-image.png") | |
| 119 </style> | |
| 120 </head> | |
| 121 <body> | |
| 122 <div><img src="../support/black96x96.png" alt="Image download support must be en
abled" /></div> | |
| 123 </body> | |
| 124 </html> | |
| 125 """ | |
| 126 test_path = '/some/madeup/path/' | |
| 127 parser = TestParser(options, test_path + 'somefile.html') | |
| 128 test_info = parser.analyze_test(test_contents=test_html, ref_contents=re
f_html) | |
| 129 | |
| 130 self.assertNotEqual(test_info, None, 'did not find a test') | |
| 131 self.assertTrue('test' in test_info.keys(), 'did not find a test file') | |
| 132 self.assertTrue('reference' in test_info.keys(), 'did not find a referen
ce file') | |
| 133 self.assertTrue(test_info['reference'].startswith(test_path), 'reference
path is not correct') | |
| 134 self.assertTrue('refsupport' in test_info.keys(), 'there should be refsu
pport files for this test') | |
| 135 self.assertEquals(len(test_info['refsupport']), 3, 'there should be 3 su
pport files in this reference') | |
| 136 self.assertFalse('jstest' in test_info.keys(), 'test should not have bee
n analyzed as a jstest') | |
| 137 | |
| 138 def test_analyze_jstest(self): | |
| 139 """ Tests analyze_test() using a jstest """ | |
| 140 | |
| 141 test_html = """<head> | |
| 142 <link href="/resources/testharness.css" rel="stylesheet" type="text/css"> | |
| 143 <script src="/resources/testharness.js"></script> | |
| 144 </head> | |
| 145 """ | |
| 146 test_path = '/some/madeup/path/' | |
| 147 parser = TestParser(options, test_path + 'somefile.html') | |
| 148 test_info = parser.analyze_test(test_contents=test_html) | |
| 149 | |
| 150 self.assertNotEqual(test_info, None, 'test_info is None') | |
| 151 self.assertTrue('test' in test_info.keys(), 'did not find a test file') | |
| 152 self.assertFalse('reference' in test_info.keys(), 'shold not have found
a reference file') | |
| 153 self.assertFalse('refsupport' in test_info.keys(), 'there should be no r
efsupport files for this test') | |
| 154 self.assertTrue('jstest' in test_info.keys(), 'test should be a jstest') | |
| 155 | |
| 156 def test_analyze_pixel_test_all_true(self): | |
| 157 """ Tests analyze_test() using a test that is neither a reftest or jstes
t with all=False """ | |
| 158 | |
| 159 test_html = """<html> | |
| 160 <head> | |
| 161 <title>CSS Test: DESCRIPTION OF TEST</title> | |
| 162 <link rel="author" title="NAME_OF_AUTHOR" /> | |
| 163 <style type="text/css"><![CDATA[ | |
| 164 CSS FOR TEST | |
| 165 ]]></style> | |
| 166 </head> | |
| 167 <body> | |
| 168 CONTENT OF TEST | |
| 169 </body> | |
| 170 </html> | |
| 171 """ | |
| 172 # Set options to 'all' so this gets found | |
| 173 options['all'] = True | |
| 174 | |
| 175 test_path = '/some/madeup/path/' | |
| 176 parser = TestParser(options, test_path + 'somefile.html') | |
| 177 test_info = parser.analyze_test(test_contents=test_html) | |
| 178 | |
| 179 self.assertNotEqual(test_info, None, 'test_info is None') | |
| 180 self.assertTrue('test' in test_info.keys(), 'did not find a test file') | |
| 181 self.assertFalse('reference' in test_info.keys(), 'shold not have found
a reference file') | |
| 182 self.assertFalse('refsupport' in test_info.keys(), 'there should be no r
efsupport files for this test') | |
| 183 self.assertFalse('jstest' in test_info.keys(), 'test should not be a jst
est') | |
| 184 | |
| 185 def test_analyze_pixel_test_all_false(self): | |
| 186 """ Tests analyze_test() using a test that is neither a reftest or jstes
t, with -all=False """ | |
| 187 | |
| 188 test_html = """<html> | |
| 189 <head> | |
| 190 <title>CSS Test: DESCRIPTION OF TEST</title> | |
| 191 <link rel="author" title="NAME_OF_AUTHOR" /> | |
| 192 <style type="text/css"><![CDATA[ | |
| 193 CSS FOR TEST | |
| 194 ]]></style> | |
| 195 </head> | |
| 196 <body> | |
| 197 CONTENT OF TEST | |
| 198 </body> | |
| 199 </html> | |
| 200 """ | |
| 201 # Set all to false so this gets skipped | |
| 202 options['all'] = False | |
| 203 | |
| 204 test_path = '/some/madeup/path/' | |
| 205 parser = TestParser(options, test_path + 'somefile.html') | |
| 206 test_info = parser.analyze_test(test_contents=test_html) | |
| 207 | |
| 208 self.assertEqual(test_info, None, 'test should have been skipped') | |
| 209 | |
| 210 def test_analyze_non_html_file(self): | |
| 211 """ Tests analyze_test() with a file that has no html""" | |
| 212 # FIXME: use a mock filesystem | |
| 213 parser = TestParser(options, os.path.join(os.path.dirname(__file__), 'te
st_parser.py')) | |
| 214 test_info = parser.analyze_test() | |
| 215 self.assertEqual(test_info, None, 'no tests should have been found in th
is file') | |
| OLD | NEW |