awips2/pythonPackages/nose/unit_tests/test_suite.py
root 57877615f5 Initial revision of AWIPS2 11.9.0-7p5
Former-commit-id: 2b462d8665 [formerly 133dc97f67] [formerly a02aeb236c] [formerly a02aeb236c [formerly 9f19e3f712]] [formerly 2b462d8665 [formerly 133dc97f67] [formerly a02aeb236c] [formerly a02aeb236c [formerly 9f19e3f712]] [formerly 06a8b51d6d [formerly a02aeb236c [formerly 9f19e3f712] [formerly 06a8b51d6d [formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]]]]]
Former-commit-id: 06a8b51d6d
Former-commit-id: 2c3569dd39 [formerly 9bb8decbcf] [formerly 8e80217e59] [formerly e2ecdcfe33 [formerly 377dcd10b9] [formerly 8e80217e59 [formerly 3360eb6c5f]]]
Former-commit-id: e2ecdcfe33 [formerly 377dcd10b9]
Former-commit-id: e2ecdcfe33
Former-commit-id: 7dbd17a5aa
2012-01-06 08:55:05 -06:00

301 lines
8.9 KiB
Python
Executable file

from nose.config import Config
from nose import case
from nose.suite import LazySuite, ContextSuite, ContextSuiteFactory, \
ContextList
import imp
import sys
import unittest
from mock import ResultProxyFactory, ResultProxy
class TestLazySuite(unittest.TestCase):
def setUp(self):
class TC(unittest.TestCase):
def test_one(self):
pass
def test_two(self):
pass
self.TC = TC
def test_test_generator(self):
TC = self.TC
tests = [TC('test_one'), TC('test_two')]
def gen_tests():
for test in tests:
yield test
suite = LazySuite(gen_tests)
self.assertEqual(list([test for test in suite]), tests)
def test_lazy_and_nonlazy(self):
TC = self.TC
tests = [TC('test_one'), TC('test_two')]
def gen_tests():
for test in tests:
yield test
nonlazy = LazySuite(tests)
lazy = LazySuite(gen_tests)
assert lazy
assert nonlazy
lazytests = []
nonlazytests = []
for t in lazy:
print "lazy %s" % t
lazytests.append(t)
for t in nonlazy:
print "nonlazy %s" % t
nonlazytests.append(t)
slazy = map(str, lazytests)
snonlazy = map(str, nonlazytests)
assert slazy == snonlazy, \
"Lazy and Nonlazy produced different test lists (%s vs %s)" \
% (slazy, snonlazy)
def test_lazy_nonzero(self):
"""__nonzero__ works correctly for lazy suites"""
TC = self.TC
tests = [TC('test_one'), TC('test_two')]
def gen_tests():
for test in tests:
yield test
lazy = LazySuite(gen_tests)
assert lazy
assert lazy
assert lazy
count = 0
for test in lazy:
print test
assert test
count += 1
self.assertEqual(count, 2, "Expected 2 tests, got %s" % count)
assert lazy
def gen_tests_empty():
for test in []:
yield test
return
empty = LazySuite(gen_tests_empty)
assert not empty
for test in empty:
assert False, "Loaded a test from empty suite: %s" % test
class TestContextSuite(unittest.TestCase):
def setUp(self):
class TC(unittest.TestCase):
def test_one(self):
pass
def test_two(self):
pass
self.TC = TC
def test_tests_are_wrapped(self):
"""Tests in a context suite are wrapped"""
suite = ContextSuite(
[self.TC('test_one'), self.TC('test_two')])
for test in suite:
assert isinstance(test.test, self.TC)
def test_nested_context_suites(self):
"""Nested suites don't re-wrap"""
suite = ContextSuite(
[self.TC('test_one'), self.TC('test_two')])
suite2 = ContextSuite(suite)
suite3 = ContextSuite([suite2])
# suite3 is [suite2]
tests = [t for t in suite3]
assert isinstance(tests[0], ContextSuite)
# suite2 is [suite]
tests = [t for t in tests[0]]
assert isinstance(tests[0], ContextSuite)
# suite is full of wrapped tests
tests = [t for t in tests[0]]
cases = filter(lambda t: isinstance(t, case.Test), tests)
assert cases
assert len(cases) == len(tests)
# sub-suites knows they have a context
#assert suite.context is None
#assert suite2.context is suite
#assert suite3.context is suite2
def test_context_fixtures_called(self):
class P:
was_setup = False
was_torndown = False
def setup(self):
self.was_setup = True
def teardown(self):
self.was_torndown = True
context = P()
suite = ContextSuite(
[self.TC('test_one'), self.TC('test_two')],
context=context)
res = unittest.TestResult()
suite(res)
assert not res.errors, res.errors
assert not res.failures, res.failures
assert context.was_setup
assert context.was_torndown
def test_context_fixtures_for_ancestors(self):
top = imp.new_module('top')
top.bot = imp.new_module('top.bot')
top.bot.end = imp.new_module('top.bot.end')
sys.modules['top'] = top
sys.modules['top.bot'] = top.bot
sys.modules['top.bot.end'] = top.bot.end
class TC(unittest.TestCase):
def runTest(self):
pass
top.bot.TC = TC
TC.__module__ = 'top.bot'
# suite with just TC test
# this suite should call top and top.bot setup
csf = ContextSuiteFactory()
suite = csf(ContextList([TC()], context=top.bot))
suite.setUp()
assert top in csf.was_setup, "Ancestor not set up"
assert top.bot in csf.was_setup, "Context not set up"
suite.has_run = True
suite.tearDown()
assert top in csf.was_torndown, "Ancestor not torn down"
assert top.bot in csf.was_torndown, "Context not torn down"
# wrapped suites
# the outer suite sets up its context, the inner
# its context only, without re-setting up the outer context
csf = ContextSuiteFactory()
inner_suite = csf(ContextList([TC()], context=top.bot))
suite = csf(ContextList(inner_suite, context=top))
suite.setUp()
assert top in csf.was_setup
assert not top.bot in csf.was_setup
inner_suite.setUp()
assert top in csf.was_setup
assert top.bot in csf.was_setup
assert csf.was_setup[top] is suite
assert csf.was_setup[top.bot] is inner_suite
def test_context_fixtures_setup_fails(self):
class P:
was_setup = False
was_torndown = False
def setup(self):
self.was_setup = True
assert False, "Setup failed"
def teardown(self):
self.was_torndown = True
context = P()
suite = ContextSuite(
[self.TC('test_one'), self.TC('test_two')],
context=context)
res = unittest.TestResult()
suite(res)
assert not res.failures, res.failures
assert res.errors, res.errors
assert context.was_setup
assert not context.was_torndown
assert res.testsRun == 0, \
"Expected to run no tests but ran %s" % res.testsRun
def test_context_fixtures_no_tests_no_setup(self):
class P:
was_setup = False
was_torndown = False
def setup(self):
self.was_setup = True
def teardown(self):
self.was_torndown = True
context = P()
suite = ContextSuite([], context=context)
res = unittest.TestResult()
suite(res)
assert not res.failures, res.failures
assert not res.errors, res.errors
assert not context.was_setup
assert not context.was_torndown
assert res.testsRun == 0, \
"Expected to run no tests but ran %s" % res.testsRun
def test_result_proxy_used(self):
class TC(unittest.TestCase):
def runTest(self):
raise Exception("error")
ResultProxy.called[:] = []
res = unittest.TestResult()
config = Config()
suite = ContextSuite([TC()], resultProxy=ResultProxyFactory())
suite(res)
calls = [ c[0] for c in ResultProxy.called ]
self.assertEqual(calls, ['beforeTest', 'startTest',
'addError', 'stopTest', 'afterTest'])
class TestContextSuiteFactory(unittest.TestCase):
def test_ancestry(self):
top = imp.new_module('top')
top.bot = imp.new_module('top.bot')
top.bot.end = imp.new_module('top.bot.end')
sys.modules['top'] = top
sys.modules['top.bot'] = top.bot
sys.modules['top.bot.end'] = top.bot.end
class P:
pass
top.bot.P = P
P.__module__ = 'top.bot'
csf = ContextSuiteFactory()
P_ancestors = list([a for a in csf.ancestry(P)])
self.assertEqual(P_ancestors, [top.bot, top])
end_ancestors = list([a for a in csf.ancestry(top.bot.end)])
self.assertEqual(end_ancestors, [top.bot, top])
bot_ancestors = list([a for a in csf.ancestry(top.bot)])
self.assertEqual(bot_ancestors, [top])
top_ancestors = list([a for a in csf.ancestry(top)])
self.assertEqual(top_ancestors, [])
if __name__ == '__main__':
import logging
logging.basicConfig(level=logging.DEBUG)
unittest.main()
# class TC(unittest.TestCase):
# def runTest(self):
# raise Exception("error")
# ResultProxy.called[:] = []
# res = unittest.TestResult()
# config = Config()