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>()VCodeLineNumberTablegetName()Ljava/lang/String; doNothing
+SourceFileOverrideGetName.java
xxxOverrideGetNamejava/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):

Reply via email to