d0df704d8a
added python.path vm arg to startup script fixed infinite loop in unwrap() when displaying sequences of sequences git-svn-id: http://google-refine.googlecode.com/svn/trunk@509 7d457c2a-affb-35e4-300a-418c747d4874
168 lines
5.8 KiB
Python
168 lines
5.8 KiB
Python
from javatests import Dict2JavaTest
|
|
import unittest, test.test_support
|
|
|
|
# Test the java.util.Map interface of org.python.core.PyDictionary.
|
|
# This tests the functionality of being able to pass a dictionaries
|
|
# created in Jython to a java method, and the ability to manipulate
|
|
# the dictionary object once in Java code. The Java Dict2JavaTest is
|
|
# used to run some tests in Java code since they cannot be done on
|
|
# the Jython side.
|
|
|
|
class JythonMapInJavaTest(unittest.TestCase):
|
|
|
|
def checkcontains(self, keys):
|
|
for k in keys:
|
|
self.failUnless(k in self.testdict)
|
|
self.failUnless(self.testmap.containsKey(k))
|
|
|
|
def checkdoesntcontain(self, keys):
|
|
for k in keys:
|
|
self.failIf(k in self.testdict)
|
|
self.failIf(self.testmap.containsKey(k))
|
|
|
|
def checkvalues(self, *keyvalues):
|
|
for k, v in keyvalues:
|
|
self.assertEquals(v, self.testdict[k])
|
|
|
|
def checksize(self, correctsize):
|
|
self.assertEquals(self.testmap.size(), len(self.testdict))
|
|
self.assertEquals(self.testmap.size(), correctsize)
|
|
|
|
def maketestdict(self, base):
|
|
self.testdict = base
|
|
self.testmap = Dict2JavaTest(self.testdict)
|
|
|
|
def test_basic_map_operations(self):
|
|
self.maketestdict({"a":"x", "b":"y", "c":"z", "d": None, None: "foo"})
|
|
|
|
# Make sure we see it on the java side
|
|
self.assertEquals(len(self.testdict), self.testmap.size())
|
|
self.checkcontains('abcd')
|
|
|
|
# Add {"e":"1", "f":null, "g":"2"} using the Map.putAll method
|
|
oldlen = len(self.testdict)
|
|
self.failUnless(self.testmap.test_putAll_efg())
|
|
self.checksize(oldlen + 3)
|
|
self.checkvalues(('e', '1'), ('f', None), ('g', '2'))
|
|
|
|
# test Map.get method, get "g" and "d" test will throw an exception if fail
|
|
self.failUnless(self.testmap.test_get_gd())
|
|
|
|
# remove elements with keys "a" and "c" with the Map.remove method
|
|
oldlen = len(self.testdict)
|
|
self.failUnless(self.testmap.test_remove_ac())
|
|
self.checksize(oldlen - 2)
|
|
self.checkdoesntcontain('ac')
|
|
|
|
# test Map.put method, adds {"h":null} and {"i": Integer(3)} and {"g": "3"}
|
|
# "g" replaces a previous value of "2"
|
|
oldlen = len(self.testdict)
|
|
self.failUnless(self.testmap.test_put_hig())
|
|
self.checksize(oldlen + 2)
|
|
self.checkvalues(('h', None), ('i', 3), ('g', '3'))
|
|
|
|
self.failUnless(self.testmap.test_java_mapentry())
|
|
|
|
def test_entryset(self):
|
|
self.maketestdict({"h":"x", "b":"y", "g":"z", "e": None, None: "foo", "d":7})
|
|
set = self.testmap.entrySet()
|
|
self.checksize(set.size())
|
|
|
|
# Make sure the set is consistent with the self.testdictionary
|
|
for entry in set:
|
|
self.failUnless(self.testdict.has_key(entry.getKey()))
|
|
self.assertEquals(self.testdict[entry.getKey()], entry.getValue())
|
|
self.failUnless(set.contains(entry))
|
|
|
|
# make sure changes in the set are reflected in the self.testdictionary
|
|
for entry in set:
|
|
if entry.getKey() == "h":
|
|
hentry = entry
|
|
if entry.getKey() == "e":
|
|
eentry = entry
|
|
|
|
# Make sure nulls and non Map.Entry object do not match anything in the set
|
|
self.failUnless(self.testmap.test_entry_set_nulls())
|
|
|
|
self.failUnless(set.remove(eentry))
|
|
self.failIf(set.contains(eentry))
|
|
self.failIf("e" in self.testdict)
|
|
self.failUnless(set.remove(hentry))
|
|
self.failIf(set.contains(hentry))
|
|
self.failIf("h" in self.testdict)
|
|
self.checksize(set.size())
|
|
oldlen = set.size()
|
|
self.failIf(set.remove(eentry))
|
|
self.checksize(oldlen)
|
|
|
|
# test Set.removeAll method
|
|
oldlen = len(self.testdict)
|
|
elist = [ entry for entry in set if entry.key in ["b", "g", "d", None]]
|
|
self.assertEqual(len(elist), 4)
|
|
self.failUnless(set.removeAll(elist))
|
|
self.checkdoesntcontain('bdg')
|
|
# can't check for None in self.testmap, so do it just for testdict
|
|
self.failIf(None in self.testdict)
|
|
self.checksize(oldlen - 4)
|
|
|
|
itr = set.iterator()
|
|
while (itr.hasNext()):
|
|
val = itr.next()
|
|
itr.remove()
|
|
self.failUnless(set.isEmpty())
|
|
self.checksize(0)
|
|
|
|
def test_keyset(self):
|
|
self.maketestdict({})
|
|
self.testmap.put("foo", "bar")
|
|
self.testmap.put("num", 5)
|
|
self.testmap.put(None, 4.3)
|
|
self.testmap.put(34, None)
|
|
keyset = self.testmap.keySet()
|
|
self.checksize(4)
|
|
|
|
self.failUnless(keyset.remove(None))
|
|
self.checksize(3)
|
|
self.failIf(keyset.contains(None))
|
|
self.failUnless(keyset.remove(34))
|
|
self.checksize(2)
|
|
self.failIf(keyset.contains(34))
|
|
itr = keyset.iterator()
|
|
while itr.hasNext():
|
|
key = itr.next()
|
|
if key == "num":
|
|
itr.remove()
|
|
self.checksize(1)
|
|
|
|
def test_values(self):
|
|
self.maketestdict({})
|
|
self.testmap.put("foo", "bar")
|
|
self.testmap.put("num", "bar")
|
|
self.testmap.put(None, 3.2)
|
|
self.testmap.put(34, None)
|
|
values = self.testmap.values()
|
|
self.assertEquals(values.size(), len(self.testdict))
|
|
self.checksize(4)
|
|
|
|
self.failUnless(values.remove(None))
|
|
self.checksize(3)
|
|
self.assertEquals(values.size(), len(self.testdict))
|
|
|
|
itr = values.iterator()
|
|
while itr.hasNext():
|
|
val = itr.next()
|
|
if val == "bar":
|
|
itr.remove()
|
|
self.checksize(1)
|
|
self.assertEquals(values.size(), len(self.testdict))
|
|
|
|
values.clear()
|
|
self.failUnless(values.isEmpty())
|
|
self.checksize(0)
|
|
|
|
def test_main():
|
|
test.test_support.run_unittest(JythonMapInJavaTest)
|
|
|
|
if __name__ == '__main__':
|
|
test_main()
|