Roll src/third_party/WebKit 640e652:eec14d5 (svn 200948:200949)
[chromium-blink-merge.git] / media / tools / layout_tests / layouttest_analyzer_helpers_unittest.py
blobab14d87aa97ca8390ad246dc597b4b5f271199c1
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.
6 import copy
7 from datetime import datetime
8 import os
9 import pickle
10 import time
11 import unittest
14 import layouttest_analyzer_helpers
17 class TestLayoutTestAnalyzerHelpers(unittest.TestCase):
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')
25 def testFindLatestTimeWithEmptyList(self):
26 time_list = []
27 self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
28 None)
30 def testFindLatestTimeWithNoValidStringInList(self):
31 time_list = ['.foo1', '232232']
32 self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
33 None)
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']
46 file_path = os.path.join('test_data', 'less')
47 analyzerResultMapBase.Save(file_path)
49 file_path = os.path.join('test_data', 'base')
50 analyzerResultMapBase = AnalyzerResultMap.Load(file_path)
52 analyzerResultMapBase.result_map['whole']['add1.html'] = True
53 analyzerResultMapBase.result_map['skip']['add2.html'] = True
55 file_path = os.path.join('test_data', 'more')
56 analyzerResultMapBase.Save(file_path)
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']
70 file_path = os.path.join('test_data', 'more_te_info')
71 analyzerResultMapBase.Save(file_path)
73 def testCompareResultMapsWholeAndSkip(self):
74 file_path = os.path.join('test_data', 'base')
75 analyzerResultMapBase = (
76 layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
78 file_path = os.path.join('test_data', 'less')
79 analyzerResultMapLess = (
80 layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
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')
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])
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()),
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': [[], []],
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)
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@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')
160 def testGetRevisionStringNoneDiffMap(self):
161 self.RunTestGetRevisionString('2011-09-02-00', '2011-09-01-00', '', '',
162 '', '', '', diff_map_none=True)
164 def testGetRevisionStringNoMatchingTest(self):
165 self.RunTestGetRevisionString('2011-09-01-00', '2011-09-02-00', '', '',
166 '', '', 'foo1.html')
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()
184 def testFindLatestResultWithNoData(self):
185 self.assertFalse(
186 layouttest_analyzer_helpers.FindLatestResult('test_data'))
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,
208 self.assertEquals(issues_txt, expected_issues_txt)
211 if __name__ == '__main__':
212 unittest.main()