Revision: 4072
Author: pekka.klarck
Date: Sat Sep 18 16:36:48 2010
Log: The old problem with calling class.getName was caused by class had
overriding getName (like junit.framework.TestCase does). Added test for it
and refactored code to use__name__ instead.
http://code.google.com/p/robotframework/source/detail?r=4072
Added:
/trunk/atest/testresources/testlibs/OverrideGetName.class
/trunk/atest/testresources/testlibs/OverrideGetName.java
Modified:
/trunk/src/robot/running/testlibraries.py
/trunk/utest/running/test_testlibrary.py
=======================================
--- /dev/null
+++ /trunk/atest/testresources/testlibs/OverrideGetName.class Sat Sep 18
16:36:48 2010
@@ -0,0 +1,6 @@
+Êþº¾ 1
+ <init> ()V Code LineNumberTable getName ()Ljava/lang/String;
doNothing
+SourceFile OverrideGetName.java
xxx OverrideGetName java/lang/Object !
+ *· ±
+ ° ±
+
=======================================
--- /dev/null
+++ /trunk/atest/testresources/testlibs/OverrideGetName.java Sat Sep 18
16:36:48 2010
@@ -0,0 +1,11 @@
+public class OverrideGetName {
+
+ // Overrides the default getName class method, which causes TypeError
+ // when OverrideGetName.getName() is called on Jython.
+ public String getName() {
+ return "xxx";
+ }
+
+ public void doNothing() {
+ }
+}
=======================================
--- /trunk/src/robot/running/testlibraries.py Thu Jul 22 05:40:36 2010
+++ /trunk/src/robot/running/testlibraries.py Sat Sep 18 16:36:48 2010
@@ -233,16 +233,9 @@
# extended in Python. This code ignores handlers defined only in
# java.lang.Object or generated by Jython (in org.python.proxies).
for signature in handler.argslist[:handler.nargs]:
- # 'getName' may raise an exception -- not sure why but that
happens
- # at least with handlers declared in class extending JUnit
TestCase.
- try:
- cls = signature.declaringClass
- if not (cls is Object or
- cls.getName().startswith('org.python.proxies.')):
- return True
- except utils.RERAISED_EXCEPTIONS:
- raise
- except:
+ cls = signature.declaringClass
+ if not (cls is Object or
+ cls.__name__.startswith('org.python.proxies.')):
return True
return False
=======================================
--- /trunk/utest/running/test_testlibrary.py Thu Sep 16 00:17:34 2010
+++ /trunk/utest/running/test_testlibrary.py Sat Sep 18 16:36:48 2010
@@ -415,6 +415,10 @@
assert_false(handler._handler_name.startswith('_'))
assert_equals(handler._handler_name.count('skip'), 0)
+ def test_overridden_getName(self):
+ handlers = TestLibrary('OverrideGetName').handlers
+ assert_equals(sorted(handlers.keys()),
['doNothing', 'getName'])
+
class TestDynamicLibrary(unittest.TestCase):