mirror of https://github.com/python/cpython
Convert test_pkg to use unittest.
This commit is contained in:
parent
fe3b4b9507
commit
0f5e87a266
|
@ -1,45 +0,0 @@
|
||||||
test_pkg
|
|
||||||
running test t1
|
|
||||||
running test t2
|
|
||||||
t2 loading
|
|
||||||
doc for t2
|
|
||||||
t2.sub.subsub loading
|
|
||||||
t2 t2.sub t2.sub.subsub
|
|
||||||
['sub', 't2']
|
|
||||||
t2.sub t2.sub.subsub
|
|
||||||
t2.sub.subsub
|
|
||||||
['spam', 'sub', 'subsub', 't2']
|
|
||||||
t2 t2.sub t2.sub.subsub
|
|
||||||
['spam', 'sub', 'subsub', 't2']
|
|
||||||
running test t3
|
|
||||||
t3 loading
|
|
||||||
t3.sub.subsub loading
|
|
||||||
t3 t3.sub t3.sub.subsub
|
|
||||||
t3 loading
|
|
||||||
t3.sub.subsub loading
|
|
||||||
running test t4
|
|
||||||
t4 loading
|
|
||||||
t4.sub.subsub loading
|
|
||||||
t4.sub.subsub.spam = 1
|
|
||||||
running test t5
|
|
||||||
t5.foo loading
|
|
||||||
t5.string loading
|
|
||||||
1
|
|
||||||
['foo', 'string', 't5']
|
|
||||||
['__doc__', '__file__', '__name__', '__path__', 'foo', 'string', 't5']
|
|
||||||
['__doc__', '__file__', '__name__', 'string']
|
|
||||||
['__doc__', '__file__', '__name__', 'spam']
|
|
||||||
running test t6
|
|
||||||
['__all__', '__doc__', '__file__', '__name__', '__path__']
|
|
||||||
t6.spam loading
|
|
||||||
t6.ham loading
|
|
||||||
t6.eggs loading
|
|
||||||
['__all__', '__doc__', '__file__', '__name__', '__path__', 'eggs', 'ham', 'spam']
|
|
||||||
['eggs', 'ham', 'spam', 't6']
|
|
||||||
running test t7
|
|
||||||
t7 loading
|
|
||||||
['__doc__', '__file__', '__name__', '__path__']
|
|
||||||
['__doc__', '__file__', '__name__', '__path__']
|
|
||||||
t7.sub.subsub loading
|
|
||||||
['__doc__', '__file__', '__name__', '__path__', 'spam']
|
|
||||||
t7.sub.subsub.spam = 1
|
|
|
@ -1,34 +1,16 @@
|
||||||
# Test packages (dotted-name import)
|
# Test packages (dotted-name import)
|
||||||
|
|
||||||
import sys, os, tempfile, traceback
|
import sys
|
||||||
from os import mkdir, rmdir, extsep # Can't test if these fail
|
import os
|
||||||
del mkdir, rmdir
|
import tempfile
|
||||||
from test.test_support import verify, verbose, TestFailed
|
import textwrap
|
||||||
|
import traceback
|
||||||
|
import unittest
|
||||||
|
from test import test_support
|
||||||
|
|
||||||
|
|
||||||
# Helpers to create and destroy hierarchies.
|
# Helpers to create and destroy hierarchies.
|
||||||
|
|
||||||
def mkhier(root, descr):
|
|
||||||
if not os.path.isdir(root):
|
|
||||||
mkdir(root)
|
|
||||||
for name, contents in descr:
|
|
||||||
comps = name.split()
|
|
||||||
fullname = root
|
|
||||||
for c in comps:
|
|
||||||
fullname = os.path.join(fullname, c)
|
|
||||||
if contents is None:
|
|
||||||
mkdir(fullname)
|
|
||||||
else:
|
|
||||||
if verbose: print "write", fullname
|
|
||||||
f = open(fullname, "w")
|
|
||||||
f.write(contents)
|
|
||||||
if contents and contents[-1] != '\n':
|
|
||||||
f.write('\n')
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
def mkdir(x):
|
|
||||||
if verbose: print "mkdir", x
|
|
||||||
os.mkdir(x)
|
|
||||||
|
|
||||||
def cleanout(root):
|
def cleanout(root):
|
||||||
names = os.listdir(root)
|
names = os.listdir(root)
|
||||||
for name in names:
|
for name in names:
|
||||||
|
@ -37,223 +19,252 @@ def cleanout(root):
|
||||||
cleanout(fullname)
|
cleanout(fullname)
|
||||||
else:
|
else:
|
||||||
os.remove(fullname)
|
os.remove(fullname)
|
||||||
rmdir(root)
|
os.rmdir(root)
|
||||||
|
|
||||||
def rmdir(x):
|
|
||||||
if verbose: print "rmdir", x
|
|
||||||
os.rmdir(x)
|
|
||||||
|
|
||||||
def fixdir(lst):
|
def fixdir(lst):
|
||||||
try:
|
if "__builtins__" in lst:
|
||||||
lst.remove('__builtins__')
|
lst.remove("__builtins__")
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
# Helper to run a test
|
|
||||||
|
|
||||||
def runtest(hier, code):
|
# XXX Things to test
|
||||||
root = tempfile.mkdtemp()
|
#
|
||||||
mkhier(root, hier)
|
# import package without __init__
|
||||||
savepath = sys.path[:]
|
# import package with __init__
|
||||||
fd, fname = tempfile.mkstemp(text=True)
|
# __init__ importing submodule
|
||||||
os.write(fd, code)
|
# __init__ importing global module
|
||||||
os.close(fd)
|
# __init__ defining variables
|
||||||
try:
|
# submodule importing other submodule
|
||||||
|
# submodule importing global module
|
||||||
|
# submodule import submodule via global name
|
||||||
|
# from package import submodule
|
||||||
|
# from package import subpackage
|
||||||
|
# from package import variable (defined in __init__)
|
||||||
|
# from package import * (defined in __init__)
|
||||||
|
|
||||||
|
|
||||||
|
class Test(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.root = None
|
||||||
|
self.syspath = list(sys.path)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
sys.path[:] = self.syspath
|
||||||
|
cleanout(self.root)
|
||||||
|
|
||||||
|
def run_code(self, code):
|
||||||
|
exec(textwrap.dedent(code), globals(), {"self": self})
|
||||||
|
|
||||||
|
def mkhier(self, descr):
|
||||||
|
root = tempfile.mkdtemp()
|
||||||
sys.path.insert(0, root)
|
sys.path.insert(0, root)
|
||||||
if verbose: print "sys.path =", sys.path
|
if not os.path.isdir(root):
|
||||||
try:
|
os.mkdir(root)
|
||||||
execfile(fname, globals(), {})
|
for name, contents in descr:
|
||||||
except:
|
comps = name.split()
|
||||||
traceback.print_exc(file=sys.stdout)
|
fullname = root
|
||||||
finally:
|
for c in comps:
|
||||||
sys.path[:] = savepath
|
fullname = os.path.join(fullname, c)
|
||||||
os.unlink(fname)
|
if contents is None:
|
||||||
try:
|
os.mkdir(fullname)
|
||||||
cleanout(root)
|
else:
|
||||||
except (os.error, IOError):
|
f = open(fullname, "w")
|
||||||
pass
|
f.write(contents)
|
||||||
|
if contents and contents[-1] != '\n':
|
||||||
|
f.write('\n')
|
||||||
|
f.close()
|
||||||
|
self.root = root
|
||||||
|
|
||||||
# Test descriptions
|
def test_1(self):
|
||||||
|
hier = [("t1", None), ("t1 __init__"+os.extsep+"py", "")]
|
||||||
|
self.mkhier(hier)
|
||||||
|
import t1
|
||||||
|
|
||||||
tests = [
|
def test_2(self):
|
||||||
("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"),
|
hier = [
|
||||||
|
("t2", None),
|
||||||
|
("t2 __init__"+os.extsep+"py", "'doc for t2'"),
|
||||||
|
("t2 sub", None),
|
||||||
|
("t2 sub __init__"+os.extsep+"py", ""),
|
||||||
|
("t2 sub subsub", None),
|
||||||
|
("t2 sub subsub __init__"+os.extsep+"py", "spam = 1"),
|
||||||
|
]
|
||||||
|
self.mkhier(hier)
|
||||||
|
|
||||||
("t2", [
|
import t2
|
||||||
("t2", None),
|
self.assertEqual(t2.__doc__, "doc for t2")
|
||||||
("t2 __init__"+os.extsep+"py", "'doc for t2'; print __name__, 'loading'"),
|
|
||||||
("t2 sub", None),
|
|
||||||
("t2 sub __init__"+os.extsep+"py", ""),
|
|
||||||
("t2 sub subsub", None),
|
|
||||||
("t2 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
|
|
||||||
],
|
|
||||||
"""
|
|
||||||
import t2
|
|
||||||
print t2.__doc__
|
|
||||||
import t2.sub
|
|
||||||
import t2.sub.subsub
|
|
||||||
print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
|
|
||||||
import t2
|
|
||||||
from t2 import *
|
|
||||||
print dir()
|
|
||||||
from t2 import sub
|
|
||||||
from t2.sub import subsub
|
|
||||||
from t2.sub.subsub import spam
|
|
||||||
print sub.__name__, subsub.__name__
|
|
||||||
print sub.subsub.__name__
|
|
||||||
print dir()
|
|
||||||
import t2.sub
|
|
||||||
import t2.sub.subsub
|
|
||||||
print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
|
|
||||||
from t2 import *
|
|
||||||
print dir()
|
|
||||||
"""),
|
|
||||||
|
|
||||||
("t3", [
|
import t2.sub
|
||||||
("t3", None),
|
import t2.sub.subsub
|
||||||
("t3 __init__"+os.extsep+"py", "print __name__, 'loading'"),
|
self.assertEqual(t2.__name__, "t2")
|
||||||
("t3 sub", None),
|
self.assertEqual(t2.sub.__name__, "t2.sub")
|
||||||
("t3 sub __init__"+os.extsep+"py", ""),
|
self.assertEqual(t2.sub.subsub.__name__, "t2.sub.subsub")
|
||||||
("t3 sub subsub", None),
|
|
||||||
("t3 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
|
|
||||||
],
|
|
||||||
"""
|
|
||||||
import t3.sub.subsub
|
|
||||||
print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__
|
|
||||||
reload(t3)
|
|
||||||
reload(t3.sub)
|
|
||||||
reload(t3.sub.subsub)
|
|
||||||
"""),
|
|
||||||
|
|
||||||
("t4", [
|
# This exec crap is needed because Py3k forbids 'import *' outside
|
||||||
("t4"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)'"),
|
# of module-scope and __import__() is insufficient for what we need.
|
||||||
("t4", None),
|
s = """
|
||||||
("t4 __init__"+os.extsep+"py", "print __name__, 'loading'"),
|
import t2
|
||||||
("t4 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
|
from t2 import *
|
||||||
("t4 sub", None),
|
self.assertEqual(dir(), ['self', 'sub', 't2'])
|
||||||
("t4 sub __init__"+os.extsep+"py", ""),
|
"""
|
||||||
("t4 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
|
self.run_code(s)
|
||||||
("t4 sub subsub", None),
|
|
||||||
("t4 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
|
|
||||||
],
|
|
||||||
"""
|
|
||||||
from t4.sub.subsub import *
|
|
||||||
print "t4.sub.subsub.spam =", spam
|
|
||||||
"""),
|
|
||||||
|
|
||||||
("t5", [
|
from t2 import sub
|
||||||
("t5", None),
|
from t2.sub import subsub
|
||||||
("t5 __init__"+os.extsep+"py", "import t5.foo"),
|
from t2.sub.subsub import spam
|
||||||
("t5 string"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
|
self.assertEqual(sub.__name__, "t2.sub")
|
||||||
("t5 foo"+os.extsep+"py",
|
self.assertEqual(subsub.__name__, "t2.sub.subsub")
|
||||||
"print __name__, 'loading'; import string; print string.spam"),
|
self.assertEqual(sub.subsub.__name__, "t2.sub.subsub")
|
||||||
],
|
for name in ['spam', 'sub', 'subsub', 't2']:
|
||||||
"""
|
self.failUnless(locals()["name"], "Failed to import %s" % name)
|
||||||
import t5
|
|
||||||
from t5 import *
|
|
||||||
print dir()
|
|
||||||
import t5
|
|
||||||
print fixdir(dir(t5))
|
|
||||||
print fixdir(dir(t5.foo))
|
|
||||||
print fixdir(dir(t5.string))
|
|
||||||
"""),
|
|
||||||
|
|
||||||
("t6", [
|
import t2.sub
|
||||||
("t6", None),
|
import t2.sub.subsub
|
||||||
("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"),
|
self.assertEqual(t2.__name__, "t2")
|
||||||
("t6 spam"+os.extsep+"py", "print __name__, 'loading'"),
|
self.assertEqual(t2.sub.__name__, "t2.sub")
|
||||||
("t6 ham"+os.extsep+"py", "print __name__, 'loading'"),
|
self.assertEqual(t2.sub.subsub.__name__, "t2.sub.subsub")
|
||||||
("t6 eggs"+os.extsep+"py", "print __name__, 'loading'"),
|
|
||||||
],
|
|
||||||
"""
|
|
||||||
import t6
|
|
||||||
print fixdir(dir(t6))
|
|
||||||
from t6 import *
|
|
||||||
print fixdir(dir(t6))
|
|
||||||
print dir()
|
|
||||||
"""),
|
|
||||||
|
|
||||||
("t7", [
|
s = """
|
||||||
("t7"+os.extsep+"py", "print 'Importing t7"+os.extsep+"py'"),
|
from t2 import *
|
||||||
("t7", None),
|
self.failUnless(dir(), ['self', 'sub'])
|
||||||
("t7 __init__"+os.extsep+"py", "print __name__, 'loading'"),
|
"""
|
||||||
("t7 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
|
self.run_code(s)
|
||||||
("t7 sub", None),
|
|
||||||
("t7 sub __init__"+os.extsep+"py", ""),
|
|
||||||
("t7 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
|
|
||||||
("t7 sub subsub", None),
|
|
||||||
("t7 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
|
|
||||||
],
|
|
||||||
"""
|
|
||||||
t7, sub, subsub = None, None, None
|
|
||||||
import t7 as tas
|
|
||||||
print fixdir(dir(tas))
|
|
||||||
verify(not t7)
|
|
||||||
from t7 import sub as subpar
|
|
||||||
print fixdir(dir(subpar))
|
|
||||||
verify(not t7 and not sub)
|
|
||||||
from t7.sub import subsub as subsubsub
|
|
||||||
print fixdir(dir(subsubsub))
|
|
||||||
verify(not t7 and not sub and not subsub)
|
|
||||||
from t7.sub.subsub import spam as ham
|
|
||||||
print "t7.sub.subsub.spam =", ham
|
|
||||||
verify(not t7 and not sub and not subsub)
|
|
||||||
"""),
|
|
||||||
|
|
||||||
]
|
def test_3(self):
|
||||||
|
hier = [
|
||||||
|
("t3", None),
|
||||||
|
("t3 __init__"+os.extsep+"py", ""),
|
||||||
|
("t3 sub", None),
|
||||||
|
("t3 sub __init__"+os.extsep+"py", ""),
|
||||||
|
("t3 sub subsub", None),
|
||||||
|
("t3 sub subsub __init__"+os.extsep+"py", "spam = 1"),
|
||||||
|
]
|
||||||
|
self.mkhier(hier)
|
||||||
|
|
||||||
nontests = [
|
import t3.sub.subsub
|
||||||
("x5", [], ("import a" + ".a"*400)),
|
self.assertEqual(t3.__name__, "t3")
|
||||||
("x6", [], ("import a" + ".a"*499)),
|
self.assertEqual(t3.sub.__name__, "t3.sub")
|
||||||
("x7", [], ("import a" + ".a"*500)),
|
self.assertEqual(t3.sub.subsub.__name__, "t3.sub.subsub")
|
||||||
("x8", [], ("import a" + ".a"*1100)),
|
|
||||||
("x9", [], ("import " + "a"*400)),
|
|
||||||
("x10", [], ("import " + "a"*500)),
|
|
||||||
("x11", [], ("import " + "a"*998)),
|
|
||||||
("x12", [], ("import " + "a"*999)),
|
|
||||||
("x13", [], ("import " + "a"*999)),
|
|
||||||
("x14", [], ("import " + "a"*2000)),
|
|
||||||
]
|
|
||||||
|
|
||||||
"""XXX Things to test
|
def test_4(self):
|
||||||
|
hier = [
|
||||||
|
("t4.py", "raise RuntimeError('Shouldnt load t4.py')"),
|
||||||
|
("t4", None),
|
||||||
|
("t4 __init__"+os.extsep+"py", ""),
|
||||||
|
("t4 sub.py", "raise RuntimeError('Shouldnt load sub.py')"),
|
||||||
|
("t4 sub", None),
|
||||||
|
("t4 sub __init__"+os.extsep+"py", ""),
|
||||||
|
("t4 sub subsub"+os.extsep+"py",
|
||||||
|
"raise RuntimeError('Shouldnt load subsub.py')"),
|
||||||
|
("t4 sub subsub", None),
|
||||||
|
("t4 sub subsub __init__"+os.extsep+"py", "spam = 1"),
|
||||||
|
]
|
||||||
|
self.mkhier(hier)
|
||||||
|
|
||||||
import package without __init__
|
s = """
|
||||||
import package with __init__
|
from t4.sub.subsub import *
|
||||||
__init__ importing submodule
|
self.assertEqual(spam, 1)
|
||||||
__init__ importing global module
|
"""
|
||||||
__init__ defining variables
|
self.run_code(s)
|
||||||
submodule importing other submodule
|
|
||||||
submodule importing global module
|
|
||||||
submodule import submodule via global name
|
|
||||||
from package import submodule
|
|
||||||
from package import subpackage
|
|
||||||
from package import variable (defined in __init__)
|
|
||||||
from package import * (defined in __init__)
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Run the tests
|
def test_5(self):
|
||||||
|
hier = [
|
||||||
|
("t5", None),
|
||||||
|
("t5 __init__"+os.extsep+"py", "import t5.foo"),
|
||||||
|
("t5 string"+os.extsep+"py", "spam = 1"),
|
||||||
|
("t5 foo"+os.extsep+"py",
|
||||||
|
"from . import string; assert string.spam == 1"),
|
||||||
|
]
|
||||||
|
self.mkhier(hier)
|
||||||
|
|
||||||
args = []
|
import t5
|
||||||
if __name__ == '__main__':
|
s = """
|
||||||
args = sys.argv[1:]
|
from t5 import *
|
||||||
if args and args[0] == '-q':
|
self.assertEqual(dir(), ['foo', 'self', 'string', 't5'])
|
||||||
verbose = 0
|
"""
|
||||||
del args[0]
|
self.run_code(s)
|
||||||
|
|
||||||
for name, hier, code in tests:
|
import t5
|
||||||
if args and name not in args:
|
self.assertEqual(fixdir(dir(t5)),
|
||||||
print "skipping test", name
|
['__doc__', '__file__', '__name__',
|
||||||
continue
|
'__path__', 'foo', 'string', 't5'])
|
||||||
print "running test", name
|
self.assertEqual(fixdir(dir(t5.foo)),
|
||||||
runtest(hier, code)
|
['__doc__', '__file__', '__name__', 'string'])
|
||||||
|
self.assertEqual(fixdir(dir(t5.string)),
|
||||||
|
['__doc__', '__file__', '__name__', 'spam'])
|
||||||
|
|
||||||
# Test
|
def test_6(self):
|
||||||
import sys
|
hier = [
|
||||||
import imp
|
("t6", None),
|
||||||
try:
|
("t6 __init__"+os.extsep+"py",
|
||||||
import sys.imp
|
"__all__ = ['spam', 'ham', 'eggs']"),
|
||||||
except ImportError:
|
("t6 spam"+os.extsep+"py", ""),
|
||||||
# This is what we expect
|
("t6 ham"+os.extsep+"py", ""),
|
||||||
pass
|
("t6 eggs"+os.extsep+"py", ""),
|
||||||
else:
|
]
|
||||||
raise TestFailed, "No ImportError exception on 'import sys.imp'"
|
self.mkhier(hier)
|
||||||
|
|
||||||
|
import t6
|
||||||
|
self.assertEqual(fixdir(dir(t6)),
|
||||||
|
['__all__', '__doc__', '__file__',
|
||||||
|
'__name__', '__path__'])
|
||||||
|
s = """
|
||||||
|
import t6
|
||||||
|
from t6 import *
|
||||||
|
self.assertEqual(fixdir(dir(t6)),
|
||||||
|
['__all__', '__doc__', '__file__',
|
||||||
|
'__name__', '__path__', 'eggs',
|
||||||
|
'ham', 'spam'])
|
||||||
|
self.assertEqual(dir(), ['eggs', 'ham', 'self', 'spam', 't6'])
|
||||||
|
"""
|
||||||
|
self.run_code(s)
|
||||||
|
|
||||||
|
def test_7(self):
|
||||||
|
hier = [
|
||||||
|
("t7"+os.extsep+"py", ""),
|
||||||
|
("t7", None),
|
||||||
|
("t7 __init__"+os.extsep+"py", ""),
|
||||||
|
("t7 sub"+os.extsep+"py",
|
||||||
|
"raise RuntimeError('Shouldnt load sub.py')"),
|
||||||
|
("t7 sub", None),
|
||||||
|
("t7 sub __init__"+os.extsep+"py", ""),
|
||||||
|
("t7 sub "+os.extsep+"py",
|
||||||
|
"raise RuntimeError('Shouldnt load subsub.py')"),
|
||||||
|
("t7 sub subsub", None),
|
||||||
|
("t7 sub subsub __init__"+os.extsep+"py",
|
||||||
|
"spam = 1"),
|
||||||
|
]
|
||||||
|
self.mkhier(hier)
|
||||||
|
|
||||||
|
|
||||||
|
t7, sub, subsub = None, None, None
|
||||||
|
import t7 as tas
|
||||||
|
self.assertEqual(fixdir(dir(tas)),
|
||||||
|
['__doc__', '__file__', '__name__', '__path__'])
|
||||||
|
self.failIf(t7)
|
||||||
|
from t7 import sub as subpar
|
||||||
|
self.assertEqual(fixdir(dir(subpar)),
|
||||||
|
['__doc__', '__file__', '__name__', '__path__'])
|
||||||
|
self.failIf(t7)
|
||||||
|
self.failIf(sub)
|
||||||
|
from t7.sub import subsub as subsubsub
|
||||||
|
self.assertEqual(fixdir(dir(subsubsub)),
|
||||||
|
['__doc__', '__file__', '__name__', '__path__',
|
||||||
|
'spam'])
|
||||||
|
self.failIf(t7)
|
||||||
|
self.failIf(sub)
|
||||||
|
self.failIf(subsub)
|
||||||
|
from t7.sub.subsub import spam as ham
|
||||||
|
self.assertEqual(ham, 1)
|
||||||
|
self.failIf(t7)
|
||||||
|
self.failIf(sub)
|
||||||
|
self.failIf(subsub)
|
||||||
|
|
||||||
|
|
||||||
|
def test_main():
|
||||||
|
test_support.run_unittest(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
test_main()
|
||||||
|
|
Loading…
Reference in New Issue