tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

compile_java_tests.py (2817B)


      1 #!/usr/bin/env python3
      2 # Copyright 2024 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 """Tests for compile_java.py"""
      6 
      7 import collections
      8 import unittest
      9 
     10 import compile_java
     11 
     12 
     13 def _CreateData(class_annotation='',
     14                class_prefix='public ',
     15                nested_annotation='',
     16                suffix=''):
     17  return f"""\
     18 package pkg;
     19 
     20 import foo;
     21 import foo.Bar;
     22 import foo.Bar.Baz;
     23 
     24 {class_annotation}
     25 @SomeThing
     26 {class_prefix}class Foo {{
     27  {nested_annotation}
     28  public static class Nested {{ }}
     29 }}
     30 """ + suffix
     31 
     32 
     33 class CompileJavaTests(unittest.TestCase):
     34 
     35  def do_service_loader_test(self, **kwargs):
     36    data = _CreateData(**kwargs)
     37    services_map = collections.defaultdict(list)
     38    compile_java.ParseJavaSource(data, services_map)
     39    return dict(services_map)
     40 
     41  def do_classes_test(self, **kwargs):
     42    data = _CreateData(**kwargs)
     43    services_map = collections.defaultdict(list)
     44    _, class_names = compile_java.ParseJavaSource(data, services_map)
     45    return class_names
     46 
     47  def testServiceImpl_NoUses(self):
     48    services_map = self.do_service_loader_test()
     49    self.assertEqual({}, services_map)
     50 
     51  def testServiceImpl_LocalType(self):
     52    services_map = self.do_service_loader_test(
     53        class_annotation='@ServiceImpl(Local.class)')
     54    self.assertEqual({'pkg.Local': ['pkg.Foo']}, services_map)
     55 
     56  def testServiceImpl_ImportedTopType(self):
     57    services_map = self.do_service_loader_test(
     58        class_annotation='@ServiceImpl(Bar.class)')
     59    self.assertEqual({'foo.Bar': ['pkg.Foo']}, services_map)
     60 
     61  def testServiceImpl_ImportedNestedType1(self):
     62    services_map = self.do_service_loader_test(
     63        class_annotation='@ServiceImpl(Baz.class)')
     64    self.assertEqual({'foo.Bar$Baz': ['pkg.Foo']}, services_map)
     65 
     66  def testServiceImpl_ImportedNestedType2(self):
     67    services_map = self.do_service_loader_test(
     68        class_annotation='@ServiceImpl(Bar.Baz.class)')
     69    self.assertEqual({'foo.Bar$Baz': ['pkg.Foo']}, services_map)
     70 
     71  def testServiceImpl_NestedImpl(self):
     72    services_map = self.do_service_loader_test(
     73        class_annotation='@ServiceImpl(Baz.class)',
     74        nested_annotation='@ServiceImpl(Baz.class)')
     75    self.assertEqual({'foo.Bar$Baz': ['pkg.Foo', 'pkg.Foo$Nested']},
     76                     services_map)
     77 
     78  def testParseClasses(self):
     79    classes = self.do_classes_test(class_prefix='public final ',
     80                                   suffix='\nprivate class Extra {}')
     81    self.assertEqual(['Foo', 'Extra'], classes)
     82 
     83  def testErrorOnNonPublic(self):
     84 
     85    def inner():
     86      self.do_classes_test(class_annotation='@ServiceImpl(Local.class)',
     87                           class_prefix='')
     88 
     89    self.assertRaises(Exception, inner)
     90 
     91 if __name__ == '__main__':
     92  unittest.main()