pyjnius/tests/test_proxy.py

143 lines
3.5 KiB
Python

from jnius import autoclass, java_method, PythonJavaClass, cast
print '1: declare a TestImplem that implement Collection'
class TestImplemIterator(PythonJavaClass):
__javainterfaces__ = [
#'java/util/Iterator',
'java/util/ListIterator', ]
def __init__(self, collection, index=0):
super(TestImplemIterator, self).__init__()
self.collection = collection
self.index = index
@java_method('()Z')
def hasNext(self):
return self.index < len(self.collection.data) - 1
@java_method('()Ljava/lang/Object;')
def next(self):
obj = self.collection.data[self.index]
self.index += 1
return obj
@java_method('()Z')
def hasPrevious(self):
return self.index >= 0
@java_method('()Ljava/lang/Object;')
def previous(self):
self.index -= 1
obj = self.collection.data[self.index]
return obj
@java_method('()I')
def previousIndex(self):
return self.index - 1
@java_method('()Ljava/lang/String;')
def toString(self):
return repr(self)
@java_method('(I)Ljava/lang/Object;')
def get(self, index):
return self.collection.data[index - 1]
@java_method('(Ljava/lang/Object;)V')
def set(self, obj):
self.collection.data[self.index - 1] = obj
class TestImplem(PythonJavaClass):
__javainterfaces__ = ['java/util/List']
def __init__(self, *args):
super(TestImplem, self).__init__(*args)
self.data = list(args)
@java_method('()Ljava/util/Iterator;')
def iterator(self):
it = TestImplemIterator(self)
return it
@java_method('()Ljava/lang/String;')
def toString(self):
return repr(self)
@java_method('()I')
def size(self):
return len(self.data)
@java_method('(I)Ljava/lang/Object;')
def get(self, index):
return self.data[index]
@java_method('(ILjava/lang/Object;)Ljava/lang/Object;')
def set(self, index, obj):
old_object = self.data[index]
self.data[index] = obj
return old_object
@java_method('()[Ljava/lang/Object;')
def toArray(self):
return self.data
@java_method('()Ljava/util/ListIterator;')
def listIterator(self):
it = TestImplemIterator(self)
return it
@java_method('(I)Ljava/util/ListIterator;',
name='ListIterator')
def listIteratorI(self, index):
it = TestImplemIterator(self, index)
return it
print '2: instanciate the class, with some data'
a = TestImplem(*range(10))
print a
print dir(a)
print 'tries to get a ListIterator'
iterator = a.listIterator()
print 'iterator is', iterator
while iterator.hasNext():
print 'at index', iterator.index, 'value is', iterator.next()
print '3: Do cast to a collection'
a2 = cast('java/util/Collection', a.j_self)
print a2
print '4: Try few method on the collection'
Collections = autoclass('java.util.Collections')
#print Collections.enumeration(a)
#print Collections.enumeration(a)
ret = Collections.max(a)
print "reverse"
print Collections.reverse(a)
print a.data
print "before swap"
print Collections.swap(a, 2, 3)
print "after swap"
print a.data
print "rotate"
print Collections.rotate(a, 5)
print a.data
print 'Order of data before shuffle()', a.data
print Collections.shuffle(a)
print 'Order of data after shuffle()', a.data
# XXX We have issues for methosd with multiple signature
print '-> Collections.max(a)'
print Collections.max(a2)
#print '-> Collections.shuffle(a)'
#print Collections.shuffle(a2)