File: compile_java_tests.py

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (92 lines) | stat: -rwxr-xr-x 2,817 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for compile_java.py"""

import collections
import unittest

import compile_java


def _CreateData(class_annotation='',
                class_prefix='public ',
                nested_annotation='',
                suffix=''):
  return f"""\
package pkg;

import foo;
import foo.Bar;
import foo.Bar.Baz;

{class_annotation}
@SomeThing
{class_prefix}class Foo {{
  {nested_annotation}
  public static class Nested {{ }}
}}
""" + suffix


class CompileJavaTests(unittest.TestCase):

  def do_service_loader_test(self, **kwargs):
    data = _CreateData(**kwargs)
    services_map = collections.defaultdict(list)
    compile_java.ParseJavaSource(data, services_map)
    return dict(services_map)

  def do_classes_test(self, **kwargs):
    data = _CreateData(**kwargs)
    services_map = collections.defaultdict(list)
    _, class_names = compile_java.ParseJavaSource(data, services_map)
    return class_names

  def testServiceImpl_NoUses(self):
    services_map = self.do_service_loader_test()
    self.assertEqual({}, services_map)

  def testServiceImpl_LocalType(self):
    services_map = self.do_service_loader_test(
        class_annotation='@ServiceImpl(Local.class)')
    self.assertEqual({'pkg.Local': ['pkg.Foo']}, services_map)

  def testServiceImpl_ImportedTopType(self):
    services_map = self.do_service_loader_test(
        class_annotation='@ServiceImpl(Bar.class)')
    self.assertEqual({'foo.Bar': ['pkg.Foo']}, services_map)

  def testServiceImpl_ImportedNestedType1(self):
    services_map = self.do_service_loader_test(
        class_annotation='@ServiceImpl(Baz.class)')
    self.assertEqual({'foo.Bar$Baz': ['pkg.Foo']}, services_map)

  def testServiceImpl_ImportedNestedType2(self):
    services_map = self.do_service_loader_test(
        class_annotation='@ServiceImpl(Bar.Baz.class)')
    self.assertEqual({'foo.Bar$Baz': ['pkg.Foo']}, services_map)

  def testServiceImpl_NestedImpl(self):
    services_map = self.do_service_loader_test(
        class_annotation='@ServiceImpl(Baz.class)',
        nested_annotation='@ServiceImpl(Baz.class)')
    self.assertEqual({'foo.Bar$Baz': ['pkg.Foo', 'pkg.Foo$Nested']},
                     services_map)

  def testParseClasses(self):
    classes = self.do_classes_test(class_prefix='public final ',
                                   suffix='\nprivate class Extra {}')
    self.assertEqual(['Foo', 'Extra'], classes)

  def testErrorOnNonPublic(self):

    def inner():
      self.do_classes_test(class_annotation='@ServiceImpl(Local.class)',
                           class_prefix='')

    self.assertRaises(Exception, inner)

if __name__ == '__main__':
  unittest.main()