mirror of https://github.com/kivy/pyjnius.git
105 lines
4.0 KiB
Python
105 lines
4.0 KiB
Python
from __future__ import print_function
|
|
from __future__ import division
|
|
from __future__ import absolute_import
|
|
import unittest
|
|
from jnius.reflect import autoclass
|
|
from jnius import cast
|
|
from jnius.reflect import identify_hierarchy
|
|
from jnius import find_javaclass
|
|
|
|
def identify_hierarchy_dict(cls, level, concrete=True):
|
|
return({ cls.getName() : level for cls,level in identify_hierarchy(cls, level, concrete) })
|
|
|
|
class ReflectTest(unittest.TestCase):
|
|
|
|
def assertContains(self, d, clsName):
|
|
self.assertTrue(clsName in d, clsName + " was not found in " + str(d))
|
|
|
|
def test_hierharchy_queue(self):
|
|
d = identify_hierarchy_dict(find_javaclass("java.util.Queue"), 0, False)
|
|
self.assertContains(d, "java.util.Queue")
|
|
# super interfaces
|
|
self.assertContains(d, "java.util.Collection")
|
|
self.assertContains(d, "java.lang.Iterable")
|
|
# all instantiated interfaces are rooted at Object
|
|
self.assertContains(d, "java.lang.Object")
|
|
maxLevel = max(d.values())
|
|
self.assertEqual(d["java.lang.Object"], maxLevel)
|
|
self.assertEqual(d["java.util.Queue"], 0)
|
|
|
|
def test_hierharchy_arraylist(self):
|
|
d = identify_hierarchy_dict(find_javaclass("java.util.ArrayList"), 0, True)
|
|
self.assertContains(d, "java.util.ArrayList")# concrete
|
|
self.assertContains(d, "java.util.AbstractCollection")# superclass
|
|
self.assertContains(d, "java.util.Collection")# interface
|
|
self.assertContains(d, "java.lang.Iterable")# interface
|
|
self.assertContains(d, "java.lang.Object")# root
|
|
maxLevel = max(d.values())
|
|
self.assertEqual(d["java.lang.Object"], maxLevel)
|
|
self.assertEqual(d["java.util.ArrayList"], 0)
|
|
|
|
def test_class(self):
|
|
lstClz = autoclass("java.util.List")
|
|
self.assertTrue("_class" in dir(lstClz))
|
|
self.assertEqual("java.util.List", lstClz._class.getName())
|
|
alstClz = autoclass("java.util.ArrayList")
|
|
self.assertTrue("_class" in dir(alstClz))
|
|
self.assertEqual("java.util.ArrayList", alstClz._class.getName())
|
|
self.assertEqual("java.util.ArrayList", alstClz().getClass().getName())
|
|
|
|
def test_stack(self):
|
|
Stack = autoclass('java.util.Stack')
|
|
stack = Stack()
|
|
self.assertIsInstance(stack, Stack)
|
|
stack.push('hello')
|
|
stack.push('world')
|
|
self.assertEqual(stack.pop(), 'world')
|
|
self.assertEqual(stack.pop(), 'hello')
|
|
|
|
def test_collection(self):
|
|
HashSet = autoclass('java.util.HashSet')
|
|
aset = HashSet()
|
|
aset.add('hello')
|
|
aset.add('world')
|
|
#check that the __len__ dunder is applied to a Collection not a List
|
|
self.assertEqual(2, len(aset))
|
|
#check that the __len__ dunder is applied to it cast as a Collection
|
|
self.assertEqual(2, len(cast("java.util.Collection", aset)))
|
|
|
|
def test_list_interface(self):
|
|
ArrayList = autoclass('java.util.ArrayList')
|
|
words = ArrayList()
|
|
words.add('hello')
|
|
words.add('world')
|
|
self.assertIsNotNone(words.stream())
|
|
self.assertIsNotNone(words.iterator())
|
|
|
|
def test_super_interface(self):
|
|
LinkedList = autoclass('java.util.LinkedList')
|
|
words = LinkedList()
|
|
words.add('hello')
|
|
words.add('world')
|
|
q = cast('java.util.Queue', words)
|
|
self.assertEqual(2, q.size())
|
|
self.assertEqual(2, len(q))
|
|
self.assertIsNotNone(q.iterator())
|
|
|
|
def test_super_object(self):
|
|
LinkedList = autoclass('java.util.LinkedList')
|
|
words = LinkedList()
|
|
words.hashCode()
|
|
|
|
def test_super_interface_object(self):
|
|
LinkedList = autoclass('java.util.LinkedList')
|
|
words = LinkedList()
|
|
q = cast('java.util.Queue', words)
|
|
q.hashCode()
|
|
|
|
def test_list_iteration(self):
|
|
ArrayList = autoclass('java.util.ArrayList')
|
|
words = ArrayList()
|
|
words.add('hello')
|
|
words.add('world')
|
|
self.assertEqual(['hello', 'world'], [word for word in words])
|
|
|