blob: ab14d87aa97ca8390ad246dc597b4b5f271199c1 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import copy
from datetime import datetime
import os
import pickle
import time
import unittest
import layouttest_analyzer_helpers
class TestLayoutTestAnalyzerHelpers(unittest.TestCase):
def testFindLatestTime(self):
time_list = ['2011-08-18-19', '2011-08-18-22', '2011-08-18-21',
'2012-01-11-21', '.foo']
self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
'2012-01-11-21')
def testFindLatestTimeWithEmptyList(self):
time_list = []
self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
None)
def testFindLatestTimeWithNoValidStringInList(self):
time_list = ['.foo1', '232232']
self.assertEquals(layouttest_analyzer_helpers.FindLatestTime(time_list),
None)
def GenerateTestDataWholeAndSkip(self):
"""You should call this method if you want to generate test data."""
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
# Remove this first part
m = analyzerResultMapBase.result_map['whole']
del m['media/video-source-type.html']
m = analyzerResultMapBase.result_map['skip']
del m['media/track/track-webvtt-tc004-magicheader.html']
file_path = os.path.join('test_data', 'less')
analyzerResultMapBase.Save(file_path)
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = AnalyzerResultMap.Load(file_path)
analyzerResultMapBase.result_map['whole']['add1.html'] = True
analyzerResultMapBase.result_map['skip']['add2.html'] = True
file_path = os.path.join('test_data', 'more')
analyzerResultMapBase.Save(file_path)
def GenerateTestDataNonSkip(self):
"""You should call this method if you want to generate test data."""
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = AnalyzerResultMap.Load(file_path)
m = analyzerResultMapBase.result_map['nonskip']
ex = m['media/media-document-audio-repaint.html']
te_info_map1 = ex['te_info'][0]
te_info_map2 = copy.copy(te_info_map1)
te_info_map2['NEWADDED'] = True
ex['te_info'].append(te_info_map2)
m = analyzerResultMapBase.result_map['nonskip']
file_path = os.path.join('test_data', 'more_te_info')
analyzerResultMapBase.Save(file_path)
def testCompareResultMapsWholeAndSkip(self):
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
file_path = os.path.join('test_data', 'less')
analyzerResultMapLess = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
diff = analyzerResultMapBase.CompareToOtherResultMap(analyzerResultMapLess)
self.assertEquals(diff['skip'][0][0][0],
'media/track/track-webvtt-tc004-magicheader.html')
self.assertEquals(diff['whole'][0][0][0],
'media/video-source-type.html')
file_path = os.path.join('test_data', 'more')
analyzerResultMapMore = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
diff = analyzerResultMapBase.CompareToOtherResultMap(analyzerResultMapMore)
self.assertEquals(diff['whole'][1][0][0], 'add1.html')
self.assertEquals(diff['skip'][1][0][0], 'add2.html')
def testCompareResultMapsNonSkip(self):
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
file_path = os.path.join('test_data', 'more_te_info')
analyzerResultMapMoreTEInfo = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
m = analyzerResultMapBase.CompareToOtherResultMap(
analyzerResultMapMoreTEInfo)
self.assertTrue('NEWADDED' in m['nonskip'][1][0][1][0])
def testGetListOfBugsForNonSkippedTests(self):
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
self.assertEquals(
len(analyzerResultMapBase.GetListOfBugsForNonSkippedTests().keys()),
10)
def RunTestGetRevisionString(self, current_time_str, prev_time_str,
expected_rev_str, expected_simple_rev_str,
expected_rev_number, expected_rev_date,
testname, diff_map_none=False):
current_time = datetime.strptime(current_time_str, '%Y-%m-%d-%H')
current_time = time.mktime(current_time.timetuple())
prev_time = datetime.strptime(prev_time_str, '%Y-%m-%d-%H')
prev_time = time.mktime(prev_time.timetuple())
if diff_map_none:
diff_map = None
else:
diff_map = {
'whole': [[], []],
'skip': [[(testname, 'te_info1')], []],
'nonskip': [[], []],
}
(rev_str, simple_rev_str, rev_number, rev_date) = (
layouttest_analyzer_helpers.GetRevisionString(prev_time, current_time,
diff_map))
self.assertEquals(rev_str, expected_rev_str)
self.assertEquals(simple_rev_str, expected_simple_rev_str)
self.assertEquals(rev_number, expected_rev_number)
self.assertEquals(rev_date, expected_rev_date)
def testGetRevisionString(self):
expected_rev_str = ('<ul><a href="http://trac.webkit.org/changeset?'
'new=94377@trunk/LayoutTests/platform/chromium/'
'test_expectations.txt&old=94366@trunk/LayoutTests/'
'platform/chromium/test_expectations.txt">94366->'
'94377</a>\n'
'<li>jamesr@google.com</li>\n'
'<li>2011-09-01 18:00:23</li>\n'
'<ul><li>-<a href="http://webkit.org/b/63878">'
'BUGWK63878</a> : <a href="http://test-results.'
'appspot.com/dashboards/flakiness_dashboard.html#'
'tests=fast/dom/dom-constructors.html">fast/dom/'
'dom-constructors.html</a> = TEXT</li>\n</ul></ul>')
expected_simple_rev_str = ('<a href="http://trac.webkit.org/changeset?'
'new=94377@trunk/LayoutTests/platform/chromium/'
'test_expectations.txt&old=94366@trunk/'
'LayoutTests/platform/chromium/'
'test_expectations.txt">94366->94377</a>,')
self.RunTestGetRevisionString('2011-09-02-00', '2011-09-01-00',
expected_rev_str, expected_simple_rev_str,
94377, '2011-09-01 18:00:23',
'fast/dom/dom-constructors.html')
def testGetRevisionStringNoneDiffMap(self):
self.RunTestGetRevisionString('2011-09-02-00', '2011-09-01-00', '', '',
'', '', '', diff_map_none=True)
def testGetRevisionStringNoMatchingTest(self):
self.RunTestGetRevisionString('2011-09-01-00', '2011-09-02-00', '', '',
'', '', 'foo1.html')
def testReplaceLineInFile(self):
file_path = os.path.join('test_data', 'inplace.txt')
f = open(file_path, 'w')
f.write('Hello')
f.close()
layouttest_analyzer_helpers.ReplaceLineInFile(
file_path, 'Hello', 'Goodbye')
f = open(file_path, 'r')
self.assertEquals(f.readline(), 'Goodbye')
f.close()
layouttest_analyzer_helpers.ReplaceLineInFile(
file_path, 'Bye', 'Hello')
f = open(file_path, 'r')
self.assertEquals(f.readline(), 'Goodbye')
f.close()
def testFindLatestResultWithNoData(self):
self.assertFalse(
layouttest_analyzer_helpers.FindLatestResult('test_data'))
def testConvertToCSVText(self):
file_path = os.path.join('test_data', 'base')
analyzerResultMapBase = (
layouttest_analyzer_helpers.AnalyzerResultMap.Load(file_path))
data, issues_txt = analyzerResultMapBase.ConvertToCSVText('11-10-10-2011')
self.assertEquals(data, '11-10-10-2011,204,36,10,95')
expected_issues_txt = """\
BUGWK,66310,TEXT PASS,media/media-blocked-by-beforeload.html,DEBUG TEXT PASS,\
media/video-source-error.html,
BUGCR,86714,GPU IMAGE CRASH MAC,media/video-zoom.html,GPU IMAGE CRASH MAC,\
media/video-controls-rendering.html,
BUGCR,74102,GPU IMAGE PASS LINUX,media/video-controls-rendering.html,
BUGWK,55718,TEXT IMAGE IMAGE+TEXT,media/media-document-audio-repaint.html,
BUGCR,78376,TIMEOUT,http/tests/media/video-play-stall-seek.html,
BUGCR,59415,WIN TEXT TIMEOUT PASS,media/video-loop.html,
BUGCR,72223,IMAGE PASS,media/video-frame-accurate-seek.html,
BUGCR,75354,TEXT IMAGE IMAGE+TEXT,media/media-document-audio-repaint.html,
BUGCR,73609,TEXT,http/tests/media/video-play-stall.html,
BUGWK,64003,DEBUG TEXT MAC PASS,media/video-delay-load-event.html,
"""
self.assertEquals(issues_txt, expected_issues_txt)
if __name__ == '__main__':
unittest.main()