metrics_xml_format_test.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/usr/bin/env vpython3
  2. # coding=utf-8
  3. # Copyright (c) 2012 The Chromium Authors. All rights reserved.
  4. # Use of this source code is governed by a BSD-style license that can be
  5. # found in the LICENSE file.
  6. import os
  7. import sys
  8. import unittest
  9. from unittest import mock
  10. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  11. import gclient_paths_test
  12. import metrics_xml_format
  13. norm = lambda path: os.path.join(*path.split('/'))
  14. class TestBase(gclient_paths_test.TestBase):
  15. def setUp(self):
  16. super().setUp()
  17. # os.path.realpath() doesn't seem to use os.path.getcwd() to compute
  18. # the realpath of a given path.
  19. #
  20. # This mock os.path.realpath such that it uses the mocked getcwd().
  21. mock.patch('os.path.realpath', self.realpath).start()
  22. # gclient_paths.GetPrimarysolutionPath() defaults to src.
  23. self.make_file_tree({'.gclient': ''})
  24. self.cwd = os.path.join(self.cwd, 'src')
  25. def realpath(self, path):
  26. if os.path.isabs(path):
  27. return path
  28. return os.path.join(self.getcwd(), path)
  29. class GetMetricsDirTest(TestBase):
  30. def testWithAbsolutePath(self):
  31. top = self.getcwd()
  32. get = lambda path: metrics_xml_format.GetMetricsDir(
  33. top, os.path.join(top, norm(path)))
  34. self.assertTrue(get('tools/metrics/actions/abc.xml'))
  35. self.assertTrue(get('tools/metrics/histograms/abc.xml'))
  36. self.assertTrue(get('tools/metrics/structured/abc.xml'))
  37. self.assertTrue(get('tools/metrics/ukm/abc.xml'))
  38. self.assertFalse(get('tools/test/metrics/actions/abc.xml'))
  39. self.assertFalse(get('tools/test/metrics/histograms/abc.xml'))
  40. self.assertFalse(get('tools/test/metrics/structured/abc.xml'))
  41. self.assertFalse(get('tools/test/metrics/ukm/abc.xml'))
  42. def testWithRelativePaths(self):
  43. top = self.getcwd()
  44. # chdir() to tools so that relative paths from tools become valid.
  45. self.cwd = os.path.join(self.cwd, 'tools')
  46. get = lambda path: metrics_xml_format.GetMetricsDir(top, path)
  47. self.assertTrue(get(norm('metrics/actions/abc.xml')))
  48. self.assertFalse(get(norm('abc.xml')))
  49. class FindMetricsXMLFormatTool(TestBase):
  50. def testWithMetricsXML(self):
  51. top = self.getcwd()
  52. findTool = metrics_xml_format.FindMetricsXMLFormatterTool
  53. self.assertEqual(
  54. findTool(norm('tools/metrics/actions/abc.xml')),
  55. os.path.join(top, norm('tools/metrics/actions/pretty_print.py')),
  56. )
  57. # same test, but with an absolute path.
  58. self.assertEqual(
  59. findTool(os.path.join(top, norm('tools/metrics/actions/abc.xml'))),
  60. os.path.join(top, norm('tools/metrics/actions/pretty_print.py')),
  61. )
  62. def testWthNonMetricsXML(self):
  63. findTool = metrics_xml_format.FindMetricsXMLFormatterTool
  64. self.assertEqual(findTool(norm('tools/metrics/test/abc.xml')), '')
  65. def testWithNonCheckout(self):
  66. findTool = metrics_xml_format.FindMetricsXMLFormatterTool
  67. self.cwd = self.root
  68. self.assertEqual(findTool(norm('tools/metrics/actions/abc.xml')), '')
  69. def testWithDifferentCheckout(self):
  70. findTool = metrics_xml_format.FindMetricsXMLFormatterTool
  71. checkout2 = os.path.join(self.root, '..', self._testMethodName + '2',
  72. 'src')
  73. self.assertEqual(
  74. # this is the case the tool was given a file path that is located
  75. # in a different checkout folder.
  76. findTool(
  77. os.path.join(checkout2, norm('tools/metrics/actions/abc.xml'))),
  78. '',
  79. )
  80. def testSupportedHistogramsXML(self):
  81. top = self.getcwd()
  82. findTool = metrics_xml_format.FindMetricsXMLFormatterTool
  83. self.assertEqual(
  84. findTool(norm('tools/metrics/histograms/enums.xml')),
  85. os.path.join(top, norm('tools/metrics/histograms/pretty_print.py')),
  86. )
  87. self.assertEqual(
  88. findTool(norm('tools/metrics/histograms/tests/histograms.xml')),
  89. os.path.join(top, norm('tools/metrics/histograms/pretty_print.py')),
  90. )
  91. def testNotSupportedHistogramsXML(self):
  92. tool = metrics_xml_format.FindMetricsXMLFormatterTool(
  93. norm('tools/metrics/histograms/NO.xml'))
  94. self.assertEqual(tool, '')
  95. if __name__ == '__main__':
  96. unittest.main()