Home | History | Annotate | Download | only in w3c
      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('refsupport' in test_info.keys(), 'there should be refsupport files for this test')
    135         self.assertEquals(len(test_info['refsupport']), 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')
    216