class_dependency_unittest.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/env python3
  2. # Copyright 2020 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. """Unit tests for dependency_analysis.class_dependency."""
  6. import unittest.mock
  7. import class_dependency
  8. class TestHelperFunctions(unittest.TestCase):
  9. """Unit tests for module-level helper functions."""
  10. def test_java_class_params_to_key(self):
  11. """Tests that the helper concatenates, separated with a dot."""
  12. result = class_dependency.java_class_params_to_key('pkg.name', 'class')
  13. self.assertEqual(result, 'pkg.name.class')
  14. def test_split_nested_class_from_key(self):
  15. """Tests that the helper correctly splits out a nested class."""
  16. part1, part2 = class_dependency.split_nested_class_from_key(
  17. 'pkg.name.class$nested')
  18. self.assertEqual(part1, 'pkg.name.class')
  19. self.assertEqual(part2, 'nested')
  20. def test_split_nested_class_from_key_no_nested(self):
  21. """Tests that the helper works when there is no nested class."""
  22. part1, part2 = class_dependency.split_nested_class_from_key(
  23. 'pkg.name.class')
  24. self.assertEqual(part1, 'pkg.name.class')
  25. self.assertIsNone(part2)
  26. def test_split_nested_class_from_key_lambda(self):
  27. """Tests that the helper works for jdeps' formatting of lambdas."""
  28. part1, part2 = class_dependency.split_nested_class_from_key(
  29. 'pkg.name.class$$Lambda$1')
  30. self.assertEqual(part1, 'pkg.name.class')
  31. self.assertEqual(part2, '$Lambda$1')
  32. def test_split_nested_class_from_key_numeric(self):
  33. """Tests that the helper works for jdeps' formatting of nested classes.
  34. Specifically, jdeps uses a numeric name for private nested classes.
  35. """
  36. part1, part2 = class_dependency.split_nested_class_from_key(
  37. 'pkg.name.class$1')
  38. self.assertEqual(part1, 'pkg.name.class')
  39. self.assertEqual(part2, '1')
  40. class TestJavaClass(unittest.TestCase):
  41. """Unit tests for dependency_analysis.class_dependency.JavaClass."""
  42. TEST_PKG = 'package'
  43. TEST_CLS = 'class'
  44. UNIQUE_KEY_1 = 'abc'
  45. UNIQUE_KEY_2 = 'def'
  46. def test_initialization(self):
  47. """Tests that JavaClass is initialized correctly."""
  48. test_node = class_dependency.JavaClass(self.TEST_PKG, self.TEST_CLS)
  49. self.assertEqual(test_node.name, f'{self.TEST_PKG}.{self.TEST_CLS}')
  50. self.assertEqual(test_node.package, self.TEST_PKG)
  51. self.assertEqual(test_node.class_name, self.TEST_CLS)
  52. def test_equality(self):
  53. """Tests that two JavaClasses with the same package+class are equal."""
  54. test_node = class_dependency.JavaClass(self.TEST_PKG, self.TEST_CLS)
  55. equal_node = class_dependency.JavaClass(self.TEST_PKG, self.TEST_CLS)
  56. self.assertEqual(test_node, equal_node)
  57. def test_add_nested_class(self):
  58. """Tests adding a single nested class to this class."""
  59. test_node = class_dependency.JavaClass(self.TEST_PKG, self.TEST_CLS)
  60. test_node.add_nested_class(self.UNIQUE_KEY_1)
  61. self.assertEqual(test_node.nested_classes, {self.UNIQUE_KEY_1})
  62. def test_add_nested_class_multiple(self):
  63. """Tests adding multiple nested classes to this class."""
  64. test_node = class_dependency.JavaClass(self.TEST_PKG, self.TEST_CLS)
  65. test_node.add_nested_class(self.UNIQUE_KEY_1)
  66. test_node.add_nested_class(self.UNIQUE_KEY_2)
  67. self.assertEqual(test_node.nested_classes,
  68. {self.UNIQUE_KEY_1, self.UNIQUE_KEY_2})
  69. def test_add_nested_class_duplicate(self):
  70. """Tests that adding the same nested class twice will not dupe."""
  71. test_node = class_dependency.JavaClass(self.TEST_PKG, self.TEST_CLS)
  72. test_node.add_nested_class(self.UNIQUE_KEY_1)
  73. test_node.add_nested_class(self.UNIQUE_KEY_1)
  74. self.assertEqual(test_node.nested_classes, {self.UNIQUE_KEY_1})
  75. class TestJavaClassDependencyGraph(unittest.TestCase):
  76. """Unit tests for JavaClassDependencyGraph.
  77. Full name: dependency_analysis.class_dependency.JavaClassDependencyGraph.
  78. """
  79. def setUp(self):
  80. """Sets up a new JavaClassDependencyGraph."""
  81. self.test_graph = class_dependency.JavaClassDependencyGraph()
  82. def test_create_node_from_key(self):
  83. """Tests that a jdeps name is correctly parsed into package + class."""
  84. created_node = self.test_graph.create_node_from_key(
  85. 'package.class$nested')
  86. self.assertEqual(created_node.package, 'package')
  87. self.assertEqual(created_node.class_name, 'class')
  88. self.assertEqual(created_node.name, 'package.class')
  89. if __name__ == '__main__':
  90. unittest.main()