RandomSec/lib/jython-2.5.1/test/test_java_list_delegate.py

182 lines
5.0 KiB
Python
Raw Normal View History

from java.util import ArrayList, List, Vector
from copy import copy
import unittest
import test.test_support
class CollectionProxyTest(unittest.TestCase):
def _perform_op(self, value, op_func):
"""
Perform an operation
value - the value to operate on
op_func - the function that applies the operation to value
Returns:
the result of calling op_func, OR the exception that was raised in op_func
"""
try:
return op_func(value)
except Exception, e:
return type(e)
def check_list(self, control, results, initial):
for result in results:
try:
len(result)
except:
print result
self.assertEquals(len(control), len(result), "%s is wrong for %s" % (type(result), initial))
for pvalue, jvalue in zip(control, result):
self.assertEquals(pvalue, jvalue)
def _list_op_test(self, initial_value, op_func, check_value):
"""
Tests a list operation
Ensures that performing an operation on:
- a python list
- a java.util.List instance
givens the same result in both cases
"""
lists = [list(initial_value), ArrayList(initial_value), Vector(initial_value)]
results = [self._perform_op(l, op_func) for l in lists]
self.check_list(lists[0], lists[1:], initial_value)
if check_value or not isinstance(results[0], list):
for r in results[1:]:
self.assertEquals(results[0], r)
else:
self.check_list(results[0], results[1:], initial_value)
def test_get_integer(self):
initial_value = range(0, 5)
for i in xrange(-7, 7):
self._list_op_test(initial_value, lambda xs: xs[i], True)
def test_set_integer(self):
initial_value = range(0, 5)
def make_op_func(index):
def _f(xs):
xs[index] = 100
return _f
for i in xrange(-7, 7):
self._list_op_test(initial_value, make_op_func(i), True)
def test_set_slice(self):
initial_value = range(0, 10)
def make_op_func(i, j, k, v):
def _f(xs):
xs[i:j:k] = v
return _f
for i in xrange(-12, 12):
for j in xrange(-12, 12):
for k in xrange(-12, 12):
self._list_op_test(initial_value, make_op_func(i, j, k, []), True)
self._list_op_test(initial_value, make_op_func(i, j, k, range(0,2)), True)
self._list_op_test(initial_value, make_op_func(i, j, k, range(0,4)), True)
self._list_op_test(initial_value, make_op_func(i, j, k, xrange(0,2)), True)
def test_del_integer(self):
initial_value = range(0,5)
def make_op_func(index):
def _f(xs):
del xs[index]
return _f
for i in xrange(-7, 7):
self._list_op_test(initial_value, make_op_func(i), True)
def test_del_slice(self):
initial_value = range(0,10)
def make_op_func(i, j, k):
def _f(xs):
del xs[i:j:k]
return _f
for i in xrange(-12, 12):
for j in xrange(-12, 12):
for k in xrange(-12, 12):
self._list_op_test(initial_value, make_op_func(i, j, k), True)
def test_len(self):
jlist = ArrayList()
jlist.addAll(range(0, 10))
self.assert_(len(jlist) == 10)
def test_iter(self):
jlist = ArrayList()
jlist.addAll(range(0, 10))
i = iter(jlist)
x = list(i)
self.assert_(x == range(0, 10))
def test_override_len(self):
class MyList (ArrayList):
def __len__(self):
return self.size() + 1;
m = MyList()
m.addAll(range(0,10))
self.assert_(len(m) == 11)
def test_override_iter(self):
class MyList (ArrayList):
def __iter__(self):
return iter(self.subList(0, self.size() - 1));
m = MyList()
m.addAll(range(0,10))
i = iter(m)
x = list(i)
self.assert_(x == range(0, 9))
def test_override_getsetdelitem(self):
# Create an ArrayList subclass that provides some silly overrides for get/set/del item
class MyList (ArrayList):
def __getitem__(self, key):
return self.get(key) * 2;
def __setitem__(self, key, value):
return self.set(key, value * 2);
def __delitem__(self, key):
self.add(84)
m = MyList()
m.addAll(range(0,10))
self.assert_(m[1] == 2)
self.assert_(m.get(1) == 1)
m[0] = 3
self.assert_(m.get(0) == 6)
self.assert_(m[0] == 12)
del m[0]
self.assert_(m.size() == 11)
self.assert_(m.get(10) == 84)
def test_main():
test.test_support.run_unittest(CollectionProxyTest)
if __name__ == "__main__":
test_main()