From: Philip C. <cro...@se...> - 2007-05-08 18:21:43
|
Hi I've been trying to get the csv module working from the patch that was submitted a while back. I think I mostly have it but am having troubles with the test cases using assertRaises, probably due to my not understanding something about exceptions translating from java to jython. What should I pass into assertRaises so that it will catch the thrown exception and pass the test? As an example, suppose I have a java class: package org.python.modules; import org.python.core.Py; import org.python.core.PyException; import org.python.core.PyString; public class Dummy { public static void justThrowTheError(String message) { throw Error(message); } public static PyException Error(String message) { return Py.makeException(Error, new PyString(message)); } public static PyString Error = new PyString("dummy.Error"); } and in my python testcase I do this: import sys import unittest import Dummy from test import test_support class TestDummy(unittest.TestCase): def test_throwJavaError(self): self.assertRaises(Dummy.Error, Dummy.justThrowTheError('test')) def test_main(): mod = sys.modules[__name__] test_support.run_unittest(getattr(mod, 'TestDummy')) if __name__ == '__main__': test_main() which seems right, but when I run it, I get this, which seems like the test case is failing because my code threw the error that I was asserting it should throw! rabbit:~/dev/jython/jython/dist crotwell$ java -jar jython.jar - Dpython.home=. Lib/test/test_dummy.py test_throwJavaError (__main__.TestDummy) ... ERROR ====================================================================== ERROR: test_throwJavaError (__main__.TestDummy) ---------------------------------------------------------------------- Traceback (most recent call last): File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/unittest.py", line 213, in __call__ testMethod() File "Lib/test/test_dummy.py", line 10, in test_throwJavaError self.assertRaises(Dummy.Error, Dummy.justThrowTheError('test')) dummy.Error: test ---------------------------------------------------------------------- Ran 1 test in 0.104s FAILED (errors=1) Traceback (innermost last): File "Lib/test/test_dummy.py", line 17, in ? File "Lib/test/test_dummy.py", line 14, in test_main File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/test/test_support.py", line 187, in run_unittest File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/test/test_support.py", line 182, in run_suite TestFailed: Traceback (most recent call last): File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/unittest.py", line 213, in __call__ testMethod() File "Lib/test/test_dummy.py", line 10, in test_throwJavaError self.assertRaises(Dummy.Error, Dummy.justThrowTheError('test')) dummy.Error: test thanks, Philip |
From: A.M. K. <am...@am...> - 2007-05-08 18:50:50
|
On Tue, May 08, 2007 at 02:20:55PM -0400, Philip Crotwell wrote: > self.assertRaises(Dummy.Error, Dummy.justThrowTheError('test')) I think this should be something like self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') You can't call the justThrowTheError() method in your test code; the assertRaises() method will call it and pass in the argument, catching the exception. --amk |
From: Philip C. <cro...@se...> - 2007-05-08 20:03:34
|
You are right, I should have put the 'test' as a separate arg, but the result is the same, the assertRaises still fails with an error. A better way to ask my question is with this code. Why is the "except" clause not catching the Dummy.Error exception? >>> import Dummy >>> try: ... Dummy.justThrowTheError('test') ... except Dummy.Error: ... print 'caught Dummy.Error' ... Traceback (innermost last): File "<console>", line 2, in ? dummy.Error: test thanks, Philip rabbit:~/dev/jython/jython/dist crotwell$ java -jar jython.jar - Dpython.home=. Lib/test/test_dummy.py test_throwJavaError (__main__.TestDummy) ... ERROR ====================================================================== ERROR: test_throwJavaError (__main__.TestDummy) ---------------------------------------------------------------------- Traceback (most recent call last): File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/unittest.py", line 213, in __call__ testMethod() File "Lib/test/test_dummy.py", line 10, in test_throwJavaError self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/unittest.py", line 273, in failUnlessRaises apply(callableObj, args, kwargs) dummy.Error: test ---------------------------------------------------------------------- Ran 1 test in 0.102s FAILED (errors=1) Traceback (innermost last): File "Lib/test/test_dummy.py", line 18, in ? File "Lib/test/test_dummy.py", line 15, in test_main File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/test/test_support.py", line 187, in run_unittest File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/test/test_support.py", line 182, in run_suite TestFailed: Traceback (most recent call last): File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/unittest.py", line 213, in __call__ testMethod() File "Lib/test/test_dummy.py", line 10, in test_throwJavaError self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ Lib/unittest.py", line 273, in failUnlessRaises apply(callableObj, args, kwargs) dummy.Error: test On May 8, 2007, at 2:43 PM, A.M. Kuchling wrote: > On Tue, May 08, 2007 at 02:20:55PM -0400, Philip Crotwell wrote: >> self.assertRaises(Dummy.Error, Dummy.justThrowTheError >> ('test')) > > I think this should be something like > > self.assertRaises(Dummy.Error, Dummy.justThrowTheError, > 'test') > > You can't call the justThrowTheError() method in your test code; the > assertRaises() method will call it and pass in the argument, catching > the exception. > > --amk > > ---------------------------------------------------------------------- > --- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Jython-dev mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-dev |
From: Charlie G. <cha...@gm...> - 2007-05-10 17:36:38
|
It's not being caught because it sees Dummy.Error as the static function you defined. If you delete Dummy.Error and move the makeException code into justThrowTheError the except will work properly. Charlie On 5/8/07, Philip Crotwell <cro...@se...> wrote: > > You are right, I should have put the 'test' as a separate arg, but > the result is the same, the assertRaises still fails with an error. > > A better way to ask my question is with this code. Why is the > "except" clause not catching the Dummy.Error exception? > > >>> import Dummy > >>> try: > ... Dummy.justThrowTheError('test') > ... except Dummy.Error: > ... print 'caught Dummy.Error' > ... > Traceback (innermost last): > File "<console>", line 2, in ? > dummy.Error: test > > thanks, > Philip > > rabbit:~/dev/jython/jython/dist crotwell$ java -jar jython.jar - > Dpython.home=. Lib/test/test_dummy.py > test_throwJavaError (__main__.TestDummy) ... ERROR > > ====================================================================== > ERROR: test_throwJavaError (__main__.TestDummy) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ > Lib/unittest.py", line 213, in __call__ > testMethod() > File "Lib/test/test_dummy.py", line 10, in test_throwJavaError > self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') > File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ > Lib/unittest.py", line 273, in failUnlessRaises > apply(callableObj, args, kwargs) > dummy.Error: test > > ---------------------------------------------------------------------- > Ran 1 test in 0.102s > > FAILED (errors=1) > Traceback (innermost last): > File "Lib/test/test_dummy.py", line 18, in ? > File "Lib/test/test_dummy.py", line 15, in test_main > File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ > Lib/test/test_support.py", line 187, in run_unittest > File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ > Lib/test/test_support.py", line 182, in run_suite > TestFailed: Traceback (most recent call last): > File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ > Lib/unittest.py", line 213, in __call__ > testMethod() > File "Lib/test/test_dummy.py", line 10, in test_throwJavaError > self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') > File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ > Lib/unittest.py", line 273, in failUnlessRaises > apply(callableObj, args, kwargs) > dummy.Error: test > > On May 8, 2007, at 2:43 PM, A.M. Kuchling wrote: > > > On Tue, May 08, 2007 at 02:20:55PM -0400, Philip Crotwell wrote: > >> self.assertRaises(Dummy.Error, Dummy.justThrowTheError > >> ('test')) > > > > I think this should be something like > > > > self.assertRaises(Dummy.Error, Dummy.justThrowTheError, > > 'test') > > > > You can't call the justThrowTheError() method in your test code; the > > assertRaises() method will call it and pass in the argument, catching > > the exception. > > > > --amk > > > > ---------------------------------------------------------------------- > > --- > > This SF.net email is sponsored by DB2 Express > > Download DB2 Express C - the FREE version of DB2 express and take > > control of your XML. No limits. Just data. Click to get it now. > > http://sourceforge.net/powerbar/db2/ > > _______________________________________________ > > Jython-dev mailing list > > Jyt...@li... > > https://lists.sourceforge.net/lists/listinfo/jython-dev > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Jython-dev mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-dev > |
From: Philip C. <cro...@se...> - 2007-06-05 01:47:19
|
Hi Making this change works, but I don't think I can change _csv in the same way as dummy because csv.py uses the method Error from _csv on line 53: raise Error(str(e)) But then in test_csv.py, there is code like: self.assertRaises(csv.Error, ctor, arg, 'foo') making me think that they expect the Error field to be exposed. And that is really want someone using csv wants exposed anyway, so they can "except csv.Error:". So, from what I can tell, in order for _csv.java to be compatible with csv.py, _csv.java has to expose both the method Error(string) and the field Error. I would argue that csv.py is badly coded, since the Error() method that it uses could easily be called something else and need never be called outside of cvs.py. But, given that csv.py is the way it is, should jython be able to expose a method and a field of the same name? Philip On May 10, 2007, at 1:36 PM, Charlie Groves wrote: > It's not being caught because it sees Dummy.Error as the static > function you defined. If you delete Dummy.Error and move the > makeException code into justThrowTheError the except will work > properly. > > Charlie > > On 5/8/07, Philip Crotwell <cro...@se...> wrote: >> >> You are right, I should have put the 'test' as a separate arg, but >> the result is the same, the assertRaises still fails with an error. >> >> A better way to ask my question is with this code. Why is the >> "except" clause not catching the Dummy.Error exception? >> >> >>> import Dummy >> >>> try: >> ... Dummy.justThrowTheError('test') >> ... except Dummy.Error: >> ... print 'caught Dummy.Error' >> ... >> Traceback (innermost last): >> File "<console>", line 2, in ? >> dummy.Error: test >> >> thanks, >> Philip >> >> rabbit:~/dev/jython/jython/dist crotwell$ java -jar jython.jar - >> Dpython.home=. Lib/test/test_dummy.py >> test_throwJavaError (__main__.TestDummy) ... ERROR >> >> ===================================================================== >> = >> ERROR: test_throwJavaError (__main__.TestDummy) >> --------------------------------------------------------------------- >> - >> Traceback (most recent call last): >> File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ >> Lib/unittest.py", line 213, in __call__ >> testMethod() >> File "Lib/test/test_dummy.py", line 10, in test_throwJavaError >> self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') >> File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ >> Lib/unittest.py", line 273, in failUnlessRaises >> apply(callableObj, args, kwargs) >> dummy.Error: test >> >> --------------------------------------------------------------------- >> - >> Ran 1 test in 0.102s >> >> FAILED (errors=1) >> Traceback (innermost last): >> File "Lib/test/test_dummy.py", line 18, in ? >> File "Lib/test/test_dummy.py", line 15, in test_main >> File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ >> Lib/test/test_support.py", line 187, in run_unittest >> File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ >> Lib/test/test_support.py", line 182, in run_suite >> TestFailed: Traceback (most recent call last): >> File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ >> Lib/unittest.py", line 213, in __call__ >> testMethod() >> File "Lib/test/test_dummy.py", line 10, in test_throwJavaError >> self.assertRaises(Dummy.Error, Dummy.justThrowTheError, 'test') >> File "/private/var/automount/home/crotwell/dev/jython/jython/dist/ >> Lib/unittest.py", line 273, in failUnlessRaises >> apply(callableObj, args, kwargs) >> dummy.Error: test >> >> On May 8, 2007, at 2:43 PM, A.M. Kuchling wrote: >> >> > On Tue, May 08, 2007 at 02:20:55PM -0400, Philip Crotwell wrote: >> >> self.assertRaises(Dummy.Error, Dummy.justThrowTheError >> >> ('test')) >> > >> > I think this should be something like >> > >> > self.assertRaises(Dummy.Error, Dummy.justThrowTheError, >> > 'test') >> > >> > You can't call the justThrowTheError() method in your test code; >> the >> > assertRaises() method will call it and pass in the argument, >> catching >> > the exception. >> > >> > --amk >> > >> > >> --------------------------------------------------------------------- >> - >> > --- >> > This SF.net email is sponsored by DB2 Express >> > Download DB2 Express C - the FREE version of DB2 express and take >> > control of your XML. No limits. Just data. Click to get it now. >> > http://sourceforge.net/powerbar/db2/ >> > _______________________________________________ >> > Jython-dev mailing list >> > Jyt...@li... >> > https://lists.sourceforge.net/lists/listinfo/jython-dev >> >> >> --------------------------------------------------------------------- >> ---- >> This SF.net email is sponsored by DB2 Express >> Download DB2 Express C - the FREE version of DB2 express and take >> control of your XML. No limits. Just data. Click to get it now. >> http://sourceforge.net/powerbar/db2/ >> _______________________________________________ >> Jython-dev mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-dev >> |