From 29a7a60fafaec422f2fade180fdb353bf1de92f7 Mon Sep 17 00:00:00 2001 From: fuzzyman <fuzzyman@localhost> Date: Mon, 12 Jul 2010 13:48:08 +0000 Subject: [PATCH] Adding tox config file and moving with tests to not see failures under Python 2.4. --- docs/changelog.txt | 1 + tests/_testwith.py | 127 ++++++++++++++++++++++++++++++++++++++++++ tests/testwith.py | 135 ++++----------------------------------------- tox.ini | 4 ++ 4 files changed, 144 insertions(+), 123 deletions(-) create mode 100644 tests/_testwith.py create mode 100644 tox.ini diff --git a/docs/changelog.txt b/docs/changelog.txt index 45b0a28..4a1d3f9 100755 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -52,6 +52,7 @@ CHANGELOG - pickle methods - ``__trunc__``, ``__ceil__`` and ``__floor__`` +* with statement tests now skipped on Python 2.4 * Improved several docstrings and documentation diff --git a/tests/_testwith.py b/tests/_testwith.py new file mode 100644 index 0000000..9a723b9 --- /dev/null +++ b/tests/_testwith.py @@ -0,0 +1,127 @@ +# Copyright (C) 2007-2010 Michael Foord & the mock team +# E-mail: fuzzyman AT voidspace DOT org DOT uk +# http://www.voidspace.org.uk/python/mock/ + +from __future__ import with_statement + +from tests.support import unittest2 + +from mock import MagicMock, Mock, patch, sentinel + +from tests.support_with import catch_warnings, nested + +something = sentinel.Something +something_else = sentinel.SomethingElse + + +class WithTest(unittest2.TestCase): + + def testWithStatement(self): + with patch('tests._testwith.something', sentinel.Something2): + self.assertEqual(something, sentinel.Something2, "unpatched") + self.assertEqual(something, sentinel.Something) + + def testWithStatementException(self): + try: + with patch('tests._testwith.something', sentinel.Something2): + self.assertEqual(something, sentinel.Something2, "unpatched") + raise Exception('pow') + except Exception: + pass + else: + self.fail("patch swallowed exception") + self.assertEqual(something, sentinel.Something) + + + def testWithStatementAs(self): + with patch('tests._testwith.something') as mock_something: + self.assertEqual(something, mock_something, "unpatched") + self.assertTrue(isinstance(mock_something, Mock), "patching wrong type") + self.assertEqual(something, sentinel.Something) + + + def testPatchObjectWithStatementAs(self): + mock = Mock() + original = mock.something + with patch.object(mock, 'something'): + self.assertNotEquals(mock.something, original, "unpatched") + self.assertEqual(mock.something, original) + + + def testWithStatementNested(self): + with catch_warnings(record=True): + # nested is deprecated in Python 2.7 + with nested(patch('tests._testwith.something'), + patch('tests._testwith.something_else')) as (mock_something, mock_something_else): + self.assertEqual(something, mock_something, "unpatched") + self.assertEqual(something_else, mock_something_else, "unpatched") + self.assertEqual(something, sentinel.Something) + self.assertEqual(something_else, sentinel.SomethingElse) + + + def testWithStatementSpecified(self): + with patch('tests._testwith.something', sentinel.Patched) as mock_something: + self.assertEqual(something, mock_something, "unpatched") + self.assertEqual(mock_something, sentinel.Patched, "wrong patch") + self.assertEqual(something, sentinel.Something) + + + def testContextManagerMocking(self): + mock = Mock() + mock.__enter__ = Mock() + mock.__exit__ = Mock() + mock.__exit__.return_value = False + + with mock as m: + self.assertEqual(m, mock.__enter__.return_value) + mock.__enter__.assert_called_with() + mock.__exit__.assert_called_with(None, None, None) + + + def testContextManagerWithMagicMock(self): + mock = MagicMock() + + with self.assertRaises(TypeError): + with mock: + 'foo' + 3 + mock.__enter__.assert_called_with() + self.assertTrue(mock.__exit__.called) + + + def testWithStatementSameAttribute(self): + with patch('tests._testwith.something', sentinel.Patched) as mock_something: + self.assertEqual(something, mock_something, "unpatched") + + with patch('tests._testwith.something') as mock_again: + self.assertEqual(something, mock_again, "unpatched") + + self.assertEqual(something, mock_something, "restored with wrong instance") + + self.assertEqual(something, sentinel.Something, "not restored") + + def testWithStatementImbricated(self): + with patch('tests._testwith.something') as mock_something: + self.assertEqual(something, mock_something, "unpatched") + + with patch('tests._testwith.something_else') as mock_something_else: + self.assertEqual(something_else, mock_something_else, "unpatched") + + self.assertEqual(something, sentinel.Something) + self.assertEqual(something_else, sentinel.SomethingElse) + + def testDictContextManager(self): + foo = {} + with patch.dict(foo, {'a': 'b'}): + self.assertEqual(foo, {'a': 'b'}) + self.assertEqual(foo, {}) + + with self.assertRaises(NameError): + with patch.dict(foo, {'a': 'b'}): + self.assertEqual(foo, {'a': 'b'}) + raise NameError('Konrad') + + self.assertEqual(foo, {}) + + +if __name__ == '__main__': + unittest2.main() diff --git a/tests/testwith.py b/tests/testwith.py index 411cdbf..72a7d3c 100644 --- a/tests/testwith.py +++ b/tests/testwith.py @@ -1,127 +1,16 @@ -# Copyright (C) 2007-2010 Michael Foord & the mock team -# E-mail: fuzzyman AT voidspace DOT org DOT uk -# http://www.voidspace.org.uk/python/mock/ - -from __future__ import with_statement - -from tests.support import unittest2 - -from mock import MagicMock, Mock, patch, sentinel - -from tests.support_with import catch_warnings, nested - -something = sentinel.Something -something_else = sentinel.SomethingElse - - -class WithTest(unittest2.TestCase): - - def testWithStatement(self): - with patch('tests.testwith.something', sentinel.Something2): - self.assertEqual(something, sentinel.Something2, "unpatched") - self.assertEqual(something, sentinel.Something) - - def testWithStatementException(self): - try: - with patch('tests.testwith.something', sentinel.Something2): - self.assertEqual(something, sentinel.Something2, "unpatched") - raise Exception('pow') - except Exception: +import sys + +if sys.version_info[:2] > (2, 5): + from tests._testwith import * +else: + from tests.support import unittest2 + + class TestWith(unittest2.TestCase): + + @unittest2.skip('tests using with statement skipped on Python 2.4') + def testWith(self): pass - else: - self.fail("patch swallowed exception") - self.assertEqual(something, sentinel.Something) - - - def testWithStatementAs(self): - with patch('tests.testwith.something') as mock_something: - self.assertEqual(something, mock_something, "unpatched") - self.assertTrue(isinstance(mock_something, Mock), "patching wrong type") - self.assertEqual(something, sentinel.Something) - - - def testPatchObjectWithStatementAs(self): - mock = Mock() - original = mock.something - with patch.object(mock, 'something'): - self.assertNotEquals(mock.something, original, "unpatched") - self.assertEqual(mock.something, original) - - - def testWithStatementNested(self): - with catch_warnings(record=True): - # nested is deprecated in Python 2.7 - with nested(patch('tests.testwith.something'), - patch('tests.testwith.something_else')) as (mock_something, mock_something_else): - self.assertEqual(something, mock_something, "unpatched") - self.assertEqual(something_else, mock_something_else, "unpatched") - self.assertEqual(something, sentinel.Something) - self.assertEqual(something_else, sentinel.SomethingElse) - - - def testWithStatementSpecified(self): - with patch('tests.testwith.something', sentinel.Patched) as mock_something: - self.assertEqual(something, mock_something, "unpatched") - self.assertEqual(mock_something, sentinel.Patched, "wrong patch") - self.assertEqual(something, sentinel.Something) - - - def testContextManagerMocking(self): - mock = Mock() - mock.__enter__ = Mock() - mock.__exit__ = Mock() - mock.__exit__.return_value = False - - with mock as m: - self.assertEqual(m, mock.__enter__.return_value) - mock.__enter__.assert_called_with() - mock.__exit__.assert_called_with(None, None, None) - - - def testContextManagerWithMagicMock(self): - mock = MagicMock() - - with self.assertRaises(TypeError): - with mock: - 'foo' + 3 - mock.__enter__.assert_called_with() - self.assertTrue(mock.__exit__.called) - - - def testWithStatementSameAttribute(self): - with patch('tests.testwith.something', sentinel.Patched) as mock_something: - self.assertEqual(something, mock_something, "unpatched") - - with patch('tests.testwith.something') as mock_again: - self.assertEqual(something, mock_again, "unpatched") - - self.assertEqual(something, mock_something, "restored with wrong instance") - - self.assertEqual(something, sentinel.Something, "not restored") - - def testWithStatementImbricated(self): - with patch('tests.testwith.something') as mock_something: - self.assertEqual(something, mock_something, "unpatched") - - with patch('tests.testwith.something_else') as mock_something_else: - self.assertEqual(something_else, mock_something_else, "unpatched") - - self.assertEqual(something, sentinel.Something) - self.assertEqual(something_else, sentinel.SomethingElse) - - def testDictContextManager(self): - foo = {} - with patch.dict(foo, {'a': 'b'}): - self.assertEqual(foo, {'a': 'b'}) - self.assertEqual(foo, {}) - - with self.assertRaises(NameError): - with patch.dict(foo, {'a': 'b'}): - self.assertEqual(foo, {'a': 'b'}) - raise NameError('Konrad') - - self.assertEqual(foo, {}) if __name__ == '__main__': - unittest2.main() + unittest2.main() \ No newline at end of file diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..0d7a6d2 --- /dev/null +++ b/tox.ini @@ -0,0 +1,4 @@ +[tox] +envlist = py25,py24,py26,py27 +[testenv] +commands=unit2 discover \ No newline at end of file -- GitLab