mirror of https://github.com/kivy/pyjnius.git
visibility of package_protected methods and fields should follow include_protected or include_private if the class is or is not in the same package as the autoclass start package
This commit is contained in:
parent
a15b686e14
commit
712dbfdd4a
|
@ -273,8 +273,11 @@ def autoclass(clsname, include_protected=True, include_private=True):
|
|||
continue
|
||||
if Modifier.isPrivate(method_modifier) and not include_private:
|
||||
continue
|
||||
if Modifier.isPackageProtected(method_modifier) and not include_protected and cls_start_packagename != cls_packagename:
|
||||
continue
|
||||
if Modifier.isPackageProtected(method_modifier):
|
||||
if cls_start_packagename == cls_packagename and not include_protected:
|
||||
continue
|
||||
if cls_start_packagename != cls_packagename and not include_private:
|
||||
continue
|
||||
name = methods_name[index]
|
||||
cls_methods[name].append((cls, method, level))
|
||||
|
||||
|
@ -297,8 +300,11 @@ def autoclass(clsname, include_protected=True, include_private=True):
|
|||
continue
|
||||
if Modifier.isPrivate(field_modifier) and not include_private:
|
||||
continue
|
||||
if Modifier.isPackageProtected(field_modifier) and not include_protected and cls_start_packagename != cls_packagename:
|
||||
continue
|
||||
if Modifier.isPackageProtected(field_modifier):
|
||||
if cls_start_packagename == cls_packagename and not include_protected:
|
||||
continue
|
||||
if cls_start_packagename != cls_packagename and not include_private:
|
||||
continue
|
||||
cls = JavaStaticField if static else JavaField
|
||||
classDict[field_name] = cls(sig)
|
||||
|
||||
|
|
|
@ -22,152 +22,94 @@ def py2_encode(uni):
|
|||
|
||||
|
||||
class VisibilityPackageProtectedTest(unittest.TestCase):
|
||||
"""This unittest verifies the correct visibility of package protected methods and fields.
|
||||
|
||||
def test_static_fields_package_protected(self):
|
||||
Test = autoclass('org.jnius.VisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.fieldStaticPublic, py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.fieldStaticPackageProtected, py2_encode("StaticPackageProtected"))
|
||||
Observe that org.jnius2.ChildVisibilityTest is not in the same package as
|
||||
it's parent class. If `include_protected` is True and `include_private`
|
||||
is False, only the package protected methods and fields in the child class
|
||||
should be visible.
|
||||
"""
|
||||
|
||||
def test_child_static_fields_package_protected(self):
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=True, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPublic'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticProtected'))
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.fieldStaticPublic, py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.fieldStaticProtected, py2_encode("StaticProtected"))
|
||||
|
||||
self.assertTrue(hasattr(Test, 'fieldChildStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'fieldChildStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldChildStaticProtected'))
|
||||
self.assertTrue(hasattr(Test, 'fieldChildStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldChildStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.fieldChildStaticPublic, py2_encode("ChildStaticPublic"))
|
||||
self.assertEqual(Test.fieldChildStaticPackageProtected, py2_encode("ChildStaticPackageProtected"))
|
||||
|
||||
def test_static_methods_package_protected(self):
|
||||
Test = autoclass('org.jnius.VisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.methodStaticPublic(), py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.methodStaticPackageProtected(), py2_encode("StaticPackageProtected"))
|
||||
self.assertEqual(Test.fieldChildStaticProtected, py2_encode("ChildStaticProtected"))
|
||||
|
||||
def test_child_static_methods_package_protected(self):
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=True, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPublic'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticProtected'))
|
||||
self.assertTrue(hasattr(Test, 'methodStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.methodStaticPublic(), py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.methodStaticProtected(), py2_encode("StaticProtected"))
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodChildStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'methodChildStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodChildStaticProtected'))
|
||||
self.assertTrue(hasattr(Test, 'methodChildStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodChildStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.methodChildStaticPublic(), py2_encode("ChildStaticPublic"))
|
||||
self.assertEqual(Test.methodChildStaticPackageProtected(), py2_encode("ChildStaticPackageProtected"))
|
||||
|
||||
def test_fields_package_protected(self):
|
||||
|
||||
Test = autoclass('org.jnius.VisibilityTest', include_protected=False, include_private=False)
|
||||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'fieldPublic'))
|
||||
self.assertTrue(hasattr(test, 'fieldPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldPrivate'))
|
||||
|
||||
self.assertEqual(test.fieldPublic, py2_encode("Public"))
|
||||
self.assertEqual(test.fieldPackageProtected, py2_encode("PackageProtected"))
|
||||
self.assertEqual(Test.methodChildStaticProtected(), py2_encode("ChildStaticProtected"))
|
||||
|
||||
def test_child_fields_package_protected(self):
|
||||
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=True, include_private=False)
|
||||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'fieldPublic'))
|
||||
self.assertFalse(hasattr(test, 'fieldPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldProtected'))
|
||||
self.assertTrue(hasattr(test, 'fieldProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldPrivate'))
|
||||
|
||||
self.assertEqual(test.fieldPublic, py2_encode("Public"))
|
||||
self.assertEqual(test.fieldProtected, py2_encode("Protected"))
|
||||
|
||||
self.assertTrue(hasattr(test, 'fieldChildPublic'))
|
||||
self.assertTrue(hasattr(test, 'fieldChildPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldChildProtected'))
|
||||
self.assertTrue(hasattr(test, 'fieldChildProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldChildPrivate'))
|
||||
|
||||
self.assertEqual(test.fieldChildPublic, py2_encode("ChildPublic"))
|
||||
self.assertEqual(test.fieldChildPackageProtected, py2_encode("ChildPackageProtected"))
|
||||
|
||||
def test_methods_package_protected(self):
|
||||
|
||||
Test = autoclass('org.jnius.VisibilityTest', include_protected=False, include_private=False)
|
||||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodPublic'))
|
||||
self.assertTrue(hasattr(test, 'methodPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodPrivate'))
|
||||
|
||||
self.assertEqual(test.methodPublic(), py2_encode("Public"))
|
||||
self.assertEqual(test.methodPackageProtected(), py2_encode("PackageProtected"))
|
||||
self.assertEqual(test.fieldChildProtected, py2_encode("ChildProtected"))
|
||||
|
||||
def test_child_methods_package_protected(self):
|
||||
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=True, include_private=False)
|
||||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodPublic'))
|
||||
self.assertFalse(hasattr(test, 'methodPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodProtected'))
|
||||
self.assertTrue(hasattr(test, 'methodProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodPrivate'))
|
||||
|
||||
self.assertEqual(test.methodPublic(), py2_encode("Public"))
|
||||
self.assertEqual(test.methodProtected(), py2_encode("Protected"))
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodChildPublic'))
|
||||
self.assertTrue(hasattr(test, 'methodChildPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodChildProtected'))
|
||||
self.assertTrue(hasattr(test, 'methodChildProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodChildPrivate'))
|
||||
|
||||
self.assertEqual(test.methodChildPublic(), py2_encode("ChildPublic"))
|
||||
self.assertEqual(test.methodChildPackageProtected(), py2_encode("ChildPackageProtected"))
|
||||
|
||||
def test_static_multi_methods(self):
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodStaticMultiArgs'))
|
||||
self.assertTrue(isinstance(Test.methodStaticMultiArgs, JavaStaticMethod))
|
||||
|
||||
self.assertTrue(Test.methodStaticMultiArgs(True))
|
||||
with self.assertRaises(JavaException):
|
||||
Test.methodStaticMultiArgs(True, False)
|
||||
with self.assertRaises(JavaException):
|
||||
Test.methodStaticMultiArgs(True, False, True)
|
||||
|
||||
def test_multi_methods(self):
|
||||
Test = autoclass('org.jnius2.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodMultiArgs'))
|
||||
self.assertTrue(isinstance(Test.methodMultiArgs, JavaMethod))
|
||||
|
||||
self.assertTrue(test.methodMultiArgs(True))
|
||||
with self.assertRaises(JavaException):
|
||||
test.methodMultiArgs(True, False)
|
||||
with self.assertRaises(JavaException):
|
||||
test.methodMultiArgs(True, False, True)
|
||||
self.assertEqual(test.methodChildProtected(), py2_encode("ChildProtected"))
|
||||
|
|
|
@ -27,61 +27,55 @@ class VisibilityPublicOnlyTest(unittest.TestCase):
|
|||
Test = autoclass('org.jnius.VisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.fieldStaticPublic, py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.fieldStaticPackageProtected, py2_encode("StaticPackageProtected"))
|
||||
|
||||
def test_child_static_fields_public_only(self):
|
||||
Test = autoclass('org.jnius.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'fieldStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.fieldStaticPublic, py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.fieldStaticPackageProtected, py2_encode("StaticPackageProtected"))
|
||||
|
||||
self.assertTrue(hasattr(Test, 'fieldChildStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'fieldChildStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldChildStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldChildStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'fieldChildStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.fieldChildStaticPublic, py2_encode("ChildStaticPublic"))
|
||||
self.assertEqual(Test.fieldChildStaticPackageProtected, py2_encode("ChildStaticPackageProtected"))
|
||||
|
||||
def test_static_methods_public_only(self):
|
||||
Test = autoclass('org.jnius.VisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.methodStaticPublic(), py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.methodStaticPackageProtected(), py2_encode("StaticPackageProtected"))
|
||||
|
||||
def test_child_static_methods_public_only(self):
|
||||
Test = autoclass('org.jnius.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'methodStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.methodStaticPublic(), py2_encode("StaticPublic"))
|
||||
self.assertEqual(Test.methodStaticPackageProtected(), py2_encode("StaticPackageProtected"))
|
||||
|
||||
self.assertTrue(hasattr(Test, 'methodChildStaticPublic'))
|
||||
self.assertTrue(hasattr(Test, 'methodChildStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodChildStaticPackageProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodChildStaticProtected'))
|
||||
self.assertFalse(hasattr(Test, 'methodChildStaticPrivate'))
|
||||
|
||||
self.assertEqual(Test.methodChildStaticPublic(), py2_encode("ChildStaticPublic"))
|
||||
self.assertEqual(Test.methodChildStaticPackageProtected(), py2_encode("ChildStaticPackageProtected"))
|
||||
|
||||
def test_fields_public_only(self):
|
||||
|
||||
|
@ -89,12 +83,11 @@ class VisibilityPublicOnlyTest(unittest.TestCase):
|
|||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'fieldPublic'))
|
||||
self.assertTrue(hasattr(test, 'fieldPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldPrivate'))
|
||||
|
||||
self.assertEqual(test.fieldPublic, py2_encode("Public"))
|
||||
self.assertEqual(test.fieldPackageProtected, py2_encode("PackageProtected"))
|
||||
|
||||
def test_child_fields_public_only(self):
|
||||
|
||||
|
@ -102,20 +95,18 @@ class VisibilityPublicOnlyTest(unittest.TestCase):
|
|||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'fieldPublic'))
|
||||
self.assertTrue(hasattr(test, 'fieldPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldPrivate'))
|
||||
|
||||
self.assertEqual(test.fieldPublic, py2_encode("Public"))
|
||||
self.assertEqual(test.fieldPackageProtected, py2_encode("PackageProtected"))
|
||||
|
||||
self.assertTrue(hasattr(test, 'fieldChildPublic'))
|
||||
self.assertTrue(hasattr(test, 'fieldChildPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldChildPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldChildProtected'))
|
||||
self.assertFalse(hasattr(test, 'fieldChildPrivate'))
|
||||
|
||||
self.assertEqual(test.fieldChildPublic, py2_encode("ChildPublic"))
|
||||
self.assertEqual(test.fieldChildPackageProtected, py2_encode("ChildPackageProtected"))
|
||||
|
||||
def test_methods_public_only(self):
|
||||
|
||||
|
@ -123,12 +114,11 @@ class VisibilityPublicOnlyTest(unittest.TestCase):
|
|||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodPublic'))
|
||||
self.assertTrue(hasattr(test, 'methodPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodPrivate'))
|
||||
|
||||
self.assertEqual(test.methodPublic(), py2_encode("Public"))
|
||||
self.assertEqual(test.methodPackageProtected(), py2_encode("PackageProtected"))
|
||||
|
||||
def test_child_methods_public_only(self):
|
||||
|
||||
|
@ -136,20 +126,18 @@ class VisibilityPublicOnlyTest(unittest.TestCase):
|
|||
test = Test()
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodPublic'))
|
||||
self.assertTrue(hasattr(test, 'methodPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodPrivate'))
|
||||
|
||||
self.assertEqual(test.methodPublic(), py2_encode("Public"))
|
||||
self.assertEqual(test.methodPackageProtected(), py2_encode("PackageProtected"))
|
||||
|
||||
self.assertTrue(hasattr(test, 'methodChildPublic'))
|
||||
self.assertTrue(hasattr(test, 'methodChildPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodChildPackageProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodChildProtected'))
|
||||
self.assertFalse(hasattr(test, 'methodChildPrivate'))
|
||||
|
||||
self.assertEqual(test.methodChildPublic(), py2_encode("ChildPublic"))
|
||||
self.assertEqual(test.methodChildPackageProtected(), py2_encode("ChildPackageProtected"))
|
||||
|
||||
def test_static_multi_methods(self):
|
||||
Test = autoclass('org.jnius.ChildVisibilityTest', include_protected=False, include_private=False)
|
||||
|
|
Loading…
Reference in New Issue