Source code

Revision control

Copy as Markdown

Other Tools

#!/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()