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

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/style/checker_unittest.py

Issue 1839193004: Run auto-formatter (autopep8) on webkitpy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 8 months 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
OLDNEW
1 # -*- coding: utf-8; -*- 1 # -*- coding: utf-8; -*-
2 # 2 #
3 # Copyright (C) 2009 Google Inc. All rights reserved. 3 # Copyright (C) 2009 Google Inc. All rights reserved.
4 # Copyright (C) 2009 Torch Mobile Inc. 4 # Copyright (C) 2009 Torch Mobile Inc.
5 # Copyright (C) 2009 Apple Inc. All rights reserved. 5 # Copyright (C) 2009 Apple Inc. All rights reserved.
6 # Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com) 6 # Copyright (C) 2010 Chris Jerdonek (chris.jerdonek@gmail.com)
7 # 7 #
8 # Redistribution and use in source and binary forms, with or without 8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions are 9 # modification, are permitted provided that the following conditions are
10 # met: 10 # met:
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 250
251 """Tests the "should skip" methods of the CheckerDispatcher class.""" 251 """Tests the "should skip" methods of the CheckerDispatcher class."""
252 252
253 def setUp(self): 253 def setUp(self):
254 self._dispatcher = CheckerDispatcher() 254 self._dispatcher = CheckerDispatcher()
255 255
256 def test_should_skip_with_warning(self): 256 def test_should_skip_with_warning(self):
257 """Test should_skip_with_warning().""" 257 """Test should_skip_with_warning()."""
258 # Check skipped files. 258 # Check skipped files.
259 paths_to_skip = [ 259 paths_to_skip = [
260 "Source/WebKit/gtk/tests/testatk.c", 260 "Source/WebKit/gtk/tests/testatk.c",
261 "Source/WebKit2/UIProcess/API/gtk/webkit2.h", 261 "Source/WebKit2/UIProcess/API/gtk/webkit2.h",
262 "Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h", 262 "Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h",
263 "Source/WebKit2/UIProcess/API/gtk/WebKitLoader.h", 263 "Source/WebKit2/UIProcess/API/gtk/WebKitLoader.h",
264 ] 264 ]
265 265
266 for path in paths_to_skip: 266 for path in paths_to_skip:
267 self.assertTrue(self._dispatcher.should_skip_with_warning(path), 267 self.assertTrue(self._dispatcher.should_skip_with_warning(path),
268 "Checking: " + path) 268 "Checking: " + path)
269 269
270 # Verify that some files are not skipped. 270 # Verify that some files are not skipped.
271 paths_not_to_skip = [ 271 paths_not_to_skip = [
272 "foo.txt", 272 "foo.txt",
273 "Source/WebKit2/UIProcess/API/gtk/HelperClass.cpp", 273 "Source/WebKit2/UIProcess/API/gtk/HelperClass.cpp",
274 "Source/WebKit2/UIProcess/API/gtk/HelperClass.h", 274 "Source/WebKit2/UIProcess/API/gtk/HelperClass.h",
275 "Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp", 275 "Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp",
276 "Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h", 276 "Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h",
277 "Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp", 277 "Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp",
278 "Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h", 278 "Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h",
279 ] 279 ]
280 280
281 for path in paths_not_to_skip: 281 for path in paths_not_to_skip:
282 self.assertFalse(self._dispatcher.should_skip_with_warning(path)) 282 self.assertFalse(self._dispatcher.should_skip_with_warning(path))
283 283
284 def _assert_should_skip_without_warning(self, path, is_checker_none, 284 def _assert_should_skip_without_warning(self, path, is_checker_none,
285 expected): 285 expected):
286 # Check the file type before asserting the return value. 286 # Check the file type before asserting the return value.
287 checker = self._dispatcher.dispatch(file_path=path, 287 checker = self._dispatcher.dispatch(file_path=path,
288 handle_style_error=None, 288 handle_style_error=None,
289 min_confidence=3) 289 min_confidence=3)
290 message = 'while checking: %s' % path 290 message = 'while checking: %s' % path
291 self.assertEqual(checker is None, is_checker_none, message) 291 self.assertEqual(checker is None, is_checker_none, message)
292 self.assertEqual(self._dispatcher.should_skip_without_warning(path), 292 self.assertEqual(self._dispatcher.should_skip_without_warning(path),
293 expected, message) 293 expected, message)
294 294
295 def test_should_skip_without_warning__true(self): 295 def test_should_skip_without_warning__true(self):
296 """Test should_skip_without_warning() for True return values.""" 296 """Test should_skip_without_warning() for True return values."""
297 # Check a file with NONE file type. 297 # Check a file with NONE file type.
298 path = 'foo.asdf' # Non-sensical file extension. 298 path = 'foo.asdf' # Non-sensical file extension.
299 self._assert_should_skip_without_warning(path, 299 self._assert_should_skip_without_warning(path,
300 is_checker_none=True, 300 is_checker_none=True,
301 expected=True) 301 expected=True)
302 302
303 # Check files with non-NONE file type. These examples must be 303 # Check files with non-NONE file type. These examples must be
304 # drawn from the _SKIPPED_FILES_WITHOUT_WARNING configuration 304 # drawn from the _SKIPPED_FILES_WITHOUT_WARNING configuration
305 # variable. 305 # variable.
306 path = os.path.join('LayoutTests', 'foo.txt') 306 path = os.path.join('LayoutTests', 'foo.txt')
307 self._assert_should_skip_without_warning(path, 307 self._assert_should_skip_without_warning(path,
308 is_checker_none=False, 308 is_checker_none=False,
309 expected=True) 309 expected=True)
310 310
311 def test_should_skip_without_warning__false(self): 311 def test_should_skip_without_warning__false(self):
312 """Test should_skip_without_warning() for False return values.""" 312 """Test should_skip_without_warning() for False return values."""
313 paths = ['foo.txt', 313 paths = ['foo.txt',
314 os.path.join('LayoutTests', 'TestExpectations'), 314 os.path.join('LayoutTests', 'TestExpectations'),
315 ] 315 ]
316 316
317 for path in paths: 317 for path in paths:
318 self._assert_should_skip_without_warning(path, 318 self._assert_should_skip_without_warning(path,
319 is_checker_none=False, 319 is_checker_none=False,
320 expected=False) 320 expected=False)
321 321
322 322
323 class CheckerDispatcherCarriageReturnTest(unittest.TestCase): 323 class CheckerDispatcherCarriageReturnTest(unittest.TestCase):
324
324 def test_should_check_and_strip_carriage_returns(self): 325 def test_should_check_and_strip_carriage_returns(self):
325 files = { 326 files = {
326 'foo.txt': True, 327 'foo.txt': True,
327 'foo.cpp': True, 328 'foo.cpp': True,
328 'foo.vcproj': False, 329 'foo.vcproj': False,
329 'foo.vsprops': False, 330 'foo.vsprops': False,
330 } 331 }
331 332
332 dispatcher = CheckerDispatcher() 333 dispatcher = CheckerDispatcher()
333 for file_path, expected_result in files.items(): 334 for file_path, expected_result in files.items():
334 self.assertEqual(dispatcher.should_check_and_strip_carriage_returns( file_path), expected_result, 'Checking: %s' % file_path) 335 self.assertEqual(dispatcher.should_check_and_strip_carriage_returns(
336 file_path), expected_result, 'Checking: %s' % file_path)
335 337
336 338
337 class CheckerDispatcherDispatchTest(unittest.TestCase): 339 class CheckerDispatcherDispatchTest(unittest.TestCase):
338 340
339 """Tests dispatch() method of CheckerDispatcher class.""" 341 """Tests dispatch() method of CheckerDispatcher class."""
340 342
341 def dispatch(self, file_path): 343 def dispatch(self, file_path):
342 """Call dispatch() with the given file path.""" 344 """Call dispatch() with the given file path."""
343 dispatcher = CheckerDispatcher() 345 dispatcher = CheckerDispatcher()
344 self.mock_handle_style_error = DefaultStyleErrorHandler('', None, None, []) 346 self.mock_handle_style_error = DefaultStyleErrorHandler('', None, None, [])
345 checker = dispatcher.dispatch(file_path, 347 checker = dispatcher.dispatch(file_path,
346 self.mock_handle_style_error, 348 self.mock_handle_style_error,
347 min_confidence=3) 349 min_confidence=3)
348 return checker 350 return checker
349 351
350 def assert_checker_none(self, file_path): 352 def assert_checker_none(self, file_path):
351 """Assert that the dispatched checker is None.""" 353 """Assert that the dispatched checker is None."""
352 checker = self.dispatch(file_path) 354 checker = self.dispatch(file_path)
353 self.assertIsNone(checker, 'Checking: "%s"' % file_path) 355 self.assertIsNone(checker, 'Checking: "%s"' % file_path)
354 356
355 def assert_checker(self, file_path, expected_class): 357 def assert_checker(self, file_path, expected_class):
356 """Assert the type of the dispatched checker.""" 358 """Assert the type of the dispatched checker."""
357 checker = self.dispatch(file_path) 359 checker = self.dispatch(file_path)
358 got_class = checker.__class__ 360 got_class = checker.__class__
359 self.assertEqual(got_class, expected_class, 361 self.assertEqual(got_class, expected_class,
360 'For path "%(file_path)s" got %(got_class)s when ' 362 'For path "%(file_path)s" got %(got_class)s when '
361 "expecting %(expected_class)s." 363 "expecting %(expected_class)s."
362 % {"file_path": file_path, 364 % {"file_path": file_path,
363 "got_class": got_class, 365 "got_class": got_class,
364 "expected_class": expected_class}) 366 "expected_class": expected_class})
365 367
366 def assert_checker_cpp(self, file_path): 368 def assert_checker_cpp(self, file_path):
367 """Assert that the dispatched checker is a CppChecker.""" 369 """Assert that the dispatched checker is a CppChecker."""
368 self.assert_checker(file_path, CppChecker) 370 self.assert_checker(file_path, CppChecker)
369 371
370 def assert_checker_json(self, file_path): 372 def assert_checker_json(self, file_path):
371 """Assert that the dispatched checker is a JSONChecker.""" 373 """Assert that the dispatched checker is a JSONChecker."""
372 self.assert_checker(file_path, JSONChecker) 374 self.assert_checker(file_path, JSONChecker)
(...skipping 10 matching lines...) Expand all
383 """Assert that the dispatched checker is a XMLChecker.""" 385 """Assert that the dispatched checker is a XMLChecker."""
384 self.assert_checker(file_path, XMLChecker) 386 self.assert_checker(file_path, XMLChecker)
385 387
386 def test_cpp_paths(self): 388 def test_cpp_paths(self):
387 """Test paths that should be checked as C++.""" 389 """Test paths that should be checked as C++."""
388 paths = [ 390 paths = [
389 "-", 391 "-",
390 "foo.c", 392 "foo.c",
391 "foo.cpp", 393 "foo.cpp",
392 "foo.h", 394 "foo.h",
393 ] 395 ]
394 396
395 for path in paths: 397 for path in paths:
396 self.assert_checker_cpp(path) 398 self.assert_checker_cpp(path)
397 399
398 # Check checker attributes on a typical input. 400 # Check checker attributes on a typical input.
399 file_base = "foo" 401 file_base = "foo"
400 file_extension = "c" 402 file_extension = "c"
401 file_path = file_base + "." + file_extension 403 file_path = file_base + "." + file_extension
402 self.assert_checker_cpp(file_path) 404 self.assert_checker_cpp(file_path)
403 checker = self.dispatch(file_path) 405 checker = self.dispatch(file_path)
404 self.assertEqual(checker.file_extension, file_extension) 406 self.assertEqual(checker.file_extension, file_extension)
405 self.assertEqual(checker.file_path, file_path) 407 self.assertEqual(checker.file_path, file_path)
406 self.assertEqual(checker.handle_style_error, self.mock_handle_style_erro r) 408 self.assertEqual(checker.handle_style_error, self.mock_handle_style_erro r)
407 self.assertEqual(checker.min_confidence, 3) 409 self.assertEqual(checker.min_confidence, 3)
408 # Check "-" for good measure. 410 # Check "-" for good measure.
409 file_base = "-" 411 file_base = "-"
410 file_extension = "" 412 file_extension = ""
411 file_path = file_base 413 file_path = file_base
412 self.assert_checker_cpp(file_path) 414 self.assert_checker_cpp(file_path)
413 checker = self.dispatch(file_path) 415 checker = self.dispatch(file_path)
414 self.assertEqual(checker.file_extension, file_extension) 416 self.assertEqual(checker.file_extension, file_extension)
415 self.assertEqual(checker.file_path, file_path) 417 self.assertEqual(checker.file_path, file_path)
416 418
417 def test_json_paths(self): 419 def test_json_paths(self):
418 """Test paths that should be checked as JSON.""" 420 """Test paths that should be checked as JSON."""
419 paths = [ 421 paths = [
420 "Source/WebCore/inspector/Inspector.json", 422 "Source/WebCore/inspector/Inspector.json",
421 "Tools/BuildSlaveSupport/build.webkit.org-config/config.json", 423 "Tools/BuildSlaveSupport/build.webkit.org-config/config.json",
422 ] 424 ]
423 425
424 for path in paths: 426 for path in paths:
425 self.assert_checker_json(path) 427 self.assert_checker_json(path)
426 428
427 # Check checker attributes on a typical input. 429 # Check checker attributes on a typical input.
428 file_base = "foo" 430 file_base = "foo"
429 file_extension = "json" 431 file_extension = "json"
430 file_path = file_base + "." + file_extension 432 file_path = file_base + "." + file_extension
431 self.assert_checker_json(file_path) 433 self.assert_checker_json(file_path)
432 checker = self.dispatch(file_path) 434 checker = self.dispatch(file_path)
433 self.assertEqual(checker._handle_style_error, 435 self.assertEqual(checker._handle_style_error,
434 self.mock_handle_style_error) 436 self.mock_handle_style_error)
435 437
436 def test_python_paths(self): 438 def test_python_paths(self):
437 """Test paths that should be checked as Python.""" 439 """Test paths that should be checked as Python."""
438 paths = [ 440 paths = [
439 "foo.py", 441 "foo.py",
440 "Tools/Scripts/modules/text_style.py", 442 "Tools/Scripts/modules/text_style.py",
441 ] 443 ]
442 444
443 for path in paths: 445 for path in paths:
444 self.assert_checker_python(path) 446 self.assert_checker_python(path)
445 447
446 # Check checker attributes on a typical input. 448 # Check checker attributes on a typical input.
447 file_base = "foo" 449 file_base = "foo"
448 file_extension = "css" 450 file_extension = "css"
449 file_path = file_base + "." + file_extension 451 file_path = file_base + "." + file_extension
450 self.assert_checker_text(file_path) 452 self.assert_checker_text(file_path)
451 checker = self.dispatch(file_path) 453 checker = self.dispatch(file_path)
452 self.assertEqual(checker.file_path, file_path) 454 self.assertEqual(checker.file_path, file_path)
453 self.assertEqual(checker.handle_style_error, 455 self.assertEqual(checker.handle_style_error,
454 self.mock_handle_style_error) 456 self.mock_handle_style_error)
455 457
456 def test_text_paths(self): 458 def test_text_paths(self):
457 """Test paths that should be checked as text.""" 459 """Test paths that should be checked as text."""
458 paths = [ 460 paths = [
459 "foo.cc", 461 "foo.cc",
460 "foo.cgi", 462 "foo.cgi",
461 "foo.css", 463 "foo.css",
462 "foo.gyp", 464 "foo.gyp",
463 "foo.gypi", 465 "foo.gypi",
464 "foo.html", 466 "foo.html",
465 "foo.idl", 467 "foo.idl",
466 "foo.in", 468 "foo.in",
467 "foo.js", 469 "foo.js",
468 "foo.mm", 470 "foo.mm",
469 "foo.php", 471 "foo.php",
470 "foo.pl", 472 "foo.pl",
471 "foo.pm", 473 "foo.pm",
472 "foo.rb", 474 "foo.rb",
473 "foo.sh", 475 "foo.sh",
474 "foo.txt", 476 "foo.txt",
475 "foo.xhtml", 477 "foo.xhtml",
476 "foo.y", 478 "foo.y",
477 os.path.join("Source", "WebCore", "inspector", "front-end", "Main.js" ), 479 os.path.join("Source", "WebCore", "inspector", "front-end", "Main.js "),
478 os.path.join("Tools", "Scripts", "check-webkit-style"), 480 os.path.join("Tools", "Scripts", "check-webkit-style"),
479 ] 481 ]
480 482
481 for path in paths: 483 for path in paths:
482 self.assert_checker_text(path) 484 self.assert_checker_text(path)
483 485
484 # Check checker attributes on a typical input. 486 # Check checker attributes on a typical input.
485 file_base = "foo" 487 file_base = "foo"
486 file_extension = "css" 488 file_extension = "css"
487 file_path = file_base + "." + file_extension 489 file_path = file_base + "." + file_extension
488 self.assert_checker_text(file_path) 490 self.assert_checker_text(file_path)
489 checker = self.dispatch(file_path) 491 checker = self.dispatch(file_path)
490 self.assertEqual(checker.file_path, file_path) 492 self.assertEqual(checker.file_path, file_path)
491 self.assertEqual(checker.handle_style_error, self.mock_handle_style_erro r) 493 self.assertEqual(checker.handle_style_error, self.mock_handle_style_erro r)
492 494
493 def test_xml_paths(self): 495 def test_xml_paths(self):
494 """Test paths that should be checked as XML.""" 496 """Test paths that should be checked as XML."""
495 paths = [ 497 paths = [
496 "Source/WebCore/WebCore.vcproj/WebCore.vcproj", 498 "Source/WebCore/WebCore.vcproj/WebCore.vcproj",
497 "WebKitLibraries/win/tools/vsprops/common.vsprops", 499 "WebKitLibraries/win/tools/vsprops/common.vsprops",
498 ] 500 ]
499 501
500 for path in paths: 502 for path in paths:
501 self.assert_checker_xml(path) 503 self.assert_checker_xml(path)
502 504
503 # Check checker attributes on a typical input. 505 # Check checker attributes on a typical input.
504 file_base = "foo" 506 file_base = "foo"
505 file_extension = "vcproj" 507 file_extension = "vcproj"
506 file_path = file_base + "." + file_extension 508 file_path = file_base + "." + file_extension
507 self.assert_checker_xml(file_path) 509 self.assert_checker_xml(file_path)
508 checker = self.dispatch(file_path) 510 checker = self.dispatch(file_path)
509 self.assertEqual(checker._handle_style_error, 511 self.assertEqual(checker._handle_style_error,
510 self.mock_handle_style_error) 512 self.mock_handle_style_error)
511 513
512 def test_none_paths(self): 514 def test_none_paths(self):
513 """Test paths that have no file type..""" 515 """Test paths that have no file type.."""
514 paths = [ 516 paths = [
515 "Makefile", 517 "Makefile",
516 "foo.asdf", # Non-sensical file extension. 518 "foo.asdf", # Non-sensical file extension.
517 "foo.exe", 519 "foo.exe",
518 ] 520 ]
519 521
520 for path in paths: 522 for path in paths:
521 self.assert_checker_none(path) 523 self.assert_checker_none(path)
522 524
523 525
524 class StyleProcessorConfigurationTest(unittest.TestCase): 526 class StyleProcessorConfigurationTest(unittest.TestCase):
525 527
526 """Tests the StyleProcessorConfiguration class.""" 528 """Tests the StyleProcessorConfiguration class."""
527 529
528 def setUp(self): 530 def setUp(self):
529 self._error_messages = [] 531 self._error_messages = []
530 """The messages written to _mock_stderr_write() of this class.""" 532 """The messages written to _mock_stderr_write() of this class."""
531 533
532 def _mock_stderr_write(self, message): 534 def _mock_stderr_write(self, message):
533 self._error_messages.append(message) 535 self._error_messages.append(message)
534 536
535 def _style_checker_configuration(self, output_format="vs7"): 537 def _style_checker_configuration(self, output_format="vs7"):
536 """Return a StyleProcessorConfiguration instance for testing.""" 538 """Return a StyleProcessorConfiguration instance for testing."""
537 base_rules = ["-whitespace", "+whitespace/tab"] 539 base_rules = ["-whitespace", "+whitespace/tab"]
538 filter_configuration = FilterConfiguration(base_rules=base_rules) 540 filter_configuration = FilterConfiguration(base_rules=base_rules)
539 541
540 return StyleProcessorConfiguration( 542 return StyleProcessorConfiguration(
541 filter_configuration=filter_configuration, 543 filter_configuration=filter_configuration,
542 max_reports_per_category={"whitespace/newline": 1}, 544 max_reports_per_category={"whitespace/newline": 1},
543 min_confidence=3, 545 min_confidence=3,
544 output_format=output_format, 546 output_format=output_format,
545 stderr_write=self._mock_stderr_write) 547 stderr_write=self._mock_stderr_write)
546 548
547 def test_init(self): 549 def test_init(self):
548 """Test the __init__() method.""" 550 """Test the __init__() method."""
549 configuration = self._style_checker_configuration() 551 configuration = self._style_checker_configuration()
550 552
551 # Check that __init__ sets the "public" data attributes correctly. 553 # Check that __init__ sets the "public" data attributes correctly.
552 self.assertEqual(configuration.max_reports_per_category, 554 self.assertEqual(configuration.max_reports_per_category,
553 {"whitespace/newline": 1}) 555 {"whitespace/newline": 1})
554 self.assertEqual(configuration.stderr_write, self._mock_stderr_write) 556 self.assertEqual(configuration.stderr_write, self._mock_stderr_write)
555 self.assertEqual(configuration.min_confidence, 3) 557 self.assertEqual(configuration.min_confidence, 3)
556 558
557 def test_is_reportable(self): 559 def test_is_reportable(self):
558 """Test the is_reportable() method.""" 560 """Test the is_reportable() method."""
559 config = self._style_checker_configuration() 561 config = self._style_checker_configuration()
560 562
561 self.assertTrue(config.is_reportable("whitespace/tab", 3, "foo.txt")) 563 self.assertTrue(config.is_reportable("whitespace/tab", 3, "foo.txt"))
562 564
563 # Test the confidence check code path by varying the confidence. 565 # Test the confidence check code path by varying the confidence.
564 self.assertFalse(config.is_reportable("whitespace/tab", 2, "foo.txt")) 566 self.assertFalse(config.is_reportable("whitespace/tab", 2, "foo.txt"))
565 567
566 # Test the category check code path by varying the category. 568 # Test the category check code path by varying the category.
567 self.assertFalse(config.is_reportable("whitespace/line", 4, "foo.txt")) 569 self.assertFalse(config.is_reportable("whitespace/line", 4, "foo.txt"))
568 570
569 def _call_write_style_error(self, output_format): 571 def _call_write_style_error(self, output_format):
570 config = self._style_checker_configuration(output_format=output_format) 572 config = self._style_checker_configuration(output_format=output_format)
571 config.write_style_error(category="whitespace/tab", 573 config.write_style_error(category="whitespace/tab",
572 confidence_in_error=5, 574 confidence_in_error=5,
573 file_path="foo.h", 575 file_path="foo.h",
574 line_number=100, 576 line_number=100,
575 message="message") 577 message="message")
576 578
577 def test_write_style_error_emacs(self): 579 def test_write_style_error_emacs(self):
578 """Test the write_style_error() method.""" 580 """Test the write_style_error() method."""
579 self._call_write_style_error("emacs") 581 self._call_write_style_error("emacs")
580 self.assertEqual(self._error_messages, 582 self.assertEqual(self._error_messages,
581 ["foo.h:100: message [whitespace/tab] [5]\n"]) 583 ["foo.h:100: message [whitespace/tab] [5]\n"])
582 584
583 def test_write_style_error_vs7(self): 585 def test_write_style_error_vs7(self):
584 """Test the write_style_error() method.""" 586 """Test the write_style_error() method."""
585 self._call_write_style_error("vs7") 587 self._call_write_style_error("vs7")
586 self.assertEqual(self._error_messages, 588 self.assertEqual(self._error_messages,
587 ["foo.h(100): message [whitespace/tab] [5]\n"]) 589 ["foo.h(100): message [whitespace/tab] [5]\n"])
588 590
589 591
590 class StyleProcessor_EndToEndTest(LoggingTestCase): 592 class StyleProcessor_EndToEndTest(LoggingTestCase):
591 593
592 """Test the StyleProcessor class with an emphasis on end-to-end tests.""" 594 """Test the StyleProcessor class with an emphasis on end-to-end tests."""
593 595
594 def setUp(self): 596 def setUp(self):
595 LoggingTestCase.setUp(self) 597 LoggingTestCase.setUp(self)
596 self._messages = [] 598 self._messages = []
597 599
598 def _mock_stderr_write(self, message): 600 def _mock_stderr_write(self, message):
599 """Save a message so it can later be asserted.""" 601 """Save a message so it can later be asserted."""
600 self._messages.append(message) 602 self._messages.append(message)
601 603
602 def test_init(self): 604 def test_init(self):
603 """Test __init__ constructor.""" 605 """Test __init__ constructor."""
604 configuration = StyleProcessorConfiguration( 606 configuration = StyleProcessorConfiguration(
605 filter_configuration=FilterConfiguration(), 607 filter_configuration=FilterConfiguration(),
606 max_reports_per_category={}, 608 max_reports_per_category={},
607 min_confidence=3, 609 min_confidence=3,
608 output_format="vs7", 610 output_format="vs7",
609 stderr_write=self._mock_stderr_write) 611 stderr_write=self._mock_stderr_write)
610 processor = StyleProcessor(configuration) 612 processor = StyleProcessor(configuration)
611 613
612 self.assertEqual(processor.error_count, 0) 614 self.assertEqual(processor.error_count, 0)
613 self.assertEqual(self._messages, []) 615 self.assertEqual(self._messages, [])
614 616
615 def test_process(self): 617 def test_process(self):
616 configuration = StyleProcessorConfiguration( 618 configuration = StyleProcessorConfiguration(
617 filter_configuration=FilterConfiguration(), 619 filter_configuration=FilterConfiguration(),
618 max_reports_per_category={}, 620 max_reports_per_category={},
619 min_confidence=3, 621 min_confidence=3,
620 output_format="vs7", 622 output_format="vs7",
621 stderr_write=self._mock_stderr_write) 623 stderr_write=self._mock_stderr_write)
622 processor = StyleProcessor(configuration) 624 processor = StyleProcessor(configuration)
623 625
624 processor.process(lines=['line1', 'Line with tab:\t'], 626 processor.process(lines=['line1', 'Line with tab:\t'],
625 file_path='foo.txt') 627 file_path='foo.txt')
626 self.assertEqual(processor.error_count, 1) 628 self.assertEqual(processor.error_count, 1)
627 expected_messages = ['foo.txt(2): Line contains tab character. ' 629 expected_messages = ['foo.txt(2): Line contains tab character. '
628 '[whitespace/tab] [5]\n'] 630 '[whitespace/tab] [5]\n']
629 self.assertEqual(self._messages, expected_messages) 631 self.assertEqual(self._messages, expected_messages)
630 632
631 633
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 return file_path.endswith('skip_without_warning.txt') 665 return file_path.endswith('skip_without_warning.txt')
664 666
665 def should_check_and_strip_carriage_returns(self, file_path): 667 def should_check_and_strip_carriage_returns(self, file_path):
666 return not file_path.endswith('carriage_returns_allowed.txt') 668 return not file_path.endswith('carriage_returns_allowed.txt')
667 669
668 def dispatch(self, file_path, style_error_handler, min_confidence): 670 def dispatch(self, file_path, style_error_handler, min_confidence):
669 if file_path.endswith('do_not_process.txt'): 671 if file_path.endswith('do_not_process.txt'):
670 return None 672 return None
671 673
672 checker = StyleProcessor_CodeCoverageTest.MockDispatchedChecker( 674 checker = StyleProcessor_CodeCoverageTest.MockDispatchedChecker(
673 file_path, 675 file_path,
674 min_confidence, 676 min_confidence,
675 style_error_handler) 677 style_error_handler)
676 678
677 # Save the dispatched checker so the current test case has a 679 # Save the dispatched checker so the current test case has a
678 # way to access and check it. 680 # way to access and check it.
679 self.dispatched_checker = checker 681 self.dispatched_checker = checker
680 682
681 return checker 683 return checker
682 684
683 def setUp(self): 685 def setUp(self):
684 LoggingTestCase.setUp(self) 686 LoggingTestCase.setUp(self)
685 # We can pass an error-message swallower here because error message 687 # We can pass an error-message swallower here because error message
686 # output is tested instead in the end-to-end test case above. 688 # output is tested instead in the end-to-end test case above.
687 configuration = StyleProcessorConfiguration( 689 configuration = StyleProcessorConfiguration(
688 filter_configuration=FilterConfiguration(), 690 filter_configuration=FilterConfiguration(),
689 max_reports_per_category={"whitespace/newline": 1}, 691 max_reports_per_category={"whitespace/newline": 1},
690 min_confidence=3, 692 min_confidence=3,
691 output_format="vs7", 693 output_format="vs7",
692 stderr_write=self._swallow_stderr_message) 694 stderr_write=self._swallow_stderr_message)
693 695
694 mock_carriage_checker_class = self._create_carriage_checker_class() 696 mock_carriage_checker_class = self._create_carriage_checker_class()
695 mock_dispatcher = self.MockDispatcher() 697 mock_dispatcher = self.MockDispatcher()
696 # We do not need to use a real incrementer here because error-count 698 # We do not need to use a real incrementer here because error-count
697 # incrementing is tested instead in the end-to-end test case above. 699 # incrementing is tested instead in the end-to-end test case above.
698 mock_increment_error_count = self._do_nothing 700 mock_increment_error_count = self._do_nothing
699 701
700 processor = StyleProcessor(configuration=configuration, 702 processor = StyleProcessor(configuration=configuration,
701 mock_carriage_checker_class=mock_carriage_checker_class, 703 mock_carriage_checker_class=mock_carriage_che cker_class,
702 mock_dispatcher=mock_dispatcher, 704 mock_dispatcher=mock_dispatcher,
703 mock_increment_error_count=mock_increment_error_count) 705 mock_increment_error_count=mock_increment_err or_count)
704 706
705 self._configuration = configuration 707 self._configuration = configuration
706 self._mock_dispatcher = mock_dispatcher 708 self._mock_dispatcher = mock_dispatcher
707 self._processor = processor 709 self._processor = processor
708 710
709 def _do_nothing(self): 711 def _do_nothing(self):
710 # We provide this function so the caller can pass it to the 712 # We provide this function so the caller can pass it to the
711 # StyleProcessor constructor. This lets us assert the equality of 713 # StyleProcessor constructor. This lets us assert the equality of
712 # the DefaultStyleErrorHandler instance generated by the process() 714 # the DefaultStyleErrorHandler instance generated by the process()
713 # method with an expected instance. 715 # method with an expected instance.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 line_numbers=line_numbers) 781 line_numbers=line_numbers)
780 782
781 self._processor.process(lines=lines, 783 self._processor.process(lines=lines,
782 file_path=file_path, 784 file_path=file_path,
783 line_numbers=line_numbers) 785 line_numbers=line_numbers)
784 786
785 # Check that the carriage-return checker was instantiated correctly 787 # Check that the carriage-return checker was instantiated correctly
786 # and was passed lines correctly. 788 # and was passed lines correctly.
787 carriage_checker = self.carriage_checker 789 carriage_checker = self.carriage_checker
788 self.assertEqual(carriage_checker.style_error_handler, 790 self.assertEqual(carriage_checker.style_error_handler,
789 expected_error_handler) 791 expected_error_handler)
790 self.assertEqual(carriage_checker.lines, ['line1', 'line2']) 792 self.assertEqual(carriage_checker.lines, ['line1', 'line2'])
791 793
792 # Check that the style checker was dispatched correctly and was 794 # Check that the style checker was dispatched correctly and was
793 # passed lines correctly. 795 # passed lines correctly.
794 checker = self._mock_dispatcher.dispatched_checker 796 checker = self._mock_dispatcher.dispatched_checker
795 self.assertEqual(checker.file_path, 'foo.txt') 797 self.assertEqual(checker.file_path, 'foo.txt')
796 self.assertEqual(checker.min_confidence, 3) 798 self.assertEqual(checker.min_confidence, 3)
797 self.assertEqual(checker.style_error_handler, expected_error_handler) 799 self.assertEqual(checker.style_error_handler, expected_error_handler)
798 800
799 self.assertEqual(checker.lines, ['line1', 'line2']) 801 self.assertEqual(checker.lines, ['line1', 'line2'])
800 802
801 def test_process__no_checker_dispatched(self): 803 def test_process__no_checker_dispatched(self):
802 """Test the process() method for a path with no dispatched checker.""" 804 """Test the process() method for a path with no dispatched checker."""
803 path = os.path.join('foo', 'do_not_process.txt') 805 path = os.path.join('foo', 'do_not_process.txt')
804 self.assertRaises(AssertionError, self._processor.process, 806 self.assertRaises(AssertionError, self._processor.process,
805 lines=['line1', 'line2'], file_path=path, 807 lines=['line1', 'line2'], file_path=path,
806 line_numbers=[100]) 808 line_numbers=[100])
807 809
808 def test_process__carriage_returns_not_stripped(self): 810 def test_process__carriage_returns_not_stripped(self):
809 """Test that carriage returns aren't stripped from files that are allowe d to contain them.""" 811 """Test that carriage returns aren't stripped from files that are allowe d to contain them."""
810 file_path = 'carriage_returns_allowed.txt' 812 file_path = 'carriage_returns_allowed.txt'
811 lines = ['line1\r', 'line2\r'] 813 lines = ['line1\r', 'line2\r']
812 line_numbers = [100] 814 line_numbers = [100]
813 self._processor.process(lines=lines, 815 self._processor.process(lines=lines,
814 file_path=file_path, 816 file_path=file_path,
815 line_numbers=line_numbers) 817 line_numbers=line_numbers)
816 # The carriage return checker should never have been invoked, and so 818 # The carriage return checker should never have been invoked, and so
817 # should not have saved off any lines. 819 # should not have saved off any lines.
818 self.assertFalse(hasattr(self.carriage_checker, 'lines')) 820 self.assertFalse(hasattr(self.carriage_checker, 'lines'))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698