1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

import logging 

import unittest 

from traceback import format_tb 

from nose.pyversion import is_base_exception 

 

log = logging.getLogger(__name__) 

 

 

__all__ = ['Failure'] 

 

 

class Failure(unittest.TestCase): 

"""Unloadable or unexecutable test. 

 

A Failure case is placed in a test suite to indicate the presence of a 

test that could not be loaded or executed. A common example is a test 

module that fails to import. 

 

""" 

__test__ = False # do not collect 

def __init__(self, exc_class, exc_val, tb=None, address=None): 

log.debug("A failure! %s %s %s", exc_class, exc_val, format_tb(tb)) 

self.exc_class = exc_class 

self.exc_val = exc_val 

self.tb = tb 

self._address = address 

unittest.TestCase.__init__(self) 

 

def __str__(self): 

return "Failure: %s (%s)" % ( 

getattr(self.exc_class, '__name__', self.exc_class), self.exc_val) 

 

def address(self): 

return self._address 

 

def runTest(self): 

if self.tb is not None: 

if is_base_exception(self.exc_val): 

raise self.exc_val.with_traceback(self.tb) 

raise self.exc_class(self.exc_val).with_traceback(self.tb) 

else: 

raise self.exc_class(self.exc_val)