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

Side by Side Diff: sky/tools/webkitpy/style/error_handlers_unittest.py

Issue 675343003: Prune a bunch of webkitpy. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 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
« no previous file with comments | « sky/tools/webkitpy/style/error_handlers.py ('k') | sky/tools/webkitpy/style/filereader.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
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 # 1. Redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer.
8 # 2. Redistributions in binary form must reproduce the above copyright
9 # notice, this list of conditions and the following disclaimer in the
10 # documentation and/or other materials provided with the distribution.
11 #
12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
13 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
16 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
17 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
23 """Unit tests for error_handlers.py."""
24
25 import unittest
26
27 from checker import StyleProcessorConfiguration
28 from error_handlers import DefaultStyleErrorHandler
29 from filter import FilterConfiguration
30
31
32 class DefaultStyleErrorHandlerTest(unittest.TestCase):
33
34 """Tests the DefaultStyleErrorHandler class."""
35
36 def setUp(self):
37 self._error_messages = []
38 self._error_count = 0
39
40 _category = "whitespace/tab"
41 """The category name for the tests in this class."""
42
43 _file_path = "foo.h"
44 """The file path for the tests in this class."""
45
46 def _mock_increment_error_count(self):
47 self._error_count += 1
48
49 def _mock_stderr_write(self, message):
50 self._error_messages.append(message)
51
52 def _style_checker_configuration(self):
53 """Return a StyleProcessorConfiguration instance for testing."""
54 base_rules = ["-whitespace", "+whitespace/tab"]
55 filter_configuration = FilterConfiguration(base_rules=base_rules)
56
57 return StyleProcessorConfiguration(
58 filter_configuration=filter_configuration,
59 max_reports_per_category={"whitespace/tab": 2},
60 min_confidence=3,
61 output_format="vs7",
62 stderr_write=self._mock_stderr_write)
63
64 def _error_handler(self, configuration, line_numbers=None):
65 return DefaultStyleErrorHandler(configuration=configuration,
66 file_path=self._file_path,
67 increment_error_count=self._mock_increment_error_count,
68 line_numbers=line_numbers)
69
70 def _check_initialized(self):
71 """Check that count and error messages are initialized."""
72 self.assertEqual(0, self._error_count)
73 self.assertEqual(0, len(self._error_messages))
74
75 def _call_error_handler(self, handle_error, confidence, line_number=100):
76 """Call the given error handler with a test error."""
77 handle_error(line_number=line_number,
78 category=self._category,
79 confidence=confidence,
80 message="message")
81
82 def test_eq__true_return_value(self):
83 """Test the __eq__() method for the return value of True."""
84 handler1 = self._error_handler(configuration=None)
85 handler2 = self._error_handler(configuration=None)
86
87 self.assertTrue(handler1.__eq__(handler2))
88
89 def test_eq__false_return_value(self):
90 """Test the __eq__() method for the return value of False."""
91 def make_handler(configuration=self._style_checker_configuration(),
92 file_path='foo.txt', increment_error_count=lambda: True,
93 line_numbers=[100]):
94 return DefaultStyleErrorHandler(configuration=configuration,
95 file_path=file_path,
96 increment_error_count=increment_error_count,
97 line_numbers=line_numbers)
98
99 handler = make_handler()
100
101 # Establish a baseline for our comparisons below.
102 self.assertTrue(handler.__eq__(make_handler()))
103
104 # Verify that a difference in any argument causes equality to fail.
105 self.assertFalse(handler.__eq__(make_handler(configuration=None)))
106 self.assertFalse(handler.__eq__(make_handler(file_path='bar.txt')))
107 self.assertFalse(handler.__eq__(make_handler(increment_error_count=None) ))
108 self.assertFalse(handler.__eq__(make_handler(line_numbers=[50])))
109
110 def test_ne(self):
111 """Test the __ne__() method."""
112 # By default, __ne__ always returns true on different objects.
113 # Thus, check just the distinguishing case to verify that the
114 # code defines __ne__.
115 handler1 = self._error_handler(configuration=None)
116 handler2 = self._error_handler(configuration=None)
117
118 self.assertFalse(handler1.__ne__(handler2))
119
120 def test_non_reportable_error(self):
121 """Test __call__() with a non-reportable error."""
122 self._check_initialized()
123 configuration = self._style_checker_configuration()
124
125 confidence = 1
126 # Confirm the error is not reportable.
127 self.assertFalse(configuration.is_reportable(self._category,
128 confidence,
129 self._file_path))
130 error_handler = self._error_handler(configuration)
131 self._call_error_handler(error_handler, confidence)
132
133 self.assertEqual(0, self._error_count)
134 self.assertEqual([], self._error_messages)
135
136 # Also serves as a reportable error test.
137 def test_max_reports_per_category(self):
138 """Test error report suppression in __call__() method."""
139 self._check_initialized()
140 configuration = self._style_checker_configuration()
141 error_handler = self._error_handler(configuration)
142
143 confidence = 5
144
145 # First call: usual reporting.
146 self._call_error_handler(error_handler, confidence)
147 self.assertEqual(1, self._error_count)
148 self.assertEqual(1, len(self._error_messages))
149 self.assertEqual(self._error_messages,
150 ["foo.h(100): message [whitespace/tab] [5]\n"])
151
152 # Second call: suppression message reported.
153 self._call_error_handler(error_handler, confidence)
154 # The "Suppressing further..." message counts as an additional
155 # message (but not as an addition to the error count).
156 self.assertEqual(2, self._error_count)
157 self.assertEqual(3, len(self._error_messages))
158 self.assertEqual(self._error_messages[-2],
159 "foo.h(100): message [whitespace/tab] [5]\n")
160 self.assertEqual(self._error_messages[-1],
161 "Suppressing further [whitespace/tab] reports "
162 "for this file.\n")
163
164 # Third call: no report.
165 self._call_error_handler(error_handler, confidence)
166 self.assertEqual(3, self._error_count)
167 self.assertEqual(3, len(self._error_messages))
168
169 def test_line_numbers(self):
170 """Test the line_numbers parameter."""
171 self._check_initialized()
172 configuration = self._style_checker_configuration()
173 error_handler = self._error_handler(configuration,
174 line_numbers=[50])
175 confidence = 5
176
177 # Error on non-modified line: no error.
178 self._call_error_handler(error_handler, confidence, line_number=60)
179 self.assertEqual(0, self._error_count)
180 self.assertEqual([], self._error_messages)
181
182 # Error on modified line: error.
183 self._call_error_handler(error_handler, confidence, line_number=50)
184 self.assertEqual(1, self._error_count)
185 self.assertEqual(self._error_messages,
186 ["foo.h(50): message [whitespace/tab] [5]\n"])
187
188 # Error on non-modified line after turning off line filtering: error.
189 error_handler.turn_off_line_filtering()
190 self._call_error_handler(error_handler, confidence, line_number=60)
191 self.assertEqual(2, self._error_count)
192 self.assertEqual(self._error_messages,
193 ['foo.h(50): message [whitespace/tab] [5]\n',
194 'foo.h(60): message [whitespace/tab] [5]\n',
195 'Suppressing further [whitespace/tab] reports for thi s file.\n'])
OLDNEW
« no previous file with comments | « sky/tools/webkitpy/style/error_handlers.py ('k') | sky/tools/webkitpy/style/filereader.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698