Home | History | Annotate | Download | only in layout_tests
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import copy
      7 from datetime import datetime
      8 import os
      9 import pickle
     10 import time
     11 import unittest
     12 
     13 
     14 import layouttest_analyzer_helpers
     15 
     16 
     17 class TestLayoutTestAnalyzerHelpers(unittest.TestCase):
     18 
     19   def testFindLatestTime(self):
     20     time_list = ['2011-08-18-19', '2011-08-18-22', '2011-08-18-21',
     21                  '2012-01-11-21', '.foo']
     22     self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
     23                       '2012-01-11-21')
     24 
     25   def testFindLatestTimeWithEmptyList(self):
     26     time_list = []
     27     self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
     28                       None)
     29 
     30   def testFindLatestTimeWithNoValidStringInList(self):
     31     time_list = ['.foo1', '232232']
     32     self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
     33                       None)
     34 
     35   def GenerateTestDataWholeAndSkip(self):
     36     """You should call this method if you want to generate test data."""
     37     file_path = os.path.join('test_data', 'base')
     38     analyzerResultMapBase = (
     39         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
     40     # Remove this first part
     41     m = analyzerResultMapBase.result_map['whole']
     42     del m['media/video-source-type.html']
     43     m = analyzerResultMapBase.result_map['skip']
     44     del m['media/track/track-webvtt-tc004-magicheader.html']
     45 
     46     file_path = os.path.join('test_data', 'less')
     47     analyzerResultMapBase.Save(file_path)
     48 
     49     file_path = os.path.join('test_data', 'base')
     50     analyzerResultMapBase = AnalyzerResultMap.Load(file_path)
     51 
     52     analyzerResultMapBase.result_map['whole']['add1.html'] = True
     53     analyzerResultMapBase.result_map['skip']['add2.html'] = True
     54 
     55     file_path = os.path.join('test_data', 'more')
     56     analyzerResultMapBase.Save(file_path)
     57 
     58   def GenerateTestDataNonSkip(self):
     59     """You should call this method if you want to generate test data."""
     60     file_path = os.path.join('test_data', 'base')
     61     analyzerResultMapBase = AnalyzerResultMap.Load(file_path)
     62     m = analyzerResultMapBase.result_map['nonskip']
     63     ex = m['media/media-document-audio-repaint.html']
     64     te_info_map1 = ex['te_info'][0]
     65     te_info_map2 = copy.copy(te_info_map1)
     66     te_info_map2['NEWADDED'] = True
     67     ex['te_info'].append(te_info_map2)
     68     m = analyzerResultMapBase.result_map['nonskip']
     69 
     70     file_path = os.path.join('test_data', 'more_te_info')
     71     analyzerResultMapBase.Save(file_path)
     72 
     73   def testCompareResultMapsWholeAndSkip(self):
     74     file_path = os.path.join('test_data', 'base')
     75     analyzerResultMapBase = (
     76         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
     77 
     78     file_path = os.path.join('test_data', 'less')
     79     analyzerResultMapLess = (
     80         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
     81 
     82     diff = analyzerResultMapBase.CompareToOtherResultMap(analyzerResultMapLess)
     83     self.assertEquals(diff['skip'][0][0][0],
     84                       'media/track/track-webvtt-tc004-magicheader.html')
     85     self.assertEquals(diff['whole'][0][0][0],
     86                       'media/video-source-type.html')
     87     file_path = os.path.join('test_data', 'more')
     88     analyzerResultMapMore = (
     89         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
     90     diff = analyzerResultMapBase.CompareToOtherResultMap(analyzerResultMapMore)
     91     self.assertEquals(diff['whole'][1][0][0], 'add1.html')
     92     self.assertEquals(diff['skip'][1][0][0], 'add2.html')
     93 
     94   def testCompareResultMapsNonSkip(self):
     95     file_path = os.path.join('test_data', 'base')
     96     analyzerResultMapBase = (
     97         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
     98     file_path = os.path.join('test_data', 'more_te_info')
     99     analyzerResultMapMoreTEInfo = (
    100         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
    101     m = analyzerResultMapBase.CompareToOtherResultMap(
    102         analyzerResultMapMoreTEInfo)
    103     self.assertTrue('NEWADDED' in m['nonskip'][1][0][1][0])
    104 
    105   def testGetListOfBugsForNonSkippedTests(self):
    106     file_path = os.path.join('test_data', 'base')
    107     analyzerResultMapBase = (
    108         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
    109     self.assertEquals(
    110         len(analyzerResultMapBase.GetListOfBugsForNonSkippedTests().keys()),
    111         10)
    112 
    113   def RunTestGetRevisionString(self, current_time_str, prev_time_str,
    114                                expected_rev_str, expected_simple_rev_str,
    115                                expected_rev_number, expected_rev_date,
    116                                testname, diff_map_none=False):
    117     current_time = datetime.strptime(current_time_str, '%Y-%m-%d-%H')
    118     current_time = time.mktime(current_time.timetuple())
    119     prev_time = datetime.strptime(prev_time_str, '%Y-%m-%d-%H')
    120     prev_time = time.mktime(prev_time.timetuple())
    121     if diff_map_none:
    122       diff_map = None
    123     else:
    124       diff_map = {
    125           'whole': [[], []],
    126           'skip': [[(testname, 'te_info1')], []],
    127           'nonskip': [[], []],
    128       }
    129     (rev_str, simple_rev_str, rev_number, rev_date) = (
    130         layouttest_analyzer_helpers.GetRevisionString(prev_time, current_time,
    131                                                       diff_map))
    132     self.assertEquals(rev_str, expected_rev_str)
    133     self.assertEquals(simple_rev_str, expected_simple_rev_str)
    134     self.assertEquals(rev_number, expected_rev_number)
    135     self.assertEquals(rev_date, expected_rev_date)
    136 
    137   def testGetRevisionString(self):
    138     expected_rev_str = ('<ul><a href="http://trac.webkit.org/changeset?'
    139                         'new=94377@trunk/LayoutTests/platform/chromium/'
    140                         'test_expectations.txt&old=94366@trunk/LayoutTests/'
    141                         'platform/chromium/test_expectations.txt">94366->'
    142                         '94377</a>\n'
    143                         '<li>jamesr (at] google.com</li>\n'
    144                         '<li>2011-09-01 18:00:23</li>\n'
    145                         '<ul><li>-<a href="http://webkit.org/b/63878">'
    146                         'BUGWK63878</a> : <a href="http://test-results.'
    147                         'appspot.com/dashboards/flakiness_dashboard.html#'
    148                         'tests=fast/dom/dom-constructors.html">fast/dom/'
    149                         'dom-constructors.html</a> = TEXT</li>\n</ul></ul>')
    150     expected_simple_rev_str = ('<a href="http://trac.webkit.org/changeset?'
    151                                'new=94377@trunk/LayoutTests/platform/chromium/'
    152                                'test_expectations.txt&old=94366@trunk/'
    153                                'LayoutTests/platform/chromium/'
    154                                'test_expectations.txt">94366->94377</a>,')
    155     self.RunTestGetRevisionString('2011-09-02-00', '2011-09-01-00',
    156                                   expected_rev_str, expected_simple_rev_str,
    157                                   94377, '2011-09-01 18:00:23',
    158                                   'fast/dom/dom-constructors.html')
    159 
    160   def testGetRevisionStringNoneDiffMap(self):
    161     self.RunTestGetRevisionString('2011-09-02-00', '2011-09-01-00', '', '',
    162                                   '', '', '', diff_map_none=True)
    163 
    164   def testGetRevisionStringNoMatchingTest(self):
    165     self.RunTestGetRevisionString('2011-09-01-00', '2011-09-02-00', '', '',
    166                                   '', '', 'foo1.html')
    167 
    168   def testReplaceLineInFile(self):
    169     file_path = os.path.join('test_data', 'inplace.txt')
    170     f = open(file_path, 'w')
    171     f.write('Hello')
    172     f.close()
    173     layouttest_analyzer_helpers.ReplaceLineInFile(
    174         file_path, 'Hello', 'Goodbye')
    175     f = open(file_path, 'r')
    176     self.assertEquals(f.readline(), 'Goodbye')
    177     f.close()
    178     layouttest_analyzer_helpers.ReplaceLineInFile(
    179         file_path, 'Bye', 'Hello')
    180     f = open(file_path, 'r')
    181     self.assertEquals(f.readline(), 'Goodbye')
    182     f.close()
    183 
    184   def testFindLatestResultWithNoData(self):
    185     self.assertFalse(
    186         layouttest_analyzer_helpers.FindLatestResult('test_data'))
    187 
    188   def testConvertToCSVText(self):
    189     file_path = os.path.join('test_data', 'base')
    190     analyzerResultMapBase = (
    191         layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
    192     data, issues_txt = analyzerResultMapBase.ConvertToCSVText('11-10-10-2011')
    193     self.assertEquals(data, '11-10-10-2011,204,36,10,95')
    194     expected_issues_txt = """\
    195 BUGWK,66310,TEXT PASS,media/media-blocked-by-beforeload.html,DEBUG TEXT PASS,\
    196 media/video-source-error.html,
    197 BUGCR,86714,GPU IMAGE CRASH MAC,media/video-zoom.html,GPU IMAGE CRASH MAC,\
    198 media/video-controls-rendering.html,
    199 BUGCR,74102,GPU IMAGE PASS LINUX,media/video-controls-rendering.html,
    200 BUGWK,55718,TEXT IMAGE IMAGE+TEXT,media/media-document-audio-repaint.html,
    201 BUGCR,78376,TIMEOUT,http/tests/media/video-play-stall-seek.html,
    202 BUGCR,59415,WIN TEXT TIMEOUT PASS,media/video-loop.html,
    203 BUGCR,72223,IMAGE PASS,media/video-frame-accurate-seek.html,
    204 BUGCR,75354,TEXT IMAGE IMAGE+TEXT,media/media-document-audio-repaint.html,
    205 BUGCR,73609,TEXT,http/tests/media/video-play-stall.html,
    206 BUGWK,64003,DEBUG TEXT MAC PASS,media/video-delay-load-event.html,
    207 """
    208     self.assertEquals(issues_txt, expected_issues_txt)
    209 
    210 
    211 if __name__ == '__main__':
    212   unittest.main()
    213