Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Tools / Scripts / webkitpy / w3c / test_parser_unittest.py
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 reference 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 refsupport files for this test')
54         self.assertFalse('jstest' in test_info.keys(), 'test should not have been 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 reference 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 refsupport files for this test')
77         self.assertFalse('jstest' in test_info.keys(), 'test should not have been 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 reference 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 refsupport files for this test')
103         self.assertFalse('jstest' in test_info.keys(), 'test should not have been 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 support 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 enabled" /></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=ref_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 reference file')
133         self.assertTrue(test_info['reference'].startswith(test_path), 'reference path is not correct')
134         self.assertTrue('reference_support_info' in test_info.keys(), 'there should be reference_support_info for this test')
135         self.assertEquals(len(test_info['reference_support_info']['files']), 3, 'there should be 3 support files in this reference')
136         self.assertFalse('jstest' in test_info.keys(), 'test should not have been 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 refsupport 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 jstest 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 refsupport files for this test')
183         self.assertFalse('jstest' in test_info.keys(), 'test should not be a jstest')
184
185     def test_analyze_pixel_test_all_false(self):
186         """ Tests analyze_test() using a test that is neither a reftest or jstest, 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__), 'test_parser.py'))
214         test_info = parser.analyze_test()
215         self.assertEqual(test_info, None, 'no tests should have been found in this file')