Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(694)

Side by Side Diff: webkit/tools/layout_tests/layout_package/test_failures.py

Issue 346018: 1. Show crash stacks in run_webkit_tests.py stdio... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Classes for failures that occur during tests.""" 5 """Classes for failures that occur during tests."""
6 6
7 import os
8
7 class FailureSort(object): 9 class FailureSort(object):
8 """A repository for failure sort orders and tool to facilitate sorting.""" 10 """A repository for failure sort orders and tool to facilitate sorting."""
9 11
10 # Each failure class should have an entry in this dictionary. Sort order 1 12 # Each failure class should have an entry in this dictionary. Sort order 1
11 # will be sorted first in the list. Failures with the same numeric sort 13 # will be sorted first in the list. Failures with the same numeric sort
12 # order will be sorted alphabetically by Message(). 14 # order will be sorted alphabetically by Message().
13 SORT_ORDERS = { 15 SORT_ORDERS = {
14 'FailureTextMismatch': 1, 16 'FailureTextMismatch': 1,
15 'FailureImageHashMismatch': 2, 17 'FailureImageHashMismatch': 2,
16 'FailureTimeout': 3, 18 'FailureTimeout': 3,
(...skipping 19 matching lines...) Expand all
36 raise NotImplemented 38 raise NotImplemented
37 39
38 def ResultHtmlOutput(self, filename): 40 def ResultHtmlOutput(self, filename):
39 """Returns an HTML string to be included on the results.html page.""" 41 """Returns an HTML string to be included on the results.html page."""
40 raise NotImplemented 42 raise NotImplemented
41 43
42 def ShouldKillTestShell(self): 44 def ShouldKillTestShell(self):
43 """Returns True if we should kill the test shell before the next test.""" 45 """Returns True if we should kill the test shell before the next test."""
44 return False 46 return False
45 47
48 def RelativeOutputFilename(self, filename, modifier):
49 """Returns a relative filename inside the output dir that contains
50 modifier.
51
52 For example, if filename is fast\dom\foo.html and modifier is
53 "-expected.txt", the return value is fast\dom\foo-expected.txt
54
55 Args:
56 filename: relative filename to test file
57 modifier: a string to replace the extension of filename with
58
59 Return:
60 The relative windows path to the output filename
61 """
62 return os.path.splitext(filename)[0] + modifier
46 63
47 class FailureWithType(TestFailure): 64 class FailureWithType(TestFailure):
48 """Base class that produces standard HTML output based on the test type. 65 """Base class that produces standard HTML output based on the test type.
49 66
50 Subclasses may commonly choose to override the ResultHtmlOutput, but still 67 Subclasses may commonly choose to override the ResultHtmlOutput, but still
51 use the standard OutputLinks. 68 use the standard OutputLinks.
52 """ 69 """
53 def __init__(self, test_type): 70 def __init__(self, test_type):
54 TestFailure.__init__(self) 71 TestFailure.__init__(self)
72 # TODO(ojan): This class no longer needs to know the test_type.
55 self._test_type = test_type 73 self._test_type = test_type
56 74
57 # Filename suffixes used by ResultHtmlOutput. 75 # Filename suffixes used by ResultHtmlOutput.
58 OUT_FILENAMES = [] 76 OUT_FILENAMES = []
59 77
60 def OutputLinks(self, filename, out_names): 78 def OutputLinks(self, filename, out_names):
61 """Returns a string holding all applicable output file links. 79 """Returns a string holding all applicable output file links.
62 80
63 Args: 81 Args:
64 filename: the test filename, used to construct the result file names 82 filename: the test filename, used to construct the result file names
65 out_names: list of filename suffixes for the files. If three or more 83 out_names: list of filename suffixes for the files. If three or more
66 suffixes are in the list, they should be [actual, expected, diff, 84 suffixes are in the list, they should be [actual, expected, diff,
67 wdiff]. 85 wdiff].
68 Two suffixes should be [actual, expected], and a single item is the 86 Two suffixes should be [actual, expected], and a single item is the
69 [actual] filename suffix. If out_names is empty, returns the empty 87 [actual] filename suffix. If out_names is empty, returns the empty
70 string. 88 string.
71 """ 89 """
72 links = [''] 90 links = ['']
73 uris = [self._test_type.RelativeOutputFilename(filename, fn) 91 uris = [self.RelativeOutputFilename(filename, fn) for fn in out_names]
74 for fn in out_names]
75 if len(uris) > 1: 92 if len(uris) > 1:
76 links.append("<a href='%s'>expected</a>" % uris[1]) 93 links.append("<a href='%s'>expected</a>" % uris[1])
77 if len(uris) > 0: 94 if len(uris) > 0:
78 links.append("<a href='%s'>actual</a>" % uris[0]) 95 links.append("<a href='%s'>actual</a>" % uris[0])
79 if len(uris) > 2: 96 if len(uris) > 2:
80 links.append("<a href='%s'>diff</a>" % uris[2]) 97 links.append("<a href='%s'>diff</a>" % uris[2])
81 if len(uris) > 3: 98 if len(uris) > 3:
82 links.append("<a href='%s'>wdiff</a>" % uris[3]) 99 links.append("<a href='%s'>wdiff</a>" % uris[3])
83 return ' '.join(links) 100 return ' '.join(links)
84 101
(...skipping 16 matching lines...) Expand all
101 118
102 119
103 class FailureCrash(TestFailure): 120 class FailureCrash(TestFailure):
104 """Test shell crashed.""" 121 """Test shell crashed."""
105 @staticmethod 122 @staticmethod
106 def Message(): 123 def Message():
107 return "Test shell crashed" 124 return "Test shell crashed"
108 125
109 def ResultHtmlOutput(self, filename): 126 def ResultHtmlOutput(self, filename):
110 # TODO(tc): create a link to the minidump file 127 # TODO(tc): create a link to the minidump file
111 return "<strong>%s</strong>" % self.Message() 128 stack = self.RelativeOutputFilename(filename, "-stack.txt")
129 return "<strong>%s</strong> <a href=%s>stack</a>" % (self.Message(), stack)
112 130
113 def ShouldKillTestShell(self): 131 def ShouldKillTestShell(self):
114 return True 132 return True
115 133
116 134
117 class FailureMissingResult(FailureWithType): 135 class FailureMissingResult(FailureWithType):
118 """Expected result was missing.""" 136 """Expected result was missing."""
119 OUT_FILENAMES = ["-actual.txt"] 137 OUT_FILENAMES = ["-actual.txt"]
120 138
121 @staticmethod 139 @staticmethod
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 # Chrome doesn't know to display a .checksum file as text, so don't bother 212 # Chrome doesn't know to display a .checksum file as text, so don't bother
195 # putting in a link to the actual result. 213 # putting in a link to the actual result.
196 OUT_FILENAMES = [] 214 OUT_FILENAMES = []
197 215
198 @staticmethod 216 @staticmethod
199 def Message(): 217 def Message():
200 return "Images match, expected image hash incorrect. " 218 return "Images match, expected image hash incorrect. "
201 219
202 def ResultHtmlOutput(self, filename): 220 def ResultHtmlOutput(self, filename):
203 return "<strong>%s</strong>" % self.Message() 221 return "<strong>%s</strong>" % self.Message()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698