test_tools.py
136 lines
| 4.2 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r1983 | # encoding: utf-8 | ||
""" | ||||
Tests for testing.tools | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Matthias BUSSONNIER
|
r5390 | # Copyright (C) 2008-2011 The IPython Development Team | ||
Brian Granger
|
r1983 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import os | ||||
Thomas Kluyver
|
r4901 | import unittest | ||
Brian Granger
|
r1983 | |||
import nose.tools as nt | ||||
from IPython.testing import decorators as dec | ||||
Fernando Perez
|
r2451 | from IPython.testing import tools as tt | ||
Brian Granger
|
r1983 | |||
#----------------------------------------------------------------------------- | ||||
# Tests | ||||
#----------------------------------------------------------------------------- | ||||
@dec.skip_win32 | ||||
def test_full_path_posix(): | ||||
spath = '/foo/bar.py' | ||||
Fernando Perez
|
r2451 | result = tt.full_path(spath,['a.txt','b.txt']) | ||
Brian Granger
|
r1983 | nt.assert_equal(result, ['/foo/a.txt', '/foo/b.txt']) | ||
spath = '/foo' | ||||
Fernando Perez
|
r2451 | result = tt.full_path(spath,['a.txt','b.txt']) | ||
Brian Granger
|
r1983 | nt.assert_equal(result, ['/a.txt', '/b.txt']) | ||
Fernando Perez
|
r2451 | result = tt.full_path(spath,'a.txt') | ||
Brian Granger
|
r1983 | nt.assert_equal(result, ['/a.txt']) | ||
@dec.skip_if_not_win32 | ||||
def test_full_path_win32(): | ||||
spath = 'c:\\foo\\bar.py' | ||||
Fernando Perez
|
r2451 | result = tt.full_path(spath,['a.txt','b.txt']) | ||
Brian Granger
|
r1983 | nt.assert_equal(result, ['c:\\foo\\a.txt', 'c:\\foo\\b.txt']) | ||
spath = 'c:\\foo' | ||||
Fernando Perez
|
r2451 | result = tt.full_path(spath,['a.txt','b.txt']) | ||
Brian Granger
|
r1983 | nt.assert_equal(result, ['c:\\a.txt', 'c:\\b.txt']) | ||
Fernando Perez
|
r2451 | result = tt.full_path(spath,'a.txt') | ||
Fernando Perez
|
r2353 | nt.assert_equal(result, ['c:\\a.txt']) | ||
Fernando Perez
|
r2451 | |||
Fernando Perez
|
r2353 | def test_parser(): | ||
err = ("FAILED (errors=1)", 1, 0) | ||||
fail = ("FAILED (failures=1)", 0, 1) | ||||
both = ("FAILED (errors=1, failures=1)", 1, 1) | ||||
for txt, nerr, nfail in [err, fail, both]: | ||||
Fernando Perez
|
r2451 | nerr1, nfail1 = tt.parse_test_output(txt) | ||
Thomas Kluyver
|
r12371 | nt.assert_equal(nerr, nerr1) | ||
nt.assert_equal(nfail, nfail1) | ||||
Fernando Perez
|
r2451 | |||
def test_temp_pyfile(): | ||||
src = 'pass\n' | ||||
fname, fh = tt.temp_pyfile(src) | ||||
Thomas Kluyver
|
r12371 | assert os.path.isfile(fname) | ||
Fernando Perez
|
r2451 | fh.close() | ||
with open(fname) as fh2: | ||||
src2 = fh2.read() | ||||
Thomas Kluyver
|
r12371 | nt.assert_equal(src2, src) | ||
Thomas Kluyver
|
r4901 | |||
class TestAssertPrints(unittest.TestCase): | ||||
def test_passing(self): | ||||
with tt.AssertPrints("abc"): | ||||
Thomas Kluyver
|
r13348 | print("abcd") | ||
print("def") | ||||
print(b"ghi") | ||||
Thomas Kluyver
|
r4901 | |||
def test_failing(self): | ||||
def func(): | ||||
with tt.AssertPrints("abc"): | ||||
Thomas Kluyver
|
r13348 | print("acd") | ||
print("def") | ||||
print(b"ghi") | ||||
Thomas Kluyver
|
r4901 | |||
self.assertRaises(AssertionError, func) | ||||
Jörgen Stenarson
|
r8291 | |||
class Test_ipexec_validate(unittest.TestCase, tt.TempFileMixin): | ||||
def test_main_path(self): | ||||
"""Test with only stdout results. | ||||
""" | ||||
self.mktmp("print('A')\n" | ||||
"print('B')\n" | ||||
) | ||||
out = "A\nB" | ||||
tt.ipexec_validate(self.fname, out) | ||||
Jörgen Stenarson
|
r8293 | def test_main_path2(self): | ||
"""Test with only stdout results, expecting windows line endings. | ||||
""" | ||||
self.mktmp("print('A')\n" | ||||
"print('B')\n" | ||||
) | ||||
out = "A\r\nB" | ||||
tt.ipexec_validate(self.fname, out) | ||||
Jörgen Stenarson
|
r8291 | def test_exception_path(self): | ||
"""Test exception path in exception_validate. | ||||
""" | ||||
Paul Ivanov
|
r22963 | self.mktmp("import sys\n" | ||
Jörgen Stenarson
|
r8291 | "print('A')\n" | ||
"print('B')\n" | ||||
"print('C', file=sys.stderr)\n" | ||||
"print('D', file=sys.stderr)\n" | ||||
) | ||||
out = "A\nB" | ||||
tt.ipexec_validate(self.fname, expected_out=out, expected_err="C\nD") | ||||
Jörgen Stenarson
|
r8293 | |||
Thomas Kluyver
|
r11133 | def test_exception_path2(self): | ||
Jörgen Stenarson
|
r8293 | """Test exception path in exception_validate, expecting windows line endings. | ||
""" | ||||
Paul Ivanov
|
r22963 | self.mktmp("import sys\n" | ||
Jörgen Stenarson
|
r8293 | "print('A')\n" | ||
"print('B')\n" | ||||
"print('C', file=sys.stderr)\n" | ||||
"print('D', file=sys.stderr)\n" | ||||
) | ||||
out = "A\r\nB" | ||||
tt.ipexec_validate(self.fname, expected_out=out, expected_err="C\r\nD") | ||||
Matthias Bussonnier
|
r22361 | |||
def tearDown(self): | ||||
# tear down correctly the mixin, | ||||
# unittest.TestCase.tearDown does nothing | ||||
tt.TempFileMixin.tearDown(self) | ||||