[Twisted-Python] Thoughts about testing
James Y Knight
foom at fuhm.net
Thu Oct 27 02:02:02 MDT 2005
On Oct 27, 2005, at 2:10 AM, glyph at divmod.com wrote:
>
>
> On Wed, 26 Oct 2005 21:11:06 -0400, James Y Knight <foom at fuhm.net>
> wrote:
>
>> On Oct 26, 2005, at 8:38 PM, Jonathan Lange wrote:
>>
>
>
>> Possibly "fixable" in trial with a horrible hack of looking up
>> source line numbers of classes/methods and sorting according to
>> that, but that seems rather...horrible.
>>
>
> Why? It's just one attribute - no magical side effects or
> anything. It's documented, and this only affects sort order.
> Seems like a pretty reasonable change to me.
Well, here's the 5 minute solution. It works...no points for style
though.
James
Index: runner.py
===================================================================
--- runner.py (revision 14859)
+++ runner.py (working copy)
@@ -296,6 +296,34 @@
return thing.__name__
return thing.id()
+def sourceOrder(thing):
+ if isinstance(thing, pyunit.TestCase):
+ # ?!?!
+ thing = thing._parents[0]
+ if hasattr(thing, 'im_func'):
+ thing = thing.im_func
+ if hasattr(thing, 'func_code'):
+ thing = thing.func_code
+ if hasattr(thing, 'co_firstlineno'):
+ return thing.co_firstlineno
+
+ if isinstance(thing, (types.ClassType, type)):
+ so = None
+ for x in vars(thing).itervalues():
+ try:
+ newso = sourceOrder(x)
+ except TypeError:
+ # Not a sourceorderable
+ pass
+ else:
+ if so is not None:
+ so = min(so, newso)
+ else:
+ so = newso
+ if so is None:
+ return 0
+ return so
+ raise TypeError("Unknown test object type: %s %s %s" % (thing,
type(thing), vars(thing)))
def isTestCase(obj):
try:
@@ -316,6 +344,7 @@
self.suiteFactory = TestSuite
self.classSuiteFactory = ClassSuite
self.sorter = name
+ self.testSorter = sourceOrder
self._importErrors = []
def _findTestClasses(self, module):
@@ -324,7 +353,7 @@
for name, val in inspect.getmembers(module):
if isTestCase(val):
classes.append(val)
- return dsu(classes, self.sorter)
+ return dsu(classes, self.testSorter)
def _findTestModules(self, package):
modGlob = os.path.join(os.path.dirname(package.__file__),
self.moduleGlob)
@@ -371,7 +400,7 @@
factory = self.classSuiteFactory
names = reflect.prefixedMethodNames(klass, self.methodPrefix)
tests = dsu([ klass(self.methodPrefix+name) for name in
names ],
- self.sorter)
+ self.testSorter)
suite = factory(klass)
suite.addTests(tests)
return NamedSuite(klass.__name__, suite)
More information about the Twisted-Python
mailing list