awips2/pythonPackages/nose/unit_tests/test_inspector.py
2017-04-21 18:33:55 -06:00

149 lines
4.8 KiB
Python

import inspect
import sys
import textwrap
import tokenize
import traceback
import unittest
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
from nose.inspector import inspect_traceback, Expander, tbsource
class TestExpander(unittest.TestCase):
def test_simple_inspect_frame(self):
src = StringIO('a > 2')
lc = { 'a': 2}
gb = {}
exp = Expander(lc, gb)
for tok in tokenize.generate_tokens(src.readline):
exp(*tok)
# print "'%s'" % exp.expanded_source
self.assertEqual(exp.expanded_source.strip(), '2 > 2')
def test_inspect_traceback_continued(self):
a = 6
out = ''
try:
assert a < 1, \
"This is a multline expression"
except AssertionError:
et, ev, tb = sys.exc_info()
out = inspect_traceback(tb)
# print "'%s'" % out.strip()
self.assertEqual(out.strip(),
'>> assert 6 < 1, \\\n '
'"This is a multline expression"')
def test_get_tb_source_simple(self):
# no func frame
try:
assert False
except AssertionError:
et, ev, tb = sys.exc_info()
lines, lineno = tbsource(tb, 1)
self.assertEqual(''.join(lines).strip(), 'assert False')
self.assertEqual(lineno, 0)
def test_get_tb_source_func(self):
# func frame
def check_even(n):
print n
assert n % 2 == 0
try:
check_even(1)
except AssertionError:
et, ev, tb = sys.exc_info()
lines, lineno = tbsource(tb)
out = textwrap.dedent(''.join(lines))
if sys.version_info < (3,):
first_line = ' print n\n'
else:
first_line = ' print(n)\n'
self.assertEqual(out,
first_line +
' assert n % 2 == 0\n'
'try:\n'
' check_even(1)\n'
'except AssertionError:\n'
' et, ev, tb = sys.exc_info()\n'
)
self.assertEqual(lineno, 3)
# FIXME 2 func frames
def test_pick_tb_lines(self):
try:
val = "fred"
def defred(n):
return n.replace('fred','')
assert defred(val) == 'barney', "Fred - fred != barney?"
except AssertionError:
et, ev, tb = sys.exc_info()
out = inspect_traceback(tb)
# print "'%s'" % out.strip()
self.assertEqual(out.strip(),
">> assert defred('fred') == 'barney', "
'"Fred - fred != barney?"')
try:
val = "fred"
def defred(n):
return n.replace('fred','')
assert defred(val) == 'barney', \
"Fred - fred != barney?"
def refred(n):
return n + 'fred'
except AssertionError:
et, ev, tb = sys.exc_info()
out = inspect_traceback(tb)
#print "'%s'" % out.strip()
self.assertEqual(out.strip(),
">> assert defred('fred') == 'barney', "
'\\\n "Fred - fred != barney?"')
S = {'setup':1}
def check_even(n, nn):
assert S['setup']
print n, nn
assert n % 2 == 0 or nn % 2 == 0
try:
check_even(1, 3)
except AssertionError:
et, ev, tb = sys.exc_info()
out = inspect_traceback(tb)
print "'%s'" % out.strip()
if sys.version_info < (3,):
print_line = " print 1, 3\n"
else:
print_line = " print(1, 3)\n"
self.assertEqual(out.strip(),
"assert {'setup': 1}['setup']\n" +
print_line +
">> assert 1 % 2 == 0 or 3 % 2 == 0")
def test_bug_95(self):
"""Test that inspector can handle multi-line docstrings"""
try:
"""docstring line 1
docstring line 2
"""
a = 2
assert a == 4
except AssertionError:
et, ev, tb = sys.exc_info()
out = inspect_traceback(tb)
print "'%s'" % out.strip()
self.assertEqual(out.strip(),
"2 = 2\n"
">> assert 2 == 4")
if __name__ == '__main__':
#import logging
#logging.basicConfig()
#logging.getLogger('').setLevel(10)
unittest.main()