PRESUBMIT_test.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/usr/bin/env python3
  2. # Copyright 2022 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.
  5. import unittest
  6. import sys
  7. import os
  8. import PRESUBMIT
  9. sys.path.append(
  10. os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', '..'))
  11. from PRESUBMIT_test_mocks import MockInputApi, MockOutputApi, MockAffectedFile
  12. class PresubmitTest(unittest.TestCase):
  13. def testCheckForDoctypeHTML(self):
  14. """This verifies that we correctly identify missing DOCTYPE html tags.
  15. """
  16. file1 = MockAffectedFile("some/dir/file1.html", [
  17. "<!DOCTYPE html>", "<html>", "<body>", "<p>Test</p>", "</body>",
  18. "</html>"
  19. ])
  20. file2 = MockAffectedFile(
  21. "some/dir2/file2.html",
  22. ["<html>", "<body>", "<p>Test</p>", "</body>", "</html>"])
  23. file3 = MockAffectedFile("file3.html", [
  24. "<!--Some comment-->", "<!docTYPE htML>", "<html>", "<body>",
  25. "<p>Test</p>", "</body>", "</html>"
  26. ])
  27. file4 = MockAffectedFile("dir/file4.html",
  28. ["<script></script>", "<!DOCTYPE html>"])
  29. file5 = MockAffectedFile("file5.html", [])
  30. file6 = MockAffectedFile(
  31. "file6.not_html",
  32. ["<html>", "<body>", "<p>Test</p>", "</body>", "</html>"])
  33. file7 = MockAffectedFile("file7.html", [
  34. "<!DOCTYPE html >", "<html>", "<body>", "<p>Test</p>", "</body>",
  35. "</html>"
  36. ])
  37. file8 = MockAffectedFile("file8.html", [
  38. "<!DOCTYPE html FOOBAR>", "<html>", "<body>", "<p>Test</p>",
  39. "</body>", "</html>"
  40. ])
  41. file9 = MockAffectedFile(
  42. "some/dir/quirk-file9.html",
  43. ["<html>", "<body>", "<p>Test</p>", "</body>", "</html>"])
  44. file10 = MockAffectedFile(
  45. "old/file10.html",
  46. ["<html>", "<body>", "<p>New content</p>", "</body>", "</html>"],
  47. ["<html>", "<body>", "<p>Old content</p>", "</body>", "</html>"],
  48. action="M")
  49. mock_input_api = MockInputApi()
  50. mock_input_api.files = [
  51. file1, file2, file3, file4, file5, file6, file7, file8, file9,
  52. file10
  53. ]
  54. messages = PRESUBMIT._CheckForDoctypeHTML(mock_input_api,
  55. MockOutputApi())
  56. self.assertEqual(4, len(messages))
  57. for i, file in enumerate([file2, file4, file5, file8]):
  58. self.assertEqual("error", messages[i].type)
  59. self.assertIn("\"%s\"" % file.LocalPath(), messages[i].message)
  60. def testCheckForDoctypeHTMLExceptions(self):
  61. """This test makes sure that we don't raise <!DOCTYPE html> errors
  62. for WPT importer.
  63. """
  64. error_file = MockAffectedFile(
  65. "some/dir/doctype_error.html",
  66. ["<html>", "<body>", "<p>Test</p>", "</body>", "</html>"])
  67. mock_input_api = MockInputApi()
  68. mock_input_api.files = [error_file]
  69. mock_input_api.change.author_email = \
  70. "wpt-autoroller@chops-service-accounts.iam.gserviceaccount.com"
  71. messages = PRESUBMIT._CheckForDoctypeHTML(mock_input_api,
  72. MockOutputApi())
  73. self.assertEqual(1, len(messages))
  74. self.assertEqual("warning", messages[0].type)
  75. if __name__ == "__main__":
  76. unittest.main()