summaryrefslogtreecommitdiffstats
path: root/Python/opcode_targets.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/opcode_targets.h')
0 files changed, 0 insertions, 0 deletions
54926cca7acd}', # 3.1c1 '3.1.122': '{bceb5133-e2ee-4109-951f-ac7e941a1692}', # 3.1c2 '3.1.150': '{3ad61ee5-81d2-4d7e-adef-da1dd37277d1}', # 3.1.0 + '3.1.1121':'{5782f957-6d49-41d4-bad0-668715dfd638}', # 3.1.1c1 + '3.1.1150':'{7ff90460-89b7-435b-b583-b37b2815ccc7}', # 3.1.1 + '3.1.2121':'{ec45624a-378c-43be-91f3-3f7a59b0d90c}', # 3.1.2c1 + '3.1.2150':'{d40af016-506c-43fb-a738-bd54fa8c1e85}', # 3.1.2 } -- cgit v0.12 From 9d49c1d1867b7ad6f146fa4b21450154ac77ef96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 28 Jun 2009 09:40:34 +0000 Subject: Merged revisions 73600 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73600 | martin.v.loewis | 2009-06-28 11:36:14 +0200 (So, 28 Jun 2009) | 10 lines Merged revisions 73598 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73598 | martin.v.loewis | 2009-06-28 11:32:39 +0200 (So, 28 Jun 2009) | 3 lines Issue 5390: Add uninstall icon independent of whether file extensions are installed. ........ ................ --- Misc/NEWS | 6 ++++++ Tools/msi/msi.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index c8c4f85..a86c3aa 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -15,6 +15,12 @@ Core and Builtins Library ------- +Build +----- + +- Issue 5390: Add uninstall icon independent of whether file + extensions are installed. + What's New in Python 3.1? ========================= diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py index 95c07bc..d6a2048 100644 --- a/Tools/msi/msi.py +++ b/Tools/msi/msi.py @@ -1258,7 +1258,7 @@ def add_registry(db): "", r"[TARGETDIR]Python.exe", "REGISTRY.def"), ("DisplayIcon", -1, r"Software\Microsoft\Windows\CurrentVersion\Uninstall\%s" % product_code, - "DisplayIcon", "[TARGETDIR]python.exe", "REGISTRY.def") + "DisplayIcon", "[TARGETDIR]python.exe", "REGISTRY") ]) # Shortcuts, see "Shortcut Table" add_data(db, "Directory", -- cgit v0.12 From a01bd62f481336c1a874eebd3e93143aa17cf3c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 28 Jun 2009 12:29:40 +0000 Subject: Merged revisions 73607 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73607 | martin.v.loewis | 2009-06-28 14:28:29 +0200 (So, 28 Jun 2009) | 9 lines Merged revisions 73606 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73606 | martin.v.loewis | 2009-06-28 14:24:23 +0200 (So, 28 Jun 2009) | 2 lines Fix types in logic to compute help file name. ........ ................ --- Tools/msi/msi.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py index d6a2048..cd67e99 100644 --- a/Tools/msi/msi.py +++ b/Tools/msi/msi.py @@ -117,13 +117,13 @@ pythondll_uuid = { # Compute the name that Sphinx gives to the docfile docfile = "" -if micro: - docfile = str(micro) +if int(micro): + docfile = micro if level < 0xf: if level == 0xC: - docfile = "rc%s" % (serial,) + docfile += "rc%s" % (serial,) else: - docfile = '%x%s' % (level, serial) + docfile += '%x%s' % (level, serial) docfile = 'python%s%s%s.chm' % (major, minor, docfile) # Build the mingw import library, libpythonXY.a -- cgit v0.12 From 5111127f455d952750f1146cbea14bbe1ca25394 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Sun, 28 Jun 2009 13:32:29 +0000 Subject: Merged revisions 73609 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73609 | hirokazu.yamamoto | 2009-06-28 22:21:41 +0900 | 1 line Sorted file names. ........ --- PC/VC6/pythoncore.dsp | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/PC/VC6/pythoncore.dsp b/PC/VC6/pythoncore.dsp index 91c522c..123b491 100644 --- a/PC/VC6/pythoncore.dsp +++ b/PC/VC6/pythoncore.dsp @@ -141,30 +141,6 @@ SOURCE=..\..\Modules\_heapqmodule.c # End Source File # Begin Source File -SOURCE=..\..\Modules\_io\bytesio.c -# End Source File -# Begin Source File - -SOURCE=..\..\Modules\_io\stringio.c -# End Source File -# Begin Source File - -SOURCE=..\..\Modules\_io\fileio.c -# End Source File -# Begin Source File - -SOURCE="..\..\Modules\_io\bufferedio.c" -# End Source File -# Begin Source File - -SOURCE=..\..\Modules\_io\iobase.c -# End Source File -# Begin Source File - -SOURCE=..\..\Modules\_io\textio.c -# End Source File -# Begin Source File - SOURCE=..\..\Modules\_io\_iomodule.c # End Source File # Begin Source File @@ -261,6 +237,10 @@ SOURCE=..\..\Objects\boolobject.c # End Source File # Begin Source File +SOURCE=..\..\Modules\_io\bufferedio.c +# End Source File +# Begin Source File + SOURCE=..\..\Objects\bytearrayobject.c # End Source File # Begin Source File @@ -269,6 +249,10 @@ SOURCE=..\..\Objects\bytes_methods.c # End Source File # Begin Source File +SOURCE=..\..\Modules\_io\bytesio.c +# End Source File +# Begin Source File + SOURCE=..\..\Objects\bytesobject.c # End Source File # Begin Source File @@ -369,6 +353,10 @@ SOURCE=..\..\Objects\exceptions.c # End Source File # Begin Source File +SOURCE=..\..\Modules\_io\fileio.c +# End Source File +# Begin Source File + SOURCE=..\..\Objects\fileobject.c # End Source File # Begin Source File @@ -487,6 +475,10 @@ SOURCE=..\..\Modules\zlib\inftrees.c # End Source File # Begin Source File +SOURCE=..\..\Modules\_io\iobase.c +# End Source File +# Begin Source File + SOURCE=..\..\Objects\iterobject.c # End Source File # Begin Source File @@ -675,6 +667,10 @@ SOURCE=..\..\Objects\sliceobject.c # End Source File # Begin Source File +SOURCE=..\..\Modules\_io\stringio.c +# End Source File +# Begin Source File + SOURCE=..\..\Python\structmember.c # End Source File # Begin Source File @@ -695,6 +691,10 @@ SOURCE=..\..\Python\sysmodule.c # End Source File # Begin Source File +SOURCE=..\..\Modules\_io\textio.c +# End Source File +# Begin Source File + SOURCE=..\..\Python\thread.c # End Source File # Begin Source File -- cgit v0.12 From 2e5820b804fe9a3f192d6a018b5ee655f792f5fb Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 28 Jun 2009 16:26:13 +0000 Subject: Merged revisions 73618 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73618 | benjamin.peterson | 2009-06-28 11:23:55 -0500 (Sun, 28 Jun 2009) | 1 line fix useless comparison #6355 ........ --- Objects/capsule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objects/capsule.c b/Objects/capsule.c index 5304ce1..3d2d626 100644 --- a/Objects/capsule.c +++ b/Objects/capsule.c @@ -33,7 +33,7 @@ name_matches(const char *name1, const char *name2) { /* if either is NULL, */ if (!name1 || !name2) { /* they're only the same if they're both NULL. */ - return name2 == name2; + return name1 == name2; } return !strcmp(name1, name2); } -- cgit v0.12 From d76c8da09822349d5a92a04aa97966e777ba2657 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 28 Jun 2009 17:35:48 +0000 Subject: Merged revisions 73623-73624 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73623 | benjamin.peterson | 2009-06-28 12:22:03 -0500 (Sun, 28 Jun 2009) | 58 lines Merged revisions 73004,73439,73496,73509,73529,73564,73576-73577,73595-73596,73605 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73004 | jeffrey.yasskin | 2009-05-28 22:44:31 -0500 (Thu, 28 May 2009) | 5 lines Fix nearly all compilation warnings under Apple gcc-4.0. Tested with OPT="-g -Wall -Wstrict-prototypes -Werror" in both --with-pydebug mode and --without. There's still a batch of non-prototype warnings in Xlib.h that I don't know how to fix. ........ r73439 | benjamin.peterson | 2009-06-15 19:29:31 -0500 (Mon, 15 Jun 2009) | 1 line don't mask encoding errors when decoding a string #6289 ........ r73496 | vinay.sajip | 2009-06-21 12:37:27 -0500 (Sun, 21 Jun 2009) | 1 line Issue #6314: logging.basicConfig() performs extra checks on the "level" argument. ........ r73509 | amaury.forgeotdarc | 2009-06-22 14:33:48 -0500 (Mon, 22 Jun 2009) | 2 lines #4490 Fix sample code run by "python -m xml.sax.xmlreader" ........ r73529 | r.david.murray | 2009-06-23 13:02:46 -0500 (Tue, 23 Jun 2009) | 4 lines Fix issue 5230 by having pydoc's safeimport check to see if the import error was thrown from itself in order to decide if the module can't be found. Thanks to Lucas Prado Melo for collaborating on the fix and tests. ........ r73564 | amaury.forgeotdarc | 2009-06-25 17:29:29 -0500 (Thu, 25 Jun 2009) | 6 lines #2016 Fix a crash in function call when the **kwargs dictionary is mutated during the function call setup. This even gives a slight speedup, probably because tuple allocation is faster than PyMem_NEW. ........ r73576 | benjamin.peterson | 2009-06-26 18:37:06 -0500 (Fri, 26 Jun 2009) | 1 line document is_declared_global() ........ r73577 | benjamin.peterson | 2009-06-27 09:16:23 -0500 (Sat, 27 Jun 2009) | 1 line link to extensive generator docs in the reference manual ........ r73595 | ezio.melotti | 2009-06-27 18:45:39 -0500 (Sat, 27 Jun 2009) | 1 line stmt and setup can contain multiple statements, see #5896 ........ r73596 | ezio.melotti | 2009-06-27 19:07:45 -0500 (Sat, 27 Jun 2009) | 1 line Fixed a wrong apostrophe ........ r73605 | georg.brandl | 2009-06-28 07:10:18 -0500 (Sun, 28 Jun 2009) | 1 line Remove stray pychecker directive. ........ ................ r73624 | benjamin.peterson | 2009-06-28 12:32:20 -0500 (Sun, 28 Jun 2009) | 1 line document BufferedIOBase.raw and TextIOBase.buffer ................ --- Doc/library/io.rst | 14 +++++++++++++- Doc/library/stdtypes.rst | 8 ++++++++ Doc/library/symtable.rst | 4 ++++ Doc/library/timeit.rst | 5 +++-- Lib/email/mime/nonmultipart.py | 4 ---- Lib/pydoc.py | 7 ++++--- Lib/test/test_coding.py | 12 ++++++++++++ Lib/test/test_extcall.py | 18 ++++++++++++++++++ Lib/test/test_pydoc.py | 42 ++++++++++++++++++++++++++++++++++++++++++ Lib/xml/sax/expatreader.py | 6 +++--- Misc/ACKS | 1 + Modules/_ssl.c | 2 +- Modules/_struct.c | 2 ++ Objects/funcobject.c | 21 +++++++++++---------- Parser/tokenizer.c | 5 +---- Python/compile.c | 12 ------------ 16 files changed, 123 insertions(+), 40 deletions(-) diff --git a/Doc/library/io.rst b/Doc/library/io.rst index 5866113..71d3f67 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -359,9 +359,15 @@ I/O Base Classes implementation, but wrap one like :class:`BufferedWriter` and :class:`BufferedReader`. - :class:`BufferedIOBase` provides or overrides these methods in addition to + :class:`BufferedIOBase` provides or overrides these members in addition to those from :class:`IOBase`: + .. attribute:: raw + + The underlying raw stream (a :class:`RawIOBase` instance) that + :class:`BufferedIOBase` deals with. This is not part of the + :class:`BufferedIOBase` API and may not exist on some implementations. + .. method:: detach() Separate the underlying raw stream from the buffer and return it. @@ -607,6 +613,12 @@ Text I/O A string, a tuple of strings, or ``None``, indicating the newlines translated so far. + .. attribute:: buffer + + The underlying binary buffer (a :class:`BufferedIOBase` instance) that + :class:`TextIOBase` deals with. This is not part of the + :class:`TextIOBase` API and may not exist on some implementations. + .. method:: detach() Separate the underlying buffer from the :class:`TextIOBase` and return it. diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index bd02b37..1ccc457 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -583,10 +583,18 @@ Once an iterator's :meth:`__next__` method raises :exc:`StopIteration`, it must continue to do so on subsequent calls. Implementations that do not obey this property are deemed broken. + +.. _generator-types: + +Generator Types +--------------- + Python's :term:`generator`\s provide a convenient way to implement the iterator protocol. If a container object's :meth:`__iter__` method is implemented as a generator, it will automatically return an iterator object (technically, a generator object) supplying the :meth:`__iter__` and :meth:`__next__` methods. +More information about generators can be found in :ref:`the documentation for +the yield expression `. .. _typesseq: diff --git a/Doc/library/symtable.rst b/Doc/library/symtable.rst index 9ea3f01..9aafd4e 100644 --- a/Doc/library/symtable.rst +++ b/Doc/library/symtable.rst @@ -144,6 +144,10 @@ Examining Symbol Tables Return ``True`` if the symbol is global. + .. method:: is_declared_global() + + Return ``True`` if the symbol is declared global with a global statement. + .. method:: is_local() Return ``True`` if the symbol is local to its block. diff --git a/Doc/library/timeit.rst b/Doc/library/timeit.rst index 495ac81..a85fa3e 100644 --- a/Doc/library/timeit.rst +++ b/Doc/library/timeit.rst @@ -24,8 +24,9 @@ The module defines the following public class: The constructor takes a statement to be timed, an additional statement used for setup, and a timer function. Both statements default to ``'pass'``; the timer - function is platform-dependent (see the module doc string). The statements may - contain newlines, as long as they don't contain multi-line string literals. + function is platform-dependent (see the module doc string). *stmt* and *setup* + may also contain multiple statements separated by ``;`` or newlines, as long as + they don't contain multi-line string literals. To measure the execution time of the first statement, use the :meth:`timeit` method. The :meth:`repeat` method is a convenience to call :meth:`timeit` diff --git a/Lib/email/mime/nonmultipart.py b/Lib/email/mime/nonmultipart.py index dd280b5..fc3b9eb 100644 --- a/Lib/email/mime/nonmultipart.py +++ b/Lib/email/mime/nonmultipart.py @@ -14,13 +14,9 @@ from email.mime.base import MIMEBase class MIMENonMultipart(MIMEBase): """Base class for MIME multipart/* type messages.""" - __pychecker__ = 'unusednames=payload' - def attach(self, payload): # The public API prohibits attaching multiple subparts to MIMEBase # derived subtypes since none of them are, by definition, of content # type multipart/* raise errors.MultipartConversionError( 'Cannot attach additional subparts to non-multipart/*') - - del __pychecker__ diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 6475dec..fe439c2 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -54,6 +54,7 @@ Richard Chamberlain, for the first implementation of textdoc. import sys, imp, os, re, inspect, builtins, pkgutil from reprlib import Repr +from traceback import extract_tb as _extract_tb try: from collections import deque except ImportError: @@ -292,9 +293,9 @@ def safeimport(path, forceload=0, cache={}): elif exc is SyntaxError: # A SyntaxError occurred before we could execute the module. raise ErrorDuringImport(value.filename, info) - elif exc is ImportError and \ - str(value).lower().split()[:2] == ['no', 'module']: - # The module was not found. + elif exc is ImportError and _extract_tb(tb)[-1][2]=='safeimport': + # The import error occurred directly in this function, + # which means there is no such module in the path. return None else: # Some other error occurred during the importing process. diff --git a/Lib/test/test_coding.py b/Lib/test/test_coding.py index 51873b4..9d368c5 100644 --- a/Lib/test/test_coding.py +++ b/Lib/test/test_coding.py @@ -49,6 +49,18 @@ class CodingTest(unittest.TestCase): unlink(TESTFN+".pyc") sys.path.pop(0) + def test_error_from_string(self): + # See http://bugs.python.org/issue6289 + input = "# coding: ascii\n\N{SNOWMAN}".encode('utf-8') + try: + compile(input, "", "exec") + except SyntaxError as e: + expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ + "ordinal not in range(128)" + self.assertTrue(str(e).startswith(expected)) + else: + self.fail("didn't raise") + def test_main(): test.support.run_unittest(CodingTest) diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py index 7ed0e2e..f1fff0a 100644 --- a/Lib/test/test_extcall.py +++ b/Lib/test/test_extcall.py @@ -243,6 +243,24 @@ TypeError if te dictionary is not empty ... TypeError: id() takes no keyword arguments +A corner case of keyword dictionary items being deleted during +the function call setup. See . + + >>> class Name(str): + ... def __eq__(self, other): + ... try: + ... del x[self] + ... except KeyError: + ... pass + ... return str.__eq__(self, other) + ... def __hash__(self): + ... return str.__hash__(self) + + >>> x = {Name("a"):1, Name("b"):2} + >>> def f(a, b): + ... print(a,b) + >>> f(**x) + 1 2 """ from test import support diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 03b3539..00a2ada 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -1,5 +1,6 @@ import sys import os +import os.path import difflib import subprocess import re @@ -7,6 +8,8 @@ import pydoc import inspect import unittest import test.support +from contextlib import contextmanager +from test.support import TESTFN, forget, rmtree, EnvironmentVarGuard from test import pydoc_mod @@ -183,6 +186,9 @@ war # output pattern for missing module missing_pattern = "no Python documentation found for '%s'" +# output pattern for module with bad imports +badimport_pattern = "problem in %s - ImportError: No module named %s" + def run_pydoc(module_name, *args): """ Runs pydoc on the specified module. Returns the stripped @@ -254,6 +260,42 @@ class PyDocDocTest(unittest.TestCase): self.assertEqual(expected, result, "documentation for missing module found") + def test_badimport(self): + # This tests the fix for issue 5230, where if pydoc found the module + # but the module had an internal import error pydoc would report no doc + # found. + modname = 'testmod_xyzzy' + testpairs = ( + ('i_am_not_here', 'i_am_not_here'), + ('test.i_am_not_here_either', 'i_am_not_here_either'), + ('test.i_am_not_here.neither_am_i', 'i_am_not_here.neither_am_i'), + ('i_am_not_here.{}'.format(modname), 'i_am_not_here.{}'.format(modname)), + ('test.{}'.format(modname), modname), + ) + + @contextmanager + def newdirinpath(dir): + os.mkdir(dir) + sys.path.insert(0, dir) + yield + sys.path.pop(0) + rmtree(dir) + + with newdirinpath(TESTFN), EnvironmentVarGuard() as env: + env['PYTHONPATH'] = TESTFN + fullmodname = os.path.join(TESTFN, modname) + sourcefn = fullmodname + os.extsep + "py" + for importstring, expectedinmsg in testpairs: + f = open(sourcefn, 'w') + f.write("import {}\n".format(importstring)) + f.close() + try: + result = run_pydoc(modname).decode("ascii") + finally: + forget(modname) + expected = badimport_pattern % (modname, expectedinmsg) + self.assertEqual(expected, result) + def test_input_strip(self): missing_module = " test.i_am_not_here " result = str(run_pydoc(missing_module), 'ascii') diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py index 26b05c3..c9fc894 100644 --- a/Lib/xml/sax/expatreader.py +++ b/Lib/xml/sax/expatreader.py @@ -407,8 +407,8 @@ def create_parser(*args, **kwargs): # --- if __name__ == "__main__": - import xml.sax + import xml.sax.saxutils p = create_parser() - p.setContentHandler(xml.sax.XMLGenerator()) + p.setContentHandler(xml.sax.saxutils.XMLGenerator()) p.setErrorHandler(xml.sax.ErrorHandler()) - p.parse("../../../hamlet.xml") + p.parse("http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml") diff --git a/Misc/ACKS b/Misc/ACKS index 4d58f95..0fa88ed 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -482,6 +482,7 @@ Andrew McNamara Craig McPheeters Lambert Meertens Bill van Melle +Lucas Prado Melo Luke Mewburn Mike Meyer Steven Miale diff --git a/Modules/_ssl.c b/Modules/_ssl.c index b400057..906138d 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -658,7 +658,7 @@ _get_peer_alt_names (X509 *certificate) { char buf[2048]; char *vptr; int len; - const unsigned char *p; + unsigned char *p; if (certificate == NULL) return peer_alt_names; diff --git a/Modules/_struct.c b/Modules/_struct.c index 83f5685..27d596c 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -132,6 +132,7 @@ get_long(PyObject *v, long *p) /* Same, but handling unsigned long */ +#ifndef PY_STRUCT_OVERFLOW_MASKING static int get_ulong(PyObject *v, unsigned long *p) { @@ -152,6 +153,7 @@ get_ulong(PyObject *v, unsigned long *p) *p = x; return 0; } +#endif /* PY_STRUCT_OVERFLOW_MASKING */ #ifdef HAVE_LONG_LONG diff --git a/Objects/funcobject.c b/Objects/funcobject.c index acd662c..1456810 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -593,13 +593,14 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw) { PyObject *result; PyObject *argdefs; + PyObject *kwtuple = NULL; PyObject **d, **k; Py_ssize_t nk, nd; argdefs = PyFunction_GET_DEFAULTS(func); if (argdefs != NULL && PyTuple_Check(argdefs)) { d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0); - nd = PyTuple_Size(argdefs); + nd = PyTuple_GET_SIZE(argdefs); } else { d = NULL; @@ -609,16 +610,17 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw) if (kw != NULL && PyDict_Check(kw)) { Py_ssize_t pos, i; nk = PyDict_Size(kw); - k = PyMem_NEW(PyObject *, 2*nk); - if (k == NULL) { - PyErr_NoMemory(); + kwtuple = PyTuple_New(2*nk); + if (kwtuple == NULL) return NULL; - } + k = &PyTuple_GET_ITEM(kwtuple, 0); pos = i = 0; - while (PyDict_Next(kw, &pos, &k[i], &k[i+1])) + while (PyDict_Next(kw, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); i += 2; + } nk = i/2; - /* XXX This is broken if the caller deletes dict items! */ } else { k = NULL; @@ -628,13 +630,12 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw) result = PyEval_EvalCodeEx( (PyCodeObject *)PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), (PyObject *)NULL, - &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg), + &PyTuple_GET_ITEM(arg, 0), PyTuple_GET_SIZE(arg), k, nk, d, nd, PyFunction_GET_KW_DEFAULTS(func), PyFunction_GET_CLOSURE(func)); - if (k != NULL) - PyMem_DEL(k); + Py_XDECREF(kwtuple); return result; } diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 15e8185..cc142a7 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -682,11 +682,8 @@ decode_str(const char *str, struct tok_state *tok) if (tok->enc != NULL) { assert(utf8 == NULL); utf8 = translate_into_utf8(str, tok->enc); - if (utf8 == NULL) { - PyErr_Format(PyExc_SyntaxError, - "unknown encoding: %s", tok->enc); + if (utf8 == NULL) return error_ret(tok); - } str = PyBytes_AS_STRING(utf8); } assert(tok->decoding_buffer == NULL); diff --git a/Python/compile.c b/Python/compile.c index c78949d..11d7c33 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -551,18 +551,6 @@ compiler_exit_scope(struct compiler *c) } -/* Allocate a new "anonymous" local variable. - Used by list comprehensions and with statements. -*/ - -static PyObject * -compiler_new_tmpname(struct compiler *c) -{ - char tmpname[256]; - PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]", ++c->u->u_tmpname); - return PyUnicode_FromString(tmpname); -} - /* Allocate a new block and return a pointer to it. Returns NULL on error. */ -- cgit v0.12 From cf2d9ff3c5f84eb0481165167b1c523d568ecf7b Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 28 Jun 2009 20:38:24 +0000 Subject: Merged revisions 73632 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r73632 | mark.dickinson | 2009-06-28 21:36:54 +0100 (Sun, 28 Jun 2009) | 3 lines Corrections to decimal flying circus: round returns a Decimal; float should have a short repr. ........ --- Doc/library/decimal.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst index d548c0d..4eba768 100644 --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -187,9 +187,9 @@ floating point flying circus: >>> str(a) '1.34' >>> float(a) - 1.3400000000000001 - >>> round(a, 1) # round() first converts to binary floating point - 1.3 + 1.34 + >>> round(a, 1) + Decimal('1.3') >>> int(a) 1 >>> a * 5 -- cgit v0.12 From d1cc39d3d833289e924c8ded75f6cc94dc4cc5a5 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 28 Jun 2009 21:00:42 +0000 Subject: Merged revisions 73636 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r73636 | mark.dickinson | 2009-06-28 21:59:42 +0100 (Sun, 28 Jun 2009) | 2 lines Issue #6354: More fixes for code examples involving the repr of a float. ........ --- Doc/library/math.rst | 2 +- Doc/library/sqlite3.rst | 4 ++-- Doc/library/turtle.rst | 2 +- Doc/tutorial/inputoutput.rst | 8 ++++---- Doc/tutorial/introduction.rst | 2 +- Doc/tutorial/stdlib2.rst | 8 ++++---- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Doc/library/math.rst b/Doc/library/math.rst index 649487f..488230a 100644 --- a/Doc/library/math.rst +++ b/Doc/library/math.rst @@ -82,7 +82,7 @@ Number-theoretic and representation functions loss of precision by tracking multiple intermediate partial sums:: >>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) - 0.99999999999999989 + 0.9999999999999999 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 1.0 diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 6c3f6e2..53164b8 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -81,7 +81,7 @@ This example uses the iterator form:: >>> for row in c: ... print(row) ... - (u'2006-01-05', u'BUY', u'RHAT', 100, 35.140000000000001) + (u'2006-01-05', u'BUY', u'RHAT', 100, 35.14) (u'2006-03-28', u'BUY', u'IBM', 1000, 45.0) (u'2006-04-06', u'SELL', u'IBM', 500, 53.0) (u'2006-04-05', u'BUY', u'MSOFT', 1000, 72.0) @@ -591,7 +591,7 @@ Now we plug :class:`Row` in:: >>> type(r) >>> r - (u'2006-01-05', u'BUY', u'RHAT', 100.0, 35.140000000000001) + (u'2006-01-05', u'BUY', u'RHAT', 100.0, 35.14) >>> len(r) 5 >>> r[2] diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst index 9070107..b7f2853 100644 --- a/Doc/library/turtle.rst +++ b/Doc/library/turtle.rst @@ -881,7 +881,7 @@ Color control >>> tup = (0.2, 0.8, 0.55) >>> turtle.pencolor(tup) >>> turtle.pencolor() - (0.20000000000000001, 0.80000000000000004, 0.5490196078431373) + (0.2, 0.8, 0.5490196078431373) >>> colormode(255) >>> turtle.pencolor() (51, 204, 140) diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index eabf662..b1efd1a 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -52,10 +52,10 @@ Some examples:: 'Hello, world.' >>> repr(s) "'Hello, world.'" - >>> str(0.1) - '0.1' - >>> repr(0.1) - '0.10000000000000001' + >>> str(1.0/7.0) + '0.142857142857' + >>> repr(1.0/7.0) + '0.14285714285714285' >>> x = 10 * 3.25 >>> y = 200 * 200 >>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...' diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst index 3757fc3..1b3faae 100644 --- a/Doc/tutorial/introduction.rst +++ b/Doc/tutorial/introduction.rst @@ -56,7 +56,7 @@ operators ``+``, ``-``, ``*`` and ``/`` work just like in most other languages >>> (50-5*6)/4 5.0 >>> 8/5 # Fractions aren't lost when dividing integers - 1.6000000000000001 + 1.6 Note: You might not see exactly the same result; floating point results can differ from one machine to another. We will say more later about controlling diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst index 4be3275..d17b031 100644 --- a/Doc/tutorial/stdlib2.rst +++ b/Doc/tutorial/stdlib2.rst @@ -359,10 +359,10 @@ results in decimal floating point and binary floating point. The difference becomes significant if the results are rounded to the nearest cent:: >>> from decimal import * - >>> Decimal('0.70') * Decimal('1.05') - Decimal("0.7350") - >>> .70 * 1.05 - 0.73499999999999999 + >>> round(Decimal('0.70') * Decimal('1.05'), 2) + Decimal('0.74') + >>> round(.70 * 1.05, 2) + 0.73 The :class:`Decimal` result keeps a trailing zero, automatically inferring four place significance from multiplicands with two place significance. Decimal -- cgit v0.12 From 9307839ee9e1445dd48bba6531b51738c075b746 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 28 Jun 2009 21:20:21 +0000 Subject: Merged revisions 73640 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r73640 | mark.dickinson | 2009-06-28 22:19:18 +0100 (Sun, 28 Jun 2009) | 3 lines Issue #6354 continued: reword confusing tutorial note on the (no-longer existing) difference between str(8/5) and repr(8/5). ........ --- Doc/tutorial/introduction.rst | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst index 1b3faae..b279f71 100644 --- a/Doc/tutorial/introduction.rst +++ b/Doc/tutorial/introduction.rst @@ -60,16 +60,9 @@ operators ``+``, ``-``, ``*`` and ``/`` work just like in most other languages Note: You might not see exactly the same result; floating point results can differ from one machine to another. We will say more later about controlling -the appearance of floating point output; what we see here is the most -informative display but not as easy to read as we would get with:: - - >>> print(8/5) - 1.6 - -For clarity in this tutorial we will show the simpler floating point output -unless we are specifically discussing output formatting, and explain later -why these two ways of displaying floating point data come to be different. -See :ref:`tut-fp-issues` for a full discussion. +the appearance of floating point output. See also :ref:`tut-fp-issues` for a +full discussion of some of the subtleties of floating point numbers and their +representations. To do integer division and get an integer result, discarding any fractional result, there is another operator, ``//``:: -- cgit v0.12 From a1713bdfed6f634aa054b74b99e50180157698ae Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 28 Jun 2009 21:25:41 +0000 Subject: Merged revisions 73642 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r73642 | mark.dickinson | 2009-06-28 22:24:42 +0100 (Sun, 28 Jun 2009) | 1 line Fix incorrect quote type on Decimal examples ........ --- Doc/tutorial/stdlib2.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst index d17b031..938430f 100644 --- a/Doc/tutorial/stdlib2.rst +++ b/Doc/tutorial/stdlib2.rst @@ -373,7 +373,7 @@ Exact representation enables the :class:`Decimal` class to perform modulo calculations and equality tests that are unsuitable for binary floating point:: >>> Decimal('1.00') % Decimal('.10') - Decimal("0.00") + Decimal('0.00') >>> 1.00 % 0.10 0.09999999999999995 @@ -386,6 +386,6 @@ The :mod:`decimal` module provides arithmetic with as much precision as needed:: >>> getcontext().prec = 36 >>> Decimal(1) / Decimal(7) - Decimal("0.142857142857142857142857142857142857") + Decimal('0.142857142857142857142857142857142857') -- cgit v0.12 From 32123370f4051896a378df8d64b09adf81bd967a Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 28 Jun 2009 22:36:18 +0000 Subject: unfortunately we can't kill compiler_new_tmpname here --- Python/compile.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Python/compile.c b/Python/compile.c index 11d7c33..23722b2 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -551,6 +551,16 @@ compiler_exit_scope(struct compiler *c) } +/* Allocate a new "anonymous" local variable. Used by with statements. */ + +static PyObject * +compiler_new_tmpname(struct compiler *c) +{ + char tmpname[256]; + PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]", ++c->u->u_tmpname); + return PyUnicode_FromString(tmpname); +} + /* Allocate a new block and return a pointer to it. Returns NULL on error. */ -- cgit v0.12 From 5afe30e07cf27abc032ed0bb73aa7fe429605beb Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 28 Jun 2009 22:52:18 +0000 Subject: Merged revisions 73661 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r73661 | mark.dickinson | 2009-06-28 23:40:48 +0100 (Sun, 28 Jun 2009) | 9 lines Merged revisions 73660 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73660 | mark.dickinson | 2009-06-28 23:37:13 +0100 (Sun, 28 Jun 2009) | 1 line Remove unused stdint.h includes ........ ................ --- Include/longintrepr.h | 4 ---- Include/pymath.h | 4 ---- 2 files changed, 8 deletions(-) diff --git a/Include/longintrepr.h b/Include/longintrepr.h index dd0933a..7765172 100644 --- a/Include/longintrepr.h +++ b/Include/longintrepr.h @@ -40,10 +40,6 @@ extern "C" { platform. */ -#if HAVE_STDINT_H -#include -#endif - #if PYLONG_BITS_IN_DIGIT == 30 #if !(defined HAVE_UINT64_T && defined HAVE_UINT32_T && \ defined HAVE_INT64_T && defined HAVE_INT32_T) diff --git a/Include/pymath.h b/Include/pymath.h index 816691a..dc2c427 100644 --- a/Include/pymath.h +++ b/Include/pymath.h @@ -3,10 +3,6 @@ #include "pyconfig.h" /* include for defines */ -#ifdef HAVE_STDINT_H -#include -#endif - /************************************************************************** Symbols and macros to supply platform-independent interfaces to mathematical functions and constants -- cgit v0.12 From b8aff6a6aa6df5a53d97caf0777a7fedd0dab6a0 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 29 Jun 2009 01:50:51 +0000 Subject: Clean-up floating point tutorial --- Doc/tutorial/floatingpoint.rst | 51 +++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/Doc/tutorial/floatingpoint.rst b/Doc/tutorial/floatingpoint.rst index a8a4202..e877a99 100644 --- a/Doc/tutorial/floatingpoint.rst +++ b/Doc/tutorial/floatingpoint.rst @@ -50,7 +50,7 @@ decimal value 0.1 cannot be represented exactly as a base 2 fraction. In base Stop at any finite number of bits, and you get an approximation. On most machines today, floats are approximated using a binary fraction with -the numerator using the first 53 bits following the most significant bit and +the numerator using the first 53 bits starting with the most significant bit and with the denominator as a power of two. In the case of 1/10, the binary fraction is ``3602879701896397 / 2 ** 55`` which is close to but not exactly equal to the true value of 1/10. @@ -230,12 +230,8 @@ as :: and recalling that *J* has exactly 53 bits (is ``>= 2**52`` but ``< 2**53``), the best value for *N* is 56:: - >>> 2**52 - 4503599627370496 - >>> 2**53 - 9007199254740992 - >>> 2**56/10 - 7205759403792794.0 + >>> 2**52 <= 2**56 // 10 < 2**53 + True That is, 56 is the only value for *N* that leaves *J* with exactly 53 bits. The best possible value for *J* is then that quotient rounded:: @@ -250,14 +246,13 @@ by rounding up:: >>> q+1 7205759403792794 -Therefore the best possible approximation to 1/10 in 754 double precision is -that over 2\*\*56, or :: +Therefore the best possible approximation to 1/10 in 754 double precision is:: - 7205759403792794 / 72057594037927936 + 7205759403792794 / 2 ** 56 Dividing both the numerator and denominator by two reduces the fraction to:: - 3602879701896397 / 36028797018963968 + 3602879701896397 / 2 ** 55 Note that since we rounded up, this is actually a little bit larger than 1/10; if we had not rounded up, the quotient would have been a little bit smaller than @@ -269,24 +264,34 @@ above, the best 754 double approximation it can get:: >>> 0.1 * 2 ** 55 3602879701896397.0 -If we multiply that fraction by 10\*\*60, we can see the value of out to -60 decimal digits:: +If we multiply that fraction by 10\*\*55, we can see the value out to +55 decimal digits:: - >>> 3602879701896397 * 10 ** 60 // 2 ** 55 + >>> 3602879701896397 * 10 ** 55 // 2 ** 55 1000000000000000055511151231257827021181583404541015625 -meaning that the exact number stored in the computer is approximately equal to -the decimal value 0.100000000000000005551115123125. Rounding that to 17 -significant digits gives the 0.10000000000000001 that Python displays (well, -will display on any 754-conforming platform that does best-possible input and -output conversions in its C library --- yours may not!). +meaning that the exact number stored in the computer is equal to +the decimal value 0.1000000000000000055511151231257827021181583404541015625. +Instead of displaying the full decimal value, many languages (including +older versions of Python), round the result to 17 significant digits:: + + >>> format(0.1, '.17f') + '0.10000000000000001' The :mod:`fractions` and :mod:`decimal` modules make these calculations easy:: >>> from decimal import Decimal >>> from fractions import Fraction - >>> print(Fraction.from_float(0.1)) - 3602879701896397/36028797018963968 - >>> print(Decimal.from_float(0.1)) - 0.1000000000000000055511151231257827021181583404541015625 + + >>> Fraction.from_float(0.1) + Fraction(3602879701896397, 36028797018963968) + + >>> (0.1).as_integer_ratio() + (3602879701896397, 36028797018963968) + + >>> Decimal.from_float(0.1) + Decimal('0.1000000000000000055511151231257827021181583404541015625') + + >>> format(Decimal.from_float(0.1), '.17') + '0.10000000000000001' -- cgit v0.12 From e65abb3fb04d9e1f273885b3cfa8da46b7f96018 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 29 Jun 2009 03:46:42 +0000 Subject: Merged revisions 73671 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73671 | benjamin.peterson | 2009-06-28 22:37:21 -0500 (Sun, 28 Jun 2009) | 9 lines Merged revisions 73669 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73669 | benjamin.peterson | 2009-06-28 22:30:55 -0500 (Sun, 28 Jun 2009) | 1 line update to sphinx 0.6.2 ........ ................ --- Doc/Makefile | 2 +- Doc/make.bat | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/Makefile b/Doc/Makefile index c9f3ed6..146e1b3 100644 --- a/Doc/Makefile +++ b/Doc/Makefile @@ -32,7 +32,7 @@ help: checkout: @if [ ! -d tools/sphinx ]; then \ echo "Checking out Sphinx..."; \ - svn checkout $(SVNROOT)/external/Sphinx-0.6.1/sphinx tools/sphinx; \ + svn checkout $(SVNROOT)/external/Sphinx-0.6.2/sphinx tools/sphinx; \ fi @if [ ! -d tools/docutils ]; then \ echo "Checking out Docutils..."; \ diff --git a/Doc/make.bat b/Doc/make.bat index c51fc8d..0b618e3 100644 --- a/Doc/make.bat +++ b/Doc/make.bat @@ -34,7 +34,7 @@ echo. goto end :checkout -svn co %SVNROOT%/external/Sphinx-0.6.1/sphinx tools/sphinx +svn co %SVNROOT%/external/Sphinx-0.6.2/sphinx tools/sphinx svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 svn co %SVNROOT%/external/Pygments-0.11.1/pygments tools/pygments -- cgit v0.12 From 6870f26d264d6242b3f61f01e306609b688f9c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Mon, 29 Jun 2009 06:36:33 +0000 Subject: Merged revisions 73673 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73673 | martin.v.loewis | 2009-06-29 08:35:26 +0200 (Mo, 29 Jun 2009) | 2 lines Link to PEP 383. ........ --- Doc/library/codecs.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index e3f98ef..53437ce 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -322,7 +322,8 @@ and implemented by all standard Python codecs: | ``'backslashreplace'`` | Replace with backslashed escape sequences | | | (only for encoding). | +-------------------------+-----------------------------------------------+ -| ``'surrogateescape'`` | Replace byte with surrogate U+DCxx. | +| ``'surrogateescape'`` | Replace byte with surrogate U+DCxx, as defined| +| | in :pep:`383`. | +-------------------------+-----------------------------------------------+ In addition, the following error handlers are specific to a single codec: -- cgit v0.12 From 4e82f2df3dc54d28ba95665f5dd6293cdc8524d5 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Mon, 29 Jun 2009 15:02:36 +0000 Subject: Merged revisions 73684 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73684 | hirokazu.yamamoto | 2009-06-29 23:54:12 +0900 | 14 lines Merged revisions 73677,73681 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73677 | hirokazu.yamamoto | 2009-06-29 22:25:16 +0900 | 2 lines Issue #6344: Fixed a crash of mmap.read() when passed a negative argument. Reviewed by Amaury Forgeot d'Arc. ........ r73681 | hirokazu.yamamoto | 2009-06-29 23:29:31 +0900 | 1 line Fixed NEWS. ........ ................ --- Misc/NEWS | 2 ++ Modules/mmapmodule.c | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index a86c3aa..7e4cd09 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -15,6 +15,8 @@ Core and Builtins Library ------- +- Issue #6344: Fixed a crash of mmap.read() when passed a negative argument. + Build ----- diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 37584e2..9d6d6af 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -238,7 +238,7 @@ static PyObject * mmap_read_method(mmap_object *self, PyObject *args) { - Py_ssize_t num_bytes; + Py_ssize_t num_bytes, n; PyObject *result; CHECK_VALID(NULL); @@ -246,8 +246,18 @@ mmap_read_method(mmap_object *self, return(NULL); /* silently 'adjust' out-of-range requests */ - if (num_bytes > self->size - self->pos) { - num_bytes -= (self->pos+num_bytes) - self->size; + assert(self->size >= self->pos); + n = self->size - self->pos; + /* The difference can overflow, only if self->size is greater than + * PY_SSIZE_T_MAX. But then the operation cannot possibly succeed, + * because the mapped area and the returned string each need more + * than half of the addressable memory. So we clip the size, and let + * the code below raise MemoryError. + */ + if (n < 0) + n = PY_SSIZE_T_MAX; + if (num_bytes < 0 || num_bytes > n) { + num_bytes = n; } result = PyBytes_FromStringAndSize(self->data+self->pos, num_bytes); self->pos += num_bytes; -- cgit v0.12 From 2c3de40971b92d9dcd8ebcb24c0bda031b5732be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Mon, 29 Jun 2009 16:46:14 +0000 Subject: Merged revisions 73689 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73689 | tarek.ziade | 2009-06-29 18:19:22 +0200 (Mon, 29 Jun 2009) | 9 lines Merged revisions 73688 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73688 | tarek.ziade | 2009-06-29 18:13:39 +0200 (Mon, 29 Jun 2009) | 1 line Fixed 6365: wrong inplace location for build_ext if the extension had dots ........ ................ --- Lib/distutils/command/build_ext.py | 8 ++++---- Lib/distutils/tests/test_build_ext.py | 18 +++++++++++++++--- Misc/NEWS | 3 +++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index 31e036b..57a110b 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -630,16 +630,16 @@ class build_ext(Command): (inplace option). """ fullname = self.get_ext_fullname(ext_name) - filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[0:-1]) + base = modpath[-1] + filename = self.get_ext_filename(base) if not self.inplace: # no further work needed return os.path.join(self.build_lib, filename) # the inplace option requires to find the package directory # using the build_py command - modpath = fullname.split('.') - package = '.'.join(modpath[0:-1]) - base = modpath[-1] build_py = self.get_finalized_command('build_py') package_dir = os.path.abspath(build_py.get_package_dir(package)) return os.path.join(package_dir, filename) diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index 4ea11a1..fe6009b 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -339,10 +339,9 @@ class BuildExtTestCase(TempdirManager, # inplace = 0, cmd.package = 'bar' cmd.package = 'bar' path = cmd.get_ext_fullpath('foo') - # checking that the last directory is bar + # checking that the last directory is the build_dir path = os.path.split(path)[0] - lastdir = os.path.split(path)[-1] - self.assertEquals(lastdir, cmd.package) + self.assertEquals(path, cmd.build_lib) # inplace = 1, cmd.package = 'bar' cmd.inplace = 1 @@ -358,6 +357,19 @@ class BuildExtTestCase(TempdirManager, lastdir = os.path.split(path)[-1] self.assertEquals(lastdir, cmd.package) + def test_build_ext_inplace(self): + etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') + etree_ext = Extension('lxml.etree', [etree_c]) + dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + cmd = build_ext(dist) + cmd.inplace = 1 + cmd.distribution.package_dir = {'': 'src'} + cmd.distribution.packages = ['lxml', 'lxml.html'] + curdir = os.getcwd() + wanted = os.path.join(curdir, 'src', 'lxml', 'etree.so') + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEquals(wanted, path) + def test_suite(): src = _get_source_filename() if not os.path.exists(src): diff --git a/Misc/NEWS b/Misc/NEWS index 7e4cd09..59e913b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -839,6 +839,9 @@ Core and Builtins Library ------- +- Issue #6365: Distutils build_ext inplace mode was copying the compiled + extension in a subdirectory if the extension name had dots. + - Issue #6287: Added the license field in Distutils documentation. - Issue #6263: Fixed syntax error in distutils.cygwincompiler. -- cgit v0.12 From 77b31ef202359e6f29d261b7dfbb356f36d49123 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 29 Jun 2009 18:34:46 +0000 Subject: Issue 6370: Performance issue with collections.Counter(). --- Lib/collections.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/collections.py b/Lib/collections.py index bd5d3e8..f255919 100644 --- a/Lib/collections.py +++ b/Lib/collections.py @@ -421,13 +421,15 @@ class Counter(dict): if iterable is not None: if isinstance(iterable, Mapping): if self: + self_get = self.get for elem, count in iterable.items(): - self[elem] += count + self[elem] = count + self_get(elem, 0) else: dict.update(self, iterable) # fast path when counter is empty else: + self_get = self.get for elem in iterable: - self[elem] += 1 + self[elem] = 1 + self_get(elem, 0) if kwds: self.update(kwds) -- cgit v0.12 From e5344d6c45f15e8cd5b450311a402de568f54b47 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Mon, 29 Jun 2009 22:38:54 +0000 Subject: Merged revisions 73698 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73698 | amaury.forgeotdarc | 2009-06-30 00:36:49 +0200 (mar., 30 juin 2009) | 7 lines #6373: SystemError in str.encode('latin1', 'surrogateescape') if the string contains unpaired surrogates. (In debug build, crash in assert()) This can happen with normal processing, if python starts with utf-8, then calls sys.setfilesystemencoding('latin-1') ........ --- Lib/test/test_codecs.py | 5 +++++ Misc/NEWS | 4 ++++ Objects/unicodeobject.c | 2 ++ 3 files changed, 11 insertions(+) diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 4ec7b58..e060471 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -1549,6 +1549,11 @@ class SurrogateEscapeTest(unittest.TestCase): self.assertEqual("foo\udca5bar".encode("iso-8859-3", "surrogateescape"), b"foo\xa5bar") + def test_latin1(self): + # Issue6373 + self.assertEqual("\udce4\udceb\udcef\udcf6\udcfc".encode("latin1", "surrogateescape"), + b"\xe4\xeb\xef\xf6\xfc") + def test_main(): support.run_unittest( diff --git a/Misc/NEWS b/Misc/NEWS index 59e913b..3a4d486 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ What's New in Python 3.1.1? Core and Builtins ----------------- +- Issue #6373: Fixed a RuntimeError when encoding with the latin-1 codec and + the 'surrogateescape' error handler, a string which contains unpaired + surrogates. + Library ------- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 0d4a3dd..305289b 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -4201,10 +4201,12 @@ static PyObject *unicode_encode_ucs1(const Py_UNICODE *p, repsize = PyBytes_Size(repunicode); if (repsize > 1) { /* Make room for all additional bytes. */ + respos = str - PyBytes_AS_STRING(res); if (_PyBytes_Resize(&res, ressize+repsize-1)) { Py_DECREF(repunicode); goto onError; } + str = PyBytes_AS_STRING(res) + respos; ressize += repsize-1; } memcpy(str, PyBytes_AsString(repunicode), repsize); -- cgit v0.12 From 8c1e29488d59e5b3d7a14f3fb28e40427e174a22 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Tue, 30 Jun 2009 15:46:37 +0000 Subject: Merged revisions 73702 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r73702 | mark.dickinson | 2009-06-30 16:45:17 +0100 (Tue, 30 Jun 2009) | 10 lines Merged revisions 73701 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73701 | mark.dickinson | 2009-06-30 16:32:30 +0100 (Tue, 30 Jun 2009) | 3 lines Issue #6347: Add inttypes.h to the pyport.h #includes; fixes a build failure on HP-UX 11.00. ........ ................ --- Include/pyport.h | 6 ++++++ Misc/NEWS | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/Include/pyport.h b/Include/pyport.h index 437c818..be15fe1 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -3,6 +3,12 @@ #include "pyconfig.h" /* include for defines */ +/* Some versions of HP-UX & Solaris need inttypes.h for int32_t, + INT32_MAX, etc. */ +#ifdef HAVE_INTTYPES_H +#include +#endif + #ifdef HAVE_STDINT_H #include #endif diff --git a/Misc/NEWS b/Misc/NEWS index 3a4d486..fb1fee7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ What's New in Python 3.1.1? Core and Builtins ----------------- +- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h. + This fixes a build failure on HP-UX: int32_t and uint32_t are + defined in inttypes.h instead of stdint.h on that platform. + - Issue #6373: Fixed a RuntimeError when encoding with the latin-1 codec and the 'surrogateescape' error handler, a string which contains unpaired surrogates. -- cgit v0.12 From 41a28734b41610c91cf3013b4af8ac490c94c801 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Wed, 1 Jul 2009 00:50:34 +0000 Subject: Merged revisions 73724 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73724 | amaury.forgeotdarc | 2009-07-01 02:48:39 +0200 (mer., 01 juil. 2009) | 2 lines Fix exception name in NEWS, spotted by Neal Norwitz ........ --- Misc/NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index fb1fee7..0b66254 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -16,7 +16,7 @@ Core and Builtins This fixes a build failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead of stdint.h on that platform. -- Issue #6373: Fixed a RuntimeError when encoding with the latin-1 codec and +- Issue #6373: Fixed a SystemError when encoding with the latin-1 codec and the 'surrogateescape' error handler, a string which contains unpaired surrogates. -- cgit v0.12 From 731371268e62608725267f127e228f777153fe49 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 1 Jul 2009 01:15:26 +0000 Subject: Merged revisions 73727 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73727 | benjamin.peterson | 2009-06-30 20:06:56 -0500 (Tue, 30 Jun 2009) | 28 lines Merged revisions 73725 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ................ r73725 | benjamin.peterson | 2009-06-30 19:49:09 -0500 (Tue, 30 Jun 2009) | 21 lines Merged revisions 73379,73388,73507,73722 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r73379 | benjamin.peterson | 2009-06-11 18:06:21 -0500 (Thu, 11 Jun 2009) | 1 line use a real conditional expresion ........ r73388 | benjamin.peterson | 2009-06-12 09:44:29 -0500 (Fri, 12 Jun 2009) | 1 line fix typo in last fix ........ r73507 | benjamin.peterson | 2009-06-22 13:32:04 -0500 (Mon, 22 Jun 2009) | 1 line remove svn:executable property ........ r73722 | benjamin.peterson | 2009-06-30 19:44:30 -0500 (Tue, 30 Jun 2009) | 1 line replace fail* with assert* ........ ................ ................ --- Lib/lib2to3/fixes/fix_dict.py | 2 +- Lib/lib2to3/refactor.py | 0 Lib/lib2to3/tests/test_fixers.py | 12 +- Lib/lib2to3/tests/test_pytree.py | 58 ++++---- Lib/lib2to3/tests/test_util.py | 294 +++++++++++++++++++-------------------- 5 files changed, 183 insertions(+), 183 deletions(-) mode change 100755 => 100644 Lib/lib2to3/refactor.py diff --git a/Lib/lib2to3/fixes/fix_dict.py b/Lib/lib2to3/fixes/fix_dict.py index ce973fd..7c37fad 100644 --- a/Lib/lib2to3/fixes/fix_dict.py +++ b/Lib/lib2to3/fixes/fix_dict.py @@ -66,7 +66,7 @@ class FixDict(fixer_base.BaseFix): new = pytree.Node(syms.power, args) if not special: new.prefix = "" - new = Call(Name(isiter and "iter" or "list"), [new]) + new = Call(Name("iter" if isiter else "list"), [new]) if tail: new = pytree.Node(syms.power, [new] + tail) new.prefix = node.prefix diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py old mode 100755 new mode 100644 diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 2f87fb2..c0f1e37 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -32,20 +32,20 @@ class FixerTestCase(support.TestCase): before = support.reformat(before) after = support.reformat(after) tree = self.refactor.refactor_string(before, self.filename) - self.failUnlessEqual(after, str(tree)) + self.assertEqual(after, str(tree)) return tree def check(self, before, after, ignore_warnings=False): tree = self._check(before, after) - self.failUnless(tree.was_changed) + self.assertTrue(tree.was_changed) if not ignore_warnings: - self.failUnlessEqual(self.fixer_log, []) + self.assertEqual(self.fixer_log, []) def warns(self, before, after, message, unchanged=False): tree = self._check(before, after) - self.failUnless(message in "".join(self.fixer_log)) + self.assertTrue(message in "".join(self.fixer_log)) if not unchanged: - self.failUnless(tree.was_changed) + self.assertTrue(tree.was_changed) def warns_unchanged(self, before, message): self.warns(before, before, message, unchanged=True) @@ -53,7 +53,7 @@ class FixerTestCase(support.TestCase): def unchanged(self, before, ignore_warnings=False): self._check(before, before) if not ignore_warnings: - self.failUnlessEqual(self.fixer_log, []) + self.assertEqual(self.fixer_log, []) def assert_runs_after(self, *names): fixes = [self.fixer] diff --git a/Lib/lib2to3/tests/test_pytree.py b/Lib/lib2to3/tests/test_pytree.py index 83a9b18..a162aae 100755 --- a/Lib/lib2to3/tests/test_pytree.py +++ b/Lib/lib2to3/tests/test_pytree.py @@ -81,10 +81,10 @@ class TestNodes(support.TestCase): def test_leaf_prefix(self): l1 = pytree.Leaf(100, "foo") self.assertEqual(l1.prefix, "") - self.failIf(l1.was_changed) + self.assertFalse(l1.was_changed) l1.prefix = " ##\n\n" self.assertEqual(l1.prefix, " ##\n\n") - self.failUnless(l1.was_changed) + self.assertTrue(l1.was_changed) def test_node(self): l1 = pytree.Leaf(100, "foo") @@ -154,13 +154,13 @@ class TestNodes(support.TestCase): l3 = pytree.Leaf(100, "bar") n1 = pytree.Node(1000, [l1, l2, l3]) self.assertEqual(n1.children, [l1, l2, l3]) - self.failUnless(isinstance(n1.children, list)) - self.failIf(n1.was_changed) + self.assertTrue(isinstance(n1.children, list)) + self.assertFalse(n1.was_changed) l2new = pytree.Leaf(100, "-") l2.replace(l2new) self.assertEqual(n1.children, [l1, l2new, l3]) - self.failUnless(isinstance(n1.children, list)) - self.failUnless(n1.was_changed) + self.assertTrue(isinstance(n1.children, list)) + self.assertTrue(n1.was_changed) def test_replace_with_list(self): l1 = pytree.Leaf(100, "foo") @@ -170,7 +170,7 @@ class TestNodes(support.TestCase): l2.replace([pytree.Leaf(100, "*"), pytree.Leaf(100, "*")]) self.assertEqual(str(n1), "foo**bar") - self.failUnless(isinstance(n1.children, list)) + self.assertTrue(isinstance(n1.children, list)) def test_post_order(self): l1 = pytree.Leaf(100, "foo") @@ -186,34 +186,34 @@ class TestNodes(support.TestCase): def test_changed(self): l1 = pytree.Leaf(100, "f") - self.failIf(l1.was_changed) + self.assertFalse(l1.was_changed) l1.changed() - self.failUnless(l1.was_changed) + self.assertTrue(l1.was_changed) l1 = pytree.Leaf(100, "f") n1 = pytree.Node(1000, [l1]) - self.failIf(n1.was_changed) + self.assertFalse(n1.was_changed) n1.changed() - self.failUnless(n1.was_changed) + self.assertTrue(n1.was_changed) l1 = pytree.Leaf(100, "foo") l2 = pytree.Leaf(100, "+") l3 = pytree.Leaf(100, "bar") n1 = pytree.Node(1000, [l1, l2, l3]) n2 = pytree.Node(1000, [n1]) - self.failIf(l1.was_changed) - self.failIf(n1.was_changed) - self.failIf(n2.was_changed) + self.assertFalse(l1.was_changed) + self.assertFalse(n1.was_changed) + self.assertFalse(n2.was_changed) n1.changed() - self.failUnless(n1.was_changed) - self.failUnless(n2.was_changed) - self.failIf(l1.was_changed) + self.assertTrue(n1.was_changed) + self.assertTrue(n2.was_changed) + self.assertFalse(l1.was_changed) def test_leaf_constructor_prefix(self): for prefix in ("xyz_", ""): l1 = pytree.Leaf(100, "self", prefix=prefix) - self.failUnless(str(l1), prefix + "self") + self.assertTrue(str(l1), prefix + "self") self.assertEqual(l1.prefix, prefix) def test_node_constructor_prefix(self): @@ -221,7 +221,7 @@ class TestNodes(support.TestCase): l1 = pytree.Leaf(100, "self") l2 = pytree.Leaf(100, "foo", prefix="_") n1 = pytree.Node(1000, [l1, l2], prefix=prefix) - self.failUnless(str(n1), prefix + "self_foo") + self.assertTrue(str(n1), prefix + "self_foo") self.assertEqual(n1.prefix, prefix) self.assertEqual(l1.prefix, prefix) self.assertEqual(l2.prefix, "_") @@ -237,8 +237,8 @@ class TestNodes(support.TestCase): self.assertEqual(l1.parent, n1) self.assertEqual(n1.parent, None) self.assertEqual(n2.parent, None) - self.failIf(n1.was_changed) - self.failUnless(n2.was_changed) + self.assertFalse(n1.was_changed) + self.assertTrue(n2.was_changed) self.assertEqual(l2.remove(), 1) self.assertEqual(l1.remove(), 0) @@ -246,8 +246,8 @@ class TestNodes(support.TestCase): self.assertEqual(l1.parent, None) self.assertEqual(n1.parent, None) self.assertEqual(n2.parent, None) - self.failUnless(n1.was_changed) - self.failUnless(n2.was_changed) + self.assertTrue(n1.was_changed) + self.assertTrue(n2.was_changed) def test_remove_parentless(self): n1 = pytree.Node(1000, []) @@ -316,7 +316,7 @@ class TestNodes(support.TestCase): n2 = pytree.Node(1000, []) p1 = pytree.Node(1000, [n1, n2]) - self.failUnless(n1.next_sibling is n2) + self.assertTrue(n1.next_sibling is n2) self.assertEqual(n2.next_sibling, None) self.assertEqual(p1.next_sibling, None) @@ -325,7 +325,7 @@ class TestNodes(support.TestCase): l2 = pytree.Leaf(100, "b") p1 = pytree.Node(1000, [l1, l2]) - self.failUnless(l1.next_sibling is l2) + self.assertTrue(l1.next_sibling is l2) self.assertEqual(l2.next_sibling, None) self.assertEqual(p1.next_sibling, None) @@ -334,7 +334,7 @@ class TestNodes(support.TestCase): n2 = pytree.Node(1000, []) p1 = pytree.Node(1000, [n1, n2]) - self.failUnless(n2.prev_sibling is n1) + self.assertTrue(n2.prev_sibling is n1) self.assertEqual(n1.prev_sibling, None) self.assertEqual(p1.prev_sibling, None) @@ -343,7 +343,7 @@ class TestNodes(support.TestCase): l2 = pytree.Leaf(100, "b") p1 = pytree.Node(1000, [l1, l2]) - self.failUnless(l2.prev_sibling is l1) + self.assertTrue(l2.prev_sibling is l1) self.assertEqual(l1.prev_sibling, None) self.assertEqual(p1.prev_sibling, None) @@ -416,7 +416,7 @@ class TestPatterns(support.TestCase): r = {} self.assertTrue(pw.match_seq([l1, l3], r)) self.assertEqual(r, {"pl": l3, "pw": [l1, l3]}) - self.assert_(r["pl"] is l3) + self.assertTrue(r["pl"] is l3) r = {} def test_generate_matches(self): @@ -459,5 +459,5 @@ class TestPatterns(support.TestCase): l3 = pytree.Leaf(8, ")") node = pytree.Node(331, [l1, l2, l3]) r = {} - self.assert_(pattern.match(node, r)) + self.assertTrue(pattern.match(node, r)) self.assertEqual(r["args"], [l2]) diff --git a/Lib/lib2to3/tests/test_util.py b/Lib/lib2to3/tests/test_util.py index 1de7a83..ef3256d 100644 --- a/Lib/lib2to3/tests/test_util.py +++ b/Lib/lib2to3/tests/test_util.py @@ -33,15 +33,15 @@ class Test_is_tuple(support.TestCase): return fixer_util.is_tuple(parse(string, strip_levels=2)) def test_valid(self): - self.failUnless(self.is_tuple("(a, b)")) - self.failUnless(self.is_tuple("(a, (b, c))")) - self.failUnless(self.is_tuple("((a, (b, c)),)")) - self.failUnless(self.is_tuple("(a,)")) - self.failUnless(self.is_tuple("()")) + self.assertTrue(self.is_tuple("(a, b)")) + self.assertTrue(self.is_tuple("(a, (b, c))")) + self.assertTrue(self.is_tuple("((a, (b, c)),)")) + self.assertTrue(self.is_tuple("(a,)")) + self.assertTrue(self.is_tuple("()")) def test_invalid(self): - self.failIf(self.is_tuple("(a)")) - self.failIf(self.is_tuple("('foo') % (b, c)")) + self.assertFalse(self.is_tuple("(a)")) + self.assertFalse(self.is_tuple("('foo') % (b, c)")) class Test_is_list(support.TestCase): @@ -49,14 +49,14 @@ class Test_is_list(support.TestCase): return fixer_util.is_list(parse(string, strip_levels=2)) def test_valid(self): - self.failUnless(self.is_list("[]")) - self.failUnless(self.is_list("[a]")) - self.failUnless(self.is_list("[a, b]")) - self.failUnless(self.is_list("[a, [b, c]]")) - self.failUnless(self.is_list("[[a, [b, c]],]")) + self.assertTrue(self.is_list("[]")) + self.assertTrue(self.is_list("[a]")) + self.assertTrue(self.is_list("[a, b]")) + self.assertTrue(self.is_list("[a, [b, c]]")) + self.assertTrue(self.is_list("[[a, [b, c]],]")) def test_invalid(self): - self.failIf(self.is_list("[]+[]")) + self.assertFalse(self.is_list("[]+[]")) class Test_Attr(MacroTestCase): @@ -102,9 +102,9 @@ class Test_does_tree_import(support.TestCase): (None, "a", "import b, c, d")) for package, name, import_ in failing_tests: n = self.does_tree_import(package, name, import_ + "\n" + string) - self.failIf(n) + self.assertFalse(n) n = self.does_tree_import(package, name, string + "\n" + import_) - self.failIf(n) + self.assertFalse(n) passing_tests = (("a", "a", "from a import a"), ("x", "a", "from x import a"), @@ -115,9 +115,9 @@ class Test_does_tree_import(support.TestCase): (None, "a", "import b, c, a, d")) for package, name, import_ in passing_tests: n = self.does_tree_import(package, name, import_ + "\n" + string) - self.failUnless(n) + self.assertTrue(n) n = self.does_tree_import(package, name, string + "\n" + import_) - self.failUnless(n) + self.assertTrue(n) def test_in_function(self): self.try_with("def foo():\n\tbar.baz()\n\tstart=3") @@ -127,226 +127,226 @@ class Test_find_binding(support.TestCase): return fixer_util.find_binding(name, parse(string), package) def test_simple_assignment(self): - self.failUnless(self.find_binding("a", "a = b")) - self.failUnless(self.find_binding("a", "a = [b, c, d]")) - self.failUnless(self.find_binding("a", "a = foo()")) - self.failUnless(self.find_binding("a", "a = foo().foo.foo[6][foo]")) - self.failIf(self.find_binding("a", "foo = a")) - self.failIf(self.find_binding("a", "foo = (a, b, c)")) + self.assertTrue(self.find_binding("a", "a = b")) + self.assertTrue(self.find_binding("a", "a = [b, c, d]")) + self.assertTrue(self.find_binding("a", "a = foo()")) + self.assertTrue(self.find_binding("a", "a = foo().foo.foo[6][foo]")) + self.assertFalse(self.find_binding("a", "foo = a")) + self.assertFalse(self.find_binding("a", "foo = (a, b, c)")) def test_tuple_assignment(self): - self.failUnless(self.find_binding("a", "(a,) = b")) - self.failUnless(self.find_binding("a", "(a, b, c) = [b, c, d]")) - self.failUnless(self.find_binding("a", "(c, (d, a), b) = foo()")) - self.failUnless(self.find_binding("a", "(a, b) = foo().foo[6][foo]")) - self.failIf(self.find_binding("a", "(foo, b) = (b, a)")) - self.failIf(self.find_binding("a", "(foo, (b, c)) = (a, b, c)")) + self.assertTrue(self.find_binding("a", "(a,) = b")) + self.assertTrue(self.find_binding("a", "(a, b, c) = [b, c, d]")) + self.assertTrue(self.find_binding("a", "(c, (d, a), b) = foo()")) + self.assertTrue(self.find_binding("a", "(a, b) = foo().foo[6][foo]")) + self.assertFalse(self.find_binding("a", "(foo, b) = (b, a)")) + self.assertFalse(self.find_binding("a", "(foo, (b, c)) = (a, b, c)")) def test_list_assignment(self): - self.failUnless(self.find_binding("a", "[a] = b")) - self.failUnless(self.find_binding("a", "[a, b, c] = [b, c, d]")) - self.failUnless(self.find_binding("a", "[c, [d, a], b] = foo()")) - self.failUnless(self.find_binding("a", "[a, b] = foo().foo[a][foo]")) - self.failIf(self.find_binding("a", "[foo, b] = (b, a)")) - self.failIf(self.find_binding("a", "[foo, [b, c]] = (a, b, c)")) + self.assertTrue(self.find_binding("a", "[a] = b")) + self.assertTrue(self.find_binding("a", "[a, b, c] = [b, c, d]")) + self.assertTrue(self.find_binding("a", "[c, [d, a], b] = foo()")) + self.assertTrue(self.find_binding("a", "[a, b] = foo().foo[a][foo]")) + self.assertFalse(self.find_binding("a", "[foo, b] = (b, a)")) + self.assertFalse(self.find_binding("a", "[foo, [b, c]] = (a, b, c)")) def test_invalid_assignments(self): - self.failIf(self.find_binding("a", "foo.a = 5")) - self.failIf(self.find_binding("a", "foo[a] = 5")) - self.failIf(self.find_binding("a", "foo(a) = 5")) - self.failIf(self.find_binding("a", "foo(a, b) = 5")) + self.assertFalse(self.find_binding("a", "foo.a = 5")) + self.assertFalse(self.find_binding("a", "foo[a] = 5")) + self.assertFalse(self.find_binding("a", "foo(a) = 5")) + self.assertFalse(self.find_binding("a", "foo(a, b) = 5")) def test_simple_import(self): - self.failUnless(self.find_binding("a", "import a")) - self.failUnless(self.find_binding("a", "import b, c, a, d")) - self.failIf(self.find_binding("a", "import b")) - self.failIf(self.find_binding("a", "import b, c, d")) + self.assertTrue(self.find_binding("a", "import a")) + self.assertTrue(self.find_binding("a", "import b, c, a, d")) + self.assertFalse(self.find_binding("a", "import b")) + self.assertFalse(self.find_binding("a", "import b, c, d")) def test_from_import(self): - self.failUnless(self.find_binding("a", "from x import a")) - self.failUnless(self.find_binding("a", "from a import a")) - self.failUnless(self.find_binding("a", "from x import b, c, a, d")) - self.failUnless(self.find_binding("a", "from x.b import a")) - self.failUnless(self.find_binding("a", "from x.b import b, c, a, d")) - self.failIf(self.find_binding("a", "from a import b")) - self.failIf(self.find_binding("a", "from a.d import b")) - self.failIf(self.find_binding("a", "from d.a import b")) + self.assertTrue(self.find_binding("a", "from x import a")) + self.assertTrue(self.find_binding("a", "from a import a")) + self.assertTrue(self.find_binding("a", "from x import b, c, a, d")) + self.assertTrue(self.find_binding("a", "from x.b import a")) + self.assertTrue(self.find_binding("a", "from x.b import b, c, a, d")) + self.assertFalse(self.find_binding("a", "from a import b")) + self.assertFalse(self.find_binding("a", "from a.d import b")) + self.assertFalse(self.find_binding("a", "from d.a import b")) def test_import_as(self): - self.failUnless(self.find_binding("a", "import b as a")) - self.failUnless(self.find_binding("a", "import b as a, c, a as f, d")) - self.failIf(self.find_binding("a", "import a as f")) - self.failIf(self.find_binding("a", "import b, c as f, d as e")) + self.assertTrue(self.find_binding("a", "import b as a")) + self.assertTrue(self.find_binding("a", "import b as a, c, a as f, d")) + self.assertFalse(self.find_binding("a", "import a as f")) + self.assertFalse(self.find_binding("a", "import b, c as f, d as e")) def test_from_import_as(self): - self.failUnless(self.find_binding("a", "from x import b as a")) - self.failUnless(self.find_binding("a", "from x import g as a, d as b")) - self.failUnless(self.find_binding("a", "from x.b import t as a")) - self.failUnless(self.find_binding("a", "from x.b import g as a, d")) - self.failIf(self.find_binding("a", "from a import b as t")) - self.failIf(self.find_binding("a", "from a.d import b as t")) - self.failIf(self.find_binding("a", "from d.a import b as t")) + self.assertTrue(self.find_binding("a", "from x import b as a")) + self.assertTrue(self.find_binding("a", "from x import g as a, d as b")) + self.assertTrue(self.find_binding("a", "from x.b import t as a")) + self.assertTrue(self.find_binding("a", "from x.b import g as a, d")) + self.assertFalse(self.find_binding("a", "from a import b as t")) + self.assertFalse(self.find_binding("a", "from a.d import b as t")) + self.assertFalse(self.find_binding("a", "from d.a import b as t")) def test_simple_import_with_package(self): - self.failUnless(self.find_binding("b", "import b")) - self.failUnless(self.find_binding("b", "import b, c, d")) - self.failIf(self.find_binding("b", "import b", "b")) - self.failIf(self.find_binding("b", "import b, c, d", "c")) + self.assertTrue(self.find_binding("b", "import b")) + self.assertTrue(self.find_binding("b", "import b, c, d")) + self.assertFalse(self.find_binding("b", "import b", "b")) + self.assertFalse(self.find_binding("b", "import b, c, d", "c")) def test_from_import_with_package(self): - self.failUnless(self.find_binding("a", "from x import a", "x")) - self.failUnless(self.find_binding("a", "from a import a", "a")) - self.failUnless(self.find_binding("a", "from x import *", "x")) - self.failUnless(self.find_binding("a", "from x import b, c, a, d", "x")) - self.failUnless(self.find_binding("a", "from x.b import a", "x.b")) - self.failUnless(self.find_binding("a", "from x.b import *", "x.b")) - self.failUnless(self.find_binding("a", "from x.b import b, c, a, d", "x.b")) - self.failIf(self.find_binding("a", "from a import b", "a")) - self.failIf(self.find_binding("a", "from a.d import b", "a.d")) - self.failIf(self.find_binding("a", "from d.a import b", "a.d")) - self.failIf(self.find_binding("a", "from x.y import *", "a.b")) + self.assertTrue(self.find_binding("a", "from x import a", "x")) + self.assertTrue(self.find_binding("a", "from a import a", "a")) + self.assertTrue(self.find_binding("a", "from x import *", "x")) + self.assertTrue(self.find_binding("a", "from x import b, c, a, d", "x")) + self.assertTrue(self.find_binding("a", "from x.b import a", "x.b")) + self.assertTrue(self.find_binding("a", "from x.b import *", "x.b")) + self.assertTrue(self.find_binding("a", "from x.b import b, c, a, d", "x.b")) + self.assertFalse(self.find_binding("a", "from a import b", "a")) + self.assertFalse(self.find_binding("a", "from a.d import b", "a.d")) + self.assertFalse(self.find_binding("a", "from d.a import b", "a.d")) + self.assertFalse(self.find_binding("a", "from x.y import *", "a.b")) def test_import_as_with_package(self): - self.failIf(self.find_binding("a", "import b.c as a", "b.c")) - self.failIf(self.find_binding("a", "import a as f", "f")) - self.failIf(self.find_binding("a", "import a as f", "a")) + self.assertFalse(self.find_binding("a", "import b.c as a", "b.c")) + self.assertFalse(self.find_binding("a", "import a as f", "f")) + self.assertFalse(self.find_binding("a", "import a as f", "a")) def test_from_import_as_with_package(self): # Because it would take a lot of special-case code in the fixers # to deal with from foo import bar as baz, we'll simply always # fail if there is an "from ... import ... as ..." - self.failIf(self.find_binding("a", "from x import b as a", "x")) - self.failIf(self.find_binding("a", "from x import g as a, d as b", "x")) - self.failIf(self.find_binding("a", "from x.b import t as a", "x.b")) - self.failIf(self.find_binding("a", "from x.b import g as a, d", "x.b")) - self.failIf(self.find_binding("a", "from a import b as t", "a")) - self.failIf(self.find_binding("a", "from a import b as t", "b")) - self.failIf(self.find_binding("a", "from a import b as t", "t")) + self.assertFalse(self.find_binding("a", "from x import b as a", "x")) + self.assertFalse(self.find_binding("a", "from x import g as a, d as b", "x")) + self.assertFalse(self.find_binding("a", "from x.b import t as a", "x.b")) + self.assertFalse(self.find_binding("a", "from x.b import g as a, d", "x.b")) + self.assertFalse(self.find_binding("a", "from a import b as t", "a")) + self.assertFalse(self.find_binding("a", "from a import b as t", "b")) + self.assertFalse(self.find_binding("a", "from a import b as t", "t")) def test_function_def(self): - self.failUnless(self.find_binding("a", "def a(): pass")) - self.failUnless(self.find_binding("a", "def a(b, c, d): pass")) - self.failUnless(self.find_binding("a", "def a(): b = 7")) - self.failIf(self.find_binding("a", "def d(b, (c, a), e): pass")) - self.failIf(self.find_binding("a", "def d(a=7): pass")) - self.failIf(self.find_binding("a", "def d(a): pass")) - self.failIf(self.find_binding("a", "def d(): a = 7")) + self.assertTrue(self.find_binding("a", "def a(): pass")) + self.assertTrue(self.find_binding("a", "def a(b, c, d): pass")) + self.assertTrue(self.find_binding("a", "def a(): b = 7")) + self.assertFalse(self.find_binding("a", "def d(b, (c, a), e): pass")) + self.assertFalse(self.find_binding("a", "def d(a=7): pass")) + self.assertFalse(self.find_binding("a", "def d(a): pass")) + self.assertFalse(self.find_binding("a", "def d(): a = 7")) s = """ def d(): def a(): pass""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_class_def(self): - self.failUnless(self.find_binding("a", "class a: pass")) - self.failUnless(self.find_binding("a", "class a(): pass")) - self.failUnless(self.find_binding("a", "class a(b): pass")) - self.failUnless(self.find_binding("a", "class a(b, c=8): pass")) - self.failIf(self.find_binding("a", "class d: pass")) - self.failIf(self.find_binding("a", "class d(a): pass")) - self.failIf(self.find_binding("a", "class d(b, a=7): pass")) - self.failIf(self.find_binding("a", "class d(b, *a): pass")) - self.failIf(self.find_binding("a", "class d(b, **a): pass")) - self.failIf(self.find_binding("a", "class d: a = 7")) + self.assertTrue(self.find_binding("a", "class a: pass")) + self.assertTrue(self.find_binding("a", "class a(): pass")) + self.assertTrue(self.find_binding("a", "class a(b): pass")) + self.assertTrue(self.find_binding("a", "class a(b, c=8): pass")) + self.assertFalse(self.find_binding("a", "class d: pass")) + self.assertFalse(self.find_binding("a", "class d(a): pass")) + self.assertFalse(self.find_binding("a", "class d(b, a=7): pass")) + self.assertFalse(self.find_binding("a", "class d(b, *a): pass")) + self.assertFalse(self.find_binding("a", "class d(b, **a): pass")) + self.assertFalse(self.find_binding("a", "class d: a = 7")) s = """ class d(): class a(): pass""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_for(self): - self.failUnless(self.find_binding("a", "for a in r: pass")) - self.failUnless(self.find_binding("a", "for a, b in r: pass")) - self.failUnless(self.find_binding("a", "for (a, b) in r: pass")) - self.failUnless(self.find_binding("a", "for c, (a,) in r: pass")) - self.failUnless(self.find_binding("a", "for c, (a, b) in r: pass")) - self.failUnless(self.find_binding("a", "for c in r: a = c")) - self.failIf(self.find_binding("a", "for c in a: pass")) + self.assertTrue(self.find_binding("a", "for a in r: pass")) + self.assertTrue(self.find_binding("a", "for a, b in r: pass")) + self.assertTrue(self.find_binding("a", "for (a, b) in r: pass")) + self.assertTrue(self.find_binding("a", "for c, (a,) in r: pass")) + self.assertTrue(self.find_binding("a", "for c, (a, b) in r: pass")) + self.assertTrue(self.find_binding("a", "for c in r: a = c")) + self.assertFalse(self.find_binding("a", "for c in a: pass")) def test_for_nested(self): s = """ for b in r: for a in b: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ for b in r: for a, c in b: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ for b in r: for (a, c) in b: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ for b in r: for (a,) in b: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ for b in r: for c, (a, d) in b: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ for b in r: for c in b: a = 7""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ for b in r: for c in b: d = a""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) s = """ for b in r: for c in a: d = 7""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_if(self): - self.failUnless(self.find_binding("a", "if b in r: a = c")) - self.failIf(self.find_binding("a", "if a in r: d = e")) + self.assertTrue(self.find_binding("a", "if b in r: a = c")) + self.assertFalse(self.find_binding("a", "if a in r: d = e")) def test_if_nested(self): s = """ if b in r: if c in d: a = c""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ if b in r: if c in d: c = a""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_while(self): - self.failUnless(self.find_binding("a", "while b in r: a = c")) - self.failIf(self.find_binding("a", "while a in r: d = e")) + self.assertTrue(self.find_binding("a", "while b in r: a = c")) + self.assertFalse(self.find_binding("a", "while a in r: d = e")) def test_while_nested(self): s = """ while b in r: while c in d: a = c""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ while b in r: while c in d: c = a""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_try_except(self): s = """ @@ -354,14 +354,14 @@ class Test_find_binding(support.TestCase): a = 6 except: b = 8""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: b = 8 except: a = 6""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -370,14 +370,14 @@ class Test_find_binding(support.TestCase): pass except: a = 6""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: b = 8 except: b = 6""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_try_except_nested(self): s = """ @@ -388,7 +388,7 @@ class Test_find_binding(support.TestCase): pass except: b = 8""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -398,7 +398,7 @@ class Test_find_binding(support.TestCase): a = 6 except: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -408,7 +408,7 @@ class Test_find_binding(support.TestCase): pass except: a = 6""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -420,7 +420,7 @@ class Test_find_binding(support.TestCase): a = 6 except: pass""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -432,14 +432,14 @@ class Test_find_binding(support.TestCase): pass except: a = 6""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: b = 8 except: b = 6""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) s = """ try: @@ -454,7 +454,7 @@ class Test_find_binding(support.TestCase): t = 8 except: o = y""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_try_except_finally(self): s = """ @@ -464,21 +464,21 @@ class Test_find_binding(support.TestCase): b = 8 finally: a = 9""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: b = 8 finally: a = 6""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: b = 8 finally: b = 6""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) s = """ try: @@ -487,7 +487,7 @@ class Test_find_binding(support.TestCase): b = 9 finally: b = 6""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) def test_try_except_finally_nested(self): s = """ @@ -502,7 +502,7 @@ class Test_find_binding(support.TestCase): b = 9 finally: c = 9""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -512,7 +512,7 @@ class Test_find_binding(support.TestCase): pass finally: a = 6""" - self.failUnless(self.find_binding("a", s)) + self.assertTrue(self.find_binding("a", s)) s = """ try: @@ -522,7 +522,7 @@ class Test_find_binding(support.TestCase): b = 6 finally: b = 7""" - self.failIf(self.find_binding("a", s)) + self.assertFalse(self.find_binding("a", s)) class Test_touch_import(support.TestCase): -- cgit v0.12 From 53f4ed7da522527768bdcf5f199cdd11701b9c38 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 1 Jul 2009 15:03:38 +0000 Subject: Merged revisions 73747 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73747 | antoine.pitrou | 2009-07-01 16:53:06 +0200 (mer., 01 juil. 2009) | 3 lines Issue #6369: Fix an RLE decompression bug in the binhex module. ........ --- Lib/binhex.py | 4 ++-- Misc/NEWS | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/binhex.py b/Lib/binhex.py index 1c3f342..90e59bc 100644 --- a/Lib/binhex.py +++ b/Lib/binhex.py @@ -324,11 +324,11 @@ class _Rledecoderengine: mark = len(self.pre_buffer) if self.pre_buffer[-3:] == RUNCHAR + b'\0' + RUNCHAR: mark = mark - 3 - elif self.pre_buffer[-1] == RUNCHAR: + elif self.pre_buffer[-1:] == RUNCHAR: mark = mark - 2 elif self.pre_buffer[-2:] == RUNCHAR + b'\0': mark = mark - 2 - elif self.pre_buffer[-2] == RUNCHAR: + elif self.pre_buffer[-2:-1] == RUNCHAR: pass # Decode all else: mark = mark - 1 diff --git a/Misc/NEWS b/Misc/NEWS index 0b66254..125a5f0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -23,6 +23,8 @@ Core and Builtins Library ------- +- Issue #6369: Fix an RLE decompression bug in the binhex module. + - Issue #6344: Fixed a crash of mmap.read() when passed a negative argument. Build -- cgit v0.12 -- cgit v0.12 -- cgit v0.12 From 7dfed63bcd76fc13838e205d0e3d04258f9fd372 Mon Sep 17 00:00:00 2001 From: Jesus Cea Date: Thu, 2 Jul 2009 14:37:32 +0000 Subject: Merged revisions 73768 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73768 | jesus.cea | 2009-07-02 16:35:02 +0200 (Thu, 02 Jul 2009) | 9 lines Merged revisions 73767 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73767 | jesus.cea | 2009-07-02 16:30:18 +0200 (Thu, 02 Jul 2009) | 1 line multiprocessing doesn't compile in Solaris because a typo ........ ................ --- Modules/_multiprocessing/multiprocessing.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h index f8750d2..7a79d6e 100644 --- a/Modules/_multiprocessing/multiprocessing.h +++ b/Modules/_multiprocessing/multiprocessing.h @@ -49,7 +49,7 @@ # define SEM_VALUE_MAX sysconf(_SC_SEM_VALUE_MAX) #elif defined(_SEM_VALUE_MAX) # define SEM_VALUE_MAX _SEM_VALUE_MAX - #elif definef(_POSIX_SEM_VALUE_MAX) + #elif defined(_POSIX_SEM_VALUE_MAX) # define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX #else # define SEM_VALUE_MAX INT_MAX -- cgit v0.12 From e39d5d5f814756f66983b35b843bc00632a50451 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Thu, 2 Jul 2009 22:02:15 +0000 Subject: Merged revisions 73782-73784 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73782 | benjamin.peterson | 2009-07-02 16:44:01 -0500 (Thu, 02 Jul 2009) | 1 line the old CO_FUTURE flags can't be commented out ................ r73783 | benjamin.peterson | 2009-07-02 16:54:36 -0500 (Thu, 02 Jul 2009) | 1 line a little more fiddling to make flags like 2.x ................ r73784 | benjamin.peterson | 2009-07-02 16:55:39 -0500 (Thu, 02 Jul 2009) | 9 lines Merged revisions 73781 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73781 | benjamin.peterson | 2009-07-02 16:38:36 -0500 (Thu, 02 Jul 2009) | 1 line test that compile() accepts the future flag ........ ................ --- Include/code.h | 4 ++-- Include/pythonrun.h | 6 ++++-- Lib/test/test___future__.py | 3 +++ Misc/NEWS | 5 +++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Include/code.h b/Include/code.h index 145a9a1..efaf3c4 100644 --- a/Include/code.h +++ b/Include/code.h @@ -42,15 +42,15 @@ typedef struct { */ #define CO_NOFREE 0x0040 -#if 0 /* These are no longer used. */ +#if 0 #define CO_GENERATOR_ALLOWED 0x1000 +#endif #define CO_FUTURE_DIVISION 0x2000 #define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */ #define CO_FUTURE_WITH_STATEMENT 0x8000 #define CO_FUTURE_PRINT_FUNCTION 0x10000 #define CO_FUTURE_UNICODE_LITERALS 0x20000 -#endif #define CO_FUTURE_BARRY_AS_BDFL 0x40000 diff --git a/Include/pythonrun.h b/Include/pythonrun.h index 86d9fe2..09d3ee5 100644 --- a/Include/pythonrun.h +++ b/Include/pythonrun.h @@ -7,8 +7,10 @@ extern "C" { #endif -#define PyCF_MASK CO_FUTURE_BARRY_AS_BDFL -#define PyCF_MASK_OBSOLETE 0 +#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \ + CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \ + CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL) +#define PyCF_MASK_OBSOLETE (CO_NESTED) #define PyCF_SOURCE_IS_UTF8 0x0100 #define PyCF_DONT_IMPLY_DEDENT 0x0200 #define PyCF_ONLY_AST 0x0400 diff --git a/Lib/test/test___future__.py b/Lib/test/test___future__.py index 77006e1..9d98746 100644 --- a/Lib/test/test___future__.py +++ b/Lib/test/test___future__.py @@ -53,9 +53,12 @@ class FutureTest(unittest.TestCase): a(hasattr(value, "compiler_flag"), "feature is missing a .compiler_flag attr") + # Make sure the compile accepts the flag. + compile("", "", "exec", value.compiler_flag) a(isinstance(getattr(value, "compiler_flag"), int), ".compiler_flag isn't int") + def test_main(): support.run_unittest(FutureTest) diff --git a/Misc/NEWS b/Misc/NEWS index 125a5f0..b08ba8f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -20,6 +20,11 @@ Core and Builtins the 'surrogateescape' error handler, a string which contains unpaired surrogates. +C-API +----- + +- The code flags for old __future__ features are now available again. + Library ------- -- cgit v0.12 From 7e077243095e0f91c5627f9e6e7cd395846edb46 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Thu, 2 Jul 2009 23:57:11 +0000 Subject: Merged revisions 73788 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73788 | amaury.forgeotdarc | 2009-07-03 01:08:45 +0200 (ven., 03 juil. 2009) | 6 lines #4601: 'make install' did not set the permissions on library directories, only root could start IDLE for example. Beware that os.path.walk does not translate as is to os.walk! the former uses a callback to call on each dir, the latter is a generator... ........ --- Misc/NEWS | 3 +++ setup.py | 11 +++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index b08ba8f..83554f3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -35,6 +35,9 @@ Library Build ----- +- Issue 4601: 'make install' did not set the appropriate permissions on + directories. + - Issue 5390: Add uninstall icon independent of whether file extensions are installed. diff --git a/setup.py b/setup.py index 2738eec..c42416e 100644 --- a/setup.py +++ b/setup.py @@ -1605,12 +1605,11 @@ class PyBuildInstallLib(install_lib): def set_dir_modes(self, dirname, mode): if not self.is_chmod_supported(): return - os.walk(dirname, self.set_dir_modes_visitor, mode) - - def set_dir_modes_visitor(self, mode, dirname, names): - if os.path.islink(dirname): return - log.info("changing mode of %s to %o", dirname, mode) - if not self.dry_run: os.chmod(dirname, mode) + for dirpath, dirnames, fnames in os.walk(dirname): + if os.path.islink(dirpath): + continue + log.info("changing mode of %s to %o", dirpath, mode) + if not self.dry_run: os.chmod(dirpath, mode) def is_chmod_supported(self): return hasattr(os, 'chmod') -- cgit v0.12 From 385029fda08514cb08d4ec95a508ab0233c4438c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Fri, 3 Jul 2009 08:37:27 +0000 Subject: Merged revisions 73792 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73792 | tarek.ziade | 2009-07-03 10:33:28 +0200 (Fri, 03 Jul 2009) | 9 lines Merged revisions 73790 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73790 | tarek.ziade | 2009-07-03 10:22:56 +0200 (Fri, 03 Jul 2009) | 1 line Fixed #6403 : package path usage for build_ext ........ ................ --- Lib/distutils/command/build_ext.py | 14 +++++++++---- Lib/distutils/tests/test_build_ext.py | 37 +++++++++++++++++++++++++++++------ Misc/NEWS | 2 ++ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index 57a110b..3045702 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -631,17 +631,23 @@ class build_ext(Command): """ fullname = self.get_ext_fullname(ext_name) modpath = fullname.split('.') - package = '.'.join(modpath[0:-1]) - base = modpath[-1] - filename = self.get_ext_filename(base) + filename = self.get_ext_filename(modpath[-1]) + if not self.inplace: # no further work needed + # returning : + # build_dir/package/path/filename + filename = os.path.join(*modpath[:-1]+[filename]) return os.path.join(self.build_lib, filename) # the inplace option requires to find the package directory - # using the build_py command + # using the build_py command for that + package = '.'.join(modpath[0:-1]) build_py = self.get_finalized_command('build_py') package_dir = os.path.abspath(build_py.get_package_dir(package)) + + # returning + # package_dir/filename return os.path.join(package_dir, filename) def get_ext_fullname(self, ext_name): diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index fe6009b..f0580c1 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -337,7 +337,8 @@ class BuildExtTestCase(TempdirManager, self.assertEquals(so_dir, cmd.build_lib) # inplace = 0, cmd.package = 'bar' - cmd.package = 'bar' + build_py = cmd.get_finalized_command('build_py') + build_py.package_dir = {'': 'bar'} path = cmd.get_ext_fullpath('foo') # checking that the last directory is the build_dir path = os.path.split(path)[0] @@ -355,12 +356,14 @@ class BuildExtTestCase(TempdirManager, # checking that the last directory is bar path = os.path.split(path)[0] lastdir = os.path.split(path)[-1] - self.assertEquals(lastdir, cmd.package) + self.assertEquals(lastdir, 'bar') - def test_build_ext_inplace(self): - etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') - etree_ext = Extension('lxml.etree', [etree_c]) - dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + def test_ext_fullpath(self): + # building lxml.etree inplace + #etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') + #etree_ext = Extension('lxml.etree', [etree_c]) + #dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + dist = Distribution() cmd = build_ext(dist) cmd.inplace = 1 cmd.distribution.package_dir = {'': 'src'} @@ -370,6 +373,28 @@ class BuildExtTestCase(TempdirManager, path = cmd.get_ext_fullpath('lxml.etree') self.assertEquals(wanted, path) + # building lxml.etree not inplace + cmd.inplace = 0 + cmd.build_lib = os.path.join(curdir, 'tmpdir') + wanted = os.path.join(curdir, 'tmpdir', 'lxml', 'etree.so') + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEquals(wanted, path) + + # building twisted.runner.portmap not inplace + build_py = cmd.get_finalized_command('build_py') + build_py.package_dir = {} + cmd.distribution.packages = ['twisted', 'twisted.runner.portmap'] + path = cmd.get_ext_fullpath('twisted.runner.portmap') + wanted = os.path.join(curdir, 'tmpdir', 'twisted', 'runner', + 'portmap.so') + self.assertEquals(wanted, path) + + # building twisted.runner.portmap inplace + cmd.inplace = 1 + path = cmd.get_ext_fullpath('twisted.runner.portmap') + wanted = os.path.join(curdir, 'twisted', 'runner', 'portmap.so') + self.assertEquals(wanted, path) + def test_suite(): src = _get_source_filename() if not os.path.exists(src): diff --git a/Misc/NEWS b/Misc/NEWS index 83554f3..9f09a4c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -857,6 +857,8 @@ Core and Builtins Library ------- +- Issue #6403: Fixed package path usage in build_ext. + - Issue #6365: Distutils build_ext inplace mode was copying the compiled extension in a subdirectory if the extension name had dots. -- cgit v0.12 -- cgit v0.12 From 3efca3996a84f93e6246f211af51f0ff8d539366 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 3 Jul 2009 13:25:24 +0000 Subject: Merged revisions 73805 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73805 | benjamin.peterson | 2009-07-03 08:18:18 -0500 (Fri, 03 Jul 2009) | 1 line xrange -> range ........ --- Lib/lib2to3/refactor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py index c5398c8..339b94f 100644 --- a/Lib/lib2to3/refactor.py +++ b/Lib/lib2to3/refactor.py @@ -550,7 +550,7 @@ class MultiprocessRefactoringTool(RefactoringTool): raise RuntimeError("already doing multiple processes") self.queue = multiprocessing.JoinableQueue() processes = [multiprocessing.Process(target=self._child) - for i in xrange(num_processes)] + for i in range(num_processes)] try: for p in processes: p.start() @@ -558,7 +558,7 @@ class MultiprocessRefactoringTool(RefactoringTool): doctests_only) finally: self.queue.join() - for i in xrange(num_processes): + for i in range(num_processes): self.queue.put(None) for p in processes: if p.is_alive(): -- cgit v0.12 From b166ffdc3a8458aaa2585ddbdd33e356e62b5c75 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 3 Jul 2009 13:33:17 +0000 Subject: Merged revisions 73809 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73809 | benjamin.peterson | 2009-07-03 08:30:25 -0500 (Fri, 03 Jul 2009) | 1 line remove duplicate declartions #6405 ........ --- Include/descrobject.h | 2 -- Misc/NEWS | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Include/descrobject.h b/Include/descrobject.h index 15041ff..f06b421 100644 --- a/Include/descrobject.h +++ b/Include/descrobject.h @@ -73,8 +73,6 @@ PyAPI_DATA(PyTypeObject) PyMemberDescr_Type; PyAPI_DATA(PyTypeObject) PyMethodDescr_Type; PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; PyAPI_DATA(PyTypeObject) PyDictProxy_Type; -PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type; -PyAPI_DATA(PyTypeObject) PyMemberDescr_Type; PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); diff --git a/Misc/NEWS b/Misc/NEWS index 9f09a4c..1cdd832 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -23,6 +23,8 @@ Core and Builtins C-API ----- +- Issue #6405: Remove duplicatet type declarations in descrobject.h. + - The code flags for old __future__ features are now available again. Library -- cgit v0.12 -- cgit v0.12 From 35c88a8f38f4aee3916c497ded339981de249703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Sat, 4 Jul 2009 02:05:51 +0000 Subject: Merged revisions 73828 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73828 | tarek.ziade | 2009-07-04 04:04:21 +0200 (Sat, 04 Jul 2009) | 9 lines Merged revisions 73827 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73827 | tarek.ziade | 2009-07-04 04:02:41 +0200 (Sat, 04 Jul 2009) | 1 line Fixed #6413: fixed log level in distutils.dist.announce ........ ................ --- Lib/distutils/dist.py | 4 ++-- Misc/NEWS | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py index 915d336..092ec0d 100644 --- a/Lib/distutils/dist.py +++ b/Lib/distutils/dist.py @@ -907,8 +907,8 @@ Common commands: (see '--help-commands' for more) # -- Methods that operate on the Distribution ---------------------- - def announce(self, msg, level=1): - log.debug(msg) + def announce(self, msg, level=log.INFO): + log.log(level, msg) def run_commands(self): """Run each command that was seen on the setup script command line. diff --git a/Misc/NEWS b/Misc/NEWS index 1cdd832..2f49fef 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -859,6 +859,8 @@ Core and Builtins Library ------- +- Issue #6413: Fixed the log level in distutils.dist for announce. + - Issue #6403: Fixed package path usage in build_ext. - Issue #6365: Distutils build_ext inplace mode was copying the compiled -- cgit v0.12 From 2b33045843fc50d752afd4c09a904d52dbd71f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Sat, 4 Jul 2009 03:01:33 +0000 Subject: Merged revisions 73835 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73835 | tarek.ziade | 2009-07-04 05:00:50 +0200 (Sat, 04 Jul 2009) | 9 lines Merged revisions 73834 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73834 | tarek.ziade | 2009-07-04 04:59:19 +0200 (Sat, 04 Jul 2009) | 1 line using print statements when used for user interaction ........ ................ --- Lib/distutils/dist.py | 22 +++++++++++----------- Lib/distutils/tests/test_dist.py | 18 ------------------ 2 files changed, 11 insertions(+), 29 deletions(-) diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py index 092ec0d..ac5a0ca 100644 --- a/Lib/distutils/dist.py +++ b/Lib/distutils/dist.py @@ -596,14 +596,14 @@ Common commands: (see '--help-commands' for more) options = self.global_options parser.set_option_table(options) parser.print_help(self.common_usage + "\nGlobal options:") - self.announce('') + print('') if display_options: parser.set_option_table(self.display_options) parser.print_help( "Information display options (just display " + "information, ignore any commands)") - self.announce('') + print('') for command in self.commands: if isinstance(command, type) and issubclass(command, Command): @@ -617,9 +617,9 @@ Common commands: (see '--help-commands' for more) else: parser.set_option_table(klass.user_options) parser.print_help("Options for '%s' command:" % klass.__name__) - self.announce('') + print('') - self.announce(gen_usage(self.script_name)) + print(gen_usage(self.script_name)) def handle_display_options(self, option_order): """If there were any non-global "display-only" options @@ -634,8 +634,8 @@ Common commands: (see '--help-commands' for more) # we ignore "foo bar"). if self.help_commands: self.print_commands() - self.announce('') - self.announce(gen_usage(self.script_name)) + print('') + print(gen_usage(self.script_name)) return 1 # If user supplied any of the "display metadata" options, then @@ -651,12 +651,12 @@ Common commands: (see '--help-commands' for more) opt = translate_longopt(opt) value = getattr(self.metadata, "get_"+opt)() if opt in ['keywords', 'platforms']: - self.announce(','.join(value)) + print(','.join(value)) elif opt in ('classifiers', 'provides', 'requires', 'obsoletes'): - self.announce('\n'.join(value)) + print('\n'.join(value)) else: - self.announce(value) + print(value) any_display_options = 1 return any_display_options @@ -665,7 +665,7 @@ Common commands: (see '--help-commands' for more) """Print a subset of the list of all commands -- used by 'print_commands()'. """ - self.announce(header + ":") + print(header + ":") for cmd in commands: klass = self.cmdclass.get(cmd) @@ -676,7 +676,7 @@ Common commands: (see '--help-commands' for more) except AttributeError: description = "(no description available)" - self.announce(" %-*s %s" % (max_length, cmd, description)) + print(" %-*s %s" % (max_length, cmd, description)) def print_commands(self): """Print out a help message listing all available commands with a diff --git a/Lib/distutils/tests/test_dist.py b/Lib/distutils/tests/test_dist.py index 16ef68e..4076039 100644 --- a/Lib/distutils/tests/test_dist.py +++ b/Lib/distutils/tests/test_dist.py @@ -136,24 +136,6 @@ class DistributionTestCase(support.LoggingSilencer, self.assertEquals(dist.metadata.platforms, ['one', 'two']) self.assertEquals(dist.metadata.keywords, ['one', 'two']) - def test_show_help(self): - class FancyGetopt(object): - def __init__(self): - self.count = 0 - - def set_option_table(self, *args): - pass - - def print_help(self, *args): - self.count += 1 - - parser = FancyGetopt() - dist = Distribution() - dist.commands = ['sdist'] - dist.script_name = 'setup.py' - dist._show_help(parser) - self.assertEquals(parser.count, 3) - def test_get_command_packages(self): dist = Distribution() self.assertEquals(dist.command_packages, None) -- cgit v0.12 -- cgit v0.12 From 79fa5ab7b0744ab5b74ecf2de0a17ef604e0097e Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Tue, 7 Jul 2009 00:45:43 +0000 Subject: Merged revisions 73868 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73868 | amaury.forgeotdarc | 2009-07-07 02:43:08 +0200 (mar., 07 juil. 2009) | 3 lines #6428: py3k requires that __bool__ return a bool (and not an int) Fix the error message and the documentation. ........ --- Doc/reference/datamodel.rst | 10 +++++----- Misc/NEWS | 4 ++++ Objects/typeobject.c | 6 ++---- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 2161706..d0aa59f 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1254,11 +1254,11 @@ Basic customization .. index:: single: __len__() (mapping object method) Called to implement truth value testing and the built-in operation - ``bool()``; should return ``False`` or ``True``, or their integer equivalents - ``0`` or ``1``. When this method is not defined, :meth:`__len__` is called, - if it is defined, and the object is considered true if its result is nonzero. - If a class defines neither :meth:`__len__` nor :meth:`__bool__`, all its - instances are considered true. + ``bool()``; should return ``False`` or ``True``. When this method is not + defined, :meth:`__len__` is called, if it is defined, and the object is + considered true if its result is nonzero. If a class defines neither + :meth:`__len__` nor :meth:`__bool__`, all its instances are considered + true. .. _attribute-access: diff --git a/Misc/NEWS b/Misc/NEWS index 2f49fef..b37f18e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ What's New in Python 3.1.1? Core and Builtins ----------------- +- Issue #6428: Since Python 3.0, the __bool__ method must return a bool + object, and not an int. Fix the corresponding error message, and the + documentation. + - Issue #6347: Include inttypes.h as well as stdint.h in pyport.h. This fixes a build failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead of stdint.h on that platform. diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 0e79542..60483e7 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4807,10 +4807,8 @@ slot_nb_bool(PyObject *self) } else { PyErr_Format(PyExc_TypeError, - "%s should return " - "bool or int, returned %s", - (using_len ? "__len__" - : "__bool__"), + "__bool__ should return " + "bool, returned %s", Py_TYPE(temp)->tp_name); result = -1; } -- cgit v0.12 From 5f587b41669885f94fe71b4cba83701d8d81bd2d Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Tue, 7 Jul 2009 06:53:22 +0000 Subject: Merged revisions 73874 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73874 | amaury.forgeotdarc | 2009-07-07 08:51:26 +0200 (mar., 07 juil. 2009) | 9 lines Merged revisions 73873 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73873 | amaury.forgeotdarc | 2009-07-07 08:49:41 +0200 (mar., 07 juil. 2009) | 2 lines #6420: Fix a compilation warning in the nis module, for OpenBSD and FreeBSD. ........ ................ --- Modules/nismodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/nismodule.c b/Modules/nismodule.c index c2646eb..4be4657 100644 --- a/Modules/nismodule.c +++ b/Modules/nismodule.c @@ -89,7 +89,7 @@ nis_mapname (char *map, int *pfix) return map; } -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__OpenBSD__) || defined(__FreeBSD__) typedef int (*foreachfunc)(unsigned long, char *, int, char *, int, void *); #else typedef int (*foreachfunc)(int, char *, int, char *, int, char *); -- cgit v0.12 From a62c94bcf7121d6f2f19968b8102a531ea43f319 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Tue, 7 Jul 2009 10:21:58 +0000 Subject: Merged revisions 73882 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r73882 | mark.dickinson | 2009-07-07 11:21:03 +0100 (Tue, 07 Jul 2009) | 9 lines Merged revisions 73880 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73880 | mark.dickinson | 2009-07-07 11:18:22 +0100 (Tue, 07 Jul 2009) | 1 line Typo in error message ........ ................ --- Modules/_struct.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_struct.c b/Modules/_struct.c index 27d596c..3e0ab31 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -493,7 +493,7 @@ np_ushort(char *p, PyObject *v, const formatdef *f) return -1; if (x < 0 || x > USHRT_MAX){ PyErr_SetString(StructError, - "short format requires 0 <= number <= " STRINGIFY(USHRT_MAX)); + "ushort format requires 0 <= number <= " STRINGIFY(USHRT_MAX)); return -1; } y = (unsigned short)x; -- cgit v0.12 -- cgit v0.12 -- cgit v0.12 From 28a6001a021452bf26f58463be33ed4868cd1902 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Thu, 9 Jul 2009 20:31:08 +0000 Subject: Merged revisions 73913 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73913 | r.david.murray | 2009-07-09 16:12:31 -0400 (Thu, 09 Jul 2009) | 18 lines Merged revisions 73907-73908 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73907 | r.david.murray | 2009-07-09 12:17:30 -0400 (Thu, 09 Jul 2009) | 4 lines Temporarily ignore rmtree errors in test_getcwd_long_pathnames to see if the test gives useful failure info on Solaris buildbot. ........ r73908 | r.david.murray | 2009-07-09 14:41:03 -0400 (Thu, 09 Jul 2009) | 6 lines Try to fix Solaris buildbot rmtree failure in test_getcwd_long_pathnames cleanup. If this fix works, it means that Solaris is unique among our platforms in what happens when shutil.rmtree is called on the current working directory (ie: it doesn't work on Solaris, but it does everywhere else). ........ ................ --- Lib/test/test_posix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 8d1bb59..73ad95e 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -248,8 +248,8 @@ class PosixTester(unittest.TestCase): _create_and_do_getcwd(dirname) finally: - support.rmtree(base_path) os.chdir(curdir) + support.rmtree(base_path) def test_main(): -- cgit v0.12 From d31d4f2cc4dbe882fb75a2ee5dde473b8216d73a Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Thu, 9 Jul 2009 23:20:02 +0000 Subject: Merged revisions 73918-73919 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73918 | amaury.forgeotdarc | 2009-07-10 01:00:40 +0200 (ven., 10 juil. 2009) | 9 lines #6323: pdb doesn't deal well with SyntaxErrors. It seems necessary to keep two layers of 'exec' (one in Bdb.run, one in Pdb._runscript); this allows the tracing function to be active when the inner 'exec' runs and tries to compile the real code. This partially revert r58127, the net effet of the two changes is to replace "exec('%s')" with "exec(%r)". ........ r73919 | amaury.forgeotdarc | 2009-07-10 01:07:52 +0200 (ven., 10 juil. 2009) | 2 lines NEWS entry for r73918. ........ --- Lib/pdb.py | 2 +- Misc/NEWS | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Lib/pdb.py b/Lib/pdb.py index 23bc6df..d379d1a 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1211,7 +1211,7 @@ see no sign that the breakpoint was reached. self.mainpyfile = self.canonic(filename) self._user_requested_quit = 0 with open(filename) as fp: - statement = fp.read() + statement = "exec(%r)" % (fp.read(),) self.run(statement) # Simplified interface diff --git a/Misc/NEWS b/Misc/NEWS index b37f18e..e650b33 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,9 @@ C-API Library ------- +- Issue #6323: The pdb debugger did not exit when running a script with a + syntax error. + - Issue #6369: Fix an RLE decompression bug in the binhex module. - Issue #6344: Fixed a crash of mmap.read() when passed a negative argument. -- cgit v0.12 From 7e6460098a0c50f99c73b751c0b6d7941df46547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Fri, 10 Jul 2009 09:16:07 +0000 Subject: Merged revisions 73923 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73923 | tarek.ziade | 2009-07-10 11:14:31 +0200 (Fri, 10 Jul 2009) | 9 lines Merged revisions 73921 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73921 | tarek.ziade | 2009-07-10 11:10:33 +0200 (Fri, 10 Jul 2009) | 1 line Fixed #6455 (the test shall use pyd files under win32, rather than so files) ........ ................ --- Lib/distutils/tests/test_build_ext.py | 9 +++++---- Misc/NEWS | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index f0580c1..c671483 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -359,6 +359,7 @@ class BuildExtTestCase(TempdirManager, self.assertEquals(lastdir, 'bar') def test_ext_fullpath(self): + ext = sysconfig.get_config_vars()['SO'] # building lxml.etree inplace #etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') #etree_ext = Extension('lxml.etree', [etree_c]) @@ -369,14 +370,14 @@ class BuildExtTestCase(TempdirManager, cmd.distribution.package_dir = {'': 'src'} cmd.distribution.packages = ['lxml', 'lxml.html'] curdir = os.getcwd() - wanted = os.path.join(curdir, 'src', 'lxml', 'etree.so') + wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) path = cmd.get_ext_fullpath('lxml.etree') self.assertEquals(wanted, path) # building lxml.etree not inplace cmd.inplace = 0 cmd.build_lib = os.path.join(curdir, 'tmpdir') - wanted = os.path.join(curdir, 'tmpdir', 'lxml', 'etree.so') + wanted = os.path.join(curdir, 'tmpdir', 'lxml', 'etree' + ext) path = cmd.get_ext_fullpath('lxml.etree') self.assertEquals(wanted, path) @@ -386,13 +387,13 @@ class BuildExtTestCase(TempdirManager, cmd.distribution.packages = ['twisted', 'twisted.runner.portmap'] path = cmd.get_ext_fullpath('twisted.runner.portmap') wanted = os.path.join(curdir, 'tmpdir', 'twisted', 'runner', - 'portmap.so') + 'portmap' + ext) self.assertEquals(wanted, path) # building twisted.runner.portmap inplace cmd.inplace = 1 path = cmd.get_ext_fullpath('twisted.runner.portmap') - wanted = os.path.join(curdir, 'twisted', 'runner', 'portmap.so') + wanted = os.path.join(curdir, 'twisted', 'runner', 'portmap' + ext) self.assertEquals(wanted, path) def test_suite(): diff --git a/Misc/NEWS b/Misc/NEWS index e650b33..e1dba94 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -866,6 +866,8 @@ Core and Builtins Library ------- +- Issue #6455: Fixed test_build_ext under win32. + - Issue #6413: Fixed the log level in distutils.dist for announce. - Issue #6403: Fixed package path usage in build_ext. -- cgit v0.12 -- cgit v0.12 From 041b3baf53e3d1bf4b9941fd91ff807daef5965d Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Sat, 11 Jul 2009 09:37:09 +0000 Subject: Merged revisions 73934 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73934 | amaury.forgeotdarc | 2009-07-11 11:35:13 +0200 (sam., 11 juil. 2009) | 3 lines #6358: Merge r73933: Add basic tests for the return value of os.popen().close(). And fix the implementation to make these tests pass with py3k ........ --- Lib/os.py | 8 +++++++- Lib/test/test_popen.py | 7 +++++++ Misc/NEWS | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Lib/os.py b/Lib/os.py index 5dce0c1..a59c5df 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -643,7 +643,13 @@ class _wrap_close: self._proc = proc def close(self): self._stream.close() - return self._proc.wait() << 8 # Shift left to match old behavior + returncode = self._proc.wait() + if returncode == 0: + return None + if name == 'nt': + return returncode + else: + return returncode << 8 # Shift left to match old behavior def __getattr__(self, name): return getattr(self._stream, name) def __iter__(self): diff --git a/Lib/test/test_popen.py b/Lib/test/test_popen.py index d728792..99ad41d 100644 --- a/Lib/test/test_popen.py +++ b/Lib/test/test_popen.py @@ -42,6 +42,13 @@ class PopenTest(unittest.TestCase): ) support.reap_children() + def test_return_code(self): + self.assertEqual(os.popen("exit 0").close(), None) + if os.name == 'nt': + self.assertEqual(os.popen("exit 42").close(), 42) + else: + self.assertEqual(os.popen("exit 42").close(), 42 << 8) + def test_main(): support.run_unittest(PopenTest) diff --git a/Misc/NEWS b/Misc/NEWS index e1dba94..8ef3566 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,9 @@ C-API Library ------- +- Issue #6358: The exit status of a command started with os.popen() was + reported differently than it did with python 2.x. + - Issue #6323: The pdb debugger did not exit when running a script with a syntax error. -- cgit v0.12 From 24448fa86e3a82b266b2abca2fae94f6d9340dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Sat, 11 Jul 2009 11:01:14 +0000 Subject: Merged revisions 73948 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73948 | tarek.ziade | 2009-07-11 12:59:56 +0200 (Sat, 11 Jul 2009) | 9 lines Merged revisions 73946 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73946 | tarek.ziade | 2009-07-11 12:55:27 +0200 (Sat, 11 Jul 2009) | 1 line fixed #6459: distutils.command.build_ext.get_export_symbols now uses 'PyInit' ........ ................ --- Lib/distutils/command/build_ext.py | 2 +- Lib/distutils/tests/test_build_ext.py | 2 +- Misc/NEWS | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py index 3045702..1596586 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -679,7 +679,7 @@ class build_ext(Command): """Return the list of symbols that a shared extension has to export. This either uses 'ext.export_symbols' or, if it's not provided, "PyInit_" + module_name. Only relevant on Windows, where - the .pyd file (DLL) must export the module "init" function. + the .pyd file (DLL) must export the module "PyInit_" function. """ initfunc_name = "PyInit_" + ext.name.split('.')[-1] if initfunc_name not in ext.export_symbols: diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index c671483..9861ee2 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -296,7 +296,7 @@ class BuildExtTestCase(TempdirManager, def test_get_outputs(self): tmp_dir = self.mkdtemp() c_file = os.path.join(tmp_dir, 'foo.c') - self.write_file(c_file, 'void initfoo(void) {};\n') + self.write_file(c_file, 'void PyInit_foo(void) {};\n') ext = Extension('foo', [c_file], optional=False) dist = Distribution({'name': 'xx', 'ext_modules': [ext]}) diff --git a/Misc/NEWS b/Misc/NEWS index 8ef3566..a3aebf0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -869,6 +869,9 @@ Core and Builtins Library ------- +- Issue #6459: distutils.command.build_ext.get_export_symbols now uses the + "PyInit" prefix, rather than "init". + - Issue #6455: Fixed test_build_ext under win32. - Issue #6413: Fixed the log level in distutils.dist for announce. -- cgit v0.12 From 41fe28220bf2790277f9a82446c73736709378c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Sun, 12 Jul 2009 08:39:08 +0000 Subject: Merged revisions 73975 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r73975 | tarek.ziade | 2009-07-12 10:27:26 +0200 (Sun, 12 Jul 2009) | 1 line Fixed #6438: distutils.cygwinccompiler.get_versions was trying to use a re string pattern on a bytes ........ --- Lib/distutils/cygwinccompiler.py | 6 ++++-- Lib/distutils/tests/test_cygwinccompiler.py | 17 +++++++++-------- Misc/NEWS | 4 ++++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py index 5f3a389..8504371 100644 --- a/Lib/distutils/cygwinccompiler.py +++ b/Lib/distutils/cygwinccompiler.py @@ -359,7 +359,7 @@ def check_config_h(): return (CONFIG_H_UNCERTAIN, "couldn't read '%s': %s" % (fn, exc.strerror)) -RE_VERSION = re.compile('(\d+\.\d+(\.\d+)*)') +RE_VERSION = re.compile(b'(\d+\.\d+(\.\d+)*)') def _find_exe_version(cmd): """Find the version of an executable by running `cmd` in the shell. @@ -378,7 +378,9 @@ def _find_exe_version(cmd): result = RE_VERSION.search(out_string) if result is None: return None - return LooseVersion(result.group(1)) + # LooseVersion works with strings + # so we need to decode our bytes + return LooseVersion(result.group(1).decode()) def get_versions(): """ Try to find out the versions of gcc, ld and dllwrap. diff --git a/Lib/distutils/tests/test_cygwinccompiler.py b/Lib/distutils/tests/test_cygwinccompiler.py index c5a6495..a57694d 100644 --- a/Lib/distutils/tests/test_cygwinccompiler.py +++ b/Lib/distutils/tests/test_cygwinccompiler.py @@ -2,7 +2,7 @@ import unittest import sys import os -from io import StringIO +from io import BytesIO import subprocess from distutils import cygwinccompiler @@ -19,7 +19,8 @@ class FakePopen(object): self.cmd = cmd.split()[0] exes = self.test_class._exes if self.cmd in exes: - self.stdout = StringIO(exes[self.cmd]) + # issue #6438 in Python 3.x, Popen returns bytes + self.stdout = BytesIO(exes[self.cmd]) else: self.stdout = os.popen(cmd, 'r') @@ -87,30 +88,30 @@ class CygwinCCompilerTestCase(support.TempdirManager, self.assertEquals(get_versions(), (None, None, None)) # Let's fake we have 'gcc' and it returns '3.4.5' - self._exes['gcc'] = 'gcc (GCC) 3.4.5 (mingw special)\nFSF' + self._exes['gcc'] = b'gcc (GCC) 3.4.5 (mingw special)\nFSF' res = get_versions() self.assertEquals(str(res[0]), '3.4.5') # and let's see what happens when the version # doesn't match the regular expression # (\d+\.\d+(\.\d+)*) - self._exes['gcc'] = 'very strange output' + self._exes['gcc'] = b'very strange output' res = get_versions() self.assertEquals(res[0], None) # same thing for ld - self._exes['ld'] = 'GNU ld version 2.17.50 20060824' + self._exes['ld'] = b'GNU ld version 2.17.50 20060824' res = get_versions() self.assertEquals(str(res[1]), '2.17.50') - self._exes['ld'] = '@(#)PROGRAM:ld PROJECT:ld64-77' + self._exes['ld'] = b'@(#)PROGRAM:ld PROJECT:ld64-77' res = get_versions() self.assertEquals(res[1], None) # and dllwrap - self._exes['dllwrap'] = 'GNU dllwrap 2.17.50 20060824\nFSF' + self._exes['dllwrap'] = b'GNU dllwrap 2.17.50 20060824\nFSF' res = get_versions() self.assertEquals(str(res[2]), '2.17.50') - self._exes['dllwrap'] = 'Cheese Wrap' + self._exes['dllwrap'] = b'Cheese Wrap' res = get_versions() self.assertEquals(res[2], None) diff --git a/Misc/NEWS b/Misc/NEWS index a3aebf0..0009115 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -113,6 +113,10 @@ Core and Builtins Library ------- +- Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular + expression string pattern was trying to match against a bytes returned by + Popen. Tested under win32 to build the py-postgresql project. + - Issue #6258: Support AMD64 in bdist_msi. - Issue #6195: fixed doctest to no longer try to read 'source' data from -- cgit v0.12 From 868aa06b669f7eb209ceaa8c964fe089aa939f68 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 12 Jul 2009 20:47:13 +0000 Subject: Document the thousands separator. --- Doc/library/string.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Doc/library/string.rst b/Doc/library/string.rst index 861dd1f..215e76d 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -300,7 +300,7 @@ result as if you had called :func:`str` on the value. The general form of a *standard format specifier* is: .. productionlist:: sf - format_spec: [[`fill`]`align`][`sign`][#][0][`width`][.`precision`][`type`] + format_spec: [[`fill`]`align`][`sign`][#][0][`width`][,][.`precision`][`type`] fill: align: "<" | ">" | "=" | "^" sign: "+" | "-" | " " @@ -358,6 +358,10 @@ The ``'#'`` option is only valid for integers, and only for binary, octal, or hexadecimal output. If present, it specifies that the output will be prefixed by ``'0b'``, ``'0o'``, or ``'0x'``, respectively. +The ``','`` option signals the use of a comma for a thousands separator. +For a locale aware separator, use the ``'n'`` integer presentation type +instead. + *width* is a decimal integer defining the minimum field width. If not specified, then the field width will be determined by the content. -- cgit v0.12 -- cgit v0.12 From 680ac292ac8fce75836a84c7eccc0c18923e4121 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Fri, 17 Jul 2009 07:02:18 +0000 Subject: Merged revisions 74046 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74046 | hirokazu.yamamoto | 2009-07-17 15:55:42 +0900 | 13 lines Merged revisions 74040,74042 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74040 | hirokazu.yamamoto | 2009-07-17 15:20:46 +0900 | 1 line Issue #6415: Fixed warnings.warn sagfault on bad formatted string. ........ r74042 | hirokazu.yamamoto | 2009-07-17 15:26:54 +0900 | 1 line NEWS about r74040. ........ ................ --- Lib/test/test_warnings.py | 14 ++++++++++++++ Misc/NEWS | 2 ++ Python/_warnings.c | 2 ++ 3 files changed, 18 insertions(+) diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py index 4bcc210..292c018 100644 --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -338,6 +338,20 @@ class WarnTests(unittest.TestCase): self.module.warn_explicit, None, Warning, None, 1, registry=42) + def test_bad_str(self): + # issue 6415 + # Warnings instance with a bad format string for __str__ should not + # trigger a bus error. + class BadStrWarning(Warning): + """Warning with a bad format string for __str__.""" + def __str__(self): + return ("A bad formatted string %(err)" % + {"err" : "there is no %(err)s"}) + + with self.assertRaises(ValueError): + self.module.warn(BadStrWarning()) + + class CWarnTests(BaseTest, WarnTests): module = c_warnings diff --git a/Misc/NEWS b/Misc/NEWS index 0009115..2f9c12a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,8 @@ C-API Library ------- +- Issue #6415: Fixed warnings.warn sagfault on bad formatted string. + - Issue #6358: The exit status of a command started with os.popen() was reported differently than it did with python 2.x. diff --git a/Python/_warnings.c b/Python/_warnings.c index da52e35..ef7f373 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -320,6 +320,8 @@ warn_explicit(PyObject *category, PyObject *message, } if (rc == 1) { text = PyObject_Str(message); + if (text == NULL) + goto cleanup; category = (PyObject*)message->ob_type; } else { -- cgit v0.12 From 8d15643a4bbb118a2fc91541d3b02d7aca7953d9 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sat, 18 Jul 2009 14:43:10 +0000 Subject: Merged revisions 74078 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r74078 | mark.dickinson | 2009-07-18 15:41:42 +0100 (Sat, 18 Jul 2009) | 5 lines Issue #6431: Fix Fraction comparisons to return NotImplemented when the Fraction type doesn't know how to handle the comparison without loss of accuracy. Also, make sure that comparisons between Fractions and float infinities or nans do the right thing. ........ --- Lib/fractions.py | 62 +++++++++++----------- Lib/test/test_fractions.py | 126 +++++++++++++++++++++++++++++++++++++++++++++ Misc/NEWS | 4 ++ 3 files changed, 162 insertions(+), 30 deletions(-) diff --git a/Lib/fractions.py b/Lib/fractions.py index fcebb4f..bc7b200 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -501,54 +501,56 @@ class Fraction(numbers.Rational): if isinstance(b, numbers.Complex) and b.imag == 0: b = b.real if isinstance(b, float): - return a == a.from_float(b) + if math.isnan(b) or math.isinf(b): + # comparisons with an infinity or nan should behave in + # the same way for any finite a, so treat a as zero. + return 0.0 == b + else: + return a == a.from_float(b) else: - # XXX: If b.__eq__ is implemented like this method, it may - # give the wrong answer after float(a) changes a's - # value. Better ways of doing this are welcome. - return float(a) == b + # Since a doesn't know how to compare with b, let's give b + # a chance to compare itself with a. + return NotImplemented - def _subtractAndCompareToZero(a, b, op): - """Helper function for comparison operators. + def _richcmp(self, other, op): + """Helper for comparison operators, for internal use only. - Subtracts b from a, exactly if possible, and compares the - result with 0 using op, in such a way that the comparison - won't recurse. If the difference raises a TypeError, returns - NotImplemented instead. + Implement comparison between a Rational instance `self`, and + either another Rational instance or a float `other`. If + `other` is not a Rational instance or a float, return + NotImplemented. `op` should be one of the six standard + comparison operators. """ - if isinstance(b, numbers.Complex) and b.imag == 0: - b = b.real - if isinstance(b, float): - b = a.from_float(b) - try: - # XXX: If b <: Real but not <: Rational, this is likely - # to fall back to a float. If the actual values differ by - # less than MIN_FLOAT, this could falsely call them equal, - # which would make <= inconsistent with ==. Better ways of - # doing this are welcome. - diff = a - b - except TypeError: + # convert other to a Rational instance where reasonable. + if isinstance(other, numbers.Rational): + return op(self._numerator * other.denominator, + self._denominator * other.numerator) + if isinstance(other, numbers.Complex) and other.imag == 0: + other = other.real + if isinstance(other, float): + if math.isnan(other) or math.isinf(other): + return op(0.0, other) + else: + return op(self, self.from_float(other)) + else: return NotImplemented - if isinstance(diff, numbers.Rational): - return op(diff.numerator, 0) - return op(diff, 0) def __lt__(a, b): """a < b""" - return a._subtractAndCompareToZero(b, operator.lt) + return a._richcmp(b, operator.lt) def __gt__(a, b): """a > b""" - return a._subtractAndCompareToZero(b, operator.gt) + return a._richcmp(b, operator.gt) def __le__(a, b): """a <= b""" - return a._subtractAndCompareToZero(b, operator.le) + return a._richcmp(b, operator.le) def __ge__(a, b): """a >= b""" - return a._subtractAndCompareToZero(b, operator.ge) + return a._richcmp(b, operator.ge) def __bool__(a): """a != 0""" diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index e321914..fd6588a 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -3,6 +3,7 @@ from decimal import Decimal from test.support import run_unittest import math +import numbers import operator import fractions import unittest @@ -11,6 +12,69 @@ from pickle import dumps, loads F = fractions.Fraction gcd = fractions.gcd +class DummyFloat(object): + """Dummy float class for testing comparisons with Fractions""" + + def __init__(self, value): + if not isinstance(value, float): + raise TypeError("DummyFloat can only be initialized from float") + self.value = value + + def _richcmp(self, other, op): + if isinstance(other, numbers.Rational): + return op(F.from_float(self.value), other) + elif isinstance(other, DummyFloat): + return op(self.value, other.value) + else: + return NotImplemented + + def __eq__(self, other): return self._richcmp(other, operator.eq) + def __le__(self, other): return self._richcmp(other, operator.le) + def __lt__(self, other): return self._richcmp(other, operator.lt) + def __ge__(self, other): return self._richcmp(other, operator.ge) + def __gt__(self, other): return self._richcmp(other, operator.gt) + + # shouldn't be calling __float__ at all when doing comparisons + def __float__(self): + assert False, "__float__ should not be invoked for comparisons" + + # same goes for subtraction + def __sub__(self, other): + assert False, "__sub__ should not be invoked for comparisons" + __rsub__ = __sub__ + + +class DummyRational(object): + """Test comparison of Fraction with a naive rational implementation.""" + + def __init__(self, num, den): + g = gcd(num, den) + self.num = num // g + self.den = den // g + + def __eq__(self, other): + if isinstance(other, fractions.Fraction): + return (self.num == other._numerator and + self.den == other._denominator) + else: + return NotImplemented + + def __lt__(self, other): + return(self.num * other._denominator < self.den * other._numerator) + + def __gt__(self, other): + return(self.num * other._denominator > self.den * other._numerator) + + def __le__(self, other): + return(self.num * other._denominator <= self.den * other._numerator) + + def __ge__(self, other): + return(self.num * other._denominator >= self.den * other._numerator) + + # this class is for testing comparisons; conversion to float + # should never be used for a comparison, since it loses accuracy + def __float__(self): + assert False, "__float__ should not be invoked" class GcdTest(unittest.TestCase): @@ -324,6 +388,50 @@ class FractionTest(unittest.TestCase): self.assertFalse(F(1, 2) != F(1, 2)) self.assertTrue(F(1, 2) != F(1, 3)) + def testComparisonsDummyRational(self): + self.assertTrue(F(1, 2) == DummyRational(1, 2)) + self.assertTrue(DummyRational(1, 2) == F(1, 2)) + self.assertFalse(F(1, 2) == DummyRational(3, 4)) + self.assertFalse(DummyRational(3, 4) == F(1, 2)) + + self.assertTrue(F(1, 2) < DummyRational(3, 4)) + self.assertFalse(F(1, 2) < DummyRational(1, 2)) + self.assertFalse(F(1, 2) < DummyRational(1, 7)) + self.assertFalse(F(1, 2) > DummyRational(3, 4)) + self.assertFalse(F(1, 2) > DummyRational(1, 2)) + self.assertTrue(F(1, 2) > DummyRational(1, 7)) + self.assertTrue(F(1, 2) <= DummyRational(3, 4)) + self.assertTrue(F(1, 2) <= DummyRational(1, 2)) + self.assertFalse(F(1, 2) <= DummyRational(1, 7)) + self.assertFalse(F(1, 2) >= DummyRational(3, 4)) + self.assertTrue(F(1, 2) >= DummyRational(1, 2)) + self.assertTrue(F(1, 2) >= DummyRational(1, 7)) + + self.assertTrue(DummyRational(1, 2) < F(3, 4)) + self.assertFalse(DummyRational(1, 2) < F(1, 2)) + self.assertFalse(DummyRational(1, 2) < F(1, 7)) + self.assertFalse(DummyRational(1, 2) > F(3, 4)) + self.assertFalse(DummyRational(1, 2) > F(1, 2)) + self.assertTrue(DummyRational(1, 2) > F(1, 7)) + self.assertTrue(DummyRational(1, 2) <= F(3, 4)) + self.assertTrue(DummyRational(1, 2) <= F(1, 2)) + self.assertFalse(DummyRational(1, 2) <= F(1, 7)) + self.assertFalse(DummyRational(1, 2) >= F(3, 4)) + self.assertTrue(DummyRational(1, 2) >= F(1, 2)) + self.assertTrue(DummyRational(1, 2) >= F(1, 7)) + + def testComparisonsDummyFloat(self): + x = DummyFloat(1./3.) + y = F(1, 3) + self.assertTrue(x != y) + self.assertTrue(x < y or x > y) + self.assertFalse(x == y) + self.assertFalse(x <= y and x >= y) + self.assertTrue(y != x) + self.assertTrue(y < x or y > x) + self.assertFalse(y == x) + self.assertFalse(y <= x and y >= x) + def testMixedLess(self): self.assertTrue(2 < F(5, 2)) self.assertFalse(2 < F(4, 2)) @@ -335,6 +443,13 @@ class FractionTest(unittest.TestCase): self.assertTrue(0.4 < F(1, 2)) self.assertFalse(0.5 < F(1, 2)) + self.assertFalse(float('inf') < F(1, 2)) + self.assertTrue(float('-inf') < F(0, 10)) + self.assertFalse(float('nan') < F(-3, 7)) + self.assertTrue(F(1, 2) < float('inf')) + self.assertFalse(F(17, 12) < float('-inf')) + self.assertFalse(F(144, -89) < float('nan')) + def testMixedLessEqual(self): self.assertTrue(0.5 <= F(1, 2)) self.assertFalse(0.6 <= F(1, 2)) @@ -345,6 +460,13 @@ class FractionTest(unittest.TestCase): self.assertTrue(F(4, 2) <= 2) self.assertFalse(F(5, 2) <= 2) + self.assertFalse(float('inf') <= F(1, 2)) + self.assertTrue(float('-inf') <= F(0, 10)) + self.assertFalse(float('nan') <= F(-3, 7)) + self.assertTrue(F(1, 2) <= float('inf')) + self.assertFalse(F(17, 12) <= float('-inf')) + self.assertFalse(F(144, -89) <= float('nan')) + def testBigFloatComparisons(self): # Because 10**23 can't be represented exactly as a float: self.assertFalse(F(10**23) == float(10**23)) @@ -369,6 +491,10 @@ class FractionTest(unittest.TestCase): self.assertFalse(2 == F(3, 2)) self.assertTrue(F(4, 2) == 2) self.assertFalse(F(5, 2) == 2) + self.assertFalse(F(5, 2) == float('nan')) + self.assertFalse(float('nan') == F(3, 7)) + self.assertFalse(F(5, 2) == float('inf')) + self.assertFalse(float('-inf') == F(2, 5)) def testStringification(self): self.assertEquals("Fraction(7, 3)", repr(F(7, 3))) diff --git a/Misc/NEWS b/Misc/NEWS index 2f9c12a..964967b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,10 @@ C-API Library ------- +- Issue #6431: Make Fraction type return NotImplemented when it doesn't + know how to handle a comparison without loss of precision. Also add + correct handling of infinities and nans for comparisons with float. + - Issue #6415: Fixed warnings.warn sagfault on bad formatted string. - Issue #6358: The exit status of a command started with os.popen() was -- cgit v0.12 From 07fc01f9efa00e04d38d19bb722f65be0a1f39ad Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Sun, 19 Jul 2009 01:59:05 +0000 Subject: Merged revisions 74058 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74058 | alexandre.vassalotti | 2009-07-17 06:55:50 -0400 (Fri, 17 Jul 2009) | 36 lines Merged revisions 73870,73879,73899-73900,73905-73906 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73870 | r.david.murray | 2009-07-06 21:06:13 -0400 (Mon, 06 Jul 2009) | 5 lines Issue 6070: when creating a compiled file, after copying the mode bits, on posix zap the execute bit in case it was set on the .py file, since the compiled files are not directly executable on posix. Patch by Marco N. ........ r73879 | r.david.murray | 2009-07-07 05:54:16 -0400 (Tue, 07 Jul 2009) | 3 lines Update issue 6070 patch to match the patch that was actually tested on Windows. ........ r73899 | r.david.murray | 2009-07-08 21:43:41 -0400 (Wed, 08 Jul 2009) | 3 lines Conditionalize test cleanup code to eliminate traceback, which will hopefully reveal the real problem. ........ r73900 | r.david.murray | 2009-07-08 22:06:17 -0400 (Wed, 08 Jul 2009) | 2 lines Make test work with -O. ........ r73905 | r.david.murray | 2009-07-09 09:55:44 -0400 (Thu, 09 Jul 2009) | 3 lines Specify umask in execute bit test to get consistent results and make sure we test resetting all three execute bits. ........ r73906 | r.david.murray | 2009-07-09 11:35:33 -0400 (Thu, 09 Jul 2009) | 5 lines Curdir needs to be in the path for the test to work on all buildbots. (I copied this from another import test, but currently this will fail if TESTFN ends up in /tmp...see issue 2609). ........ ................ --- Lib/test/test_import.py | 30 +++++++++++++++++++++++++++++- Python/import.c | 6 +++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index dbfadfb7..8196865 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -1,5 +1,6 @@ import unittest import os +import stat import random import shutil import sys @@ -7,7 +8,7 @@ import py_compile import warnings import imp import marshal -from test.support import unlink, TESTFN, unload, run_unittest +from test.support import unlink, TESTFN, unload, run_unittest, TestFailed def remove_files(name): @@ -80,6 +81,32 @@ class ImportTest(unittest.TestCase): finally: del sys.path[0] + @unittest.skipUnless(os.name == 'posix', "test meaningful only on posix systems") + def test_execute_bit_not_copied(self): + # Issue 6070: under posix .pyc files got their execute bit set if + # the .py file had the execute bit set, but they aren't executable. + oldmask = os.umask(0o022) + sys.path.insert(0, os.curdir) + try: + fname = TESTFN + os.extsep + "py" + f = open(fname, 'w').close() + os.chmod(fname, (stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | + stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)) + __import__(TESTFN) + fn = fname + 'c' + if not os.path.exists(fn): + fn = fname + 'o' + if not os.path.exists(fn): raise TestFailed("__import__ did " + "not result in creation of either a .pyc or .pyo file") + s = os.stat(fn) + self.assertEquals(stat.S_IMODE(s.st_mode), + stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) + finally: + os.umask(oldmask) + remove_files(TESTFN) + if TESTFN in sys.modules: del sys.modules[TESTFN] + del sys.path[0] + def testImpModule(self): # Verify that the imp module can correctly load and find .py files import imp @@ -230,6 +257,7 @@ class ImportTest(unittest.TestCase): else: self.fail("import by path didn't raise an exception") + class TestPycRewriting(unittest.TestCase): # Test that the `co_filename` attribute on code objects always points # to the right file, even when various things happen (e.g. both the .py diff --git a/Python/import.c b/Python/import.c index bccb971..2b82587 100644 --- a/Python/import.c +++ b/Python/import.c @@ -930,7 +930,11 @@ write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat) { FILE *fp; time_t mtime = srcstat->st_mtime; - mode_t mode = srcstat->st_mode; +#ifdef MS_WINDOWS /* since Windows uses different permissions */ + mode_t mode = srcstat->st_mode & ~S_IEXEC; +#else + mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH; +#endif fp = open_exclusive(cpathname, mode); if (fp == NULL) { -- cgit v0.12 From 10fc39563cdb2953bc0eae634ac1efd2ff82eb5d Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Sun, 19 Jul 2009 02:25:02 +0000 Subject: Merged revisions 74087 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r74087 | r.david.murray | 2009-07-18 22:22:05 -0400 (Sat, 18 Jul 2009) | 2 lines News item for issue 6070 fix that was omitted from r74058 merge. ........ --- Misc/NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Misc/NEWS b/Misc/NEWS index 964967b..286c924 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 3.1.1? Core and Builtins ----------------- +- Issue #6070: On posix platforms import no longer copies the execute bit + from the .py file to the .pyc file if it is set. + - Issue #6428: Since Python 3.0, the __bool__ method must return a bool object, and not an int. Fix the corresponding error message, and the documentation. -- cgit v0.12 From e9da06f57443fd8cfe9e16fb950cfaf84a41f735 Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Sun, 19 Jul 2009 04:20:12 +0000 Subject: Fix for issue5102, timeout value propages between redirects, proxy, digest and auth handlers. Fixed tests to reflect the same. --- Lib/test/test_urllib2.py | 8 ++++++-- Lib/urllib/request.py | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 39ec498..5c9cb8c 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -222,8 +222,8 @@ def test_password_manager_default_port(self): class MockOpener: addheaders = [] - def open(self, req, data=None): - self.req, self.data = req, data + def open(self, req, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + self.req, self.data, self.timeout = req, data, timeout def error(self, proto, *args): self.proto, self.args = proto, args @@ -854,6 +854,7 @@ class HandlerTests(unittest.TestCase): for data in None, "blah\nblah\n": method = getattr(h, "http_error_%s" % code) req = Request(from_url, data) + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT req.add_header("Nonsense", "viking=withhold") if data is not None: req.add_header("Content-Length", str(len(data))) @@ -883,6 +884,7 @@ class HandlerTests(unittest.TestCase): # loop detection req = Request(from_url) + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT def redirect(h, req, url=to_url): h.http_error_302(req, MockFile(), 302, "Blah", MockHeaders({"location": url})) @@ -892,6 +894,7 @@ class HandlerTests(unittest.TestCase): # detect infinite loop redirect of a URL to itself req = Request(from_url, origin_req_host="example.com") count = 0 + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT try: while 1: redirect(h, req, "http://example.com/") @@ -903,6 +906,7 @@ class HandlerTests(unittest.TestCase): # detect endless non-repeating chain of redirects req = Request(from_url, origin_req_host="example.com") count = 0 + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT try: while 1: redirect(h, req, "http://example.com/%d" % count) diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index bb67267..b133fe4 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -552,7 +552,7 @@ class HTTPRedirectHandler(BaseHandler): fp.read() fp.close() - return self.parent.open(new) + return self.parent.open(new, timeout=req.timeout) http_error_301 = http_error_303 = http_error_307 = http_error_302 @@ -669,7 +669,7 @@ class ProxyHandler(BaseHandler): # {'http': 'ftp://proxy.example.com'}, we may end up turning # a request for http://acme.example.com/a into one for # ftp://proxy.example.com/a - return self.parent.open(req) + return self.parent.open(req, timeout=req.timeout) class HTTPPasswordMgr: @@ -785,7 +785,7 @@ class AbstractBasicAuthHandler: if req.headers.get(self.auth_header, None) == auth: return None req.add_header(self.auth_header, auth) - return self.parent.open(req) + return self.parent.open(req, timeout=req.timeout) else: return None @@ -866,7 +866,7 @@ class AbstractDigestAuthHandler: if req.headers.get(self.auth_header, None) == auth_val: return None req.add_unredirected_header(self.auth_header, auth_val) - resp = self.parent.open(req) + resp = self.parent.open(req, timeout=req.timeout) return resp def get_cnonce(self, nonce): -- cgit v0.12 -- cgit v0.12 From 10e35b30fb6e5858b73039e96d6ac3450107dad3 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Mon, 20 Jul 2009 00:19:49 +0000 Subject: Backport of r74103. --- Lib/importlib/test/source/test_abc_loader.py | 16 ++++++++-------- Misc/NEWS | 6 ++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Lib/importlib/test/source/test_abc_loader.py b/Lib/importlib/test/source/test_abc_loader.py index b95db04..9acc4ad 100644 --- a/Lib/importlib/test/source/test_abc_loader.py +++ b/Lib/importlib/test/source/test_abc_loader.py @@ -346,20 +346,20 @@ class BadBytecodeFailureTests(unittest.TestCase): # A bad magic number should lead to an ImportError. name = 'mod' bad_magic = b'\x00\x00\x00\x00' - mock = PyPycLoaderMock({}, {name: {'path': os.path.join('path', 'to', - 'mod'), - 'magic': bad_magic}}) + mock = PyPycLoaderMock({name: None}, + {name: {'path': os.path.join('path', 'to', 'mod'), + 'magic': bad_magic}}) with util.uncache(name): self.assertRaises(ImportError, mock.load_module, name) def test_bad_bytecode(self): - # Bad code object bytecode should elad to an ImportError. + # Bad code object bytecode should lead to an ImportError. name = 'mod' - mock = PyPycLoaderMock({}, {name: {'path': os.path.join('path', 'to', - 'mod'), - 'bc': b''}}) + mock = PyPycLoaderMock({name: None}, + {name: {'path': os.path.join('path', 'to', 'mod'), + 'bc': b''}}) with util.uncache(name): - self.assertRaises(ImportError, mock.load_module, name) + self.assertRaises(EOFError, mock.load_module, name) def raise_ImportError(*args, **kwargs): diff --git a/Misc/NEWS b/Misc/NEWS index 286c924..6aed959 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -62,6 +62,12 @@ Build - Issue 5390: Add uninstall icon independent of whether file extensions are installed. +Test +---- + +- Fix a test in importlib.test.source.test_abc_loader that was incorrectly + testing when a .pyc file lacked an code object bytecode. + What's New in Python 3.1? ========================= -- cgit v0.12 From 2e3155e2fe387cba93a6bd6a5e4a6d06a49c6a98 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Mon, 20 Jul 2009 03:22:43 +0000 Subject: Merged revisions 74107 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r74107 | brett.cannon | 2009-07-19 20:19:18 -0700 (Sun, 19 Jul 2009) | 8 lines Importlib's documentation said that importlib.abc.PyLoader inherited from importlib.abc.ResourceLoader, when in fact it did not. Fixed the ABC to inherit as documented. This does in introduce an backwards-incompatiblity as the code in PyLoader already required the single method ResourceLoader defined as an abstract method. ........ --- Lib/importlib/abc.py | 2 +- Lib/importlib/test/test_abc.py | 75 ++++++++++++++++++++++++++++++++++-------- Misc/NEWS | 4 +++ 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py index b2bdb02..7b89d0b 100644 --- a/Lib/importlib/abc.py +++ b/Lib/importlib/abc.py @@ -76,7 +76,7 @@ InspectLoader.register(machinery.BuiltinImporter) InspectLoader.register(machinery.FrozenImporter) -class PyLoader(_bootstrap.PyLoader, InspectLoader): +class PyLoader(_bootstrap.PyLoader, ResourceLoader, InspectLoader): """Abstract base class to assist in loading source code by requiring only back-end storage methods to be implemented. diff --git a/Lib/importlib/test/test_abc.py b/Lib/importlib/test/test_abc.py index a54adb9..6e09534 100644 --- a/Lib/importlib/test/test_abc.py +++ b/Lib/importlib/test/test_abc.py @@ -1,30 +1,77 @@ from importlib import abc from importlib import machinery +import inspect import unittest -class SubclassTests(unittest.TestCase): +class InheritanceTests: - """Test that the various classes in importlib are subclasses of the - expected ABCS.""" + """Test that the specified class is a subclass/superclass of the expected + classes.""" - def verify(self, ABC, *classes): - """Verify the classes are subclasses of the ABC.""" - for cls in classes: - self.assert_(issubclass(cls, ABC)) + subclasses = [] + superclasses = [] - def test_Finder(self): - self.verify(abc.Finder, machinery.BuiltinImporter, - machinery.FrozenImporter, machinery.PathFinder) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + assert self.subclasses or self.superclasses, self.__class__ + self.__test = getattr(abc, self.__class__.__name__) - def test_Loader(self): - self.verify(abc.Loader, machinery.BuiltinImporter, - machinery.FrozenImporter) + def test_subclasses(self): + # Test that the expected subclasses inherit. + for subclass in self.subclasses: + self.assertTrue(issubclass(subclass, self.__test), + "{0} is not a subclass of {1}".format(subclass, self.__test)) + + def test_superclasses(self): + # Test that the class inherits from the expected superclasses. + for superclass in self.superclasses: + self.assertTrue(issubclass(self.__test, superclass), + "{0} is not a superclass of {1}".format(superclass, self.__test)) + + +class Finder(InheritanceTests, unittest.TestCase): + + subclasses = [machinery.BuiltinImporter, machinery.FrozenImporter, + machinery.PathFinder] + + +class Loader(InheritanceTests, unittest.TestCase): + + subclasses = [abc.PyLoader] + + +class ResourceLoader(InheritanceTests, unittest.TestCase): + + superclasses = [abc.Loader] + + +class InspectLoader(InheritanceTests, unittest.TestCase): + + superclasses = [abc.Loader] + subclasses = [abc.PyLoader, machinery.BuiltinImporter, + machinery.FrozenImporter] + + +class PyLoader(InheritanceTests, unittest.TestCase): + + superclasses = [abc.Loader, abc.ResourceLoader, abc.InspectLoader] + + +class PyPycLoader(InheritanceTests, unittest.TestCase): + + superclasses = [abc.PyLoader] def test_main(): from test.support import run_unittest - run_unittest(SubclassTests) + classes = [] + for class_ in globals().values(): + if (inspect.isclass(class_) and + issubclass(class_, unittest.TestCase) and + issubclass(class_, InheritanceTests)): + classes.append(class_) + run_unittest(*classes) if __name__ == '__main__': diff --git a/Misc/NEWS b/Misc/NEWS index 6aed959..76ead6f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -37,6 +37,10 @@ C-API Library ------- +- importlib.abc.PyLoader did not inherit from importlib.abc.ResourceLoader like + the documentation said it did even though the code in PyLoader relied on the + abstract method required by ResourceLoader. + - Issue #6431: Make Fraction type return NotImplemented when it doesn't know how to handle a comparison without loss of precision. Also add correct handling of infinities and nans for comparisons with float. -- cgit v0.12 From afcd5f36f00d3a368004c574642175f623ce8ad4 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Mon, 20 Jul 2009 04:22:03 +0000 Subject: Fix some minor typos in the importlib docs. --- Doc/library/importlib.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index 7ae696d..02eddca 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -238,7 +238,7 @@ are also provided to help in implementing the core ABCs. A concrete implementation of :meth:`importlib.abc.InspectLoader.get_source`. Uses - :meth:`importlib.abc.InspectLoader.get_data` and :meth:`source_path` to + :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path` to get the source code. It tries to guess the source encoding using :func:`tokenize.detect_encoding`. @@ -253,7 +253,7 @@ are also provided to help in implementing the core ABCs. An abstract method which returns the modification time for the source code of the specified module. The modification time should be an - integer. If there is no source code, return :keyword:`None. If the + integer. If there is no source code, return :keyword:`None`. If the module cannot be found then :exc:`ImportError` is raised. .. method:: bytecode_path(fullname) -- cgit v0.12 From dd6a4edc4554cdb808f08a9ade7e40ed5addc94d Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 21 Jul 2009 12:55:57 +0000 Subject: merge 2to3 improvments --- Lib/lib2to3/fixer_base.py | 2 + Lib/lib2to3/fixes/fix_import.py | 4 +- Lib/lib2to3/fixes/fix_imports.py | 2 - Lib/lib2to3/fixes/fix_long.py | 11 +-- Lib/lib2to3/fixes/fix_ne.py | 4 +- Lib/lib2to3/fixes/fix_numliterals.py | 5 +- Lib/lib2to3/fixes/fix_operator.py | 40 ++++++++ Lib/lib2to3/fixes/fix_print.py | 7 +- Lib/lib2to3/fixes/fix_urllib.py | 10 +- Lib/lib2to3/main.py | 43 +++++++-- Lib/lib2to3/patcomp.py | 13 ++- Lib/lib2to3/pgen2/grammar.py | 13 +++ Lib/lib2to3/pygram.py | 4 + Lib/lib2to3/refactor.py | 137 +++++++++++++++++++-------- Lib/lib2to3/tests/data/different_encoding.py | 7 +- Lib/lib2to3/tests/test_fixers.py | 89 +++++++++-------- Lib/lib2to3/tests/test_refactor.py | 117 ++++++++++++++++++----- Lib/lib2to3/tests/test_util.py | 37 ++++++-- 18 files changed, 405 insertions(+), 140 deletions(-) create mode 100644 Lib/lib2to3/fixes/fix_operator.py diff --git a/Lib/lib2to3/fixer_base.py b/Lib/lib2to3/fixer_base.py index c361e61..ae99566 100644 --- a/Lib/lib2to3/fixer_base.py +++ b/Lib/lib2to3/fixer_base.py @@ -33,6 +33,8 @@ class BaseFix(object): explicit = False # Is this ignored by refactor.py -f all? run_order = 5 # Fixers will be sorted by run order before execution # Lower numbers will be run first. + _accept_type = None # [Advanced and not public] This tells RefactoringTool + # which node type to accept when there's not a pattern. # Shortcut for access to Python grammar symbols syms = pygram.python_symbols diff --git a/Lib/lib2to3/fixes/fix_import.py b/Lib/lib2to3/fixes/fix_import.py index 103c3ef..998fe61 100644 --- a/Lib/lib2to3/fixes/fix_import.py +++ b/Lib/lib2to3/fixes/fix_import.py @@ -12,7 +12,7 @@ Becomes: # Local imports from .. import fixer_base -from os.path import dirname, join, exists, pathsep +from os.path import dirname, join, exists, sep from ..fixer_util import FromImport, syms, token @@ -84,7 +84,7 @@ class FixImport(fixer_base.BaseFix): # so can't be a relative import. if not exists(join(dirname(base_path), '__init__.py')): return False - for ext in ['.py', pathsep, '.pyc', '.so', '.sl', '.pyd']: + for ext in ['.py', sep, '.pyc', '.so', '.sl', '.pyd']: if exists(base_path + ext): return True return False diff --git a/Lib/lib2to3/fixes/fix_imports.py b/Lib/lib2to3/fixes/fix_imports.py index 9aeca38..6c41c71 100644 --- a/Lib/lib2to3/fixes/fix_imports.py +++ b/Lib/lib2to3/fixes/fix_imports.py @@ -84,8 +84,6 @@ def build_pattern(mapping=MAPPING): class FixImports(fixer_base.BaseFix): - order = "pre" # Pre-order tree traversal - # This is overridden in fix_imports2. mapping = MAPPING diff --git a/Lib/lib2to3/fixes/fix_long.py b/Lib/lib2to3/fixes/fix_long.py index b5e0bdb..9d25b74 100644 --- a/Lib/lib2to3/fixes/fix_long.py +++ b/Lib/lib2to3/fixes/fix_long.py @@ -5,18 +5,15 @@ """ # Local imports -from .. import fixer_base -from ..fixer_util import Name, Number, is_probably_builtin +from lib2to3 import fixer_base +from lib2to3.fixer_util import is_probably_builtin class FixLong(fixer_base.BaseFix): PATTERN = "'long'" - static_int = Name("int") - def transform(self, node, results): if is_probably_builtin(node): - new = self.static_int.clone() - new.prefix = node.prefix - return new + node.value = "int" + node.changed() diff --git a/Lib/lib2to3/fixes/fix_ne.py b/Lib/lib2to3/fixes/fix_ne.py index 1472036..e3ee10f 100644 --- a/Lib/lib2to3/fixes/fix_ne.py +++ b/Lib/lib2to3/fixes/fix_ne.py @@ -12,9 +12,11 @@ from .. import fixer_base class FixNe(fixer_base.BaseFix): # This is so simple that we don't need the pattern compiler. + _accept_type = token.NOTEQUAL + def match(self, node): # Override - return node.type == token.NOTEQUAL and node.value == "<>" + return node.value == "<>" def transform(self, node, results): new = pytree.Leaf(token.NOTEQUAL, "!=", prefix=node.prefix) diff --git a/Lib/lib2to3/fixes/fix_numliterals.py b/Lib/lib2to3/fixes/fix_numliterals.py index 6552740..79207d4 100644 --- a/Lib/lib2to3/fixes/fix_numliterals.py +++ b/Lib/lib2to3/fixes/fix_numliterals.py @@ -12,10 +12,11 @@ from ..fixer_util import Number class FixNumliterals(fixer_base.BaseFix): # This is so simple that we don't need the pattern compiler. + _accept_type = token.NUMBER + def match(self, node): # Override - return (node.type == token.NUMBER and - (node.value.startswith("0") or node.value[-1] in "Ll")) + return (node.value.startswith("0") or node.value[-1] in "Ll") def transform(self, node, results): val = node.value diff --git a/Lib/lib2to3/fixes/fix_operator.py b/Lib/lib2to3/fixes/fix_operator.py new file mode 100644 index 0000000..9b1089c --- /dev/null +++ b/Lib/lib2to3/fixes/fix_operator.py @@ -0,0 +1,40 @@ +"""Fixer for operator.{isCallable,sequenceIncludes} + +operator.isCallable(obj) -> hasattr(obj, '__call__') +operator.sequenceIncludes(obj) -> operator.contains(obj) +""" + +# Local imports +from .. import fixer_base +from ..fixer_util import Call, Name, String + +class FixOperator(fixer_base.BaseFix): + + methods = "method=('isCallable'|'sequenceIncludes')" + func = "'(' func=any ')'" + PATTERN = """ + power< module='operator' + trailer< '.' {methods} > trailer< {func} > > + | + power< {methods} trailer< {func} > > + """.format(methods=methods, func=func) + + def transform(self, node, results): + method = results["method"][0] + + if method.value == "sequenceIncludes": + if "module" not in results: + # operator may not be in scope, so we can't make a change. + self.warning(node, "You should use operator.contains here.") + else: + method.value = "contains" + method.changed() + elif method.value == "isCallable": + if "module" not in results: + self.warning(node, + "You should use hasattr(%s, '__call__') here." % + results["func"].value) + else: + func = results["func"] + args = [func.clone(), String(", "), String("'__call__'")] + return Call(Name("hasattr"), args, prefix=node.prefix) diff --git a/Lib/lib2to3/fixes/fix_print.py b/Lib/lib2to3/fixes/fix_print.py index abce251..cc7934a 100644 --- a/Lib/lib2to3/fixes/fix_print.py +++ b/Lib/lib2to3/fixes/fix_print.py @@ -26,20 +26,15 @@ parend_expr = patcomp.compile_pattern( ) -class FixPrint(fixer_base.ConditionalFix): +class FixPrint(fixer_base.BaseFix): PATTERN = """ simple_stmt< any* bare='print' any* > | print_stmt """ - skip_on = '__future__.print_function' - def transform(self, node, results): assert results - if self.should_skip(node): - return - bare_print = results.get("bare") if bare_print: diff --git a/Lib/lib2to3/fixes/fix_urllib.py b/Lib/lib2to3/fixes/fix_urllib.py index a89266e..d11220c 100644 --- a/Lib/lib2to3/fixes/fix_urllib.py +++ b/Lib/lib2to3/fixes/fix_urllib.py @@ -12,13 +12,13 @@ from ..fixer_util import Name, Comma, FromImport, Newline, attr_chain MAPPING = {'urllib': [ ('urllib.request', ['URLOpener', 'FancyURLOpener', 'urlretrieve', - '_urlopener', 'urlopen', 'urlcleanup']), + '_urlopener', 'urlopen', 'urlcleanup', + 'pathname2url', 'url2pathname']), ('urllib.parse', ['quote', 'quote_plus', 'unquote', 'unquote_plus', - 'urlencode', 'pathname2url', 'url2pathname', 'splitattr', - 'splithost', 'splitnport', 'splitpasswd', 'splitport', - 'splitquery', 'splittag', 'splittype', 'splituser', - 'splitvalue', ]), + 'urlencode', 'splitattr', 'splithost', 'splitnport', + 'splitpasswd', 'splitport', 'splitquery', 'splittag', + 'splittype', 'splituser', 'splitvalue', ]), ('urllib.error', ['ContentTooShortError'])], 'urllib2' : [ diff --git a/Lib/lib2to3/main.py b/Lib/lib2to3/main.py index e1adc88..828b02f 100644 --- a/Lib/lib2to3/main.py +++ b/Lib/lib2to3/main.py @@ -4,19 +4,31 @@ Main program for 2to3. import sys import os +import difflib import logging import shutil import optparse from . import refactor + +def diff_texts(a, b, filename): + """Return a unified diff of two strings.""" + a = a.splitlines() + b = b.splitlines() + return difflib.unified_diff(a, b, filename, filename, + "(original)", "(refactored)", + lineterm="") + + class StdoutRefactoringTool(refactor.MultiprocessRefactoringTool): """ Prints output to stdout. """ - def __init__(self, fixers, options, explicit, nobackups): + def __init__(self, fixers, options, explicit, nobackups, show_diffs): self.nobackups = nobackups + self.show_diffs = show_diffs super(StdoutRefactoringTool, self).__init__(fixers, options, explicit) def log_error(self, msg, *args, **kwargs): @@ -42,9 +54,17 @@ class StdoutRefactoringTool(refactor.MultiprocessRefactoringTool): if not self.nobackups: shutil.copymode(backup, filename) - def print_output(self, lines): - for line in lines: - print(line) + def print_output(self, old, new, filename, equal): + if equal: + self.log_message("No changes to %s", filename) + else: + self.log_message("Refactored %s", filename) + if self.show_diffs: + for line in diff_texts(old, new, filename): + print(line) + +def warn(msg): + print >> sys.stderr, "WARNING: %s" % (msg,) def main(fixer_pkg, args=None): @@ -70,9 +90,12 @@ def main(fixer_pkg, args=None): parser.add_option("-l", "--list-fixes", action="store_true", help="List available transformations (fixes/fix_*.py)") parser.add_option("-p", "--print-function", action="store_true", - help="Modify the grammar so that print() is a function") + help="DEPRECATED Modify the grammar so that print() is " + "a function") parser.add_option("-v", "--verbose", action="store_true", help="More verbose logging") + parser.add_option("--no-diffs", action="store_true", + help="Don't show diffs of the refactoring") parser.add_option("-w", "--write", action="store_true", help="Write back modified files") parser.add_option("-n", "--nobackups", action="store_true", default=False, @@ -81,6 +104,11 @@ def main(fixer_pkg, args=None): # Parse command line arguments refactor_stdin = False options, args = parser.parse_args(args) + if not options.write and options.no_diffs: + warn("not writing files and not printing diffs; that's not very useful") + if options.print_function: + warn("-p is deprecated; " + "detection of from __future__ import print_function is automatic") if not options.write and options.nobackups: parser.error("Can't use -n without -w") if options.list_fixes: @@ -104,7 +132,6 @@ def main(fixer_pkg, args=None): logging.basicConfig(format='%(name)s: %(message)s', level=level) # Initialize the refactoring tool - rt_opts = {"print_function" : options.print_function} avail_fixes = set(refactor.get_fixers_from_package(fixer_pkg)) unwanted_fixes = set(fixer_pkg + ".fix_" + fix for fix in options.nofix) explicit = set() @@ -119,8 +146,8 @@ def main(fixer_pkg, args=None): else: requested = avail_fixes.union(explicit) fixer_names = requested.difference(unwanted_fixes) - rt = StdoutRefactoringTool(sorted(fixer_names), rt_opts, sorted(explicit), - options.nobackups) + rt = StdoutRefactoringTool(sorted(fixer_names), None, sorted(explicit), + options.nobackups, not options.no_diffs) # Refactor all files and directories passed as arguments if not rt.errors: diff --git a/Lib/lib2to3/patcomp.py b/Lib/lib2to3/patcomp.py index 24251cb..3831622 100644 --- a/Lib/lib2to3/patcomp.py +++ b/Lib/lib2to3/patcomp.py @@ -14,7 +14,7 @@ __author__ = "Guido van Rossum " import os # Fairly local imports -from .pgen2 import driver, literals, token, tokenize, parse +from .pgen2 import driver, literals, token, tokenize, parse, grammar # Really local imports from . import pytree @@ -138,7 +138,7 @@ class PatternCompiler(object): node = nodes[0] if node.type == token.STRING: value = str(literals.evalString(node.value)) - return pytree.LeafPattern(content=value) + return pytree.LeafPattern(_type_of_literal(value), value) elif node.type == token.NAME: value = node.value if value.isupper(): @@ -179,6 +179,15 @@ TOKEN_MAP = {"NAME": token.NAME, "TOKEN": None} +def _type_of_literal(value): + if value[0].isalpha(): + return token.NAME + elif value in grammar.opmap: + return grammar.opmap[value] + else: + return None + + def pattern_convert(grammar, raw_node_info): """Converts raw node information to a Node or Leaf instance.""" type, value, context, children = raw_node_info diff --git a/Lib/lib2to3/pgen2/grammar.py b/Lib/lib2to3/pgen2/grammar.py index b7f867f..26caeb4 100644 --- a/Lib/lib2to3/pgen2/grammar.py +++ b/Lib/lib2to3/pgen2/grammar.py @@ -97,6 +97,19 @@ class Grammar(object): f.close() self.__dict__.update(d) + def copy(self): + """ + Copy the grammar. + """ + new = self.__class__() + for dict_attr in ("symbol2number", "number2symbol", "dfas", "keywords", + "tokens", "symbol2label"): + setattr(new, dict_attr, getattr(self, dict_attr).copy()) + new.labels = self.labels[:] + new.states = self.states[:] + new.start = self.start + return new + def report(self): """Dump the grammar tables to standard output, for debugging.""" from pprint import pprint diff --git a/Lib/lib2to3/pygram.py b/Lib/lib2to3/pygram.py index 49d5cef..d598317 100644 --- a/Lib/lib2to3/pygram.py +++ b/Lib/lib2to3/pygram.py @@ -28,4 +28,8 @@ class Symbols(object): python_grammar = driver.load_grammar(_GRAMMAR_FILE) + python_symbols = Symbols(python_grammar) + +python_grammar_no_print_statement = python_grammar.copy() +del python_grammar_no_print_statement.keywords["print"] diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py index 339b94f..5edf584 100644 --- a/Lib/lib2to3/refactor.py +++ b/Lib/lib2to3/refactor.py @@ -14,14 +14,15 @@ __author__ = "Guido van Rossum " # Python imports import os import sys -import difflib import logging import operator -from collections import defaultdict +import collections +import io +import warnings from itertools import chain # Local imports -from .pgen2 import driver, tokenize +from .pgen2 import driver, tokenize, token from . import pytree, pygram @@ -37,7 +38,12 @@ def get_all_fix_names(fixer_pkg, remove_prefix=True): fix_names.append(name[:-3]) return fix_names -def get_head_types(pat): + +class _EveryNode(Exception): + pass + + +def _get_head_types(pat): """ Accepts a pytree Pattern Node and returns a set of the pattern types which will match first. """ @@ -45,34 +51,50 @@ def get_head_types(pat): # NodePatters must either have no type and no content # or a type and content -- so they don't get any farther # Always return leafs + if pat.type is None: + raise _EveryNode return set([pat.type]) if isinstance(pat, pytree.NegatedPattern): if pat.content: - return get_head_types(pat.content) - return set([None]) # Negated Patterns don't have a type + return _get_head_types(pat.content) + raise _EveryNode # Negated Patterns don't have a type if isinstance(pat, pytree.WildcardPattern): # Recurse on each node in content r = set() for p in pat.content: for x in p: - r.update(get_head_types(x)) + r.update(_get_head_types(x)) return r raise Exception("Oh no! I don't understand pattern %s" %(pat)) -def get_headnode_dict(fixer_list): + +def _get_headnode_dict(fixer_list): """ Accepts a list of fixers and returns a dictionary of head node type --> fixer list. """ - head_nodes = defaultdict(list) + head_nodes = collections.defaultdict(list) + every = [] for fixer in fixer_list: - if not fixer.pattern: - head_nodes[None].append(fixer) - continue - for t in get_head_types(fixer.pattern): - head_nodes[t].append(fixer) - return head_nodes + if fixer.pattern: + try: + heads = _get_head_types(fixer.pattern) + except _EveryNode: + every.append(fixer) + else: + for node_type in heads: + head_nodes[node_type].append(fixer) + else: + if fixer._accept_type is not None: + head_nodes[fixer._accept_type].append(fixer) + else: + every.append(fixer) + for node_type in chain(pygram.python_grammar.symbol2number.values(), + pygram.python_grammar.tokens): + head_nodes[node_type].extend(every) + return dict(head_nodes) + def get_fixers_from_package(pkg_name): """ @@ -101,13 +123,56 @@ else: _to_system_newlines = _identity +def _detect_future_print(source): + have_docstring = False + gen = tokenize.generate_tokens(io.StringIO(source).readline) + def advance(): + tok = next(gen) + return tok[0], tok[1] + ignore = frozenset((token.NEWLINE, tokenize.NL, token.COMMENT)) + try: + while True: + tp, value = advance() + if tp in ignore: + continue + elif tp == token.STRING: + if have_docstring: + break + have_docstring = True + elif tp == token.NAME: + if value == "from": + tp, value = advance() + if tp != token.NAME and value != "__future__": + break + tp, value = advance() + if tp != token.NAME and value != "import": + break + tp, value = advance() + if tp == token.OP and value == "(": + tp, value = advance() + while tp == token.NAME: + if value == "print_function": + return True + tp, value = advance() + if tp != token.OP and value != ",": + break + tp, value = advance() + else: + break + else: + break + except StopIteration: + pass + return False + + class FixerError(Exception): """A fixer could not be loaded.""" class RefactoringTool(object): - _default_options = {"print_function": False} + _default_options = {} CLASS_PREFIX = "Fix" # The prefix for fixer classes FILE_PREFIX = "fix_" # The prefix for modules with a fixer within @@ -124,20 +189,21 @@ class RefactoringTool(object): self.explicit = explicit or [] self.options = self._default_options.copy() if options is not None: + if "print_function" in options: + warnings.warn("the 'print_function' option is deprecated", + DeprecationWarning) self.options.update(options) self.errors = [] self.logger = logging.getLogger("RefactoringTool") self.fixer_log = [] self.wrote = False - if self.options["print_function"]: - del pygram.python_grammar.keywords["print"] self.driver = driver.Driver(pygram.python_grammar, convert=pytree.convert, logger=self.logger) self.pre_order, self.post_order = self.get_fixers() - self.pre_order_heads = get_headnode_dict(self.pre_order) - self.post_order_heads = get_headnode_dict(self.post_order) + self.pre_order_heads = _get_headnode_dict(self.pre_order) + self.post_order_heads = _get_headnode_dict(self.post_order) self.files = [] # List of files that were or should be modified @@ -196,8 +262,9 @@ class RefactoringTool(object): msg = msg % args self.logger.debug(msg) - def print_output(self, lines): - """Called with lines of output to give to the user.""" + def print_output(self, old_text, new_text, filename, equal): + """Called with the old version, new version, and filename of a + refactored file.""" pass def refactor(self, items, write=False, doctests_only=False): @@ -220,7 +287,8 @@ class RefactoringTool(object): dirnames.sort() filenames.sort() for name in filenames: - if not name.startswith(".") and name.endswith("py"): + if not name.startswith(".") and \ + os.path.splitext(name)[1].endswith("py"): fullname = os.path.join(dirpath, name) self.refactor_file(fullname, write, doctests_only) # Modify dirnames in-place to remove subdirs with leading dots @@ -276,12 +344,16 @@ class RefactoringTool(object): An AST corresponding to the refactored input stream; None if there were errors during the parse. """ + if _detect_future_print(data): + self.driver.grammar = pygram.python_grammar_no_print_statement try: tree = self.driver.parse_string(data) except Exception as err: self.log_error("Can't parse %s: %s: %s", name, err.__class__.__name__, err) return + finally: + self.driver.grammar = pygram.python_grammar self.log_debug("Refactoring %s", name) self.refactor_tree(tree, name) return tree @@ -338,12 +410,11 @@ class RefactoringTool(object): if not fixers: return for node in traversal: - for fixer in fixers[node.type] + fixers[None]: + for fixer in fixers[node.type]: results = fixer.match(node) if results: new = fixer.transform(node, results) - if new is not None and (new != node or - str(new) != str(node)): + if new is not None: node.replace(new) node = new @@ -357,10 +428,11 @@ class RefactoringTool(object): old_text = self._read_python_source(filename)[0] if old_text is None: return - if old_text == new_text: + equal = old_text == new_text + self.print_output(old_text, new_text, filename, equal) + if equal: self.log_debug("No changes to %s", filename) return - self.print_output(diff_texts(old_text, new_text, filename)) if write: self.write_file(new_text, filename, old_text, encoding) else: @@ -582,12 +654,3 @@ class MultiprocessRefactoringTool(RefactoringTool): else: return super(MultiprocessRefactoringTool, self).refactor_file( *args, **kwargs) - - -def diff_texts(a, b, filename): - """Return a unified diff of two strings.""" - a = a.splitlines() - b = b.splitlines() - return difflib.unified_diff(a, b, filename, filename, - "(original)", "(refactored)", - lineterm="") diff --git a/Lib/lib2to3/tests/data/different_encoding.py b/Lib/lib2to3/tests/data/different_encoding.py index 888f51f..9f32bd0 100644 --- a/Lib/lib2to3/tests/data/different_encoding.py +++ b/Lib/lib2to3/tests/data/different_encoding.py @@ -1,3 +1,6 @@ #!/usr/bin/env python -# -*- coding: iso-8859-1 -*- -print u'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ' +# -*- coding: utf-8 -*- +print u'ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖØÙÚÛÜÃÞ' + +def f(x): + print '%s\t-> α(%2i):%s β(%s)' diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index c0f1e37..a25f5a8 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -18,8 +18,6 @@ class FixerTestCase(support.TestCase): def setUp(self, fix_list=None, fixer_pkg="lib2to3", options=None): if fix_list is None: fix_list = [self.fixer] - if options is None: - options = {"print_function" : False} self.refactor = support.get_refactorer(fixer_pkg, fix_list, options) self.fixer_log = [] self.filename = "" @@ -58,8 +56,7 @@ class FixerTestCase(support.TestCase): def assert_runs_after(self, *names): fixes = [self.fixer] fixes.extend(names) - options = {"print_function" : False} - r = support.get_refactorer("lib2to3", fixes, options) + r = support.get_refactorer("lib2to3", fixes) (pre, post) = r.get_fixers() n = "fix_" + self.fixer if post and post[-1].__class__.__module__.endswith(n): @@ -379,18 +376,15 @@ class Test_print(FixerTestCase): self.unchanged(s) def test_idempotency_print_as_function(self): - print_stmt = pygram.python_grammar.keywords.pop("print") - try: - s = """print(1, 1+1, 1+1+1)""" - self.unchanged(s) + self.refactor.driver.grammar = pygram.python_grammar_no_print_statement + s = """print(1, 1+1, 1+1+1)""" + self.unchanged(s) - s = """print()""" - self.unchanged(s) + s = """print()""" + self.unchanged(s) - s = """print('')""" - self.unchanged(s) - finally: - pygram.python_grammar.keywords["print"] = print_stmt + s = """print('')""" + self.unchanged(s) def test_1(self): b = """print 1, 1+1, 1+1+1""" @@ -462,31 +456,15 @@ class Test_print(FixerTestCase): a = """print(file=sys.stderr)""" self.check(b, a) - # With from __future__ import print_function def test_with_future_print_function(self): - # XXX: These tests won't actually do anything until the parser - # is fixed so it won't crash when it sees print(x=y). - # When #2412 is fixed, the try/except block can be taken - # out and the tests can be run like normal. - # MvL: disable entirely for now, so that it doesn't print to stdout - return - try: - s = "from __future__ import print_function\n"\ - "print('Hai!', end=' ')" - self.unchanged(s) + s = "from __future__ import print_function\n" \ + "print('Hai!', end=' ')" + self.unchanged(s) - b = "print 'Hello, world!'" - a = "print('Hello, world!')" - self.check(b, a) + b = "print 'Hello, world!'" + a = "print('Hello, world!')" + self.check(b, a) - s = "from __future__ import *\n"\ - "print('Hai!', end=' ')" - self.unchanged(s) - except: - return - else: - self.assertFalse(True, "#2421 has been fixed -- printing tests "\ - "need to be updated!") class Test_exec(FixerTestCase): fixer = "exec" @@ -1705,6 +1683,11 @@ class Test_imports_fixer_order(FixerTestCase, ImportsFixerTests): for key in ('dbhash', 'dumbdbm', 'dbm', 'gdbm'): self.modules[key] = mapping1[key] + def test_after_local_imports_refactoring(self): + for fix in ("imports", "imports2"): + self.fixer = fix + self.assert_runs_after("import") + class Test_urllib(FixerTestCase): fixer = "urllib" @@ -3504,6 +3487,7 @@ class Test_itertools_imports(FixerTestCase): s = "from itertools import foo" self.unchanged(s) + class Test_import(FixerTestCase): fixer = "import" @@ -3538,8 +3522,7 @@ class Test_import(FixerTestCase): self.always_exists = False self.present_files = set(['__init__.py']) - expected_extensions = ('.py', os.path.pathsep, '.pyc', '.so', - '.sl', '.pyd') + expected_extensions = ('.py', os.path.sep, '.pyc', '.so', '.sl', '.pyd') names_to_test = (p("/spam/eggs.py"), "ni.py", p("../../shrubbery.py")) for name in names_to_test: @@ -3569,6 +3552,13 @@ class Test_import(FixerTestCase): self.present_files = set(["__init__.py", "bar.py"]) self.check(b, a) + def test_import_from_package(self): + b = "import bar" + a = "from . import bar" + self.always_exists = False + self.present_files = set(["__init__.py", "bar/"]) + self.check(b, a) + def test_comments_and_indent(self): b = "import bar # Foo" a = "from . import bar # Foo" @@ -4095,3 +4085,26 @@ class Test_getcwdu(FixerTestCase): b = """os.getcwdu ( )""" a = """os.getcwd ( )""" self.check(b, a) + + +class Test_operator(FixerTestCase): + + fixer = "operator" + + def test_operator_isCallable(self): + b = "operator.isCallable(x)" + a = "hasattr(x, '__call__')" + self.check(b, a) + + def test_operator_sequenceIncludes(self): + b = "operator.sequenceIncludes(x, y)" + a = "operator.contains(x, y)" + self.check(b, a) + + def test_bare_isCallable(self): + s = "isCallable(x)" + self.warns_unchanged(s, "You should use hasattr(x, '__call__') here.") + + def test_bare_sequenceIncludes(self): + s = "sequenceIncludes(x, y)" + self.warns_unchanged(s, "You should use operator.contains here.") diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py index e55f555..b282cba 100644 --- a/Lib/lib2to3/tests/test_refactor.py +++ b/Lib/lib2to3/tests/test_refactor.py @@ -7,9 +7,12 @@ import os import operator import io import tempfile +import shutil import unittest +import warnings from lib2to3 import refactor, pygram, fixer_base +from lib2to3.pgen2 import token from . import support @@ -42,14 +45,11 @@ class TestRefactoringTool(unittest.TestCase): return refactor.RefactoringTool(fixers, options, explicit) def test_print_function_option(self): - gram = pygram.python_grammar - save = gram.keywords["print"] - try: - rt = self.rt({"print_function" : True}) - self.assertRaises(KeyError, operator.itemgetter("print"), - gram.keywords) - finally: - gram.keywords["print"] = save + with warnings.catch_warnings(record=True) as w: + refactor.RefactoringTool(_DEFAULT_FIXERS, {"print_function" : True}) + self.assertEqual(len(w), 1) + msg, = w + self.assertTrue(msg.category is DeprecationWarning) def test_fixer_loading_helpers(self): contents = ["explicit", "first", "last", "parrot", "preorder"] @@ -61,19 +61,63 @@ class TestRefactoringTool(unittest.TestCase): self.assertEqual(full_names, ["myfixes.fix_" + name for name in contents]) + def test_detect_future_print(self): + run = refactor._detect_future_print + self.assertFalse(run("")) + self.assertTrue(run("from __future__ import print_function")) + self.assertFalse(run("from __future__ import generators")) + self.assertFalse(run("from __future__ import generators, feature")) + input = "from __future__ import generators, print_function" + self.assertTrue(run(input)) + input ="from __future__ import print_function, generators" + self.assertTrue(run(input)) + input = "from __future__ import (print_function,)" + self.assertTrue(run(input)) + input = "from __future__ import (generators, print_function)" + self.assertTrue(run(input)) + input = "from __future__ import (generators, nested_scopes)" + self.assertFalse(run(input)) + input = """from __future__ import generators +from __future__ import print_function""" + self.assertTrue(run(input)) + self.assertFalse(run("from")) + self.assertFalse(run("from 4")) + self.assertFalse(run("from x")) + self.assertFalse(run("from x 5")) + self.assertFalse(run("from x im")) + self.assertFalse(run("from x import")) + self.assertFalse(run("from x import 4")) + input = "'docstring'\nfrom __future__ import print_function" + self.assertTrue(run(input)) + input = "'docstring'\n'somng'\nfrom __future__ import print_function" + self.assertFalse(run(input)) + input = "# comment\nfrom __future__ import print_function" + self.assertTrue(run(input)) + input = "# comment\n'doc'\nfrom __future__ import print_function" + self.assertTrue(run(input)) + input = "class x: pass\nfrom __future__ import print_function" + self.assertFalse(run(input)) + def test_get_headnode_dict(self): class NoneFix(fixer_base.BaseFix): - PATTERN = None + pass class FileInputFix(fixer_base.BaseFix): PATTERN = "file_input< any * >" + class SimpleFix(fixer_base.BaseFix): + PATTERN = "'name'" + no_head = NoneFix({}, []) with_head = FileInputFix({}, []) - d = refactor.get_headnode_dict([no_head, with_head]) - expected = {None: [no_head], - pygram.python_symbols.file_input : [with_head]} - self.assertEqual(d, expected) + simple = SimpleFix({}, []) + d = refactor._get_headnode_dict([no_head, with_head, simple]) + top_fixes = d.pop(pygram.python_symbols.file_input) + self.assertEqual(top_fixes, [with_head, no_head]) + name_fixes = d.pop(token.NAME) + self.assertEqual(name_fixes, [simple, no_head]) + for fixes in d.values(): + self.assertEqual(fixes, [no_head]) def test_fixer_loading(self): from myfixes.fix_first import FixFirst @@ -106,10 +150,10 @@ class TestRefactoringTool(unittest.TestCase): class MyRT(refactor.RefactoringTool): - def print_output(self, lines): - diff_lines.extend(lines) + def print_output(self, old_text, new_text, filename, equal): + results.extend([old_text, new_text, filename, equal]) - diff_lines = [] + results = [] rt = MyRT(_DEFAULT_FIXERS) save = sys.stdin sys.stdin = io.StringIO("def parrot(): pass\n\n") @@ -117,12 +161,10 @@ class TestRefactoringTool(unittest.TestCase): rt.refactor_stdin() finally: sys.stdin = save - expected = """--- (original) -+++ (refactored) -@@ -1,2 +1,2 @@ --def parrot(): pass -+def cheese(): pass""".splitlines() - self.assertEqual(diff_lines[:-1], expected) + expected = ["def parrot(): pass\n\n", + "def cheese(): pass\n\n", + "", False] + self.assertEqual(results, expected) def check_file_refactoring(self, test_file, fixers=_2TO3_FIXERS): def read_file(): @@ -145,6 +187,37 @@ class TestRefactoringTool(unittest.TestCase): test_file = os.path.join(FIXER_DIR, "parrot_example.py") self.check_file_refactoring(test_file, _DEFAULT_FIXERS) + def test_refactor_dir(self): + def check(structure, expected): + def mock_refactor_file(self, f, *args): + got.append(f) + save_func = refactor.RefactoringTool.refactor_file + refactor.RefactoringTool.refactor_file = mock_refactor_file + rt = self.rt() + got = [] + dir = tempfile.mkdtemp(prefix="2to3-test_refactor") + try: + os.mkdir(os.path.join(dir, "a_dir")) + for fn in structure: + open(os.path.join(dir, fn), "wb").close() + rt.refactor_dir(dir) + finally: + refactor.RefactoringTool.refactor_file = save_func + shutil.rmtree(dir) + self.assertEqual(got, + [os.path.join(dir, path) for path in expected]) + check([], []) + tree = ["nothing", + "hi.py", + ".dumb", + ".after.py", + "sappy"] + expected = ["hi.py"] + check(tree, expected) + tree = ["hi.py", + "a_dir/stuff.py"] + check(tree, tree) + def test_file_encoding(self): fn = os.path.join(TEST_DATA_DIR, "different_encoding.py") self.check_file_refactoring(fn) diff --git a/Lib/lib2to3/tests/test_util.py b/Lib/lib2to3/tests/test_util.py index ef3256d..6186b4f 100644 --- a/Lib/lib2to3/tests/test_util.py +++ b/Lib/lib2to3/tests/test_util.py @@ -1,4 +1,4 @@ -""" Test suite for the code in fixes.util """ +""" Test suite for the code in fixer_util """ # Testing imports from . import support @@ -7,10 +7,10 @@ from . import support import os.path # Local imports -from .. import pytree -from .. import fixer_util -from ..fixer_util import Attr, Name - +from lib2to3.pytree import Node, Leaf +from lib2to3 import fixer_util +from lib2to3.fixer_util import Attr, Name, Call, Comma +from lib2to3.pgen2 import token def parse(code, strip_levels=0): # The topmost node is file_input, which we don't care about. @@ -24,7 +24,7 @@ def parse(code, strip_levels=0): class MacroTestCase(support.TestCase): def assertStr(self, node, string): if isinstance(node, (tuple, list)): - node = pytree.Node(fixer_util.syms.simple_stmt, node) + node = Node(fixer_util.syms.simple_stmt, node) self.assertEqual(str(node), string) @@ -78,6 +78,31 @@ class Test_Name(MacroTestCase): self.assertStr(Name("a", prefix="b"), "ba") +class Test_Call(MacroTestCase): + def _Call(self, name, args=None, prefix=None): + """Help the next test""" + children = [] + if isinstance(args, list): + for arg in args: + children.append(arg) + children.append(Comma()) + children.pop() + return Call(Name(name), children, prefix) + + def test(self): + kids = [None, + [Leaf(token.NUMBER, 1), Leaf(token.NUMBER, 2), + Leaf(token.NUMBER, 3)], + [Leaf(token.NUMBER, 1), Leaf(token.NUMBER, 3), + Leaf(token.NUMBER, 2), Leaf(token.NUMBER, 4)], + [Leaf(token.STRING, "b"), Leaf(token.STRING, "j", prefix=" ")] + ] + self.assertStr(self._Call("A"), "A()") + self.assertStr(self._Call("b", kids[1]), "b(1,2,3)") + self.assertStr(self._Call("a.b().c", kids[2]), "a.b().c(1,3,2,4)") + self.assertStr(self._Call("d", kids[3], prefix=" "), " d(b, j)") + + class Test_does_tree_import(support.TestCase): def _find_bind_rec(self, name, node): # Search a tree for a binding -- used to find the starting -- cgit v0.12 From 784935ffc9cf097e698311c70bdff24250674df8 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 21 Jul 2009 13:13:16 +0000 Subject: Merged revisions 74135 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74135 | benjamin.peterson | 2009-07-21 07:51:07 -0500 (Tue, 21 Jul 2009) | 31 lines Merged revisions 74117,74123 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ................ r74117 | benjamin.peterson | 2009-07-20 12:24:30 -0500 (Mon, 20 Jul 2009) | 9 lines Merged revisions 74116 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r74116 | benjamin.peterson | 2009-07-20 12:22:35 -0500 (Mon, 20 Jul 2009) | 1 line placate windows ........ ................ r74123 | benjamin.peterson | 2009-07-20 16:09:45 -0500 (Mon, 20 Jul 2009) | 13 lines Merged revisions 74121-74122 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r74121 | benjamin.peterson | 2009-07-20 15:40:59 -0500 (Mon, 20 Jul 2009) | 1 line try to make warning tests more robust ........ r74122 | benjamin.peterson | 2009-07-20 15:44:14 -0500 (Mon, 20 Jul 2009) | 1 line platform compat ........ ................ ................ --- Lib/lib2to3/tests/test_fixers.py | 2 +- Lib/lib2to3/tests/test_pytree.py | 1 + Lib/lib2to3/tests/test_refactor.py | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index a25f5a8..d8218d3 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -3556,7 +3556,7 @@ class Test_import(FixerTestCase): b = "import bar" a = "from . import bar" self.always_exists = False - self.present_files = set(["__init__.py", "bar/"]) + self.present_files = set(["__init__.py", "bar" + os.path.sep]) self.check(b, a) def test_comments_and_indent(self): diff --git a/Lib/lib2to3/tests/test_pytree.py b/Lib/lib2to3/tests/test_pytree.py index a162aae..870970c 100755 --- a/Lib/lib2to3/tests/test_pytree.py +++ b/Lib/lib2to3/tests/test_pytree.py @@ -31,6 +31,7 @@ class TestNodes(support.TestCase): def test_deprecated_prefix_methods(self): l = pytree.Leaf(100, "foo") with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always", DeprecationWarning) self.assertEqual(l.get_prefix(), "") l.set_prefix("hi") self.assertEqual(l.prefix, "hi") diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py index b282cba..5ba23a5 100644 --- a/Lib/lib2to3/tests/test_refactor.py +++ b/Lib/lib2to3/tests/test_refactor.py @@ -46,6 +46,7 @@ class TestRefactoringTool(unittest.TestCase): def test_print_function_option(self): with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always", DeprecationWarning) refactor.RefactoringTool(_DEFAULT_FIXERS, {"print_function" : True}) self.assertEqual(len(w), 1) msg, = w @@ -215,7 +216,7 @@ from __future__ import print_function""" expected = ["hi.py"] check(tree, expected) tree = ["hi.py", - "a_dir/stuff.py"] + os.path.join("a_dir", "stuff.py")] check(tree, tree) def test_file_encoding(self): -- cgit v0.12 From d98ef1a1accc9ac7213407be62f761ba3f7e106a Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Tue, 21 Jul 2009 14:03:55 +0000 Subject: Merged revisions 74118 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r74118 | r.david.murray | 2009-07-20 13:34:54 -0400 (Mon, 20 Jul 2009) | 5 lines Remove apparently unneeded and un-cleaned-up munging of sys.path from test_re. Tests pass on my machine without it, and I can't see any obvious place in the tests that would need it. ........ --- Lib/test/test_re.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 11fff78..a857aab 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -1,6 +1,3 @@ -import sys -sys.path = ['.'] + sys.path - from test.support import verbose, run_unittest import re from re import Scanner -- cgit v0.12 From e5caf1034b9f67a6e6005de1a6dbd8a8ef2193fe Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 21 Jul 2009 14:16:13 +0000 Subject: Merged revisions 74140 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74140 | benjamin.peterson | 2009-07-21 09:11:27 -0500 (Tue, 21 Jul 2009) | 9 lines Merged revisions 74139 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74139 | benjamin.peterson | 2009-07-21 09:08:40 -0500 (Tue, 21 Jul 2009) | 1 line must use _PyThreadState_Current so it isn't checked for NULL #6530 ........ ................ --- Objects/dictobject.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index ce6760f..907ccf2 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -714,10 +714,12 @@ PyDict_GetItem(PyObject *op, PyObject *key) } } - /* We can arrive here with a NULL tstate during initialization: - try running "python -Wi" for an example related to string - interning. Let's just hope that no exception occurs then... */ - tstate = PyThreadState_GET(); + /* We can arrive here with a NULL tstate during initialization: try + running "python -Wi" for an example related to string interning. + Let's just hope that no exception occurs then... This must be + _PyThreadState_Current and not PyThreadState_GET() because in debug + mode, it complains if tstate is NULL. */ + tstate = _PyThreadState_Current; if (tstate != NULL && tstate->curexc_type != NULL) { /* preserve the existing exception */ PyObject *err_type, *err_value, *err_tb; -- cgit v0.12 From ba426148bf92b4fd949518800fb4b0e9c0ce2f94 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Tue, 21 Jul 2009 14:29:59 +0000 Subject: Merged revisions 74128 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74128 | alexandre.vassalotti | 2009-07-20 20:51:58 -0400 (Mon, 20 Jul 2009) | 14 lines Merged revisions 73706,73778 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73706 | georg.brandl | 2009-06-30 12:18:55 -0400 (Tue, 30 Jun 2009) | 1 line #6384: Add a heading for the exception hierarchy. ........ r73778 | r.david.murray | 2009-07-02 14:19:20 -0400 (Thu, 02 Jul 2009) | 3 lines Issue 6389: add documentation for the 'mode' flags defined in the stat module. ........ ................ --- Doc/library/exceptions.rst | 2 + Doc/library/os.rst | 38 +++++++------- Doc/library/stat.rst | 125 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 19 deletions(-) diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index 43fa9b0..feeeffd 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -422,6 +422,8 @@ module for more information. Base class for warnings related to :class:`bytes` and :class:`buffer`. +Exception hierarchy +------------------- The class hierarchy for built-in exceptions is: diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 90e59ef..218437e 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -755,25 +755,25 @@ Files and Directories following values (as defined in the :mod:`stat` module) or bitwise ORed combinations of them: - * ``stat.S_ISUID`` - * ``stat.S_ISGID`` - * ``stat.S_ENFMT`` - * ``stat.S_ISVTX`` - * ``stat.S_IREAD`` - * ``stat.S_IWRITE`` - * ``stat.S_IEXEC`` - * ``stat.S_IRWXU`` - * ``stat.S_IRUSR`` - * ``stat.S_IWUSR`` - * ``stat.S_IXUSR`` - * ``stat.S_IRWXG`` - * ``stat.S_IRGRP`` - * ``stat.S_IWGRP`` - * ``stat.S_IXGRP`` - * ``stat.S_IRWXO`` - * ``stat.S_IROTH`` - * ``stat.S_IWOTH`` - * ``stat.S_IXOTH`` + * :data:`stat.S_ISUID` + * :data:`stat.S_ISGID` + * :data:`stat.S_ENFMT` + * :data:`stat.S_ISVTX` + * :data:`stat.S_IREAD` + * :data:`stat.S_IWRITE` + * :data:`stat.S_IEXEC` + * :data:`stat.S_IRWXU` + * :data:`stat.S_IRUSR` + * :data:`stat.S_IWUSR` + * :data:`stat.S_IXUSR` + * :data:`stat.S_IRWXG` + * :data:`stat.S_IRGRP` + * :data:`stat.S_IWGRP` + * :data:`stat.S_IXGRP` + * :data:`stat.S_IRWXO` + * :data:`stat.S_IROTH` + * :data:`stat.S_IWOTH` + * :data:`stat.S_IXOTH` Availability: Unix, Windows. diff --git a/Doc/library/stat.rst b/Doc/library/stat.rst index d4eae5d..b318bb7 100644 --- a/Doc/library/stat.rst +++ b/Doc/library/stat.rst @@ -137,6 +137,131 @@ for polling one of these special files after a non-blocking open. The meaning of the size field for other character and block devices varies more, depending on the implementation of the underlying system call. +The variables below define the flags used in the :data:`ST_MODE` field. + +Use of the functions above is more portable than use of the first set of flags: + +.. data:: S_IFMT + + Bit mask for the file type bit fields. + +.. data:: S_IFSOCK + + Socket. + +.. data:: S_IFLNK + + Symbolic link. + +.. data:: S_IFREG + + Regular file. + +.. data:: S_IFBLK + + Block device. + +.. data:: S_IFDIR + + Directory. + +.. data:: S_IFCHR + + Character device. + +.. data:: S_IFIFO + + FIFO. + +The following flags can also be used in the *mode* argument of :func:`os.chmod`: + +.. data:: S_ISUID + + Set UID bit. + +.. data:: S_ISGID + + Set-group-ID bit. This bit has several special uses. For a directory + it indicates that BSD semantics is to be used for that directory: + files created there inherit their group ID from the directory, not + from the effective group ID of the creating process, and directories + created there will also get the :data:`S_ISGID` bit set. For a + file that does not have the group execution bit (:data:`S_IXGRP`) + set, the set-group-ID bit indicates mandatory file/record locking + (see also :data:`S_ENFMT`). + +.. data:: S_ISVTX + + Sticky bit. When this bit is set on a directory it means that a file + in that directory can be renamed or deleted only by the owner of the + file, by the owner of the directory, or by a privileged process. + +.. data:: S_IRWXU + + Mask for file owner permissions. + +.. data:: S_IRUSR + + Owner has read permission. + +.. data:: S_IWUSR + + Owner has write permission. + +.. data:: S_IXUSR + + Owner has execute permission. + +.. data:: S_IRWXG + + Mask for group permissions. + +.. data:: S_IRGRP + + Group has read permission. + +.. data:: S_IWGRP + + Group has write permission. + +.. data:: S_IXGRP + + Group has execute permission. + +.. data:: S_IRWXO + + Mask for permissions for others (not in group). + +.. data:: S_IROTH + + Others have read permission. + +.. data:: S_IWOTH + + Others have write permission. + +.. data:: S_IXOTH + + Others have execute permission. + +.. data:: S_ENFMT + + System V file locking enforcement. This flag is shared with :data:`S_ISGID`: + file/record locking is enforced on files that do not have the group + execution bit (:data:`S_IXGRP`) set. + +.. data:: S_IREAD + + Unix V7 synonym for :data:`S_IRUSR`. + +.. data:: S_IWRITE + + Unix V7 synonym for :data:`S_IWUSR`. + +.. data:: S_IEXEC + + Unix V7 synonym for :data:`S_IXUSR`. + Example:: import os, sys -- cgit v0.12 From 3cc12f69421f14c4d919cc015b71259056b3bc60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Wed, 22 Jul 2009 09:03:01 +0000 Subject: Merged revisions 74164 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74164 | tarek.ziade | 2009-07-22 10:57:28 +0200 (Wed, 22 Jul 2009) | 9 lines Merged revisions 74163 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74163 | tarek.ziade | 2009-07-22 10:55:19 +0200 (Wed, 22 Jul 2009) | 1 line Issue #6545: Removed assert statements in distutils.Extension, so the behavior is similar when used with -O ........ ................ --- Lib/distutils/extension.py | 9 +++++---- Misc/NEWS | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Lib/distutils/extension.py b/Lib/distutils/extension.py index 16d2bef..5c07bda 100644 --- a/Lib/distutils/extension.py +++ b/Lib/distutils/extension.py @@ -103,10 +103,11 @@ class Extension: optional=None, **kw # To catch unknown keywords ): - assert isinstance(name, str), "'name' must be a string" - assert (isinstance(sources, list) and - all(isinstance(v, str) for v in sources)), \ - "'sources' must be a list of strings" + if not isinstance(name, str): + raise AssertionError("'name' must be a string") + if not (isinstance(sources, list) and + all(isinstance(v, str) for v in sources)): + raise AssertionError("'sources' must be a list of strings") self.name = name self.sources = sources diff --git a/Misc/NEWS b/Misc/NEWS index 76ead6f..4d099a1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -892,6 +892,9 @@ Core and Builtins Library ------- +- Issue #6545: Removed assert statements in distutils.Extension, so the + behavior is similar when used with -O. + - Issue #6459: distutils.command.build_ext.get_export_symbols now uses the "PyInit" prefix, rather than "init". -- cgit v0.12 From 069bcc3dd99be9d4a0ea2202377066c0a77de651 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 22 Jul 2009 12:06:11 +0000 Subject: Merged revisions 74169 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r74169 | georg.brandl | 2009-07-22 14:03:59 +0200 (Mi, 22 Jul 2009) | 9 lines Merged revisions 74167 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74167 | georg.brandl | 2009-07-22 13:57:15 +0200 (Mi, 22 Jul 2009) | 1 line Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. ........ ................ --- Lib/test/test_builtin.py | 5 +++++ Misc/NEWS | 2 ++ Objects/bytearrayobject.c | 8 +++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index fdb0ea2..28af247 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1229,6 +1229,11 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65) self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65) + def test_bytearray_translate(self): + x = bytearray(b"abc") + self.assertRaises(ValueError, x.translate, b"1", 1) + self.assertRaises(TypeError, x.translate, b"1"*256, 1) + class TestSorted(unittest.TestCase): def test_basic(self): diff --git a/Misc/NEWS b/Misc/NEWS index 4d099a1..eeda945 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 3.1.1? Core and Builtins ----------------- +- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. + - Issue #6070: On posix platforms import no longer copies the execute bit from the .py file to the .pyc file if it is set. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index 165fd10..f3d5697 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1389,15 +1389,17 @@ bytearray_translate(PyByteArrayObject *self, PyObject *args) if (vtable.len != 256) { PyErr_SetString(PyExc_ValueError, "translation table must be 256 characters long"); - goto done; + PyBuffer_Release(&vtable); + return NULL; } table = (const char*)vtable.buf; } if (delobj != NULL) { if (_getbuffer(delobj, &vdel) < 0) { - delobj = NULL; /* don't try to release vdel buffer on exit */ - goto done; + if (tableobj != NULL) + PyBuffer_Release(&vtable); + return NULL; } } else { -- cgit v0.12 From 1f1b9a48e771cf00622f7a9c2318cf6f57a3395e Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Wed, 22 Jul 2009 15:23:36 +0000 Subject: Merged revisions 74171 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r74171 | r.david.murray | 2009-07-22 11:20:27 -0400 (Wed, 22 Jul 2009) | 3 lines Issue 6542: Make sure that TestInvalidFD.test_closerange does not close any valid file descriptors. ........ --- Lib/test/test_os.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 0600cfc..9e60f00 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -617,7 +617,18 @@ class TestInvalidFD(unittest.TestCase): def test_closerange(self): if hasattr(os, "closerange"): fd = support.make_bad_fd() - self.assertEqual(os.closerange(fd, fd + 10), None) + # Make sure none of the descriptors we are about to close are + # currently valid (issue 6542). + for i in range(10): + try: os.fstat(fd+i) + except OSError: + pass + else: + break + if i < 2: + raise unittest.SkipTest( + "Unable to acquire a range of invalid file descriptors") + self.assertEqual(os.closerange(fd, fd + i-1), None) def test_dup2(self): if hasattr(os, "dup2"): -- cgit v0.12 -- cgit v0.12 From 0ac1f83079ee90f56bc7eef92643980a911bd355 Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Sun, 26 Jul 2009 12:39:47 +0000 Subject: Backport the changes made in revision 74198, fixing the issue 1424152 --- Lib/http/client.py | 30 ++++++++++++++++++++++++++++++ Lib/test/test_urllib2.py | 17 +++++++++++++++++ Lib/urllib/request.py | 15 ++++++++++++--- Misc/NEWS | 4 ++++ 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/Lib/http/client.py b/Lib/http/client.py index cef942f..f73cd9e 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -644,11 +644,17 @@ class HTTPConnection: self.__response = None self.__state = _CS_IDLE self._method = None + self._tunnel_host = None + self._tunnel_port = None self._set_hostport(host, port) if strict is not None: self.strict = strict + def _set_tunnel(self, host, port=None): + self._tunnel_host = host + self._tunnel_port = port + def _set_hostport(self, host, port): if port is None: i = host.rfind(':') @@ -669,10 +675,29 @@ class HTTPConnection: def set_debuglevel(self, level): self.debuglevel = level + def _tunnel(self): + self._set_hostport(self._tunnel_host, self._tunnel_port) + connect_str = "CONNECT %s:%d HTTP/1.0\r\n\r\n" %(self.host, self.port) + connect_bytes = connect_str.encode("ascii") + self.send(connect_bytes) + response = self.response_class(self.sock, strict = self.strict, + method= self._method) + (version, code, message) = response._read_status() + if code != 200: + self.close() + raise socket.error("Tunnel connection failed: %d %s" % (code, + message.strip())) + while True: + line = response.fp.readline() + if line == b'\r\n': + break + def connect(self): """Connect to the host and port specified in __init__.""" self.sock = socket.create_connection((self.host,self.port), self.timeout) + if self._tunnel_host: + self._tunnel() def close(self): """Close the connection to the HTTP server.""" @@ -1008,6 +1033,11 @@ else: sock = socket.create_connection((self.host, self.port), self.timeout) + + if self._tunnel_host: + self.sock = sock + self._tunnel() + self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 5c9cb8c..87d0116 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -947,6 +947,23 @@ class HandlerTests(unittest.TestCase): self.assertEqual([(handlers[0], "http_open")], [tup[0:2] for tup in o.calls]) + def test_proxy_https(self): + o = OpenerDirector() + ph = urllib.request.ProxyHandler(dict(https="proxy.example.com:3128")) + o.add_handler(ph) + meth_spec = [ + [("https_open", "return response")] + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + + req = Request("https://www.example.com/") + self.assertEqual(req.get_host(), "www.example.com") + r = o.open(req) + self.assertEqual(req.get_host(), "proxy.example.com:3128") + self.assertEqual([(handlers[0], "https_open")], + [tup[0:2] for tup in o.calls]) + + def test_basic_auth(self, quote_char='"'): opener = OpenerDirector() password_manager = MockPasswordManager() diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index b133fe4..f787407 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -163,6 +163,7 @@ class Request: self.full_url = unwrap(url) self.data = data self.headers = {} + self._tunnel_host = None for key, value in headers.items(): self.add_header(key, value) self.unredirected_hdrs = {} @@ -218,8 +219,12 @@ class Request: # End deprecated methods def set_proxy(self, host, type): - self.host, self.type = host, type - self.selector = self.full_url + if self.type == 'https' and not self._tunnel_host: + self._tunnel_host = self.host + else: + self.type= type + self.selector = self.full_url + self.host = host def has_proxy(self): return self.selector == self.full_url @@ -659,7 +664,7 @@ class ProxyHandler(BaseHandler): req.add_header('Proxy-authorization', 'Basic ' + creds) hostport = unquote(hostport) req.set_proxy(hostport, proxy_type) - if orig_type == proxy_type: + if orig_type == proxy_type or orig_type == 'https': # let other handlers take care of it return None else: @@ -1041,6 +1046,10 @@ class AbstractHTTPHandler(BaseHandler): # request. headers["Connection"] = "close" headers = dict((name.title(), val) for name, val in headers.items()) + + if req._tunnel_host: + h._set_tunnel(req._tunnel_host) + try: h.request(req.get_method(), req.selector, req.data, headers) r = h.getresponse() # an HTTPResponse instance diff --git a/Misc/NEWS b/Misc/NEWS index eeda945..cca4d76 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -39,6 +39,10 @@ C-API Library ------- +- Issue #1424152: Fix for http.client, urllib.request to support SSL while + working through proxy. Original patch by Christopher Li, changes made by + Senthil Kumaran + - importlib.abc.PyLoader did not inherit from importlib.abc.ResourceLoader like the documentation said it did even though the code in PyLoader relied on the abstract method required by ResourceLoader. -- cgit v0.12 From e54b21928c67150096a245547864f1526c829dd4 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 26 Jul 2009 13:43:33 +0000 Subject: Be consistent in versioning with the stable 2.6 branch; this also makes more sense for the version number showing up on . --- Include/patchlevel.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 0610f70..6b085bb 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 1 -#define PY_MICRO_VERSION 1 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA +#define PY_MICRO_VERSION 0 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.1.1a0" +#define PY_VERSION "3.1.0+" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ -- cgit v0.12 From 7bc66b10099552dae79fab232ea643296e10876e Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Mon, 27 Jul 2009 02:12:11 +0000 Subject: Merged revisions 74222 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r74222 | eric.smith | 2009-07-26 22:10:42 -0400 (Sun, 26 Jul 2009) | 1 line Sync trunk and py3k versions of string formatting. Manual merge of r74219. ........ --- Objects/stringlib/formatter.h | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h index ea15c7b..5cead66 100644 --- a/Objects/stringlib/formatter.h +++ b/Objects/stringlib/formatter.h @@ -920,6 +920,13 @@ format_float_internal(PyObject *value, format the result. We take care of that later. */ type = 'g'; +#if PY_VERSION_HEX < 0x0301000 + /* 'F' is the same as 'f', per the PEP */ + /* This is no longer the case in 3.x */ + if (type == 'F') + type = 'f'; +#endif + val = PyFloat_AsDouble(value); if (val == -1.0 && PyErr_Occurred()) goto done; @@ -935,15 +942,8 @@ format_float_internal(PyObject *value, #if PY_VERSION_HEX < 0x03010000 /* 3.1 no longer converts large 'f' to 'g'. */ - if (fabs(val) >= 1e50) - switch (type) { - case 'f': - type = 'g'; - break; - case 'F': - type = 'G'; - break; - } + if ((type == 'f' || type == 'F') && fabs(val) >= 1e50) + type = 'g'; #endif /* Cast "type", because if we're in unicode we need to pass a @@ -1117,6 +1117,13 @@ format_complex_internal(PyObject *value, format the result. We take care of that later. */ type = 'g'; +#if PY_VERSION_HEX < 0x03010000 + /* This is no longer the case in 3.x */ + /* 'F' is the same as 'f', per the PEP */ + if (type == 'F') + type = 'f'; +#endif + if (precision < 0) precision = default_precision; -- cgit v0.12 From 63853bbdc4d116386d617542a7d2da2233352bca Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 27 Jul 2009 20:29:18 +0000 Subject: Issue 6573: Fix set.union() for cases where self is in the argument chain. --- Lib/test/test_set.py | 4 ++++ Misc/NEWS | 3 +++ Objects/setobject.c | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 15d3c6f..222726c 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -82,6 +82,10 @@ class TestJointOps(unittest.TestCase): self.assertEqual(self.thetype('abcba').union(C('ef')), set('abcef')) self.assertEqual(self.thetype('abcba').union(C('ef'), C('fg')), set('abcefg')) + # Issue #6573 + x = self.thetype() + self.assertEqual(x.union(set([1]), x, set([2])), self.thetype([1, 2])) + def test_or(self): i = self.s.union(self.otherword) self.assertEqual(self.s | set(self.otherword), i) diff --git a/Misc/NEWS b/Misc/NEWS index cca4d76..a882c9c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -14,6 +14,9 @@ Core and Builtins - Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. +- Issue #6573: set.union() stopped processing inputs if an instance of self + occurred in the argument chain. + - Issue #6070: On posix platforms import no longer copies the execute bit from the .py file to the .pyc file if it is set. diff --git a/Objects/setobject.c b/Objects/setobject.c index 8ecc405..b296f9f 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1187,7 +1187,7 @@ set_union(PySetObject *so, PyObject *args) for (i=0 ; i Date: Tue, 28 Jul 2009 16:32:56 +0000 Subject: Merged revisions 74232 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r74232 | mark.dickinson | 2009-07-28 17:31:03 +0100 (Tue, 28 Jul 2009) | 15 lines Merged revisions 74184,74230 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74184 | georg.brandl | 2009-07-23 08:08:58 +0100 (Thu, 23 Jul 2009) | 1 line #6548: dont suggest existence of real and imag functions in cmath. ........ r74230 | mark.dickinson | 2009-07-28 17:12:40 +0100 (Tue, 28 Jul 2009) | 4 lines Issue #6458: Reorganize cmath documentation into sections (similar to the way that the math documentation is organized); clarify section on conversions to and from polar coordinates. ........ ................ --- Doc/library/cmath.rst | 188 +++++++++++++++++++++++++++----------------------- 1 file changed, 101 insertions(+), 87 deletions(-) diff --git a/Doc/library/cmath.rst b/Doc/library/cmath.rst index 8761c88..b50ca5e 100644 --- a/Doc/library/cmath.rst +++ b/Doc/library/cmath.rst @@ -22,91 +22,106 @@ result of the conversion. support signed zeros the continuity is as specified below. -Complex coordinates -------------------- +Conversions to and from polar coordinates +----------------------------------------- -Complex numbers can be expressed by two important coordinate systems. -Python's :class:`complex` type uses rectangular coordinates where a number -on the complex plain is defined by two floats, the real part and the imaginary -part. +A Python complex number ``z`` is stored internally using *rectangular* +or *Cartesian* coordinates. It is completely determined by its *real +part* ``z.real`` and its *imaginary part* ``z.imag``. In other +words:: -Definition:: + z == z.real + z.imag*1j - z = x + 1j * y +*Polar coordinates* give an alternative way to represent a complex +number. In polar coordinates, a complex number *z* is defined by the +modulus *r* and the phase angle *phi*. The modulus *r* is the distance +from *z* to the origin, while the phase *phi* is the counterclockwise +angle from the positive x-axis to the line segment that joins the +origin to *z*. - x := real(z) - y := imag(z) +The following functions can be used to convert from the native +rectangular coordinates to polar coordinates and back. + +.. function:: phase(x) + + Return the phase of *x* (also known as the *argument* of *x*), as a + float. ``phase(x)`` is equivalent to ``math.atan2(x.imag, + x.real)``. The result lies in the range [-Ï€, Ï€], and the branch + cut for this operation lies along the negative real axis, + continuous from above. On systems with support for signed zeros + (which includes most systems in current use), this means that the + sign of the result is the same as the sign of ``x.imag``, even when + ``x.imag`` is zero:: + + >>> phase(complex(-1.0, 0.0)) + 3.141592653589793 + >>> phase(complex(-1.0, -0.0)) + -3.141592653589793 -In engineering the polar coordinate system is popular for complex numbers. In -polar coordinates a complex number is defined by the radius *r* and the phase -angle *phi*. The radius *r* is the absolute value of the complex, which can be -viewed as distance from (0, 0). The radius *r* is always 0 or a positive float. -The phase angle *phi* is the counter clockwise angle from the positive x axis, -e.g. *1* has the angle *0*, *1j* has the angle *Ï€/2* and *-1* the angle *-Ï€*. .. note:: - While :func:`phase` and func:`polar` return *+Ï€* for a negative real they - may return *-Ï€* for a complex with a very small negative imaginary - part, e.g. *-1-1E-300j*. + The modulus (absolute value) of a complex number *x* can be + computed using the built-in :func:`abs` function. There is no + separate :mod:`cmath` module function for this operation. -Definition:: - z = r * exp(1j * phi) - z = r * cis(phi) +.. function:: polar(x) - r := abs(z) := sqrt(real(z)**2 + imag(z)**2) - phi := phase(z) := atan2(imag(z), real(z)) - cis(phi) := cos(phi) + 1j * sin(phi) + Return the representation of *x* in polar coordinates. Returns a + pair ``(r, phi)`` where *r* is the modulus of *x* and phi is the + phase of *x*. ``polar(x)`` is equivalent to ``(abs(x), + phase(x))``. -.. function:: phase(x) +.. function:: rect(r, phi) - Return phase, also known as the argument, of a complex. + Return the complex number *x* with polar coordinates *r* and *phi*. + Equivalent to ``r * (math.cos(phi) + math.sin(phi)*1j)``. -.. function:: polar(x) +Power and logarithmic functions +------------------------------- - Convert a :class:`complex` from rectangular coordinates to polar - coordinates. The function returns a tuple with the two elements - *r* and *phi*. *r* is the distance from 0 and *phi* the phase - angle. +.. function:: exp(x) + Return the exponential value ``e**x``. -.. function:: rect(r, phi) - Convert from polar coordinates to rectangular coordinates and return - a :class:`complex`. +.. function:: log(x[, base]) + Returns the logarithm of *x* to the given *base*. If the *base* is not + specified, returns the natural logarithm of *x*. There is one branch cut, from 0 + along the negative real axis to -∞, continuous from above. + .. versionchanged:: 2.4 + *base* argument added. -cmath functions ---------------- -.. function:: acos(x) +.. function:: log10(x) - Return the arc cosine of *x*. There are two branch cuts: One extends right from - 1 along the real axis to ∞, continuous from below. The other extends left from - -1 along the real axis to -∞, continuous from above. + Return the base-10 logarithm of *x*. This has the same branch cut as + :func:`log`. -.. function:: acosh(x) +.. function:: sqrt(x) - Return the hyperbolic arc cosine of *x*. There is one branch cut, extending left - from 1 along the real axis to -∞, continuous from above. + Return the square root of *x*. This has the same branch cut as :func:`log`. -.. function:: asin(x) +Trigonometric functions +----------------------- - Return the arc sine of *x*. This has the same branch cuts as :func:`acos`. +.. function:: acos(x) + Return the arc cosine of *x*. There are two branch cuts: One extends right from + 1 along the real axis to ∞, continuous from below. The other extends left from + -1 along the real axis to -∞, continuous from above. -.. function:: asinh(x) - Return the hyperbolic arc sine of *x*. There are two branch cuts: - One extends from ``1j`` along the imaginary axis to ``∞j``, - continuous from the right. The other extends from ``-1j`` along - the imaginary axis to ``-∞j``, continuous from the left. +.. function:: asin(x) + + Return the arc sine of *x*. This has the same branch cuts as :func:`acos`. .. function:: atan(x) @@ -117,56 +132,49 @@ cmath functions from the left. -.. function:: atanh(x) - - Return the hyperbolic arc tangent of *x*. There are two branch cuts: One - extends from ``1`` along the real axis to ``∞``, continuous from below. The - other extends from ``-1`` along the real axis to ``-∞``, continuous from - above. - - .. function:: cos(x) Return the cosine of *x*. -.. function:: cosh(x) - - Return the hyperbolic cosine of *x*. +.. function:: sin(x) + Return the sine of *x*. -.. function:: exp(x) - - Return the exponential value ``e**x``. +.. function:: tan(x) -.. function:: isinf(x) + Return the tangent of *x*. - Return *True* if the real or the imaginary part of x is positive - or negative infinity. +Hyperbolic functions +-------------------- -.. function:: isnan(x) +.. function:: acosh(x) - Return *True* if the real or imaginary part of x is not a number (NaN). + Return the hyperbolic arc cosine of *x*. There is one branch cut, extending left + from 1 along the real axis to -∞, continuous from above. -.. function:: log(x[, base]) +.. function:: asinh(x) - Returns the logarithm of *x* to the given *base*. If the *base* is not - specified, returns the natural logarithm of *x*. There is one branch cut, from 0 - along the negative real axis to -∞, continuous from above. + Return the hyperbolic arc sine of *x*. There are two branch cuts: + One extends from ``1j`` along the imaginary axis to ``∞j``, + continuous from the right. The other extends from ``-1j`` along + the imaginary axis to ``-∞j``, continuous from the left. -.. function:: log10(x) +.. function:: atanh(x) - Return the base-10 logarithm of *x*. This has the same branch cut as - :func:`log`. + Return the hyperbolic arc tangent of *x*. There are two branch cuts: One + extends from ``1`` along the real axis to ``∞``, continuous from below. The + other extends from ``-1`` along the real axis to ``-∞``, continuous from + above. -.. function:: sin(x) +.. function:: cosh(x) - Return the sine of *x*. + Return the hyperbolic cosine of *x*. .. function:: sinh(x) @@ -174,26 +182,32 @@ cmath functions Return the hyperbolic sine of *x*. -.. function:: sqrt(x) +.. function:: tanh(x) - Return the square root of *x*. This has the same branch cut as :func:`log`. + Return the hyperbolic tangent of *x*. -.. function:: tan(x) +Classification functions +------------------------ - Return the tangent of *x*. +.. function:: isinf(x) + + Return *True* if the real or the imaginary part of x is positive + or negative infinity. -.. function:: tanh(x) +.. function:: isnan(x) + + Return *True* if the real or imaginary part of x is not a number (NaN). - Return the hyperbolic tangent of *x*. -The module also defines two mathematical constants: +Constants +--------- .. data:: pi - The mathematical constant *pi*, as a float. + The mathematical constant *Ï€*, as a float. .. data:: e -- cgit v0.12 -- cgit v0.12 -- cgit v0.12 From a44c6b325f21647a48f787215f0959de887ae08b Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Wed, 29 Jul 2009 15:40:30 +0000 Subject: Merged revisions 74063 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k NB: the news item for r73708 seems to have inadvertently been included in a different, unrelated merge set (r74055). I restored it here. ................ r74063 | alexandre.vassalotti | 2009-07-17 08:07:01 -0400 (Fri, 17 Jul 2009) | 17 lines Merged revisions 73694,73708,73738 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73694 | jesse.noller | 2009-06-29 14:24:26 -0400 (Mon, 29 Jun 2009) | 1 line Issue 5740: multiprocessing.connection.* authkey fixes ........ r73708 | jesse.noller | 2009-06-30 13:11:52 -0400 (Tue, 30 Jun 2009) | 1 line Resolves issues 5155, 5313, 5331 - bad file descriptor error with processes in processes ........ r73738 | r.david.murray | 2009-06-30 22:49:10 -0400 (Tue, 30 Jun 2009) | 2 lines Make punctuation prettier and break up run-on sentence. ........ ................ --- Doc/library/multiprocessing.rst | 36 +++++++++++++++++++-- Lib/multiprocessing/process.py | 3 +- Lib/test/test_multiprocessing.py | 70 +++++++++++++++++++++++++++++++++++++++- Misc/ACKS | 3 ++ Misc/NEWS | 4 +++ 5 files changed, 112 insertions(+), 4 deletions(-) diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index d1b22db..d3cfa0a 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -1713,7 +1713,7 @@ authentication* using the :mod:`hmac` module. generally be omitted since it can usually be inferred from the format of *address*. (See :ref:`multiprocessing-address-formats`) - If *authentication* is ``True`` or *authkey* is a string then digest + If *authenticate* is ``True`` or *authkey* is a string then digest authentication is used. The key used for authentication will be either *authkey* or ``current_process().authkey)`` if *authkey* is ``None``. If authentication fails then :exc:`AuthenticationError` is raised. See @@ -1755,7 +1755,7 @@ authentication* using the :mod:`hmac` module. If *authkey* is ``None`` and *authenticate* is ``True`` then ``current_process().authkey`` is used as the authentication key. If - *authkey* is ``None`` and *authentication* is ``False`` then no + *authkey* is ``None`` and *authenticate* is ``False`` then no authentication is done. If authentication fails then :exc:`AuthenticationError` is raised. See :ref:`multiprocessing-auth-keys`. @@ -2097,6 +2097,38 @@ Explicitly pass resources to child processes for i in range(10): Process(target=f, args=(lock,)).start() +Beware replacing sys.stdin with a "file like object" + + :mod:`multiprocessing` originally unconditionally called:: + + os.close(sys.stdin.fileno()) + + in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted + in issues with processes-in-processes. This has been changed to:: + + sys.stdin.close() + sys.stdin = open(os.devnull) + + Which solves the fundamental issue of processes colliding with each other + resulting in a bad file descriptor error, but introduces a potential danger + to applications which replace :func:`sys.stdin` with a "file-like object" + with output buffering. This danger is that if multiple processes call + :func:`close()` on this file-like object, it could result in the same + data being flushed to the object multiple times, resulting in corruption. + + If you write a file-like object and implement your own caching, you can + make it fork-safe by storing the pid whenever you append to the cache, + and discarding the cache when the pid changes. For example:: + + @property + def cache(self): + pid = os.getpid() + if pid != self._pid: + self._pid = pid + self._cache = [] + return self._cache + + For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331` Windows ~~~~~~~ diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py index 4a06a45..1a5c25f 100644 --- a/Lib/multiprocessing/process.py +++ b/Lib/multiprocessing/process.py @@ -221,7 +221,8 @@ class Process(object): self._counter = itertools.count(1) if sys.stdin is not None: try: - os.close(sys.stdin.fileno()) + sys.stdin.close() + sys.stdin = open(os.devnull) except (OSError, ValueError): pass _current_process = self diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index 9d58cdc..9f4e1a2 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -8,6 +8,7 @@ import unittest import threading import queue as pyqueue import time +import io import sys import os import gc @@ -1862,7 +1863,74 @@ class TestInitializers(unittest.TestCase): p.join() self.assertEqual(self.ns.test, 1) -testcases_other = [OtherTest, TestInvalidHandle, TestInitializers] +# +# Issue 5155, 5313, 5331: Test process in processes +# Verifies os.close(sys.stdin.fileno) vs. sys.stdin.close() behavior +# + +def _ThisSubProcess(q): + try: + item = q.get(block=False) + except pyqueue.Empty: + pass + +def _TestProcess(q): + queue = multiprocessing.Queue() + subProc = multiprocessing.Process(target=_ThisSubProcess, args=(queue,)) + subProc.start() + subProc.join() + +def _afunc(x): + return x*x + +def pool_in_process(): + pool = multiprocessing.Pool(processes=4) + x = pool.map(_afunc, [1, 2, 3, 4, 5, 6, 7]) + +class _file_like(object): + def __init__(self, delegate): + self._delegate = delegate + self._pid = None + + @property + def cache(self): + pid = os.getpid() + # There are no race conditions since fork keeps only the running thread + if pid != self._pid: + self._pid = pid + self._cache = [] + return self._cache + + def write(self, data): + self.cache.append(data) + + def flush(self): + self._delegate.write(''.join(self.cache)) + self._cache = [] + +class TestStdinBadfiledescriptor(unittest.TestCase): + + def test_queue_in_process(self): + queue = multiprocessing.Queue() + proc = multiprocessing.Process(target=_TestProcess, args=(queue,)) + proc.start() + proc.join() + + def test_pool_in_process(self): + p = multiprocessing.Process(target=pool_in_process) + p.start() + p.join() + + def test_flushing(self): + sio = io.StringIO() + flike = _file_like(sio) + flike.write('foo') + proc = multiprocessing.Process(target=lambda: flike.flush()) + flike.flush() + assert sio.getvalue() == 'foo' + +testcases_other = [OtherTest, TestInvalidHandle, TestInitializers, + TestStdinBadfiledescriptor] # # diff --git a/Misc/ACKS b/Misc/ACKS index 0fa88ed..43dcb86 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -45,6 +45,7 @@ Des Barry Ulf Bartelt Nick Bastin Jeff Bauer +Mike Bayer Michael R Bax Anthony Baxter Samuel L. Bayer @@ -184,6 +185,7 @@ Cesar Douady Dean Draayer John DuBois Paul Dubois +Graham Dumpleton Quinn Dunkan Robin Dunn Luke Dunstan @@ -556,6 +558,7 @@ Steven Pemberton Santiago Peresón Mark Perrego Trevor Perrin +Gabriel de Perthuis Tim Peters Benjamin Peterson Chris Petrilli diff --git a/Misc/NEWS b/Misc/NEWS index a882c9c..e867539 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,10 @@ C-API Library ------- +- Issues #5155, #5313, #5331: multiprocessing.Process._bootstrap was + unconditionally calling "os.close(sys.stdin.fileno())" resulting in file + descriptor errors + - Issue #1424152: Fix for http.client, urllib.request to support SSL while working through proxy. Original patch by Christopher Li, changes made by Senthil Kumaran -- cgit v0.12 From 4d0fe047227030ad9ff0ddfa4c2812be79f0b8ae Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Thu, 30 Jul 2009 10:03:32 +0000 Subject: Merged revisions 74267 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r74267 | mark.dickinson | 2009-07-30 11:02:09 +0100 (Thu, 30 Jul 2009) | 9 lines Merged revisions 74265 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74265 | mark.dickinson | 2009-07-30 11:00:10 +0100 (Thu, 30 Jul 2009) | 1 line Documentation fix for change introduced in r71832 ........ ................ --- Doc/library/fractions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/fractions.rst b/Doc/library/fractions.rst index 19d435d..7960026 100644 --- a/Doc/library/fractions.rst +++ b/Doc/library/fractions.rst @@ -18,7 +18,7 @@ another rational number, or from a string. Fraction(string) The first version requires that *numerator* and *denominator* are - instances of :class:`numbers.Integral` and returns a new + instances of :class:`numbers.Rational` and returns a new :class:`Fraction` instance with value ``numerator/denominator``. If *denominator* is :const:`0`, it raises a :exc:`ZeroDivisionError`. The second version requires that -- cgit v0.12 -- cgit v0.12 From 8d238293cd76e019f8b37dcbd62d22b7852c4774 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 2 Aug 2009 10:16:33 +0000 Subject: Merged revisions 74279 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r74279 | mark.dickinson | 2009-08-02 11:14:23 +0100 (Sun, 02 Aug 2009) | 1 line Issue #6595: Allow Decimal constructor to accept non-European decimal digits, as recommended by the specification. ........ --- Doc/library/decimal.rst | 5 +++++ Lib/decimal.py | 27 ++++++++++----------------- Lib/test/test_decimal.py | 12 +++++++++--- Misc/NEWS | 4 ++++ 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst index 4eba768..7e14486 100644 --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -324,6 +324,11 @@ Decimal objects numeric-value ::= decimal-part [exponent-part] | infinity numeric-string ::= [sign] numeric-value | [sign] nan + Other Unicode decimal digits are also permitted where ``digit`` + appears above. These include decimal digits from various other + alphabets (for example, Arabic-Indic and DevanÄgarÄ« digits) along + with the fullwidth digits ``'\uff10'`` through ``'\uff19'``. + If *value* is a :class:`tuple`, it should have three components, a sign (:const:`0` for positive or :const:`1` for negative), a :class:`tuple` of digits, and an integer exponent. For example, ``Decimal((0, (1, 4, 1, 4), -3))`` diff --git a/Lib/decimal.py b/Lib/decimal.py index aac90d7..042dd8b 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -554,20 +554,16 @@ class Decimal(object): intpart = m.group('int') if intpart is not None: # finite number - fracpart = m.group('frac') + fracpart = m.group('frac') or '' exp = int(m.group('exp') or '0') - if fracpart is not None: - self._int = (intpart+fracpart).lstrip('0') or '0' - self._exp = exp - len(fracpart) - else: - self._int = intpart.lstrip('0') or '0' - self._exp = exp + self._int = str(int(intpart+fracpart)) + self._exp = exp - len(fracpart) self._is_special = False else: diag = m.group('diag') if diag is not None: # NaN - self._int = diag.lstrip('0') + self._int = str(int(diag or '0')).lstrip('0') if m.group('signal'): self._exp = 'N' else: @@ -5482,26 +5478,23 @@ ExtendedContext = Context( # 2. For finite numbers (not infinities and NaNs) the body of the # number between the optional sign and the optional exponent must have # at least one decimal digit, possibly after the decimal point. The -# lookahead expression '(?=[0-9]|\.[0-9])' checks this. -# -# As the flag UNICODE is not enabled here, we're explicitly avoiding any -# other meaning for \d than the numbers [0-9]. +# lookahead expression '(?=\d|\.\d)' checks this. import re _parser = re.compile(r""" # A numeric string consists of: # \s* (?P[-+])? # an optional sign, followed by either... ( - (?=[0-9]|\.[0-9]) # ...a number (with at least one digit) - (?P[0-9]*) # having a (possibly empty) integer part - (\.(?P[0-9]*))? # followed by an optional fractional part - (E(?P[-+]?[0-9]+))? # followed by an optional exponent, or... + (?=\d|\.\d) # ...a number (with at least one digit) + (?P\d*) # having a (possibly empty) integer part + (\.(?P\d*))? # followed by an optional fractional part + (E(?P[-+]?\d+))? # followed by an optional exponent, or... | Inf(inity)? # ...an infinity, or... | (?Ps)? # ...an (optionally signaling) NaN # NaN - (?P[0-9]*) # with (possibly empty) diagnostic info. + (?P\d*) # with (possibly empty) diagnostic info. ) # \s* \Z diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index ceca186..01deeed 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -425,9 +425,6 @@ class DecimalExplicitConstructionTest(unittest.TestCase): self.assertEqual(str(Decimal('1.3E4 \n')), '1.3E+4') self.assertEqual(str(Decimal(' -7.89')), '-7.89') - #but alternate unicode digits should not - self.assertEqual(str(Decimal('\uff11')), 'NaN') - def test_explicit_from_tuples(self): #zero @@ -534,6 +531,15 @@ class DecimalExplicitConstructionTest(unittest.TestCase): d = nc.create_decimal(prevdec) self.assertEqual(str(d), '5.00E+8') + def test_unicode_digits(self): + test_values = { + '\uff11': '1', + '\u0660.\u0660\u0663\u0667\u0662e-\u0663' : '0.0000372', + '-nan\u0c68\u0c6a\u0c66\u0c66' : '-NaN2400', + } + for input, expected in test_values.items(): + self.assertEqual(str(Decimal(input)), expected) + class DecimalImplicitConstructionTest(unittest.TestCase): '''Unit tests for Implicit Construction cases of Decimal.''' diff --git a/Misc/NEWS b/Misc/NEWS index e867539..583afe2 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,10 @@ C-API Library ------- +- Issue #6595: The Decimal constructor now allows arbitrary Unicode + decimal digits in input, as recommended by the standard. Previously + it was restricted to accepting [0-9]. + - Issues #5155, #5313, #5331: multiprocessing.Process._bootstrap was unconditionally calling "os.close(sys.stdin.fileno())" resulting in file descriptor errors -- cgit v0.12 From b5b367811cfe399f1ac9e10cdce751fecb015610 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 2 Aug 2009 11:09:35 +0000 Subject: Fix Misc/NEWS markup --- Misc/NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index 583afe2..d3a67c0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -7,7 +7,7 @@ Python News What's New in Python 3.1.1? =========================== -*Release date: XX-XX-XXXX" +*Release date: XX-XX-XXXX* Core and Builtins ----------------- -- cgit v0.12 From c033942ed9b4814ec7b187b7e09185d89334be30 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 2 Aug 2009 15:51:59 +0000 Subject: Merged revisions 74287 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r74287 | mark.dickinson | 2009-08-02 16:51:19 +0100 (Sun, 02 Aug 2009) | 10 lines Merged revisions 74285 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74285 | mark.dickinson | 2009-08-02 16:40:11 +0100 (Sun, 02 Aug 2009) | 3 lines Issue #6619: Remove duplicate 'isgenerator' function from inspect module. Thanks Vincent Legoll. ........ ................ --- Lib/inspect.py | 4 ---- Misc/ACKS | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Lib/inspect.py b/Lib/inspect.py index fe3ffc7..4b3e27a 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -236,10 +236,6 @@ def isroutine(object): or ismethod(object) or ismethoddescriptor(object)) -def isgenerator(object): - """Return true if the object is a generator object.""" - return isinstance(object, types.GeneratorType) - def isabstract(object): """Return true if the object is an abstract base class (ABC).""" return isinstance(object, type) and object.__flags__ & TPFLAGS_IS_ABSTRACT diff --git a/Misc/ACKS b/Misc/ACKS index 43dcb86..644c803 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -425,6 +425,7 @@ Thomas Lee Christopher Lee Tennessee Leeuwenburg Luc Lefebvre +Vincent Legoll Kip Lehman Joerg Lehmann Luke Kenneth Casson Leighton -- cgit v0.12 From 34776ca43226d97909257845c0c3dc286f8ceeab Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 2 Aug 2009 20:09:59 +0000 Subject: Merged revisions 74289 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r74289 | mark.dickinson | 2009-08-02 21:08:54 +0100 (Sun, 02 Aug 2009) | 3 lines Issues #2715, #6621: Remove unused and undefined references to FSSpec from binhex module. Thanks Vincent Legoll. ........ --- Lib/binhex.py | 13 ------------- Misc/NEWS | 2 ++ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/Lib/binhex.py b/Lib/binhex.py index 90e59bc..4b7997a 100644 --- a/Lib/binhex.py +++ b/Lib/binhex.py @@ -143,9 +143,6 @@ class BinHex: if isinstance(ofp, str): ofname = ofp ofp = io.open(ofname, 'wb') - if os.name == 'mac': - fss = FSSpec(ofname) - fss.SetCreatorType('BnHq', 'TEXT') ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:') hqxer = _Hqxcoderengine(ofp) self.ofp = _Rlecoderengine(hqxer) @@ -446,9 +443,6 @@ def hexbin(inp, out): finfo = ifp.FInfo if not out: out = ifp.FName - if os.name == 'mac': - ofss = FSSpec(out) - out = ofss.as_pathname() ofp = io.open(out, 'wb') # XXXX Do translation on non-mac systems @@ -469,11 +463,4 @@ def hexbin(inp, out): ofp.write(d) ofp.close() - if os.name == 'mac': - nfinfo = ofss.GetFInfo() - nfinfo.Creator = finfo.Creator - nfinfo.Type = finfo.Type - nfinfo.Flags = finfo.Flags - ofss.SetFInfo(nfinfo) - ifp.close() diff --git a/Misc/NEWS b/Misc/NEWS index d3a67c0..7c66a66 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,8 @@ C-API Library ------- +- Issue #2715: Remove remnants of Carbon.File from binhex module. + - Issue #6595: The Decimal constructor now allows arbitrary Unicode decimal digits in input, as recommended by the standard. Previously it was restricted to accepting [0-9]. -- cgit v0.12 From 8e7b0e8ff19a47f6b3525b0104407265852bc282 Mon Sep 17 00:00:00 2001 From: Frank Wierzbicki Date: Sun, 2 Aug 2009 23:03:31 +0000 Subject: Merged revisions 74293 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74293 | frank.wierzbicki | 2009-08-02 18:19:05 -0400 (Sun, 02 Aug 2009) | 13 lines Merged revisions 74291 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74291 | frank.wierzbicki | 2009-08-02 16:37:48 -0400 (Sun, 02 Aug 2009) | 6 lines Adding tests derived from the Jython project. These are primarily tests of 'single' statements with partial sentences (so they test things like "try:" in interactive mode). Others tests hit areas that previously failed in Jython. A couple still fail in Jython, mainly due to the difficulty of parsing partial sentences (but should be fixed by Jython 2.6). ........ ................ --- Lib/test/test_codeop.py | 116 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py index 224a314..134c3ae 100644 --- a/Lib/test/test_codeop.py +++ b/Lib/test/test_codeop.py @@ -108,6 +108,20 @@ class CodeopTests(unittest.TestCase): av("\n \na**3","eval") av("#a\n#b\na**3","eval") + av("\n\na = 1\n\n") + av("\n\nif 1: a=1\n\n") + + av("if 1:\n pass\n if 1:\n pass\n else:\n pass\n") + av("#a\n\n \na=3\n\n") + + av("\n\na**3","eval") + av("\n \na**3","eval") + av("#a\n#b\na**3","eval") + + av("def f():\n try: pass\n finally: [x for x in (1,2)]\n") + av("def f():\n pass\n#foo\n") + av("@a.b.c\ndef f():\n pass\n") + def test_incomplete(self): ai = self.assertIncomplete @@ -149,6 +163,93 @@ class CodeopTests(unittest.TestCase): ai("9+ \\","eval") ai("lambda z: \\","eval") + ai("if True:\n if True:\n if True: \n") + + ai("@a(") + ai("@a(b") + ai("@a(b,") + ai("@a(b,c") + ai("@a(b,c,") + + ai("from a import (") + ai("from a import (b") + ai("from a import (b,") + ai("from a import (b,c") + ai("from a import (b,c,") + + ai("["); + ai("[a"); + ai("[a,"); + ai("[a,b"); + ai("[a,b,"); + + ai("{"); + ai("{a"); + ai("{a:"); + ai("{a:b"); + ai("{a:b,"); + ai("{a:b,c"); + ai("{a:b,c:"); + ai("{a:b,c:d"); + ai("{a:b,c:d,"); + + ai("a(") + ai("a(b") + ai("a(b,") + ai("a(b,c") + ai("a(b,c,") + + ai("a[") + ai("a[b") + ai("a[b,") + ai("a[b:") + ai("a[b:c") + ai("a[b:c:") + ai("a[b:c:d") + + ai("def a(") + ai("def a(b") + ai("def a(b,") + ai("def a(b,c") + ai("def a(b,c,") + + ai("(") + ai("(a") + ai("(a,") + ai("(a,b") + ai("(a,b,") + + ai("if a:\n pass\nelif b:") + ai("if a:\n pass\nelif b:\n pass\nelse:") + + ai("while a:") + ai("while a:\n pass\nelse:") + + ai("for a in b:") + ai("for a in b:\n pass\nelse:") + + ai("try:") + ai("try:\n pass\nexcept:") + ai("try:\n pass\nfinally:") + ai("try:\n pass\nexcept:\n pass\nfinally:") + + ai("with a:") + ai("with a as b:") + + ai("class a:") + ai("class a(") + ai("class a(b") + ai("class a(b,") + ai("class a():") + + ai("[x for") + ai("[x for x in") + ai("[x for x in (") + + ai("(x for") + ai("(x for x in") + ai("(x for x in (") + def test_invalid(self): ai = self.assertInvalid ai("a b") @@ -177,12 +278,27 @@ class CodeopTests(unittest.TestCase): ai("lambda z:","eval") ai("a b","eval") + ai("return 2.3") + ai("if (a == 1 and b = 2): pass") + + ai("del 1") + ai("del ()") + ai("del (1,)") + ai("del [1]") + ai("del '1'") + + ai("[i for i in range(10)] = (1, 2, 3)") + def test_filename(self): self.assertEquals(compile_command("a = 1\n", "abc").co_filename, compile("a = 1\n", "abc", 'single').co_filename) self.assertNotEquals(compile_command("a = 1\n", "abc").co_filename, compile("a = 1\n", "def", 'single').co_filename) + def test_no_universal_newlines(self): + code = compile_command("'\rfoo\r'", symbol='eval') + self.assertEqual(eval(code), '\rfoo\r') + def test_main(): run_unittest(CodeopTests) -- cgit v0.12 From d935976d7021ddaee728d8e018a4688e85ebd8c7 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 3 Aug 2009 17:51:12 +0000 Subject: Merged revisions 74297 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r74297 | georg.brandl | 2009-08-03 19:50:20 +0200 (Mo, 03 Aug 2009) | 1 line #6618: fix invalid 3k syntax. ........ --- Doc/reference/expressions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 79c87be3e2..b02c696 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -416,7 +416,7 @@ generator functions:: ... while True: ... try: ... value = (yield value) - ... except Exception, e: + ... except Exception as e: ... value = e ... finally: ... print("Don't forget to clean up when 'close()' is called.") -- cgit v0.12 From 99a13eeed18f533100489e7ca42a89de4e8ec07d Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 4 Aug 2009 19:13:37 +0000 Subject: Issue 6637: defaultdict.copy() failed with an empty factory. --- Lib/test/test_defaultdict.py | 7 +++++++ Misc/NEWS | 4 ++++ Modules/_collectionsmodule.c | 5 ++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py index 00bd9dc..76fc6a6 100644 --- a/Lib/test/test_defaultdict.py +++ b/Lib/test/test_defaultdict.py @@ -60,6 +60,7 @@ class TestDefaultDict(unittest.TestCase): d1 = defaultdict() self.assertEqual(d1.default_factory, None) self.assertEqual(repr(d1), "defaultdict(None, {})") + self.assertEqual(eval(repr(d1)), d1) d1[11] = 41 self.assertEqual(repr(d1), "defaultdict(None, {11: 41})") d2 = defaultdict(int) @@ -112,6 +113,12 @@ class TestDefaultDict(unittest.TestCase): d4[12] self.assertEqual(d4, {42: [], 12: []}) + # Issue 6637: Copy fails for empty default dict + d = defaultdict() + d['a'] = 42 + e = d.copy() + self.assertEqual(e['a'], 42) + def test_shallow_copy(self): d1 = defaultdict(foobar, {1: 1}) d2 = copy.copy(d1) diff --git a/Misc/NEWS b/Misc/NEWS index 7c66a66..f7c1302 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,10 @@ C-API Library ------- +- Issue #6637: defaultdict.copy() did not work when the default factory + was left unspecified. Also, the eval/repr round-trip would fail when + the default_factory was None. + - Issue #2715: Remove remnants of Carbon.File from binhex module. - Issue #6595: The Decimal constructor now allows arbitrary Unicode diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index f8d656c..68e0183 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1170,6 +1170,9 @@ defdict_copy(defdictobject *dd) whose class constructor has the same signature. Subclasses that define a different constructor signature must override copy(). */ + + if (dd->default_factory == NULL) + return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd), Py_None, dd, NULL); return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd), dd->default_factory, dd, NULL); } @@ -1316,7 +1319,7 @@ defdict_init(PyObject *self, PyObject *args, PyObject *kwds) Py_ssize_t n = PyTuple_GET_SIZE(args); if (n > 0) { newdefault = PyTuple_GET_ITEM(args, 0); - if (!PyCallable_Check(newdefault)) { + if (!PyCallable_Check(newdefault) && newdefault != Py_None) { PyErr_SetString(PyExc_TypeError, "first argument must be callable"); return -1; -- cgit v0.12 From 216dc7b70bb910cbcc85bf95f85dac944397bd71 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Tue, 4 Aug 2009 19:26:17 +0000 Subject: Merged revisions 74305 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r74305 | mark.dickinson | 2009-08-04 20:25:12 +0100 (Tue, 04 Aug 2009) | 9 lines Merged revisions 74303 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74303 | mark.dickinson | 2009-08-04 20:22:35 +0100 (Tue, 04 Aug 2009) | 2 lines Issue #6644: Fix compile error on AIX. ........ ................ --- Modules/cmathmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 56e6bad..fbf6ece 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -68,7 +68,7 @@ enum special_types { ST_PZERO, /* 3, +0. */ ST_POS, /* 4, positive finite number (nonzero) */ ST_PINF, /* 5, positive infinity */ - ST_NAN, /* 6, Not a Number */ + ST_NAN /* 6, Not a Number */ }; static enum special_types -- cgit v0.12 From fcf1ea5c86fb2b1efb54a780e31a69b24c0658f4 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 4 Aug 2009 20:26:39 +0000 Subject: Merged revisions 74309 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r74309 | georg.brandl | 2009-08-04 22:25:54 +0200 (Di, 04 Aug 2009) | 9 lines Merged revisions 74307 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74307 | georg.brandl | 2009-08-04 22:22:43 +0200 (Di, 04 Aug 2009) | 1 line Add donation link to docs footer. ........ ................ --- Doc/tools/sphinxext/layout.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Doc/tools/sphinxext/layout.html b/Doc/tools/sphinxext/layout.html index 6029871..42e18a4 100644 --- a/Doc/tools/sphinxext/layout.html +++ b/Doc/tools/sphinxext/layout.html @@ -8,3 +8,14 @@ {{ super() }} {% endblock %} +{% block footer %} + +{% endblock %} -- cgit v0.12 -- cgit v0.12 From 825b993542563d76b08ca7b01729b20837ba9245 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Thu, 6 Aug 2009 16:08:07 +0000 Subject: Merged revisions 74330 via svnmerge from svn+ssh://pythondev@www.python.org/python/branches/py3k ........ r74330 | mark.dickinson | 2009-08-06 17:06:25 +0100 (Thu, 06 Aug 2009) | 3 lines Issue #6622: Fix 'variable referenced before assignment' bug in POP3.apop. Thanks Vincent Legoll. ........ --- Lib/poplib.py | 2 +- Lib/test/test_poplib.py | 13 ++++++++++--- Misc/NEWS | 3 +++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Lib/poplib.py b/Lib/poplib.py index 770819e..1a529d0 100644 --- a/Lib/poplib.py +++ b/Lib/poplib.py @@ -282,7 +282,7 @@ class POP3: NB: mailbox is locked by server from here to 'quit()' """ - secret = bytes(secret, self.encoding) + secret = bytes(password, self.encoding) m = self.timestamp.match(self.welcome) if not m: raise error_proto('-ERR APOP not supported by server') diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py index ad00802..1807bca 100644 --- a/Lib/test/test_poplib.py +++ b/Lib/test/test_poplib.py @@ -36,7 +36,7 @@ class DummyPOP3Handler(asynchat.async_chat): asynchat.async_chat.__init__(self, conn) self.set_terminator(b"\r\n") self.in_buffer = [] - self.push('+OK dummy pop3 server ready.') + self.push('+OK dummy pop3 server ready. ') def collect_incoming_data(self, data): self.in_buffer.append(data) @@ -104,6 +104,9 @@ class DummyPOP3Handler(asynchat.async_chat): def cmd_rpop(self, arg): self.push('+OK done nothing.') + def cmd_apop(self, arg): + self.push('+OK done nothing.') + class DummyPOP3Server(asyncore.dispatcher, threading.Thread): @@ -169,7 +172,8 @@ class TestPOP3Class(TestCase): self.server.stop() def test_getwelcome(self): - self.assertEqual(self.client.getwelcome(), b'+OK dummy pop3 server ready.') + self.assertEqual(self.client.getwelcome(), + b'+OK dummy pop3 server ready. ') def test_exceptions(self): self.assertRaises(poplib.error_proto, self.client._shortcmd, 'echo -err') @@ -209,6 +213,9 @@ class TestPOP3Class(TestCase): def test_rpop(self): self.assertOK(self.client.rpop('foo')) + def test_apop(self): + self.assertOK(self.client.apop('foo', 'dummypassword')) + def test_top(self): expected = (b'+OK 116 bytes', [b'From: postmaster@python.org', b'Content-Type: text/plain', @@ -239,7 +246,7 @@ if hasattr(poplib, 'POP3_SSL'): self.set_socket(ssl_socket) self.set_terminator(b"\r\n") self.in_buffer = [] - self.push('+OK dummy pop3 server ready.') + self.push('+OK dummy pop3 server ready. ') class TestPOP3_SSLClass(TestPOP3Class): # repeat previous tests by using poplib.POP3_SSL diff --git a/Misc/NEWS b/Misc/NEWS index f7c1302..0de8ad5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,9 @@ C-API Library ------- +- Issue #6622: Fix "local variable 'secret' referenced before + assignment" bug in POP3.apop. + - Issue #6637: defaultdict.copy() did not work when the default factory was left unspecified. Also, the eval/repr round-trip would fail when the default_factory was None. -- cgit v0.12 From 0473e56964ae9d041cfb0c3c8e09994cb58b675a Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 6 Aug 2009 20:52:43 +0000 Subject: Merged revisions 74338 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ................ r74338 | antoine.pitrou | 2009-08-06 22:29:56 +0200 (jeu., 06 août 2009) | 14 lines Merged revisions 74336 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74336 | antoine.pitrou | 2009-08-06 22:18:29 +0200 (jeu., 06 août 2009) | 8 lines Issue #6629: Fix a data corruption issue in the new `io` package, which could occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or "wb+" mode) after having buffered a certain amount of data for reading. This bug was not present in the pure Python implementation. Yes, this is a serious issue. ........ ................ --- Lib/test/test_io.py | 20 ++++++++++++++++++++ Misc/NEWS | 5 +++++ Modules/_io/bufferedio.c | 13 +++++++++++++ 3 files changed, 38 insertions(+) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 729c0ca..407a8a4 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -1328,6 +1328,26 @@ class BufferedRandomTest(BufferedReaderTest, BufferedWriterTest): bufio.readinto(bytearray(1)) self.check_writes(_read) + def test_write_after_readahead(self): + # Issue #6629: writing after the buffer was filled by readahead should + # first rewind the raw stream. + for overwrite_size in [1, 5]: + raw = self.BytesIO(b"A" * 10) + bufio = self.tp(raw, 4) + # Trigger readahead + self.assertEqual(bufio.read(1), b"A") + self.assertEqual(bufio.tell(), 1) + # Overwriting should rewind the raw stream if it needs so + bufio.write(b"B" * overwrite_size) + self.assertEqual(bufio.tell(), overwrite_size + 1) + # If the write size was smaller than the buffer size, flush() and + # check that rewind happens. + bufio.flush() + self.assertEqual(bufio.tell(), overwrite_size + 1) + s = raw.getvalue() + self.assertEqual(s, + b"A" + b"B" * overwrite_size + b"A" * (9 - overwrite_size)) + def test_misbehaved_io(self): BufferedReaderTest.test_misbehaved_io(self) BufferedWriterTest.test_misbehaved_io(self) diff --git a/Misc/NEWS b/Misc/NEWS index 0de8ad5..582def6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,11 @@ C-API Library ------- +- Issue #6629: Fix a data corruption issue in the new I/O library, which could + occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or + "wb+" mode) after having buffered a certain amount of data for reading. This + bug was not present in the pure Python implementation. + - Issue #6622: Fix "local variable 'secret' referenced before assignment" bug in POP3.apop. diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 98f8413..d8b6471 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -1757,6 +1757,19 @@ bufferedwriter_write(buffered *self, PyObject *args) } Py_CLEAR(res); + /* Adjust the raw stream position if it is away from the logical stream + position. This happens if the read buffer has been filled but not + modified (and therefore _bufferedwriter_flush_unlocked() didn't rewind + the raw stream by itself). + Fixes issue #6629. + */ + n = RAW_OFFSET(self); + if (n != 0) { + if (_buffered_raw_seek(self, -n, 1) < 0) + goto error; + self->raw_pos -= n; + } + /* Then write buf itself. At this point the buffer has been emptied. */ remaining = buf.len; written = 0; -- cgit v0.12 From 992d3d1454f2c9ce34cfa15652c1a773ccd220a7 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 6 Aug 2009 21:01:42 +0000 Subject: Merged revisions 74340 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ........ r74340 | antoine.pitrou | 2009-08-06 23:00:37 +0200 (jeu., 06 août 2009) | 3 lines Fix typo ........ --- Misc/NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 582def6..f412f72 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -35,7 +35,7 @@ Core and Builtins C-API ----- -- Issue #6405: Remove duplicatet type declarations in descrobject.h. +- Issue #6405: Remove duplicate type declarations in descrobject.h. - The code flags for old __future__ features are now available again. @@ -76,7 +76,7 @@ Library know how to handle a comparison without loss of precision. Also add correct handling of infinities and nans for comparisons with float. -- Issue #6415: Fixed warnings.warn sagfault on bad formatted string. +- Issue #6415: Fixed warnings.warn segfault on bad formatted string. - Issue #6358: The exit status of a command started with os.popen() was reported differently than it did with python 2.x. -- cgit v0.12 From 606bbc9b9f25b02bca1e7224976d55f8f6ccc616 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 12 Aug 2009 18:39:44 +0000 Subject: Merged revisions 74356-74357 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r74356 | benjamin.peterson | 2009-08-12 13:11:03 -0500 (Wed, 12 Aug 2009) | 1 line fix typo in c++ ifdef ........ r74357 | benjamin.peterson | 2009-08-12 13:18:03 -0500 (Wed, 12 Aug 2009) | 1 line search through db.h in binary #6680 ........ --- Modules/socketmodule.h | 2 +- setup.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h index ee52515..65bc8ad 100644 --- a/Modules/socketmodule.h +++ b/Modules/socketmodule.h @@ -192,7 +192,7 @@ typedef struct { #define PySocketModule_ImportModuleAndAPI() PyCapsule_Import(PySocket_CAPSULE_NAME, 1) -#ifdef __cpluplus +#ifdef __cplusplus } #endif #endif /* !Py__SOCKET_H */ diff --git a/setup.py b/setup.py index c42416e..e4bad6f 100644 --- a/setup.py +++ b/setup.py @@ -725,17 +725,17 @@ class PyBuildExt(build_ext): f = os.path.join(d, "db.h") if db_setup_debug: print("db: looking for db.h in", f) if os.path.exists(f): - f = open(f).read() - m = re.search(r"#define\WDB_VERSION_MAJOR\W(\d+)", f) + f = open(f, "rb").read() + m = re.search(br"#define\WDB_VERSION_MAJOR\W(\d+)", f) if m: db_major = int(m.group(1)) - m = re.search(r"#define\WDB_VERSION_MINOR\W(\d+)", f) + m = re.search(br"#define\WDB_VERSION_MINOR\W(\d+)", f) db_minor = int(m.group(1)) db_ver = (db_major, db_minor) # Avoid 4.6 prior to 4.6.21 due to a BerkeleyDB bug if db_ver == (4, 6): - m = re.search(r"#define\WDB_VERSION_PATCH\W(\d+)", f) + m = re.search(br"#define\WDB_VERSION_PATCH\W(\d+)", f) db_patch = int(m.group(1)) if db_patch < 21: print("db.h:", db_ver, "patch", db_patch, -- cgit v0.12 From 8a038b283b5fb93f65459bd3fd056fd9ff29efb1 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 07:52:08 +0000 Subject: Merged revisions 74366 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r74366 | georg.brandl | 2009-08-13 09:50:57 +0200 (Do, 13 Aug 2009) | 1 line #6126: fix pdb stepping and breakpoints by giving the executed code the correct filename; this used execfile() in 2.x which did this automatically. ........ --- Lib/pdb.py | 5 +++-- Misc/NEWS | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/pdb.py b/Lib/pdb.py index d379d1a..e272f2e 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1210,8 +1210,9 @@ see no sign that the breakpoint was reached. self._wait_for_mainpyfile = 1 self.mainpyfile = self.canonic(filename) self._user_requested_quit = 0 - with open(filename) as fp: - statement = "exec(%r)" % (fp.read(),) + with open(filename, "rb") as fp: + statement = "exec(compile(%r, %r, 'exec'))" % \ + (fp.read(), self.mainpyfile) self.run(statement) # Simplified interface diff --git a/Misc/NEWS b/Misc/NEWS index f412f72..8c9bb93 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -42,6 +42,8 @@ C-API Library ------- +- Issue #6126: Fixed pdb command-line usage. + - Issue #6629: Fix a data corruption issue in the new I/O library, which could occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or "wb+" mode) after having buffered a certain amount of data for reading. This -- cgit v0.12 -- cgit v0.12 -- cgit v0.12 From c5605dffdb226e85f415bd6edb441dad714fbc0c Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:26:44 +0000 Subject: Merged revisions 73941-73943,74076,74094,74186,74211-74214,74247,74254,74262,74311,74334,74368 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r73941 | georg.brandl | 2009-07-11 12:39:00 +0200 (Sa, 11 Jul 2009) | 9 lines Merged revisions 73940 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73940 | georg.brandl | 2009-07-11 12:37:38 +0200 (Sa, 11 Jul 2009) | 1 line #6430: add note about size of "u" type. ........ ................ r73942 | georg.brandl | 2009-07-11 12:39:23 +0200 (Sa, 11 Jul 2009) | 1 line #6430: remove mention of "w" array typecode. ................ r73943 | georg.brandl | 2009-07-11 12:43:08 +0200 (Sa, 11 Jul 2009) | 1 line #6421: The self argument of module-level PyCFunctions is now a reference to the module object. ................ r74076 | georg.brandl | 2009-07-18 11:07:48 +0200 (Sa, 18 Jul 2009) | 1 line #6502: add missing comma in docstring. ................ r74094 | georg.brandl | 2009-07-19 09:25:56 +0200 (So, 19 Jul 2009) | 10 lines Recorded merge of revisions 74089 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74089 | senthil.kumaran | 2009-07-19 04:43:43 +0200 (So, 19 Jul 2009) | 3 lines Fix for issue5102, timeout value propages between redirects, proxy, digest and auth handlers. Fixed tests to reflect the same. ........ ................ r74186 | georg.brandl | 2009-07-23 11:19:09 +0200 (Do, 23 Jul 2009) | 9 lines Recorded merge of revisions 74185 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74185 | georg.brandl | 2009-07-23 11:17:09 +0200 (Do, 23 Jul 2009) | 1 line Fix the "pylocals" gdb command. ........ ................ r74211 | georg.brandl | 2009-07-26 16:48:09 +0200 (So, 26 Jul 2009) | 9 lines Recorded merge of revisions 74210 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74210 | georg.brandl | 2009-07-26 16:44:23 +0200 (So, 26 Jul 2009) | 1 line Move member descriptions inside the classes. ........ ................ r74212 | georg.brandl | 2009-07-26 16:54:51 +0200 (So, 26 Jul 2009) | 9 lines Merged revisions 74209 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74209 | georg.brandl | 2009-07-26 16:37:28 +0200 (So, 26 Jul 2009) | 1 line builtin -> built-in. ........ ................ r74213 | georg.brandl | 2009-07-26 17:02:41 +0200 (So, 26 Jul 2009) | 9 lines Merged revisions 74207 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74207 | georg.brandl | 2009-07-26 16:19:57 +0200 (So, 26 Jul 2009) | 1 line #6577: fix (hopefully) all links to builtin instead of module/class-specific objects. ........ ................ r74214 | georg.brandl | 2009-07-26 17:03:49 +0200 (So, 26 Jul 2009) | 9 lines Merged revisions 74205 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74205 | georg.brandl | 2009-07-26 15:36:39 +0200 (So, 26 Jul 2009) | 1 line #6576: fix cross-refs in re docs. ........ ................ r74247 | georg.brandl | 2009-07-29 09:27:08 +0200 (Mi, 29 Jul 2009) | 9 lines Merged revisions 74239 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74239 | georg.brandl | 2009-07-28 18:55:32 +0000 (Di, 28 Jul 2009) | 1 line Clarify quote_plus() usage. ........ ................ r74254 | georg.brandl | 2009-07-29 18:14:16 +0200 (Mi, 29 Jul 2009) | 1 line #6586: fix return/argument type doc for os.read() and os.write(). ................ r74262 | alexandre.vassalotti | 2009-07-29 21:54:39 +0200 (Mi, 29 Jul 2009) | 57 lines Merged revisions 74074,74077,74111,74188,74192-74193,74200,74252-74253,74258-74261 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74074 | georg.brandl | 2009-07-18 05:03:10 -0400 (Sat, 18 Jul 2009) | 1 line #6513: fix example code: warning categories are classes, not instances. ........ r74077 | georg.brandl | 2009-07-18 05:43:40 -0400 (Sat, 18 Jul 2009) | 1 line #6489: fix an ambiguity in getiterator() documentation. ........ r74111 | benjamin.peterson | 2009-07-20 09:30:10 -0400 (Mon, 20 Jul 2009) | 1 line remove docs for deprecated -p option ........ r74188 | benjamin.peterson | 2009-07-23 10:25:31 -0400 (Thu, 23 Jul 2009) | 1 line use bools ........ r74192 | georg.brandl | 2009-07-24 12:28:38 -0400 (Fri, 24 Jul 2009) | 1 line Fix arg types of et#. ........ r74193 | georg.brandl | 2009-07-24 12:46:38 -0400 (Fri, 24 Jul 2009) | 1 line Dont put "void" in signature for nullary functions. ........ r74200 | georg.brandl | 2009-07-25 09:02:15 -0400 (Sat, 25 Jul 2009) | 1 line #6571: add index entries for more operators. ........ r74252 | georg.brandl | 2009-07-29 12:06:31 -0400 (Wed, 29 Jul 2009) | 1 line #6593: fix link targets. ........ r74253 | georg.brandl | 2009-07-29 12:09:17 -0400 (Wed, 29 Jul 2009) | 1 line #6591: add reference to ioctl in fcntl module for platforms other than Windows. ........ r74258 | georg.brandl | 2009-07-29 12:57:05 -0400 (Wed, 29 Jul 2009) | 1 line Add a link to readline, and mention IPython and bpython. ........ r74259 | georg.brandl | 2009-07-29 13:07:21 -0400 (Wed, 29 Jul 2009) | 1 line Fix some markup and small factual glitches found by M. Markert. ........ r74260 | georg.brandl | 2009-07-29 13:15:20 -0400 (Wed, 29 Jul 2009) | 1 line Fix a few markup glitches. ........ r74261 | georg.brandl | 2009-07-29 13:50:25 -0400 (Wed, 29 Jul 2009) | 1 line Rewrite the section about classes a bit; mostly tidbits, and a larger update to the section about "private" variables to reflect the Pythonic consensus better. ........ ................ r74311 | georg.brandl | 2009-08-04 22:29:27 +0200 (Di, 04 Aug 2009) | 1 line Slightly improve buffer-related error message. ................ r74334 | georg.brandl | 2009-08-06 19:51:03 +0200 (Do, 06 Aug 2009) | 1 line #6648: mention surrogateescape handler where all standard handlers are listed. ................ r74368 | georg.brandl | 2009-08-13 09:56:35 +0200 (Do, 13 Aug 2009) | 21 lines Merged revisions 74328,74332-74333,74365 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74328 | georg.brandl | 2009-08-06 17:06:25 +0200 (Do, 06 Aug 2009) | 1 line Fix base keyword arg name for int() and long(). ........ r74332 | georg.brandl | 2009-08-06 19:23:21 +0200 (Do, 06 Aug 2009) | 1 line Fix punctuation and one copy-paste error. ........ r74333 | georg.brandl | 2009-08-06 19:43:55 +0200 (Do, 06 Aug 2009) | 1 line #6658: fix two typos. ........ r74365 | georg.brandl | 2009-08-13 09:48:05 +0200 (Do, 13 Aug 2009) | 1 line #6679: Remove mention that sub supports no flags. ........ ................ --- Doc/c-api/arg.rst | 2 +- Doc/c-api/buffer.rst | 2 +- Doc/c-api/float.rst | 6 +- Doc/c-api/import.rst | 2 +- Doc/c-api/method.rst | 2 +- Doc/c-api/structures.rst | 16 +- Doc/c-api/sys.rst | 2 +- Doc/c-api/tuple.rst | 2 +- Doc/c-api/type.rst | 2 +- Doc/c-api/unicode.rst | 11 +- Doc/distutils/apiref.rst | 6 +- Doc/extending/extending.rst | 6 +- Doc/extending/newtypes.rst | 2 +- Doc/glossary.rst | 16 +- Doc/howto/doanddont.rst | 2 +- Doc/howto/urllib2.rst | 7 +- Doc/includes/sqlite3/text_factory.py | 2 +- Doc/library/2to3.rst | 14 +- Doc/library/__future__.rst | 2 +- Doc/library/aifc.rst | 4 +- Doc/library/array.rst | 7 +- Doc/library/ast.rst | 2 +- Doc/library/audioop.rst | 2 +- Doc/library/cgi.rst | 8 +- Doc/library/codecs.rst | 7 +- Doc/library/collections.rst | 2 +- Doc/library/configparser.rst | 2 +- Doc/library/csv.rst | 2 +- Doc/library/curses.rst | 8 +- Doc/library/dbm.rst | 2 +- Doc/library/decimal.rst | 4 +- Doc/library/functions.rst | 8 +- Doc/library/gettext.rst | 8 +- Doc/library/heapq.rst | 2 +- Doc/library/io.rst | 12 +- Doc/library/locale.rst | 6 +- Doc/library/logging.rst | 2 +- Doc/library/multiprocessing.rst | 12 +- Doc/library/numbers.rst | 2 +- Doc/library/optparse.rst | 38 ++-- Doc/library/os.rst | 24 +-- Doc/library/ossaudiodev.rst | 2 +- Doc/library/pprint.rst | 2 +- Doc/library/pyclbr.rst | 4 +- Doc/library/re.rst | 53 +++--- Doc/library/reprlib.rst | 15 +- Doc/library/select.rst | 23 ++- Doc/library/shelve.rst | 4 +- Doc/library/socket.rst | 2 + Doc/library/sqlite3.rst | 2 +- Doc/library/stdtypes.rst | 42 +++-- Doc/library/string.rst | 2 +- Doc/library/sunau.rst | 10 +- Doc/library/sys.rst | 2 +- Doc/library/tempfile.rst | 4 +- Doc/library/threading.rst | 330 ++++++++++++++++------------------ Doc/library/tkinter.rst | 4 +- Doc/library/undoc.rst | 1 - Doc/library/urllib.parse.rst | 6 +- Doc/library/warnings.rst | 2 +- Doc/library/wave.rst | 6 +- Doc/library/weakref.rst | 2 +- Doc/library/webbrowser.rst | 18 +- Doc/library/winreg.rst | 2 +- Doc/library/xml.etree.elementtree.rst | 6 +- Doc/library/xmlrpc.client.rst | 2 +- Doc/library/zipimport.rst | 2 +- Doc/reference/datamodel.rst | 6 +- Doc/reference/executionmodel.rst | 4 +- Doc/reference/expressions.rst | 6 +- Doc/reference/simple_stmts.rst | 2 +- Doc/tutorial/classes.rst | 147 +++++++-------- Doc/tutorial/inputoutput.rst | 19 +- Doc/tutorial/interactive.rst | 20 ++- Doc/tutorial/modules.rst | 17 +- Doc/tutorial/stdlib2.rst | 15 +- Doc/using/cmdline.rst | 2 +- Doc/whatsnew/2.2.rst | 2 +- Doc/whatsnew/2.6.rst | 2 +- Misc/gdbinit | 2 +- Modules/arraymodule.c | 1 - Objects/abstract.c | 2 +- Objects/codeobject.c | 2 +- Objects/memoryobject.c | 2 +- 84 files changed, 534 insertions(+), 533 deletions(-) diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst index e968c8f..7d7fc56 100644 --- a/Doc/c-api/arg.rst +++ b/Doc/c-api/arg.rst @@ -160,7 +160,7 @@ variable(s) whose address should be passed. In both cases, *\*buffer_length* is set to the length of the encoded data without the trailing NUL byte. -``et#`` (string, Unicode object or character buffer compatible object) [const char \*encoding, char \*\*buffer] +``et#`` (string, Unicode object or character buffer compatible object) [const char \*encoding, char \*\*buffer, int \*buffer_length] Same as ``es#`` except that string objects are passed through without recoding them. Instead, the implementation assumes that the string object uses the encoding passed in as parameter. diff --git a/Doc/c-api/buffer.rst b/Doc/c-api/buffer.rst index 6ad4f7b..97adb07 100644 --- a/Doc/c-api/buffer.rst +++ b/Doc/c-api/buffer.rst @@ -144,7 +144,7 @@ Buffer related functions kind of buffer the caller is prepared to deal with and therefore what kind of buffer the exporter is allowed to return. The buffer interface allows for complicated memory sharing possibilities, but some caller may - not be able to handle all the complexibity but may want to see if the + not be able to handle all the complexity but may want to see if the exporter will let them take a simpler view to its memory. Some exporters may not be able to share memory in every possible way and diff --git a/Doc/c-api/float.rst b/Doc/c-api/float.rst index 77a8b83..e2e4b73 100644 --- a/Doc/c-api/float.rst +++ b/Doc/c-api/float.rst @@ -64,16 +64,16 @@ Floating Point Objects around the header file :file:`float.h`. -.. cfunction:: double PyFloat_GetMax(void) +.. cfunction:: double PyFloat_GetMax() Return the maximum representable finite float *DBL_MAX* as C :ctype:`double`. -.. cfunction:: double PyFloat_GetMin(void) +.. cfunction:: double PyFloat_GetMin() Return the minimum normalized positive float *DBL_MIN* as C :ctype:`double`. -.. cfunction:: int PyFloat_ClearFreeList(void) +.. cfunction:: int PyFloat_ClearFreeList() Clear the float free list. Return the number of items that could not be freed. diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst index ac4cde5..2e3f71f 100644 --- a/Doc/c-api/import.rst +++ b/Doc/c-api/import.rst @@ -137,7 +137,7 @@ Importing Modules *path*, possibly by fetching it from the :data:`sys.path_importer_cache` dict. If it wasn't yet cached, traverse :data:`sys.path_hooks` until a hook is found that can handle the path item. Return ``None`` if no hook could; - this tells our caller it should fall back to the builtin import mechanism. + this tells our caller it should fall back to the built-in import mechanism. Cache the result in :data:`sys.path_importer_cache`. Return a new reference to the importer object. diff --git a/Doc/c-api/method.rst b/Doc/c-api/method.rst index 9ee49ba..d8b2ed8 100644 --- a/Doc/c-api/method.rst +++ b/Doc/c-api/method.rst @@ -94,7 +94,7 @@ no longer available. Macro version of :cfunc:`PyMethod_Self` which avoids error checking. -.. cfunction:: int PyMethod_ClearFreeList(void) +.. cfunction:: int PyMethod_ClearFreeList() Clear the free list. Return the total number of freed items. diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst index 7048968..87bd362 100644 --- a/Doc/c-api/structures.rst +++ b/Doc/c-api/structures.rst @@ -146,12 +146,10 @@ convention flags can be combined with a binding flag. This is the typical calling convention, where the methods have the type :ctype:`PyCFunction`. The function expects two :ctype:`PyObject\*` values. - The first one is the *self* object for methods; for module functions, it - has the value given to :cfunc:`Py_InitModule4` (or *NULL* if - :cfunc:`Py_InitModule` was used). The second parameter (often called - *args*) is a tuple object representing all arguments. This parameter is - typically processed using :cfunc:`PyArg_ParseTuple` or - :cfunc:`PyArg_UnpackTuple`. + The first one is the *self* object for methods; for module functions, it is + the module object. The second parameter (often called *args*) is a tuple + object representing all arguments. This parameter is typically processed + using :cfunc:`PyArg_ParseTuple` or :cfunc:`PyArg_UnpackTuple`. .. data:: METH_KEYWORDS @@ -167,9 +165,9 @@ convention flags can be combined with a binding flag. Methods without parameters don't need to check whether arguments are given if they are listed with the :const:`METH_NOARGS` flag. They need to be of type - :ctype:`PyCFunction`. When used with object methods, the first parameter is - typically named ``self`` and will hold a reference to the object instance. - In all cases the second parameter will be *NULL*. + :ctype:`PyCFunction`. The first parameter is typically named *self* and will + hold a reference to the module or object instance. In all cases the second + parameter will be *NULL*. .. data:: METH_O diff --git a/Doc/c-api/sys.rst b/Doc/c-api/sys.rst index 15f1af4..adadfe5 100644 --- a/Doc/c-api/sys.rst +++ b/Doc/c-api/sys.rst @@ -73,7 +73,7 @@ accessible to C code. They all work with the current interpreter thread's case *name* is deleted from the sys module. Returns ``0`` on success, ``-1`` on error. -.. cfunction:: void PySys_ResetWarnOptions(void) +.. cfunction:: void PySys_ResetWarnOptions() Reset :data:`sys.warnoptions` to an empty list. diff --git a/Doc/c-api/tuple.rst b/Doc/c-api/tuple.rst index a66f043..c1f8e12 100644 --- a/Doc/c-api/tuple.rst +++ b/Doc/c-api/tuple.rst @@ -107,6 +107,6 @@ Tuple Objects raises :exc:`MemoryError` or :exc:`SystemError`. -.. cfunction:: int PyTuple_ClearFreeList(void) +.. cfunction:: int PyTuple_ClearFreeList() Clear the free list. Return the total number of freed items. diff --git a/Doc/c-api/type.rst b/Doc/c-api/type.rst index 07f82c9..d0edd55 100644 --- a/Doc/c-api/type.rst +++ b/Doc/c-api/type.rst @@ -33,7 +33,7 @@ Type Objects standard type object. Return false in all other cases. -.. cfunction:: unsigned int PyType_ClearCache(void) +.. cfunction:: unsigned int PyType_ClearCache() Clear the internal lookup cache. Return the current version tag. diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index e348ee7..dc48158 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -84,10 +84,11 @@ access internal read-only data of Unicode objects: :ctype:`PyUnicodeObject` (not checked). -.. cfunction:: int PyUnicode_ClearFreeList(void) +.. cfunction:: int PyUnicode_ClearFreeList() Clear the free list. Return the total number of freed items. + Unicode provides many different character properties. The most often needed ones are available through these macros which are mapped to C functions depending on the Python configuration. @@ -372,12 +373,12 @@ the system's :ctype:`wchar_t`. Built-in Codecs ^^^^^^^^^^^^^^^ -Python provides a set of builtin codecs which are written in C for speed. All of +Python provides a set of built-in codecs which are written in C for speed. All of these codecs are directly usable via the following functions. Many of the following APIs take two arguments encoding and errors. These parameters encoding and errors have the same semantics as the ones of the -builtin unicode() Unicode object constructor. +built-in :func:`unicode` Unicode object constructor. Setting encoding to *NULL* causes the default encoding to be used which is ASCII. The file system calls should use @@ -389,7 +390,7 @@ pointer to a static string, on others, it will change at run-time Error handling is set by errors which may also be set to *NULL* meaning to use the default handling defined for the codec. Default error handling for all -builtin codecs is "strict" (:exc:`ValueError` is raised). +built-in codecs is "strict" (:exc:`ValueError` is raised). The codecs all use a similar interface. Only deviation from the following generic ones are documented for simplicity. @@ -403,7 +404,7 @@ These are the generic codec APIs: Create a Unicode object by decoding *size* bytes of the encoded string *s*. *encoding* and *errors* have the same meaning as the parameters of the same name - in the :func:`unicode` builtin function. The codec to be used is looked up + in the :func:`unicode` built-in function. The codec to be used is looked up using the Python codec registry. Return *NULL* if an exception was raised by the codec. diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index 8abd0e3..6438257 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -1601,7 +1601,7 @@ lines, and joining lines with backslashes. +------------------+--------------------------------+---------+ Note that since *rstrip_ws* can strip the trailing newline, the semantics of - :meth:`readline` must differ from those of the builtin file object's + :meth:`readline` must differ from those of the built-in file object's :meth:`readline` method! In particular, :meth:`readline` returns ``None`` for end-of-file: an empty string might just be a blank line (or an all-whitespace line), if *rstrip_ws* is true but *skip_blanks* is not. @@ -1609,8 +1609,8 @@ lines, and joining lines with backslashes. .. method:: TextFile.open(filename) - Open a new file *filename*. This overrides any *file* or *filename* constructor - arguments. + Open a new file *filename*. This overrides any *file* or *filename* + constructor arguments. .. method:: TextFile.close() diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index 7e680db..497180a 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -82,10 +82,8 @@ example, the single expression ``"ls -l"``) to the arguments passed to the C function. The C function always has two arguments, conventionally named *self* and *args*. -The *self* argument is only used when the C function implements a built-in -method, not a function. In the example, *self* will always be a *NULL* pointer, -since we are defining a function, not a method. (This is done so that the -interpreter doesn't have to understand two different types of C functions.) +The *self* argument points to the module object for module-level functions; +for a method it would point to the object instance. The *args* argument will be a pointer to a Python tuple object containing the arguments. Each item of the tuple corresponds to an argument in the call's diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst index b27b224..0ea2461 100644 --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -802,7 +802,7 @@ easily use the :class:`PyTypeObject` it needs. It can be difficult to share these :class:`PyTypeObject` structures between extension modules. In this example we will create a :class:`Shoddy` type that inherits from the -builtin :class:`list` type. The new type will be completely compatible with +built-in :class:`list` type. The new type will be completely compatible with regular lists, but will have an additional :meth:`increment` method that increases an internal counter. :: diff --git a/Doc/glossary.rst b/Doc/glossary.rst index 5efc45d..a69a0f8 100644 --- a/Doc/glossary.rst +++ b/Doc/glossary.rst @@ -28,11 +28,11 @@ Glossary abstract base class Abstract Base Classes (abbreviated ABCs) complement :term:`duck-typing` by - providing a way to define interfaces when other techniques like :func:`hasattr` - would be clumsy. Python comes with many builtin ABCs for data structures - (in the :mod:`collections` module), numbers (in the :mod:`numbers` - module), and streams (in the :mod:`io` module). You can create your own - ABC with the :mod:`abc` module. + providing a way to define interfaces when other techniques like + :func:`hasattr` would be clumsy. Python comes with many built-in ABCs for + data structures (in the :mod:`collections` module), numbers (in the + :mod:`numbers` module), and streams (in the :mod:`io` module). You can + create your own ABC with the :mod:`abc` module. argument A value passed to a function or method, assigned to a named local @@ -83,7 +83,7 @@ Glossary expressed as a sum of a real part and an imaginary part. Imaginary numbers are real multiples of the imaginary unit (the square root of ``-1``), often written ``i`` in mathematics or ``j`` in - engineering. Python has builtin support for complex numbers, which are + engineering. Python has built-in support for complex numbers, which are written with this latter notation; the imaginary part is written with a ``j`` suffix, e.g., ``3+1j``. To get access to complex equivalents of the :mod:`math` module, use :mod:`cmath`. Use of complex numbers is a fairly @@ -305,7 +305,7 @@ Glossary define with an :meth:`__iter__` or :meth:`__getitem__` method. Iterables can be used in a :keyword:`for` loop and in many other places where a sequence is needed (:func:`zip`, :func:`map`, ...). When an iterable - object is passed as an argument to the builtin function :func:`iter`, it + object is passed as an argument to the built-in function :func:`iter`, it returns an iterator for the object. This iterator is good for one pass over the set of values. When using iterables, it is usually not necessary to call :func:`iter` or deal with iterator objects yourself. The ``for`` @@ -409,7 +409,7 @@ Glossary namespace The place where a variable is stored. Namespaces are implemented as - dictionaries. There are the local, global and builtin namespaces as well + dictionaries. There are the local, global and built-in namespaces as well as nested namespaces in objects (in methods). Namespaces support modularity by preventing naming conflicts. For instance, the functions :func:`builtins.open` and :func:`os.open` are distinguished by their diff --git a/Doc/howto/doanddont.rst b/Doc/howto/doanddont.rst index 7f8ceaf..989ae9f 100644 --- a/Doc/howto/doanddont.rst +++ b/Doc/howto/doanddont.rst @@ -228,7 +228,7 @@ Compare:: More useful functions in :mod:`os.path`: :func:`basename`, :func:`dirname` and :func:`splitext`. -There are also many useful builtin functions people seem not to be aware of for +There are also many useful built-in functions people seem not to be aware of for some reason: :func:`min` and :func:`max` can find the minimum/maximum of any sequence with comparable semantics, for example, yet many people write their own :func:`max`/:func:`min`. Another highly useful function is diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst index 8a3accd..51978fc 100644 --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -182,10 +182,9 @@ which comes after we have a look at what happens when things go wrong. Handling Exceptions =================== -*urlopen* raises :exc:`URLError` when it cannot handle a response (though as usual -with Python APIs, builtin exceptions such as -:exc:`ValueError`, :exc:`TypeError` etc. may also -be raised). +*urlopen* raises :exc:`URLError` when it cannot handle a response (though as +usual with Python APIs, built-in exceptions such as :exc:`ValueError`, +:exc:`TypeError` etc. may also be raised). :exc:`HTTPError` is the subclass of :exc:`URLError` raised in the specific case of HTTP URLs. diff --git a/Doc/includes/sqlite3/text_factory.py b/Doc/includes/sqlite3/text_factory.py index 4c25b00..22c2970 100644 --- a/Doc/includes/sqlite3/text_factory.py +++ b/Doc/includes/sqlite3/text_factory.py @@ -31,7 +31,7 @@ cur.execute("select ?", ("this is latin1 and would normally create errors" + row = cur.fetchone() assert type(row[0]) == str -# sqlite3 offers a builtin optimized text_factory that will return bytestring +# sqlite3 offers a built-in optimized text_factory that will return bytestring # objects, if the data is in ASCII only, and otherwise return unicode objects con.text_factory = sqlite3.OptimizedUnicode cur.execute("select ?", (AUSTRIA,)) diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst index 9b2b4e4..f37bb05 100644 --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -86,13 +86,6 @@ document could also be refactored with this option. The :option:`-v` option enables output of more information on the translation process. -When the :option:`-p` is passed, the :2to3fixer:`print` fixer ``print`` as a -function instead of a statement. This is useful when ``from __future__ import -print_function`` is being used. If this option is not given, the print fixer -will surround print calls in an extra set of parentheses because it cannot -differentiate between the print statement with parentheses (such as ``print -("a" + "b" + "c")``) and a true function call. - .. _2to3-fixers: @@ -216,7 +209,7 @@ and off individually. They are described here in more detail. .. 2to3fixer:: itertools Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and - :func:`itertools.imap` to their builtin equivalents. + :func:`itertools.imap` to their built-in equivalents. :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`. .. 2to3fixer:: long @@ -246,8 +239,9 @@ and off individually. They are described here in more detail. .. 2to3fixer:: next - Converts the use of iterator's :meth:`next` methods to the :func:`next` - function. It also renames :meth:`next` methods to :meth:`~object.__next__`. + Converts the use of iterator's :meth:`~iterator.next` methods to the + :func:`next` function. It also renames :meth:`next` methods to + :meth:`~object.__next__`. .. 2to3fixer:: nonzero diff --git a/Doc/library/__future__.rst b/Doc/library/__future__.rst index b09246e..29f3109 100644 --- a/Doc/library/__future__.rst +++ b/Doc/library/__future__.rst @@ -52,7 +52,7 @@ Instances of class :class:`_Feature` have two corresponding methods, :meth:`getOptionalRelease` and :meth:`getMandatoryRelease`. *CompilerFlag* is the (bitfield) flag that should be passed in the fourth -argument to the builtin function :func:`compile` to enable the feature in +argument to the built-in function :func:`compile` to enable the feature in dynamically compiled code. This flag is stored in the :attr:`compiler_flag` attribute on :class:`_Feature` instances. diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst index 59837ce..bdd3517 100644 --- a/Doc/library/aifc.rst +++ b/Doc/library/aifc.rst @@ -48,7 +48,7 @@ Module :mod:`aifc` defines the following function: time how many samples you are going to write in total and use :meth:`writeframesraw` and :meth:`setnframes`. -Objects returned by :func:`open` when a file is opened for reading have the +Objects returned by :func:`.open` when a file is opened for reading have the following methods: @@ -133,7 +133,7 @@ following methods: Close the AIFF file. After calling this method, the object can no longer be used. -Objects returned by :func:`open` when a file is opened for writing have all the +Objects returned by :func:`.open` when a file is opened for writing have all the above methods, except for :meth:`readframes` and :meth:`setpos`. In addition the following methods exist. The :meth:`get\*` methods can only be called after the corresponding :meth:`set\*` methods have been called. Before the first diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 200277f..78c433d 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -21,7 +21,7 @@ defined: +-----------+----------------+-------------------+-----------------------+ | ``'B'`` | unsigned char | int | 1 | +-----------+----------------+-------------------+-----------------------+ -| ``'u'`` | Py_UNICODE | Unicode character | 2 | +| ``'u'`` | Py_UNICODE | Unicode character | 2 (see note) | +-----------+----------------+-------------------+-----------------------+ | ``'h'`` | signed short | int | 2 | +-----------+----------------+-------------------+-----------------------+ @@ -40,6 +40,11 @@ defined: | ``'d'`` | double | float | 8 | +-----------+----------------+-------------------+-----------------------+ +.. note:: + + The ``'u'`` typecode corresponds to Python's unicode character. On narrow + Unicode builds this is 2-bytes, on wide builds this is 4-bytes. + The actual representation of values is determined by the machine architecture (strictly speaking, by the C implementation). The actual size can be accessed through the :attr:`itemsize` attribute. diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index 2cf9da1..9bf374f 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -16,7 +16,7 @@ Python release; this module helps to find out programmatically what the current grammar looks like. An abstract syntax tree can be generated by passing :data:`ast.PyCF_ONLY_AST` as -a flag to the :func:`compile` builtin function, or using the :func:`parse` +a flag to the :func:`compile` built-in function, or using the :func:`parse` helper provided in this module. The result will be a tree of objects whose classes all inherit from :class:`ast.AST`. An abstract syntax tree can be compiled into a Python code object using the built-in :func:`compile` function. diff --git a/Doc/library/audioop.rst b/Doc/library/audioop.rst index 4af8536..d50a970 100644 --- a/Doc/library/audioop.rst +++ b/Doc/library/audioop.rst @@ -222,7 +222,7 @@ The module defines the following variables and functions: u-LAW encoding always uses 8 bits samples, so *width* refers only to the sample width of the output fragment here. -Note that operations such as :func:`mul` or :func:`max` make no distinction +Note that operations such as :func:`.mul` or :func:`.max` make no distinction between mono and stereo fragments, i.e. all samples are treated equal. If this is a problem the stereo fragment should be split into two mono fragments first and recombined later. Here is an example of how to do that:: diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index 42acdcf..55f6509 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -132,8 +132,8 @@ commas:: If a field represents an uploaded file, accessing the value via the :attr:`value` attribute or the :func:`getvalue` method reads the entire file in memory as a string. This may not be what you want. You can test for an uploaded -file by testing either the :attr:`filename` attribute or the :attr:`file` -attribute. You can then read the data at leisure from the :attr:`file` +file by testing either the :attr:`filename` attribute or the :attr:`!file` +attribute. You can then read the data at leisure from the :attr:`!file` attribute:: fileitem = form["userfile"] @@ -153,7 +153,7 @@ field will be set to the value -1. The file upload draft standard entertains the possibility of uploading multiple files from one field (using a recursive :mimetype:`multipart/\*` encoding). When this occurs, the item will be a dictionary-like :class:`FieldStorage` item. -This can be determined by testing its :attr:`type` attribute, which should be +This can be determined by testing its :attr:`!type` attribute, which should be :mimetype:`multipart/form-data` (or perhaps another MIME type matching :mimetype:`multipart/\*`). In this case, it can be iterated over recursively just like the top-level form object. @@ -161,7 +161,7 @@ just like the top-level form object. When a form is submitted in the "old" format (as the query string or as a single data part of type :mimetype:`application/x-www-form-urlencoded`), the items will actually be instances of the class :class:`MiniFieldStorage`. In this case, the -:attr:`list`, :attr:`file`, and :attr:`filename` attributes are always ``None``. +:attr:`!list`, :attr:`!file`, and :attr:`filename` attributes are always ``None``. A form submitted via POST that also has a query string will contain both :class:`FieldStorage` and :class:`MiniFieldStorage` items. diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 53437ce..7218d3a 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -72,9 +72,10 @@ It defines the following functions: encoding error), ``'replace'`` (replace malformed data with a suitable replacement marker, such as ``'?'``), ``'ignore'`` (ignore malformed data and continue without further notice), ``'xmlcharrefreplace'`` (replace with the - appropriate XML character reference (for encoding only)) and - ``'backslashreplace'`` (replace with backslashed escape sequences (for encoding - only)) as well as any other error handling name defined via + appropriate XML character reference (for encoding only)), + ``'backslashreplace'`` (replace with backslashed escape sequences (for + encoding only)), ``'surrogateescape'`` (replae with surrogate U+DCxx, see + :pep:`383`) as well as any other error handling name defined via :func:`register_error`. In case a search function cannot find a given encoding, it should return diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index 779f154..1d82364 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -487,7 +487,7 @@ stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``, .. class:: defaultdict([default_factory[, ...]]) Returns a new dictionary-like object. :class:`defaultdict` is a subclass of the - builtin :class:`dict` class. It overrides one method and adds one writable + built-in :class:`dict` class. It overrides one method and adds one writable instance variable. The remaining functionality is the same as for the :class:`dict` class and is not documented here. diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index 6f840b9..a54bc19 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -50,7 +50,7 @@ Default values can be specified by passing them into the :class:`ConfigParser` constructor as a dictionary. Additional defaults may be passed into the :meth:`get` method which will override all others. -Sections are normally stored in a builtin dictionary. An alternative dictionary +Sections are normally stored in a built-in dictionary. An alternative dictionary type can be passed to the :class:`ConfigParser` constructor. For example, if a dictionary type is passed that sorts its keys, the sections will be sorted on write-back, as will be the keys within each section. diff --git a/Doc/library/csv.rst b/Doc/library/csv.rst index 6bcee11..7a997b0 100644 --- a/Doc/library/csv.rst +++ b/Doc/library/csv.rst @@ -50,7 +50,7 @@ The :mod:`csv` module defines the following functions: Return a reader object which will iterate over lines in the given *csvfile*. *csvfile* can be any object which supports the :term:`iterator` protocol and returns a - string each time its :meth:`next` method is called --- file objects and list + string each time its :meth:`!next` method is called --- file objects and list objects are both suitable. If *csvfile* is a file object, it should be opened with ``newline=''``. [#]_ An optional *dialect* parameter can be given which is used to define a set of parameters diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst index bb750ba..4ea7afe 100644 --- a/Doc/library/curses.rst +++ b/Doc/library/curses.rst @@ -183,7 +183,7 @@ The module :mod:`curses` defines the following functions: .. function:: filter() - The :func:`filter` routine, if used, must be called before :func:`initscr` is + The :func:`.filter` routine, if used, must be called before :func:`initscr` is called. The effect is that, during those calls, LINES is set to 1; the capabilities clear, cup, cud, cud1, cuu1, cuu, vpa are disabled; and the home string is set to the value of cr. The effect is that the cursor is confined to @@ -606,9 +606,9 @@ the following methods: .. note:: A *character* means a C character (an ASCII code), rather then a Python - character (a string of length 1). (This note is true whenever the documentation - mentions a character.) The builtin :func:`ord` is handy for conveying strings to - codes. + character (a string of length 1). (This note is true whenever the + documentation mentions a character.) The built-in :func:`ord` is handy for + conveying strings to codes. Paint character *ch* at ``(y, x)`` with attributes *attr*, overwriting any character previously painter at that location. By default, the character diff --git a/Doc/library/dbm.rst b/Doc/library/dbm.rst index 7c2d660..bcb2378 100644 --- a/Doc/library/dbm.rst +++ b/Doc/library/dbm.rst @@ -61,7 +61,7 @@ modified by the prevailing umask). -The object returned by :func:`open` supports most of the same functionality as +The object returned by :func:`.open` supports most of the same functionality as dictionaries; keys and their corresponding values can be stored, retrieved, and deleted, and the :keyword:`in` operator and the :meth:`keys` method are available. Key and values are always stored as bytes. This means that when diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst index 7e14486..6ed3895 100644 --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -590,7 +590,7 @@ Decimal objects .. method:: max_mag(other[, context]) - Similar to the :meth:`max` method, but the comparison is done using the + Similar to the :meth:`.max` method, but the comparison is done using the absolute values of the operands. .. method:: min(other[, context]) @@ -602,7 +602,7 @@ Decimal objects .. method:: min_mag(other[, context]) - Similar to the :meth:`min` method, but the comparison is done using the + Similar to the :meth:`.min` method, but the comparison is done using the absolute values of the operands. .. method:: next_minus([context]) diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index a999e63..198ff7b 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -514,7 +514,7 @@ are always available. They are listed here in alphabetical order. to provide elaborate line editing and history features. -.. function:: int([number | string[, radix]]) +.. function:: int([number | string[, base]]) Convert a number or string to an integer. If no arguments are given, return ``0``. If a number is given, return ``number.__int__()``. Conversion of @@ -522,10 +522,10 @@ are always available. They are listed here in alphabetical order. a base-radix integer literal optionally preceded by '+' or '-' (with no space in between) and optionally surrounded by whitespace. A base-n literal consists of the digits 0 to n-1, with 'a' to 'z' (or 'A' to 'Z') having - values 10 to 35. The default radix is 10. The allowed values are 0 and 2-36. + values 10 to 35. The default *base* is 10. The allowed values are 0 and 2-36. Base-2, -8, and -16 literals can be optionally prefixed with ``0b``/``0B``, - ``0o``/``0O``, or ``0x``/``0X``, as with integer literals in code. Radix 0 - means to interpret exactly as a code literal, so that the actual radix is 2, + ``0o``/``0O``, or ``0x``/``0X``, as with integer literals in code. Base 0 + means to interpret exactly as a code literal, so that the actual base is 2, 8, 10, or 16, and so that ``int('010', 0)`` is not legal, while ``int('010')`` is, as well as ``int('010', 8)``. diff --git a/Doc/library/gettext.rst b/Doc/library/gettext.rst index 015b889..eba59c8 100644 --- a/Doc/library/gettext.rst +++ b/Doc/library/gettext.rst @@ -189,12 +189,12 @@ class can also install themselves in the built-in namespace as the function .. function:: install(domain, localedir=None, codeset=None, names=None) - This installs the function :func:`_` in Python's builtin namespace, based on + This installs the function :func:`_` in Python's builtins namespace, based on *domain*, *localedir*, and *codeset* which are passed to the function :func:`translation`. For the *names* parameter, please see the description of the translation - object's :meth:`install` method. + object's :meth:`~NullTranslations.install` method. As seen below, you usually mark the strings in your application that are candidates for translation, by wrapping them in a call to the :func:`_` @@ -203,7 +203,7 @@ class can also install themselves in the built-in namespace as the function print(_('This string will be translated.')) For convenience, you want the :func:`_` function to be installed in Python's - builtin namespace, so it is easily accessible in all modules of your + builtins namespace, so it is easily accessible in all modules of your application. @@ -294,7 +294,7 @@ are the methods of :class:`NullTranslations`: binding it to ``_``. If the *names* parameter is given, it must be a sequence containing the - names of functions you want to install in the builtin namespace in + names of functions you want to install in the builtins namespace in addition to :func:`_`. Supported names are ``'gettext'`` (bound to :meth:`self.gettext`), ``'ngettext'`` (bound to :meth:`self.ngettext`), ``'lgettext'`` and ``'lngettext'``. diff --git a/Doc/library/heapq.rst b/Doc/library/heapq.rst index 6acb283..d7658ae 100644 --- a/Doc/library/heapq.rst +++ b/Doc/library/heapq.rst @@ -134,7 +134,7 @@ The module also offers three general purpose functions based on heaps. The latter two functions perform best for smaller values of *n*. For larger values, it is more efficient to use the :func:`sorted` function. Also, when -``n==1``, it is more efficient to use the builtin :func:`min` and :func:`max` +``n==1``, it is more efficient to use the built-in :func:`min` and :func:`max` functions. diff --git a/Doc/library/io.rst b/Doc/library/io.rst index 71d3f67..1f6f813 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -12,7 +12,7 @@ .. sectionauthor:: Benjamin Peterson The :mod:`io` module provides the Python interfaces to stream handling. The -builtin :func:`open` function is defined in this module. +built-in :func:`open` function is defined in this module. At the top of the I/O hierarchy is the abstract base class :class:`IOBase`. It defines the basic interface to a stream. Note, however, that there is no @@ -39,7 +39,7 @@ buffered text interface to a buffered raw stream stream for text. Argument names are not part of the specification, and only the arguments of -:func:`open` are intended to be used as keyword arguments. +:func:`.open` are intended to be used as keyword arguments. Module Interface @@ -48,7 +48,7 @@ Module Interface .. data:: DEFAULT_BUFFER_SIZE An int containing the default buffer size used by the module's buffered I/O - classes. :func:`open` uses the file's blksize (as obtained by + classes. :func:`.open` uses the file's blksize (as obtained by :func:`os.stat`) if possible. .. function:: open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) @@ -142,8 +142,8 @@ Module Interface closed. If a filename is given *closefd* has no effect and must be ``True`` (the default). - The type of file object returned by the :func:`open` function depends on the - mode. When :func:`open` is used to open a file in a text mode (``'w'``, + The type of file object returned by the :func:`.open` function depends on the + mode. When :func:`.open` is used to open a file in a text mode (``'w'``, ``'r'``, ``'wt'``, ``'rt'``, etc.), it returns a subclass of :class:`TextIOBase` (specifically :class:`TextIOWrapper`). When used to open a file in a binary mode with buffering, the returned class is a subclass of @@ -256,7 +256,7 @@ I/O Base Classes most *limit* bytes will be read. The line terminator is always ``b'\n'`` for binary files; for text files, - the *newlines* argument to :func:`open` can be used to select the line + the *newlines* argument to :func:`.open` can be used to select the line terminator(s) recognized. .. method:: readlines(hint=-1) diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst index 163a383..519bd90 100644 --- a/Doc/library/locale.rst +++ b/Doc/library/locale.rst @@ -318,8 +318,8 @@ The :mod:`locale` module defines the following exception and functions: .. data:: LC_NUMERIC - Locale category for formatting numbers. The functions :func:`format`, - :func:`atoi`, :func:`atof` and :func:`str` of the :mod:`locale` module are + Locale category for formatting numbers. The functions :func:`.format`, + :func:`atoi`, :func:`atof` and :func:`.str` of the :mod:`locale` module are affected by that category. All other numeric formatting operations are not affected. @@ -504,7 +504,7 @@ document that your module is not compatible with non-\ ``C`` locale settings. The only way to perform numeric operations according to the locale is to use the special functions defined by this module: :func:`atof`, :func:`atoi`, -:func:`format`, :func:`str`. +:func:`.format`, :func:`.str`. There is no way to perform case conversions and character classifications according to the locale. For (Unicode) text strings these are done according diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 82dab09..c78aeb8 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -998,7 +998,7 @@ instantiated directly, but always through the module-level function Handles a record by passing it to all handlers associated with this logger and its ancestors (until a false value of *propagate* is found). This method is used for unpickled records received from a socket, as well as those created locally. - Logger-level filtering is applied using :meth:`filter`. + Logger-level filtering is applied using :meth:`~Logger.filter`. .. method:: Logger.makeRecord(name, lvl, fn, lno, msg, args, exc_info, func=None, extra=None) diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index d3cfa0a..43d6eb0 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -1552,9 +1552,9 @@ with the :class:`Pool` class. .. method:: apply(func[, args[, kwds]]) Call *func* with arguments *args* and keyword arguments *kwds*. It blocks - till the result is ready. Given this blocks - :meth:`apply_async` is better suited - for performing work in parallel. Additionally, the passed - in function is only executed in one of the workers of the pool. + till the result is ready. Given this blocks, :meth:`apply_async` is better + suited for performing work in parallel. Additionally, the passed in + function is only executed in one of the workers of the pool. .. method:: apply_async(func[, args[, kwds[, callback]]]) @@ -1567,7 +1567,7 @@ with the :class:`Pool` class. .. method:: map(func, iterable[, chunksize]) - A parallel equivalent of the :func:`map` builtin function (it supports only + A parallel equivalent of the :func:`map` built-in function (it supports only one *iterable* argument though). It blocks till the result is ready. This method chops the iterable into a number of chunks which it submits to @@ -1576,7 +1576,7 @@ with the :class:`Pool` class. .. method:: map_async(func, iterable[, chunksize[, callback]]) - A variant of the :meth:`map` method which returns a result object. + A variant of the :meth:`.map` method which returns a result object. If *callback* is specified then it should be a callable which accepts a single argument. When the result becomes ready *callback* is applied to @@ -1592,7 +1592,7 @@ with the :class:`Pool` class. make make the job complete **much** faster than using the default value of ``1``. - Also if *chunksize* is ``1`` then the :meth:`next` method of the iterator + Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator returned by the :meth:`imap` method has an optional *timeout* parameter: ``next(timeout)`` will raise :exc:`multiprocessing.TimeoutError` if the result cannot be returned within *timeout* seconds. diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index ae14c90..2b13a79 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -22,7 +22,7 @@ The numeric tower .. class:: Complex Subclasses of this type describe complex numbers and include the operations - that work on the builtin :class:`complex` type. These are: conversions to + that work on the built-in :class:`complex` type. These are: conversions to :class:`complex` and :class:`bool`, :attr:`.real`, :attr:`.imag`, ``+``, ``-``, ``*``, ``/``, :func:`abs`, :meth:`conjugate`, ``==``, and ``!=``. All except ``-`` and ``!=`` are abstract. diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst index eae6121..961331e 100644 --- a/Doc/library/optparse.rst +++ b/Doc/library/optparse.rst @@ -282,7 +282,7 @@ that's rarely necessary: by default it uses ``sys.argv[1:]``.) * ``args``, the list of positional arguments leftover after parsing options This tutorial section only covers the four most important option attributes: -:attr:`action`, :attr:`type`, :attr:`dest` (destination), and :attr:`help`. Of +:attr:`action`, :attr:`!type`, :attr:`dest` (destination), and :attr:`help`. Of these, :attr:`action` is the most fundamental. @@ -829,7 +829,7 @@ this option on the command-line. The standard option actions hard-coded into print a usage message including all options and the documentation for them (If you don't supply an action, the default is ``store``. For this action, you -may also supply :attr:`type` and :attr:`dest` option attributes; see below.) +may also supply :attr:`!type` and :attr:`dest` option attributes; see below.) As you can see, most actions involve storing or updating a value somewhere. :mod:`optparse` always creates a special object for this, conventionally called @@ -860,7 +860,7 @@ then :mod:`optparse`, on seeing this option, will do the equivalent of :: options.filename = "foo" -The :attr:`type` and :attr:`dest` option attributes are almost as important as +The :attr:`!type` and :attr:`dest` option attributes are almost as important as :attr:`action`, but :attr:`action` is the only one that makes sense for *all* options. @@ -875,18 +875,18 @@ Most actions have several relevant option attributes which you may specify to guide :mod:`optparse`'s behaviour; a few have required attributes, which you must specify for any option using that action. -* ``store`` [relevant: :attr:`type`, :attr:`dest`, ``nargs``, ``choices``] +* ``store`` [relevant: :attr:`!type`, :attr:`dest`, ``nargs``, ``choices``] The option must be followed by an argument, which is converted to a value - according to :attr:`type` and stored in :attr:`dest`. If ``nargs`` > 1, + according to :attr:`!type` and stored in :attr:`dest`. If ``nargs`` > 1, multiple arguments will be consumed from the command line; all will be converted - according to :attr:`type` and stored to :attr:`dest` as a tuple. See the + according to :attr:`!type` and stored to :attr:`dest` as a tuple. See the "Option types" section below. If ``choices`` is supplied (a list or tuple of strings), the type defaults to ``choice``. - If :attr:`type` is not supplied, it defaults to ``string``. + If :attr:`!type` is not supplied, it defaults to ``string``. If :attr:`dest` is not supplied, :mod:`optparse` derives a destination from the first long option string (e.g., ``"--foo-bar"`` implies ``foo_bar``). If there @@ -938,7 +938,7 @@ must specify for any option using that action. parser.add_option("--clobber", action="store_true", dest="clobber") parser.add_option("--no-clobber", action="store_false", dest="clobber") -* ``append`` [relevant: :attr:`type`, :attr:`dest`, ``nargs``, ``choices``] +* ``append`` [relevant: :attr:`!type`, :attr:`dest`, ``nargs``, ``choices``] The option must be followed by an argument, which is appended to the list in :attr:`dest`. If no default value for :attr:`dest` is supplied, an empty list @@ -946,7 +946,7 @@ must specify for any option using that action. the command-line. If ``nargs`` > 1, multiple arguments are consumed, and a tuple of length ``nargs`` is appended to :attr:`dest`. - The defaults for :attr:`type` and :attr:`dest` are the same as for the ``store`` + The defaults for :attr:`!type` and :attr:`dest` are the same as for the ``store`` action. Example:: @@ -988,7 +988,7 @@ must specify for any option using that action. options.verbosity += 1 -* ``callback`` [required: ``callback``; relevant: :attr:`type`, ``nargs``, +* ``callback`` [required: ``callback``; relevant: :attr:`!type`, ``nargs``, ``callback_args``, ``callback_kwargs``] Call the function specified by ``callback``, which is called as :: @@ -1061,7 +1061,7 @@ to a particular option, or fail to pass a required option attribute, Determines :mod:`optparse`'s behaviour when this option is seen on the command line; the available options are documented above. -* :attr:`type` (default: ``"string"``) +* :attr:`!type` (default: ``"string"``) The argument type expected by this option (e.g., ``"string"`` or ``"int"``); the available option types are documented below. @@ -1079,7 +1079,7 @@ to a particular option, or fail to pass a required option attribute, * ``nargs`` (default: 1) - How many arguments of type :attr:`type` should be consumed when this option is + How many arguments of type :attr:`!type` should be consumed when this option is seen. If > 1, :mod:`optparse` will store a tuple of values to :attr:`dest`. * ``const`` @@ -1410,15 +1410,15 @@ The four arguments to a callback are described below. There are several other option attributes that you can supply when you define a callback option: -:attr:`type` +:attr:`!type` has its usual meaning: as with the ``store`` or ``append`` actions, it instructs - :mod:`optparse` to consume one argument and convert it to :attr:`type`. Rather + :mod:`optparse` to consume one argument and convert it to :attr:`!type`. Rather than storing the converted value(s) anywhere, though, :mod:`optparse` passes it to your callback function. ``nargs`` also has its usual meaning: if it is supplied and > 1, :mod:`optparse` will - consume ``nargs`` arguments, each of which must be convertible to :attr:`type`. + consume ``nargs`` arguments, each of which must be convertible to :attr:`!type`. It then passes a tuple of converted values to your callback. ``callback_args`` @@ -1450,8 +1450,8 @@ where ``value`` is the argument to this option seen on the command-line. :mod:`optparse` will - only expect an argument if :attr:`type` is set; the type of ``value`` will be - the type implied by the option's type. If :attr:`type` for this option is + only expect an argument if :attr:`!type` is set; the type of ``value`` will be + the type implied by the option's type. If :attr:`!type` for this option is ``None`` (no argument expected), then ``value`` will be ``None``. If ``nargs`` > 1, ``value`` will be a tuple of values of the appropriate type. @@ -1578,7 +1578,7 @@ Callback example 5: fixed arguments Things get slightly more interesting when you define callback options that take a fixed number of arguments. Specifying that a callback option takes arguments is similar to defining a ``store`` or ``append`` option: if you define -:attr:`type`, then the option takes one argument that must be convertible to +:attr:`!type`, then the option takes one argument that must be convertible to that type; if you further define ``nargs``, then the option takes ``nargs`` arguments. @@ -1757,7 +1757,7 @@ Adding new actions is a bit trickier, because you have to understand that "typed" actions actions that take a value from the command line and expect it to be of a certain type; or rather, a string that can be converted to a certain type. These - options require a :attr:`type` attribute to the Option constructor. + options require a :attr:`!type` attribute to the Option constructor. These are overlapping sets: some default "store" actions are ``store``, ``store_const``, ``append``, and ``count``, while the default "typed" actions diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 218437e..206a15c 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -516,10 +516,10 @@ by file descriptors. .. note:: - This function is intended for low-level I/O. For normal usage, use the built-in - function :func:`open`, which returns a "file object" with :meth:`~file.read` and - :meth:`~file.write` methods (and many more). To wrap a file descriptor in a "file - object", use :func:`fdopen`. + This function is intended for low-level I/O. For normal usage, use the + built-in function :func:`open`, which returns a "file object" with + :meth:`~file.read` and :meth:`~file.write` methods (and many more). To + wrap a file descriptor in a "file object", use :func:`fdopen`. .. function:: openpty() @@ -540,9 +540,9 @@ by file descriptors. .. function:: read(fd, n) - Read at most *n* bytes from file descriptor *fd*. Return a string containing the + Read at most *n* bytes from file descriptor *fd*. Return a bytestring containing the bytes read. If the end of the file referred to by *fd* has been reached, an - empty string is returned. Availability: Unix, Windows. + empty bytes object is returned. Availability: Unix, Windows. .. note:: @@ -574,8 +574,8 @@ by file descriptors. .. function:: write(fd, str) - Write the string *str* to file descriptor *fd*. Return the number of bytes - actually written. Availability: Unix, Windows. + Write the bytestring in *str* to file descriptor *fd*. Return the number of + bytes actually written. Availability: Unix, Windows. .. note:: @@ -662,10 +662,10 @@ Files and Directories .. note:: - Using :func:`access` to check if a user is authorized to e.g. open a file before - actually doing so using :func:`open` creates a security hole, because the user - might exploit the short time interval between checking and opening the file to - manipulate it. + Using :func:`access` to check if a user is authorized to e.g. open a file + before actually doing so using :func:`open` creates a security hole, + because the user might exploit the short time interval between checking + and opening the file to manipulate it. .. note:: diff --git a/Doc/library/ossaudiodev.rst b/Doc/library/ossaudiodev.rst index 3ed3fb8..3972f14 100644 --- a/Doc/library/ossaudiodev.rst +++ b/Doc/library/ossaudiodev.rst @@ -118,7 +118,7 @@ Alternately, you can use the :meth:`setparameters` method to set all three audio parameters at once. This is more convenient, but may not be as flexible in all cases. -The audio device objects returned by :func:`open` define the following methods +The audio device objects returned by :func:`.open` define the following methods and (read-only) attributes: diff --git a/Doc/library/pprint.rst b/Doc/library/pprint.rst index dd85746..d1d1bae 100644 --- a/Doc/library/pprint.rst +++ b/Doc/library/pprint.rst @@ -13,7 +13,7 @@ Python data structures in a form which can be used as input to the interpreter. If the formatted structures include objects which are not fundamental Python types, the representation may not be loadable. This may be the case if objects such as files, sockets, classes, or instances are included, as well as many -other builtin objects which are not representable as Python constants. +other built-in objects which are not representable as Python constants. The formatted representation keeps objects on a single line if it can, and breaks them onto multiple lines if they don't fit within the allowed width. diff --git a/Doc/library/pyclbr.rst b/Doc/library/pyclbr.rst index a5d8494..36b46f4 100644 --- a/Doc/library/pyclbr.rst +++ b/Doc/library/pyclbr.rst @@ -78,7 +78,7 @@ members: .. attribute:: Class.lineno The line number of the ``class`` statement within the file named by - :attr:`file`. + :attr:`~Class.file`. .. _pyclbr-function-objects: @@ -109,5 +109,5 @@ The :class:`Function` objects used as values in the dictionary returned by .. attribute:: Function.lineno The line number of the ``def`` statement within the file named by - :attr:`file`. + :attr:`~Function.file`. diff --git a/Doc/library/re.rst b/Doc/library/re.rst index 5c70372..4f1528d 100644 --- a/Doc/library/re.rst +++ b/Doc/library/re.rst @@ -221,7 +221,7 @@ The special characters are: flags are described in :ref:`contents-of-module-re`.) This is useful if you wish to include the flags as part of the regular expression, instead of passing a *flag* argument to the - :func:`compile` function. + :func:`re.compile` function. Note that the ``(?x)`` flag changes how the expression is parsed. It should be used first in the expression string, or after one or more whitespace characters. @@ -464,9 +464,9 @@ form. result = re.match(pattern, string) - but using :func:`compile` and saving the resulting regular expression object - for reuse is more efficient when the expression will be used several times - in a single program. + but using :func:`re.compile` and saving the resulting regular expression + object for reuse is more efficient when the expression will be used several + times in a single program. .. note:: @@ -564,7 +564,7 @@ form. .. note:: - If you want to locate a match anywhere in *string*, use :meth:`search` + If you want to locate a match anywhere in *string*, use :func:`search` instead. @@ -655,9 +655,7 @@ form. >>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE) 'Baked Beans & Spam' - The pattern may be a string or an RE object; if you need to specify regular - expression flags, you must use a RE object, or use embedded modifiers in a - pattern; for example, ``sub("(?i)b+", "x", "bbbb BBBB")`` returns ``'x x'``. + The pattern may be a string or an RE object. The optional argument *count* is the maximum number of pattern occurrences to be replaced; *count* must be a non-negative integer. If omitted or zero, all @@ -720,8 +718,8 @@ attributes: .. note:: - If you want to locate a match anywhere in *string*, use :meth:`search` - instead. + If you want to locate a match anywhere in *string*, use + :meth:`~RegexObject.search` instead. The optional second parameter *pos* gives an index in the string where the search is to start; it defaults to ``0``. This is not completely equivalent to @@ -750,7 +748,7 @@ attributes: is different from finding a zero-length match at some point in the string. The optional *pos* and *endpos* parameters have the same meaning as for the - :meth:`match` method. + :meth:`~RegexObject.match` method. .. method:: RegexObject.split(string[, maxsplit=0]) @@ -814,10 +812,10 @@ support the following methods and attributes: .. method:: MatchObject.expand(template) Return the string obtained by doing backslash substitution on the template - string *template*, as done by the :meth:`sub` method. Escapes such as ``\n`` are - converted to the appropriate characters, and numeric backreferences (``\1``, - ``\2``) and named backreferences (``\g<1>``, ``\g``) are replaced by the - contents of the corresponding group. + string *template*, as done by the :meth:`~RegexObject.sub` method. Escapes + such as ``\n`` are converted to the appropriate characters, and numeric + backreferences (``\1``, ``\2``) and named backreferences (``\g<1>``, + ``\g``) are replaced by the contents of the corresponding group. .. method:: MatchObject.group([group1, ...]) @@ -938,16 +936,16 @@ support the following methods and attributes: .. attribute:: MatchObject.pos - The value of *pos* which was passed to the :func:`search` or :func:`match` - method of the :class:`RegexObject`. This is the index into the string at which - the RE engine started looking for a match. + The value of *pos* which was passed to the :meth:`~RegexObject.search` or + :meth:`~RegexObject.match` method of the :class:`RegexObject`. This is the + index into the string at which the RE engine started looking for a match. .. attribute:: MatchObject.endpos - The value of *endpos* which was passed to the :func:`search` or :func:`match` - method of the :class:`RegexObject`. This is the index into the string beyond - which the RE engine will not go. + The value of *endpos* which was passed to the :meth:`~RegexObject.search` or + :meth:`~RegexObject.match` method of the :class:`RegexObject`. This is the + index into the string beyond which the RE engine will not go. .. attribute:: MatchObject.lastindex @@ -967,13 +965,15 @@ support the following methods and attributes: .. attribute:: MatchObject.re - The regular expression object whose :meth:`match` or :meth:`search` method - produced this :class:`MatchObject` instance. + The regular expression object whose :meth:`~RegexObject.match` or + :meth:`~RegexObject.search` method produced this :class:`MatchObject` + instance. .. attribute:: MatchObject.string - The string passed to :func:`match` or :func:`search`. + The string passed to :meth:`~RegexObject.match` or + :meth:`~RegexObject.search`. Examples @@ -1018,8 +1018,9 @@ To match this with a regular expression, one could use backreferences as such: >>> displaymatch(pair.match("354aa")) # Pair of aces. "" -To find out what card the pair consists of, one could use the :func:`group` -method of :class:`MatchObject` in the following manner: +To find out what card the pair consists of, one could use the +:meth:`~MatchObject.group` method of :class:`MatchObject` in the following +manner: .. doctest:: diff --git a/Doc/library/reprlib.rst b/Doc/library/reprlib.rst index 0da29fc..17a6ac4 100644 --- a/Doc/library/reprlib.rst +++ b/Doc/library/reprlib.rst @@ -23,16 +23,17 @@ This module provides a class, an instance, and a function: .. data:: aRepr - This is an instance of :class:`Repr` which is used to provide the :func:`repr` - function described below. Changing the attributes of this object will affect - the size limits used by :func:`repr` and the Python debugger. + This is an instance of :class:`Repr` which is used to provide the + :func:`.repr` function described below. Changing the attributes of this + object will affect the size limits used by :func:`.repr` and the Python + debugger. .. function:: repr(obj) - This is the :meth:`repr` method of ``aRepr``. It returns a string similar to - that returned by the built-in function of the same name, but with limits on - most sizes. + This is the :meth:`~Repr.repr` method of ``aRepr``. It returns a string + similar to that returned by the built-in function of the same name, but with + limits on most sizes. .. _repr-objects: @@ -92,7 +93,7 @@ which format specific object types. .. method:: Repr.repr1(obj, level) - Recursive implementation used by :meth:`repr`. This uses the type of *obj* to + Recursive implementation used by :meth:`.repr`. This uses the type of *obj* to determine which formatting method to call, passing it *obj* and *level*. The type-specific methods should call :meth:`repr1` to perform recursive formatting, with ``level - 1`` for the value of *level* in the recursive call. diff --git a/Doc/library/select.rst b/Doc/library/select.rst index 6dbf16f..73e8cd9 100644 --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -299,7 +299,7 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 .. attribute:: kevent.filter - Name of the kernel filter + Name of the kernel filter. +---------------------------+---------------------------------------------+ | Constant | Meaning | @@ -308,7 +308,7 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | | there is data available to read | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_WRITE` | Takes a descriptor and returns whenever | - | | there is data available to read | + | | there is data available to write | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_AIO` | AIO requests | +---------------------------+---------------------------------------------+ @@ -328,7 +328,7 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 .. attribute:: kevent.flags - Filter action + Filter action. +---------------------------+---------------------------------------------+ | Constant | Meaning | @@ -357,10 +357,9 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 .. attribute:: kevent.fflags - Filter specific flags - + Filter specific flags. - :const:`KQ_FILTER_READ` and :const:`KQ_FILTER_WRITE` filter flags + :const:`KQ_FILTER_READ` and :const:`KQ_FILTER_WRITE` filter flags: +----------------------------+--------------------------------------------+ | Constant | Meaning | @@ -368,8 +367,7 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | :const:`KQ_NOTE_LOWAT` | low water mark of a socket buffer | +----------------------------+--------------------------------------------+ - - :const:`KQ_FILTER_VNODE` filter flags + :const:`KQ_FILTER_VNODE` filter flags: +----------------------------+--------------------------------------------+ | Constant | Meaning | @@ -389,8 +387,7 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | :const:`KQ_NOTE_REVOKE` | access to the file was revoked | +----------------------------+--------------------------------------------+ - - :const:`KQ_FILTER_PROC` filter flags + :const:`KQ_FILTER_PROC` filter flags: +----------------------------+--------------------------------------------+ | Constant | Meaning | @@ -413,7 +410,7 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | :const:`KQ_NOTE_TRACKERR` | unable to attach to a child | +----------------------------+--------------------------------------------+ - :const:`KQ_FILTER_NETDEV` filter flags [not available on Mac OS X] + :const:`KQ_FILTER_NETDEV` filter flags (not available on Mac OS X): +----------------------------+--------------------------------------------+ | Constant | Meaning | @@ -428,9 +425,9 @@ http://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 .. attribute:: kevent.data - Filter specific data + Filter specific data. .. attribute:: kevent.udata - User defined value + User defined value. diff --git a/Doc/library/shelve.rst b/Doc/library/shelve.rst index 62005a4..35ed84c 100644 --- a/Doc/library/shelve.rst +++ b/Doc/library/shelve.rst @@ -101,7 +101,7 @@ Restrictions .. class:: BsdDbShelf(dict[, protocol=None[, writeback=False]]) - A subclass of :class:`Shelf` which exposes :meth:`first`, :meth:`next`, + A subclass of :class:`Shelf` which exposes :meth:`first`, :meth:`!next`, :meth:`previous`, :meth:`last` and :meth:`set_location` which are available in the third-party :mod:`bsddb` module from `pybsddb `_ but not in other database @@ -117,7 +117,7 @@ Restrictions A subclass of :class:`Shelf` which accepts a *filename* instead of a dict-like object. The underlying file will be opened using :func:`dbm.open`. By default, the file will be created and opened for both read and write. The - optional *flag* parameter has the same interpretation as for the :func:`open` + optional *flag* parameter has the same interpretation as for the :func:`.open` function. The optional *protocol* and *writeback* parameters have the same interpretation as for the :class:`Shelf` class. diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index cda8fee..e6ad578 100644 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -555,6 +555,8 @@ correspond to Unix system calls applicable to sockets. The :meth:`ioctl` method is a limited interface to the WSAIoctl system interface. Please refer to the MSDN documentation for more information. + On other platforms, the generic :func:`fcntl.fcntl` and :func:`fcntl.ioctl` + functions may be used; they accept a socket object as their first argument. .. method:: socket.listen(backlog) diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 53164b8..a4d9c7f 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -822,7 +822,7 @@ directly using only a single call on the :class:`Connection` object. Accessing columns by name instead of by index ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -One useful feature of the :mod:`sqlite3` module is the builtin +One useful feature of the :mod:`sqlite3` module is the built-in :class:`sqlite3.Row` class designed to be used as a row factory. Rows wrapped with this class can be accessed both by index (like tuples) and diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index 1ccc457..14ad15e 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -120,25 +120,24 @@ Notes: Comparisons =========== -.. index:: pair: chaining; comparisons - -There are eight comparison operations in Python. They all have the same -priority (which is higher than that of the Boolean operations). Comparisons can -be chained arbitrarily; for example, ``x < y <= z`` is equivalent to ``x < y and -y <= z``, except that *y* is evaluated only once (but in both cases *z* is not -evaluated at all when ``x < y`` is found to be false). - .. index:: + pair: chaining; comparisons pair: operator; comparison operator: == operator: < - operator: > operator: <= + operator: > operator: >= operator: != operator: is operator: is not +There are eight comparison operations in Python. They all have the same +priority (which is higher than that of the Boolean operations). Comparisons can +be chained arbitrarily; for example, ``x < y <= z`` is equivalent to ``x < y and +y <= z``, except that *y* is evaluated only once (but in both cases *z* is not +evaluated at all when ``x < y`` is found to be false). + This table summarizes the comparison operations: +------------+-------------------------+ @@ -248,6 +247,13 @@ and imaginary parts. builtin: int builtin: float builtin: complex + operator: + + operator: - + operator: * + operator: / + operator: // + operator: % + operator: ** Python fully supports mixed arithmetic: when a binary arithmetic operator has operands of different numeric types, the operand with the "narrower" type is @@ -368,7 +374,15 @@ modules. Bit-string Operations on Integer Types -------------------------------------- -.. _bit-string-operations: +.. index:: + triple: operations on; integer; types + pair: bit-string; operations + pair: shifting; operations + pair: masking; operations + operator: ^ + operator: & + operator: << + operator: >> Integers support additional operations that make sense only for bit-strings. Negative numbers are treated as their 2's complement value (this assumes a @@ -400,12 +414,6 @@ This table lists the bit-string operations sorted in ascending priority | ``~x`` | the bits of *x* inverted | | +------------+--------------------------------+----------+ -.. index:: - triple: operations on; integer; types - pair: bit-string; operations - pair: shifting; operations - pair: masking; operations - Notes: (1) @@ -1595,7 +1603,7 @@ set``. Being an unordered collection, sets do not record element position or order of insertion. Accordingly, sets do not support indexing, slicing, or other sequence-like behavior. -There are currently two builtin set types, :class:`set` and :class:`frozenset`. +There are currently two built-in set types, :class:`set` and :class:`frozenset`. The :class:`set` type is mutable --- the contents can be changed using methods like :meth:`add` and :meth:`remove`. Since it is mutable, it has no hash value and cannot be used as either a dictionary key or as an element of another set. diff --git a/Doc/library/string.rst b/Doc/library/string.rst index 215e76d..95d27f1 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -287,7 +287,7 @@ Format Specification Mini-Language "Format specifications" are used within replacement fields contained within a format string to define how individual values are presented (see -:ref:`formatstrings`.) They can also be passed directly to the builtin +:ref:`formatstrings`.) They can also be passed directly to the built-in :func:`format` function. Each formattable type may define how the format specification is to be interpreted. diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst index 9930133..3f231b4 100644 --- a/Doc/library/sunau.rst +++ b/Doc/library/sunau.rst @@ -58,18 +58,18 @@ The :mod:`sunau` module defines the following functions: .. function:: openfp(file, mode) - A synonym for :func:`open`, maintained for backwards compatibility. + A synonym for :func:`.open`, maintained for backwards compatibility. -The :mod:`sunau` module defines the following exception: +The :mod:`sunau` module defines the following exception: .. exception:: Error An error raised when something is impossible because of Sun AU specs or implementation deficiency. -The :mod:`sunau` module defines the following data items: +The :mod:`sunau` module defines the following data items: .. data:: AUDIO_FILE_MAGIC @@ -104,7 +104,7 @@ The :mod:`sunau` module defines the following data items: AU_read Objects --------------- -AU_read objects, as returned by :func:`open` above, have the following methods: +AU_read objects, as returned by :func:`.open` above, have the following methods: .. method:: AU_read.close() @@ -197,7 +197,7 @@ and don't do anything interesting. AU_write Objects ---------------- -AU_write objects, as returned by :func:`open` above, have the following methods: +AU_write objects, as returned by :func:`.open` above, have the following methods: .. method:: AU_write.setnchannels(n) diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index ba22dc3..d28f6b4 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -736,7 +736,7 @@ always available. ``'c_call'`` A C function is about to be called. This may be an extension function or - a builtin. *arg* is the C function object. + a built-in. *arg* is the C function object. ``'c_return'`` A C function has returned. *arg* is ``None``. diff --git a/Doc/library/tempfile.rst b/Doc/library/tempfile.rst index 36c8753..722c5ee 100644 --- a/Doc/library/tempfile.rst +++ b/Doc/library/tempfile.rst @@ -48,7 +48,7 @@ The module defines the following user-callable functions: The *dir*, *prefix* and *suffix* parameters are passed to :func:`mkstemp`. The returned object is a true file object on POSIX platforms. On other - platforms, it is a file-like object whose :attr:`file` attribute is the + platforms, it is a file-like object whose :attr:`!file` attribute is the underlying true file object. This file-like object can be used in a :keyword:`with` statement, just like a normal file. @@ -63,7 +63,7 @@ The module defines the following user-callable functions: still open, varies across platforms (it can be so used on Unix; it cannot on Windows NT or later). If *delete* is true (the default), the file is deleted as soon as it is closed. - The returned object is always a file-like object whose :attr:`file` + The returned object is always a file-like object whose :attr:`!file` attribute is the underlying true file object. This file-like object can be used in a :keyword:`with` statement, just like a normal file. diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index d880157..86a9bf8 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -1,4 +1,3 @@ - :mod:`threading` --- Higher-level threading interface ===================================================== @@ -55,8 +54,9 @@ This module defines the following functions and objects: :noindex: A factory function that returns a new event object. An event manages a flag - that can be set to true with the :meth:`set` method and reset to false with the - :meth:`clear` method. The :meth:`wait` method blocks until the flag is true. + that can be set to true with the :meth:`~Event.set` method and reset to false + with the :meth:`clear` method. The :meth:`wait` method blocks until the flag + is true. .. class:: local @@ -213,7 +213,8 @@ impossible to detect the termination of alien threads. .. class:: Thread(group=None, target=None, name=None, args=(), kwargs={}) - This constructor should always be called with keyword arguments. Arguments are: + This constructor should always be called with keyword arguments. Arguments + are: *group* should be ``None``; reserved for future extension when a :class:`ThreadGroup` class is implemented. @@ -221,111 +222,103 @@ impossible to detect the termination of alien threads. *target* is the callable object to be invoked by the :meth:`run` method. Defaults to ``None``, meaning nothing is called. - *name* is the thread name. By default, a unique name is constructed of the form - "Thread-*N*" where *N* is a small decimal number. + *name* is the thread name. By default, a unique name is constructed of the + form "Thread-*N*" where *N* is a small decimal number. *args* is the argument tuple for the target invocation. Defaults to ``()``. *kwargs* is a dictionary of keyword arguments for the target invocation. Defaults to ``{}``. - If the subclass overrides the constructor, it must make sure to invoke the base - class constructor (``Thread.__init__()``) before doing anything else to the - thread. - - -.. method:: Thread.start() - - Start the thread's activity. - - It must be called at most once per thread object. It arranges for the object's - :meth:`run` method to be invoked in a separate thread of control. + If the subclass overrides the constructor, it must make sure to invoke the + base class constructor (``Thread.__init__()``) before doing anything else to + the thread. - This method will raise a :exc:`RuntimeException` if called more than once on the - same thread object. + .. method:: start() + Start the thread's activity. -.. method:: Thread.run() + It must be called at most once per thread object. It arranges for the + object's :meth:`run` method to be invoked in a separate thread of control. - Method representing the thread's activity. + This method will raise a :exc:`RuntimeException` if called more than once + on the same thread object. - You may override this method in a subclass. The standard :meth:`run` method - invokes the callable object passed to the object's constructor as the *target* - argument, if any, with sequential and keyword arguments taken from the *args* - and *kwargs* arguments, respectively. + .. method:: run() + Method representing the thread's activity. -.. method:: Thread.join([timeout]) + You may override this method in a subclass. The standard :meth:`run` + method invokes the callable object passed to the object's constructor as + the *target* argument, if any, with sequential and keyword arguments taken + from the *args* and *kwargs* arguments, respectively. - Wait until the thread terminates. This blocks the calling thread until the - thread whose :meth:`join` method is called terminates -- either normally or - through an unhandled exception -- or until the optional timeout occurs. + .. method:: join([timeout]) - When the *timeout* argument is present and not ``None``, it should be a floating - point number specifying a timeout for the operation in seconds (or fractions - thereof). As :meth:`join` always returns ``None``, you must call :meth:`is_alive` - after :meth:`join` to decide whether a timeout happened -- if the thread is - still alive, the :meth:`join` call timed out. + Wait until the thread terminates. This blocks the calling thread until the + thread whose :meth:`join` method is called terminates -- either normally + or through an unhandled exception -- or until the optional timeout occurs. - When the *timeout* argument is not present or ``None``, the operation will block - until the thread terminates. + When the *timeout* argument is present and not ``None``, it should be a + floating point number specifying a timeout for the operation in seconds + (or fractions thereof). As :meth:`join` always returns ``None``, you must + call :meth:`is_alive` after :meth:`join` to decide whether a timeout + happened -- if the thread is still alive, the :meth:`join` call timed out. - A thread can be :meth:`join`\ ed many times. + When the *timeout* argument is not present or ``None``, the operation will + block until the thread terminates. - :meth:`join` raises a :exc:`RuntimeError` if an attempt is made to join - the current thread as that would cause a deadlock. It is also an error to - :meth:`join` a thread before it has been started and attempts to do so - raises the same exception. + A thread can be :meth:`join`\ ed many times. + :meth:`join` raises a :exc:`RuntimeError` if an attempt is made to join + the current thread as that would cause a deadlock. It is also an error to + :meth:`join` a thread before it has been started and attempts to do so + raises the same exception. -.. attribute:: Thread.name + .. attribute:: name - A string used for identification purposes only. It has no semantics. - Multiple threads may be given the same name. The initial name is set by the - constructor. + A string used for identification purposes only. It has no semantics. + Multiple threads may be given the same name. The initial name is set by + the constructor. + .. method:: getName() + setName() -.. method:: Thread.getName() - Thread.setName() + Old getter/setter API for :attr:`~Thread.name`; use it directly as a + property instead. - Old getter/setter API for :attr:`~Thread.name`; use it directly as a property - instead. + .. attribute:: ident + The 'thread identifier' of this thread or ``None`` if the thread has not + been started. This is a nonzero integer. See the + :func:`thread.get_ident()` function. Thread identifiers may be recycled + when a thread exits and another thread is created. The identifier is + available even after the thread has exited. -.. attribute:: Thread.ident + .. method:: is_alive() - The 'thread identifier' of this thread or ``None`` if the thread has not been - started. This is a nonzero integer. See the :func:`thread.get_ident()` - function. Thread identifiers may be recycled when a thread exits and another - thread is created. The identifier is available even after the thread has - exited. + Return whether the thread is alive. + Roughly, a thread is alive from the moment the :meth:`start` method + returns until its :meth:`run` method terminates. The module function + :func:`enumerate` returns a list of all alive threads. -.. method:: Thread.is_alive() + .. attribute:: daemon - Return whether the thread is alive. + A boolean value indicating whether this thread is a daemon thread (True) + or not (False). This must be set before :meth:`start` is called, + otherwise :exc:`RuntimeError` is raised. Its initial value is inherited + from the creating thread; the main thread is not a daemon thread and + therefore all threads created in the main thread default to :attr:`daemon` + = ``False``. - Roughly, a thread is alive from the moment the :meth:`start` method returns - until its :meth:`run` method terminates. The module function :func:`enumerate` - returns a list of all alive threads. + The entire Python program exits when no alive non-daemon threads are left. + .. method:: isDaemon() + setDaemon() -.. attribute:: Thread.daemon - - A boolean value indicating whether this thread is a daemon thread (True) or - not (False). This must be set before :meth:`start` is called, otherwise - :exc:`RuntimeError` is raised. Its initial value is inherited from the - creating thread; the main thread is not a daemon thread and therefore all - threads created in the main thread default to :attr:`daemon` = ``False``. - - The entire Python program exits when no alive non-daemon threads are left. - - -.. method:: Thread.isDaemon() - Thread.setDaemon() - - Old getter/setter API for :attr:`~Thread.daemon`; use it directly as a - property instead. + Old getter/setter API for :attr:`~Thread.daemon`; use it directly as a + property instead. .. _lock-objects: @@ -496,69 +489,66 @@ needs to wake up one consumer thread. .. class:: Condition([lock]) - If the *lock* argument is given and not ``None``, it must be a :class:`Lock` or - :class:`RLock` object, and it is used as the underlying lock. Otherwise, a new - :class:`RLock` object is created and used as the underlying lock. - + If the *lock* argument is given and not ``None``, it must be a :class:`Lock` + or :class:`RLock` object, and it is used as the underlying lock. Otherwise, + a new :class:`RLock` object is created and used as the underlying lock. -.. method:: Condition.acquire(*args) + .. method:: acquire(*args) - Acquire the underlying lock. This method calls the corresponding method on the - underlying lock; the return value is whatever that method returns. + Acquire the underlying lock. This method calls the corresponding method on + the underlying lock; the return value is whatever that method returns. + .. method:: release() -.. method:: Condition.release() + Release the underlying lock. This method calls the corresponding method on + the underlying lock; there is no return value. - Release the underlying lock. This method calls the corresponding method on the - underlying lock; there is no return value. + .. method:: wait([timeout]) + Wait until notified or until a timeout occurs. If the calling thread has + not acquired the lock when this method is called, a :exc:`RuntimeError` is + raised. -.. method:: Condition.wait([timeout]) + This method releases the underlying lock, and then blocks until it is + awakened by a :meth:`notify` or :meth:`notify_all` call for the same + condition variable in another thread, or until the optional timeout + occurs. Once awakened or timed out, it re-acquires the lock and returns. - Wait until notified or until a timeout occurs. If the calling thread has not - acquired the lock when this method is called, a :exc:`RuntimeError` is raised. + When the *timeout* argument is present and not ``None``, it should be a + floating point number specifying a timeout for the operation in seconds + (or fractions thereof). - This method releases the underlying lock, and then blocks until it is awakened - by a :meth:`notify` or :meth:`notify_all` call for the same condition variable in - another thread, or until the optional timeout occurs. Once awakened or timed - out, it re-acquires the lock and returns. + When the underlying lock is an :class:`RLock`, it is not released using + its :meth:`release` method, since this may not actually unlock the lock + when it was acquired multiple times recursively. Instead, an internal + interface of the :class:`RLock` class is used, which really unlocks it + even when it has been recursively acquired several times. Another internal + interface is then used to restore the recursion level when the lock is + reacquired. - When the *timeout* argument is present and not ``None``, it should be a floating - point number specifying a timeout for the operation in seconds (or fractions - thereof). + .. method:: notify() - When the underlying lock is an :class:`RLock`, it is not released using its - :meth:`release` method, since this may not actually unlock the lock when it was - acquired multiple times recursively. Instead, an internal interface of the - :class:`RLock` class is used, which really unlocks it even when it has been - recursively acquired several times. Another internal interface is then used to - restore the recursion level when the lock is reacquired. + Wake up a thread waiting on this condition, if any. If the calling thread + has not acquired the lock when this method is called, a + :exc:`RuntimeError` is raised. + This method wakes up one of the threads waiting for the condition + variable, if any are waiting; it is a no-op if no threads are waiting. -.. method:: Condition.notify() + The current implementation wakes up exactly one thread, if any are + waiting. However, it's not safe to rely on this behavior. A future, + optimized implementation may occasionally wake up more than one thread. - Wake up a thread waiting on this condition, if any. If the calling thread - has not acquired the lock when this method is called, a :exc:`RuntimeError` - is raised. + Note: the awakened thread does not actually return from its :meth:`wait` + call until it can reacquire the lock. Since :meth:`notify` does not + release the lock, its caller should. - This method wakes up one of the threads waiting for the condition variable, - if any are waiting; it is a no-op if no threads are waiting. + .. method:: notify_all() - The current implementation wakes up exactly one thread, if any are waiting. - However, it's not safe to rely on this behavior. A future, optimized - implementation may occasionally wake up more than one thread. - - Note: the awakened thread does not actually return from its :meth:`wait` call - until it can reacquire the lock. Since :meth:`notify` does not release the - lock, its caller should. - - -.. method:: Condition.notify_all() - - Wake up all threads waiting on this condition. This method acts like - :meth:`notify`, but wakes up all waiting threads instead of one. If the calling - thread has not acquired the lock when this method is called, a - :exc:`RuntimeError` is raised. + Wake up all threads waiting on this condition. This method acts like + :meth:`notify`, but wakes up all waiting threads instead of one. If the + calling thread has not acquired the lock when this method is called, a + :exc:`RuntimeError` is raised. .. _semaphore-objects: @@ -582,33 +572,31 @@ waiting until some other thread calls :meth:`release`. defaults to ``1``. If the *value* given is less than 0, :exc:`ValueError` is raised. + .. method:: acquire([blocking]) -.. method:: Semaphore.acquire([blocking]) - - Acquire a semaphore. - - When invoked without arguments: if the internal counter is larger than zero on - entry, decrement it by one and return immediately. If it is zero on entry, - block, waiting until some other thread has called :meth:`release` to make it - larger than zero. This is done with proper interlocking so that if multiple - :meth:`acquire` calls are blocked, :meth:`release` will wake exactly one of them - up. The implementation may pick one at random, so the order in which blocked - threads are awakened should not be relied on. There is no return value in this - case. + Acquire a semaphore. - When invoked with *blocking* set to true, do the same thing as when called - without arguments, and return true. + When invoked without arguments: if the internal counter is larger than + zero on entry, decrement it by one and return immediately. If it is zero + on entry, block, waiting until some other thread has called + :meth:`release` to make it larger than zero. This is done with proper + interlocking so that if multiple :meth:`acquire` calls are blocked, + :meth:`release` will wake exactly one of them up. The implementation may + pick one at random, so the order in which blocked threads are awakened + should not be relied on. There is no return value in this case. - When invoked with *blocking* set to false, do not block. If a call without an - argument would block, return false immediately; otherwise, do the same thing as - when called without arguments, and return true. + When invoked with *blocking* set to true, do the same thing as when called + without arguments, and return true. + When invoked with *blocking* set to false, do not block. If a call + without an argument would block, return false immediately; otherwise, do + the same thing as when called without arguments, and return true. -.. method:: Semaphore.release() + .. method:: release() - Release a semaphore, incrementing the internal counter by one. When it was zero - on entry and another thread is waiting for it to become larger than zero again, - wake up that thread. + Release a semaphore, incrementing the internal counter by one. When it + was zero on entry and another thread is waiting for it to become larger + than zero again, wake up that thread. .. _semaphore-examples: @@ -647,7 +635,7 @@ This is one of the simplest mechanisms for communication between threads: one thread signals an event and other threads wait for it. An event object manages an internal flag that can be set to true with the -:meth:`set` method and reset to false with the :meth:`clear` method. The +:meth:`~Event.set` method and reset to false with the :meth:`clear` method. The :meth:`wait` method blocks until the flag is true. @@ -655,40 +643,37 @@ An event object manages an internal flag that can be set to true with the The internal flag is initially false. + .. method:: is_set() -.. method:: Event.is_set() + Return true if and only if the internal flag is true. - Return true if and only if the internal flag is true. + .. method:: set() + Set the internal flag to true. All threads waiting for it to become true + are awakened. Threads that call :meth:`wait` once the flag is true will + not block at all. -.. method:: Event.set() + .. method:: clear() - Set the internal flag to true. All threads waiting for it to become true are - awakened. Threads that call :meth:`wait` once the flag is true will not block at - all. + Reset the internal flag to false. Subsequently, threads calling + :meth:`wait` will block until :meth:`.set` is called to set the internal + flag to true again. + .. method:: wait([timeout]) -.. method:: Event.clear() + Block until the internal flag is true. If the internal flag is true on + entry, return immediately. Otherwise, block until another thread calls + :meth:`set` to set the flag to true, or until the optional timeout occurs. - Reset the internal flag to false. Subsequently, threads calling :meth:`wait` - will block until :meth:`set` is called to set the internal flag to true again. + When the timeout argument is present and not ``None``, it should be a + floating point number specifying a timeout for the operation in seconds + (or fractions thereof). + This method returns the internal flag on exit, so it will always return + ``True`` except if a timeout is given and the operation times out. -.. method:: Event.wait([timeout]) - - Block until the internal flag is true. If the internal flag is true on entry, - return immediately. Otherwise, block until another thread calls :meth:`set` - to set the flag to true, or until the optional timeout occurs. - - When the timeout argument is present and not ``None``, it should be a floating - point number specifying a timeout for the operation in seconds (or fractions - thereof). - - This method returns the internal flag on exit, so it will always return - ``True`` except if a timeout is given and the operation times out. - - .. versionchanged:: 3.1 - Previously, the method always returned ``None``. + .. versionchanged:: 3.1 + Previously, the method always returned ``None``. .. _timer-objects: @@ -719,11 +704,10 @@ For example:: Create a timer that will run *function* with arguments *args* and keyword arguments *kwargs*, after *interval* seconds have passed. + .. method:: cancel() -.. method:: Timer.cancel() - - Stop the timer, and cancel the execution of the timer's action. This will only - work if the timer is still in its waiting stage. + Stop the timer, and cancel the execution of the timer's action. This will + only work if the timer is still in its waiting stage. .. _with-locks: diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst index 7413987..74e3fbb 100644 --- a/Doc/library/tkinter.rst +++ b/Doc/library/tkinter.rst @@ -511,7 +511,7 @@ defined in the :mod:`tkinter`. There are many useful subclasses of Variable already defined: :class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and :class:`BooleanVar`. To read the current value of such a variable, call the -:meth:`get` method on it, and to change its value you call the :meth:`set` +:meth:`get` method on it, and to change its value you call the :meth:`!set` method. If you follow this protocol, the widget will always track the value of the variable, with no further intervention on your part. @@ -652,7 +652,7 @@ relief ``"raised"``, ``"sunken"``, ``"flat"``, ``"groove"``, and ``"ridge"``. scrollcommand - This is almost always the :meth:`set` method of some scrollbar widget, but can + This is almost always the :meth:`!set` method of some scrollbar widget, but can be any widget method that takes a single argument. Refer to the file :file:`Demo/tkinter/matt/canvas-with-scrollbars.py` in the Python source distribution for an example. diff --git a/Doc/library/undoc.rst b/Doc/library/undoc.rst index 987f95e..6dd1aed 100644 --- a/Doc/library/undoc.rst +++ b/Doc/library/undoc.rst @@ -25,4 +25,3 @@ documented beyond this mention. There's little need to document these. :mod:`posixpath` --- Implementation of :mod:`os.path` on POSIX. - diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index 28fa66f..161614b 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -249,9 +249,9 @@ The :mod:`urllib.parse` module defines the following functions: .. function:: quote_plus(string[, safe[, encoding[, errors]]]) Like :func:`quote`, but also replace spaces by plus signs, as required for - quoting HTML form values. Plus signs in the original string are escaped - unless they are included in *safe*. It also does not have *safe* default to - ``'/'``. + quoting HTML form values when building up a query string to go into a URL. + Plus signs in the original string are escaped unless they are included in + *safe*. It also does not have *safe* default to ``'/'``. Example: ``quote_plus('/El Niño/')`` yields ``'%2FEl+Ni%C3%B1o%2F'``. diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst index f6856ff..1574e27 100644 --- a/Doc/library/warnings.rst +++ b/Doc/library/warnings.rst @@ -206,7 +206,7 @@ check:: fxn() # Verify some things assert len(w) == 1 - assert isinstance(w[-1].category, DeprecationWarning) + assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message) One can also cause all warnings to be exceptions by using ``error`` instead of diff --git a/Doc/library/wave.rst b/Doc/library/wave.rst index b931fed..3be0343 100644 --- a/Doc/library/wave.rst +++ b/Doc/library/wave.rst @@ -33,7 +33,7 @@ The :mod:`wave` module defines the following function and exception: .. function:: openfp(file, mode) - A synonym for :func:`open`, maintained for backwards compatibility. + A synonym for :func:`.open`, maintained for backwards compatibility. .. exception:: Error @@ -47,7 +47,7 @@ The :mod:`wave` module defines the following function and exception: Wave_read Objects ----------------- -Wave_read objects, as returned by :func:`open`, have the following methods: +Wave_read objects, as returned by :func:`.open`, have the following methods: .. method:: Wave_read.close() @@ -134,7 +134,7 @@ them, and is otherwise implementation dependent. Wave_write Objects ------------------ -Wave_write objects, as returned by :func:`open`, have the following methods: +Wave_write objects, as returned by :func:`.open`, have the following methods: .. method:: Wave_write.close() diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst index 0f3ebe6..7c7be95 100644 --- a/Doc/library/weakref.rst +++ b/Doc/library/weakref.rst @@ -62,7 +62,7 @@ instances, functions written in Python (but not in C), instance methods, sets, frozensets, file objects, :term:`generator`\s, type objects, sockets, arrays, deques, and regular expression pattern objects. -Several builtin types such as :class:`list` and :class:`dict` do not directly +Several built-in types such as :class:`list` and :class:`dict` do not directly support weak references but can add support through subclassing:: class Dict(dict): diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst index 975d668..01720d1 100644 --- a/Doc/library/webbrowser.rst +++ b/Doc/library/webbrowser.rst @@ -10,7 +10,7 @@ The :mod:`webbrowser` module provides a high-level interface to allow displaying Web-based documents to users. Under most circumstances, simply calling the -:func:`open` function from this module will do the right thing. +:func:`.open` function from this module will do the right thing. Under Unix, graphical browsers are preferred under X11, but text-mode browsers will be used if graphical browsers are not available or an X11 display isn't @@ -46,14 +46,14 @@ The following exception is defined: The following functions are defined: -.. function:: open(url[, new=0[, autoraise=1]]) +.. function:: open(url[, new=0[, autoraise=True]]) - Display *url* using the default browser. If *new* is 0, the *url* is opened in - the same browser window if possible. If *new* is 1, a new browser window is - opened if possible. If *new* is 2, a new browser page ("tab") is opened if - possible. If *autoraise* is true, the window is raised if possible (note that - under many window managers this will occur regardless of the setting of this - variable). + Display *url* using the default browser. If *new* is 0, the *url* is opened + in the same browser window if possible. If *new* is 1, a new browser window + is opened if possible. If *new* is 2, a new browser page ("tab") is opened + if possible. If *autoraise* is ``True``, the window is raised if possible + (note that under many window managers this will occur regardless of the + setting of this variable). Note that on some platforms, trying to open a filename using this function, may work and start the operating system's associated program. However, this @@ -175,7 +175,7 @@ Browser controllers provide these methods which parallel three of the module-level convenience functions: -.. method:: controller.open(url[, new[, autoraise=1]]) +.. method:: controller.open(url[, new[, autoraise=True]]) Display *url* using the browser handled by this controller. If *new* is 1, a new browser window is opened if possible. If *new* is 2, a new browser page ("tab") diff --git a/Doc/library/winreg.rst b/Doc/library/winreg.rst index f42e7f2..f048067 100644 --- a/Doc/library/winreg.rst +++ b/Doc/library/winreg.rst @@ -399,7 +399,7 @@ detached). The object also support comparison semantics, so handle objects will compare true if they both reference the same underlying Windows handle value. -Handle objects can be converted to an integer (e.g., using the builtin +Handle objects can be converted to an integer (e.g., using the built-in :func:`int` function), in which case the underlying Windows handle value is returned. You can also use the :meth:`Detach` method to return the integer handle, and also disconnect the Windows handle from the handle object. diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst index a04b04a..939af6e 100644 --- a/Doc/library/xml.etree.elementtree.rst +++ b/Doc/library/xml.etree.elementtree.rst @@ -262,9 +262,9 @@ The following methods work on the element's children (subelements). .. method:: Element.getiterator([tag=None]) Creates a tree iterator with the current element as the root. The iterator - iterates over this element and all elements below it that match the given tag. - If tag is ``None`` or ``'*'`` then all elements are iterated over. Returns an - iterable that provides element objects in document (depth first) order. + iterates over this element and all elements below it, in document (depth first) + order. If *tag* is not ``None`` or ``'*'``, only elements whose tag equals + *tag* are returned from the iterator. .. method:: Element.insert(index, element) diff --git a/Doc/library/xmlrpc.client.rst b/Doc/library/xmlrpc.client.rst index 1601430..e004fa7 100644 --- a/Doc/library/xmlrpc.client.rst +++ b/Doc/library/xmlrpc.client.rst @@ -87,7 +87,7 @@ between conformable Python objects and XML on the wire. :exc:`ProtocolError` used to signal an error in the HTTP/HTTPS transport layer. Both :exc:`Fault` and :exc:`ProtocolError` derive from a base class called :exc:`Error`. Note that the xmlrpc client module currently does not marshal - instances of subclasses of builtin types. + instances of subclasses of built-in types. When passing strings, characters special to XML such as ``<``, ``>``, and ``&`` will be automatically escaped. However, it's the caller's responsibility to diff --git a/Doc/library/zipimport.rst b/Doc/library/zipimport.rst index 3fd0595..2315823 100644 --- a/Doc/library/zipimport.rst +++ b/Doc/library/zipimport.rst @@ -10,7 +10,7 @@ This module adds the ability to import Python modules (:file:`\*.py`, :file:`\*.py[co]`) and packages from ZIP-format archives. It is usually not needed to use the :mod:`zipimport` module explicitly; it is automatically used -by the builtin :keyword:`import` mechanism for ``sys.path`` items that are paths +by the built-in :keyword:`import` mechanism for ``sys.path`` items that are paths to ZIP archives. Typically, ``sys.path`` is a list of directory names as strings. This module diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index d0aa59f..14e0b20 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1304,7 +1304,7 @@ access (use of, assignment to, or deletion of ``x.name``) for class instances. .. note:: This method may still be bypassed when looking up special methods as the - result of implicit invocation via language syntax or builtin functions. + result of implicit invocation via language syntax or built-in functions. See :ref:`special-lookup`. @@ -1696,12 +1696,12 @@ through the container; for mappings, :meth:`__iter__` should be the same as .. method:: object.__reversed__(self) - Called (if present) by the :func:`reversed` builtin to implement + Called (if present) by the :func:`reversed` built-in to implement reverse iteration. It should return a new iterator object that iterates over all the objects in the container in reverse order. If the :meth:`__reversed__` method is not provided, the :func:`reversed` - builtin will fall back to using the sequence protocol (:meth:`__len__` and + built-in will fall back to using the sequence protocol (:meth:`__len__` and :meth:`__getitem__`). Objects that support the sequence protocol should only provide :meth:`__reversed__` if they can provide an implementation that is more efficient than the one provided by :func:`reversed`. diff --git a/Doc/reference/executionmodel.rst b/Doc/reference/executionmodel.rst index 92a1b31..68ee654 100644 --- a/Doc/reference/executionmodel.rst +++ b/Doc/reference/executionmodel.rst @@ -112,8 +112,8 @@ If the :keyword:`global` statement occurs within a block, all uses of the name specified in the statement refer to the binding of that name in the top-level namespace. Names are resolved in the top-level namespace by searching the global namespace, i.e. the namespace of the module containing the code block, -and the builtin namespace, the namespace of the module :mod:`builtins`. The -global namespace is searched first. If the name is not found there, the builtin +and the builtins namespace, the namespace of the module :mod:`builtins`. The +global namespace is searched first. If the name is not found there, the builtins namespace is searched. The global statement must precede all uses of the name. .. XXX document "nonlocal" semantics here diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index b02c696..cdb802a 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -641,7 +641,7 @@ the call. .. note:: - An implementation may provide builtin functions whose positional parameters do + An implementation may provide built-in functions whose positional parameters do not have names, even if they are 'named' for the purpose of documentation, and which therefore cannot be supplied by keyword. In CPython, this is the case for functions implemented in C that use :cfunc:`PyArg_ParseTuple` to parse their @@ -996,7 +996,7 @@ operators *always* consider objects of different types to be unequal, while the ``<``, ``>``, ``>=`` and ``<=`` operators raise a :exc:`TypeError` when comparing objects of different types that do not implement these operators for the given pair of types. You can control comparison behavior of objects of -non-builtin types by defining rich comparison methods like :meth:`__gt__`, +non-built-in types by defining rich comparison methods like :meth:`__gt__`, described in section :ref:`customization`. Comparison of objects of the same type depends on the type: @@ -1037,7 +1037,7 @@ Comparison of objects of the same type depends on the type: which depend on total ordering. For example, :func:`min`, :func:`max`, and :func:`sorted` produce undefined results given a list of sets as inputs. -* Most other objects of builtin types compare unequal unless they are the same +* Most other objects of built-in types compare unequal unless they are the same object; the choice whether one object is considered smaller or larger than another one is made arbitrarily but consistently within one execution of a program. diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index ced3398..2a34b69 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -881,7 +881,7 @@ Note that there is nothing special about the statement:: That is not a future statement; it's an ordinary import statement with no special semantics or syntax restrictions. -Code compiled by calls to the builtin functions :func:`exec` and :func:`compile` +Code compiled by calls to the built-in functions :func:`exec` and :func:`compile` that occur in a module :mod:`M` containing a future statement will, by default, use the new syntax or semantics associated with the future statement. This can be controlled by optional arguments to :func:`compile` --- see the documentation diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst index 191e95c..0cb5593 100644 --- a/Doc/tutorial/classes.rst +++ b/Doc/tutorial/classes.rst @@ -12,44 +12,41 @@ user not to "break into the definition." The most important features of classes are retained with full power, however: the class inheritance mechanism allows multiple base classes, a derived class can override any methods of its base class or classes, and a method can call the method of a base class with the same -name. Objects can contain an arbitrary amount of private data. +name. Objects can contain an arbitrary amount of data. In C++ terminology, normally class members (including the data members) are *public* (except see below :ref:`tut-private`), -and all member functions are *virtual*. There are no special constructors or -destructors. As in Modula-3, there are no shorthands for referencing the -object's members from its methods: the method function is declared with an -explicit first argument representing the object, which is provided implicitly by -the call. As in Smalltalk, classes themselves are objects, albeit in the wider -sense of the word: in Python, all data types are objects. This provides -semantics for importing and renaming. Unlike C++ and Modula-3, built-in types -can be used as base classes for extension by the user. Also, like in C++ but -unlike in Modula-3, most built-in operators with special syntax (arithmetic +and all member functions are *virtual*. As in Modula-3, there are no shorthands +for referencing the object's members from its methods: the method function is +declared with an explicit first argument representing the object, which is +provided implicitly by the call. As in Smalltalk, classes themselves are +objects. This provides semantics for importing and renaming. Unlike C++ and +Modula-3, built-in types can be used as base classes for extension by the user. +Also, like in C++, most built-in operators with special syntax (arithmetic operators, subscripting etc.) can be redefined for class instances. +(Lacking universally accepted terminology to talk about classes, I will make +occasional use of Smalltalk and C++ terms. I would use Modula-3 terms, since +its object-oriented semantics are closer to those of Python than C++, but I +expect that few readers have heard of it.) -.. _tut-terminology: -A Word About Terminology -======================== +.. _tut-object: -Lacking universally accepted terminology to talk about classes, I will make -occasional use of Smalltalk and C++ terms. (I would use Modula-3 terms, since -its object-oriented semantics are closer to those of Python than C++, but I -expect that few readers have heard of it.) +A Word About Names and Objects +============================== Objects have individuality, and multiple names (in multiple scopes) can be bound to the same object. This is known as aliasing in other languages. This is usually not appreciated on a first glance at Python, and can be safely ignored when dealing with immutable basic types (numbers, strings, tuples). However, -aliasing has an (intended!) effect on the semantics of Python code involving -mutable objects such as lists, dictionaries, and most types representing -entities outside the program (files, windows, etc.). This is usually used to -the benefit of the program, since aliases behave like pointers in some respects. -For example, passing an object is cheap since only a pointer is passed by the -implementation; and if a function modifies an object passed as an argument, the -caller will see the change --- this eliminates the need for two different -argument passing mechanisms as in Pascal. +aliasing has a possibly surprising effect on the semantics of Python code +involving mutable objects such as lists, dictionaries, and most other types. +This is usually used to the benefit of the program, since aliases behave like +pointers in some respects. For example, passing an object is cheap since only a +pointer is passed by the implementation; and if a function modifies an object +passed as an argument, the caller will see the change --- this eliminates the +need for two different argument passing mechanisms as in Pascal. .. _tut-scopes: @@ -73,7 +70,7 @@ built-in exception names); the global names in a module; and the local names in a function invocation. In a sense the set of attributes of an object also form a namespace. The important thing to know about namespaces is that there is absolutely no relation between names in different namespaces; for instance, two -different modules may both define a function "maximize" without confusion --- +different modules may both define a function ``maximize`` without confusion --- users of the modules must prefix it with the module name. By the way, I use the word *attribute* for any name following a dot --- for @@ -112,11 +109,13 @@ name attempts to find the name in the namespace. Although scopes are determined statically, they are used dynamically. At any time during execution, there are at least three nested scopes whose namespaces -are directly accessible: the innermost scope, which is searched first, contains -the local names; the namespaces of any enclosing functions, which are searched -starting with the nearest enclosing scope; the middle scope, searched next, -contains the current module's global names; and the outermost scope (searched -last) is the namespace containing built-in names. +are directly accessible: + +* the innermost scope, which is searched first, contains the local names +* the scopes of any enclosing functions, which are searched starting with the + nearest enclosing scope, contains non-local, but also non-global names +* the next-to-last scope contains the current module's global names +* the outermost scope (searched last) is the namespace containing built-in names If a name is declared global, then all references and assignments go directly to the middle scope containing the module's global names. To rebind variables @@ -138,15 +137,15 @@ language definition is evolving towards static name resolution, at "compile" time, so don't rely on dynamic name resolution! (In fact, local variables are already determined statically.) -A special quirk of Python is that -- if no :keyword:`global` or -:keyword:`nonlocal` statement is in effect -- assignments to names always go -into the innermost scope. Assignments do not copy data --- they just bind names -to objects. The same is true for deletions: the statement ``del x`` removes the -binding of ``x`` from the namespace referenced by the local scope. In fact, all -operations that introduce new names use the local scope: in particular, import -statements and function definitions bind the module or function name in the -local scope. (The :keyword:`global` statement can be used to indicate that -particular variables live in the global scope.) +A special quirk of Python is that -- if no :keyword:`global` statement is in +effect -- assignments to names always go into the innermost scope. Assignments +do not copy data --- they just bind names to objects. The same is true for +deletions: the statement ``del x`` removes the binding of ``x`` from the +namespace referenced by the local scope. In fact, all operations that introduce +new names use the local scope: in particular, :keyword:`import` statements and +function definitions bind the module or function name in the local scope. (The +:keyword:`global` statement can be used to indicate that particular variables +live in the global scope.) The :keyword:`global` statement can be used to indicate that particular variables live in the global scope and should be rebound there; the @@ -424,9 +423,9 @@ glancing through a method. Often, the first argument of a method is called ``self``. This is nothing more than a convention: the name ``self`` has absolutely no special meaning to -Python. (Note, however, that by not following the convention your code may be +Python. Note, however, that by not following the convention your code may be less readable to other Python programmers, and it is also conceivable that a -*class browser* program might be written that relies upon such a convention.) +*class browser* program might be written that relies upon such a convention. Any function object that is a class attribute defines a method for instances of that class. It is not necessary that the function definition is textually @@ -462,13 +461,13 @@ argument:: Methods may reference global names in the same way as ordinary functions. The global scope associated with a method is the module containing the class -definition. (The class itself is never used as a global scope!) While one +definition. (The class itself is never used as a global scope.) While one rarely encounters a good reason for using global data in a method, there are many legitimate uses of the global scope: for one thing, functions and modules imported into the global scope can be used by methods, as well as functions and classes defined in it. Usually, the class containing the method is itself defined in this global scope, and in the next section we'll find some good -reasons why a method would want to reference its own class! +reasons why a method would want to reference its own class. Each value is an object, and therefore has a *class* (also called its *type*). It is stored as ``object.__class__``. @@ -519,12 +518,12 @@ An overriding method in a derived class may in fact want to extend rather than simply replace the base class method of the same name. There is a simple way to call the base class method directly: just call ``BaseClassName.methodname(self, arguments)``. This is occasionally useful to clients as well. (Note that this -only works if the base class is defined or imported directly in the global +only works if the base class is accessible as ``BaseClassName`` in the global scope.) Python has two built-in functions that work with inheritance: -* Use :func:`isinstance` to check an object's type: ``isinstance(obj, int)`` +* Use :func:`isinstance` to check an instance's type: ``isinstance(obj, int)`` will be ``True`` only if ``obj.__class__`` is :class:`int` or some class derived from :class:`int`. @@ -582,28 +581,30 @@ http://www.python.org/download/releases/2.3/mro/. Private Variables ================= -There is limited support for class-private identifiers. Any identifier of the -form ``__spam`` (at least two leading underscores, at most one trailing -underscore) is textually replaced with ``_classname__spam``, where ``classname`` -is the current class name with leading underscore(s) stripped. This mangling is -done without regard to the syntactic position of the identifier, so it can be -used to define class-private instance and class variables, methods, variables -stored in globals, and even variables stored in instances. private to this class -on instances of *other* classes. Truncation may occur when the mangled name -would be longer than 255 characters. Outside classes, or when the class name -consists of only underscores, no mangling occurs. - -Name mangling is intended to give classes an easy way to define "private" -instance variables and methods, without having to worry about instance variables -defined by derived classes, or mucking with instance variables by code outside -the class. Note that the mangling rules are designed mostly to avoid accidents; -it still is possible for a determined soul to access or modify a variable that -is considered private. This can even be useful in special circumstances, such -as in the debugger, and that's one reason why this loophole is not closed. -(Buglet: derivation of a class with the same name as the base class makes use of -private variables of the base class possible.) - -Notice that code passed to ``exec()`` or ``eval()`` does not +"Private" instance variables that cannot be accessed except from inside an +object, don't exist in Python. However, there is a convention that is followed +by most Python code: a name prefixed with an underscore (e.g. ``_spam``) should +be treated as a non-public part of the API (whether it is a function, a method +or a data member). It should be considered an implementation detail and subject +to change without notice. + +Since there is a valid use-case for class-private members (namely to avoid name +clashes of names with names defined by subclasses), there is limited support for +such a mechanism, called :dfn:`name mangling`. Any identifier of the form +``__spam`` (at least two leading underscores, at most one trailing underscore) +is textually replaced with ``_classname__spam``, where ``classname`` is the +current class name with leading underscore(s) stripped. This mangling is done +without regard to the syntactic position of the identifier, so it can be used to +define class-private instance and class variables, methods, variables stored in +globals, and even variables stored in instances. Truncation may occur when the +mangled name would be longer than 255 characters. Outside classes, or when the +class name consists of only underscores, no mangling occurs. + +Note that the mangling rules are designed mostly to avoid accidents; it still is +possible to access or modify a variable that is considered private. This can +even be useful in special circumstances, such as in the debugger. + +Notice that code passed to ``exec()``, ``eval()`` or ``execfile()`` does not consider the classname of the invoking class to be the current class; this is similar to the effect of the ``global`` statement, the effect of which is likewise restricted to code that is byte-compiled together. The same @@ -654,7 +655,7 @@ Exceptions Are Classes Too User-defined exceptions are identified by classes as well. Using this mechanism it is possible to create extensible hierarchies of exceptions. -There are two valid (semantic) forms for the raise statement:: +There are two new valid (semantic) forms for the :keyword:`raise` statement:: raise Class @@ -665,10 +666,10 @@ class derived from it. The first form is a shorthand for:: raise Class() -A class in an except clause is compatible with an exception if it is the same -class or a base class thereof (but not the other way around --- an except clause -listing a derived class is not compatible with a base class). For example, the -following code will print B, C, D in that order:: +A class in an :keyword:`except` clause is compatible with an exception if it is +the same class or a base class thereof (but not the other way around --- an +except clause listing a derived class is not compatible with a base class). For +example, the following code will print B, C, D in that order:: class B(Exception): pass diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index b1efd1a..662407a 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -130,16 +130,17 @@ Basic usage of the :meth:`str.format` method looks like this:: We are the knights who say "Ni!" The brackets and characters within them (called format fields) are replaced with -the objects passed into the format method. The number in the brackets refers to -the position of the object passed into the format method. :: +the objects passed into the :meth:`~str.format` method. The number in the +brackets refers to the position of the object passed into the +:meth:`~str.format` method. :: >>> print('{0} and {1}'.format('spam', 'eggs')) spam and eggs >>> print('{1} and {0}'.format('spam', 'eggs')) eggs and spam -If keyword arguments are used in the format method, their values are referred to -by using the name of the argument. :: +If keyword arguments are used in the :meth:`~str.format` method, their values +are referred to by using the name of the argument. :: >>> print('This {food} is {adjective}.'.format( ... food='spam', adjective='absolutely horrible')) @@ -160,7 +161,7 @@ truncates the Pi to three places after the decimal. The value of PI is approximately 3.142. Passing an integer after the ``':'`` will cause that field to be a minimum -number of characters wide. This is useful for making tables pretty.:: +number of characters wide. This is useful for making tables pretty. :: >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678} >>> for name, phone in table.items(): @@ -181,7 +182,7 @@ square brackets ``'[]'`` to access the keys :: Jack: 4098; Sjoerd: 4127; Dcab: 8637678 This could also be done by passing the table as keyword arguments with the '**' -notation.:: +notation. :: >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table)) @@ -374,9 +375,9 @@ shorter than writing equivalent :keyword:`try`\ -\ :keyword:`finally` blocks:: >>> f.closed True -File objects have some additional methods, such as :meth:`isatty` and -:meth:`truncate` which are less frequently used; consult the Library Reference -for a complete guide to file objects. +File objects have some additional methods, such as :meth:`~file.isatty` and +:meth:`~file.truncate` which are less frequently used; consult the Library +Reference for a complete guide to file objects. .. _tut-pickle: diff --git a/Doc/tutorial/interactive.rst b/Doc/tutorial/interactive.rst index 56890cd..ca0cfaf 100644 --- a/Doc/tutorial/interactive.rst +++ b/Doc/tutorial/interactive.rst @@ -6,8 +6,8 @@ Interactive Input Editing and History Substitution Some versions of the Python interpreter support editing of the current input line and history substitution, similar to facilities found in the Korn shell and -the GNU Bash shell. This is implemented using the *GNU Readline* library, which -supports Emacs-style and vi-style editing. This library has its own +the GNU Bash shell. This is implemented using the `GNU Readline`_ library, +which supports Emacs-style and vi-style editing. This library has its own documentation which I won't duplicate here; however, the basics are easily explained. The interactive editing and history described here are optionally available in the Unix and Cygwin versions of the interpreter. @@ -148,8 +148,8 @@ interpreter. :: .. _tut-commentary: -Commentary -========== +Alternatives to the Interactive Interpreter +=========================================== This facility is an enormous step forward compared to earlier versions of the interpreter; however, some wishes are left: It would be nice if the proper @@ -158,8 +158,12 @@ token is required next). The completion mechanism might use the interpreter's symbol table. A command to check (or even suggest) matching parentheses, quotes, etc., would also be useful. -.. % - Do we mention IPython? DUBOIS +One alternative enhanced interactive interpreter that has been around for quite +some time is `IPython`_, which features tab completion, object exploration and +advanced history management. It can also be thoroughly customized and embedded +into other applications. Another similar enhanced interactive environment is +`bpython`_. + .. rubric:: Footnotes @@ -167,3 +171,7 @@ quotes, etc., would also be useful. :envvar:`PYTHONSTARTUP` environment variable when you start an interactive interpreter. + +.. _GNU Readline: http://tiswww.case.edu/php/chet/readline/rltop.html +.. _IPython: http://ipython.scipy.org/ +.. _bpython: http://www.bpython-interpreter.org/ diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst index 844eed0..1023ba8 100644 --- a/Doc/tutorial/modules.rst +++ b/Doc/tutorial/modules.rst @@ -448,14 +448,14 @@ one would hope that this somehow goes out to the filesystem, finds which submodules are present in the package, and imports them all. Unfortunately, this operation does not work very well on Windows platforms, where the filesystem does not always have accurate information about the case of a -filename! On these platforms, there is no guaranteed way to know whether a file +filename. On these platforms, there is no guaranteed way to know whether a file :file:`ECHO.PY` should be imported as a module :mod:`echo`, :mod:`Echo` or :mod:`ECHO`. (For example, Windows 95 has the annoying practice of showing all file names with a capitalized first letter.) The DOS 8+3 filename restriction adds another interesting problem for long module names. The only solution is for the package author to provide an explicit index of the -package. The import statement uses the following convention: if a package's +package. The :keyword:`import` statement uses the following convention: if a package's :file:`__init__.py` code defines a list named ``__all__``, it is taken to be the list of module names that should be imported when ``from package import *`` is encountered. It is up to the package author to keep this list up-to-date when a @@ -476,16 +476,16 @@ been imported (possibly running any initialization code in :file:`__init__.py`) and then imports whatever names are defined in the package. This includes any names defined (and submodules explicitly loaded) by :file:`__init__.py`. It also includes any submodules of the package that were explicitly loaded by -previous import statements. Consider this code:: +previous :keyword:`import` statements. Consider this code:: import sound.effects.echo import sound.effects.surround from sound.effects import * -In this example, the echo and surround modules are imported in the current -namespace because they are defined in the :mod:`sound.effects` package when the -``from...import`` statement is executed. (This also works when ``__all__`` is -defined.) +In this example, the :mod:`echo` and :mod:`surround` modules are imported in the +current namespace because they are defined in the :mod:`sound.effects` package +when the ``from...import`` statement is executed. (This also works when +``__all__`` is defined.) Note that in general the practice of importing ``*`` from a module or package is frowned upon, since it often causes poorly readable code. However, it is okay to @@ -537,5 +537,6 @@ modules found in a package. .. rubric:: Footnotes .. [#] In fact function definitions are also 'statements' that are 'executed'; the - execution enters the function name in the module's global symbol table. + execution of a module-level function enters the function name in the module's + global symbol table. diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst index 938430f..4d7f1c5 100644 --- a/Doc/tutorial/stdlib2.rst +++ b/Doc/tutorial/stdlib2.rst @@ -347,12 +347,15 @@ Decimal Floating Point Arithmetic The :mod:`decimal` module offers a :class:`Decimal` datatype for decimal floating point arithmetic. Compared to the built-in :class:`float` -implementation of binary floating point, the new class is especially helpful for -financial applications and other uses which require exact decimal -representation, control over precision, control over rounding to meet legal or -regulatory requirements, tracking of significant decimal places, or for -applications where the user expects the results to match calculations done by -hand. +implementation of binary floating point, the class is especially helpful for + +* financial applications and other uses which require exact decimal + representation, +* control over precision, +* control over rounding to meet legal or regulatory requirements, +* tracking of significant decimal places, or +* applications where the user expects the results to match calculations done by + hand. For example, calculating a 5% tax on a 70 cent phone charge gives different results in decimal floating point and binary floating point. The difference diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst index 6c09e85..ad8f8c6 100644 --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -86,7 +86,7 @@ source. .. note:: - This option cannot be used with builtin modules and extension modules + This option cannot be used with built-in modules and extension modules written in C, since they do not have Python module files. However, it can still be used for precompiled modules, even if the original source file is not available. diff --git a/Doc/whatsnew/2.2.rst b/Doc/whatsnew/2.2.rst index ec435f7..acdba83 100644 --- a/Doc/whatsnew/2.2.rst +++ b/Doc/whatsnew/2.2.rst @@ -1173,7 +1173,7 @@ Some of the more notable changes are: can uncomment them. Gestalt and Internet Config modules are enabled by default. -* Keyword arguments passed to builtin functions that don't take them now cause a +* Keyword arguments passed to built-in functions that don't take them now cause a :exc:`TypeError` exception to be raised, with the message "*function* takes no keyword arguments". diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst index fc1525e..cc8a29a 100644 --- a/Doc/whatsnew/2.6.rst +++ b/Doc/whatsnew/2.6.rst @@ -2823,7 +2823,7 @@ JSON (Javascript Object Notation). JSON is a lightweight interchange format often used in web applications. For more information about JSON, see http://www.json.org. -:mod:`json` comes with support for decoding and encoding most builtin Python +:mod:`json` comes with support for decoding and encoding most built-in Python types. The following example encodes and decodes a dictionary:: >>> import json diff --git a/Misc/gdbinit b/Misc/gdbinit index 74ddbec..33de784 100644 --- a/Misc/gdbinit +++ b/Misc/gdbinit @@ -29,7 +29,7 @@ end # print the local variables of the current frame define pylocals set $_i = 0 - while $_i < f->f_nlocals + while $_i < f->f_code->co_nlocals if f->f_localsplus + $_i != 0 set $_names = co->co_varnames set $_name = _PyUnicode_AsString(PyTuple_GetItem($_names, $_i)) diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 6dc46ad..5965cdd 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1958,7 +1958,6 @@ is a single character. The following type codes are defined:\n\ 'H' unsigned integer 2 \n\ 'i' signed integer 2 \n\ 'I' unsigned integer 2 \n\ - 'w' unicode character 4 \n\ 'l' signed integer 4 \n\ 'L' unsigned integer 4 \n\ 'f' floating point 4 \n\ diff --git a/Objects/abstract.c b/Objects/abstract.c index 3b2de9d..5247824 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -331,7 +331,7 @@ PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { if (!PyObject_CheckBuffer(obj)) { PyErr_Format(PyExc_TypeError, - "'%100s' does not have the buffer interface", + "'%100s' does not support the buffer interface", Py_TYPE(obj)->tp_name); return -1; } diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 65868e4..832b4e9 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -179,7 +179,7 @@ validate_and_copy_tuple(PyObject *tup) } PyDoc_STRVAR(code_doc, -"code(argcount, kwonlyargcount nlocals, stacksize, flags, codestring,\n\ +"code(argcount, kwonlyargcount, nlocals, stacksize, flags, codestring,\n\ constants, names, varnames, filename, name, firstlineno,\n\ lnotab[, freevars[, cellvars]])\n\ \n\ diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index 2990c25..7acd569 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -255,7 +255,7 @@ PyMemoryView_GetContiguous(PyObject *obj, int buffertype, char fort) if (!PyObject_CheckBuffer(obj)) { PyErr_SetString(PyExc_TypeError, - "object does not have the buffer interface"); + "object does not support the buffer interface"); return NULL; } -- cgit v0.12 From 97b28f843718db2e111e8288e4fb7d183ddff58a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:35:19 +0000 Subject: Merged revisions 74316,74335 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r74316 | alexandre.vassalotti | 2009-08-05 01:19:13 +0200 (Mi, 05 Aug 2009) | 4 lines Issue 5449: Fix io.BytesIO to not accept arbitrary keywords Patch contributed by Erick Tryzelaar. ........ r74335 | philip.jenvey | 2009-08-06 22:00:08 +0200 (Do, 06 Aug 2009) | 1 line typo ........ --- Doc/library/codecs.rst | 2 +- Lib/test/test_memoryio.py | 4 ++++ Modules/_io/bytesio.c | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 7218d3a..b8a8ccc 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -74,7 +74,7 @@ It defines the following functions: continue without further notice), ``'xmlcharrefreplace'`` (replace with the appropriate XML character reference (for encoding only)), ``'backslashreplace'`` (replace with backslashed escape sequences (for - encoding only)), ``'surrogateescape'`` (replae with surrogate U+DCxx, see + encoding only)), ``'surrogateescape'`` (replace with surrogate U+DCxx, see :pep:`383`) as well as any other error handling name defined via :func:`register_error`. diff --git a/Lib/test/test_memoryio.py b/Lib/test/test_memoryio.py index 0d044e9..187adad 100644 --- a/Lib/test/test_memoryio.py +++ b/Lib/test/test_memoryio.py @@ -416,6 +416,10 @@ class PyBytesIOTest(MemoryTestMixin, MemorySeekTestMixin, unittest.TestCase): self.assertEqual(memio.write(a), 10) self.assertEqual(memio.getvalue(), buf) + def test_issue5449(self): + buf = self.buftype("1234567890") + self.ioclass(initial_bytes=buf) + self.assertRaises(TypeError, self.ioclass, buf, foo=None) class PyStringIOTest(MemoryTestMixin, MemorySeekTestMixin, unittest.TestCase): buftype = str diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index 7675846..cafe4a2 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -642,9 +642,11 @@ bytesio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static int bytesio_init(bytesio *self, PyObject *args, PyObject *kwds) { + char *kwlist[] = {"initial_bytes", NULL}; PyObject *initvalue = NULL; - if (!PyArg_ParseTuple(args, "|O:BytesIO", &initvalue)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:BytesIO", kwlist, + &initvalue)) return -1; /* In case, __init__ is called multiple times. */ -- cgit v0.12 -- cgit v0.12 From 878c3b004b09cb9242f7523366b616ae0715438a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:36:43 +0000 Subject: Merged revisions 74278 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r74278 | sean.reifschneider | 2009-08-02 01:55:06 +0200 (So, 02 Aug 2009) | 3 lines - Issue #6624: yArg_ParseTuple with "s" format when parsing argument with NUL: Bogus TypeError detail string. ........ --- Misc/NEWS | 3 +++ Python/getargs.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index 8c9bb93..150ea58 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -35,6 +35,9 @@ Core and Builtins C-API ----- +- Issue #6624: yArg_ParseTuple with "s" format when parsing argument with + NUL: Bogus TypeError detail string. + - Issue #6405: Remove duplicate type declarations in descrobject.h. - The code flags for old __future__ features are now available again. diff --git a/Python/getargs.c b/Python/getargs.c index a5dc360..486cf7d 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -387,7 +387,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) flags, levels, msgbuf, sizeof(msgbuf), &freelist); if (msg) { - seterror(i+1, msg, levels, fname, message); + seterror(i+1, msg, levels, fname, msg); return cleanreturn(0, freelist); } } -- cgit v0.12 From 01a30523f9782f9e8b8f49efc3b2a703b94394f3 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:37:59 +0000 Subject: Merged revisions 74264 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r74264 | alexandre.vassalotti | 2009-07-29 22:12:15 +0200 (Mi, 29 Jul 2009) | 32 lines Merged revisions 74075,74187,74197,74201,74216,74225 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74075 | georg.brandl | 2009-07-18 05:06:31 -0400 (Sat, 18 Jul 2009) | 1 line #6505: fix typos. ........ r74187 | benjamin.peterson | 2009-07-23 10:19:08 -0400 (Thu, 23 Jul 2009) | 1 line use bools for autoraise ........ r74197 | benjamin.peterson | 2009-07-24 22:03:48 -0400 (Fri, 24 Jul 2009) | 1 line clarify ........ r74201 | amaury.forgeotdarc | 2009-07-25 12:22:06 -0400 (Sat, 25 Jul 2009) | 2 lines Better name a variable: 'buf' seems to imply a mutable buffer. ........ r74216 | michael.foord | 2009-07-26 17:12:14 -0400 (Sun, 26 Jul 2009) | 1 line Issue 6581. Michael Foord ........ r74225 | kurt.kaiser | 2009-07-27 12:09:28 -0400 (Mon, 27 Jul 2009) | 5 lines 1. Clean workspace more thoughly before build. 2. Add url of branch we are building to 'results' webpage. (url is now available in $repo_path, could be added to failure email.) 3. Adjust permissions to improve upload reliability. ........ ................ --- Doc/tutorial/inputoutput.rst | 8 ++++---- Lib/inspect.py | 5 ++++- Lib/webbrowser.py | 22 +++++++++++----------- Misc/build.sh | 24 ++++++++++++++++++------ Objects/dictobject.c | 2 +- Python/import.c | 14 +++++++------- 6 files changed, 45 insertions(+), 30 deletions(-) diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index 662407a..549a922 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -152,9 +152,9 @@ Positional and keyword arguments can be arbitrarily combined:: other='Georg')) The story of Bill, Manfred, and Georg. -An optional ``':'`` and format specifier can follow the field name. This also +An optional ``':'`` and format specifier can follow the field name. This allows greater control over how the value is formatted. The following example -truncates the Pi to three places after the decimal. +truncates Pi to three places after the decimal. >>> import math >>> print('The value of PI is approximately {0:.3f}.'.format(math.pi)) @@ -208,8 +208,8 @@ operation. For example:: The value of PI is approximately 3.142. Since :meth:`str.format` is quite new, a lot of Python code still uses the ``%`` -operator. However, because this old style of formatting will eventually removed -from the language :meth:`str.format` should generally be used. +operator. However, because this old style of formatting will eventually be +removed from the language, :meth:`str.format` should generally be used. More information can be found in the :ref:`old-string-formatting` section. diff --git a/Lib/inspect.py b/Lib/inspect.py index 4b3e27a..79565c1 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -990,7 +990,10 @@ def getinnerframes(tb, context=1): tb = tb.tb_next return framelist -currentframe = sys._getframe +if hasattr(sys, '_getframe'): + currentframe = sys._getframe +else: + currentframe = lambda _=None: None def stack(context=1): """Return a list of records for the stack above the caller's frame.""" diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index fb227fe..1d9ff43 100644 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -56,7 +56,7 @@ def get(using=None): # It is recommended one does "import webbrowser" and uses webbrowser.open(url) # instead of "from webbrowser import *". -def open(url, new=0, autoraise=1): +def open(url, new=0, autoraise=True): for name in _tryorder: browser = get(name) if browser.open(url, new, autoraise): @@ -145,7 +145,7 @@ class BaseBrowser(object): self.name = name self.basename = name - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): raise NotImplementedError def open_new(self, url): @@ -169,7 +169,7 @@ class GenericBrowser(BaseBrowser): self.args = name[1:] self.basename = os.path.basename(self.name) - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): cmdline = [self.name] + [arg.replace("%s", url) for arg in self.args] try: @@ -186,7 +186,7 @@ class BackgroundBrowser(GenericBrowser): """Class for all browsers which are to be started in the background.""" - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): cmdline = [self.name] + [arg.replace("%s", url) for arg in self.args] try: @@ -217,7 +217,7 @@ class UnixBrowser(BaseBrowser): raise_opt = [] if remote and self.raise_opts: # use autoraise argument only for remote invocation - autoraise = int(bool(autoraise)) + autoraise = int(autoraise) opt = self.raise_opts[autoraise] if opt: raise_opt = [opt] @@ -257,7 +257,7 @@ class UnixBrowser(BaseBrowser): else: return not p.wait() - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): if new == 0: action = self.remote_action elif new == 1: @@ -341,7 +341,7 @@ class Konqueror(BaseBrowser): for more information on the Konqueror remote-control interface. """ - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): # XXX Currently I know no way to prevent KFM from opening a new win. if new == 2: action = "newTab" @@ -429,7 +429,7 @@ class Grail(BaseBrowser): s.close() return 1 - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): if new: ok = self._remote("LOADNEW " + url) else: @@ -512,7 +512,7 @@ if os.environ.get("TERM"): if sys.platform[:3] == "win": class WindowsDefault(BaseBrowser): - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): try: os.startfile(url) except WindowsError: @@ -546,7 +546,7 @@ except ImportError: pass else: class InternetConfig(BaseBrowser): - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): ic.launchurl(url) return True # Any way to get status? @@ -567,7 +567,7 @@ if sys.platform == 'darwin': def __init__(self, name): self.name = name - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): assert "'" not in url # hack for local urls if not ':' in url: diff --git a/Misc/build.sh b/Misc/build.sh index d7d0ea1..544fd29 100755 --- a/Misc/build.sh +++ b/Misc/build.sh @@ -4,9 +4,11 @@ ## does this: ## svn up ; ./configure ; make ; make test ; make install ; cd Doc ; make ## -## Logs are kept and rsync'ed to the host. If there are test failure(s), +## Logs are kept and rsync'ed to the webhost. If there are test failure(s), ## information about the failure(s) is mailed. ## +## The user must be a member of the webmaster group locally and on webhost. +## ## This script is run on the PSF's machine as user neal via crontab. ## ## Yes, this script would probably be easier in python, but then @@ -76,7 +78,8 @@ ALWAYS_SKIP="-x $_ALWAYS_SKIP" # Skip these tests altogether when looking for leaks. These tests # do not need to be stored above in LEAKY_TESTS too. # test_logging causes hangs, skip it. -LEAKY_SKIPS="-x test_logging $_ALWAYS_SKIP" +# KBK 21Apr09: test_httpservers causes hangs, skip for now. +LEAKY_SKIPS="-x test_compiler test_logging test_httpservers" # Change this flag to "yes" for old releases to only update/build the docs. BUILD_DISABLED="no" @@ -133,9 +136,14 @@ mail_on_failure() { ## setup cd $DIR +make clobber /dev/null 2>&1 +cp -p Modules/Setup.dist Modules/Setup +# But maybe there was no Makefile - we are only building docs. Clear build: +rm -rf build/ mkdir -p build -rm -f $RESULT_FILE build/*.out rm -rf $INSTALL_DIR +## get the path we are building +repo_path=$(grep "url=" .svn/entries | sed -e s/\\W*url=// -e s/\"//g) ## create results file TITLE="Automated Python Build Results" @@ -153,6 +161,8 @@ echo " " >> $RESULT_FILE echo " Hostname:`uname -n`" >> $RESULT_FILE echo " " >> $RESULT_FILE echo " Platform:`uname -srmpo`" >> $RESULT_FILE +echo " " >> $RESULT_FILE +echo " URL:$repo_path" >> $RESULT_FILE echo " " >> $RESULT_FILE echo "" >> $RESULT_FILE echo "
    " >> $RESULT_FILE @@ -223,7 +233,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then start=`current_time` ## ensure that the reflog exists so the grep doesn't fail touch $REFLOG - $PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network,urlfetch $LEAKY_SKIPS >& build/$F + $PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network $LEAKY_SKIPS >& build/$F LEAK_PAT="($LEAKY_TESTS|sum=0)" NUM_FAILURES=`egrep -vc "$LEAK_PAT" $REFLOG` place_summary_first build/$F @@ -259,13 +269,13 @@ start=`current_time` # which will definitely fail with a conflict. #CONFLICTED_FILE=commontex/boilerplate.tex #conflict_count=`grep -c "<<<" $CONFLICTED_FILE` -make clean conflict_count=0 if [ $conflict_count != 0 ]; then echo "Conflict detected in $CONFLICTED_FILE. Doc build skipped." > ../build/$F err=1 else - make checkout update html >& ../build/$F + make clean > ../build/$F 2>&1 + make checkout update html >> ../build/$F 2>&1 err=$? fi update_status "Making doc" "$F" $start @@ -279,6 +289,8 @@ echo "" >> $RESULT_FILE echo "" >> $RESULT_FILE ## copy results +chgrp -R webmaster build/html +chmod -R g+w build/html rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR cd ../build rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 907ccf2..03f2010 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -718,7 +718,7 @@ PyDict_GetItem(PyObject *op, PyObject *key) running "python -Wi" for an example related to string interning. Let's just hope that no exception occurs then... This must be _PyThreadState_Current and not PyThreadState_GET() because in debug - mode, it complains if tstate is NULL. */ + mode, the latter complains if tstate is NULL. */ tstate = _PyThreadState_Current; if (tstate != NULL && tstate->curexc_type != NULL) { /* preserve the existing exception */ diff --git a/Python/import.c b/Python/import.c index 2b82587..e143322 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1782,7 +1782,7 @@ static int init_builtin(char *); /* Forward */ its module object WITH INCREMENTED REFERENCE COUNT */ static PyObject * -load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader) +load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader) { PyObject *modules; PyObject *m; @@ -1803,27 +1803,27 @@ load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader) switch (type) { case PY_SOURCE: - m = load_source_module(name, buf, fp); + m = load_source_module(name, pathname, fp); break; case PY_COMPILED: - m = load_compiled_module(name, buf, fp); + m = load_compiled_module(name, pathname, fp); break; #ifdef HAVE_DYNAMIC_LOADING case C_EXTENSION: - m = _PyImport_LoadDynamicModule(name, buf, fp); + m = _PyImport_LoadDynamicModule(name, pathname, fp); break; #endif case PKG_DIRECTORY: - m = load_package(name, buf); + m = load_package(name, pathname); break; case C_BUILTIN: case PY_FROZEN: - if (buf != NULL && buf[0] != '\0') - name = buf; + if (pathname != NULL && pathname[0] != '\0') + name = pathname; if (type == C_BUILTIN) err = init_builtin(name); else -- cgit v0.12 From e6700e9a0435df5de59eed27fa072caf320e7ebd Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:39:33 +0000 Subject: Merged revisions 74217,74224 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r74217 | jack.diederich | 2009-07-27 00:23:04 +0200 (Mo, 27 Jul 2009) | 1 line - fix issue #6106, Telnet.process_rawq default handling of WILL/WONT/DO/DONT ........ r74224 | jack.diederich | 2009-07-27 11:03:14 +0200 (Mo, 27 Jul 2009) | 1 line - belated ACK for issue #6106 ........ --- Lib/telnetlib.py | 2 +- Lib/test/test_telnetlib.py | 46 ++++++++++++++++++++++++++++ Misc/ACKS | 2 ++ Misc/NEWS | 75 ++++++++++++++++++++++++---------------------- 4 files changed, 88 insertions(+), 37 deletions(-) diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py index 11e1a65..5258c8a 100644 --- a/Lib/telnetlib.py +++ b/Lib/telnetlib.py @@ -459,7 +459,7 @@ class Telnet: # unless we did a WILL/DO before. self.msg('IAC %d not recognized' % ord(c)) elif len(self.iacseq) == 2: - cmd = self.iacseq[1] + cmd = self.iacseq[1:2] self.iacseq = b'' opt = c if cmd in (DO, DONT): diff --git a/Lib/test/test_telnetlib.py b/Lib/test/test_telnetlib.py index bad2819..662c715 100644 --- a/Lib/test/test_telnetlib.py +++ b/Lib/test/test_telnetlib.py @@ -3,6 +3,8 @@ import threading import telnetlib import time import queue +import sys +import io from unittest import TestCase from test import support @@ -304,6 +306,20 @@ class nego_collector(object): self.sb_seen += sb_data tl = telnetlib + +class TelnetDebuglevel(tl.Telnet): + ''' Telnet-alike that captures messages written to stdout when + debuglevel > 0 + ''' + _messages = '' + def msg(self, msg, *args): + orig_stdout = sys.stdout + sys.stdout = fake_stdout = io.StringIO() + tl.Telnet.msg(self, msg, *args) + self._messages += fake_stdout.getvalue() + sys.stdout = orig_stdout + return + class OptionTests(TestCase): setUp = _read_setUp tearDown = _read_tearDown @@ -363,6 +379,36 @@ class OptionTests(TestCase): self.assertEqual(b'', telnet.read_sb_data()) nego.sb_getter = None # break the nego => telnet cycle + def _test_debuglevel(self, data, expected_msg): + """ helper for testing debuglevel messages """ + self.setUp() + self.dataq.put(data) + telnet = TelnetDebuglevel(HOST, self.port) + telnet.set_debuglevel(1) + self.dataq.join() + txt = telnet.read_all() + self.assertTrue(expected_msg in telnet._messages, + msg=(telnet._messages, expected_msg)) + self.tearDown() + + def test_debuglevel(self): + # test all the various places that self.msg(...) is called + given_a_expect_b = [ + # Telnet.fill_rawq + (b'a', ": recv b''\n"), + # Telnet.process_rawq + (tl.IAC + bytes([88]), ": IAC 88 not recognized\n"), + (tl.IAC + tl.DO + bytes([1]), ": IAC DO 1\n"), + (tl.IAC + tl.DONT + bytes([1]), ": IAC DONT 1\n"), + (tl.IAC + tl.WILL + bytes([1]), ": IAC WILL 1\n"), + (tl.IAC + tl.WONT + bytes([1]), ": IAC WONT 1\n"), + # Telnet.write + # XXX, untested + ] + for a, b in given_a_expect_b: + self._test_debuglevel([a, EOF_sigil], b) + return + def test_main(verbose=None): support.run_unittest(GeneralTests, ReadTests, OptionTests) diff --git a/Misc/ACKS b/Misc/ACKS index 644c803..cd8605f 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -708,6 +708,7 @@ Michael Stone Ken Stox Dan Stromberg Daniel Stutzbach +Pal Subbiah Nathan Sullivan Mark Summerfield Hisao Suzuki @@ -800,6 +801,7 @@ Jean-Claude Wippler Lars Wirzenius Chris Withers Stefan Witzel +Irek Wlizlo David Wolever Klaus-Juergen Wolf Dan Wolfe diff --git a/Misc/NEWS b/Misc/NEWS index 150ea58..cd9ac66 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -45,6 +45,9 @@ C-API Library ------- +- Issue #6106: telnetlib.Telnet.process_rawq doesn't handle default WILL/WONT + DO/DONT correctly. + - Issue #6126: Fixed pdb command-line usage. - Issue #6629: Fix a data corruption issue in the new I/O library, which could @@ -62,32 +65,32 @@ Library - Issue #2715: Remove remnants of Carbon.File from binhex module. - Issue #6595: The Decimal constructor now allows arbitrary Unicode - decimal digits in input, as recommended by the standard. Previously - it was restricted to accepting [0-9]. +decimal digits in input, as recommended by the standard. Previously +it was restricted to accepting [0-9]. - Issues #5155, #5313, #5331: multiprocessing.Process._bootstrap was - unconditionally calling "os.close(sys.stdin.fileno())" resulting in file - descriptor errors +unconditionally calling "os.close(sys.stdin.fileno())" resulting in file +descriptor errors - Issue #1424152: Fix for http.client, urllib.request to support SSL while - working through proxy. Original patch by Christopher Li, changes made by - Senthil Kumaran +working through proxy. Original patch by Christopher Li, changes made by +Senthil Kumaran - importlib.abc.PyLoader did not inherit from importlib.abc.ResourceLoader like - the documentation said it did even though the code in PyLoader relied on the - abstract method required by ResourceLoader. +the documentation said it did even though the code in PyLoader relied on the +abstract method required by ResourceLoader. - Issue #6431: Make Fraction type return NotImplemented when it doesn't - know how to handle a comparison without loss of precision. Also add - correct handling of infinities and nans for comparisons with float. +know how to handle a comparison without loss of precision. Also add +correct handling of infinities and nans for comparisons with float. - Issue #6415: Fixed warnings.warn segfault on bad formatted string. - Issue #6358: The exit status of a command started with os.popen() was - reported differently than it did with python 2.x. +reported differently than it did with python 2.x. - Issue #6323: The pdb debugger did not exit when running a script with a - syntax error. +syntax error. - Issue #6369: Fix an RLE decompression bug in the binhex module. @@ -97,16 +100,16 @@ Build ----- - Issue 4601: 'make install' did not set the appropriate permissions on - directories. +directories. - Issue 5390: Add uninstall icon independent of whether file - extensions are installed. +extensions are installed. Test ---- - Fix a test in importlib.test.source.test_abc_loader that was incorrectly - testing when a .pyc file lacked an code object bytecode. +testing when a .pyc file lacked an code object bytecode. What's New in Python 3.1? @@ -118,27 +121,27 @@ Core and Builtins ----------------- - Issue #6334: Fix bug in range length calculation for ranges with - large arguments. +large arguments. - Issue #6329: Fixed iteration for memoryview objects (it was being blocked - because it wasn't recognized as a sequence). +because it wasn't recognized as a sequence). Library ------- - Issue #6314: logging.basicConfig() performs extra checks on the "level" - argument. +argument. - Issue #6274: Fixed possible file descriptors leak in subprocess.py - Accessing io.StringIO.buffer now raises an AttributeError instead of - io.UnsupportedOperation. +io.UnsupportedOperation. - Issue #6271: mmap tried to close invalid file handle (-1) when anonymous. - (On Unix) +(On Unix) - Issue #1202: zipfile module would cause a struct.error when attempting to - store files with a CRC32 > 2**31-1. +store files with a CRC32 > 2**31-1. Extension Modules ----------------- @@ -157,50 +160,50 @@ Core and Builtins - Fixed SystemError triggered by "range([], 1, -1)". - Issue #5924: On Windows, a large PYTHONPATH environment variable - (more than 255 characters) would be completely ignored. +(more than 255 characters) would be completely ignored. - Issue #4547: When debugging a very large function, it was not always - possible to update the lineno attribute of the current frame. +possible to update the lineno attribute of the current frame. - Issue #5330: C functions called with keyword arguments were not reported by - the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau. +the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau. Library ------- - Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular - expression string pattern was trying to match against a bytes returned by - Popen. Tested under win32 to build the py-postgresql project. +expression string pattern was trying to match against a bytes returned by +Popen. Tested under win32 to build the py-postgresql project. - Issue #6258: Support AMD64 in bdist_msi. - Issue #6195: fixed doctest to no longer try to read 'source' data from - binary files. +binary files. - Issue #5262: Fixed bug in next rollover time computation in - TimedRotatingFileHandler. +TimedRotatingFileHandler. - Issue #6217: The C implementation of io.TextIOWrapper didn't include the - errors property. Additionally, the errors and encoding properties of StringIO - are always None now. +errors property. Additionally, the errors and encoding properties of StringIO +are always None now. - Issue #6137: The pickle module now translates module names when loading - or dumping pickles with a 2.x-compatible protocol, in order to make data - sharing and migration easier. This behaviour can be disabled using the - new `fix_imports` optional argument. +or dumping pickles with a 2.x-compatible protocol, in order to make data +sharing and migration easier. This behaviour can be disabled using the +new `fix_imports` optional argument. - Removed the ipaddr module. - Issue #3613: base64.{encode,decode}string are now called - base64.{encode,decode}bytes which reflects what type they accept and return. - The old names are still there as deprecated aliases. +base64.{encode,decode}bytes which reflects what type they accept and return. +The old names are still there as deprecated aliases. - Issue #5767: Remove sgmlop support from xmlrpc.client. - Issue #6150: Fix test_unicode on wide-unicode builds. - Issue #6149: Fix initialization of WeakValueDictionary objects from non-empty - parameters. +parameters. Windows ------- -- cgit v0.12 -- cgit v0.12 From a08a3c514d848146577458f87da8c343a8002ddc Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:40:50 +0000 Subject: Merged revisions 74196 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r74196 | benjamin.peterson | 2009-07-25 03:02:01 +0200 (Sa, 25 Jul 2009) | 1 line account for range() py3k change ........ --- Doc/library/unittest.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 61883f6..32d0952 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -105,13 +105,13 @@ Here is a short script to test three functions from the :mod:`random` module:: class TestSequenceFunctions(unittest.TestCase): def setUp(self): - self.seq = range(10) + self.seq = list(range(10)) def test_shuffle(self): # make sure the shuffled sequence does not lose any elements random.shuffle(self.seq) self.seq.sort() - self.assertEqual(self.seq, range(10)) + self.assertEqual(self.seq, list(range(10))) def test_choice(self): element = random.choice(self.seq) -- cgit v0.12 -- cgit v0.12 From 7d1e88063c6241d4750326fc772d5b8a6819a77f Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:47:18 +0000 Subject: Merged revisions 73656,73658,73663,73666 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r73656 | mark.dickinson | 2009-06-29 00:08:40 +0200 (Mo, 29 Jun 2009) | 1 line Fix description of range_length_obj ........ r73658 | raymond.hettinger | 2009-06-29 00:30:13 +0200 (Mo, 29 Jun 2009) | 1 line Small doc fix-ups to floatingpoint.rst. More are forthcoming. ........ r73663 | raymond.hettinger | 2009-06-29 01:21:38 +0200 (Mo, 29 Jun 2009) | 1 line Clean-up floating point tutorial. ........ r73666 | alexandre.vassalotti | 2009-06-29 03:13:41 +0200 (Mo, 29 Jun 2009) | 2 lines Make b64encode raises properly a TypeError when altchars is not bytes. ........ --- Doc/tutorial/floatingpoint.rst | 10 +++++----- Lib/base64.py | 4 ++-- Objects/rangeobject.c | 7 +++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Doc/tutorial/floatingpoint.rst b/Doc/tutorial/floatingpoint.rst index e877a99..0230183 100644 --- a/Doc/tutorial/floatingpoint.rst +++ b/Doc/tutorial/floatingpoint.rst @@ -82,7 +82,7 @@ values share the same approximation, any one of them could be displayed while still preserving the invariant ``eval(repr(x)) == x``. Historically, the Python prompt and built-in :func:`repr` function would chose -the one with 17 significant digits, ``0.10000000000000001``, Starting with +the one with 17 significant digits, ``0.10000000000000001``. Starting with Python 3.1, Python (on most systems) is now able to choose the shortest of these and simply display ``0.1``. @@ -123,9 +123,9 @@ Also, since the 0.1 cannot get any closer to the exact value of 1/10 and Though the numbers cannot be made closer to their intended exact values, the :func:`round` function can be useful for post-rounding so that results -have inexact values that are comparable to one another:: +with inexact values become comparable to one another:: - >>> round(.1 + .1 + .1, 1) == round(.3, 1) + >>> round(.1 + .1 + .1, 10) == round(.3, 10) True Binary floating-point arithmetic holds many surprises like this. The problem @@ -137,7 +137,7 @@ As that says near the end, "there are no easy answers." Still, don't be unduly wary of floating-point! The errors in Python float operations are inherited from the floating-point hardware, and on most machines are on the order of no more than 1 part in 2\*\*53 per operation. That's more than adequate for most -tasks, but you do need to keep in mind that it's not decimal arithmetic, and +tasks, but you do need to keep in mind that it's not decimal arithmetic and that every float operation can suffer a new rounding error. While pathological cases do exist, for most casual use of floating-point @@ -165,7 +165,7 @@ fraction:: >>> x = 3.14159 >>> x.as_integer_ratio() - (3537115888337719L, 1125899906842624L) + (3537115888337719, 1125899906842624) Since the ratio is exact, it can be used to losslessly recreate the original value:: diff --git a/Lib/base64.py b/Lib/base64.py index 73e9808..e708136 100755 --- a/Lib/base64.py +++ b/Lib/base64.py @@ -58,8 +58,8 @@ def b64encode(s, altchars=None): encoded = binascii.b2a_base64(s)[:-1] if altchars is not None: if not isinstance(altchars, bytes_types): - altchars = TypeError("expected bytes, not %s" - % altchars.__class__.__name__) + raise TypeError("expected bytes, not %s" + % altchars.__class__.__name__) assert len(altchars) == 2, repr(altchars) return _translate(encoded, {'+': altchars[0:1], '/': altchars[1:2]}) return encoded diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index 77e1954..6d3e8b0 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -126,10 +126,9 @@ range_dealloc(rangeobject *r) PyObject_Del(r); } -/* Return number of items in range (lo, hi, step), when arguments are PyLong - * objects. Return a value < 0 if & only if the true value is too large to - * fit in a signed long. Arguments MUST return 1 with PyLong_Check(). Return - * -1 when there is an error. +/* Return number of items in range (lo, hi, step) as a PyLong object, + * when arguments are PyLong objects. Arguments MUST return 1 with + * PyLong_Check(). Return NULL when there is an error. */ static PyObject* range_length_obj(rangeobject *r) -- cgit v0.12 -- cgit v0.12 -- cgit v0.12 From ef82be368abdea8e8032500e7ecc3a22f5f07851 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:48:56 +0000 Subject: Merged revisions 73695,73711 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r73695 | raymond.hettinger | 2009-06-29 20:30:43 +0200 (Mo, 29 Jun 2009) | 1 line Issue 6370: Performance issue with collections.Counter(). ................ r73711 | benjamin.peterson | 2009-07-01 00:27:25 +0200 (Mi, 01 Jul 2009) | 9 lines Merged revisions 73710 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73710 | benjamin.peterson | 2009-06-30 17:14:33 -0500 (Tue, 30 Jun 2009) | 1 line provide a dummy __exit__ on windows ........ ................ --- Lib/tempfile.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Lib/tempfile.py b/Lib/tempfile.py index 74e3cb2..8cdefaa 100644 --- a/Lib/tempfile.py +++ b/Lib/tempfile.py @@ -408,6 +408,9 @@ class _TemporaryFileWrapper: result = self.file.__exit__(exc, value, tb) self.close() return result + else: + def __exit__(self, exc, value, tb): + pass def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, -- cgit v0.12 From ab91fdef1f1e556203a2eee98ba7d379e4790de9 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:51:18 +0000 Subject: Merged revisions 73715 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r73715 | benjamin.peterson | 2009-07-01 01:06:06 +0200 (Mi, 01 Jul 2009) | 1 line convert old fail* assertions to assert* ........ --- Lib/ctypes/test/test_anon.py | 22 +- Lib/ctypes/test/test_array_in_pointer.py | 8 +- Lib/ctypes/test/test_arrays.py | 60 +-- Lib/ctypes/test/test_as_parameter.py | 38 +- Lib/ctypes/test/test_bitfields.py | 84 ++-- Lib/ctypes/test/test_buffers.py | 84 ++-- Lib/ctypes/test/test_byteswap.py | 154 +++--- Lib/ctypes/test/test_callbacks.py | 16 +- Lib/ctypes/test/test_cast.py | 62 +-- Lib/ctypes/test/test_cfuncs.py | 120 ++--- Lib/ctypes/test/test_checkretval.py | 10 +- Lib/ctypes/test/test_errno.py | 26 +- Lib/ctypes/test/test_find.py | 2 +- Lib/ctypes/test/test_frombuffer.py | 6 +- Lib/ctypes/test/test_funcptr.py | 32 +- Lib/ctypes/test/test_functions.py | 100 ++-- Lib/ctypes/test/test_incomplete.py | 2 +- Lib/ctypes/test/test_init.py | 12 +- Lib/ctypes/test/test_internals.py | 28 +- Lib/ctypes/test/test_keeprefs.py | 2 +- Lib/ctypes/test/test_libc.py | 6 +- Lib/ctypes/test/test_loading.py | 12 +- Lib/ctypes/test/test_macholib.py | 8 +- Lib/ctypes/test/test_memfunctions.py | 48 +- Lib/ctypes/test/test_numbers.py | 62 +-- Lib/ctypes/test/test_parameters.py | 34 +- Lib/ctypes/test/test_pep3118.py | 32 +- Lib/ctypes/test/test_pickling.py | 12 +- Lib/ctypes/test/test_pointers.py | 56 +-- Lib/ctypes/test/test_prototypes.py | 88 ++-- Lib/ctypes/test/test_python_api.py | 34 +- Lib/ctypes/test/test_random_things.py | 10 +- Lib/ctypes/test/test_refcounts.py | 28 +- Lib/ctypes/test/test_repr.py | 8 +- Lib/ctypes/test/test_returnfuncptrs.py | 12 +- Lib/ctypes/test/test_simplesubclasses.py | 18 +- Lib/ctypes/test/test_sizes.py | 18 +- Lib/ctypes/test/test_slicing.py | 86 ++-- Lib/ctypes/test/test_stringptr.py | 22 +- Lib/ctypes/test/test_strings.py | 86 ++-- Lib/ctypes/test/test_struct_fields.py | 2 +- Lib/ctypes/test/test_structures.py | 164 +++--- Lib/ctypes/test/test_unaligned_structures.py | 8 +- Lib/ctypes/test/test_unicode.py | 88 ++-- Lib/ctypes/test/test_values.py | 14 +- Lib/ctypes/test/test_varsize_struct.py | 32 +- Lib/ctypes/test/test_win32.py | 10 +- Lib/distutils/tests/test_archive_util.py | 16 +- Lib/distutils/tests/test_bdist_rpm.py | 4 +- Lib/distutils/tests/test_bdist_wininst.py | 2 +- Lib/distutils/tests/test_build_clib.py | 2 +- Lib/distutils/tests/test_build_ext.py | 30 +- Lib/distutils/tests/test_build_py.py | 6 +- Lib/distutils/tests/test_build_scripts.py | 10 +- Lib/distutils/tests/test_clean.py | 2 +- Lib/distutils/tests/test_cmd.py | 2 +- Lib/distutils/tests/test_config.py | 4 +- Lib/distutils/tests/test_config_cmd.py | 4 +- Lib/distutils/tests/test_dist.py | 42 +- Lib/distutils/tests/test_install.py | 16 +- Lib/distutils/tests/test_install_data.py | 12 +- Lib/distutils/tests/test_install_lib.py | 6 +- Lib/distutils/tests/test_install_scripts.py | 14 +- Lib/distutils/tests/test_msvc9compiler.py | 4 +- Lib/distutils/tests/test_register.py | 16 +- Lib/distutils/tests/test_sysconfig.py | 12 +- Lib/distutils/tests/test_upload.py | 2 +- Lib/distutils/tests/test_util.py | 4 +- Lib/email/test/test_email.py | 86 ++-- Lib/importlib/test/builtin/test_finder.py | 6 +- Lib/importlib/test/builtin/test_loader.py | 12 +- Lib/importlib/test/extension/test_finder.py | 4 +- Lib/importlib/test/extension/test_loader.py | 6 +- Lib/importlib/test/extension/test_path_hook.py | 2 +- Lib/importlib/test/frozen/test_finder.py | 8 +- Lib/importlib/test/frozen/test_loader.py | 8 +- Lib/importlib/test/import_/test_caching.py | 6 +- Lib/importlib/test/import_/test_fromlist.py | 12 +- Lib/importlib/test/import_/test_meta_path.py | 6 +- Lib/importlib/test/import_/test_packages.py | 2 +- Lib/importlib/test/import_/test_path.py | 30 +- .../test/import_/test_relative_imports.py | 6 +- Lib/importlib/test/source/test_abc_loader.py | 22 +- Lib/importlib/test/source/test_file_loader.py | 14 +- Lib/importlib/test/source/test_finder.py | 10 +- Lib/importlib/test/source/test_path_hook.py | 2 +- Lib/importlib/test/test_util.py | 12 +- Lib/json/tests/test_decode.py | 4 +- Lib/json/tests/test_speedups.py | 4 +- Lib/test/mapping_tests.py | 92 ++-- Lib/test/pickletester.py | 26 +- Lib/test/test___all__.py | 2 +- Lib/test/test___future__.py | 4 +- Lib/test/test_abc.py | 52 +- Lib/test/test_abstract_numbers.py | 12 +- Lib/test/test_array.py | 74 +-- Lib/test/test_ast.py | 10 +- Lib/test/test_augassign.py | 12 +- Lib/test/test_base64.py | 2 +- Lib/test/test_bigmem.py | 138 ++--- Lib/test/test_binascii.py | 8 +- Lib/test/test_binop.py | 8 +- Lib/test/test_bisect.py | 18 +- Lib/test/test_bool.py | 10 +- Lib/test/test_bufio.py | 2 +- Lib/test/test_builtin.py | 74 +-- Lib/test/test_bytes.py | 112 ++--- Lib/test/test_capi.py | 4 +- Lib/test/test_cfgparser.py | 20 +- Lib/test/test_cgi.py | 4 +- Lib/test/test_cmath.py | 56 +-- Lib/test/test_cmd_line.py | 6 +- Lib/test/test_cmd_line_script.py | 8 +- Lib/test/test_codecs.py | 10 +- Lib/test/test_codeop.py | 6 +- Lib/test/test_collections.py | 144 +++--- Lib/test/test_compile.py | 10 +- Lib/test/test_complex.py | 10 +- Lib/test/test_contains.py | 36 +- Lib/test/test_contextlib.py | 20 +- Lib/test/test_copy.py | 124 ++--- Lib/test/test_copyreg.py | 8 +- Lib/test/test_csv.py | 8 +- Lib/test/test_datetime.py | 338 ++++++------- Lib/test/test_dbm.py | 6 +- Lib/test/test_dbm_dumb.py | 2 +- Lib/test/test_dbm_gnu.py | 8 +- Lib/test/test_dbm_ndbm.py | 4 +- Lib/test/test_decimal.py | 88 ++-- Lib/test/test_defaultdict.py | 24 +- Lib/test/test_deque.py | 10 +- Lib/test/test_descr.py | 318 ++++++------ Lib/test/test_dict.py | 52 +- Lib/test/test_dictviews.py | 22 +- Lib/test/test_docxmlrpc.py | 8 +- Lib/test/test_dummy_thread.py | 38 +- Lib/test/test_epoll.py | 20 +- Lib/test/test_errno.py | 6 +- Lib/test/test_exceptions.py | 50 +- Lib/test/test_file.py | 8 +- Lib/test/test_filecmp.py | 26 +- Lib/test/test_fileinput.py | 6 +- Lib/test/test_fileio.py | 12 +- Lib/test/test_float.py | 60 +-- Lib/test/test_fnmatch.py | 4 +- Lib/test/test_ftplib.py | 4 +- Lib/test/test_funcattrs.py | 18 +- Lib/test/test_functools.py | 18 +- Lib/test/test_genericpath.py | 4 +- Lib/test/test_getargs2.py | 142 +++--- Lib/test/test_getopt.py | 10 +- Lib/test/test_gettext.py | 2 +- Lib/test/test_grammar.py | 26 +- Lib/test/test_grp.py | 8 +- Lib/test/test_gzip.py | 6 +- Lib/test/test_hash.py | 2 +- Lib/test/test_hashlib.py | 2 +- Lib/test/test_heapq.py | 2 +- Lib/test/test_hmac.py | 8 +- Lib/test/test_http_cookiejar.py | 220 ++++---- Lib/test/test_httplib.py | 4 +- Lib/test/test_httpservers.py | 4 +- Lib/test/test_imp.py | 2 +- Lib/test/test_import.py | 14 +- Lib/test/test_importhooks.py | 2 +- Lib/test/test_index.py | 22 +- Lib/test/test_inspect.py | 66 +-- Lib/test/test_int.py | 12 +- Lib/test/test_io.py | 26 +- Lib/test/test_ioctl.py | 4 +- Lib/test/test_iter.py | 22 +- Lib/test/test_itertools.py | 14 +- Lib/test/test_kqueue.py | 10 +- Lib/test/test_largefile.py | 2 +- Lib/test/test_list.py | 8 +- Lib/test/test_logging.py | 52 +- Lib/test/test_long.py | 26 +- Lib/test/test_macpath.py | 42 +- Lib/test/test_mailbox.py | 174 +++---- Lib/test/test_math.py | 148 +++--- Lib/test/test_memoryio.py | 4 +- Lib/test/test_memoryview.py | 10 +- Lib/test/test_mimetypes.py | 2 +- Lib/test/test_minidom.py | 2 +- Lib/test/test_mmap.py | 4 +- Lib/test/test_module.py | 4 +- Lib/test/test_modulefinder.py | 6 +- Lib/test/test_multibytecodec.py | 4 +- Lib/test/test_multibytecodec_support.py | 4 +- Lib/test/test_netrc.py | 6 +- Lib/test/test_normalization.py | 14 +- Lib/test/test_opcodes.py | 2 +- Lib/test/test_operator.py | 272 +++++----- Lib/test/test_optparse.py | 64 +-- Lib/test/test_os.py | 14 +- Lib/test/test_ossaudiodev.py | 8 +- Lib/test/test_parser.py | 18 +- Lib/test/test_peepholer.py | 62 +-- Lib/test/test_pep247.py | 6 +- Lib/test/test_pep277.py | 4 +- Lib/test/test_pep3120.py | 2 +- Lib/test/test_pep352.py | 10 +- Lib/test/test_pkg.py | 22 +- Lib/test/test_pkgimport.py | 2 +- Lib/test/test_platform.py | 6 +- Lib/test/test_poplib.py | 2 +- Lib/test/test_posix.py | 18 +- Lib/test/test_posixpath.py | 28 +- Lib/test/test_pprint.py | 8 +- Lib/test/test_property.py | 4 +- Lib/test/test_pwd.py | 18 +- Lib/test/test_pyclbr.py | 8 +- Lib/test/test_pydoc.py | 6 +- Lib/test/test_queue.py | 28 +- Lib/test/test_raise.py | 34 +- Lib/test/test_random.py | 30 +- Lib/test/test_range.py | 12 +- Lib/test/test_re.py | 2 +- Lib/test/test_reprlib.py | 20 +- Lib/test/test_richcmp.py | 18 +- Lib/test/test_robotparser.py | 4 +- Lib/test/test_runpy.py | 58 +-- Lib/test/test_scope.py | 10 +- Lib/test/test_set.py | 118 ++--- Lib/test/test_shutil.py | 24 +- Lib/test/test_signal.py | 6 +- Lib/test/test_site.py | 32 +- Lib/test/test_slice.py | 2 +- Lib/test/test_socket.py | 54 +- Lib/test/test_stringprep.py | 80 +-- Lib/test/test_strptime.py | 94 ++-- Lib/test/test_struct.py | 4 +- Lib/test/test_structseq.py | 16 +- Lib/test/test_subprocess.py | 14 +- Lib/test/test_symtable.py | 2 +- Lib/test/test_sys.py | 102 ++-- Lib/test/test_tarfile.py | 86 ++-- Lib/test/test_tempfile.py | 112 ++--- Lib/test/test_threading.py | 30 +- Lib/test/test_threading_local.py | 2 +- Lib/test/test_time.py | 48 +- Lib/test/test_timeout.py | 16 +- Lib/test/test_tokenize.py | 2 +- Lib/test/test_traceback.py | 50 +- Lib/test/test_tuple.py | 12 +- Lib/test/test_types.py | 4 +- Lib/test/test_unary.py | 18 +- Lib/test/test_unicode.py | 76 +-- Lib/test/test_unicode_file.py | 38 +- Lib/test/test_unicodedata.py | 14 +- Lib/test/test_urllib.py | 26 +- Lib/test/test_urllib2.py | 58 +-- Lib/test/test_urllib2_localnet.py | 6 +- Lib/test/test_urllib2net.py | 6 +- Lib/test/test_urllibnet.py | 22 +- Lib/test/test_userdict.py | 14 +- Lib/test/test_uuid.py | 8 +- Lib/test/test_warnings.py | 64 +-- Lib/test/test_weakref.py | 164 +++--- Lib/test/test_weakset.py | 80 +-- Lib/test/test_winreg.py | 2 +- Lib/test/test_wsgiref.py | 44 +- Lib/test/test_xdrlib.py | 6 +- Lib/test/test_xmlrpc.py | 16 +- Lib/test/test_xmlrpc_net.py | 2 +- Lib/test/test_zipfile.py | 76 +-- Lib/test/test_zipimport.py | 4 +- Lib/test/test_zipimport_support.py | 8 +- Lib/test/test_zlib.py | 20 +- Lib/tkinter/test/test_tkinter/test_text.py | 12 +- Lib/tkinter/test/test_ttk/test_extensions.py | 82 +-- Lib/tkinter/test/test_ttk/test_functions.py | 156 +++--- Lib/tkinter/test/test_ttk/test_style.py | 30 +- Lib/tkinter/test/test_ttk/test_widgets.py | 560 ++++++++++----------- 274 files changed, 4543 insertions(+), 4543 deletions(-) diff --git a/Lib/ctypes/test/test_anon.py b/Lib/ctypes/test/test_anon.py index 99e02cb..d892b59 100644 --- a/Lib/ctypes/test/test_anon.py +++ b/Lib/ctypes/test/test_anon.py @@ -14,22 +14,22 @@ class AnonTest(unittest.TestCase): ("y", c_int)] _anonymous_ = ["_"] - self.failUnlessEqual(Y.a.offset, sizeof(c_int)) - self.failUnlessEqual(Y.b.offset, sizeof(c_int)) + self.assertEqual(Y.a.offset, sizeof(c_int)) + self.assertEqual(Y.b.offset, sizeof(c_int)) - self.failUnlessEqual(ANON.a.offset, 0) - self.failUnlessEqual(ANON.b.offset, 0) + self.assertEqual(ANON.a.offset, 0) + self.assertEqual(ANON.b.offset, 0) def test_anon_nonseq(self): # TypeError: _anonymous_ must be a sequence - self.failUnlessRaises(TypeError, + self.assertRaises(TypeError, lambda: type(Structure)("Name", (Structure,), {"_fields_": [], "_anonymous_": 42})) def test_anon_nonmember(self): # AttributeError: type object 'Name' has no attribute 'x' - self.failUnlessRaises(AttributeError, + self.assertRaises(AttributeError, lambda: type(Structure)("Name", (Structure,), {"_fields_": [], @@ -50,11 +50,11 @@ class AnonTest(unittest.TestCase): ("y", c_int)] _anonymous_ = ["_"] - self.failUnlessEqual(Y.x.offset, 0) - self.failUnlessEqual(Y.a.offset, sizeof(c_int)) - self.failUnlessEqual(Y.b.offset, sizeof(c_int)) - self.failUnlessEqual(Y._.offset, sizeof(c_int)) - self.failUnlessEqual(Y.y.offset, sizeof(c_int) * 2) + self.assertEqual(Y.x.offset, 0) + self.assertEqual(Y.a.offset, sizeof(c_int)) + self.assertEqual(Y.b.offset, sizeof(c_int)) + self.assertEqual(Y._.offset, sizeof(c_int)) + self.assertEqual(Y.y.offset, sizeof(c_int) * 2) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_array_in_pointer.py b/Lib/ctypes/test/test_array_in_pointer.py index 6bed1f1..ca1edcf 100644 --- a/Lib/ctypes/test/test_array_in_pointer.py +++ b/Lib/ctypes/test/test_array_in_pointer.py @@ -26,7 +26,7 @@ class Test(unittest.TestCase): c.pvalues = val_array # memory contains 4 NUL bytes now, that's correct - self.failUnlessEqual("00-00-00-00", dump(val_array)) + self.assertEqual("00-00-00-00", dump(val_array)) # set the values of the array through the pointer: for i in range(4): @@ -35,7 +35,7 @@ class Test(unittest.TestCase): values = [c.pvalues[i].val for i in range(4)] # These are the expected results: here s the bug! - self.failUnlessEqual( + self.assertEqual( (values, dump(val_array)), ([1, 2, 3, 4], "01-02-03-04") ) @@ -45,7 +45,7 @@ class Test(unittest.TestCase): val_array = (Value * 4)() # memory contains 4 NUL bytes now, that's correct - self.failUnlessEqual("00-00-00-00", dump(val_array)) + self.assertEqual("00-00-00-00", dump(val_array)) ptr = cast(val_array, POINTER(Value)) # set the values of the array through the pointer: @@ -55,7 +55,7 @@ class Test(unittest.TestCase): values = [ptr[i].val for i in range(4)] # These are the expected results: here s the bug! - self.failUnlessEqual( + self.assertEqual( (values, dump(val_array)), ([1, 2, 3, 4], "01-02-03-04") ) diff --git a/Lib/ctypes/test/test_arrays.py b/Lib/ctypes/test/test_arrays.py index 8b5476d..c0cdfd5 100644 --- a/Lib/ctypes/test/test_arrays.py +++ b/Lib/ctypes/test/test_arrays.py @@ -19,23 +19,23 @@ class ArrayTestCase(unittest.TestCase): ia = int_array(*init) # length of instance ok? - self.failUnlessEqual(len(ia), alen) + self.assertEqual(len(ia), alen) # slot values ok? values = [ia[i] for i in range(len(init))] - self.failUnlessEqual(values, init) + self.assertEqual(values, init) # change the items from operator import setitem new_values = list(range(42, 42+alen)) [setitem(ia, n, new_values[n]) for n in range(alen)] values = [ia[i] for i in range(len(init))] - self.failUnlessEqual(values, new_values) + self.assertEqual(values, new_values) # are the items initialized to 0? ia = int_array() values = [ia[i] for i in range(len(init))] - self.failUnlessEqual(values, [0] * len(init)) + self.assertEqual(values, [0] * len(init)) # Too many in itializers should be caught self.assertRaises(IndexError, int_array, *range(alen*2)) @@ -48,14 +48,14 @@ class ArrayTestCase(unittest.TestCase): # CharArray("abc") self.assertRaises(TypeError, CharArray, "abc") - self.failUnlessEqual(ca[0], b"a") - self.failUnlessEqual(ca[1], b"b") - self.failUnlessEqual(ca[2], b"c") - self.failUnlessEqual(ca[-3], b"a") - self.failUnlessEqual(ca[-2], b"b") - self.failUnlessEqual(ca[-1], b"c") + self.assertEqual(ca[0], b"a") + self.assertEqual(ca[1], b"b") + self.assertEqual(ca[2], b"c") + self.assertEqual(ca[-3], b"a") + self.assertEqual(ca[-2], b"b") + self.assertEqual(ca[-1], b"c") - self.failUnlessEqual(len(ca), 3) + self.assertEqual(len(ca), 3) # cannot delete items from operator import delitem @@ -69,34 +69,34 @@ class ArrayTestCase(unittest.TestCase): na = numarray() values = [na[i] for i in range(alen)] - self.failUnlessEqual(values, [0] * alen) + self.assertEqual(values, [0] * alen) na = numarray(*[c_int()] * alen) values = [na[i] for i in range(alen)] - self.failUnlessEqual(values, [0]*alen) + self.assertEqual(values, [0]*alen) na = numarray(1, 2, 3, 4, 5) values = [i for i in na] - self.failUnlessEqual(values, [1, 2, 3, 4, 5]) + self.assertEqual(values, [1, 2, 3, 4, 5]) na = numarray(*map(c_int, (1, 2, 3, 4, 5))) values = [i for i in na] - self.failUnlessEqual(values, [1, 2, 3, 4, 5]) + self.assertEqual(values, [1, 2, 3, 4, 5]) def test_classcache(self): - self.failUnless(not ARRAY(c_int, 3) is ARRAY(c_int, 4)) - self.failUnless(ARRAY(c_int, 3) is ARRAY(c_int, 3)) + self.assertTrue(not ARRAY(c_int, 3) is ARRAY(c_int, 4)) + self.assertTrue(ARRAY(c_int, 3) is ARRAY(c_int, 3)) def test_from_address(self): # Failed with 0.9.8, reported by JUrner p = create_string_buffer("foo") sz = (c_char * 3).from_address(addressof(p)) - self.failUnlessEqual(sz[:], b"foo") - self.failUnlessEqual(sz[::], b"foo") - self.failUnlessEqual(sz[::-1], b"oof") - self.failUnlessEqual(sz[::3], b"f") - self.failUnlessEqual(sz[1:4:2], b"o") - self.failUnlessEqual(sz.value, b"foo") + self.assertEqual(sz[:], b"foo") + self.assertEqual(sz[::], b"foo") + self.assertEqual(sz[::-1], b"oof") + self.assertEqual(sz[::3], b"f") + self.assertEqual(sz[1:4:2], b"o") + self.assertEqual(sz.value, b"foo") try: create_unicode_buffer @@ -106,12 +106,12 @@ class ArrayTestCase(unittest.TestCase): def test_from_addressW(self): p = create_unicode_buffer("foo") sz = (c_wchar * 3).from_address(addressof(p)) - self.failUnlessEqual(sz[:], "foo") - self.failUnlessEqual(sz[::], "foo") - self.failUnlessEqual(sz[::-1], "oof") - self.failUnlessEqual(sz[::3], "f") - self.failUnlessEqual(sz[1:4:2], "o") - self.failUnlessEqual(sz.value, "foo") + self.assertEqual(sz[:], "foo") + self.assertEqual(sz[::], "foo") + self.assertEqual(sz[::-1], "oof") + self.assertEqual(sz[::3], "f") + self.assertEqual(sz[1:4:2], "o") + self.assertEqual(sz.value, "foo") def test_cache(self): # Array types are cached internally in the _ctypes extension, @@ -125,7 +125,7 @@ class ArrayTestCase(unittest.TestCase): # Create a new array type based on it: t1 = my_int * 1 t2 = my_int * 1 - self.failUnless(t1 is t2) + self.assertTrue(t1 is t2) if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_as_parameter.py b/Lib/ctypes/test/test_as_parameter.py index 884361c..835398f 100644 --- a/Lib/ctypes/test/test_as_parameter.py +++ b/Lib/ctypes/test/test_as_parameter.py @@ -25,8 +25,8 @@ class BasicWrapTestCase(unittest.TestCase): f = dll._testfunc_i_bhilfd f.argtypes = [c_byte, c_wchar, c_int, c_long, c_float, c_double] result = f(self.wrap(1), self.wrap("x"), self.wrap(3), self.wrap(4), self.wrap(5.0), self.wrap(6.0)) - self.failUnlessEqual(result, 139) - self.failUnless(type(result), int) + self.assertEqual(result, 139) + self.assertTrue(type(result), int) def test_pointers(self): f = dll._testfunc_p_p @@ -39,18 +39,18 @@ class BasicWrapTestCase(unittest.TestCase): v = c_int(42) - self.failUnlessEqual(pointer(v).contents.value, 42) + self.assertEqual(pointer(v).contents.value, 42) result = f(self.wrap(pointer(v))) - self.failUnlessEqual(type(result), POINTER(c_int)) - self.failUnlessEqual(result.contents.value, 42) + self.assertEqual(type(result), POINTER(c_int)) + self.assertEqual(result.contents.value, 42) # This on works... result = f(self.wrap(pointer(v))) - self.failUnlessEqual(result.contents.value, v.value) + self.assertEqual(result.contents.value, v.value) p = pointer(c_int(99)) result = f(self.wrap(p)) - self.failUnlessEqual(result.contents.value, 99) + self.assertEqual(result.contents.value, 99) def test_shorts(self): f = dll._testfunc_callback_i_if @@ -67,7 +67,7 @@ class BasicWrapTestCase(unittest.TestCase): cb = CallBack(callback) f(self.wrap(2**18), self.wrap(cb)) - self.failUnlessEqual(args, expected) + self.assertEqual(args, expected) ################################################################ @@ -84,17 +84,17 @@ class BasicWrapTestCase(unittest.TestCase): cb = MyCallback(callback) result = f(self.wrap(-10), self.wrap(cb)) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) # test with prototype f.argtypes = [c_int, MyCallback] cb = MyCallback(callback) result = f(self.wrap(-10), self.wrap(cb)) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) result = f(self.wrap(-10), self.wrap(cb)) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) AnotherCallback = CALLBACK_FUNCTYPE(c_int, c_int, c_int, c_int, c_int) @@ -116,12 +116,12 @@ class BasicWrapTestCase(unittest.TestCase): def callback(value): #print "called back with", value - self.failUnlessEqual(type(value), int) + self.assertEqual(type(value), int) return value cb = MyCallback(callback) result = f(self.wrap(-10), self.wrap(cb)) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) def test_longlong_callbacks(self): @@ -133,12 +133,12 @@ class BasicWrapTestCase(unittest.TestCase): f.argtypes = [c_longlong, MyCallback] def callback(value): - self.failUnless(isinstance(value, int)) + self.assertTrue(isinstance(value, int)) return value & 0x7FFFFFFF cb = MyCallback(callback) - self.failUnlessEqual(13577625587, int(f(self.wrap(1000000000000), self.wrap(cb)))) + self.assertEqual(13577625587, int(f(self.wrap(1000000000000), self.wrap(cb)))) def test_byval(self): # without prototype @@ -148,7 +148,7 @@ class BasicWrapTestCase(unittest.TestCase): result = dll._testfunc_byval(ptin, byref(ptout)) got = result, ptout.x, ptout.y expected = 3, 1, 2 - self.failUnlessEqual(got, expected) + self.assertEqual(got, expected) # with prototype ptin = POINT(101, 102) @@ -158,7 +158,7 @@ class BasicWrapTestCase(unittest.TestCase): result = dll._testfunc_byval(self.wrap(ptin), byref(ptout)) got = result, ptout.x, ptout.y expected = 203, 101, 102 - self.failUnlessEqual(got, expected) + self.assertEqual(got, expected) def test_struct_return_2H(self): class S2H(Structure): @@ -168,7 +168,7 @@ class BasicWrapTestCase(unittest.TestCase): dll.ret_2h_func.argtypes = [S2H] inp = S2H(99, 88) s2h = dll.ret_2h_func(self.wrap(inp)) - self.failUnlessEqual((s2h.x, s2h.y), (99*2, 88*3)) + self.assertEqual((s2h.x, s2h.y), (99*2, 88*3)) def test_struct_return_8H(self): class S8I(Structure): @@ -184,7 +184,7 @@ class BasicWrapTestCase(unittest.TestCase): dll.ret_8i_func.argtypes = [S8I] inp = S8I(9, 8, 7, 6, 5, 4, 3, 2) s8i = dll.ret_8i_func(self.wrap(inp)) - self.failUnlessEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), + self.assertEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), (9*2, 8*3, 7*4, 6*5, 5*6, 4*7, 3*8, 2*9)) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/Lib/ctypes/test/test_bitfields.py b/Lib/ctypes/test/test_bitfields.py index de1c619..4eb9571 100644 --- a/Lib/ctypes/test/test_bitfields.py +++ b/Lib/ctypes/test/test_bitfields.py @@ -37,14 +37,14 @@ class C_Test(unittest.TestCase): for name in "ABCDEFGHI": b = BITS() setattr(b, name, i) - self.failUnlessEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name))) + self.assertEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name))) def test_shorts(self): for i in range(256): for name in "MNOPQRS": b = BITS() setattr(b, name, i) - self.failUnlessEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name))) + self.assertEqual((name, i, getattr(b, name)), (name, i, func(byref(b), name))) signed_int_types = (c_byte, c_short, c_int, c_long, c_longlong) unsigned_int_types = (c_ubyte, c_ushort, c_uint, c_ulong, c_ulonglong) @@ -58,10 +58,10 @@ class BitFieldTest(unittest.TestCase): ("b", c_longlong, 62), ("c", c_longlong, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_longlong)) + self.assertEqual(sizeof(X), sizeof(c_longlong)) x = X() x.a, x.b, x.c = -1, 7, -1 - self.failUnlessEqual((x.a, x.b, x.c), (-1, 7, -1)) + self.assertEqual((x.a, x.b, x.c), (-1, 7, -1)) def test_ulonglong(self): class X(Structure): @@ -69,11 +69,11 @@ class BitFieldTest(unittest.TestCase): ("b", c_ulonglong, 62), ("c", c_ulonglong, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_longlong)) + self.assertEqual(sizeof(X), sizeof(c_longlong)) x = X() - self.failUnlessEqual((x.a, x.b, x.c), (0, 0, 0)) + self.assertEqual((x.a, x.b, x.c), (0, 0, 0)) x.a, x.b, x.c = 7, 7, 7 - self.failUnlessEqual((x.a, x.b, x.c), (1, 7, 1)) + self.assertEqual((x.a, x.b, x.c), (1, 7, 1)) def test_signed(self): for c_typ in signed_int_types: @@ -82,14 +82,14 @@ class BitFieldTest(unittest.TestCase): ("a", c_typ, 3), ("b", c_typ, 3), ("c", c_typ, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_typ)*2) + self.assertEqual(sizeof(X), sizeof(c_typ)*2) x = X() - self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0)) + self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0)) x.a = -1 - self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, -1, 0, 0)) + self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, -1, 0, 0)) x.a, x.b = 0, -1 - self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, -1, 0)) + self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, -1, 0)) def test_unsigned(self): @@ -98,14 +98,14 @@ class BitFieldTest(unittest.TestCase): _fields_ = [("a", c_typ, 3), ("b", c_typ, 3), ("c", c_typ, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_typ)) + self.assertEqual(sizeof(X), sizeof(c_typ)) x = X() - self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0)) + self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0)) x.a = -1 - self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 7, 0, 0)) + self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 7, 0, 0)) x.a, x.b = 0, -1 - self.failUnlessEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 7, 0)) + self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 7, 0)) def fail_fields(self, *fields): @@ -115,17 +115,17 @@ class BitFieldTest(unittest.TestCase): def test_nonint_types(self): # bit fields are not allowed on non-integer types. result = self.fail_fields(("a", c_char_p, 1)) - self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_char_p')) + self.assertEqual(result, (TypeError, 'bit fields not allowed for type c_char_p')) result = self.fail_fields(("a", c_void_p, 1)) - self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_void_p')) + self.assertEqual(result, (TypeError, 'bit fields not allowed for type c_void_p')) if c_int != c_long: result = self.fail_fields(("a", POINTER(c_int), 1)) - self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type LP_c_int')) + self.assertEqual(result, (TypeError, 'bit fields not allowed for type LP_c_int')) result = self.fail_fields(("a", c_char, 1)) - self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_char')) + self.assertEqual(result, (TypeError, 'bit fields not allowed for type c_char')) try: c_wchar @@ -133,59 +133,59 @@ class BitFieldTest(unittest.TestCase): pass else: result = self.fail_fields(("a", c_wchar, 1)) - self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type c_wchar')) + self.assertEqual(result, (TypeError, 'bit fields not allowed for type c_wchar')) class Dummy(Structure): _fields_ = [] result = self.fail_fields(("a", Dummy, 1)) - self.failUnlessEqual(result, (TypeError, 'bit fields not allowed for type Dummy')) + self.assertEqual(result, (TypeError, 'bit fields not allowed for type Dummy')) def test_single_bitfield_size(self): for c_typ in int_types: result = self.fail_fields(("a", c_typ, -1)) - self.failUnlessEqual(result, (ValueError, 'number of bits invalid for bit field')) + self.assertEqual(result, (ValueError, 'number of bits invalid for bit field')) result = self.fail_fields(("a", c_typ, 0)) - self.failUnlessEqual(result, (ValueError, 'number of bits invalid for bit field')) + self.assertEqual(result, (ValueError, 'number of bits invalid for bit field')) class X(Structure): _fields_ = [("a", c_typ, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_typ)) + self.assertEqual(sizeof(X), sizeof(c_typ)) class X(Structure): _fields_ = [("a", c_typ, sizeof(c_typ)*8)] - self.failUnlessEqual(sizeof(X), sizeof(c_typ)) + self.assertEqual(sizeof(X), sizeof(c_typ)) result = self.fail_fields(("a", c_typ, sizeof(c_typ)*8 + 1)) - self.failUnlessEqual(result, (ValueError, 'number of bits invalid for bit field')) + self.assertEqual(result, (ValueError, 'number of bits invalid for bit field')) def test_multi_bitfields_size(self): class X(Structure): _fields_ = [("a", c_short, 1), ("b", c_short, 14), ("c", c_short, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_short)) + self.assertEqual(sizeof(X), sizeof(c_short)) class X(Structure): _fields_ = [("a", c_short, 1), ("a1", c_short), ("b", c_short, 14), ("c", c_short, 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_short)*3) - self.failUnlessEqual(X.a.offset, 0) - self.failUnlessEqual(X.a1.offset, sizeof(c_short)) - self.failUnlessEqual(X.b.offset, sizeof(c_short)*2) - self.failUnlessEqual(X.c.offset, sizeof(c_short)*2) + self.assertEqual(sizeof(X), sizeof(c_short)*3) + self.assertEqual(X.a.offset, 0) + self.assertEqual(X.a1.offset, sizeof(c_short)) + self.assertEqual(X.b.offset, sizeof(c_short)*2) + self.assertEqual(X.c.offset, sizeof(c_short)*2) class X(Structure): _fields_ = [("a", c_short, 3), ("b", c_short, 14), ("c", c_short, 14)] - self.failUnlessEqual(sizeof(X), sizeof(c_short)*3) - self.failUnlessEqual(X.a.offset, sizeof(c_short)*0) - self.failUnlessEqual(X.b.offset, sizeof(c_short)*1) - self.failUnlessEqual(X.c.offset, sizeof(c_short)*2) + self.assertEqual(sizeof(X), sizeof(c_short)*3) + self.assertEqual(X.a.offset, sizeof(c_short)*0) + self.assertEqual(X.b.offset, sizeof(c_short)*1) + self.assertEqual(X.c.offset, sizeof(c_short)*2) def get_except(self, func, *args, **kw): @@ -199,21 +199,21 @@ class BitFieldTest(unittest.TestCase): _fields_ = [("a", c_byte, 4), ("b", c_int, 4)] if os.name in ("nt", "ce"): - self.failUnlessEqual(sizeof(X), sizeof(c_int)*2) + self.assertEqual(sizeof(X), sizeof(c_int)*2) else: - self.failUnlessEqual(sizeof(X), sizeof(c_int)) + self.assertEqual(sizeof(X), sizeof(c_int)) def test_mixed_2(self): class X(Structure): _fields_ = [("a", c_byte, 4), ("b", c_int, 32)] - self.failUnlessEqual(sizeof(X), sizeof(c_int)*2) + self.assertEqual(sizeof(X), sizeof(c_int)*2) def test_mixed_3(self): class X(Structure): _fields_ = [("a", c_byte, 4), ("b", c_ubyte, 4)] - self.failUnlessEqual(sizeof(X), sizeof(c_byte)) + self.assertEqual(sizeof(X), sizeof(c_byte)) def test_mixed_4(self): class X(Structure): @@ -227,9 +227,9 @@ class BitFieldTest(unittest.TestCase): # does (unless GCC is run with '-mms-bitfields' which # produces code compatible with MSVC). if os.name in ("nt", "ce"): - self.failUnlessEqual(sizeof(X), sizeof(c_int) * 4) + self.assertEqual(sizeof(X), sizeof(c_int) * 4) else: - self.failUnlessEqual(sizeof(X), sizeof(c_int) * 2) + self.assertEqual(sizeof(X), sizeof(c_int) * 2) def test_anon_bitfields(self): # anonymous bit-fields gave a strange error message diff --git a/Lib/ctypes/test/test_buffers.py b/Lib/ctypes/test/test_buffers.py index 1f4091e..3f8a587 100644 --- a/Lib/ctypes/test/test_buffers.py +++ b/Lib/ctypes/test/test_buffers.py @@ -5,32 +5,32 @@ class StringBufferTestCase(unittest.TestCase): def test_buffer(self): b = create_string_buffer(32) - self.failUnlessEqual(len(b), 32) - self.failUnlessEqual(sizeof(b), 32 * sizeof(c_char)) - self.failUnless(type(b[0]) is bytes) + self.assertEqual(len(b), 32) + self.assertEqual(sizeof(b), 32 * sizeof(c_char)) + self.assertTrue(type(b[0]) is bytes) b = create_string_buffer("abc") - self.failUnlessEqual(len(b), 4) # trailing nul char - self.failUnlessEqual(sizeof(b), 4 * sizeof(c_char)) - self.failUnless(type(b[0]) is bytes) - self.failUnlessEqual(b[0], b"a") - self.failUnlessEqual(b[:], b"abc\0") - self.failUnlessEqual(b[::], b"abc\0") - self.failUnlessEqual(b[::-1], b"\0cba") - self.failUnlessEqual(b[::2], b"ac") - self.failUnlessEqual(b[::5], b"a") + self.assertEqual(len(b), 4) # trailing nul char + self.assertEqual(sizeof(b), 4 * sizeof(c_char)) + self.assertTrue(type(b[0]) is bytes) + self.assertEqual(b[0], b"a") + self.assertEqual(b[:], b"abc\0") + self.assertEqual(b[::], b"abc\0") + self.assertEqual(b[::-1], b"\0cba") + self.assertEqual(b[::2], b"ac") + self.assertEqual(b[::5], b"a") def test_string_conversion(self): b = create_string_buffer("abc") - self.failUnlessEqual(len(b), 4) # trailing nul char - self.failUnlessEqual(sizeof(b), 4 * sizeof(c_char)) - self.failUnless(type(b[0]) is bytes) - self.failUnlessEqual(b[0], b"a") - self.failUnlessEqual(b[:], b"abc\0") - self.failUnlessEqual(b[::], b"abc\0") - self.failUnlessEqual(b[::-1], b"\0cba") - self.failUnlessEqual(b[::2], b"ac") - self.failUnlessEqual(b[::5], b"a") + self.assertEqual(len(b), 4) # trailing nul char + self.assertEqual(sizeof(b), 4 * sizeof(c_char)) + self.assertTrue(type(b[0]) is bytes) + self.assertEqual(b[0], b"a") + self.assertEqual(b[:], b"abc\0") + self.assertEqual(b[::], b"abc\0") + self.assertEqual(b[::-1], b"\0cba") + self.assertEqual(b[::2], b"ac") + self.assertEqual(b[::5], b"a") try: c_wchar @@ -39,32 +39,32 @@ class StringBufferTestCase(unittest.TestCase): else: def test_unicode_buffer(self): b = create_unicode_buffer(32) - self.failUnlessEqual(len(b), 32) - self.failUnlessEqual(sizeof(b), 32 * sizeof(c_wchar)) - self.failUnless(type(b[0]) is str) + self.assertEqual(len(b), 32) + self.assertEqual(sizeof(b), 32 * sizeof(c_wchar)) + self.assertTrue(type(b[0]) is str) b = create_unicode_buffer("abc") - self.failUnlessEqual(len(b), 4) # trailing nul char - self.failUnlessEqual(sizeof(b), 4 * sizeof(c_wchar)) - self.failUnless(type(b[0]) is str) - self.failUnlessEqual(b[0], "a") - self.failUnlessEqual(b[:], "abc\0") - self.failUnlessEqual(b[::], "abc\0") - self.failUnlessEqual(b[::-1], "\0cba") - self.failUnlessEqual(b[::2], "ac") - self.failUnlessEqual(b[::5], "a") + self.assertEqual(len(b), 4) # trailing nul char + self.assertEqual(sizeof(b), 4 * sizeof(c_wchar)) + self.assertTrue(type(b[0]) is str) + self.assertEqual(b[0], "a") + self.assertEqual(b[:], "abc\0") + self.assertEqual(b[::], "abc\0") + self.assertEqual(b[::-1], "\0cba") + self.assertEqual(b[::2], "ac") + self.assertEqual(b[::5], "a") def test_unicode_conversion(self): b = create_unicode_buffer("abc") - self.failUnlessEqual(len(b), 4) # trailing nul char - self.failUnlessEqual(sizeof(b), 4 * sizeof(c_wchar)) - self.failUnless(type(b[0]) is str) - self.failUnlessEqual(b[0], "a") - self.failUnlessEqual(b[:], "abc\0") - self.failUnlessEqual(b[::], "abc\0") - self.failUnlessEqual(b[::-1], "\0cba") - self.failUnlessEqual(b[::2], "ac") - self.failUnlessEqual(b[::5], "a") + self.assertEqual(len(b), 4) # trailing nul char + self.assertEqual(sizeof(b), 4 * sizeof(c_wchar)) + self.assertTrue(type(b[0]) is str) + self.assertEqual(b[0], "a") + self.assertEqual(b[:], "abc\0") + self.assertEqual(b[::], "abc\0") + self.assertEqual(b[::-1], "\0cba") + self.assertEqual(b[::2], "ac") + self.assertEqual(b[::5], "a") if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_byteswap.py b/Lib/ctypes/test/test_byteswap.py index 67fa44b..83cb667 100644 --- a/Lib/ctypes/test/test_byteswap.py +++ b/Lib/ctypes/test/test_byteswap.py @@ -23,131 +23,131 @@ class Test(unittest.TestCase): def test_endian_short(self): if sys.byteorder == "little": - self.failUnless(c_short.__ctype_le__ is c_short) - self.failUnless(c_short.__ctype_be__.__ctype_le__ is c_short) + self.assertTrue(c_short.__ctype_le__ is c_short) + self.assertTrue(c_short.__ctype_be__.__ctype_le__ is c_short) else: - self.failUnless(c_short.__ctype_be__ is c_short) - self.failUnless(c_short.__ctype_le__.__ctype_be__ is c_short) + self.assertTrue(c_short.__ctype_be__ is c_short) + self.assertTrue(c_short.__ctype_le__.__ctype_be__ is c_short) s = c_short.__ctype_be__(0x1234) - self.failUnlessEqual(bin(struct.pack(">h", 0x1234)), "1234") - self.failUnlessEqual(bin(s), "1234") - self.failUnlessEqual(s.value, 0x1234) + self.assertEqual(bin(struct.pack(">h", 0x1234)), "1234") + self.assertEqual(bin(s), "1234") + self.assertEqual(s.value, 0x1234) s = c_short.__ctype_le__(0x1234) - self.failUnlessEqual(bin(struct.pack("h", 0x1234)), "1234") - self.failUnlessEqual(bin(s), "1234") - self.failUnlessEqual(s.value, 0x1234) + self.assertEqual(bin(struct.pack(">h", 0x1234)), "1234") + self.assertEqual(bin(s), "1234") + self.assertEqual(s.value, 0x1234) s = c_ushort.__ctype_le__(0x1234) - self.failUnlessEqual(bin(struct.pack("i", 0x12345678)), "12345678") - self.failUnlessEqual(bin(s), "12345678") - self.failUnlessEqual(s.value, 0x12345678) + self.assertEqual(bin(struct.pack(">i", 0x12345678)), "12345678") + self.assertEqual(bin(s), "12345678") + self.assertEqual(s.value, 0x12345678) s = c_int.__ctype_le__(0x12345678) - self.failUnlessEqual(bin(struct.pack("I", 0x12345678)), "12345678") - self.failUnlessEqual(bin(s), "12345678") - self.failUnlessEqual(s.value, 0x12345678) + self.assertEqual(bin(struct.pack(">I", 0x12345678)), "12345678") + self.assertEqual(bin(s), "12345678") + self.assertEqual(s.value, 0x12345678) s = c_uint.__ctype_le__(0x12345678) - self.failUnlessEqual(bin(struct.pack("q", 0x1234567890ABCDEF)), "1234567890ABCDEF") - self.failUnlessEqual(bin(s), "1234567890ABCDEF") - self.failUnlessEqual(s.value, 0x1234567890ABCDEF) + self.assertEqual(bin(struct.pack(">q", 0x1234567890ABCDEF)), "1234567890ABCDEF") + self.assertEqual(bin(s), "1234567890ABCDEF") + self.assertEqual(s.value, 0x1234567890ABCDEF) s = c_longlong.__ctype_le__(0x1234567890ABCDEF) - self.failUnlessEqual(bin(struct.pack("Q", 0x1234567890ABCDEF)), "1234567890ABCDEF") - self.failUnlessEqual(bin(s), "1234567890ABCDEF") - self.failUnlessEqual(s.value, 0x1234567890ABCDEF) + self.assertEqual(bin(struct.pack(">Q", 0x1234567890ABCDEF)), "1234567890ABCDEF") + self.assertEqual(bin(s), "1234567890ABCDEF") + self.assertEqual(s.value, 0x1234567890ABCDEF) s = c_ulonglong.__ctype_le__(0x1234567890ABCDEF) - self.failUnlessEqual(bin(struct.pack("f", math.pi)), bin(s)) + self.assertAlmostEqual(s.value, math.pi, places=6) + self.assertEqual(bin(struct.pack(">f", math.pi)), bin(s)) def test_endian_double(self): if sys.byteorder == "little": - self.failUnless(c_double.__ctype_le__ is c_double) - self.failUnless(c_double.__ctype_be__.__ctype_le__ is c_double) + self.assertTrue(c_double.__ctype_le__ is c_double) + self.assertTrue(c_double.__ctype_be__.__ctype_le__ is c_double) else: - self.failUnless(c_double.__ctype_be__ is c_double) - self.failUnless(c_double.__ctype_le__.__ctype_be__ is c_double) + self.assertTrue(c_double.__ctype_be__ is c_double) + self.assertTrue(c_double.__ctype_le__.__ctype_be__ is c_double) s = c_double(math.pi) - self.failUnlessEqual(s.value, math.pi) - self.failUnlessEqual(bin(struct.pack("d", math.pi)), bin(s)) + self.assertEqual(s.value, math.pi) + self.assertEqual(bin(struct.pack("d", math.pi)), bin(s)) s = c_double.__ctype_le__(math.pi) - self.failUnlessEqual(s.value, math.pi) - self.failUnlessEqual(bin(struct.pack("d", math.pi)), bin(s)) + self.assertEqual(s.value, math.pi) + self.assertEqual(bin(struct.pack(">d", math.pi)), bin(s)) def test_endian_other(self): - self.failUnless(c_byte.__ctype_le__ is c_byte) - self.failUnless(c_byte.__ctype_be__ is c_byte) + self.assertTrue(c_byte.__ctype_le__ is c_byte) + self.assertTrue(c_byte.__ctype_be__ is c_byte) - self.failUnless(c_ubyte.__ctype_le__ is c_ubyte) - self.failUnless(c_ubyte.__ctype_be__ is c_ubyte) + self.assertTrue(c_ubyte.__ctype_le__ is c_ubyte) + self.assertTrue(c_ubyte.__ctype_be__ is c_ubyte) - self.failUnless(c_char.__ctype_le__ is c_char) - self.failUnless(c_char.__ctype_be__ is c_char) + self.assertTrue(c_char.__ctype_le__ is c_char) + self.assertTrue(c_char.__ctype_be__ is c_char) def test_struct_fields_1(self): if sys.byteorder == "little": @@ -219,7 +219,7 @@ class Test(unittest.TestCase): s1 = S(0x12, 0x1234, 0x12345678, 3.14) s2 = struct.pack(fmt, 0x12, 0x1234, 0x12345678, 3.14) - self.failUnlessEqual(bin(s1), bin(s2)) + self.assertEqual(bin(s1), bin(s2)) def test_unaligned_nonnative_struct_fields(self): if sys.byteorder == "little": @@ -247,7 +247,7 @@ class Test(unittest.TestCase): s1.i = 0x12345678 s1.d = 3.14 s2 = struct.pack(fmt, 0x12, 0x1234, 0x12345678, 3.14) - self.failUnlessEqual(bin(s1), bin(s2)) + self.assertEqual(bin(s1), bin(s2)) def test_unaligned_native_struct_fields(self): if sys.byteorder == "little": @@ -274,7 +274,7 @@ class Test(unittest.TestCase): s1.i = 0x12345678 s1.d = 3.14 s2 = struct.pack(fmt, 0x12, 0x1234, 0x12345678, 3.14) - self.failUnlessEqual(bin(s1), bin(s2)) + self.assertEqual(bin(s1), bin(s2)) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py index bf580ae..1bef33f 100644 --- a/Lib/ctypes/test/test_callbacks.py +++ b/Lib/ctypes/test/test_callbacks.py @@ -17,18 +17,18 @@ class Callbacks(unittest.TestCase): PROTO = self.functype.__func__(typ, typ) result = PROTO(self.callback)(arg) if typ == c_float: - self.failUnlessAlmostEqual(result, arg, places=5) + self.assertAlmostEqual(result, arg, places=5) else: - self.failUnlessEqual(self.got_args, (arg,)) - self.failUnlessEqual(result, arg) + self.assertEqual(self.got_args, (arg,)) + self.assertEqual(result, arg) PROTO = self.functype.__func__(typ, c_byte, typ) result = PROTO(self.callback)(-3, arg) if typ == c_float: - self.failUnlessAlmostEqual(result, arg, places=5) + self.assertAlmostEqual(result, arg, places=5) else: - self.failUnlessEqual(self.got_args, (-3, arg)) - self.failUnlessEqual(result, arg) + self.assertEqual(self.got_args, (-3, arg)) + self.assertEqual(result, arg) ################ @@ -103,7 +103,7 @@ class Callbacks(unittest.TestCase): # ...but this call doesn't leak any more. Where is the refcount? self.check_type(py_object, o) after = grc(o) - self.failUnlessEqual((after, o), (before, o)) + self.assertEqual((after, o), (before, o)) def test_unsupported_restype_1(self): # Only "fundamental" result types are supported for callback @@ -148,7 +148,7 @@ class SampleCallbacksTestCase(unittest.TestCase): result = integrate(0.0, 1.0, CALLBACK(func), 10) diff = abs(result - 1./3.) - self.failUnless(diff < 0.01, "%s not less than 0.01" % diff) + self.assertTrue(diff < 0.01, "%s not less than 0.01" % diff) ################################################################ diff --git a/Lib/ctypes/test/test_cast.py b/Lib/ctypes/test/test_cast.py index cb7524e..04ed5ca 100644 --- a/Lib/ctypes/test/test_cast.py +++ b/Lib/ctypes/test/test_cast.py @@ -9,15 +9,15 @@ class Test(unittest.TestCase): # casting an array to a pointer works. ptr = cast(array, POINTER(c_int)) - self.failUnlessEqual([ptr[i] for i in range(3)], [42, 17, 2]) + self.assertEqual([ptr[i] for i in range(3)], [42, 17, 2]) if 2*sizeof(c_short) == sizeof(c_int): ptr = cast(array, POINTER(c_short)) if sys.byteorder == "little": - self.failUnlessEqual([ptr[i] for i in range(6)], + self.assertEqual([ptr[i] for i in range(6)], [42, 0, 17, 0, 2, 0]) else: - self.failUnlessEqual([ptr[i] for i in range(6)], + self.assertEqual([ptr[i] for i in range(6)], [0, 42, 0, 17, 0, 2]) def test_address2pointer(self): @@ -25,54 +25,54 @@ class Test(unittest.TestCase): address = addressof(array) ptr = cast(c_void_p(address), POINTER(c_int)) - self.failUnlessEqual([ptr[i] for i in range(3)], [42, 17, 2]) + self.assertEqual([ptr[i] for i in range(3)], [42, 17, 2]) ptr = cast(address, POINTER(c_int)) - self.failUnlessEqual([ptr[i] for i in range(3)], [42, 17, 2]) + self.assertEqual([ptr[i] for i in range(3)], [42, 17, 2]) def test_p2a_objects(self): array = (c_char_p * 5)() - self.failUnlessEqual(array._objects, None) + self.assertEqual(array._objects, None) array[0] = "foo bar" - self.failUnlessEqual(array._objects, {'0': b"foo bar"}) + self.assertEqual(array._objects, {'0': b"foo bar"}) p = cast(array, POINTER(c_char_p)) # array and p share a common _objects attribute - self.failUnless(p._objects is array._objects) - self.failUnlessEqual(array._objects, {'0': b"foo bar", id(array): array}) + self.assertTrue(p._objects is array._objects) + self.assertEqual(array._objects, {'0': b"foo bar", id(array): array}) p[0] = "spam spam" - self.failUnlessEqual(p._objects, {'0': b"spam spam", id(array): array}) - self.failUnless(array._objects is p._objects) + self.assertEqual(p._objects, {'0': b"spam spam", id(array): array}) + self.assertTrue(array._objects is p._objects) p[1] = "foo bar" - self.failUnlessEqual(p._objects, {'1': b'foo bar', '0': b"spam spam", id(array): array}) - self.failUnless(array._objects is p._objects) + self.assertEqual(p._objects, {'1': b'foo bar', '0': b"spam spam", id(array): array}) + self.assertTrue(array._objects is p._objects) def test_other(self): p = cast((c_int * 4)(1, 2, 3, 4), POINTER(c_int)) - self.failUnlessEqual(p[:4], [1,2, 3, 4]) - self.failUnlessEqual(p[:4:], [1, 2, 3, 4]) - self.failUnlessEqual(p[3:-1:-1], [4, 3, 2, 1]) - self.failUnlessEqual(p[:4:3], [1, 4]) + self.assertEqual(p[:4], [1,2, 3, 4]) + self.assertEqual(p[:4:], [1, 2, 3, 4]) + self.assertEqual(p[3:-1:-1], [4, 3, 2, 1]) + self.assertEqual(p[:4:3], [1, 4]) c_int() - self.failUnlessEqual(p[:4], [1, 2, 3, 4]) - self.failUnlessEqual(p[:4:], [1, 2, 3, 4]) - self.failUnlessEqual(p[3:-1:-1], [4, 3, 2, 1]) - self.failUnlessEqual(p[:4:3], [1, 4]) + self.assertEqual(p[:4], [1, 2, 3, 4]) + self.assertEqual(p[:4:], [1, 2, 3, 4]) + self.assertEqual(p[3:-1:-1], [4, 3, 2, 1]) + self.assertEqual(p[:4:3], [1, 4]) p[2] = 96 - self.failUnlessEqual(p[:4], [1, 2, 96, 4]) - self.failUnlessEqual(p[:4:], [1, 2, 96, 4]) - self.failUnlessEqual(p[3:-1:-1], [4, 96, 2, 1]) - self.failUnlessEqual(p[:4:3], [1, 4]) + self.assertEqual(p[:4], [1, 2, 96, 4]) + self.assertEqual(p[:4:], [1, 2, 96, 4]) + self.assertEqual(p[3:-1:-1], [4, 96, 2, 1]) + self.assertEqual(p[:4:3], [1, 4]) c_int() - self.failUnlessEqual(p[:4], [1, 2, 96, 4]) - self.failUnlessEqual(p[:4:], [1, 2, 96, 4]) - self.failUnlessEqual(p[3:-1:-1], [4, 96, 2, 1]) - self.failUnlessEqual(p[:4:3], [1, 4]) + self.assertEqual(p[:4], [1, 2, 96, 4]) + self.assertEqual(p[:4:], [1, 2, 96, 4]) + self.assertEqual(p[3:-1:-1], [4, 96, 2, 1]) + self.assertEqual(p[:4:3], [1, 4]) def test_char_p(self): # This didn't work: bad argument to internal function s = c_char_p("hiho") - self.failUnlessEqual(cast(cast(s, c_void_p), c_char_p).value, + self.assertEqual(cast(cast(s, c_void_p), c_char_p).value, "hiho") try: @@ -82,7 +82,7 @@ class Test(unittest.TestCase): else: def test_wchar_p(self): s = c_wchar_p("hiho") - self.failUnlessEqual(cast(cast(s, c_void_p), c_wchar_p).value, + self.assertEqual(cast(cast(s, c_void_p), c_wchar_p).value, "hiho") if __name__ == "__main__": diff --git a/Lib/ctypes/test/test_cfuncs.py b/Lib/ctypes/test/test_cfuncs.py index 8f97fc4..493cbe9 100644 --- a/Lib/ctypes/test/test_cfuncs.py +++ b/Lib/ctypes/test/test_cfuncs.py @@ -17,176 +17,176 @@ class CFunctions(unittest.TestCase): def test_byte(self): self._dll.tf_b.restype = c_byte self._dll.tf_b.argtypes = (c_byte,) - self.failUnlessEqual(self._dll.tf_b(-126), -42) - self.failUnlessEqual(self.S(), -126) + self.assertEqual(self._dll.tf_b(-126), -42) + self.assertEqual(self.S(), -126) def test_byte_plus(self): self._dll.tf_bb.restype = c_byte self._dll.tf_bb.argtypes = (c_byte, c_byte) - self.failUnlessEqual(self._dll.tf_bb(0, -126), -42) - self.failUnlessEqual(self.S(), -126) + self.assertEqual(self._dll.tf_bb(0, -126), -42) + self.assertEqual(self.S(), -126) def test_ubyte(self): self._dll.tf_B.restype = c_ubyte self._dll.tf_B.argtypes = (c_ubyte,) - self.failUnlessEqual(self._dll.tf_B(255), 85) - self.failUnlessEqual(self.U(), 255) + self.assertEqual(self._dll.tf_B(255), 85) + self.assertEqual(self.U(), 255) def test_ubyte_plus(self): self._dll.tf_bB.restype = c_ubyte self._dll.tf_bB.argtypes = (c_byte, c_ubyte) - self.failUnlessEqual(self._dll.tf_bB(0, 255), 85) - self.failUnlessEqual(self.U(), 255) + self.assertEqual(self._dll.tf_bB(0, 255), 85) + self.assertEqual(self.U(), 255) def test_short(self): self._dll.tf_h.restype = c_short self._dll.tf_h.argtypes = (c_short,) - self.failUnlessEqual(self._dll.tf_h(-32766), -10922) - self.failUnlessEqual(self.S(), -32766) + self.assertEqual(self._dll.tf_h(-32766), -10922) + self.assertEqual(self.S(), -32766) def test_short_plus(self): self._dll.tf_bh.restype = c_short self._dll.tf_bh.argtypes = (c_byte, c_short) - self.failUnlessEqual(self._dll.tf_bh(0, -32766), -10922) - self.failUnlessEqual(self.S(), -32766) + self.assertEqual(self._dll.tf_bh(0, -32766), -10922) + self.assertEqual(self.S(), -32766) def test_ushort(self): self._dll.tf_H.restype = c_ushort self._dll.tf_H.argtypes = (c_ushort,) - self.failUnlessEqual(self._dll.tf_H(65535), 21845) - self.failUnlessEqual(self.U(), 65535) + self.assertEqual(self._dll.tf_H(65535), 21845) + self.assertEqual(self.U(), 65535) def test_ushort_plus(self): self._dll.tf_bH.restype = c_ushort self._dll.tf_bH.argtypes = (c_byte, c_ushort) - self.failUnlessEqual(self._dll.tf_bH(0, 65535), 21845) - self.failUnlessEqual(self.U(), 65535) + self.assertEqual(self._dll.tf_bH(0, 65535), 21845) + self.assertEqual(self.U(), 65535) def test_int(self): self._dll.tf_i.restype = c_int self._dll.tf_i.argtypes = (c_int,) - self.failUnlessEqual(self._dll.tf_i(-2147483646), -715827882) - self.failUnlessEqual(self.S(), -2147483646) + self.assertEqual(self._dll.tf_i(-2147483646), -715827882) + self.assertEqual(self.S(), -2147483646) def test_int_plus(self): self._dll.tf_bi.restype = c_int self._dll.tf_bi.argtypes = (c_byte, c_int) - self.failUnlessEqual(self._dll.tf_bi(0, -2147483646), -715827882) - self.failUnlessEqual(self.S(), -2147483646) + self.assertEqual(self._dll.tf_bi(0, -2147483646), -715827882) + self.assertEqual(self.S(), -2147483646) def test_uint(self): self._dll.tf_I.restype = c_uint self._dll.tf_I.argtypes = (c_uint,) - self.failUnlessEqual(self._dll.tf_I(4294967295), 1431655765) - self.failUnlessEqual(self.U(), 4294967295) + self.assertEqual(self._dll.tf_I(4294967295), 1431655765) + self.assertEqual(self.U(), 4294967295) def test_uint_plus(self): self._dll.tf_bI.restype = c_uint self._dll.tf_bI.argtypes = (c_byte, c_uint) - self.failUnlessEqual(self._dll.tf_bI(0, 4294967295), 1431655765) - self.failUnlessEqual(self.U(), 4294967295) + self.assertEqual(self._dll.tf_bI(0, 4294967295), 1431655765) + self.assertEqual(self.U(), 4294967295) def test_long(self): self._dll.tf_l.restype = c_long self._dll.tf_l.argtypes = (c_long,) - self.failUnlessEqual(self._dll.tf_l(-2147483646), -715827882) - self.failUnlessEqual(self.S(), -2147483646) + self.assertEqual(self._dll.tf_l(-2147483646), -715827882) + self.assertEqual(self.S(), -2147483646) def test_long_plus(self): self._dll.tf_bl.restype = c_long self._dll.tf_bl.argtypes = (c_byte, c_long) - self.failUnlessEqual(self._dll.tf_bl(0, -2147483646), -715827882) - self.failUnlessEqual(self.S(), -2147483646) + self.assertEqual(self._dll.tf_bl(0, -2147483646), -715827882) + self.assertEqual(self.S(), -2147483646) def test_ulong(self): self._dll.tf_L.restype = c_ulong self._dll.tf_L.argtypes = (c_ulong,) - self.failUnlessEqual(self._dll.tf_L(4294967295), 1431655765) - self.failUnlessEqual(self.U(), 4294967295) + self.assertEqual(self._dll.tf_L(4294967295), 1431655765) + self.assertEqual(self.U(), 4294967295) def test_ulong_plus(self): self._dll.tf_bL.restype = c_ulong self._dll.tf_bL.argtypes = (c_char, c_ulong) - self.failUnlessEqual(self._dll.tf_bL(' ', 4294967295), 1431655765) - self.failUnlessEqual(self.U(), 4294967295) + self.assertEqual(self._dll.tf_bL(' ', 4294967295), 1431655765) + self.assertEqual(self.U(), 4294967295) def test_longlong(self): self._dll.tf_q.restype = c_longlong self._dll.tf_q.argtypes = (c_longlong, ) - self.failUnlessEqual(self._dll.tf_q(-9223372036854775806), -3074457345618258602) - self.failUnlessEqual(self.S(), -9223372036854775806) + self.assertEqual(self._dll.tf_q(-9223372036854775806), -3074457345618258602) + self.assertEqual(self.S(), -9223372036854775806) def test_longlong_plus(self): self._dll.tf_bq.restype = c_longlong self._dll.tf_bq.argtypes = (c_byte, c_longlong) - self.failUnlessEqual(self._dll.tf_bq(0, -9223372036854775806), -3074457345618258602) - self.failUnlessEqual(self.S(), -9223372036854775806) + self.assertEqual(self._dll.tf_bq(0, -9223372036854775806), -3074457345618258602) + self.assertEqual(self.S(), -9223372036854775806) def test_ulonglong(self): self._dll.tf_Q.restype = c_ulonglong self._dll.tf_Q.argtypes = (c_ulonglong, ) - self.failUnlessEqual(self._dll.tf_Q(18446744073709551615), 6148914691236517205) - self.failUnlessEqual(self.U(), 18446744073709551615) + self.assertEqual(self._dll.tf_Q(18446744073709551615), 6148914691236517205) + self.assertEqual(self.U(), 18446744073709551615) def test_ulonglong_plus(self): self._dll.tf_bQ.restype = c_ulonglong self._dll.tf_bQ.argtypes = (c_byte, c_ulonglong) - self.failUnlessEqual(self._dll.tf_bQ(0, 18446744073709551615), 6148914691236517205) - self.failUnlessEqual(self.U(), 18446744073709551615) + self.assertEqual(self._dll.tf_bQ(0, 18446744073709551615), 6148914691236517205) + self.assertEqual(self.U(), 18446744073709551615) def test_float(self): self._dll.tf_f.restype = c_float self._dll.tf_f.argtypes = (c_float,) - self.failUnlessEqual(self._dll.tf_f(-42.), -14.) - self.failUnlessEqual(self.S(), -42) + self.assertEqual(self._dll.tf_f(-42.), -14.) + self.assertEqual(self.S(), -42) def test_float_plus(self): self._dll.tf_bf.restype = c_float self._dll.tf_bf.argtypes = (c_byte, c_float) - self.failUnlessEqual(self._dll.tf_bf(0, -42.), -14.) - self.failUnlessEqual(self.S(), -42) + self.assertEqual(self._dll.tf_bf(0, -42.), -14.) + self.assertEqual(self.S(), -42) def test_double(self): self._dll.tf_d.restype = c_double self._dll.tf_d.argtypes = (c_double,) - self.failUnlessEqual(self._dll.tf_d(42.), 14.) - self.failUnlessEqual(self.S(), 42) + self.assertEqual(self._dll.tf_d(42.), 14.) + self.assertEqual(self.S(), 42) def test_double_plus(self): self._dll.tf_bd.restype = c_double self._dll.tf_bd.argtypes = (c_byte, c_double) - self.failUnlessEqual(self._dll.tf_bd(0, 42.), 14.) - self.failUnlessEqual(self.S(), 42) + self.assertEqual(self._dll.tf_bd(0, 42.), 14.) + self.assertEqual(self.S(), 42) def test_longdouble(self): self._dll.tf_D.restype = c_longdouble self._dll.tf_D.argtypes = (c_longdouble,) - self.failUnlessEqual(self._dll.tf_D(42.), 14.) - self.failUnlessEqual(self.S(), 42) + self.assertEqual(self._dll.tf_D(42.), 14.) + self.assertEqual(self.S(), 42) def test_longdouble_plus(self): self._dll.tf_bD.restype = c_longdouble self._dll.tf_bD.argtypes = (c_byte, c_longdouble) - self.failUnlessEqual(self._dll.tf_bD(0, 42.), 14.) - self.failUnlessEqual(self.S(), 42) + self.assertEqual(self._dll.tf_bD(0, 42.), 14.) + self.assertEqual(self.S(), 42) def test_callwithresult(self): def process_result(result): return result * 2 self._dll.tf_i.restype = process_result self._dll.tf_i.argtypes = (c_int,) - self.failUnlessEqual(self._dll.tf_i(42), 28) - self.failUnlessEqual(self.S(), 42) - self.failUnlessEqual(self._dll.tf_i(-42), -28) - self.failUnlessEqual(self.S(), -42) + self.assertEqual(self._dll.tf_i(42), 28) + self.assertEqual(self.S(), 42) + self.assertEqual(self._dll.tf_i(-42), -28) + self.assertEqual(self.S(), -42) def test_void(self): self._dll.tv_i.restype = None self._dll.tv_i.argtypes = (c_int,) - self.failUnlessEqual(self._dll.tv_i(42), None) - self.failUnlessEqual(self.S(), 42) - self.failUnlessEqual(self._dll.tv_i(-42), None) - self.failUnlessEqual(self.S(), -42) + self.assertEqual(self._dll.tv_i(42), None) + self.assertEqual(self.S(), 42) + self.assertEqual(self._dll.tv_i(-42), None) + self.assertEqual(self.S(), -42) # The following repeates the above tests with stdcall functions (where # they are available) diff --git a/Lib/ctypes/test/test_checkretval.py b/Lib/ctypes/test/test_checkretval.py index d15bd2e..01ccc57 100644 --- a/Lib/ctypes/test/test_checkretval.py +++ b/Lib/ctypes/test/test_checkretval.py @@ -14,16 +14,16 @@ class Test(unittest.TestCase): import _ctypes_test dll = CDLL(_ctypes_test.__file__) - self.failUnlessEqual(42, dll._testfunc_p_p(42)) + self.assertEqual(42, dll._testfunc_p_p(42)) dll._testfunc_p_p.restype = CHECKED - self.failUnlessEqual("42", dll._testfunc_p_p(42)) + self.assertEqual("42", dll._testfunc_p_p(42)) dll._testfunc_p_p.restype = None - self.failUnlessEqual(None, dll._testfunc_p_p(42)) + self.assertEqual(None, dll._testfunc_p_p(42)) del dll._testfunc_p_p.restype - self.failUnlessEqual(42, dll._testfunc_p_p(42)) + self.assertEqual(42, dll._testfunc_p_p(42)) try: oledll @@ -31,7 +31,7 @@ class Test(unittest.TestCase): pass else: def test_oledll(self): - self.failUnlessRaises(WindowsError, + self.assertRaises(WindowsError, oledll.oleaut32.CreateTypeLib2, 0, None, None) diff --git a/Lib/ctypes/test/test_errno.py b/Lib/ctypes/test/test_errno.py index b80656b..0254c3b 100644 --- a/Lib/ctypes/test/test_errno.py +++ b/Lib/ctypes/test/test_errno.py @@ -15,11 +15,11 @@ class Test(unittest.TestCase): libc_open.argtypes = c_char_p, c_int - self.failUnlessEqual(libc_open("", 0), -1) - self.failUnlessEqual(get_errno(), errno.ENOENT) + self.assertEqual(libc_open("", 0), -1) + self.assertEqual(get_errno(), errno.ENOENT) - self.failUnlessEqual(set_errno(32), errno.ENOENT) - self.failUnlessEqual(get_errno(), 32) + self.assertEqual(set_errno(32), errno.ENOENT) + self.assertEqual(get_errno(), 32) def _worker(): @@ -31,14 +31,14 @@ class Test(unittest.TestCase): else: libc_open = libc.open libc_open.argtypes = c_char_p, c_int - self.failUnlessEqual(libc_open("", 0), -1) - self.failUnlessEqual(get_errno(), 0) + self.assertEqual(libc_open("", 0), -1) + self.assertEqual(get_errno(), 0) t = threading.Thread(target=_worker) t.start() t.join() - self.failUnlessEqual(get_errno(), 32) + self.assertEqual(get_errno(), 32) set_errno(0) if os.name == "nt": @@ -48,11 +48,11 @@ class Test(unittest.TestCase): GetModuleHandle = dll.GetModuleHandleA GetModuleHandle.argtypes = [c_wchar_p] - self.failUnlessEqual(0, GetModuleHandle("foo")) - self.failUnlessEqual(get_last_error(), 126) + self.assertEqual(0, GetModuleHandle("foo")) + self.assertEqual(get_last_error(), 126) - self.failUnlessEqual(set_last_error(32), 126) - self.failUnlessEqual(get_last_error(), 32) + self.assertEqual(set_last_error(32), 126) + self.assertEqual(get_last_error(), 32) def _worker(): set_last_error(0) @@ -62,13 +62,13 @@ class Test(unittest.TestCase): GetModuleHandle.argtypes = [c_wchar_p] GetModuleHandle("bar") - self.failUnlessEqual(get_last_error(), 0) + self.assertEqual(get_last_error(), 0) t = threading.Thread(target=_worker) t.start() t.join() - self.failUnlessEqual(get_last_error(), 32) + self.assertEqual(get_last_error(), 32) set_last_error(0) diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py index dc05093..c54b69b 100644 --- a/Lib/ctypes/test/test_find.py +++ b/Lib/ctypes/test/test_find.py @@ -76,7 +76,7 @@ class Test_OpenGL_libs(unittest.TestCase): ## sqrt = libm.sqrt ## sqrt.argtypes = (c_double,) ## sqrt.restype = c_double -## self.failUnlessEqual(sqrt(2), math.sqrt(2)) +## self.assertEqual(sqrt(2), math.sqrt(2)) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_frombuffer.py b/Lib/ctypes/test/test_frombuffer.py index 23e2dcb..92d6158 100644 --- a/Lib/ctypes/test/test_frombuffer.py +++ b/Lib/ctypes/test/test_frombuffer.py @@ -16,14 +16,14 @@ class Test(unittest.TestCase): y = X.from_buffer(a) self.assertEqual(y.c_int, a[0]) - self.failIf(y.init_called) + self.assertFalse(y.init_called) self.assertEqual(x[:], a.tolist()) a[0], a[-1] = 200, -200 self.assertEqual(x[:], a.tolist()) - self.assert_(a in x._objects.values()) + self.assertTrue(a in x._objects.values()) self.assertRaises(ValueError, c_int.from_buffer, a, -1) @@ -49,7 +49,7 @@ class Test(unittest.TestCase): y = X.from_buffer_copy(a) self.assertEqual(y.c_int, a[0]) - self.failIf(y.init_called) + self.assertFalse(y.init_called) self.assertEqual(x[:], list(range(16))) diff --git a/Lib/ctypes/test/test_funcptr.py b/Lib/ctypes/test/test_funcptr.py index 56099cc..1b29317 100644 --- a/Lib/ctypes/test/test_funcptr.py +++ b/Lib/ctypes/test/test_funcptr.py @@ -18,10 +18,10 @@ class CFuncPtrTestCase(unittest.TestCase): return len(args) x = X(func) - self.failUnlessEqual(x.restype, c_int) - self.failUnlessEqual(x.argtypes, (c_int, c_int)) - self.failUnlessEqual(sizeof(x), sizeof(c_voidp)) - self.failUnlessEqual(sizeof(X), sizeof(c_voidp)) + self.assertEqual(x.restype, c_int) + self.assertEqual(x.argtypes, (c_int, c_int)) + self.assertEqual(sizeof(x), sizeof(c_voidp)) + self.assertEqual(sizeof(X), sizeof(c_voidp)) def test_first(self): StdCallback = WINFUNCTYPE(c_int, c_int, c_int) @@ -33,12 +33,12 @@ class CFuncPtrTestCase(unittest.TestCase): s = StdCallback(func) c = CdeclCallback(func) - self.failUnlessEqual(s(1, 2), 3) - self.failUnlessEqual(c(1, 2), 3) + self.assertEqual(s(1, 2), 3) + self.assertEqual(c(1, 2), 3) # The following no longer raises a TypeError - it is now # possible, as in C, to call cdecl functions with more parameters. #self.assertRaises(TypeError, c, 1, 2, 3) - self.failUnlessEqual(c(1, 2, 3, 4, 5, 6), 3) + self.assertEqual(c(1, 2, 3, 4, 5, 6), 3) if not WINFUNCTYPE is CFUNCTYPE and os.name != "ce": self.assertRaises(TypeError, s, 1, 2, 3) @@ -75,9 +75,9 @@ class CFuncPtrTestCase(unittest.TestCase): ## "lpfnWndProc", WNDPROC_2(wndproc)) # instead: - self.failUnless(WNDPROC is WNDPROC_2) + self.assertTrue(WNDPROC is WNDPROC_2) # 'wndclass.lpfnWndProc' leaks 94 references. Why? - self.failUnlessEqual(wndclass.lpfnWndProc(1, 2, 3, 4), 10) + self.assertEqual(wndclass.lpfnWndProc(1, 2, 3, 4), 10) f = wndclass.lpfnWndProc @@ -85,7 +85,7 @@ class CFuncPtrTestCase(unittest.TestCase): del wndclass del wndproc - self.failUnlessEqual(f(10, 11, 12, 13), 46) + self.assertEqual(f(10, 11, 12, 13), 46) def test_dllfunctions(self): @@ -97,8 +97,8 @@ class CFuncPtrTestCase(unittest.TestCase): strchr = lib.my_strchr strchr.restype = c_char_p strchr.argtypes = (c_char_p, c_char) - self.failUnlessEqual(strchr("abcdefghi", "b"), "bcdefghi") - self.failUnlessEqual(strchr("abcdefghi", "x"), None) + self.assertEqual(strchr("abcdefghi", "b"), "bcdefghi") + self.assertEqual(strchr("abcdefghi", "x"), None) strtok = lib.my_strtok @@ -118,10 +118,10 @@ class CFuncPtrTestCase(unittest.TestCase): ## b.value = s ## b = c_string(s) - self.failUnlessEqual(strtok(b, b"\n"), "a") - self.failUnlessEqual(strtok(None, b"\n"), "b") - self.failUnlessEqual(strtok(None, b"\n"), "c") - self.failUnlessEqual(strtok(None, b"\n"), None) + self.assertEqual(strtok(b, b"\n"), "a") + self.assertEqual(strtok(None, b"\n"), "b") + self.assertEqual(strtok(None, b"\n"), "c") + self.assertEqual(strtok(None, b"\n"), None) if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_functions.py b/Lib/ctypes/test/test_functions.py index 3af11cc..303ce07 100644 --- a/Lib/ctypes/test/test_functions.py +++ b/Lib/ctypes/test/test_functions.py @@ -71,8 +71,8 @@ class FunctionTestCase(unittest.TestCase): f = dll._testfunc_i_bhilfd f.argtypes = [c_byte, c_wchar, c_int, c_long, c_float, c_double] result = f(1, "x", 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 139) - self.failUnlessEqual(type(result), int) + self.assertEqual(result, 139) + self.assertEqual(type(result), int) def test_wchar_result(self): try: @@ -83,38 +83,38 @@ class FunctionTestCase(unittest.TestCase): f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_double] f.restype = c_wchar result = f(0, 0, 0, 0, 0, 0) - self.failUnlessEqual(result, '\x00') + self.assertEqual(result, '\x00') def test_voidresult(self): f = dll._testfunc_v f.restype = None f.argtypes = [c_int, c_int, POINTER(c_int)] result = c_int() - self.failUnlessEqual(None, f(1, 2, byref(result))) - self.failUnlessEqual(result.value, 3) + self.assertEqual(None, f(1, 2, byref(result))) + self.assertEqual(result.value, 3) def test_intresult(self): f = dll._testfunc_i_bhilfd f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_double] f.restype = c_int result = f(1, 2, 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 21) - self.failUnlessEqual(type(result), int) + self.assertEqual(result, 21) + self.assertEqual(type(result), int) result = f(-1, -2, -3, -4, -5.0, -6.0) - self.failUnlessEqual(result, -21) - self.failUnlessEqual(type(result), int) + self.assertEqual(result, -21) + self.assertEqual(type(result), int) # If we declare the function to return a short, # is the high part split off? f.restype = c_short result = f(1, 2, 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 21) - self.failUnlessEqual(type(result), int) + self.assertEqual(result, 21) + self.assertEqual(type(result), int) result = f(1, 2, 3, 0x10004, 5.0, 6.0) - self.failUnlessEqual(result, 21) - self.failUnlessEqual(type(result), int) + self.assertEqual(result, 21) + self.assertEqual(type(result), int) # You cannot assing character format codes as restype any longer self.assertRaises(TypeError, setattr, f, "restype", "i") @@ -124,36 +124,36 @@ class FunctionTestCase(unittest.TestCase): f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_double] f.restype = c_float result = f(1, 2, 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 21) - self.failUnlessEqual(type(result), float) + self.assertEqual(result, 21) + self.assertEqual(type(result), float) result = f(-1, -2, -3, -4, -5.0, -6.0) - self.failUnlessEqual(result, -21) - self.failUnlessEqual(type(result), float) + self.assertEqual(result, -21) + self.assertEqual(type(result), float) def test_doubleresult(self): f = dll._testfunc_d_bhilfd f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_double] f.restype = c_double result = f(1, 2, 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 21) - self.failUnlessEqual(type(result), float) + self.assertEqual(result, 21) + self.assertEqual(type(result), float) result = f(-1, -2, -3, -4, -5.0, -6.0) - self.failUnlessEqual(result, -21) - self.failUnlessEqual(type(result), float) + self.assertEqual(result, -21) + self.assertEqual(type(result), float) def test_longdoubleresult(self): f = dll._testfunc_D_bhilfD f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_longdouble] f.restype = c_longdouble result = f(1, 2, 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 21) - self.failUnlessEqual(type(result), float) + self.assertEqual(result, 21) + self.assertEqual(type(result), float) result = f(-1, -2, -3, -4, -5.0, -6.0) - self.failUnlessEqual(result, -21) - self.failUnlessEqual(type(result), float) + self.assertEqual(result, -21) + self.assertEqual(type(result), float) def test_longlongresult(self): try: @@ -164,23 +164,23 @@ class FunctionTestCase(unittest.TestCase): f.restype = c_longlong f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_double] result = f(1, 2, 3, 4, 5.0, 6.0) - self.failUnlessEqual(result, 21) + self.assertEqual(result, 21) f = dll._testfunc_q_bhilfdq f.restype = c_longlong f.argtypes = [c_byte, c_short, c_int, c_long, c_float, c_double, c_longlong] result = f(1, 2, 3, 4, 5.0, 6.0, 21) - self.failUnlessEqual(result, 42) + self.assertEqual(result, 42) def test_stringresult(self): f = dll._testfunc_p_p f.argtypes = None f.restype = c_char_p result = f(b"123") - self.failUnlessEqual(result, "123") + self.assertEqual(result, "123") result = f(None) - self.failUnlessEqual(result, None) + self.assertEqual(result, None) def test_pointers(self): f = dll._testfunc_p_p @@ -193,29 +193,29 @@ class FunctionTestCase(unittest.TestCase): v = c_int(42) - self.failUnlessEqual(pointer(v).contents.value, 42) + self.assertEqual(pointer(v).contents.value, 42) result = f(pointer(v)) - self.failUnlessEqual(type(result), POINTER(c_int)) - self.failUnlessEqual(result.contents.value, 42) + self.assertEqual(type(result), POINTER(c_int)) + self.assertEqual(result.contents.value, 42) # This on works... result = f(pointer(v)) - self.failUnlessEqual(result.contents.value, v.value) + self.assertEqual(result.contents.value, v.value) p = pointer(c_int(99)) result = f(p) - self.failUnlessEqual(result.contents.value, 99) + self.assertEqual(result.contents.value, 99) arg = byref(v) result = f(arg) - self.failIfEqual(result.contents, v.value) + self.assertNotEqual(result.contents, v.value) self.assertRaises(ArgumentError, f, byref(c_short(22))) # It is dangerous, however, because you don't control the lifetime # of the pointer: result = f(byref(c_int(99))) - self.failIfEqual(result.contents, 99) + self.assertNotEqual(result.contents, 99) def test_errors(self): f = dll._testfunc_p_p @@ -242,7 +242,7 @@ class FunctionTestCase(unittest.TestCase): cb = CallBack(callback) f(2**18, cb) - self.failUnlessEqual(args, expected) + self.assertEqual(args, expected) ################################################################ @@ -259,13 +259,13 @@ class FunctionTestCase(unittest.TestCase): cb = MyCallback(callback) result = f(-10, cb) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) # test with prototype f.argtypes = [c_int, MyCallback] cb = MyCallback(callback) result = f(-10, cb) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) AnotherCallback = WINFUNCTYPE(c_int, c_int, c_int, c_int, c_int) @@ -288,12 +288,12 @@ class FunctionTestCase(unittest.TestCase): def callback(value): #print "called back with", value - self.failUnlessEqual(type(value), int) + self.assertEqual(type(value), int) return value cb = MyCallback(callback) result = f(-10, cb) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) def test_longlong_callbacks(self): @@ -305,12 +305,12 @@ class FunctionTestCase(unittest.TestCase): f.argtypes = [c_longlong, MyCallback] def callback(value): - self.failUnless(isinstance(value, int)) + self.assertTrue(isinstance(value, int)) return value & 0x7FFFFFFF cb = MyCallback(callback) - self.failUnlessEqual(13577625587, f(1000000000000, cb)) + self.assertEqual(13577625587, f(1000000000000, cb)) def test_errors(self): self.assertRaises(AttributeError, getattr, dll, "_xxx_yyy") @@ -325,7 +325,7 @@ class FunctionTestCase(unittest.TestCase): result = dll._testfunc_byval(ptin, byref(ptout)) got = result, ptout.x, ptout.y expected = 3, 1, 2 - self.failUnlessEqual(got, expected) + self.assertEqual(got, expected) # with prototype ptin = POINT(101, 102) @@ -335,7 +335,7 @@ class FunctionTestCase(unittest.TestCase): result = dll._testfunc_byval(ptin, byref(ptout)) got = result, ptout.x, ptout.y expected = 203, 101, 102 - self.failUnlessEqual(got, expected) + self.assertEqual(got, expected) def test_struct_return_2H(self): class S2H(Structure): @@ -345,7 +345,7 @@ class FunctionTestCase(unittest.TestCase): dll.ret_2h_func.argtypes = [S2H] inp = S2H(99, 88) s2h = dll.ret_2h_func(inp) - self.failUnlessEqual((s2h.x, s2h.y), (99*2, 88*3)) + self.assertEqual((s2h.x, s2h.y), (99*2, 88*3)) if sys.platform == "win32": def test_struct_return_2H_stdcall(self): @@ -356,7 +356,7 @@ class FunctionTestCase(unittest.TestCase): windll.s_ret_2h_func.restype = S2H windll.s_ret_2h_func.argtypes = [S2H] s2h = windll.s_ret_2h_func(S2H(99, 88)) - self.failUnlessEqual((s2h.x, s2h.y), (99*2, 88*3)) + self.assertEqual((s2h.x, s2h.y), (99*2, 88*3)) def test_struct_return_8H(self): class S8I(Structure): @@ -372,7 +372,7 @@ class FunctionTestCase(unittest.TestCase): dll.ret_8i_func.argtypes = [S8I] inp = S8I(9, 8, 7, 6, 5, 4, 3, 2) s8i = dll.ret_8i_func(inp) - self.failUnlessEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), + self.assertEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), (9*2, 8*3, 7*4, 6*5, 5*6, 4*7, 3*8, 2*9)) if sys.platform == "win32": @@ -390,7 +390,7 @@ class FunctionTestCase(unittest.TestCase): windll.s_ret_8i_func.argtypes = [S8I] inp = S8I(9, 8, 7, 6, 5, 4, 3, 2) s8i = windll.s_ret_8i_func(inp) - self.failUnlessEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), + self.assertEqual((s8i.a, s8i.b, s8i.c, s8i.d, s8i.e, s8i.f, s8i.g, s8i.h), (9*2, 8*3, 7*4, 6*5, 5*6, 4*7, 3*8, 2*9)) def test_sf1651235(self): @@ -401,7 +401,7 @@ class FunctionTestCase(unittest.TestCase): return 0 callback = proto(callback) - self.failUnlessRaises(ArgumentError, lambda: callback((1, 2, 3, 4), POINT())) + self.assertRaises(ArgumentError, lambda: callback((1, 2, 3, 4), POINT())) if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_incomplete.py b/Lib/ctypes/test/test_incomplete.py index af9f504..1e03e9f 100644 --- a/Lib/ctypes/test/test_incomplete.py +++ b/Lib/ctypes/test/test_incomplete.py @@ -30,7 +30,7 @@ class MyTestCase(unittest.TestCase): for i in range(8): result.append(p.name) p = p.next[0] - self.failUnlessEqual(result, ["foo", "bar"] * 4) + self.assertEqual(result, ["foo", "bar"] * 4) # to not leak references, we must clean _pointer_type_cache from ctypes import _pointer_type_cache diff --git a/Lib/ctypes/test/test_init.py b/Lib/ctypes/test/test_init.py index e4dfe36..94928c8 100644 --- a/Lib/ctypes/test/test_init.py +++ b/Lib/ctypes/test/test_init.py @@ -24,17 +24,17 @@ class InitTest(unittest.TestCase): # make sure the only accessing a nested structure # doesn't call the structure's __new__ and __init__ y = Y() - self.failUnlessEqual((y.x.a, y.x.b), (0, 0)) - self.failUnlessEqual(y.x.new_was_called, False) + self.assertEqual((y.x.a, y.x.b), (0, 0)) + self.assertEqual(y.x.new_was_called, False) # But explicitely creating an X structure calls __new__ and __init__, of course. x = X() - self.failUnlessEqual((x.a, x.b), (9, 12)) - self.failUnlessEqual(x.new_was_called, True) + self.assertEqual((x.a, x.b), (9, 12)) + self.assertEqual(x.new_was_called, True) y.x = x - self.failUnlessEqual((y.x.a, y.x.b), (9, 12)) - self.failUnlessEqual(y.x.new_was_called, False) + self.assertEqual((y.x.a, y.x.b), (9, 12)) + self.assertEqual(y.x.new_was_called, False) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_internals.py b/Lib/ctypes/test/test_internals.py index c6a51a7..f7d9a1b 100644 --- a/Lib/ctypes/test/test_internals.py +++ b/Lib/ctypes/test/test_internals.py @@ -18,22 +18,22 @@ What about pointers? """ class ObjectsTestCase(unittest.TestCase): - def failUnlessSame(self, a, b): - self.failUnlessEqual(id(a), id(b)) + def assertTrueSame(self, a, b): + self.assertEqual(id(a), id(b)) def test_ints(self): i = 42000123 rc = grc(i) ci = c_int(i) - self.failUnlessEqual(rc, grc(i)) - self.failUnlessEqual(ci._objects, None) + self.assertEqual(rc, grc(i)) + self.assertEqual(ci._objects, None) def test_c_char_p(self): s = b"Hello, World" rc = grc(s) cs = c_char_p(s) - self.failUnlessEqual(rc + 1, grc(s)) - self.failUnlessSame(cs._objects, s) + self.assertEqual(rc + 1, grc(s)) + self.assertTrueSame(cs._objects, s) def test_simple_struct(self): class X(Structure): @@ -42,10 +42,10 @@ class ObjectsTestCase(unittest.TestCase): a = 421234 b = 421235 x = X() - self.failUnlessEqual(x._objects, None) + self.assertEqual(x._objects, None) x.a = a x.b = b - self.failUnlessEqual(x._objects, None) + self.assertEqual(x._objects, None) def test_embedded_structs(self): class X(Structure): @@ -55,13 +55,13 @@ class ObjectsTestCase(unittest.TestCase): _fields_ = [("x", X), ("y", X)] y = Y() - self.failUnlessEqual(y._objects, None) + self.assertEqual(y._objects, None) x1, x2 = X(), X() y.x, y.y = x1, x2 - self.failUnlessEqual(y._objects, {"0": {}, "1": {}}) + self.assertEqual(y._objects, {"0": {}, "1": {}}) x1.a, x2.b = 42, 93 - self.failUnlessEqual(y._objects, {"0": {}, "1": {}}) + self.assertEqual(y._objects, {"0": {}, "1": {}}) def test_xxx(self): class X(Structure): @@ -76,12 +76,12 @@ class ObjectsTestCase(unittest.TestCase): x = X() x.a = s1 x.b = s2 - self.failUnlessEqual(x._objects, {"0": bytes(s1, "ascii"), + self.assertEqual(x._objects, {"0": bytes(s1, "ascii"), "1": bytes(s2, "ascii")}) y = Y() y.x = x - self.failUnlessEqual(y._objects, {"0": {"0": bytes(s1, "ascii"), + self.assertEqual(y._objects, {"0": {"0": bytes(s1, "ascii"), "1": bytes(s2, "ascii")}}) ## x = y.x ## del y @@ -93,7 +93,7 @@ class ObjectsTestCase(unittest.TestCase): A = c_int*4 a = A(11, 22, 33, 44) - self.failUnlessEqual(a._objects, None) + self.assertEqual(a._objects, None) x = X() x.data = a diff --git a/Lib/ctypes/test/test_keeprefs.py b/Lib/ctypes/test/test_keeprefs.py index 75e227c..b90765a 100644 --- a/Lib/ctypes/test/test_keeprefs.py +++ b/Lib/ctypes/test/test_keeprefs.py @@ -91,7 +91,7 @@ class PointerTestCase(unittest.TestCase): def test_p_cint(self): i = c_int(42) x = pointer(i) - self.failUnlessEqual(x._objects, {'1': i}) + self.assertEqual(x._objects, {'1': i}) class DeletePointerTestCase(unittest.TestCase): def X_test(self): diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py index fa4c0c9..cce409f 100644 --- a/Lib/ctypes/test/test_libc.py +++ b/Lib/ctypes/test/test_libc.py @@ -13,9 +13,9 @@ class LibTest(unittest.TestCase): def test_sqrt(self): lib.my_sqrt.argtypes = c_double, lib.my_sqrt.restype = c_double - self.failUnlessEqual(lib.my_sqrt(4.0), 2.0) + self.assertEqual(lib.my_sqrt(4.0), 2.0) import math - self.failUnlessEqual(lib.my_sqrt(2.0), math.sqrt(2.0)) + self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0)) def test_qsort(self): comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char)) @@ -27,7 +27,7 @@ class LibTest(unittest.TestCase): chars = create_string_buffer("spam, spam, and spam") lib.my_qsort(chars, len(chars)-1, sizeof(c_char), comparefunc(sort)) - self.failUnlessEqual(chars.raw, b" ,,aaaadmmmnpppsss\x00") + self.assertEqual(chars.raw, b" ,,aaaadmmmnpppsss\x00") if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_loading.py b/Lib/ctypes/test/test_loading.py index b83828a..07b69ec 100644 --- a/Lib/ctypes/test/test_loading.py +++ b/Lib/ctypes/test/test_loading.py @@ -43,7 +43,7 @@ class LoaderTest(unittest.TestCase): if os.name in ("nt", "ce"): def test_load_library(self): - self.failIf(libc_name is None) + self.assertFalse(libc_name is None) if is_resource_enabled("printing"): print(find_library("kernel32")) print(find_library("user32")) @@ -70,9 +70,9 @@ class LoaderTest(unittest.TestCase): a_name = addressof(func_name) f_ord_addr = c_void_p.from_address(a_ord).value f_name_addr = c_void_p.from_address(a_name).value - self.failUnlessEqual(hex(f_ord_addr), hex(f_name_addr)) + self.assertEqual(hex(f_ord_addr), hex(f_name_addr)) - self.failUnlessRaises(AttributeError, dll.__getitem__, 1234) + self.assertRaises(AttributeError, dll.__getitem__, 1234) if os.name == "nt": def test_1703286_A(self): @@ -94,13 +94,13 @@ class LoaderTest(unittest.TestCase): advapi32 = windll.advapi32 # Calling CloseEventLog with a NULL argument should fail, # but the call should not segfault or so. - self.failUnlessEqual(0, advapi32.CloseEventLog(None)) + self.assertEqual(0, advapi32.CloseEventLog(None)) windll.kernel32.GetProcAddress.argtypes = c_void_p, c_char_p windll.kernel32.GetProcAddress.restype = c_void_p proc = windll.kernel32.GetProcAddress(advapi32._handle, "CloseEventLog") - self.failUnless(proc) + self.assertTrue(proc) # This is the real test: call the function via 'call_function' - self.failUnlessEqual(0, call_function(proc, (None,))) + self.assertEqual(0, call_function(proc, (None,))) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_macholib.py b/Lib/ctypes/test/test_macholib.py index f2ee035..eda846d 100644 --- a/Lib/ctypes/test/test_macholib.py +++ b/Lib/ctypes/test/test_macholib.py @@ -48,14 +48,14 @@ class MachOTest(unittest.TestCase): if sys.platform == "darwin": def test_find(self): - self.failUnlessEqual(find_lib('pthread'), + self.assertEqual(find_lib('pthread'), '/usr/lib/libSystem.B.dylib') result = find_lib('z') - self.failUnless(result.startswith('/usr/lib/libz.1')) - self.failUnless(result.endswith('.dylib')) + self.assertTrue(result.startswith('/usr/lib/libz.1')) + self.assertTrue(result.endswith('.dylib')) - self.failUnlessEqual(find_lib('IOKit'), + self.assertEqual(find_lib('IOKit'), '/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit') if __name__ == "__main__": diff --git a/Lib/ctypes/test/test_memfunctions.py b/Lib/ctypes/test/test_memfunctions.py index 4bee77f..7082b55 100644 --- a/Lib/ctypes/test/test_memfunctions.py +++ b/Lib/ctypes/test/test_memfunctions.py @@ -19,45 +19,45 @@ class MemFunctionsTest(unittest.TestCase): a = create_string_buffer(1000000) p = b"Hello, World" result = memmove(a, p, len(p)) - self.failUnlessEqual(a.value, b"Hello, World") + self.assertEqual(a.value, b"Hello, World") - self.failUnlessEqual(string_at(result), b"Hello, World") - self.failUnlessEqual(string_at(result, 5), b"Hello") - self.failUnlessEqual(string_at(result, 16), b"Hello, World\0\0\0\0") - self.failUnlessEqual(string_at(result, 0), b"") + self.assertEqual(string_at(result), b"Hello, World") + self.assertEqual(string_at(result, 5), b"Hello") + self.assertEqual(string_at(result, 16), b"Hello, World\0\0\0\0") + self.assertEqual(string_at(result, 0), b"") def test_memset(self): a = create_string_buffer(1000000) result = memset(a, ord('x'), 16) - self.failUnlessEqual(a.value, b"xxxxxxxxxxxxxxxx") + self.assertEqual(a.value, b"xxxxxxxxxxxxxxxx") - self.failUnlessEqual(string_at(result), b"xxxxxxxxxxxxxxxx") - self.failUnlessEqual(string_at(a), b"xxxxxxxxxxxxxxxx") - self.failUnlessEqual(string_at(a, 20), b"xxxxxxxxxxxxxxxx\0\0\0\0") + self.assertEqual(string_at(result), b"xxxxxxxxxxxxxxxx") + self.assertEqual(string_at(a), b"xxxxxxxxxxxxxxxx") + self.assertEqual(string_at(a, 20), b"xxxxxxxxxxxxxxxx\0\0\0\0") def test_cast(self): a = (c_ubyte * 32)(*map(ord, "abcdef")) - self.failUnlessEqual(cast(a, c_char_p).value, "abcdef") - self.failUnlessEqual(cast(a, POINTER(c_byte))[:7], + self.assertEqual(cast(a, c_char_p).value, "abcdef") + self.assertEqual(cast(a, POINTER(c_byte))[:7], [97, 98, 99, 100, 101, 102, 0]) - self.failUnlessEqual(cast(a, POINTER(c_byte))[:7:], + self.assertEqual(cast(a, POINTER(c_byte))[:7:], [97, 98, 99, 100, 101, 102, 0]) - self.failUnlessEqual(cast(a, POINTER(c_byte))[6:-1:-1], + self.assertEqual(cast(a, POINTER(c_byte))[6:-1:-1], [0, 102, 101, 100, 99, 98, 97]) - self.failUnlessEqual(cast(a, POINTER(c_byte))[:7:2], + self.assertEqual(cast(a, POINTER(c_byte))[:7:2], [97, 99, 101, 0]) - self.failUnlessEqual(cast(a, POINTER(c_byte))[:7:7], + self.assertEqual(cast(a, POINTER(c_byte))[:7:7], [97]) def test_string_at(self): s = string_at(b"foo bar") # XXX The following may be wrong, depending on how Python # manages string instances - self.failUnlessEqual(2, sys.getrefcount(s)) - self.failUnless(s, "foo bar") + self.assertEqual(2, sys.getrefcount(s)) + self.assertTrue(s, "foo bar") - self.failUnlessEqual(string_at(b"foo bar", 7), b"foo bar") - self.failUnlessEqual(string_at(b"foo bar", 3), b"foo") + self.assertEqual(string_at(b"foo bar", 7), b"foo bar") + self.assertEqual(string_at(b"foo bar", 3), b"foo") try: create_unicode_buffer @@ -68,12 +68,12 @@ class MemFunctionsTest(unittest.TestCase): p = create_unicode_buffer("Hello, World") a = create_unicode_buffer(1000000) result = memmove(a, p, len(p) * sizeof(c_wchar)) - self.failUnlessEqual(a.value, "Hello, World") + self.assertEqual(a.value, "Hello, World") - self.failUnlessEqual(wstring_at(a), "Hello, World") - self.failUnlessEqual(wstring_at(a, 5), "Hello") - self.failUnlessEqual(wstring_at(a, 16), "Hello, World\0\0\0\0") - self.failUnlessEqual(wstring_at(a, 0), "") + self.assertEqual(wstring_at(a), "Hello, World") + self.assertEqual(wstring_at(a, 5), "Hello") + self.assertEqual(wstring_at(a, 16), "Hello, World\0\0\0\0") + self.assertEqual(wstring_at(a, 0), "") if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_numbers.py b/Lib/ctypes/test/test_numbers.py index c0732de..24d7293 100644 --- a/Lib/ctypes/test/test_numbers.py +++ b/Lib/ctypes/test/test_numbers.py @@ -55,25 +55,25 @@ class NumberTestCase(unittest.TestCase): def test_default_init(self): # default values are set to zero for t in signed_types + unsigned_types + float_types: - self.failUnlessEqual(t().value, 0) + self.assertEqual(t().value, 0) def test_unsigned_values(self): # the value given to the constructor is available # as the 'value' attribute for t, (l, h) in zip(unsigned_types, unsigned_ranges): - self.failUnlessEqual(t(l).value, l) - self.failUnlessEqual(t(h).value, h) + self.assertEqual(t(l).value, l) + self.assertEqual(t(h).value, h) def test_signed_values(self): # see above for t, (l, h) in zip(signed_types, signed_ranges): - self.failUnlessEqual(t(l).value, l) - self.failUnlessEqual(t(h).value, h) + self.assertEqual(t(l).value, l) + self.assertEqual(t(h).value, h) def test_bool_values(self): from operator import truth for t, v in zip(bool_types, bool_values): - self.failUnlessEqual(t(v).value, truth(v)) + self.assertEqual(t(v).value, truth(v)) def test_typeerror(self): # Only numbers are allowed in the contructor, @@ -93,13 +93,13 @@ class NumberTestCase(unittest.TestCase): # the from_param class method attribute always # returns PyCArgObject instances for t in signed_types + unsigned_types + float_types: - self.failUnlessEqual(ArgType, type(t.from_param(0))) + self.assertEqual(ArgType, type(t.from_param(0))) def test_byref(self): # calling byref returns also a PyCArgObject instance for t in signed_types + unsigned_types + float_types + bool_types: parm = byref(t()) - self.failUnlessEqual(ArgType, type(parm)) + self.assertEqual(ArgType, type(parm)) def test_floats(self): @@ -110,10 +110,10 @@ class NumberTestCase(unittest.TestCase): return 2.0 f = FloatLike() for t in float_types: - self.failUnlessEqual(t(2.0).value, 2.0) - self.failUnlessEqual(t(2).value, 2.0) - self.failUnlessEqual(t(2).value, 2.0) - self.failUnlessEqual(t(f).value, 2.0) + self.assertEqual(t(2.0).value, 2.0) + self.assertEqual(t(2).value, 2.0) + self.assertEqual(t(2).value, 2.0) + self.assertEqual(t(f).value, 2.0) def test_integers(self): class FloatLike(object): @@ -129,7 +129,7 @@ class NumberTestCase(unittest.TestCase): for t in signed_types + unsigned_types: self.assertRaises(TypeError, t, 3.14) self.assertRaises(TypeError, t, f) - self.failUnlessEqual(t(i).value, 2) + self.assertEqual(t(i).value, 2) def test_sizes(self): for t in signed_types + unsigned_types + float_types + bool_types: @@ -138,9 +138,9 @@ class NumberTestCase(unittest.TestCase): except struct.error: continue # sizeof of the type... - self.failUnlessEqual(sizeof(t), size) + self.assertEqual(sizeof(t), size) # and sizeof of an instance - self.failUnlessEqual(sizeof(t()), size) + self.assertEqual(sizeof(t()), size) def test_alignments(self): for t in signed_types + unsigned_types + float_types: @@ -148,10 +148,10 @@ class NumberTestCase(unittest.TestCase): align = struct.calcsize("c%c" % code) - struct.calcsize(code) # alignment of the type... - self.failUnlessEqual((code, alignment(t)), + self.assertEqual((code, alignment(t)), (code, align)) # and alignment of an instance - self.failUnlessEqual((code, alignment(t())), + self.assertEqual((code, alignment(t())), (code, align)) def test_int_from_address(self): @@ -167,12 +167,12 @@ class NumberTestCase(unittest.TestCase): # v now is an integer at an 'external' memory location v = t.from_address(a.buffer_info()[0]) - self.failUnlessEqual(v.value, a[0]) - self.failUnlessEqual(type(v), t) + self.assertEqual(v.value, a[0]) + self.assertEqual(type(v), t) # changing the value at the memory location changes v's value also a[0] = 42 - self.failUnlessEqual(v.value, a[0]) + self.assertEqual(v.value, a[0]) def test_float_from_address(self): @@ -180,11 +180,11 @@ class NumberTestCase(unittest.TestCase): for t in float_types: a = array(t._type_, [3.14]) v = t.from_address(a.buffer_info()[0]) - self.failUnlessEqual(v.value, a[0]) - self.failUnless(type(v) is t) + self.assertEqual(v.value, a[0]) + self.assertTrue(type(v) is t) a[0] = 2.3456e17 - self.failUnlessEqual(v.value, a[0]) - self.failUnless(type(v) is t) + self.assertEqual(v.value, a[0]) + self.assertTrue(type(v) is t) def test_char_from_address(self): from ctypes import c_char @@ -193,11 +193,11 @@ class NumberTestCase(unittest.TestCase): a = array('b', [0]) a[0] = ord('x') v = c_char.from_address(a.buffer_info()[0]) - self.failUnlessEqual(v.value, b'x') - self.failUnless(type(v) is c_char) + self.assertEqual(v.value, b'x') + self.assertTrue(type(v) is c_char) a[0] = ord('?') - self.failUnlessEqual(v.value, b'?') + self.assertEqual(v.value, b'?') # array does not support c_bool / 't' # def test_bool_from_address(self): @@ -205,11 +205,11 @@ class NumberTestCase(unittest.TestCase): # from array import array # a = array(c_bool._type_, [True]) # v = t.from_address(a.buffer_info()[0]) - # self.failUnlessEqual(v.value, a[0]) - # self.failUnlessEqual(type(v) is t) + # self.assertEqual(v.value, a[0]) + # self.assertEqual(type(v) is t) # a[0] = False - # self.failUnlessEqual(v.value, a[0]) - # self.failUnlessEqual(type(v) is t) + # self.assertEqual(v.value, a[0]) + # self.assertEqual(type(v) is t) def test_init(self): # c_int() can be initialized from Python's int, and c_int. diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py index 4c80bdf..10eddd4 100644 --- a/Lib/ctypes/test/test_parameters.py +++ b/Lib/ctypes/test/test_parameters.py @@ -33,8 +33,8 @@ class SimpleTypesTestCase(unittest.TestCase): return value * 4 from_param = classmethod(from_param) - self.failUnlessEqual(CVOIDP.from_param("abc"), "abcabc") - self.failUnlessEqual(CCHARP.from_param("abc"), "abcabcabcabc") + self.assertEqual(CVOIDP.from_param("abc"), "abcabc") + self.assertEqual(CCHARP.from_param("abc"), "abcabcabcabc") try: from ctypes import c_wchar_p @@ -46,7 +46,7 @@ class SimpleTypesTestCase(unittest.TestCase): return value * 3 from_param = classmethod(from_param) - self.failUnlessEqual(CWCHARP.from_param("abc"), "abcabcabc") + self.assertEqual(CWCHARP.from_param("abc"), "abcabcabc") # XXX Replace by c_char_p tests def test_cstrings(self): @@ -55,10 +55,10 @@ class SimpleTypesTestCase(unittest.TestCase): # c_char_p.from_param on a Python String packs the string # into a cparam object s = b"123" - self.failUnless(c_char_p.from_param(s)._obj is s) + self.assertTrue(c_char_p.from_param(s)._obj is s) # new in 0.9.1: convert (encode) unicode to ascii - self.failUnlessEqual(c_char_p.from_param("123")._obj, b"123") + self.assertEqual(c_char_p.from_param("123")._obj, b"123") self.assertRaises(UnicodeEncodeError, c_char_p.from_param, "123\377") self.assertRaises(TypeError, c_char_p.from_param, 42) @@ -66,7 +66,7 @@ class SimpleTypesTestCase(unittest.TestCase): # calling c_char_p.from_param with a c_char_p instance # returns the argument itself: a = c_char_p("123") - self.failUnless(c_char_p.from_param(a) is a) + self.assertTrue(c_char_p.from_param(a) is a) def test_cw_strings(self): from ctypes import byref @@ -77,15 +77,15 @@ class SimpleTypesTestCase(unittest.TestCase): return s = "123" if sys.platform == "win32": - self.failUnless(c_wchar_p.from_param(s)._obj is s) + self.assertTrue(c_wchar_p.from_param(s)._obj is s) self.assertRaises(TypeError, c_wchar_p.from_param, 42) # new in 0.9.1: convert (decode) ascii to unicode - self.failUnlessEqual(c_wchar_p.from_param("123")._obj, "123") + self.assertEqual(c_wchar_p.from_param("123")._obj, "123") self.assertRaises(UnicodeDecodeError, c_wchar_p.from_param, b"123\377") pa = c_wchar_p.from_param(c_wchar_p("123")) - self.failUnlessEqual(type(pa), c_wchar_p) + self.assertEqual(type(pa), c_wchar_p) def test_int_pointers(self): from ctypes import c_short, c_uint, c_int, c_long, POINTER, pointer @@ -94,10 +94,10 @@ class SimpleTypesTestCase(unittest.TestCase): ## p = pointer(c_int(42)) ## x = LPINT.from_param(p) x = LPINT.from_param(pointer(c_int(42))) - self.failUnlessEqual(x.contents.value, 42) - self.failUnlessEqual(LPINT(c_int(42)).contents.value, 42) + self.assertEqual(x.contents.value, 42) + self.assertEqual(LPINT(c_int(42)).contents.value, 42) - self.failUnlessEqual(LPINT.from_param(None), 0) + self.assertEqual(LPINT.from_param(None), 0) if c_int != c_long: self.assertRaises(TypeError, LPINT.from_param, pointer(c_long(42))) @@ -133,8 +133,8 @@ class SimpleTypesTestCase(unittest.TestCase): from ctypes import c_short, c_uint, c_int, c_long, POINTER INTARRAY = c_int * 3 ia = INTARRAY() - self.failUnlessEqual(len(ia), 3) - self.failUnlessEqual([ia[i] for i in range(3)], [0, 0, 0]) + self.assertEqual(len(ia), 3) + self.assertEqual([ia[i] for i in range(3)], [0, 0, 0]) # Pointers are only compatible with arrays containing items of # the same type! @@ -161,8 +161,8 @@ class SimpleTypesTestCase(unittest.TestCase): return None func.argtypes = (Adapter(),) - self.failUnlessEqual(func(None), None) - self.failUnlessEqual(func(object()), None) + self.assertEqual(func(None), None) + self.assertEqual(func(object()), None) class Adapter(object): def from_param(cls, obj): @@ -171,7 +171,7 @@ class SimpleTypesTestCase(unittest.TestCase): func.argtypes = (Adapter(),) # don't know how to convert parameter 1 self.assertRaises(ArgumentError, func, object()) - self.failUnlessEqual(func(c_void_p(42)), 42) + self.assertEqual(func(c_void_p(42)), 42) class Adapter(object): def from_param(cls, obj): diff --git a/Lib/ctypes/test/test_pep3118.py b/Lib/ctypes/test/test_pep3118.py index b839ac2..fa6461f 100644 --- a/Lib/ctypes/test/test_pep3118.py +++ b/Lib/ctypes/test/test_pep3118.py @@ -24,23 +24,23 @@ class Test(unittest.TestCase): ob = tp() v = memoryview(ob) try: - self.failUnlessEqual(normalize(v.format), normalize(fmt)) + self.assertEqual(normalize(v.format), normalize(fmt)) if shape is not None: - self.failUnlessEqual(len(v), shape[0]) + self.assertEqual(len(v), shape[0]) else: - self.failUnlessEqual(len(v) * sizeof(itemtp), sizeof(ob)) - self.failUnlessEqual(v.itemsize, sizeof(itemtp)) - self.failUnlessEqual(v.shape, shape) + self.assertEqual(len(v) * sizeof(itemtp), sizeof(ob)) + self.assertEqual(v.itemsize, sizeof(itemtp)) + self.assertEqual(v.shape, shape) # ctypes object always have a non-strided memory block - self.failUnlessEqual(v.strides, None) + self.assertEqual(v.strides, None) # they are always read/write - self.failIf(v.readonly) + self.assertFalse(v.readonly) if v.shape: n = 1 for dim in v.shape: n = n * dim - self.failUnlessEqual(n * v.itemsize, len(v.tobytes())) + self.assertEqual(n * v.itemsize, len(v.tobytes())) except: # so that we can see the failing type print(tp) @@ -51,23 +51,23 @@ class Test(unittest.TestCase): ob = tp() v = memoryview(ob) try: - self.failUnlessEqual(v.format, fmt) + self.assertEqual(v.format, fmt) if shape is not None: - self.failUnlessEqual(len(v), shape[0]) + self.assertEqual(len(v), shape[0]) else: - self.failUnlessEqual(len(v) * sizeof(itemtp), sizeof(ob)) - self.failUnlessEqual(v.itemsize, sizeof(itemtp)) - self.failUnlessEqual(v.shape, shape) + self.assertEqual(len(v) * sizeof(itemtp), sizeof(ob)) + self.assertEqual(v.itemsize, sizeof(itemtp)) + self.assertEqual(v.shape, shape) # ctypes object always have a non-strided memory block - self.failUnlessEqual(v.strides, None) + self.assertEqual(v.strides, None) # they are always read/write - self.failIf(v.readonly) + self.assertFalse(v.readonly) if v.shape: n = 1 for dim in v.shape: n = n * dim - self.failUnlessEqual(n, len(v)) + self.assertEqual(n, len(v)) except: # so that we can see the failing type print(tp) diff --git a/Lib/ctypes/test/test_pickling.py b/Lib/ctypes/test/test_pickling.py index d88f08b..8c91222 100644 --- a/Lib/ctypes/test/test_pickling.py +++ b/Lib/ctypes/test/test_pickling.py @@ -27,8 +27,8 @@ class PickleTest(unittest.TestCase): c_double(3.14), ]: dst = self.loads(self.dumps(src)) - self.failUnlessEqual(src.__dict__, dst.__dict__) - self.failUnlessEqual(memoryview(src).tobytes(), + self.assertEqual(src.__dict__, dst.__dict__) + self.assertEqual(memoryview(src).tobytes(), memoryview(dst).tobytes()) def test_struct(self): @@ -36,17 +36,17 @@ class PickleTest(unittest.TestCase): x = X() x.a = 42 - self.failUnlessEqual(X.init_called, 1) + self.assertEqual(X.init_called, 1) y = self.loads(self.dumps(x)) # loads must NOT call __init__ - self.failUnlessEqual(X.init_called, 1) + self.assertEqual(X.init_called, 1) # ctypes instances are identical when the instance __dict__ # and the memory buffer are identical - self.failUnlessEqual(y.__dict__, x.__dict__) - self.failUnlessEqual(memoryview(y).tobytes(), + self.assertEqual(y.__dict__, x.__dict__) + self.assertEqual(memoryview(y).tobytes(), memoryview(x).tobytes()) def test_unpickable(self): diff --git a/Lib/ctypes/test/test_pointers.py b/Lib/ctypes/test/test_pointers.py index 86429c0..6e61d30 100644 --- a/Lib/ctypes/test/test_pointers.py +++ b/Lib/ctypes/test/test_pointers.py @@ -17,7 +17,7 @@ class PointersTestCase(unittest.TestCase): POINTER(c_ulong)(c_ulong(22)) # Pointer can't set contents: has no _type_ - self.failUnlessRaises(TypeError, A, c_ulong(33)) + self.assertRaises(TypeError, A, c_ulong(33)) def test_pass_pointers(self): dll = CDLL(_ctypes_test.__file__) @@ -27,12 +27,12 @@ class PointersTestCase(unittest.TestCase): i = c_int(12345678) ## func.argtypes = (POINTER(c_int),) address = func(byref(i)) - self.failUnlessEqual(c_int.from_address(address).value, 12345678) + self.assertEqual(c_int.from_address(address).value, 12345678) func.restype = POINTER(c_int) res = func(pointer(i)) - self.failUnlessEqual(res.contents.value, 12345678) - self.failUnlessEqual(res[0], 12345678) + self.assertEqual(res.contents.value, 12345678) + self.assertEqual(res[0], 12345678) def test_change_pointers(self): dll = CDLL(_ctypes_test.__file__) @@ -43,18 +43,18 @@ class PointersTestCase(unittest.TestCase): func.argtypes = (POINTER(c_int),) res = func(pointer(i)) - self.failUnlessEqual(res[0], 87654) - self.failUnlessEqual(res.contents.value, 87654) + self.assertEqual(res[0], 87654) + self.assertEqual(res.contents.value, 87654) # C code: *res = 54345 res[0] = 54345 - self.failUnlessEqual(i.value, 54345) + self.assertEqual(i.value, 54345) # C code: # int x = 12321; # res = &x res.contents = c_int(12321) - self.failUnlessEqual(i.value, 54345) + self.assertEqual(i.value, 54345) def test_callbacks_with_pointers(self): # a function type receiving a pointer @@ -78,7 +78,7 @@ class PointersTestCase(unittest.TestCase): ## i = c_int(42) ## callback(byref(i)) -## self.failUnless(i.value == 84) +## self.assertTrue(i.value == 84) doit(callback) ## print self.result @@ -91,11 +91,11 @@ class PointersTestCase(unittest.TestCase): i = ct(42) p = pointer(i) ## print type(p.contents), ct - self.failUnless(type(p.contents) is ct) + self.assertTrue(type(p.contents) is ct) # p.contents is the same as p[0] ## print p.contents -## self.failUnless(p.contents == 42) -## self.failUnless(p[0] == 42) +## self.assertTrue(p.contents == 42) +## self.assertTrue(p[0] == 42) self.assertRaises(TypeError, delitem, p, 0) @@ -117,9 +117,9 @@ class PointersTestCase(unittest.TestCase): pt = pointer(Table(1, 2, 3)) - self.failUnlessEqual(pt.contents.a, 1) - self.failUnlessEqual(pt.contents.b, 2) - self.failUnlessEqual(pt.contents.c, 3) + self.assertEqual(pt.contents.a, 1) + self.assertEqual(pt.contents.b, 2) + self.assertEqual(pt.contents.c, 3) pt.contents.c = 33 @@ -130,8 +130,8 @@ class PointersTestCase(unittest.TestCase): p = pointer(c_int(42)) # Although a pointer can be indexed, it ha no length self.assertRaises(TypeError, len, p) - self.failUnlessEqual(p[0], 42) - self.failUnlessEqual(p.contents.value, 42) + self.assertEqual(p[0], 42) + self.assertEqual(p.contents.value, 42) def test_charpp(self): """Test that a character pointer-to-pointer is correctly passed""" @@ -156,20 +156,20 @@ class PointersTestCase(unittest.TestCase): pp = pointer(p) q = pointer(y) pp[0] = q # <== - self.failUnlessEqual(p[0], 6) + self.assertEqual(p[0], 6) def test_c_void_p(self): # http://sourceforge.net/tracker/?func=detail&aid=1518190&group_id=5470&atid=105470 if sizeof(c_void_p) == 4: - self.failUnlessEqual(c_void_p(0xFFFFFFFF).value, + self.assertEqual(c_void_p(0xFFFFFFFF).value, c_void_p(-1).value) - self.failUnlessEqual(c_void_p(0xFFFFFFFFFFFFFFFF).value, + self.assertEqual(c_void_p(0xFFFFFFFFFFFFFFFF).value, c_void_p(-1).value) elif sizeof(c_void_p) == 8: - self.failUnlessEqual(c_void_p(0xFFFFFFFF).value, + self.assertEqual(c_void_p(0xFFFFFFFF).value, 0xFFFFFFFF) - self.failUnlessEqual(c_void_p(0xFFFFFFFFFFFFFFFF).value, + self.assertEqual(c_void_p(0xFFFFFFFFFFFFFFFF).value, c_void_p(-1).value) - self.failUnlessEqual(c_void_p(0xFFFFFFFFFFFFFFFFFFFFFFFF).value, + self.assertEqual(c_void_p(0xFFFFFFFFFFFFFFFFFFFFFFFF).value, c_void_p(-1).value) self.assertRaises(TypeError, c_void_p, 3.14) # make sure floats are NOT accepted @@ -177,16 +177,16 @@ class PointersTestCase(unittest.TestCase): def test_pointers_bool(self): # NULL pointers have a boolean False value, non-NULL pointers True. - self.failUnlessEqual(bool(POINTER(c_int)()), False) - self.failUnlessEqual(bool(pointer(c_int())), True) + self.assertEqual(bool(POINTER(c_int)()), False) + self.assertEqual(bool(pointer(c_int())), True) - self.failUnlessEqual(bool(CFUNCTYPE(None)(0)), False) - self.failUnlessEqual(bool(CFUNCTYPE(None)(42)), True) + self.assertEqual(bool(CFUNCTYPE(None)(0)), False) + self.assertEqual(bool(CFUNCTYPE(None)(42)), True) # COM methods are boolean True: if sys.platform == "win32": mth = WINFUNCTYPE(None)(42, "name", (), None) - self.failUnlessEqual(bool(mth), True) + self.assertEqual(bool(mth), True) if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_prototypes.py b/Lib/ctypes/test/test_prototypes.py index e098e7b..9041750 100644 --- a/Lib/ctypes/test/test_prototypes.py +++ b/Lib/ctypes/test/test_prototypes.py @@ -58,23 +58,23 @@ class CharPointersTestCase(unittest.TestCase): try: func() except TypeError as details: - self.failUnlessEqual(str(details), "required argument 'input' missing") + self.assertEqual(str(details), "required argument 'input' missing") else: self.fail("TypeError not raised") - self.failUnlessEqual(func(None), None) - self.failUnlessEqual(func(input=None), None) + self.assertEqual(func(None), None) + self.assertEqual(func(input=None), None) def test_int_pointer_arg(self): func = testdll._testfunc_p_p func.restype = c_long - self.failUnlessEqual(0, func(0)) + self.assertEqual(0, func(0)) ci = c_int(0) func.argtypes = POINTER(c_int), - self.failUnlessEqual(positive_address(addressof(ci)), + self.assertEqual(positive_address(addressof(ci)), positive_address(func(byref(ci)))) func.argtypes = c_char_p, @@ -91,45 +91,45 @@ class CharPointersTestCase(unittest.TestCase): func.restype = c_char_p func.argtypes = POINTER(c_char), - self.failUnlessEqual(None, func(None)) - self.failUnlessEqual("123", func("123")) - self.failUnlessEqual(None, func(c_char_p(None))) - self.failUnlessEqual("123", func(c_char_p("123"))) + self.assertEqual(None, func(None)) + self.assertEqual("123", func("123")) + self.assertEqual(None, func(c_char_p(None))) + self.assertEqual("123", func(c_char_p("123"))) - self.failUnlessEqual("123", func(c_buffer("123"))) + self.assertEqual("123", func(c_buffer("123"))) ca = c_char("a") - self.failUnlessEqual("a", func(pointer(ca))[0]) - self.failUnlessEqual("a", func(byref(ca))[0]) + self.assertEqual("a", func(pointer(ca))[0]) + self.assertEqual("a", func(byref(ca))[0]) def test_c_char_p_arg(self): func = testdll._testfunc_p_p func.restype = c_char_p func.argtypes = c_char_p, - self.failUnlessEqual(None, func(None)) - self.failUnlessEqual("123", func("123")) - self.failUnlessEqual(None, func(c_char_p(None))) - self.failUnlessEqual("123", func(c_char_p("123"))) + self.assertEqual(None, func(None)) + self.assertEqual("123", func("123")) + self.assertEqual(None, func(c_char_p(None))) + self.assertEqual("123", func(c_char_p("123"))) - self.failUnlessEqual("123", func(c_buffer("123"))) + self.assertEqual("123", func(c_buffer("123"))) ca = c_char("a") - self.failUnlessEqual("a", func(pointer(ca))[0]) - self.failUnlessEqual("a", func(byref(ca))[0]) + self.assertEqual("a", func(pointer(ca))[0]) + self.assertEqual("a", func(byref(ca))[0]) def test_c_void_p_arg(self): func = testdll._testfunc_p_p func.restype = c_char_p func.argtypes = c_void_p, - self.failUnlessEqual(None, func(None)) - self.failUnlessEqual("123", func(b"123")) - self.failUnlessEqual("123", func(c_char_p("123"))) - self.failUnlessEqual(None, func(c_char_p(None))) + self.assertEqual(None, func(None)) + self.assertEqual("123", func(b"123")) + self.assertEqual("123", func(c_char_p("123"))) + self.assertEqual(None, func(c_char_p(None))) - self.failUnlessEqual("123", func(c_buffer("123"))) + self.assertEqual("123", func(c_buffer("123"))) ca = c_char("a") - self.failUnlessEqual("a", func(pointer(ca))[0]) - self.failUnlessEqual("a", func(byref(ca))[0]) + self.assertEqual("a", func(pointer(ca))[0]) + self.assertEqual("a", func(byref(ca))[0]) func(byref(c_int())) func(pointer(c_int())) @@ -140,8 +140,8 @@ class CharPointersTestCase(unittest.TestCase): except NameError: pass else: - self.failUnlessEqual(None, func(c_wchar_p(None))) - self.failUnlessEqual("123", func(c_wchar_p("123"))) + self.assertEqual(None, func(c_wchar_p(None))) + self.assertEqual("123", func(c_wchar_p("123"))) def test_instance(self): func = testdll._testfunc_p_p @@ -151,10 +151,10 @@ class CharPointersTestCase(unittest.TestCase): _as_parameter_ = None func.argtypes = c_void_p, - self.failUnlessEqual(None, func(X())) + self.assertEqual(None, func(X())) func.argtypes = None - self.failUnlessEqual(None, func(X())) + self.assertEqual(None, func(X())) try: c_wchar @@ -174,15 +174,15 @@ else: func.restype = c_wchar_p func.argtypes = POINTER(c_wchar), - self.failUnlessEqual(None, func(None)) - self.failUnlessEqual("123", func("123")) - self.failUnlessEqual(None, func(c_wchar_p(None))) - self.failUnlessEqual("123", func(c_wchar_p("123"))) + self.assertEqual(None, func(None)) + self.assertEqual("123", func("123")) + self.assertEqual(None, func(c_wchar_p(None))) + self.assertEqual("123", func(c_wchar_p("123"))) - self.failUnlessEqual("123", func(c_wbuffer("123"))) + self.assertEqual("123", func(c_wbuffer("123"))) ca = c_wchar("a") - self.failUnlessEqual("a", func(pointer(ca))[0]) - self.failUnlessEqual("a", func(byref(ca))[0]) + self.assertEqual("a", func(pointer(ca))[0]) + self.assertEqual("a", func(byref(ca))[0]) def test_c_wchar_p_arg(self): func = testdll._testfunc_p_p @@ -191,16 +191,16 @@ else: c_wchar_p.from_param("123") - self.failUnlessEqual(None, func(None)) - self.failUnlessEqual("123", func("123")) - self.failUnlessEqual(None, func(c_wchar_p(None))) - self.failUnlessEqual("123", func(c_wchar_p("123"))) + self.assertEqual(None, func(None)) + self.assertEqual("123", func("123")) + self.assertEqual(None, func(c_wchar_p(None))) + self.assertEqual("123", func(c_wchar_p("123"))) # XXX Currently, these raise TypeErrors, although they shouldn't: - self.failUnlessEqual("123", func(c_wbuffer("123"))) + self.assertEqual("123", func(c_wbuffer("123"))) ca = c_wchar("a") - self.failUnlessEqual("a", func(pointer(ca))[0]) - self.failUnlessEqual("a", func(byref(ca))[0]) + self.assertEqual("a", func(pointer(ca))[0]) + self.assertEqual("a", func(byref(ca))[0]) class ArrayTest(unittest.TestCase): def test(self): diff --git a/Lib/ctypes/test/test_python_api.py b/Lib/ctypes/test/test_python_api.py index 674f9ab..b74767a 100644 --- a/Lib/ctypes/test/test_python_api.py +++ b/Lib/ctypes/test/test_python_api.py @@ -23,7 +23,7 @@ class PythonAPITestCase(unittest.TestCase): PyBytes_FromStringAndSize.restype = py_object PyBytes_FromStringAndSize.argtypes = c_char_p, c_py_ssize_t - self.failUnlessEqual(PyBytes_FromStringAndSize(b"abcdefghi", 3), b"abc") + self.assertEqual(PyBytes_FromStringAndSize(b"abcdefghi", 3), b"abc") def test_PyString_FromString(self): pythonapi.PyBytes_FromString.restype = py_object @@ -32,10 +32,10 @@ class PythonAPITestCase(unittest.TestCase): s = b"abc" refcnt = grc(s) pyob = pythonapi.PyBytes_FromString(s) - self.failUnlessEqual(grc(s), refcnt) - self.failUnlessEqual(s, pyob) + self.assertEqual(grc(s), refcnt) + self.assertEqual(s, pyob) del pyob - self.failUnlessEqual(grc(s), refcnt) + self.assertEqual(grc(s), refcnt) if is_resource_enabled("refcount"): # This test is unreliable, because it is possible that code in @@ -44,28 +44,28 @@ class PythonAPITestCase(unittest.TestCase): def test_PyLong_Long(self): ref42 = grc(42) pythonapi.PyLong_FromLong.restype = py_object - self.failUnlessEqual(pythonapi.PyLong_FromLong(42), 42) + self.assertEqual(pythonapi.PyLong_FromLong(42), 42) - self.failUnlessEqual(grc(42), ref42) + self.assertEqual(grc(42), ref42) pythonapi.PyLong_AsLong.argtypes = (py_object,) pythonapi.PyLong_AsLong.restype = c_long res = pythonapi.PyLong_AsLong(42) - self.failUnlessEqual(grc(res), ref42 + 1) + self.assertEqual(grc(res), ref42 + 1) del res - self.failUnlessEqual(grc(42), ref42) + self.assertEqual(grc(42), ref42) def test_PyObj_FromPtr(self): s = "abc def ghi jkl" ref = grc(s) # id(python-object) is the address pyobj = PyObj_FromPtr(id(s)) - self.failUnless(s is pyobj) + self.assertTrue(s is pyobj) - self.failUnlessEqual(grc(s), ref + 1) + self.assertEqual(grc(s), ref + 1) del pyobj - self.failUnlessEqual(grc(s), ref) + self.assertEqual(grc(s), ref) def test_PyOS_snprintf(self): PyOS_snprintf = pythonapi.PyOS_snprintf @@ -73,18 +73,18 @@ class PythonAPITestCase(unittest.TestCase): buf = c_buffer(256) PyOS_snprintf(buf, sizeof(buf), "Hello from %s", b"ctypes") - self.failUnlessEqual(buf.value, b"Hello from ctypes") + self.assertEqual(buf.value, b"Hello from ctypes") PyOS_snprintf(buf, sizeof(buf), "Hello from %s (%d, %d, %d)", b"ctypes", 1, 2, 3) - self.failUnlessEqual(buf.value, b"Hello from ctypes (1, 2, 3)") + self.assertEqual(buf.value, b"Hello from ctypes (1, 2, 3)") # not enough arguments - self.failUnlessRaises(TypeError, PyOS_snprintf, buf) + self.assertRaises(TypeError, PyOS_snprintf, buf) def test_pyobject_repr(self): - self.failUnlessEqual(repr(py_object()), "py_object()") - self.failUnlessEqual(repr(py_object(42)), "py_object(42)") - self.failUnlessEqual(repr(py_object(object)), "py_object(%r)" % object) + self.assertEqual(repr(py_object()), "py_object()") + self.assertEqual(repr(py_object(42)), "py_object(42)") + self.assertEqual(repr(py_object(object)), "py_object(%r)" % object) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_random_things.py b/Lib/ctypes/test/test_random_things.py index 6b2c1b1..2520a5e 100644 --- a/Lib/ctypes/test/test_random_things.py +++ b/Lib/ctypes/test/test_random_things.py @@ -20,7 +20,7 @@ if sys.platform == "win32": hdll = windll.kernel32.LoadLibraryA(b"kernel32") funcaddr = windll.kernel32.GetProcAddress(hdll, "GetModuleHandleA") - self.failUnlessEqual(call_function(funcaddr, (None,)), + self.assertEqual(call_function(funcaddr, (None,)), windll.kernel32.GetModuleHandleA(None)) class CallbackTracbackTestCase(unittest.TestCase): @@ -49,25 +49,25 @@ class CallbackTracbackTestCase(unittest.TestCase): def test_ValueError(self): cb = CFUNCTYPE(c_int, c_int)(callback_func) out = self.capture_stderr(cb, 42) - self.failUnlessEqual(out.splitlines()[-1], + self.assertEqual(out.splitlines()[-1], "ValueError: 42") def test_IntegerDivisionError(self): cb = CFUNCTYPE(c_int, c_int)(callback_func) out = self.capture_stderr(cb, 0) - self.failUnlessEqual(out.splitlines()[-1][:19], + self.assertEqual(out.splitlines()[-1][:19], "ZeroDivisionError: ") def test_FloatDivisionError(self): cb = CFUNCTYPE(c_int, c_double)(callback_func) out = self.capture_stderr(cb, 0.0) - self.failUnlessEqual(out.splitlines()[-1][:19], + self.assertEqual(out.splitlines()[-1][:19], "ZeroDivisionError: ") def test_TypeErrorDivisionError(self): cb = CFUNCTYPE(c_int, c_char_p)(callback_func) out = self.capture_stderr(cb, "spam") - self.failUnlessEqual(out.splitlines()[-1], + self.assertEqual(out.splitlines()[-1], "TypeError: " "unsupported operand type(s) for /: 'int' and 'str'") diff --git a/Lib/ctypes/test/test_refcounts.py b/Lib/ctypes/test/test_refcounts.py index 448f292..35a81aa 100644 --- a/Lib/ctypes/test/test_refcounts.py +++ b/Lib/ctypes/test/test_refcounts.py @@ -21,17 +21,17 @@ class RefcountTestCase(unittest.TestCase): #print "called back with", value return value - self.failUnlessEqual(grc(callback), 2) + self.assertEqual(grc(callback), 2) cb = MyCallback(callback) - self.failUnless(grc(callback) > 2) + self.assertTrue(grc(callback) > 2) result = f(-10, cb) - self.failUnlessEqual(result, -18) + self.assertEqual(result, -18) cb = None gc.collect() - self.failUnlessEqual(grc(callback), 2) + self.assertEqual(grc(callback), 2) def test_refcount(self): @@ -39,19 +39,19 @@ class RefcountTestCase(unittest.TestCase): def func(*args): pass # this is the standard refcount for func - self.failUnlessEqual(grc(func), 2) + self.assertEqual(grc(func), 2) # the CFuncPtr instance holds atr least one refcount on func: f = OtherCallback(func) - self.failUnless(grc(func) > 2) + self.assertTrue(grc(func) > 2) # and may release it again del f - self.failUnless(grc(func) >= 2) + self.assertTrue(grc(func) >= 2) # but now it must be gone gc.collect() - self.failUnless(grc(func) == 2) + self.assertTrue(grc(func) == 2) class X(ctypes.Structure): _fields_ = [("a", OtherCallback)] @@ -59,27 +59,27 @@ class RefcountTestCase(unittest.TestCase): x.a = OtherCallback(func) # the CFuncPtr instance holds atr least one refcount on func: - self.failUnless(grc(func) > 2) + self.assertTrue(grc(func) > 2) # and may release it again del x - self.failUnless(grc(func) >= 2) + self.assertTrue(grc(func) >= 2) # and now it must be gone again gc.collect() - self.failUnlessEqual(grc(func), 2) + self.assertEqual(grc(func), 2) f = OtherCallback(func) # the CFuncPtr instance holds atr least one refcount on func: - self.failUnless(grc(func) > 2) + self.assertTrue(grc(func) > 2) # create a cycle f.cycle = f del f gc.collect() - self.failUnlessEqual(grc(func), 2) + self.assertEqual(grc(func), 2) class AnotherLeak(unittest.TestCase): def test_callback(self): @@ -92,7 +92,7 @@ class AnotherLeak(unittest.TestCase): a = sys.getrefcount(ctypes.c_int) f(1, 2) - self.failUnlessEqual(sys.getrefcount(ctypes.c_int), a) + self.assertEqual(sys.getrefcount(ctypes.c_int), a) if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_repr.py b/Lib/ctypes/test/test_repr.py index 3f1e819..9a1e238 100644 --- a/Lib/ctypes/test/test_repr.py +++ b/Lib/ctypes/test/test_repr.py @@ -18,12 +18,12 @@ class ReprTest(unittest.TestCase): def test_numbers(self): for typ in subclasses: base = typ.__bases__[0] - self.failUnless(repr(base(42)).startswith(base.__name__)) - self.failUnlessEqual(": " "expected string, int found") cls, msg = self.get_except(Person, "Someone", ("a", "b", "c")) - self.failUnlessEqual(cls, RuntimeError) + self.assertEqual(cls, RuntimeError) if issubclass(Exception, object): - self.failUnlessEqual(msg, + self.assertEqual(msg, "(Phone) : too many initializers") else: - self.failUnlessEqual(msg, "(Phone) TypeError: too many initializers") + self.assertEqual(msg, "(Phone) TypeError: too many initializers") def get_except(self, func, *args): @@ -331,7 +331,7 @@ class StructureTestCase(unittest.TestCase): ## # same as 'class X(Structure): pass' ## # fails, since we need either a _fields_ or a _abstract_ attribute ## cls, msg = self.get_except(meta, "X", (Structure,), {}) -## self.failUnlessEqual((cls, msg), +## self.assertEqual((cls, msg), ## (AttributeError, "class must define a '_fields_' attribute")) def test_abstract_class(self): @@ -339,15 +339,15 @@ class StructureTestCase(unittest.TestCase): _abstract_ = "something" # try 'X()' cls, msg = self.get_except(eval, "X()", locals()) - self.failUnlessEqual((cls, msg), (TypeError, "abstract class")) + self.assertEqual((cls, msg), (TypeError, "abstract class")) def test_methods(self): ## class X(Structure): ## _fields_ = [] - self.failUnless("in_dll" in dir(type(Structure))) - self.failUnless("from_address" in dir(type(Structure))) - self.failUnless("in_dll" in dir(type(Structure))) + self.assertTrue("in_dll" in dir(type(Structure))) + self.assertTrue("from_address" in dir(type(Structure))) + self.assertTrue("in_dll" in dir(type(Structure))) class PointerMemberTestCase(unittest.TestCase): @@ -360,7 +360,7 @@ class PointerMemberTestCase(unittest.TestCase): # We can assign arrays of the correct type s.array = (c_int * 3)(1, 2, 3) items = [s.array[i] for i in range(3)] - self.failUnlessEqual(items, [1, 2, 3]) + self.assertEqual(items, [1, 2, 3]) # The following are bugs, but are included here because the unittests # also describe the current behaviour. @@ -371,14 +371,14 @@ class PointerMemberTestCase(unittest.TestCase): s.array[0] = 42 items = [s.array[i] for i in range(3)] - self.failUnlessEqual(items, [42, 2, 3]) + self.assertEqual(items, [42, 2, 3]) s.array[0] = 1 ## s.array[1] = 42 items = [s.array[i] for i in range(3)] - self.failUnlessEqual(items, [1, 2, 3]) + self.assertEqual(items, [1, 2, 3]) def test_none_to_pointer_fields(self): class S(Structure): @@ -388,7 +388,7 @@ class PointerMemberTestCase(unittest.TestCase): s = S() s.x = 12345678 s.p = None - self.failUnlessEqual(s.x, 12345678) + self.assertEqual(s.x, 12345678) class TestRecursiveStructure(unittest.TestCase): def test_contains_itself(self): @@ -398,7 +398,7 @@ class TestRecursiveStructure(unittest.TestCase): try: Recursive._fields_ = [("next", Recursive)] except AttributeError as details: - self.failUnless("Structure or union cannot contain itself" in + self.assertTrue("Structure or union cannot contain itself" in str(details)) else: self.fail("Structure or union cannot contain itself") @@ -415,7 +415,7 @@ class TestRecursiveStructure(unittest.TestCase): try: Second._fields_ = [("first", First)] except AttributeError as details: - self.failUnless("_fields_ is final" in + self.assertTrue("_fields_ is final" in str(details)) else: self.fail("AttributeError not raised") diff --git a/Lib/ctypes/test/test_unaligned_structures.py b/Lib/ctypes/test/test_unaligned_structures.py index 89343ba..bcacfc8 100644 --- a/Lib/ctypes/test/test_unaligned_structures.py +++ b/Lib/ctypes/test/test_unaligned_structures.py @@ -28,18 +28,18 @@ class TestStructures(unittest.TestCase): def test_native(self): for typ in structures: ## print typ.value - self.failUnlessEqual(typ.value.offset, 1) + self.assertEqual(typ.value.offset, 1) o = typ() o.value = 4 - self.failUnlessEqual(o.value, 4) + self.assertEqual(o.value, 4) def test_swapped(self): for typ in byteswapped_structures: ## print >> sys.stderr, typ.value - self.failUnlessEqual(typ.value.offset, 1) + self.assertEqual(typ.value.offset, 1) o = typ() o.value = 4 - self.failUnlessEqual(o.value, 4) + self.assertEqual(o.value, 4) if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_unicode.py b/Lib/ctypes/test/test_unicode.py index 0eae59b..7d628f2 100644 --- a/Lib/ctypes/test/test_unicode.py +++ b/Lib/ctypes/test/test_unicode.py @@ -22,55 +22,55 @@ else: def test_ascii_strict(self): ctypes.set_conversion_mode("ascii", "strict") # no conversions take place with unicode arguments - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen("ab\u2070"), 3) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen("ab\u2070"), 3) # string args are converted - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessRaises(ctypes.ArgumentError, wcslen, b"ab\xe4") + self.assertEqual(wcslen("abc"), 3) + self.assertRaises(ctypes.ArgumentError, wcslen, b"ab\xe4") def test_ascii_replace(self): ctypes.set_conversion_mode("ascii", "replace") - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen("ab\u2070"), 3) - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen("ab\xe4"), 3) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen("ab\u2070"), 3) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen("ab\xe4"), 3) def test_ascii_ignore(self): ctypes.set_conversion_mode("ascii", "ignore") - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen("ab\u2070"), 3) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen("ab\u2070"), 3) # ignore error mode skips non-ascii characters - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen(b"\xe4\xf6\xfc\xdf"), 0) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen(b"\xe4\xf6\xfc\xdf"), 0) def test_latin1_strict(self): ctypes.set_conversion_mode("latin-1", "strict") - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen("ab\u2070"), 3) - self.failUnlessEqual(wcslen("abc"), 3) - self.failUnlessEqual(wcslen("\xe4\xf6\xfc\xdf"), 4) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen("ab\u2070"), 3) + self.assertEqual(wcslen("abc"), 3) + self.assertEqual(wcslen("\xe4\xf6\xfc\xdf"), 4) def test_buffers(self): ctypes.set_conversion_mode("ascii", "strict") buf = ctypes.create_unicode_buffer("abc") - self.failUnlessEqual(len(buf), 3+1) + self.assertEqual(len(buf), 3+1) ctypes.set_conversion_mode("ascii", "replace") buf = ctypes.create_unicode_buffer(b"ab\xe4\xf6\xfc") - self.failUnlessEqual(buf[:], "ab\uFFFD\uFFFD\uFFFD\0") - self.failUnlessEqual(buf[::], "ab\uFFFD\uFFFD\uFFFD\0") - self.failUnlessEqual(buf[::-1], "\0\uFFFD\uFFFD\uFFFDba") - self.failUnlessEqual(buf[::2], "a\uFFFD\uFFFD") - self.failUnlessEqual(buf[6:5:-1], "") + self.assertEqual(buf[:], "ab\uFFFD\uFFFD\uFFFD\0") + self.assertEqual(buf[::], "ab\uFFFD\uFFFD\uFFFD\0") + self.assertEqual(buf[::-1], "\0\uFFFD\uFFFD\uFFFDba") + self.assertEqual(buf[::2], "a\uFFFD\uFFFD") + self.assertEqual(buf[6:5:-1], "") ctypes.set_conversion_mode("ascii", "ignore") buf = ctypes.create_unicode_buffer(b"ab\xe4\xf6\xfc") # is that correct? not sure. But with 'ignore', you get what you pay for.. - self.failUnlessEqual(buf[:], "ab\0\0\0\0") - self.failUnlessEqual(buf[::], "ab\0\0\0\0") - self.failUnlessEqual(buf[::-1], "\0\0\0\0ba") - self.failUnlessEqual(buf[::2], "a\0\0") - self.failUnlessEqual(buf[6:5:-1], "") + self.assertEqual(buf[:], "ab\0\0\0\0") + self.assertEqual(buf[::], "ab\0\0\0\0") + self.assertEqual(buf[::-1], "\0\0\0\0ba") + self.assertEqual(buf[::2], "a\0\0") + self.assertEqual(buf[6:5:-1], "") import _ctypes_test func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p @@ -88,41 +88,41 @@ else: def test_ascii_replace(self): ctypes.set_conversion_mode("ascii", "strict") - self.failUnlessEqual(func("abc"), "abc") - self.failUnlessEqual(func("abc"), "abc") + self.assertEqual(func("abc"), "abc") + self.assertEqual(func("abc"), "abc") self.assertRaises(ctypes.ArgumentError, func, "ab\xe4") def test_ascii_ignore(self): ctypes.set_conversion_mode("ascii", "ignore") - self.failUnlessEqual(func("abc"), "abc") - self.failUnlessEqual(func("abc"), "abc") - self.failUnlessEqual(func("\xe4\xf6\xfc\xdf"), "") + self.assertEqual(func("abc"), "abc") + self.assertEqual(func("abc"), "abc") + self.assertEqual(func("\xe4\xf6\xfc\xdf"), "") def test_ascii_replace(self): ctypes.set_conversion_mode("ascii", "replace") - self.failUnlessEqual(func("abc"), "abc") - self.failUnlessEqual(func("abc"), "abc") - self.failUnlessEqual(func("\xe4\xf6\xfc\xdf"), "????") + self.assertEqual(func("abc"), "abc") + self.assertEqual(func("abc"), "abc") + self.assertEqual(func("\xe4\xf6\xfc\xdf"), "????") def test_buffers(self): ctypes.set_conversion_mode("ascii", "strict") buf = ctypes.create_string_buffer("abc") - self.failUnlessEqual(len(buf), 3+1) + self.assertEqual(len(buf), 3+1) ctypes.set_conversion_mode("ascii", "replace") buf = ctypes.create_string_buffer("ab\xe4\xf6\xfc") - self.failUnlessEqual(buf[:], b"ab???\0") - self.failUnlessEqual(buf[::], b"ab???\0") - self.failUnlessEqual(buf[::-1], b"\0???ba") - self.failUnlessEqual(buf[::2], b"a??") - self.failUnlessEqual(buf[6:5:-1], b"") + self.assertEqual(buf[:], b"ab???\0") + self.assertEqual(buf[::], b"ab???\0") + self.assertEqual(buf[::-1], b"\0???ba") + self.assertEqual(buf[::2], b"a??") + self.assertEqual(buf[6:5:-1], b"") ctypes.set_conversion_mode("ascii", "ignore") buf = ctypes.create_string_buffer("ab\xe4\xf6\xfc") # is that correct? not sure. But with 'ignore', you get what you pay for.. - self.failUnlessEqual(buf[:], b"ab\0\0\0\0") - self.failUnlessEqual(buf[::], b"ab\0\0\0\0") - self.failUnlessEqual(buf[::-1], b"\0\0\0\0ba") + self.assertEqual(buf[:], b"ab\0\0\0\0") + self.assertEqual(buf[::], b"ab\0\0\0\0") + self.assertEqual(buf[::-1], b"\0\0\0\0ba") if __name__ == '__main__': unittest.main() diff --git a/Lib/ctypes/test/test_values.py b/Lib/ctypes/test/test_values.py index 476b7b7..e464102 100644 --- a/Lib/ctypes/test/test_values.py +++ b/Lib/ctypes/test/test_values.py @@ -15,13 +15,13 @@ class ValuesTestCase(unittest.TestCase): ctdll = CDLL(_ctypes_test.__file__) an_integer = c_int.in_dll(ctdll, "an_integer") x = an_integer.value - self.failUnlessEqual(x, ctdll.get_an_integer()) + self.assertEqual(x, ctdll.get_an_integer()) an_integer.value *= 2 - self.failUnlessEqual(x*2, ctdll.get_an_integer()) + self.assertEqual(x*2, ctdll.get_an_integer()) # To avoid test failures when this test is repeated several # times the original value must be restored an_integer.value = x - self.failUnlessEqual(x, ctdll.get_an_integer()) + self.assertEqual(x, ctdll.get_an_integer()) def test_undefined(self): ctdll = CDLL(_ctypes_test.__file__) @@ -40,11 +40,11 @@ class ValuesTestCase(unittest.TestCase): # docstrings are also removed in the latter case. opt = c_int.in_dll(pydll, "Py_OptimizeFlag").value if __debug__: - self.failUnlessEqual(opt, 0) + self.assertEqual(opt, 0) elif ValuesTestCase.__doc__ is not None: - self.failUnlessEqual(opt, 1) + self.assertEqual(opt, 1) else: - self.failUnlessEqual(opt, 2) + self.assertEqual(opt, 2) def test_frozentable(self): # Python exports a PyImport_FrozenModules symbol. This is a @@ -76,7 +76,7 @@ class ValuesTestCase(unittest.TestCase): expected = [("__hello__", 104), ("__phello__", -104), ("__phello__.spam", 104)] else: expected = [("__hello__", 100), ("__phello__", -100), ("__phello__.spam", 100)] - self.failUnlessEqual(items, expected) + self.assertEqual(items, expected) from ctypes import _pointer_type_cache del _pointer_type_cache[struct_frozen] diff --git a/Lib/ctypes/test/test_varsize_struct.py b/Lib/ctypes/test/test_varsize_struct.py index 06d2323..f409500 100644 --- a/Lib/ctypes/test/test_varsize_struct.py +++ b/Lib/ctypes/test/test_varsize_struct.py @@ -7,44 +7,44 @@ class VarSizeTest(unittest.TestCase): _fields_ = [("item", c_int), ("array", c_int * 1)] - self.failUnlessEqual(sizeof(X), sizeof(c_int) * 2) + self.assertEqual(sizeof(X), sizeof(c_int) * 2) x = X() x.item = 42 x.array[0] = 100 - self.failUnlessEqual(sizeof(x), sizeof(c_int) * 2) + self.assertEqual(sizeof(x), sizeof(c_int) * 2) # make room for one additional item new_size = sizeof(X) + sizeof(c_int) * 1 resize(x, new_size) - self.failUnlessEqual(sizeof(x), new_size) - self.failUnlessEqual((x.item, x.array[0]), (42, 100)) + self.assertEqual(sizeof(x), new_size) + self.assertEqual((x.item, x.array[0]), (42, 100)) # make room for 10 additional items new_size = sizeof(X) + sizeof(c_int) * 9 resize(x, new_size) - self.failUnlessEqual(sizeof(x), new_size) - self.failUnlessEqual((x.item, x.array[0]), (42, 100)) + self.assertEqual(sizeof(x), new_size) + self.assertEqual((x.item, x.array[0]), (42, 100)) # make room for one additional item new_size = sizeof(X) + sizeof(c_int) * 1 resize(x, new_size) - self.failUnlessEqual(sizeof(x), new_size) - self.failUnlessEqual((x.item, x.array[0]), (42, 100)) + self.assertEqual(sizeof(x), new_size) + self.assertEqual((x.item, x.array[0]), (42, 100)) def test_array_invalid_length(self): # cannot create arrays with non-positive size - self.failUnlessRaises(ValueError, lambda: c_int * -1) - self.failUnlessRaises(ValueError, lambda: c_int * -3) + self.assertRaises(ValueError, lambda: c_int * -1) + self.assertRaises(ValueError, lambda: c_int * -3) def test_zerosized_array(self): array = (c_int * 0)() # accessing elements of zero-sized arrays raise IndexError - self.failUnlessRaises(IndexError, array.__setitem__, 0, None) - self.failUnlessRaises(IndexError, array.__getitem__, 0) - self.failUnlessRaises(IndexError, array.__setitem__, 1, None) - self.failUnlessRaises(IndexError, array.__getitem__, 1) - self.failUnlessRaises(IndexError, array.__setitem__, -1, None) - self.failUnlessRaises(IndexError, array.__getitem__, -1) + self.assertRaises(IndexError, array.__setitem__, 0, None) + self.assertRaises(IndexError, array.__getitem__, 0) + self.assertRaises(IndexError, array.__setitem__, 1, None) + self.assertRaises(IndexError, array.__getitem__, 1) + self.assertRaises(IndexError, array.__setitem__, -1, None) + self.assertRaises(IndexError, array.__getitem__, -1) if __name__ == "__main__": unittest.main() diff --git a/Lib/ctypes/test/test_win32.py b/Lib/ctypes/test/test_win32.py index 5067b60..5dedd9f 100644 --- a/Lib/ctypes/test/test_win32.py +++ b/Lib/ctypes/test/test_win32.py @@ -18,7 +18,7 @@ if sys.platform == "win32" and sizeof(c_void_p) == sizeof(c_int): self.assertRaises(ValueError, IsWindow) # This one should succeeed... - self.failUnlessEqual(0, IsWindow(0)) + self.assertEqual(0, IsWindow(0)) # ValueError: Procedure probably called with too many arguments (8 bytes in excess) self.assertRaises(ValueError, IsWindow, 0, 0, 0) @@ -49,13 +49,13 @@ if sys.platform == "win32": class TestWintypes(unittest.TestCase): def test_HWND(self): from ctypes import wintypes - self.failUnlessEqual(sizeof(wintypes.HWND), sizeof(c_void_p)) + self.assertEqual(sizeof(wintypes.HWND), sizeof(c_void_p)) def test_PARAM(self): from ctypes import wintypes - self.failUnlessEqual(sizeof(wintypes.WPARAM), + self.assertEqual(sizeof(wintypes.WPARAM), sizeof(c_void_p)) - self.failUnlessEqual(sizeof(wintypes.LPARAM), + self.assertEqual(sizeof(wintypes.LPARAM), sizeof(c_void_p)) def test_COMError(self): @@ -84,7 +84,7 @@ class Structures(unittest.TestCase): pt = POINT(10, 10) rect = RECT(0, 0, 20, 20) - self.failUnlessEqual(1, dll.PointInRect(byref(rect), pt)) + self.assertEqual(1, dll.PointInRect(byref(rect), pt)) if __name__ == '__main__': unittest.main() diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py index 663b335..d88e0b3 100644 --- a/Lib/distutils/tests/test_archive_util.py +++ b/Lib/distutils/tests/test_archive_util.py @@ -47,7 +47,7 @@ class ArchiveUtilTestCase(support.TempdirManager, # check if the compressed tarball was created tarball = base_name + '.tar.gz' - self.assert_(os.path.exists(tarball)) + self.assertTrue(os.path.exists(tarball)) # trying an uncompressed one base_name = os.path.join(tmpdir2, 'archive') @@ -58,7 +58,7 @@ class ArchiveUtilTestCase(support.TempdirManager, finally: os.chdir(old_dir) tarball = base_name + '.tar' - self.assert_(os.path.exists(tarball)) + self.assertTrue(os.path.exists(tarball)) def _tarinfo(self, path): tar = tarfile.open(path) @@ -96,7 +96,7 @@ class ArchiveUtilTestCase(support.TempdirManager, # check if the compressed tarball was created tarball = base_name + '.tar.gz' - self.assert_(os.path.exists(tarball)) + self.assertTrue(os.path.exists(tarball)) # now create another tarball using `tar` tarball2 = os.path.join(tmpdir, 'archive2.tar.gz') @@ -110,7 +110,7 @@ class ArchiveUtilTestCase(support.TempdirManager, finally: os.chdir(old_dir) - self.assert_(os.path.exists(tarball2)) + self.assertTrue(os.path.exists(tarball2)) # let's compare both tarballs self.assertEquals(self._tarinfo(tarball), self._tarinfo(tarball2)) @@ -123,7 +123,7 @@ class ArchiveUtilTestCase(support.TempdirManager, finally: os.chdir(old_dir) tarball = base_name + '.tar' - self.assert_(os.path.exists(tarball)) + self.assertTrue(os.path.exists(tarball)) # now for a dry_run base_name = os.path.join(tmpdir2, 'archive') @@ -134,7 +134,7 @@ class ArchiveUtilTestCase(support.TempdirManager, finally: os.chdir(old_dir) tarball = base_name + '.tar' - self.assert_(os.path.exists(tarball)) + self.assertTrue(os.path.exists(tarball)) @unittest.skipUnless(find_executable('compress'), 'The compress program is required') @@ -151,7 +151,7 @@ class ArchiveUtilTestCase(support.TempdirManager, finally: os.chdir(old_dir) tarball = base_name + '.tar.Z' - self.assert_(os.path.exists(tarball)) + self.assertTrue(os.path.exists(tarball)) self.assertEquals(len(w.warnings), 1) # same test with dry_run @@ -165,7 +165,7 @@ class ArchiveUtilTestCase(support.TempdirManager, dry_run=True) finally: os.chdir(old_dir) - self.assert_(not os.path.exists(tarball)) + self.assertTrue(not os.path.exists(tarball)) self.assertEquals(len(w.warnings), 1) @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') diff --git a/Lib/distutils/tests/test_bdist_rpm.py b/Lib/distutils/tests/test_bdist_rpm.py index 2d84007..c271567 100644 --- a/Lib/distutils/tests/test_bdist_rpm.py +++ b/Lib/distutils/tests/test_bdist_rpm.py @@ -74,7 +74,7 @@ class BuildRpmTestCase(support.TempdirManager, cmd.run() dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) - self.assert_('foo-0.1-1.noarch.rpm' in dist_created) + self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created) def test_no_optimize_flag(self): @@ -114,7 +114,7 @@ class BuildRpmTestCase(support.TempdirManager, cmd.run() dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) - self.assert_('foo-0.1-1.noarch.rpm' in dist_created) + self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created) os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm')) def test_suite(): diff --git a/Lib/distutils/tests/test_bdist_wininst.py b/Lib/distutils/tests/test_bdist_wininst.py index f2cb4fd..9b1ba6d 100644 --- a/Lib/distutils/tests/test_bdist_wininst.py +++ b/Lib/distutils/tests/test_bdist_wininst.py @@ -21,7 +21,7 @@ class BuildWinInstTestCase(support.TempdirManager, # and make sure it finds it and returns its content # no matter what platform we have exe_file = cmd.get_exe_bytes() - self.assert_(len(exe_file) > 10) + self.assertTrue(len(exe_file) > 10) def test_suite(): return unittest.makeSuite(BuildWinInstTestCase) diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py index 47d85cd..536cd67 100644 --- a/Lib/distutils/tests/test_build_clib.py +++ b/Lib/distutils/tests/test_build_clib.py @@ -135,7 +135,7 @@ class BuildCLibTestCase(support.TempdirManager, cmd.run() # let's check the result - self.assert_('libfoo.a' in os.listdir(build_temp)) + self.assertTrue('libfoo.a' in os.listdir(build_temp)) def test_suite(): return unittest.makeSuite(BuildCLibTestCase) diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index 9861ee2..1221fd4 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -74,15 +74,15 @@ class BuildExtTestCase(TempdirManager, import xx for attr in ('error', 'foo', 'new', 'roj'): - self.assert_(hasattr(xx, attr)) + self.assertTrue(hasattr(xx, attr)) self.assertEquals(xx.foo(2, 5), 7) self.assertEquals(xx.foo(13,15), 28) self.assertEquals(xx.new().demo(), None) doc = 'This is a template module just for instruction.' self.assertEquals(xx.__doc__, doc) - self.assert_(isinstance(xx.Null(), xx.Null)) - self.assert_(isinstance(xx.Str(), xx.Str)) + self.assertTrue(isinstance(xx.Null(), xx.Null)) + self.assertTrue(isinstance(xx.Str(), xx.Str)) def tearDown(self): # Get everything back to normal @@ -114,7 +114,7 @@ class BuildExtTestCase(TempdirManager, _config_vars['Py_ENABLE_SHARED'] = old_var # make sure we get some library dirs under solaris - self.assert_(len(cmd.library_dirs) > 0) + self.assertTrue(len(cmd.library_dirs) > 0) def test_user_site(self): # site.USER_SITE was introduced in 2.6 @@ -128,7 +128,7 @@ class BuildExtTestCase(TempdirManager, # making sure the user option is there options = [name for name, short, lable in cmd.user_options] - self.assert_('user' in options) + self.assertTrue('user' in options) # setting a value cmd.user = 1 @@ -144,9 +144,9 @@ class BuildExtTestCase(TempdirManager, # see if include_dirs and library_dirs # were set - self.assert_(lib in cmd.library_dirs) - self.assert_(lib in cmd.rpath) - self.assert_(incl in cmd.include_dirs) + self.assertTrue(lib in cmd.library_dirs) + self.assertTrue(lib in cmd.rpath) + self.assertTrue(incl in cmd.include_dirs) def test_optional_extension(self): @@ -175,10 +175,10 @@ class BuildExtTestCase(TempdirManager, from distutils import sysconfig py_include = sysconfig.get_python_inc() - self.assert_(py_include in cmd.include_dirs) + self.assertTrue(py_include in cmd.include_dirs) plat_py_include = sysconfig.get_python_inc(plat_specific=1) - self.assert_(plat_py_include in cmd.include_dirs) + self.assertTrue(plat_py_include in cmd.include_dirs) # make sure cmd.libraries is turned into a list # if it's a string @@ -192,7 +192,7 @@ class BuildExtTestCase(TempdirManager, cmd = build_ext(dist) cmd.library_dirs = 'my_lib_dir' cmd.finalize_options() - self.assert_('my_lib_dir' in cmd.library_dirs) + self.assertTrue('my_lib_dir' in cmd.library_dirs) # make sure rpath is turned into a list # if it's a list of os.pathsep's paths @@ -257,13 +257,13 @@ class BuildExtTestCase(TempdirManager, 'some': 'bar'})] cmd.check_extensions_list(exts) ext = exts[0] - self.assert_(isinstance(ext, Extension)) + self.assertTrue(isinstance(ext, Extension)) # check_extensions_list adds in ext the values passed # when they are in ('include_dirs', 'library_dirs', 'libraries' # 'extra_objects', 'extra_compile_args', 'extra_link_args') self.assertEquals(ext.libraries, 'foo') - self.assert_(not hasattr(ext, 'some')) + self.assertTrue(not hasattr(ext, 'some')) # 'macros' element of build info dict must be 1- or 2-tuple exts = [('foo.bar', {'sources': [''], 'libraries': 'foo', @@ -321,7 +321,7 @@ class BuildExtTestCase(TempdirManager, so_file = cmd.get_outputs()[0] finally: os.chdir(old_wd) - self.assert_(os.path.exists(so_file)) + self.assertTrue(os.path.exists(so_file)) self.assertEquals(os.path.splitext(so_file)[-1], sysconfig.get_config_var('SO')) so_dir = os.path.dirname(so_file) @@ -330,7 +330,7 @@ class BuildExtTestCase(TempdirManager, cmd.inplace = 0 cmd.run() so_file = cmd.get_outputs()[0] - self.assert_(os.path.exists(so_file)) + self.assertTrue(os.path.exists(so_file)) self.assertEquals(os.path.splitext(so_file)[-1], sysconfig.get_config_var('SO')) so_dir = os.path.dirname(so_file) diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py index 75b6624..8ad3bbc 100644 --- a/Lib/distutils/tests/test_build_py.py +++ b/Lib/distutils/tests/test_build_py.py @@ -52,9 +52,9 @@ class BuildPyTestCase(support.TempdirManager, self.assertEqual(len(cmd.get_outputs()), 3) pkgdest = os.path.join(destination, "pkg") files = os.listdir(pkgdest) - self.assert_("__init__.py" in files) - self.assert_("__init__.pyc" in files) - self.assert_("README.txt" in files) + self.assertTrue("__init__.py" in files) + self.assertTrue("__init__.pyc" in files) + self.assertTrue("README.txt" in files) def test_empty_package_dir (self): # See SF 1668596/1720897. diff --git a/Lib/distutils/tests/test_build_scripts.py b/Lib/distutils/tests/test_build_scripts.py index b55eb58..b1d2d07 100644 --- a/Lib/distutils/tests/test_build_scripts.py +++ b/Lib/distutils/tests/test_build_scripts.py @@ -16,12 +16,12 @@ class BuildScriptsTestCase(support.TempdirManager, def test_default_settings(self): cmd = self.get_build_scripts_cmd("/foo/bar", []) - self.assert_(not cmd.force) - self.assert_(cmd.build_dir is None) + self.assertTrue(not cmd.force) + self.assertTrue(cmd.build_dir is None) cmd.finalize_options() - self.assert_(cmd.force) + self.assertTrue(cmd.force) self.assertEqual(cmd.build_dir, "/foo/bar") def test_build(self): @@ -37,7 +37,7 @@ class BuildScriptsTestCase(support.TempdirManager, built = os.listdir(target) for name in expected: - self.assert_(name in built) + self.assertTrue(name in built) def get_build_scripts_cmd(self, target, scripts): import sys @@ -100,7 +100,7 @@ class BuildScriptsTestCase(support.TempdirManager, built = os.listdir(target) for name in expected: - self.assert_(name in built) + self.assertTrue(name in built) def test_suite(): return unittest.makeSuite(BuildScriptsTestCase) diff --git a/Lib/distutils/tests/test_clean.py b/Lib/distutils/tests/test_clean.py index 3026032..dbc4ee2 100755 --- a/Lib/distutils/tests/test_clean.py +++ b/Lib/distutils/tests/test_clean.py @@ -35,7 +35,7 @@ class cleanTestCase(support.TempdirManager, # make sure the files where removed for name, path in dirs: - self.assert_(not os.path.exists(path), + self.assertTrue(not os.path.exists(path), '%s was not removed' % path) # let's run the command again (should spit warnings but suceed) diff --git a/Lib/distutils/tests/test_cmd.py b/Lib/distutils/tests/test_cmd.py index 8f2b36f..d6438b5 100644 --- a/Lib/distutils/tests/test_cmd.py +++ b/Lib/distutils/tests/test_cmd.py @@ -70,7 +70,7 @@ class CommandTestCase(unittest.TestCase): cmd.option2 = None cmd.ensure_string('option2', 'xxx') - self.assert_(hasattr(cmd, 'option2')) + self.assertTrue(hasattr(cmd, 'option2')) cmd.option3 = 1 self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3') diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py index 0f97cf7..879689d 100644 --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -102,9 +102,9 @@ class PyPIRCCommandTestCase(support.TempdirManager, def test_server_empty_registration(self): cmd = self._cmd(self.dist) rc = cmd._get_rc_file() - self.assert_(not os.path.exists(rc)) + self.assertTrue(not os.path.exists(rc)) cmd._store_pypirc('tarek', 'xxx') - self.assert_(os.path.exists(rc)) + self.assertTrue(os.path.exists(rc)) content = open(rc).read() self.assertEquals(content, WANTED) diff --git a/Lib/distutils/tests/test_config_cmd.py b/Lib/distutils/tests/test_config_cmd.py index bacf13a..ef2e7bc 100644 --- a/Lib/distutils/tests/test_config_cmd.py +++ b/Lib/distutils/tests/test_config_cmd.py @@ -73,14 +73,14 @@ class ConfigTestCase(support.LoggingSilencer, self.write_file(f2, 'xxx') for f in (f1, f2): - self.assert_(os.path.exists(f)) + self.assertTrue(os.path.exists(f)) pkg_dir, dist = self.create_dist() cmd = config(dist) cmd._clean(f1, f2) for f in (f1, f2): - self.assert_(not os.path.exists(f)) + self.assertTrue(not os.path.exists(f)) def test_suite(): return unittest.makeSuite(ConfigTestCase) diff --git a/Lib/distutils/tests/test_dist.py b/Lib/distutils/tests/test_dist.py index 4076039..9f795f4 100644 --- a/Lib/distutils/tests/test_dist.py +++ b/Lib/distutils/tests/test_dist.py @@ -72,7 +72,7 @@ class DistributionTestCase(support.LoggingSilencer, self.assertEqual(d.get_command_packages(), ["distutils.command", "foo.bar", "distutils.tests"]) cmd = d.get_command_obj("test_dist") - self.assert_(isinstance(cmd, test_dist)) + self.assertTrue(isinstance(cmd, test_dist)) self.assertEqual(cmd.sample_option, "sometext") def test_command_packages_configfile(self): @@ -157,10 +157,10 @@ class MetadataTestCase(support.TempdirManager, support.EnvironGuard, "version": "1.0"} dist = Distribution(attrs) meta = self.format_metadata(dist) - self.assert_("Metadata-Version: 1.0" in meta) - self.assert_("provides:" not in meta.lower()) - self.assert_("requires:" not in meta.lower()) - self.assert_("obsoletes:" not in meta.lower()) + self.assertTrue("Metadata-Version: 1.0" in meta) + self.assertTrue("provides:" not in meta.lower()) + self.assertTrue("requires:" not in meta.lower()) + self.assertTrue("obsoletes:" not in meta.lower()) def test_provides(self): attrs = {"name": "package", @@ -172,9 +172,9 @@ class MetadataTestCase(support.TempdirManager, support.EnvironGuard, self.assertEqual(dist.get_provides(), ["package", "package.sub"]) meta = self.format_metadata(dist) - self.assert_("Metadata-Version: 1.1" in meta) - self.assert_("requires:" not in meta.lower()) - self.assert_("obsoletes:" not in meta.lower()) + self.assertTrue("Metadata-Version: 1.1" in meta) + self.assertTrue("requires:" not in meta.lower()) + self.assertTrue("obsoletes:" not in meta.lower()) def test_provides_illegal(self): self.assertRaises(ValueError, Distribution, @@ -192,11 +192,11 @@ class MetadataTestCase(support.TempdirManager, support.EnvironGuard, self.assertEqual(dist.get_requires(), ["other", "another (==1.0)"]) meta = self.format_metadata(dist) - self.assert_("Metadata-Version: 1.1" in meta) - self.assert_("provides:" not in meta.lower()) - self.assert_("Requires: other" in meta) - self.assert_("Requires: another (==1.0)" in meta) - self.assert_("obsoletes:" not in meta.lower()) + self.assertTrue("Metadata-Version: 1.1" in meta) + self.assertTrue("provides:" not in meta.lower()) + self.assertTrue("Requires: other" in meta) + self.assertTrue("Requires: another (==1.0)" in meta) + self.assertTrue("obsoletes:" not in meta.lower()) def test_requires_illegal(self): self.assertRaises(ValueError, Distribution, @@ -214,11 +214,11 @@ class MetadataTestCase(support.TempdirManager, support.EnvironGuard, self.assertEqual(dist.get_obsoletes(), ["other", "another (<1.0)"]) meta = self.format_metadata(dist) - self.assert_("Metadata-Version: 1.1" in meta) - self.assert_("provides:" not in meta.lower()) - self.assert_("requires:" not in meta.lower()) - self.assert_("Obsoletes: other" in meta) - self.assert_("Obsoletes: another (<1.0)" in meta) + self.assertTrue("Metadata-Version: 1.1" in meta) + self.assertTrue("provides:" not in meta.lower()) + self.assertTrue("requires:" not in meta.lower()) + self.assertTrue("Obsoletes: other" in meta) + self.assertTrue("Obsoletes: another (<1.0)" in meta) def test_obsoletes_illegal(self): self.assertRaises(ValueError, Distribution, @@ -252,14 +252,14 @@ class MetadataTestCase(support.TempdirManager, support.EnvironGuard, if sys.platform in ('linux', 'darwin'): self.environ['HOME'] = temp_dir files = dist.find_config_files() - self.assert_(user_filename in files) + self.assertTrue(user_filename in files) # win32-style if sys.platform == 'win32': # home drive should be found self.environ['HOME'] = temp_dir files = dist.find_config_files() - self.assert_(user_filename in files, + self.assertTrue(user_filename in files, '%r not found in %r' % (user_filename, files)) finally: os.remove(user_filename) @@ -285,7 +285,7 @@ class MetadataTestCase(support.TempdirManager, support.EnvironGuard, output = [line for line in s.getvalue().split('\n') if line.strip() != ''] - self.assert_(len(output) > 0) + self.assertTrue(len(output) > 0) def test_suite(): suite = unittest.TestSuite() diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py index 8d7e972..d0ad5ce 100644 --- a/Lib/distutils/tests/test_install.py +++ b/Lib/distutils/tests/test_install.py @@ -88,7 +88,7 @@ class InstallTestCase(support.TempdirManager, def _test_user_site(self): for key in ('nt_user', 'unix_user', 'os2_home'): - self.assert_(key in INSTALL_SCHEMES) + self.assertTrue(key in INSTALL_SCHEMES) dist = Distribution({'name': 'xx'}) cmd = install(dist) @@ -96,24 +96,24 @@ class InstallTestCase(support.TempdirManager, # making sure the user option is there options = [name for name, short, lable in cmd.user_options] - self.assert_('user' in options) + self.assertTrue('user' in options) # setting a value cmd.user = 1 # user base and site shouldn't be created yet - self.assert_(not os.path.exists(self.user_base)) - self.assert_(not os.path.exists(self.user_site)) + self.assertTrue(not os.path.exists(self.user_base)) + self.assertTrue(not os.path.exists(self.user_site)) # let's run finalize cmd.ensure_finalized() # now they should - self.assert_(os.path.exists(self.user_base)) - self.assert_(os.path.exists(self.user_site)) + self.assertTrue(os.path.exists(self.user_base)) + self.assertTrue(os.path.exists(self.user_site)) - self.assert_('userbase' in cmd.config_vars) - self.assert_('usersite' in cmd.config_vars) + self.assertTrue('userbase' in cmd.config_vars) + self.assertTrue('usersite' in cmd.config_vars) def test_handle_extra_path(self): dist = Distribution({'name': 'xx', 'extra_path': 'path,dirs'}) diff --git a/Lib/distutils/tests/test_install_data.py b/Lib/distutils/tests/test_install_data.py index 73c4037..7072136 100644 --- a/Lib/distutils/tests/test_install_data.py +++ b/Lib/distutils/tests/test_install_data.py @@ -35,9 +35,9 @@ class InstallDataTestCase(support.TempdirManager, # let's check the result self.assertEquals(len(cmd.get_outputs()), 2) rtwo = os.path.split(two)[-1] - self.assert_(os.path.exists(os.path.join(inst2, rtwo))) + self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) rone = os.path.split(one)[-1] - self.assert_(os.path.exists(os.path.join(inst, rone))) + self.assertTrue(os.path.exists(os.path.join(inst, rone))) cmd.outfiles = [] # let's try with warn_dir one @@ -47,8 +47,8 @@ class InstallDataTestCase(support.TempdirManager, # let's check the result self.assertEquals(len(cmd.get_outputs()), 2) - self.assert_(os.path.exists(os.path.join(inst2, rtwo))) - self.assert_(os.path.exists(os.path.join(inst, rone))) + self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) + self.assertTrue(os.path.exists(os.path.join(inst, rone))) cmd.outfiles = [] # now using root and empty dir @@ -65,8 +65,8 @@ class InstallDataTestCase(support.TempdirManager, # let's check the result self.assertEquals(len(cmd.get_outputs()), 4) - self.assert_(os.path.exists(os.path.join(inst2, rtwo))) - self.assert_(os.path.exists(os.path.join(inst, rone))) + self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) + self.assertTrue(os.path.exists(os.path.join(inst, rone))) def test_suite(): return unittest.makeSuite(InstallDataTestCase) diff --git a/Lib/distutils/tests/test_install_lib.py b/Lib/distutils/tests/test_install_lib.py index d768166..793b95c 100644 --- a/Lib/distutils/tests/test_install_lib.py +++ b/Lib/distutils/tests/test_install_lib.py @@ -39,8 +39,8 @@ class InstallLibTestCase(support.TempdirManager, f = os.path.join(pkg_dir, 'foo.py') self.write_file(f, '# python file') cmd.byte_compile([f]) - self.assert_(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) - self.assert_(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) + self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) + self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) def test_get_outputs(self): pkg_dir, dist = self.create_dist() @@ -57,7 +57,7 @@ class InstallLibTestCase(support.TempdirManager, cmd.distribution.script_name = 'setup.py' # get_output should return 4 elements - self.assert_(len(cmd.get_outputs()) >= 2) + self.assertTrue(len(cmd.get_outputs()) >= 2) def test_get_inputs(self): pkg_dir, dist = self.create_dist() diff --git a/Lib/distutils/tests/test_install_scripts.py b/Lib/distutils/tests/test_install_scripts.py index fffa6ef..b7eb625 100644 --- a/Lib/distutils/tests/test_install_scripts.py +++ b/Lib/distutils/tests/test_install_scripts.py @@ -23,15 +23,15 @@ class InstallScriptsTestCase(support.TempdirManager, skip_build=1, ) cmd = install_scripts(dist) - self.assert_(not cmd.force) - self.assert_(not cmd.skip_build) - self.assert_(cmd.build_dir is None) - self.assert_(cmd.install_dir is None) + self.assertTrue(not cmd.force) + self.assertTrue(not cmd.skip_build) + self.assertTrue(cmd.build_dir is None) + self.assertTrue(cmd.install_dir is None) cmd.finalize_options() - self.assert_(cmd.force) - self.assert_(cmd.skip_build) + self.assertTrue(cmd.force) + self.assertTrue(cmd.skip_build) self.assertEqual(cmd.build_dir, "/foo/bar") self.assertEqual(cmd.install_dir, "/splat/funk") @@ -69,7 +69,7 @@ class InstallScriptsTestCase(support.TempdirManager, installed = os.listdir(target) for name in expected: - self.assert_(name in installed) + self.assertTrue(name in installed) def test_suite(): diff --git a/Lib/distutils/tests/test_msvc9compiler.py b/Lib/distutils/tests/test_msvc9compiler.py index 11e5a47..7382798 100644 --- a/Lib/distutils/tests/test_msvc9compiler.py +++ b/Lib/distutils/tests/test_msvc9compiler.py @@ -46,7 +46,7 @@ class msvc9compilerTestCase(unittest.TestCase): # windows registeries versions. path = r'Software\Microsoft\Notepad' v = Reg.get_value(path, "lfitalic") - self.assert_(v in (0, 1)) + self.assertTrue(v in (0, 1)) import winreg HKCU = winreg.HKEY_CURRENT_USER @@ -54,7 +54,7 @@ class msvc9compilerTestCase(unittest.TestCase): self.assertEquals(keys, None) keys = Reg.read_keys(HKCU, r'Software\Microsoft') - self.assert_('Notepad' in keys) + self.assertTrue('Notepad' in keys) def test_suite(): return unittest.makeSuite(msvc9compilerTestCase) diff --git a/Lib/distutils/tests/test_register.py b/Lib/distutils/tests/test_register.py index d9ff3ec..c03ad10 100644 --- a/Lib/distutils/tests/test_register.py +++ b/Lib/distutils/tests/test_register.py @@ -96,7 +96,7 @@ class RegisterTestCase(PyPIRCCommandTestCase): cmd = self._get_cmd() # we shouldn't have a .pypirc file yet - self.assert_(not os.path.exists(self.rc)) + self.assertTrue(not os.path.exists(self.rc)) # patching input and getpass.getpass # so register gets happy @@ -115,7 +115,7 @@ class RegisterTestCase(PyPIRCCommandTestCase): del register_module.input # we should have a brand new .pypirc file - self.assert_(os.path.exists(self.rc)) + self.assertTrue(os.path.exists(self.rc)) # with the content similar to WANTED_PYPIRC content = open(self.rc).read() @@ -133,13 +133,13 @@ class RegisterTestCase(PyPIRCCommandTestCase): # let's see what the server received : we should # have 2 similar requests - self.assert_(self.conn.reqs, 2) + self.assertTrue(self.conn.reqs, 2) req1 = dict(self.conn.reqs[0].headers) req2 = dict(self.conn.reqs[1].headers) self.assertEquals(req1['Content-length'], '1374') self.assertEquals(req2['Content-length'], '1374') - self.assert_((b'xxx') in self.conn.reqs[1].data) + self.assertTrue((b'xxx') in self.conn.reqs[1].data) def test_password_not_in_file(self): @@ -165,11 +165,11 @@ class RegisterTestCase(PyPIRCCommandTestCase): del register_module.input # we should have send a request - self.assert_(self.conn.reqs, 1) + self.assertTrue(self.conn.reqs, 1) req = self.conn.reqs[0] headers = dict(req.headers) self.assertEquals(headers['Content-length'], '608') - self.assert_((b'tarek') in req.data) + self.assertTrue((b'tarek') in req.data) def test_password_reset(self): # this test runs choice 3 @@ -183,11 +183,11 @@ class RegisterTestCase(PyPIRCCommandTestCase): del register_module.input # we should have send a request - self.assert_(self.conn.reqs, 1) + self.assertTrue(self.conn.reqs, 1) req = self.conn.reqs[0] headers = dict(req.headers) self.assertEquals(headers['Content-length'], '290') - self.assert_((b'tarek') in req.data) + self.assertTrue((b'tarek') in req.data) def test_strict(self): # testing the script option diff --git a/Lib/distutils/tests/test_sysconfig.py b/Lib/distutils/tests/test_sysconfig.py index 2d8fa27..eb36204 100644 --- a/Lib/distutils/tests/test_sysconfig.py +++ b/Lib/distutils/tests/test_sysconfig.py @@ -21,12 +21,12 @@ class SysconfigTestCase(support.EnvironGuard, def test_get_config_h_filename(self): config_h = sysconfig.get_config_h_filename() - self.assert_(os.path.isfile(config_h), config_h) + self.assertTrue(os.path.isfile(config_h), config_h) def test_get_python_lib(self): lib_dir = sysconfig.get_python_lib() # XXX doesn't work on Linux when Python was never installed before - #self.assert_(os.path.isdir(lib_dir), lib_dir) + #self.assertTrue(os.path.isdir(lib_dir), lib_dir) # test for pythonxx.lib? self.assertNotEqual(sysconfig.get_python_lib(), sysconfig.get_python_lib(prefix=TESTFN)) @@ -36,14 +36,14 @@ class SysconfigTestCase(support.EnvironGuard, # This is not much of a test. We make sure Python.h exists # in the directory returned by get_python_inc() but we don't know # it is the correct file. - self.assert_(os.path.isdir(inc_dir), inc_dir) + self.assertTrue(os.path.isdir(inc_dir), inc_dir) python_h = os.path.join(inc_dir, "Python.h") - self.assert_(os.path.isfile(python_h), python_h) + self.assertTrue(os.path.isfile(python_h), python_h) def test_get_config_vars(self): cvars = sysconfig.get_config_vars() - self.assert_(isinstance(cvars, dict)) - self.assert_(cvars) + self.assertTrue(isinstance(cvars, dict)) + self.assertTrue(cvars) def test_customize_compiler(self): diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py index 95e4ac3..828f20c 100644 --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -107,7 +107,7 @@ class uploadTestCase(PyPIRCCommandTestCase): # what did we send ? headers = dict(self.conn.headers) self.assertEquals(headers['Content-length'], '2087') - self.assert_(headers['Content-type'].startswith('multipart/form-data')) + self.assertTrue(headers['Content-type'].startswith('multipart/form-data')) self.assertEquals(self.conn.requests, [('POST', '/pypi')]) self.assert_((b'xxx') in self.conn.body) diff --git a/Lib/distutils/tests/test_util.py b/Lib/distutils/tests/test_util.py index cee7d52..c0acf5f 100644 --- a/Lib/distutils/tests/test_util.py +++ b/Lib/distutils/tests/test_util.py @@ -225,10 +225,10 @@ class UtilTestCase(support.EnvironGuard, unittest.TestCase): no = ('n', 'no', 'f', 'false', 'off', '0', 'Off', 'No', 'N') for y in yes: - self.assert_(strtobool(y)) + self.assertTrue(strtobool(y)) for n in no: - self.assert_(not strtobool(n)) + self.assertTrue(not strtobool(n)) def test_rfc822_escape(self): header = 'I am a\npoor\nlonesome\nheader\n' diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 86e3537..25885c7 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -53,7 +53,7 @@ def openfile(filename, *args, **kws): # Base test class class TestEmailBase(unittest.TestCase): def ndiffAssertEqual(self, first, second): - """Like failUnlessEqual except use ndiff for readable output.""" + """Like assertEqual except use ndiff for readable output.""" if first != second: sfirst = str(first) ssecond = str(second) @@ -222,12 +222,12 @@ class TestMessageAPI(TestEmailBase): msg['From'] = 'Me' msg['to'] = 'You' # Check for case insensitivity - self.failUnless('from' in msg) - self.failUnless('From' in msg) - self.failUnless('FROM' in msg) - self.failUnless('to' in msg) - self.failUnless('To' in msg) - self.failUnless('TO' in msg) + self.assertTrue('from' in msg) + self.assertTrue('From' in msg) + self.assertTrue('FROM' in msg) + self.assertTrue('to' in msg) + self.assertTrue('To' in msg) + self.assertTrue('TO' in msg) def test_as_string(self): eq = self.ndiffAssertEqual @@ -237,7 +237,7 @@ class TestMessageAPI(TestEmailBase): eq(text, str(msg)) fullrepr = msg.as_string(unixfrom=True) lines = fullrepr.split('\n') - self.failUnless(lines[0].startswith('From ')) + self.assertTrue(lines[0].startswith('From ')) eq(text, NL.join(lines[1:])) def test_bad_param(self): @@ -307,12 +307,12 @@ class TestMessageAPI(TestEmailBase): '"Jim&&Jill"') def test_field_containment(self): - unless = self.failUnless + unless = self.assertTrue msg = email.message_from_string('Header: exists') unless('header' in msg) unless('Header' in msg) unless('HEADER' in msg) - self.failIf('headerx' in msg) + self.assertFalse('headerx' in msg) def test_set_param(self): eq = self.assertEqual @@ -952,7 +952,7 @@ class TestMIMEAudio(unittest.TestCase): def test_add_header(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue self._au.add_header('Content-Disposition', 'attachment', filename='audiotest.au') eq(self._au['content-disposition'], @@ -992,7 +992,7 @@ class TestMIMEImage(unittest.TestCase): def test_add_header(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue self._im.add_header('Content-Disposition', 'attachment', filename='dingusfish.gif') eq(self._im['content-disposition'], @@ -1036,7 +1036,7 @@ class TestMIMEText(unittest.TestCase): def test_types(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue eq(self._msg.get_content_type(), 'text/plain') eq(self._msg.get_param('charset'), 'us-ascii') missing = [] @@ -1046,7 +1046,7 @@ class TestMIMEText(unittest.TestCase): def test_payload(self): self.assertEqual(self._msg.get_payload(), 'hello there') - self.failUnless(not self._msg.is_multipart()) + self.assertTrue(not self._msg.is_multipart()) def test_charset(self): eq = self.assertEqual @@ -1097,7 +1097,7 @@ This is the dingus fish. def test_hierarchy(self): # convenience eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue raises = self.assertRaises # tests m = self._msg @@ -1411,7 +1411,7 @@ Content-Type: text/plain -- XXXX-- ''') - self.failUnless(msg.is_multipart()) + self.assertTrue(msg.is_multipart()) eq(msg.get_boundary(), ' XXXX') eq(len(msg.get_payload()), 2) @@ -1441,7 +1441,7 @@ class TestNonConformant(TestEmailBase): eq(msg.get_content_subtype(), 'plain') def test_same_boundary_inner_outer(self): - unless = self.failUnless + unless = self.assertTrue msg = self._msgobj('msg_15.txt') # XXX We can probably eventually do better inner = msg.get_payload(0) @@ -1451,7 +1451,7 @@ class TestNonConformant(TestEmailBase): errors.StartBoundaryNotFoundDefect)) def test_multipart_no_boundary(self): - unless = self.failUnless + unless = self.assertTrue msg = self._msgobj('msg_25.txt') unless(isinstance(msg.get_payload(), str)) self.assertEqual(len(msg.defects), 2) @@ -1509,7 +1509,7 @@ counter to RFC 2822, there's no separating newline here """) def test_lying_multipart(self): - unless = self.failUnless + unless = self.assertTrue msg = self._msgobj('msg_41.txt') unless(hasattr(msg, 'defects')) self.assertEqual(len(msg.defects), 2) @@ -1529,7 +1529,7 @@ counter to RFC 2822, there's no separating newline here # [*] This message is missing its start boundary bad = outer.get_payload(1).get_payload(0) self.assertEqual(len(bad.defects), 1) - self.failUnless(isinstance(bad.defects[0], + self.assertTrue(isinstance(bad.defects[0], errors.StartBoundaryNotFoundDefect)) def test_first_line_is_continuation_header(self): @@ -1539,7 +1539,7 @@ counter to RFC 2822, there's no separating newline here eq(msg.keys(), []) eq(msg.get_payload(), 'Line 2\nLine 3') eq(len(msg.defects), 1) - self.failUnless(isinstance(msg.defects[0], + self.assertTrue(isinstance(msg.defects[0], errors.FirstHeaderLineIsContinuationDefect)) eq(msg.defects[0].line, ' Line 1\n') @@ -1607,7 +1607,7 @@ class TestMIMEMessage(TestEmailBase): def test_valid_argument(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue subject = 'A sub-message' m = Message() m['Subject'] = subject @@ -1651,20 +1651,20 @@ Here is the body of the message. def test_parse_message_rfc822(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue msg = self._msgobj('msg_11.txt') eq(msg.get_content_type(), 'message/rfc822') payload = msg.get_payload() unless(isinstance(payload, list)) eq(len(payload), 1) submsg = payload[0] - self.failUnless(isinstance(submsg, Message)) + self.assertTrue(isinstance(submsg, Message)) eq(submsg['subject'], 'An enclosed message') eq(submsg.get_payload(), 'Here is the body of the message.\n') def test_dsn(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue # msg 16 is a Delivery Status Notification, see RFC 1894 msg = self._msgobj('msg_16.txt') eq(msg.get_content_type(), 'multipart/report') @@ -2002,7 +2002,7 @@ class TestIdempotent(TestEmailBase): def test_content_type(self): eq = self.assertEquals - unless = self.failUnless + unless = self.assertTrue # Get a message object and reset the seek pointer for other tests msg, text = self._msgobj('msg_05.txt') eq(msg.get_content_type(), 'multipart/report') @@ -2024,7 +2024,7 @@ class TestIdempotent(TestEmailBase): eq(msg2.get_payload(), 'Yadda yadda yadda\n') msg3 = msg.get_payload(2) eq(msg3.get_content_type(), 'message/rfc822') - self.failUnless(isinstance(msg3, Message)) + self.assertTrue(isinstance(msg3, Message)) payload = msg3.get_payload() unless(isinstance(payload, list)) eq(len(payload), 1) @@ -2034,7 +2034,7 @@ class TestIdempotent(TestEmailBase): def test_parser(self): eq = self.assertEquals - unless = self.failUnless + unless = self.assertTrue msg, text = self._msgobj('msg_06.txt') # Check some of the outer headers eq(msg.get_content_type(), 'message/rfc822') @@ -2044,9 +2044,9 @@ class TestIdempotent(TestEmailBase): unless(isinstance(payload, list)) eq(len(payload), 1) msg1 = payload[0] - self.failUnless(isinstance(msg1, Message)) + self.assertTrue(isinstance(msg1, Message)) eq(msg1.get_content_type(), 'text/plain') - self.failUnless(isinstance(msg1.get_payload(), str)) + self.assertTrue(isinstance(msg1.get_payload(), str)) eq(msg1.get_payload(), '\n') @@ -2077,7 +2077,7 @@ class TestMiscellaneous(TestEmailBase): self.assertEqual(text, s.getvalue()) def test_message_from_string_with_class(self): - unless = self.failUnless + unless = self.assertTrue with openfile('msg_01.txt') as fp: text = fp.read() @@ -2095,7 +2095,7 @@ class TestMiscellaneous(TestEmailBase): unless(isinstance(subpart, MyMessage)) def test_message_from_file_with_class(self): - unless = self.failUnless + unless = self.assertTrue # Create a subclass class MyMessage(Message): pass @@ -2217,7 +2217,7 @@ Foo def test_charset_richcomparisons(self): eq = self.assertEqual - ne = self.failIfEqual + ne = self.assertNotEqual cset1 = Charset() cset2 = Charset() eq(cset1, 'us-ascii') @@ -2410,8 +2410,8 @@ class TestParsers(TestEmailBase): eq(msg['from'], 'ppp-request@zzz.org') eq(msg['to'], 'ppp@zzz.org') eq(msg.get_content_type(), 'multipart/mixed') - self.failIf(msg.is_multipart()) - self.failUnless(isinstance(msg.get_payload(), str)) + self.assertFalse(msg.is_multipart()) + self.assertTrue(isinstance(msg.get_payload(), str)) def test_whitespace_continuation(self): eq = self.assertEqual @@ -2613,18 +2613,18 @@ class TestQuopri(unittest.TestCase): def test_quopri_header_check(self): for c in self.hlit: - self.failIf(quoprimime.header_check(c), + self.assertFalse(quoprimime.header_check(c), 'Should not be header quopri encoded: %s' % chr(c)) for c in self.hnon: - self.failUnless(quoprimime.header_check(c), + self.assertTrue(quoprimime.header_check(c), 'Should be header quopri encoded: %s' % chr(c)) def test_quopri_body_check(self): for c in self.blit: - self.failIf(quoprimime.body_check(c), + self.assertFalse(quoprimime.body_check(c), 'Should not be body quopri encoded: %s' % chr(c)) for c in self.bnon: - self.failUnless(quoprimime.body_check(c), + self.assertTrue(quoprimime.body_check(c), 'Should be body quopri encoded: %s' % chr(c)) def test_header_quopri_len(self): @@ -2789,7 +2789,7 @@ class TestHeader(TestEmailBase): h = Header("I am the very model of a modern Major-General; I've information vegetable, animal, and mineral; I know the kings of England, and I quote the fights historical from Marathon to Waterloo, in order categorical; I'm very well acquainted, too, with matters mathematical; I understand equations, both the simple and quadratical; about binomial theorem I'm teeming with a lot o' news, with many cheerful facts about the square of the hypotenuse.", maxlinelen=76) for l in h.encode(splitchars=' ').split('\n '): - self.failUnless(len(l) <= 76) + self.assertTrue(len(l) <= 76) def test_multilingual(self): eq = self.ndiffAssertEqual @@ -3166,7 +3166,7 @@ Content-Type: text/html; NAME*0=file____C__DOCUMENTS_20AND_20SETTINGS_FABIEN_LOC ''' msg = email.message_from_string(m) param = msg.get_param('NAME') - self.failIf(isinstance(param, tuple)) + self.assertFalse(isinstance(param, tuple)) self.assertEqual( param, 'file____C__DOCUMENTS_20AND_20SETTINGS_FABIEN_LOCAL_20SETTINGS_TEMP_nsmail.htm') @@ -3319,7 +3319,7 @@ Content-Type: application/x-foo; name*0=\"Frank's\"; name*1=\" Document\" """ msg = email.message_from_string(m) param = msg.get_param('name') - self.failIf(isinstance(param, tuple)) + self.assertFalse(isinstance(param, tuple)) self.assertEqual(param, "Frank's Document") def test_rfc2231_tick_attack_extended(self): @@ -3343,7 +3343,7 @@ Content-Type: application/x-foo; """ msg = email.message_from_string(m) param = msg.get_param('name') - self.failIf(isinstance(param, tuple)) + self.assertFalse(isinstance(param, tuple)) self.assertEqual(param, "us-ascii'en-us'Frank's Document") def test_rfc2231_no_extended_values(self): diff --git a/Lib/importlib/test/builtin/test_finder.py b/Lib/importlib/test/builtin/test_finder.py index ef8e8fe..40f690e 100644 --- a/Lib/importlib/test/builtin/test_finder.py +++ b/Lib/importlib/test/builtin/test_finder.py @@ -14,7 +14,7 @@ class FinderTests(abc.FinderTests): # Common case. with util.uncache(builtin_util.NAME): found = machinery.BuiltinImporter.find_module(builtin_util.NAME) - self.assert_(found) + self.assertTrue(found) def test_package(self): # Built-in modules cannot be a package. @@ -35,14 +35,14 @@ class FinderTests(abc.FinderTests): def test_failure(self): assert 'importlib' not in sys.builtin_module_names loader = machinery.BuiltinImporter.find_module('importlib') - self.assert_(loader is None) + self.assertTrue(loader is None) def test_ignore_path(self): # The value for 'path' should always trigger a failed import. with util.uncache(builtin_util.NAME): loader = machinery.BuiltinImporter.find_module(builtin_util.NAME, ['pkg']) - self.assert_(loader is None) + self.assertTrue(loader is None) diff --git a/Lib/importlib/test/builtin/test_loader.py b/Lib/importlib/test/builtin/test_loader.py index cfedb5d..dff00ce 100644 --- a/Lib/importlib/test/builtin/test_loader.py +++ b/Lib/importlib/test/builtin/test_loader.py @@ -18,10 +18,10 @@ class LoaderTests(abc.LoaderTests): def verify(self, module): """Verify that the module matches against what it should have.""" - self.assert_(isinstance(module, types.ModuleType)) + self.assertTrue(isinstance(module, types.ModuleType)) for attr, value in self.verification.items(): self.assertEqual(getattr(module, attr), value) - self.assert_(module.__name__ in sys.modules) + self.assertTrue(module.__name__ in sys.modules) load_module = staticmethod(lambda name: machinery.BuiltinImporter.load_module(name)) @@ -49,7 +49,7 @@ class LoaderTests(abc.LoaderTests): with util.uncache(builtin_util.NAME): module1 = self.load_module(builtin_util.NAME) module2 = self.load_module(builtin_util.NAME) - self.assert_(module1 is module2) + self.assertTrue(module1 is module2) def test_unloadable(self): name = 'dssdsdfff' @@ -70,17 +70,17 @@ class InspectLoaderTests(unittest.TestCase): def test_get_code(self): # There is no code object. result = machinery.BuiltinImporter.get_code(builtin_util.NAME) - self.assert_(result is None) + self.assertTrue(result is None) def test_get_source(self): # There is no source. result = machinery.BuiltinImporter.get_source(builtin_util.NAME) - self.assert_(result is None) + self.assertTrue(result is None) def test_is_package(self): # Cannot be a package. result = machinery.BuiltinImporter.is_package(builtin_util.NAME) - self.assert_(not result) + self.assertTrue(not result) def test_not_builtin(self): # Modules not built-in should raise ImportError. diff --git a/Lib/importlib/test/extension/test_finder.py b/Lib/importlib/test/extension/test_finder.py index 39e26a7..546a176 100644 --- a/Lib/importlib/test/extension/test_finder.py +++ b/Lib/importlib/test/extension/test_finder.py @@ -13,7 +13,7 @@ class FinderTests(abc.FinderTests): return importer.find_module(fullname) def test_module(self): - self.assert_(self.find_module(util.NAME)) + self.assertTrue(self.find_module(util.NAME)) def test_package(self): # Extension modules cannot be an __init__ for a package. @@ -32,7 +32,7 @@ class FinderTests(abc.FinderTests): pass def test_failure(self): - self.assert_(self.find_module('asdfjkl;') is None) + self.assertTrue(self.find_module('asdfjkl;') is None) # XXX Raise an exception if someone tries to use the 'path' argument? diff --git a/Lib/importlib/test/extension/test_loader.py b/Lib/importlib/test/extension/test_loader.py index 157a3b6..71841c6 100644 --- a/Lib/importlib/test/extension/test_loader.py +++ b/Lib/importlib/test/extension/test_loader.py @@ -23,8 +23,8 @@ class LoaderTests(abc.LoaderTests): ('__file__', ext_util.FILEPATH), ('__package__', '')]: self.assertEqual(getattr(module, attr), value) - self.assert_(ext_util.NAME in sys.modules) - self.assert_(isinstance(module.__loader__, + self.assertTrue(ext_util.NAME in sys.modules) + self.assertTrue(isinstance(module.__loader__, _bootstrap._ExtensionFileLoader)) def test_package(self): @@ -39,7 +39,7 @@ class LoaderTests(abc.LoaderTests): with util.uncache(ext_util.NAME): module1 = self.load_module(ext_util.NAME) module2 = self.load_module(ext_util.NAME) - self.assert_(module1 is module2) + self.assertTrue(module1 is module2) def test_state_after_failure(self): # No easy way to trigger a failure after a successful import. diff --git a/Lib/importlib/test/extension/test_path_hook.py b/Lib/importlib/test/extension/test_path_hook.py index 8532956..bf2f411 100644 --- a/Lib/importlib/test/extension/test_path_hook.py +++ b/Lib/importlib/test/extension/test_path_hook.py @@ -19,7 +19,7 @@ class PathHookTests(unittest.TestCase): def test_success(self): # Path hook should handle a directory where a known extension module # exists. - self.assert_(hasattr(self.hook(util.PATH), 'find_module')) + self.assertTrue(hasattr(self.hook(util.PATH), 'find_module')) def test_main(): diff --git a/Lib/importlib/test/frozen/test_finder.py b/Lib/importlib/test/frozen/test_finder.py index 8caac48..db88379 100644 --- a/Lib/importlib/test/frozen/test_finder.py +++ b/Lib/importlib/test/frozen/test_finder.py @@ -15,15 +15,15 @@ class FinderTests(abc.FinderTests): def test_module(self): name = '__hello__' loader = self.find(name) - self.assert_(hasattr(loader, 'load_module')) + self.assertTrue(hasattr(loader, 'load_module')) def test_package(self): loader = self.find('__phello__') - self.assert_(hasattr(loader, 'load_module')) + self.assertTrue(hasattr(loader, 'load_module')) def test_module_in_package(self): loader = self.find('__phello__.spam', ['__phello__']) - self.assert_(hasattr(loader, 'load_module')) + self.assertTrue(hasattr(loader, 'load_module')) def test_package_in_package(self): # No frozen package within another package to test with. @@ -35,7 +35,7 @@ class FinderTests(abc.FinderTests): def test_failure(self): loader = self.find('') - self.assert_(loader is None) + self.assertTrue(loader is None) def test_main(): diff --git a/Lib/importlib/test/frozen/test_loader.py b/Lib/importlib/test/frozen/test_loader.py index 472d6ec..fa64f30 100644 --- a/Lib/importlib/test/frozen/test_loader.py +++ b/Lib/importlib/test/frozen/test_loader.py @@ -43,7 +43,7 @@ class LoaderTests(abc.LoaderTests): with util.uncache('__hello__'): module1 = machinery.FrozenImporter.load_module('__hello__') module2 = machinery.FrozenImporter.load_module('__hello__') - self.assert_(module1 is module2) + self.assertTrue(module1 is module2) def test_state_after_failure(self): # No way to trigger an error in a frozen module. @@ -65,12 +65,12 @@ class InspectLoaderTests(unittest.TestCase): code = machinery.FrozenImporter.get_code(name) mod = imp.new_module(name) exec(code, mod.__dict__) - self.assert_(hasattr(mod, 'initialized')) + self.assertTrue(hasattr(mod, 'initialized')) def test_get_source(self): # Should always return None. result = machinery.FrozenImporter.get_source('__hello__') - self.assert_(result is None) + self.assertTrue(result is None) def test_is_package(self): # Should be able to tell what is a package. @@ -78,7 +78,7 @@ class InspectLoaderTests(unittest.TestCase): ('__phello__.spam', False)) for name, is_package in test_for: result = machinery.FrozenImporter.is_package(name) - self.assert_(bool(result) == is_package) + self.assertTrue(bool(result) == is_package) def test_failure(self): # Raise ImportError for modules that are not frozen. diff --git a/Lib/importlib/test/import_/test_caching.py b/Lib/importlib/test/import_/test_caching.py index e37c69a..cf65b23 100644 --- a/Lib/importlib/test/import_/test_caching.py +++ b/Lib/importlib/test/import_/test_caching.py @@ -53,8 +53,8 @@ class UseCache(unittest.TestCase): with self.create_mock('pkg.__init__', 'pkg.module') as importer: with util.import_state(meta_path=[importer]): module = import_util.import_('pkg.module') - self.assert_(hasattr(module, 'module')) - self.assert_(id(module.module), id(sys.modules['pkg.module'])) + self.assertTrue(hasattr(module, 'module')) + self.assertTrue(id(module.module), id(sys.modules['pkg.module'])) # See test_using_cache_after_loader() for reasoning. @import_util.importlib_only @@ -63,7 +63,7 @@ class UseCache(unittest.TestCase): with self.create_mock('pkg.__init__', 'pkg.module') as importer: with util.import_state(meta_path=[importer]): module = import_util.import_('pkg', fromlist=['module']) - self.assert_(hasattr(module, 'module')) + self.assertTrue(hasattr(module, 'module')) self.assertEquals(id(module.module), id(sys.modules['pkg.module'])) diff --git a/Lib/importlib/test/import_/test_fromlist.py b/Lib/importlib/test/import_/test_fromlist.py index 266a495..340235b 100644 --- a/Lib/importlib/test/import_/test_fromlist.py +++ b/Lib/importlib/test/import_/test_fromlist.py @@ -59,7 +59,7 @@ class HandlingFromlist(unittest.TestCase): with util.import_state(meta_path=[importer]): module = import_util.import_('module', fromlist=['non_existent']) self.assertEquals(module.__name__, 'module') - self.assert_(not hasattr(module, 'non_existent')) + self.assertTrue(not hasattr(module, 'non_existent')) def test_module_from_package(self): # [module] @@ -67,7 +67,7 @@ class HandlingFromlist(unittest.TestCase): with util.import_state(meta_path=[importer]): module = import_util.import_('pkg', fromlist=['module']) self.assertEquals(module.__name__, 'pkg') - self.assert_(hasattr(module, 'module')) + self.assertTrue(hasattr(module, 'module')) self.assertEquals(module.module.__name__, 'pkg.module') def test_no_module_from_package(self): @@ -76,7 +76,7 @@ class HandlingFromlist(unittest.TestCase): with util.import_state(meta_path=[importer]): module = import_util.import_('pkg', fromlist='non_existent') self.assertEquals(module.__name__, 'pkg') - self.assert_(not hasattr(module, 'non_existent')) + self.assertTrue(not hasattr(module, 'non_existent')) def test_empty_string(self): with util.mock_modules('pkg.__init__', 'pkg.mod') as importer: @@ -91,7 +91,7 @@ class HandlingFromlist(unittest.TestCase): mock['pkg'].__all__ = ['module'] module = import_util.import_('pkg', fromlist=['*']) self.assertEquals(module.__name__, 'pkg') - self.assert_(hasattr(module, 'module')) + self.assertTrue(hasattr(module, 'module')) self.assertEqual(module.module.__name__, 'pkg.module') def test_star_with_others(self): @@ -102,8 +102,8 @@ class HandlingFromlist(unittest.TestCase): mock['pkg'].__all__ = ['module1'] module = import_util.import_('pkg', fromlist=['module2', '*']) self.assertEquals(module.__name__, 'pkg') - self.assert_(hasattr(module, 'module1')) - self.assert_(hasattr(module, 'module2')) + self.assertTrue(hasattr(module, 'module1')) + self.assertTrue(hasattr(module, 'module2')) self.assertEquals(module.module1.__name__, 'pkg.module1') self.assertEquals(module.module2.__name__, 'pkg.module2') diff --git a/Lib/importlib/test/import_/test_meta_path.py b/Lib/importlib/test/import_/test_meta_path.py index 69859b1..5486694 100644 --- a/Lib/importlib/test/import_/test_meta_path.py +++ b/Lib/importlib/test/import_/test_meta_path.py @@ -64,7 +64,7 @@ class CallSignature(unittest.TestCase): self.assertEquals(len(args), 2) self.assertEquals(len(kwargs), 0) self.assertEquals(args[0], mod_name) - self.assert_(args[1] is None) + self.assertTrue(args[1] is None) def test_with_path(self): # [path set] @@ -82,9 +82,9 @@ class CallSignature(unittest.TestCase): args = log[1][0] kwargs = log[1][1] # Assuming all arguments are positional. - self.assert_(not kwargs) + self.assertTrue(not kwargs) self.assertEquals(args[0], mod_name) - self.assert_(args[1] is path) + self.assertTrue(args[1] is path) diff --git a/Lib/importlib/test/import_/test_packages.py b/Lib/importlib/test/import_/test_packages.py index 5912c1f..b41c36f 100644 --- a/Lib/importlib/test/import_/test_packages.py +++ b/Lib/importlib/test/import_/test_packages.py @@ -13,7 +13,7 @@ class ParentModuleTests(unittest.TestCase): with util.mock_modules('pkg.__init__', 'pkg.module') as mock: with util.import_state(meta_path=[mock]): module = import_util.import_('pkg.module') - self.assert_('pkg' in sys.modules) + self.assertTrue('pkg' in sys.modules) def test_bad_parent(self): with util.mock_modules('pkg.module') as mock: diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py index ede9b5f..0e055b1 100644 --- a/Lib/importlib/test/import_/test_path.py +++ b/Lib/importlib/test/import_/test_path.py @@ -19,7 +19,7 @@ class FinderTests(unittest.TestCase): # Test None returned upon not finding a suitable finder. module = '' with util.import_state(): - self.assert_(machinery.PathFinder.find_module(module) is None) + self.assertTrue(machinery.PathFinder.find_module(module) is None) def test_sys_path(self): # Test that sys.path is used when 'path' is None. @@ -30,7 +30,7 @@ class FinderTests(unittest.TestCase): with util.import_state(path_importer_cache={path: importer}, path=[path]): loader = machinery.PathFinder.find_module(module) - self.assert_(loader is importer) + self.assertTrue(loader is importer) def test_path(self): # Test that 'path' is used when set. @@ -40,7 +40,7 @@ class FinderTests(unittest.TestCase): importer = util.mock_modules(module) with util.import_state(path_importer_cache={path: importer}): loader = machinery.PathFinder.find_module(module, [path]) - self.assert_(loader is importer) + self.assertTrue(loader is importer) def test_path_hooks(self): # Test that sys.path_hooks is used. @@ -51,16 +51,16 @@ class FinderTests(unittest.TestCase): hook = import_util.mock_path_hook(path, importer=importer) with util.import_state(path_hooks=[hook]): loader = machinery.PathFinder.find_module(module, [path]) - self.assert_(loader is importer) - self.assert_(path in sys.path_importer_cache) - self.assert_(sys.path_importer_cache[path] is importer) + self.assertTrue(loader is importer) + self.assertTrue(path in sys.path_importer_cache) + self.assertTrue(sys.path_importer_cache[path] is importer) def test_path_importer_cache_has_None(self): # Test that if sys.path_importer_cache has None that None is returned. clear_cache = {path: None for path in sys.path} with util.import_state(path_importer_cache=clear_cache): for name in ('asynchat', 'sys', ''): - self.assert_(machinery.PathFinder.find_module(name) is None) + self.assertTrue(machinery.PathFinder.find_module(name) is None) def test_path_importer_cache_has_None_continues(self): # Test that having None in sys.path_importer_cache causes the search to @@ -71,7 +71,7 @@ class FinderTests(unittest.TestCase): with util.import_state(path=['1', '2'], path_importer_cache={'1': None, '2': importer}): loader = machinery.PathFinder.find_module(module) - self.assert_(loader is importer) + self.assertTrue(loader is importer) @@ -88,15 +88,15 @@ class DefaultPathFinderTests(unittest.TestCase): with util.import_state(): nothing = _bootstrap._DefaultPathFinder.find_module(module, path=[existing_path]) - self.assert_(nothing is None) - self.assert_(existing_path in sys.path_importer_cache) - self.assert_(not isinstance(sys.path_importer_cache[existing_path], + self.assertTrue(nothing is None) + self.assertTrue(existing_path in sys.path_importer_cache) + self.assertTrue(not isinstance(sys.path_importer_cache[existing_path], imp.NullImporter)) nothing = _bootstrap._DefaultPathFinder.find_module(module, path=[bad_path]) - self.assert_(nothing is None) - self.assert_(bad_path in sys.path_importer_cache) - self.assert_(isinstance(sys.path_importer_cache[bad_path], + self.assertTrue(nothing is None) + self.assertTrue(bad_path in sys.path_importer_cache) + self.assertTrue(isinstance(sys.path_importer_cache[bad_path], imp.NullImporter)) def test_path_importer_cache_has_None(self): @@ -113,7 +113,7 @@ class DefaultPathFinderTests(unittest.TestCase): with util.import_state(path_importer_cache={path: None}): loader = _bootstrap._DefaultPathFinder.find_module(module, path=[path]) - self.assert_(loader is importer) + self.assertTrue(loader is importer) finally: _bootstrap._DEFAULT_PATH_HOOK = original_hook diff --git a/Lib/importlib/test/import_/test_relative_imports.py b/Lib/importlib/test/import_/test_relative_imports.py index dca0699..5547d4c 100644 --- a/Lib/importlib/test/import_/test_relative_imports.py +++ b/Lib/importlib/test/import_/test_relative_imports.py @@ -79,7 +79,7 @@ class RelativeImports(unittest.TestCase): import_util.import_('pkg') # For __import__(). module = import_util.import_('', global_, fromlist=['mod2'], level=1) self.assertEqual(module.__name__, 'pkg') - self.assert_(hasattr(module, 'mod2')) + self.assertTrue(hasattr(module, 'mod2')) self.assertEqual(module.mod2.attr, 'pkg.mod2') self.relative_import_test(create, globals_, callback) @@ -105,7 +105,7 @@ class RelativeImports(unittest.TestCase): module = import_util.import_('', global_, fromlist=['module'], level=1) self.assertEqual(module.__name__, 'pkg') - self.assert_(hasattr(module, 'module')) + self.assertTrue(hasattr(module, 'module')) self.assertEqual(module.module.attr, 'pkg.module') self.relative_import_test(create, globals_, callback) @@ -129,7 +129,7 @@ class RelativeImports(unittest.TestCase): module = import_util.import_('', global_, fromlist=['subpkg2'], level=2) self.assertEqual(module.__name__, 'pkg') - self.assert_(hasattr(module, 'subpkg2')) + self.assertTrue(hasattr(module, 'subpkg2')) self.assertEqual(module.subpkg2.attr, 'pkg.subpkg2.__init__') def test_deep_import(self): diff --git a/Lib/importlib/test/source/test_abc_loader.py b/Lib/importlib/test/source/test_abc_loader.py index 9acc4ad..1ce83fb 100644 --- a/Lib/importlib/test/source/test_abc_loader.py +++ b/Lib/importlib/test/source/test_abc_loader.py @@ -133,10 +133,10 @@ class PyLoaderTests(testing_abc.LoaderTests): mock = self.mocker({name: path}) with util.uncache(name): module = mock.load_module(name) - self.assert_(name in sys.modules) + self.assertTrue(name in sys.modules) self.eq_attrs(module, __name__=name, __file__=path, __package__='', __loader__=mock) - self.assert_(not hasattr(module, '__path__')) + self.assertTrue(not hasattr(module, '__path__')) return mock, name def test_package(self): @@ -145,7 +145,7 @@ class PyLoaderTests(testing_abc.LoaderTests): mock = self.mocker({name: path}) with util.uncache(name): module = mock.load_module(name) - self.assert_(name in sys.modules) + self.assertTrue(name in sys.modules) self.eq_attrs(module, __name__=name, __file__=path, __path__=[os.path.dirname(path)], __package__=name, __loader__=mock) @@ -171,8 +171,8 @@ class PyLoaderTests(testing_abc.LoaderTests): with util.uncache(name): sys.modules[name] = module loaded_module = mock.load_module(name) - self.assert_(loaded_module is module) - self.assert_(sys.modules[name] is module) + self.assertTrue(loaded_module is module) + self.assertTrue(sys.modules[name] is module) return mock, name def test_state_after_failure(self): @@ -184,8 +184,8 @@ class PyLoaderTests(testing_abc.LoaderTests): with util.uncache(name): sys.modules[name] = module self.assertRaises(ZeroDivisionError, mock.load_module, name) - self.assert_(sys.modules[name] is module) - self.assert_(hasattr(module, 'blah')) + self.assertTrue(sys.modules[name] is module) + self.assertTrue(hasattr(module, 'blah')) return mock def test_unloadable(self): @@ -194,7 +194,7 @@ class PyLoaderTests(testing_abc.LoaderTests): mock.source = b"1/0" with util.uncache(name): self.assertRaises(ZeroDivisionError, mock.load_module, name) - self.assert_(name not in sys.modules) + self.assertTrue(name not in sys.modules) return mock @@ -293,7 +293,7 @@ class SkipWritingBytecodeTests(unittest.TestCase): sys.dont_write_bytecode = dont_write_bytecode with util.uncache(name): mock.load_module(name) - self.assert_((name in mock.module_bytecode) is not + self.assertTrue((name in mock.module_bytecode) is not dont_write_bytecode) def test_no_bytecode_written(self): @@ -319,7 +319,7 @@ class RegeneratedBytecodeTests(unittest.TestCase): 'magic': bad_magic}}) with util.uncache(name): mock.load_module(name) - self.assert_(name in mock.module_bytecode) + self.assertTrue(name in mock.module_bytecode) magic = mock.module_bytecode[name][:4] self.assertEqual(magic, imp.get_magic()) @@ -332,7 +332,7 @@ class RegeneratedBytecodeTests(unittest.TestCase): {name: {'path': 'path/to/mod.bytecode', 'mtime': old_mtime}}) with util.uncache(name): mock.load_module(name) - self.assert_(name in mock.module_bytecode) + self.assertTrue(name in mock.module_bytecode) mtime = importlib._r_long(mock.module_bytecode[name][4:8]) self.assertEqual(mtime, PyPycLoaderMock.default_mtime) diff --git a/Lib/importlib/test/source/test_file_loader.py b/Lib/importlib/test/source/test_file_loader.py index d01a2a7..0384e7d 100644 --- a/Lib/importlib/test/source/test_file_loader.py +++ b/Lib/importlib/test/source/test_file_loader.py @@ -23,7 +23,7 @@ class SimpleTest(unittest.TestCase): loader = _bootstrap._PyPycFileLoader('_temp', mapping['_temp'], False) module = loader.load_module('_temp') - self.assert_('_temp' in sys.modules) + self.assertTrue('_temp' in sys.modules) check = {'__name__': '_temp', '__file__': mapping['_temp'], '__package__': ''} for attr, value in check.items(): @@ -35,7 +35,7 @@ class SimpleTest(unittest.TestCase): mapping['_pkg.__init__'], True) module = loader.load_module('_pkg') - self.assert_('_pkg' in sys.modules) + self.assertTrue('_pkg' in sys.modules) check = {'__name__': '_pkg', '__file__': mapping['_pkg.__init__'], '__path__': [os.path.dirname(mapping['_pkg.__init__'])], '__package__': '_pkg'} @@ -48,7 +48,7 @@ class SimpleTest(unittest.TestCase): loader = _bootstrap._PyPycFileLoader('_pkg.mod', mapping['_pkg.mod'], False) module = loader.load_module('_pkg.mod') - self.assert_('_pkg.mod' in sys.modules) + self.assertTrue('_pkg.mod' in sys.modules) check = {'__name__': '_pkg.mod', '__file__': mapping['_pkg.mod'], '__package__': '_pkg'} for attr, value in check.items(): @@ -73,7 +73,7 @@ class SimpleTest(unittest.TestCase): # than the original mtime. loader.source_mtime = self.fake_mtime(loader.source_mtime) module = loader.load_module('_temp') - self.assert_('testing_var' in module.__dict__, + self.assertTrue('testing_var' in module.__dict__, "'testing_var' not in " "{0}".format(list(module.__dict__.keys()))) self.assertEqual(module, sys.modules['_temp']) @@ -105,7 +105,7 @@ class SimpleTest(unittest.TestCase): loader = _bootstrap._PyPycFileLoader('_temp', mapping['_temp'], False) self.assertRaises(SyntaxError, loader.load_module, '_temp') - self.assert_('_temp' not in sys.modules) + self.assertTrue('_temp' not in sys.modules) class BadBytecodeTest(unittest.TestCase): @@ -124,7 +124,7 @@ class BadBytecodeTest(unittest.TestCase): def import_(self, file, module_name): loader = _bootstrap._PyPycFileLoader(module_name, file, False) module = loader.load_module(module_name) - self.assert_(module_name in sys.modules) + self.assertTrue(module_name in sys.modules) # [bad magic] @source_util.writes_bytecode_files @@ -168,7 +168,7 @@ class BadBytecodeTest(unittest.TestCase): bytecode_file.write(b'AAAA') self.assertRaises(ValueError, self.import_, mapping['_temp'], '_temp') - self.assert_('_temp' not in sys.modules) + self.assertTrue('_temp' not in sys.modules) def test_main(): diff --git a/Lib/importlib/test/source/test_finder.py b/Lib/importlib/test/source/test_finder.py index dd56429..c495c5a 100644 --- a/Lib/importlib/test/source/test_finder.py +++ b/Lib/importlib/test/source/test_finder.py @@ -53,7 +53,7 @@ class FinderTests(abc.FinderTests): for name in unlink: os.unlink(mapping[name]) loader = self.import_(mapping['.root'], test) - self.assert_(hasattr(loader, 'load_module')) + self.assertTrue(hasattr(loader, 'load_module')) return loader def test_module(self): @@ -79,7 +79,7 @@ class FinderTests(abc.FinderTests): with source_util.create_modules('pkg.__init__', 'pkg.sub') as mapping: pkg_dir = os.path.dirname(mapping['pkg.__init__']) loader = self.import_(pkg_dir, 'pkg.sub') - self.assert_(hasattr(loader, 'load_module')) + self.assertTrue(hasattr(loader, 'load_module')) # [sub package] def test_package_in_package(self): @@ -87,7 +87,7 @@ class FinderTests(abc.FinderTests): with context as mapping: pkg_dir = os.path.dirname(mapping['pkg.__init__']) loader = self.import_(pkg_dir, 'pkg.sub') - self.assert_(hasattr(loader, 'load_module')) + self.assertTrue(hasattr(loader, 'load_module')) # [sub empty] def test_empty_sub_directory(self): @@ -105,13 +105,13 @@ class FinderTests(abc.FinderTests): # XXX This is not a blackbox test! name = '_temp' loader = self.run_test(name, {'{0}.__init__'.format(name), name}) - self.assert_('__init__' in loader._base_path) + self.assertTrue('__init__' in loader._base_path) def test_failure(self): with source_util.create_modules('blah') as mapping: nothing = self.import_(mapping['.root'], 'sdfsadsadf') - self.assert_(nothing is None) + self.assertTrue(nothing is None) # [empty dir] def test_empty_dir(self): diff --git a/Lib/importlib/test/source/test_path_hook.py b/Lib/importlib/test/source/test_path_hook.py index 71ca508..3efb3be 100644 --- a/Lib/importlib/test/source/test_path_hook.py +++ b/Lib/importlib/test/source/test_path_hook.py @@ -10,7 +10,7 @@ class PathHookTest(unittest.TestCase): def test_success(self): # XXX Only work on existing directories? with source_util.create_modules('dummy') as mapping: - self.assert_(hasattr(_bootstrap._FileFinder(mapping['.root']), + self.assertTrue(hasattr(_bootstrap._FileFinder(mapping['.root']), 'find_module')) diff --git a/Lib/importlib/test/test_util.py b/Lib/importlib/test/test_util.py index 706128a..406477d 100644 --- a/Lib/importlib/test/test_util.py +++ b/Lib/importlib/test/test_util.py @@ -29,8 +29,8 @@ class ModuleForLoaderTests(unittest.TestCase): module_name = 'a.b.c' with test_util.uncache(module_name): module = self.return_module(module_name) - self.assert_(module_name in sys.modules) - self.assert_(isinstance(module, types.ModuleType)) + self.assertTrue(module_name in sys.modules) + self.assertTrue(isinstance(module, types.ModuleType)) self.assertEqual(module.__name__, module_name) def test_reload(self): @@ -40,7 +40,7 @@ class ModuleForLoaderTests(unittest.TestCase): with test_util.uncache(name): sys.modules[name] = module returned_module = self.return_module(name) - self.assert_(sys.modules[name] is returned_module) + self.assertTrue(sys.modules[name] is returned_module) def test_new_module_failure(self): # Test that a module is removed from sys.modules if added but an @@ -48,7 +48,7 @@ class ModuleForLoaderTests(unittest.TestCase): name = 'a.b.c' with test_util.uncache(name): self.raise_exception(name) - self.assert_(name not in sys.modules) + self.assertTrue(name not in sys.modules) def test_reload_failure(self): # Test that a failure on reload leaves the module in-place. @@ -57,7 +57,7 @@ class ModuleForLoaderTests(unittest.TestCase): with test_util.uncache(name): sys.modules[name] = module self.raise_exception(name) - self.assert_(sys.modules[name] is module) + self.assertTrue(sys.modules[name] is module) class SetPackageTests(unittest.TestCase): @@ -71,7 +71,7 @@ class SetPackageTests(unittest.TestCase): fxn = lambda: module wrapped = util.set_package(fxn) wrapped() - self.assert_(hasattr(module, '__package__')) + self.assertTrue(hasattr(module, '__package__')) self.assertEqual(expect, module.__package__) def test_top_level(self): diff --git a/Lib/json/tests/test_decode.py b/Lib/json/tests/test_decode.py index 78e7e07..4610c6c 100644 --- a/Lib/json/tests/test_decode.py +++ b/Lib/json/tests/test_decode.py @@ -8,12 +8,12 @@ from collections import OrderedDict class TestDecode(TestCase): def test_decimal(self): rval = json.loads('1.1', parse_float=decimal.Decimal) - self.assert_(isinstance(rval, decimal.Decimal)) + self.assertTrue(isinstance(rval, decimal.Decimal)) self.assertEquals(rval, decimal.Decimal('1.1')) def test_float(self): rval = json.loads('1', parse_int=float) - self.assert_(isinstance(rval, float)) + self.assertTrue(isinstance(rval, float)) self.assertEquals(rval, 1.0) def test_object_pairs_hook(self): diff --git a/Lib/json/tests/test_speedups.py b/Lib/json/tests/test_speedups.py index 8ff9a38..3a84ddf 100644 --- a/Lib/json/tests/test_speedups.py +++ b/Lib/json/tests/test_speedups.py @@ -7,9 +7,9 @@ from json import encoder class TestSpeedups(TestCase): def test_scanstring(self): self.assertEquals(decoder.scanstring.__module__, "_json") - self.assert_(decoder.scanstring is decoder.c_scanstring) + self.assertTrue(decoder.scanstring is decoder.c_scanstring) def test_encode_basestring_ascii(self): self.assertEquals(encoder.encode_basestring_ascii.__module__, "_json") - self.assert_(encoder.encode_basestring_ascii is + self.assertTrue(encoder.encode_basestring_ascii is encoder.c_encode_basestring_ascii) diff --git a/Lib/test/mapping_tests.py b/Lib/test/mapping_tests.py index b8bbc9a..c34bd59 100644 --- a/Lib/test/mapping_tests.py +++ b/Lib/test/mapping_tests.py @@ -50,15 +50,15 @@ class BasicTestMappingProtocol(unittest.TestCase): for key, value in self.reference.items(): self.assertEqual(d[key], value) knownkey = list(self.other.keys())[0] - self.failUnlessRaises(KeyError, lambda:d[knownkey]) + self.assertRaises(KeyError, lambda:d[knownkey]) #len self.assertEqual(len(p), 0) self.assertEqual(len(d), len(self.reference)) #__contains__ for k in self.reference: - self.assert_(k in d) + self.assertTrue(k in d) for k in self.other: - self.failIf(k in d) + self.assertFalse(k in d) #cmp self.assertEqual(p, p) self.assertEqual(d, d) @@ -69,10 +69,10 @@ class BasicTestMappingProtocol(unittest.TestCase): if not d: self.fail("Full mapping must compare to True") # keys(), items(), iterkeys() ... def check_iterandlist(iter, lst, ref): - self.assert_(hasattr(iter, '__next__')) - self.assert_(hasattr(iter, '__iter__')) + self.assertTrue(hasattr(iter, '__next__')) + self.assertTrue(hasattr(iter, '__iter__')) x = list(iter) - self.assert_(set(x)==set(lst)==set(ref)) + self.assertTrue(set(x)==set(lst)==set(ref)) check_iterandlist(iter(d.keys()), list(d.keys()), self.reference.keys()) check_iterandlist(iter(d), list(d.keys()), self.reference.keys()) @@ -85,7 +85,7 @@ class BasicTestMappingProtocol(unittest.TestCase): knownkey, knownvalue = next(iter(self.other.items())) self.assertEqual(d.get(key, knownvalue), value) self.assertEqual(d.get(knownkey, knownvalue), knownvalue) - self.failIf(knownkey in d) + self.assertFalse(knownkey in d) def test_write(self): # Test for write operations on mapping @@ -96,7 +96,7 @@ class BasicTestMappingProtocol(unittest.TestCase): self.assertEqual(p[key], value) for key in self.reference.keys(): del p[key] - self.failUnlessRaises(KeyError, lambda:p[key]) + self.assertRaises(KeyError, lambda:p[key]) p = self._empty_mapping() #update p.update(self.reference) @@ -115,16 +115,16 @@ class BasicTestMappingProtocol(unittest.TestCase): self.assertEqual(d[knownkey], knownvalue) #pop self.assertEqual(d.pop(knownkey), knownvalue) - self.failIf(knownkey in d) + self.assertFalse(knownkey in d) self.assertRaises(KeyError, d.pop, knownkey) default = 909 d[knownkey] = knownvalue self.assertEqual(d.pop(knownkey, default), knownvalue) - self.failIf(knownkey in d) + self.assertFalse(knownkey in d) self.assertEqual(d.pop(knownkey, default), default) #popitem key, value = d.popitem() - self.failIf(key in d) + self.assertFalse(key in d) self.assertEqual(value, self.reference[key]) p=self._empty_mapping() self.assertRaises(KeyError, p.popitem) @@ -133,17 +133,17 @@ class BasicTestMappingProtocol(unittest.TestCase): self.assertEqual(self._empty_mapping(), self._empty_mapping()) def test_bool(self): - self.assert_(not self._empty_mapping()) - self.assert_(self.reference) - self.assert_(bool(self._empty_mapping()) is False) - self.assert_(bool(self.reference) is True) + self.assertTrue(not self._empty_mapping()) + self.assertTrue(self.reference) + self.assertTrue(bool(self._empty_mapping()) is False) + self.assertTrue(bool(self.reference) is True) def test_keys(self): d = self._empty_mapping() self.assertEqual(list(d.keys()), []) d = self.reference - self.assert_(list(self.inmapping.keys())[0] in d.keys()) - self.assert_(list(self.other.keys())[0] not in d.keys()) + self.assertTrue(list(self.inmapping.keys())[0] in d.keys()) + self.assertTrue(list(self.other.keys())[0] not in d.keys()) self.assertRaises(TypeError, d.keys, None) def test_values(self): @@ -268,10 +268,10 @@ class BasicTestMappingProtocol(unittest.TestCase): def test_get(self): d = self._empty_mapping() - self.assert_(d.get(list(self.other.keys())[0]) is None) + self.assertTrue(d.get(list(self.other.keys())[0]) is None) self.assertEqual(d.get(list(self.other.keys())[0], 3), 3) d = self.reference - self.assert_(d.get(list(self.other.keys())[0]) is None) + self.assertTrue(d.get(list(self.other.keys())[0]) is None) self.assertEqual(d.get(list(self.other.keys())[0], 3), 3) self.assertEqual(d.get(list(self.inmapping.keys())[0]), list(self.inmapping.values())[0]) @@ -304,15 +304,15 @@ class BasicTestMappingProtocol(unittest.TestCase): class TestMappingProtocol(BasicTestMappingProtocol): def test_constructor(self): BasicTestMappingProtocol.test_constructor(self) - self.assert_(self._empty_mapping() is not self._empty_mapping()) + self.assertTrue(self._empty_mapping() is not self._empty_mapping()) self.assertEqual(self.type2test(x=1, y=2), {"x": 1, "y": 2}) def test_bool(self): BasicTestMappingProtocol.test_bool(self) - self.assert_(not self._empty_mapping()) - self.assert_(self._full_mapping({"x": "y"})) - self.assert_(bool(self._empty_mapping()) is False) - self.assert_(bool(self._full_mapping({"x": "y"})) is True) + self.assertTrue(not self._empty_mapping()) + self.assertTrue(self._full_mapping({"x": "y"})) + self.assertTrue(bool(self._empty_mapping()) is False) + self.assertTrue(bool(self._full_mapping({"x": "y"})) is True) def test_keys(self): BasicTestMappingProtocol.test_keys(self) @@ -320,9 +320,9 @@ class TestMappingProtocol(BasicTestMappingProtocol): self.assertEqual(list(d.keys()), []) d = self._full_mapping({'a': 1, 'b': 2}) k = d.keys() - self.assert_('a' in k) - self.assert_('b' in k) - self.assert_('c' not in k) + self.assertTrue('a' in k) + self.assertTrue('b' in k) + self.assertTrue('c' not in k) def test_values(self): BasicTestMappingProtocol.test_values(self) @@ -337,12 +337,12 @@ class TestMappingProtocol(BasicTestMappingProtocol): def test_contains(self): d = self._empty_mapping() - self.assert_(not ('a' in d)) - self.assert_('a' not in d) + self.assertTrue(not ('a' in d)) + self.assertTrue('a' not in d) d = self._full_mapping({'a': 1, 'b': 2}) - self.assert_('a' in d) - self.assert_('b' in d) - self.assert_('c' not in d) + self.assertTrue('a' in d) + self.assertTrue('b' in d) + self.assertTrue('c' not in d) self.assertRaises(TypeError, d.__contains__) @@ -421,7 +421,7 @@ class TestMappingProtocol(BasicTestMappingProtocol): def test_fromkeys(self): self.assertEqual(self.type2test.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) d = self._empty_mapping() - self.assert_(not(d.fromkeys('abc') is d)) + self.assertTrue(not(d.fromkeys('abc') is d)) self.assertEqual(d.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) self.assertEqual(d.fromkeys((4,5),0), {4:0, 5:0}) self.assertEqual(d.fromkeys([]), {}) @@ -432,17 +432,17 @@ class TestMappingProtocol(BasicTestMappingProtocol): class dictlike(self.type2test): pass self.assertEqual(dictlike.fromkeys('a'), {'a':None}) self.assertEqual(dictlike().fromkeys('a'), {'a':None}) - self.assert_(dictlike.fromkeys('a').__class__ is dictlike) - self.assert_(dictlike().fromkeys('a').__class__ is dictlike) + self.assertTrue(dictlike.fromkeys('a').__class__ is dictlike) + self.assertTrue(dictlike().fromkeys('a').__class__ is dictlike) # FIXME: the following won't work with UserDict, because it's an old style class - # self.assert_(type(dictlike.fromkeys('a')) is dictlike) + # self.assertTrue(type(dictlike.fromkeys('a')) is dictlike) class mydict(self.type2test): def __new__(cls): return collections.UserDict() ud = mydict.fromkeys('ab') self.assertEqual(ud, {'a':None, 'b':None}) # FIXME: the following won't work with UserDict, because it's an old style class - # self.assert_(isinstance(ud, collections.UserDict)) + # self.assertTrue(isinstance(ud, collections.UserDict)) self.assertRaises(TypeError, dict.fromkeys) class Exc(Exception): pass @@ -472,16 +472,16 @@ class TestMappingProtocol(BasicTestMappingProtocol): self.assertEqual(d.copy(), {1:1, 2:2, 3:3}) d = self._empty_mapping() self.assertEqual(d.copy(), d) - self.assert_(isinstance(d.copy(), d.__class__)) + self.assertTrue(isinstance(d.copy(), d.__class__)) self.assertRaises(TypeError, d.copy, None) def test_get(self): BasicTestMappingProtocol.test_get(self) d = self._empty_mapping() - self.assert_(d.get('c') is None) + self.assertTrue(d.get('c') is None) self.assertEqual(d.get('c', 3), 3) d = self._full_mapping({'a' : 1, 'b' : 2}) - self.assert_(d.get('c') is None) + self.assertTrue(d.get('c') is None) self.assertEqual(d.get('c', 3), 3) self.assertEqual(d.get('a'), 1) self.assertEqual(d.get('a', 3), 1) @@ -489,9 +489,9 @@ class TestMappingProtocol(BasicTestMappingProtocol): def test_setdefault(self): BasicTestMappingProtocol.test_setdefault(self) d = self._empty_mapping() - self.assert_(d.setdefault('key0') is None) + self.assertTrue(d.setdefault('key0') is None) d.setdefault('key0', []) - self.assert_(d.setdefault('key0') is None) + self.assertTrue(d.setdefault('key0') is None) d.setdefault('key', []).append(3) self.assertEqual(d['key'][0], 3) d.setdefault('key', []).append(4) @@ -517,9 +517,9 @@ class TestMappingProtocol(BasicTestMappingProtocol): self.assertEqual(va, int(ka)) kb, vb = tb = b.popitem() self.assertEqual(vb, int(kb)) - self.assert_(not(copymode < 0 and ta != tb)) - self.assert_(not a) - self.assert_(not b) + self.assertTrue(not(copymode < 0 and ta != tb)) + self.assertTrue(not a) + self.assertTrue(not b) def test_pop(self): BasicTestMappingProtocol.test_pop(self) @@ -577,7 +577,7 @@ class TestHashMappingProtocol(TestMappingProtocol): return collections.UserDict() ud = mydict.fromkeys('ab') self.assertEqual(ud, {'a':None, 'b':None}) - self.assert_(isinstance(ud, collections.UserDict)) + self.assertTrue(isinstance(ud, collections.UserDict)) def test_pop(self): TestMappingProtocol.test_pop(self) diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index 3ed26b8..19704ae 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -449,7 +449,7 @@ class AbstractPickleTests(unittest.TestCase): s = self.dumps(l, proto) x = self.loads(s) self.assertEqual(len(x), 1) - self.assert_(x is x[0]) + self.assertTrue(x is x[0]) def test_recursive_tuple(self): t = ([],) @@ -459,7 +459,7 @@ class AbstractPickleTests(unittest.TestCase): x = self.loads(s) self.assertEqual(len(x), 1) self.assertEqual(len(x[0]), 1) - self.assert_(x is x[0][0]) + self.assertTrue(x is x[0][0]) def test_recursive_dict(self): d = {} @@ -468,7 +468,7 @@ class AbstractPickleTests(unittest.TestCase): s = self.dumps(d, proto) x = self.loads(s) self.assertEqual(list(x.keys()), [1]) - self.assert_(x[1] is x) + self.assertTrue(x[1] is x) def test_recursive_inst(self): i = C() @@ -477,7 +477,7 @@ class AbstractPickleTests(unittest.TestCase): s = self.dumps(i, 2) x = self.loads(s) self.assertEqual(dir(x), dir(i)) - self.assert_(x.attr is x) + self.assertTrue(x.attr is x) def test_recursive_multi(self): l = [] @@ -491,7 +491,7 @@ class AbstractPickleTests(unittest.TestCase): self.assertEqual(len(x), 1) self.assertEqual(dir(x[0]), dir(i)) self.assertEqual(list(x[0].attr.keys()), [1]) - self.assert_(x[0].attr[1] is x) + self.assertTrue(x[0].attr[1] is x) def test_get(self): self.assertRaises(KeyError, self.loads, b'g0\np0') @@ -639,7 +639,7 @@ class AbstractPickleTests(unittest.TestCase): try: self.loads(badpickle) except ValueError as detail: - self.failUnless(str(detail).startswith( + self.assertTrue(str(detail).startswith( "unsupported pickle protocol")) else: self.fail("expected bad protocol number to raise ValueError") @@ -720,7 +720,7 @@ class AbstractPickleTests(unittest.TestCase): for x in None, False, True: s = self.dumps(x, proto) y = self.loads(s) - self.assert_(x is y, (proto, x, s, y)) + self.assertTrue(x is y, (proto, x, s, y)) expected = expected_opcode[proto, x] self.assertEqual(opcode_in_pickle(expected, s), True) @@ -770,8 +770,8 @@ class AbstractPickleTests(unittest.TestCase): # Dump using protocol 1 for comparison. s1 = self.dumps(x, 1) - self.assert_(__name__.encode("utf-8") in s1) - self.assert_(b"MyList" in s1) + self.assertTrue(__name__.encode("utf-8") in s1) + self.assertTrue(b"MyList" in s1) self.assertEqual(opcode_in_pickle(opcode, s1), False) y = self.loads(s1) @@ -780,8 +780,8 @@ class AbstractPickleTests(unittest.TestCase): # Dump using protocol 2 for test. s2 = self.dumps(x, 2) - self.assert_(__name__.encode("utf-8") not in s2) - self.assert_(b"MyList" not in s2) + self.assertTrue(__name__.encode("utf-8") not in s2) + self.assertTrue(b"MyList" not in s2) self.assertEqual(opcode_in_pickle(opcode, s2), True, repr(s2)) y = self.loads(s2) @@ -825,7 +825,7 @@ class AbstractPickleTests(unittest.TestCase): if proto == 0: self.assertEqual(num_appends, 0) else: - self.failUnless(num_appends >= 2) + self.assertTrue(num_appends >= 2) def test_dict_chunking(self): n = 10 # too small to chunk @@ -848,7 +848,7 @@ class AbstractPickleTests(unittest.TestCase): if proto == 0: self.assertEqual(num_setitems, 0) else: - self.failUnless(num_setitems >= 2) + self.assertTrue(num_setitems >= 2) def test_simple_newobj(self): x = object.__new__(SimpleNewObj) # avoid __init__ diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py index 4b56749..8ebe568 100644 --- a/Lib/test/test___all__.py +++ b/Lib/test/test___all__.py @@ -17,7 +17,7 @@ class AllTest(unittest.TestCase): # Silent fail here seems the best route since some modules # may not be available in all environments. return - self.failUnless(hasattr(sys.modules[modname], "__all__"), + self.assertTrue(hasattr(sys.modules[modname], "__all__"), "%s has no __all__ attribute" % modname) names = {} exec("from %s import *" % modname, names) diff --git a/Lib/test/test___future__.py b/Lib/test/test___future__.py index 9d98746..f41b879 100644 --- a/Lib/test/test___future__.py +++ b/Lib/test/test___future__.py @@ -15,7 +15,7 @@ class FutureTest(unittest.TestCase): for name in dir(__future__): obj = getattr(__future__, name, None) if obj is not None and isinstance(obj, __future__._Feature): - self.assert_( + self.assertTrue( name in given_feature_names, "%r should have been in all_feature_names" % name ) @@ -30,7 +30,7 @@ class FutureTest(unittest.TestCase): optional = value.getOptionalRelease() mandatory = value.getMandatoryRelease() - a = self.assert_ + a = self.assertTrue e = self.assertEqual def check(t, name): a(isinstance(t, tuple), "%s isn't tuple" % name) diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 4965c42..c3482d6 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -42,23 +42,23 @@ class TestABC(unittest.TestCase): def bar(self): pass # concrete self.assertEqual(C.__abstractmethods__, {"foo"}) self.assertRaises(TypeError, C) # because foo is abstract - self.assert_(isabstract(C)) + self.assertTrue(isabstract(C)) class D(C): def bar(self): pass # concrete override of concrete self.assertEqual(D.__abstractmethods__, {"foo"}) self.assertRaises(TypeError, D) # because foo is still abstract - self.assert_(isabstract(D)) + self.assertTrue(isabstract(D)) class E(D): def foo(self): pass self.assertEqual(E.__abstractmethods__, set()) E() # now foo is concrete, too - self.failIf(isabstract(E)) + self.assertFalse(isabstract(E)) class F(E): @abstractthing def bar(self): pass # abstract override of concrete self.assertEqual(F.__abstractmethods__, {"bar"}) self.assertRaises(TypeError, F) # because bar is abstract now - self.assert_(isabstract(F)) + self.assertTrue(isabstract(F)) def test_subclass_oldstyle_class(self): class A: @@ -142,41 +142,41 @@ class TestABC(unittest.TestCase): def test_registration_transitiveness(self): class A(metaclass=abc.ABCMeta): pass - self.failUnless(issubclass(A, A)) - self.failUnless(issubclass(A, (A,))) + self.assertTrue(issubclass(A, A)) + self.assertTrue(issubclass(A, (A,))) class B(metaclass=abc.ABCMeta): pass - self.failIf(issubclass(A, B)) - self.failIf(issubclass(A, (B,))) - self.failIf(issubclass(B, A)) - self.failIf(issubclass(B, (A,))) + self.assertFalse(issubclass(A, B)) + self.assertFalse(issubclass(A, (B,))) + self.assertFalse(issubclass(B, A)) + self.assertFalse(issubclass(B, (A,))) class C(metaclass=abc.ABCMeta): pass A.register(B) class B1(B): pass - self.failUnless(issubclass(B1, A)) - self.failUnless(issubclass(B1, (A,))) + self.assertTrue(issubclass(B1, A)) + self.assertTrue(issubclass(B1, (A,))) class C1(C): pass B1.register(C1) - self.failIf(issubclass(C, B)) - self.failIf(issubclass(C, (B,))) - self.failIf(issubclass(C, B1)) - self.failIf(issubclass(C, (B1,))) - self.failUnless(issubclass(C1, A)) - self.failUnless(issubclass(C1, (A,))) - self.failUnless(issubclass(C1, B)) - self.failUnless(issubclass(C1, (B,))) - self.failUnless(issubclass(C1, B1)) - self.failUnless(issubclass(C1, (B1,))) + self.assertFalse(issubclass(C, B)) + self.assertFalse(issubclass(C, (B,))) + self.assertFalse(issubclass(C, B1)) + self.assertFalse(issubclass(C, (B1,))) + self.assertTrue(issubclass(C1, A)) + self.assertTrue(issubclass(C1, (A,))) + self.assertTrue(issubclass(C1, B)) + self.assertTrue(issubclass(C1, (B,))) + self.assertTrue(issubclass(C1, B1)) + self.assertTrue(issubclass(C1, (B1,))) C1.register(int) class MyInt(int): pass - self.failUnless(issubclass(MyInt, A)) - self.failUnless(issubclass(MyInt, (A,))) - self.failUnless(isinstance(42, A)) - self.failUnless(isinstance(42, (A,))) + self.assertTrue(issubclass(MyInt, A)) + self.assertTrue(issubclass(MyInt, (A,))) + self.assertTrue(isinstance(42, A)) + self.assertTrue(isinstance(42, (A,))) def test_all_new_methods_are_called(self): class A(metaclass=abc.ABCMeta): diff --git a/Lib/test/test_abstract_numbers.py b/Lib/test/test_abstract_numbers.py index e20f2d4..d0164c0 100644 --- a/Lib/test/test_abstract_numbers.py +++ b/Lib/test/test_abstract_numbers.py @@ -9,8 +9,8 @@ from test import support class TestNumbers(unittest.TestCase): def test_int(self): - self.failUnless(issubclass(int, Integral)) - self.failUnless(issubclass(int, Complex)) + self.assertTrue(issubclass(int, Integral)) + self.assertTrue(issubclass(int, Complex)) self.assertEqual(7, int(7).real) self.assertEqual(0, int(7).imag) @@ -19,16 +19,16 @@ class TestNumbers(unittest.TestCase): self.assertEqual(1, int(7).denominator) def test_float(self): - self.failIf(issubclass(float, Rational)) - self.failUnless(issubclass(float, Real)) + self.assertFalse(issubclass(float, Rational)) + self.assertTrue(issubclass(float, Real)) self.assertEqual(7.3, float(7.3).real) self.assertEqual(0, float(7.3).imag) self.assertEqual(7.3, float(7.3).conjugate()) def test_complex(self): - self.failIf(issubclass(complex, Real)) - self.failUnless(issubclass(complex, Complex)) + self.assertFalse(issubclass(complex, Real)) + self.assertTrue(issubclass(complex, Complex)) c1, c2 = complex(3, 2), complex(4,1) # XXX: This is not ideal, but see the comment in math_trunc(). diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 8e22839..7ae34a9 100755 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -49,7 +49,7 @@ class BaseTest(unittest.TestCase): def test_constructor(self): a = array.array(self.typecode) self.assertEqual(a.typecode, self.typecode) - self.assert_(a.itemsize>=self.minitemsize) + self.assertTrue(a.itemsize>=self.minitemsize) self.assertRaises(TypeError, array.array, self.typecode, None) def test_len(self): @@ -64,10 +64,10 @@ class BaseTest(unittest.TestCase): a = array.array(self.typecode, self.example) self.assertRaises(TypeError, a.buffer_info, 42) bi = a.buffer_info() - self.assert_(isinstance(bi, tuple)) + self.assertTrue(isinstance(bi, tuple)) self.assertEqual(len(bi), 2) - self.assert_(isinstance(bi[0], int)) - self.assert_(isinstance(bi[1], int)) + self.assertTrue(isinstance(bi[0], int)) + self.assertTrue(isinstance(bi[1], int)) self.assertEqual(bi[1], len(a)) def test_byteswap(self): @@ -216,39 +216,39 @@ class BaseTest(unittest.TestCase): def test_cmp(self): a = array.array(self.typecode, self.example) - self.assert_((a == 42) is False) - self.assert_((a != 42) is True) + self.assertTrue((a == 42) is False) + self.assertTrue((a != 42) is True) - self.assert_((a == a) is True) - self.assert_((a != a) is False) - self.assert_((a < a) is False) - self.assert_((a <= a) is True) - self.assert_((a > a) is False) - self.assert_((a >= a) is True) + self.assertTrue((a == a) is True) + self.assertTrue((a != a) is False) + self.assertTrue((a < a) is False) + self.assertTrue((a <= a) is True) + self.assertTrue((a > a) is False) + self.assertTrue((a >= a) is True) al = array.array(self.typecode, self.smallerexample) ab = array.array(self.typecode, self.biggerexample) - self.assert_((a == 2*a) is False) - self.assert_((a != 2*a) is True) - self.assert_((a < 2*a) is True) - self.assert_((a <= 2*a) is True) - self.assert_((a > 2*a) is False) - self.assert_((a >= 2*a) is False) - - self.assert_((a == al) is False) - self.assert_((a != al) is True) - self.assert_((a < al) is False) - self.assert_((a <= al) is False) - self.assert_((a > al) is True) - self.assert_((a >= al) is True) - - self.assert_((a == ab) is False) - self.assert_((a != ab) is True) - self.assert_((a < ab) is True) - self.assert_((a <= ab) is True) - self.assert_((a > ab) is False) - self.assert_((a >= ab) is False) + self.assertTrue((a == 2*a) is False) + self.assertTrue((a != 2*a) is True) + self.assertTrue((a < 2*a) is True) + self.assertTrue((a <= 2*a) is True) + self.assertTrue((a > 2*a) is False) + self.assertTrue((a >= 2*a) is False) + + self.assertTrue((a == al) is False) + self.assertTrue((a != al) is True) + self.assertTrue((a < al) is False) + self.assertTrue((a <= al) is False) + self.assertTrue((a > al) is True) + self.assertTrue((a >= al) is True) + + self.assertTrue((a == ab) is False) + self.assertTrue((a != ab) is True) + self.assertTrue((a < ab) is True) + self.assertTrue((a <= ab) is True) + self.assertTrue((a > ab) is False) + self.assertTrue((a >= ab) is False) def test_add(self): a = array.array(self.typecode, self.example) \ @@ -267,7 +267,7 @@ class BaseTest(unittest.TestCase): a = array.array(self.typecode, self.example[::-1]) b = a a += array.array(self.typecode, 2*self.example) - self.assert_(a is b) + self.assertTrue(a is b) self.assertEqual( a, array.array(self.typecode, self.example[::-1]+2*self.example) @@ -310,22 +310,22 @@ class BaseTest(unittest.TestCase): b = a a *= 5 - self.assert_(a is b) + self.assertTrue(a is b) self.assertEqual( a, array.array(self.typecode, 5*self.example) ) a *= 0 - self.assert_(a is b) + self.assertTrue(a is b) self.assertEqual(a, array.array(self.typecode)) a *= 1000 - self.assert_(a is b) + self.assertTrue(a is b) self.assertEqual(a, array.array(self.typecode)) a *= -1 - self.assert_(a is b) + self.assertTrue(a is b) self.assertEqual(a, array.array(self.typecode)) a = array.array(self.typecode, self.example) diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 54a3b35..c22d0d4 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -116,20 +116,20 @@ eval_tests = [ class AST_Tests(unittest.TestCase): - def _assert_order(self, ast_node, parent_pos): + def _assertTrueorder(self, ast_node, parent_pos): if not isinstance(ast_node, ast.AST) or ast_node._fields is None: return if isinstance(ast_node, (ast.expr, ast.stmt, ast.excepthandler)): node_pos = (ast_node.lineno, ast_node.col_offset) - self.assert_(node_pos >= parent_pos) + self.assertTrue(node_pos >= parent_pos) parent_pos = (ast_node.lineno, ast_node.col_offset) for name in ast_node._fields: value = getattr(ast_node, name) if isinstance(value, list): for child in value: - self._assert_order(child, parent_pos) + self._assertTrueorder(child, parent_pos) elif value is not None: - self._assert_order(value, parent_pos) + self._assertTrueorder(value, parent_pos) def test_snippets(self): for input, output, kind in ((exec_tests, exec_results, "exec"), @@ -138,7 +138,7 @@ class AST_Tests(unittest.TestCase): for i, o in zip(input, output): ast_tree = compile(i, "?", kind, ast.PyCF_ONLY_AST) self.assertEquals(to_tuple(ast_tree), o) - self._assert_order(ast_tree, (0, 0)) + self._assertTrueorder(ast_tree, (0, 0)) def test_nodeclasses(self): x = ast.BinOp(1, 2, 3, lineno=0) diff --git a/Lib/test/test_augassign.py b/Lib/test/test_augassign.py index e03b4d4..8567821 100644 --- a/Lib/test/test_augassign.py +++ b/Lib/test/test_augassign.py @@ -60,7 +60,7 @@ class AugAssignTest(unittest.TestCase): y[1:2] += [1] self.assertEquals(x, [1, 2, 1, 2, 3]) - self.assert_(x is y) + self.assertTrue(x is y) def testCustomMethods1(self): @@ -85,23 +85,23 @@ class AugAssignTest(unittest.TestCase): y = x x += 10 - self.assert_(isinstance(x, aug_test)) - self.assert_(y is not x) + self.assertTrue(isinstance(x, aug_test)) + self.assertTrue(y is not x) self.assertEquals(x.val, 11) x = aug_test2(2) y = x x += 10 - self.assert_(y is x) + self.assertTrue(y is x) self.assertEquals(x.val, 12) x = aug_test3(3) y = x x += 10 - self.assert_(isinstance(x, aug_test3)) - self.assert_(y is not x) + self.assertTrue(isinstance(x, aug_test3)) + self.assertTrue(y is not x) self.assertEquals(x.val, 13) diff --git a/Lib/test/test_base64.py b/Lib/test/test_base64.py index 149ac8a..fadee6d 100644 --- a/Lib/test/test_base64.py +++ b/Lib/test/test_base64.py @@ -204,7 +204,7 @@ class BaseXYTestCase(unittest.TestCase): self.assertRaises(TypeError, base64.b16decode, "") def test_ErrorHeritage(self): - self.assert_(issubclass(binascii.Error, ValueError)) + self.assertTrue(issubclass(binascii.Error, ValueError)) diff --git a/Lib/test/test_bigmem.py b/Lib/test/test_bigmem.py index 091893e..030ada5 100644 --- a/Lib/test/test_bigmem.py +++ b/Lib/test/test_bigmem.py @@ -80,12 +80,12 @@ class BaseStrTest: _ = self.from_latin1 SUBSTR = _(' abc def ghi') s = _('-') * size + SUBSTR - self.failUnless(s.endswith(SUBSTR)) - self.failUnless(s.endswith(s)) + self.assertTrue(s.endswith(SUBSTR)) + self.assertTrue(s.endswith(s)) s2 = _('...') + s - self.failUnless(s2.endswith(s)) - self.failIf(s.endswith(_('a') + SUBSTR)) - self.failIf(SUBSTR.endswith(s)) + self.assertTrue(s2.endswith(s)) + self.assertFalse(s.endswith(_('a') + SUBSTR)) + self.assertFalse(SUBSTR.endswith(s)) @bigmemtest(minsize=_2G + 10, memuse=2) def test_expandtabs(self, size): @@ -139,27 +139,27 @@ class BaseStrTest: _ = self.from_latin1 SUBSTR = _('123456') s = _('a') * size + SUBSTR - self.failUnless(s.isalnum()) + self.assertTrue(s.isalnum()) s += _('.') - self.failIf(s.isalnum()) + self.assertFalse(s.isalnum()) @bigmemtest(minsize=_2G, memuse=2) def test_isalpha(self, size): _ = self.from_latin1 SUBSTR = _('zzzzzzz') s = _('a') * size + SUBSTR - self.failUnless(s.isalpha()) + self.assertTrue(s.isalpha()) s += _('.') - self.failIf(s.isalpha()) + self.assertFalse(s.isalpha()) @bigmemtest(minsize=_2G, memuse=2) def test_isdigit(self, size): _ = self.from_latin1 SUBSTR = _('123456') s = _('9') * size + SUBSTR - self.failUnless(s.isdigit()) + self.assertTrue(s.isdigit()) s += _('z') - self.failIf(s.isdigit()) + self.assertFalse(s.isdigit()) @bigmemtest(minsize=_2G, memuse=2) def test_islower(self, size): @@ -168,9 +168,9 @@ class BaseStrTest: chr(c) for c in range(255) if not chr(c).isupper())) repeats = size // len(chars) + 2 s = chars * repeats - self.failUnless(s.islower()) + self.assertTrue(s.islower()) s += _('A') - self.failIf(s.islower()) + self.assertFalse(s.islower()) @bigmemtest(minsize=_2G, memuse=2) def test_isspace(self, size): @@ -178,20 +178,20 @@ class BaseStrTest: whitespace = _(' \f\n\r\t\v') repeats = size // len(whitespace) + 2 s = whitespace * repeats - self.failUnless(s.isspace()) + self.assertTrue(s.isspace()) s += _('j') - self.failIf(s.isspace()) + self.assertFalse(s.isspace()) @bigmemtest(minsize=_2G, memuse=2) def test_istitle(self, size): _ = self.from_latin1 SUBSTR = _('123456') s = _('').join([_('A'), _('a') * size, SUBSTR]) - self.failUnless(s.istitle()) + self.assertTrue(s.istitle()) s += _('A') - self.failUnless(s.istitle()) + self.assertTrue(s.istitle()) s += _('aA') - self.failIf(s.istitle()) + self.assertFalse(s.istitle()) @bigmemtest(minsize=_2G, memuse=2) def test_isupper(self, size): @@ -200,9 +200,9 @@ class BaseStrTest: chr(c) for c in range(255) if not chr(c).islower())) repeats = size // len(chars) + 2 s = chars * repeats - self.failUnless(s.isupper()) + self.assertTrue(s.isupper()) s += _('a') - self.failIf(s.isupper()) + self.assertFalse(s.isupper()) @bigmemtest(minsize=_2G, memuse=2) def test_join(self, size): @@ -211,15 +211,15 @@ class BaseStrTest: x = s.join([_('aaaaa'), _('bbbbb')]) self.assertEquals(x.count(_('a')), 5) self.assertEquals(x.count(_('b')), 5) - self.failUnless(x.startswith(_('aaaaaA'))) - self.failUnless(x.endswith(_('Abbbbb'))) + self.assertTrue(x.startswith(_('aaaaaA'))) + self.assertTrue(x.endswith(_('Abbbbb'))) @bigmemtest(minsize=_2G + 10, memuse=1) def test_ljust(self, size): _ = self.from_latin1 SUBSTR = _(' abc def ghi') s = SUBSTR.ljust(size) - self.failUnless(s.startswith(SUBSTR + _(' '))) + self.assertTrue(s.startswith(SUBSTR + _(' '))) self.assertEquals(len(s), size) self.assertEquals(s.strip(), SUBSTR.strip()) @@ -244,7 +244,7 @@ class BaseStrTest: # Type-specific optimization if isinstance(s, (str, bytes)): stripped = s.lstrip() - self.failUnless(stripped is s) + self.assertTrue(stripped is s) @bigmemtest(minsize=_2G + 10, memuse=2) def test_replace(self, size): @@ -299,7 +299,7 @@ class BaseStrTest: _ = self.from_latin1 SUBSTR = _(' abc def ghi') s = SUBSTR.ljust(size) - self.failUnless(s.startswith(SUBSTR + _(' '))) + self.assertTrue(s.startswith(SUBSTR + _(' '))) self.assertEquals(len(s), size) self.assertEquals(s.strip(), SUBSTR.strip()) @@ -316,7 +316,7 @@ class BaseStrTest: # Type-specific optimization if isinstance(s, (str, bytes)): stripped = s.rstrip() - self.failUnless(stripped is s) + self.assertTrue(stripped is s) # The test takes about size bytes to build a string, and then about # sqrt(size) substrings of sqrt(size) in size and a list to @@ -378,9 +378,9 @@ class BaseStrTest: _ = self.from_latin1 SUBSTR = _(' abc def ghi') s = _('-') * size + SUBSTR - self.failUnless(s.startswith(s)) - self.failUnless(s.startswith(_('-') * size)) - self.failIf(s.startswith(SUBSTR)) + self.assertTrue(s.startswith(s)) + self.assertTrue(s.startswith(_('-') * size)) + self.assertFalse(s.startswith(SUBSTR)) @bigmemtest(minsize=_2G, memuse=1) def test_strip(self, size): @@ -412,8 +412,8 @@ class BaseStrTest: SUBSTR = _('SpaaHAaaAaham') s = SUBSTR * (size // len(SUBSTR) + 2) s = s.title() - self.failUnless(s.startswith((SUBSTR * 3).title())) - self.failUnless(s.endswith(SUBSTR.lower() * 3)) + self.assertTrue(s.startswith((SUBSTR * 3).title())) + self.assertTrue(s.endswith(SUBSTR.lower() * 3)) @bigmemtest(minsize=_2G, memuse=2) def test_translate(self, size): @@ -451,8 +451,8 @@ class BaseStrTest: _ = self.from_latin1 SUBSTR = _('-568324723598234') s = SUBSTR.zfill(size) - self.failUnless(s.endswith(_('0') + SUBSTR[1:])) - self.failUnless(s.startswith(_('-0'))) + self.assertTrue(s.endswith(_('0') + SUBSTR[1:])) + self.assertTrue(s.startswith(_('-0'))) self.assertEquals(len(s), size) self.assertEquals(s.count(_('0')), size - len(SUBSTR)) @@ -519,12 +519,12 @@ class BaseStrTest: edge = _('-') * (size // 2) s = _('').join([edge, SUBSTR, edge]) del edge - self.failUnless(SUBSTR in s) - self.failIf(SUBSTR * 2 in s) - self.failUnless(_('-') in s) - self.failIf(_('a') in s) + self.assertTrue(SUBSTR in s) + self.assertFalse(SUBSTR * 2 in s) + self.assertTrue(_('-') in s) + self.assertFalse(_('a') in s) s += _('a') - self.failUnless(_('a') in s) + self.assertTrue(_('a') in s) @bigmemtest(minsize=_2G + 10, memuse=2) def test_compare(self, size): @@ -534,10 +534,10 @@ class BaseStrTest: self.assertEqual(s1, s2) del s2 s2 = s1 + _('a') - self.failIf(s1 == s2) + self.assertFalse(s1 == s2) del s2 s2 = _('.') * size - self.failIf(s1 == s2) + self.assertFalse(s1 == s2) @bigmemtest(minsize=_2G + 10, memuse=1) def test_hash(self, size): @@ -552,7 +552,7 @@ class BaseStrTest: h1 = hash(s) del s s = _('\x00') * (size + 1) - self.failIf(h1 == hash(s)) + self.assertFalse(h1 == hash(s)) class StrTest(unittest.TestCase, BaseStrTest): @@ -623,7 +623,7 @@ class StrTest(unittest.TestCase, BaseStrTest): except MemoryError: pass # acceptable on 32-bit else: - self.failUnless(s == eval(r)) + self.assertTrue(s == eval(r)) @bigmemtest(minsize=_2G + 10, memuse=character_size * 2) def test_format(self, size): @@ -633,8 +633,8 @@ class StrTest(unittest.TestCase, BaseStrTest): del sf sf = '..%s..' % (s,) self.assertEquals(len(sf), len(s) + 4) - self.failUnless(sf.startswith('..-')) - self.failUnless(sf.endswith('-..')) + self.assertTrue(sf.startswith('..-')) + self.assertTrue(sf.endswith('-..')) del s, sf size //= 2 @@ -682,8 +682,8 @@ class StrTest(unittest.TestCase, BaseStrTest): s = "\uAAAA" * size for f in (repr, ascii): r = f(s) - self.failUnless(len(r) > size) - self.failUnless(r.endswith(r"\uaaaa'"), r[-10:]) + self.assertTrue(len(r) > size) + self.assertTrue(r.endswith(r"\uaaaa'"), r[-10:]) del r # The character takes 4 bytes even in UCS-2 builds because it will @@ -693,8 +693,8 @@ class StrTest(unittest.TestCase, BaseStrTest): s = "\U0001AAAA" * size for f in (repr, ascii): r = f(s) - self.failUnless(len(r) > size) - self.failUnless(r.endswith(r"\U0001aaaa'"), r[-12:]) + self.assertTrue(len(r) > size) + self.assertTrue(r.endswith(r"\U0001aaaa'"), r[-12:]) del r @@ -740,10 +740,10 @@ class TupleTest(unittest.TestCase): self.assertEqual(t1, t2) del t2 t2 = ('',) * (size + 1) - self.failIf(t1 == t2) + self.assertFalse(t1 == t2) del t2 t2 = (1,) * size - self.failIf(t1 == t2) + self.assertFalse(t1 == t2) # Test concatenating into a single tuple of more than 2G in length, # and concatenating a tuple of more than 2G in length separately, so @@ -768,9 +768,9 @@ class TupleTest(unittest.TestCase): def test_contains(self, size): t = (1, 2, 3, 4, 5) * size self.assertEquals(len(t), size * 5) - self.failUnless(5 in t) - self.failIf((1, 2, 3, 4, 5) in t) - self.failIf(0 in t) + self.assertTrue(5 in t) + self.assertFalse((1, 2, 3, 4, 5) in t) + self.assertFalse(0 in t) @bigmemtest(minsize=_2G + 10, memuse=8) def test_hash(self, size): @@ -778,7 +778,7 @@ class TupleTest(unittest.TestCase): h1 = hash(t1) del t1 t2 = (0,) * (size + 1) - self.failIf(h1 == hash(t2)) + self.assertFalse(h1 == hash(t2)) @bigmemtest(minsize=_2G + 10, memuse=8) def test_index_and_slice(self, size): @@ -874,10 +874,10 @@ class ListTest(unittest.TestCase): self.assertEqual(l1, l2) del l2 l2 = [''] * (size + 1) - self.failIf(l1 == l2) + self.assertFalse(l1 == l2) del l2 l2 = [2] * size - self.failIf(l1 == l2) + self.assertFalse(l1 == l2) # Test concatenating into a single list of more than 2G in length, # and concatenating a list of more than 2G in length separately, so @@ -902,8 +902,8 @@ class ListTest(unittest.TestCase): l = [sys.stdout] * size l += l self.assertEquals(len(l), size * 2) - self.failUnless(l[0] is l[-1]) - self.failUnless(l[size - 1] is l[size + 1]) + self.assertTrue(l[0] is l[-1]) + self.assertTrue(l[size - 1] is l[size + 1]) @bigmemtest(minsize=_2G // 2 + 2, memuse=24) def test_inplace_concat_small(self, size): @@ -917,14 +917,14 @@ class ListTest(unittest.TestCase): def test_contains(self, size): l = [1, 2, 3, 4, 5] * size self.assertEquals(len(l), size * 5) - self.failUnless(5 in l) - self.failIf([1, 2, 3, 4, 5] in l) - self.failIf(0 in l) + self.assertTrue(5 in l) + self.assertFalse([1, 2, 3, 4, 5] in l) + self.assertFalse(0 in l) @bigmemtest(minsize=_2G + 10, memuse=8) def test_hash(self, size): l = [0] * size - self.failUnlessRaises(TypeError, hash, l) + self.assertRaises(TypeError, hash, l) @bigmemtest(minsize=_2G + 10, memuse=8) def test_index_and_slice(self, size): @@ -984,7 +984,7 @@ class ListTest(unittest.TestCase): # Like test_concat, split in two. def basic_test_repeat(self, size): l = [] * size - self.failIf(l) + self.assertFalse(l) l = [''] * size self.assertEquals(len(l), size) l = l * 2 @@ -1002,13 +1002,13 @@ class ListTest(unittest.TestCase): l = [''] l *= size self.assertEquals(len(l), size) - self.failUnless(l[0] is l[-1]) + self.assertTrue(l[0] is l[-1]) del l l = [''] * size l *= 2 self.assertEquals(len(l), size * 2) - self.failUnless(l[size - 1] is l[-1]) + self.assertTrue(l[size - 1] is l[-1]) @bigmemtest(minsize=_2G // 2 + 2, memuse=16) def test_inplace_repeat_small(self, size): @@ -1042,8 +1042,8 @@ class ListTest(unittest.TestCase): l = [object()] * size l.append(object()) self.assertEquals(len(l), size+1) - self.failUnless(l[-3] is l[-2]) - self.failIf(l[-2] is l[-1]) + self.assertTrue(l[-3] is l[-2]) + self.assertFalse(l[-2] is l[-1]) @bigmemtest(minsize=_2G // 5 + 2, memuse=8 * 5) def test_count(self, size): @@ -1055,8 +1055,8 @@ class ListTest(unittest.TestCase): l = [object] * size l.extend(l) self.assertEquals(len(l), size * 2) - self.failUnless(l[0] is l[-1]) - self.failUnless(l[size - 1] is l[size + 1]) + self.assertTrue(l[0] is l[-1]) + self.assertTrue(l[size - 1] is l[size + 1]) @bigmemtest(minsize=_2G // 2 + 2, memuse=16) def test_extend_small(self, size): diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index d4ab6bf..65de81b 100755 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -14,8 +14,8 @@ class BinASCIITest(unittest.TestCase): def test_exceptions(self): # Check module exceptions - self.assert_(issubclass(binascii.Error, Exception)) - self.assert_(issubclass(binascii.Incomplete, Exception)) + self.assertTrue(issubclass(binascii.Error, Exception)) + self.assertTrue(issubclass(binascii.Incomplete, Exception)) def test_functions(self): # Check presence of all functions @@ -26,10 +26,10 @@ class BinASCIITest(unittest.TestCase): prefixes.extend(["crc_", "rlecode_", "rledecode_"]) for prefix in prefixes: name = prefix + suffix - self.assert_(hasattr(getattr(binascii, name), '__call__')) + self.assertTrue(hasattr(getattr(binascii, name), '__call__')) self.assertRaises(TypeError, getattr(binascii, name)) for name in ("hexlify", "unhexlify"): - self.assert_(hasattr(getattr(binascii, name), '__call__')) + self.assertTrue(hasattr(getattr(binascii, name), '__call__')) self.assertRaises(TypeError, getattr(binascii, name)) def test_base64valid(self): diff --git a/Lib/test/test_binop.py b/Lib/test/test_binop.py index 0dc18dd..5d77f23 100644 --- a/Lib/test/test_binop.py +++ b/Lib/test/test_binop.py @@ -210,10 +210,10 @@ class RatTestCase(unittest.TestCase): self.assertEqual(gcd(-10, -2), -2) for i in range(1, 20): for j in range(1, 20): - self.assert_(gcd(i, j) > 0) - self.assert_(gcd(-i, j) < 0) - self.assert_(gcd(i, -j) > 0) - self.assert_(gcd(-i, -j) < 0) + self.assertTrue(gcd(i, j) > 0) + self.assertTrue(gcd(-i, j) < 0) + self.assertTrue(gcd(i, -j) > 0) + self.assertTrue(gcd(-i, -j) < 0) def test_constructor(self): a = Rat(10, 15) diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py index df2f8b1..93b8613 100644 --- a/Lib/test/test_bisect.py +++ b/Lib/test/test_bisect.py @@ -130,14 +130,14 @@ class TestBisect(unittest.TestCase): elem = randrange(-1, n+1) ip = self.module.bisect_left(data, elem) if ip < len(data): - self.failUnless(elem <= data[ip]) + self.assertTrue(elem <= data[ip]) if ip > 0: - self.failUnless(data[ip-1] < elem) + self.assertTrue(data[ip-1] < elem) ip = self.module.bisect_right(data, elem) if ip < len(data): - self.failUnless(elem < data[ip]) + self.assertTrue(elem < data[ip]) if ip > 0: - self.failUnless(data[ip-1] <= elem) + self.assertTrue(data[ip-1] <= elem) def test_optionalSlicing(self): for func, data, elem, expected in self.precomputedCases: @@ -146,15 +146,15 @@ class TestBisect(unittest.TestCase): for hi in range(3,8): hi = min(len(data), hi) ip = func(data, elem, lo, hi) - self.failUnless(lo <= ip <= hi) + self.assertTrue(lo <= ip <= hi) if func is self.module.bisect_left and ip < hi: - self.failUnless(elem <= data[ip]) + self.assertTrue(elem <= data[ip]) if func is self.module.bisect_left and ip > lo: - self.failUnless(data[ip-1] < elem) + self.assertTrue(data[ip-1] < elem) if func is self.module.bisect_right and ip < hi: - self.failUnless(elem < data[ip]) + self.assertTrue(elem < data[ip]) if func is self.module.bisect_right and ip > lo: - self.failUnless(data[ip-1] <= elem) + self.assertTrue(data[ip-1] <= elem) self.assertEqual(ip, max(lo, min(hi, expected))) def test_backcompatibility(self): diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py index 80229aa..3a68dfc 100644 --- a/Lib/test/test_bool.py +++ b/Lib/test/test_bool.py @@ -8,10 +8,10 @@ import os class BoolTest(unittest.TestCase): def assertIs(self, a, b): - self.assert_(a is b) + self.assertTrue(a is b) def assertIsNot(self, a, b): - self.assert_(a is not b) + self.assertTrue(a is not b) def test_subclass(self): try: @@ -221,15 +221,15 @@ class BoolTest(unittest.TestCase): def test_boolean(self): self.assertEqual(True & 1, 1) - self.assert_(not isinstance(True & 1, bool)) + self.assertTrue(not isinstance(True & 1, bool)) self.assertIs(True & True, True) self.assertEqual(True | 1, 1) - self.assert_(not isinstance(True | 1, bool)) + self.assertTrue(not isinstance(True | 1, bool)) self.assertIs(True | True, True) self.assertEqual(True ^ 1, 0) - self.assert_(not isinstance(True ^ 1, bool)) + self.assertTrue(not isinstance(True ^ 1, bool)) self.assertIs(True ^ True, False) def test_fileclosed(self): diff --git a/Lib/test/test_bufio.py b/Lib/test/test_bufio.py index 7d617d3..5ab6f5a 100644 --- a/Lib/test/test_bufio.py +++ b/Lib/test/test_bufio.py @@ -34,7 +34,7 @@ class BufferSizeTest(unittest.TestCase): line = f.readline() self.assertEqual(line, s) line = f.readline() - self.assert_(not line) # Must be at EOF + self.assertTrue(not line) # Must be at EOF f.close() finally: support.unlink(support.TESTFN) diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 28af247..cac4555 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -176,24 +176,24 @@ class BuiltinTest(unittest.TestCase): def test_neg(self): x = -sys.maxsize-1 - self.assert_(isinstance(x, int)) + self.assertTrue(isinstance(x, int)) self.assertEqual(-x, sys.maxsize+1) # XXX(nnorwitz): This test case for callable should probably be removed. def test_callable(self): - self.assert_(hasattr(len, '__call__')) + self.assertTrue(hasattr(len, '__call__')) def f(): pass - self.assert_(hasattr(f, '__call__')) + self.assertTrue(hasattr(f, '__call__')) class C: def meth(self): pass - self.assert_(hasattr(C, '__call__')) + self.assertTrue(hasattr(C, '__call__')) x = C() - self.assert_(hasattr(x.meth, '__call__')) - self.assert_(not hasattr(x, '__call__')) + self.assertTrue(hasattr(x.meth, '__call__')) + self.assertTrue(not hasattr(x, '__call__')) class D(C): def __call__(self): pass y = D() - self.assert_(hasattr(y, '__call__')) + self.assertTrue(hasattr(y, '__call__')) y() def test_chr(self): @@ -220,7 +220,7 @@ class BuiltinTest(unittest.TestCase): self.assertRaises((OverflowError, ValueError), chr, 2**32) def test_cmp(self): - self.assert_(not hasattr(builtins, "cmp")) + self.assertTrue(not hasattr(builtins, "cmp")) def test_compile(self): compile('print(1)\n', '', 'exec') @@ -252,11 +252,11 @@ class BuiltinTest(unittest.TestCase): # dir() - local scope local_var = 1 - self.assert_('local_var' in dir()) + self.assertTrue('local_var' in dir()) # dir(module) import sys - self.assert_('exit' in dir(sys)) + self.assertTrue('exit' in dir(sys)) # dir(module_with_invalid__dict__) import types @@ -266,8 +266,8 @@ class BuiltinTest(unittest.TestCase): self.assertRaises(TypeError, dir, f) # dir(type) - self.assert_("strip" in dir(str)) - self.assert_("__mro__" not in dir(str)) + self.assertTrue("strip" in dir(str)) + self.assertTrue("__mro__" not in dir(str)) # dir(obj) class Foo(object): @@ -276,13 +276,13 @@ class BuiltinTest(unittest.TestCase): self.y = 8 self.z = 9 f = Foo() - self.assert_("y" in dir(f)) + self.assertTrue("y" in dir(f)) # dir(obj_no__dict__) class Foo(object): __slots__ = [] f = Foo() - self.assert_("__repr__" in dir(f)) + self.assertTrue("__repr__" in dir(f)) # dir(obj_no__class__with__dict__) # (an ugly trick to cause getattr(f, "__class__") to fail) @@ -291,15 +291,15 @@ class BuiltinTest(unittest.TestCase): def __init__(self): self.bar = "wow" f = Foo() - self.assert_("__repr__" not in dir(f)) - self.assert_("bar" in dir(f)) + self.assertTrue("__repr__" not in dir(f)) + self.assertTrue("bar" in dir(f)) # dir(obj_using __dir__) class Foo(object): def __dir__(self): return ["kan", "ga", "roo"] f = Foo() - self.assert_(dir(f) == ["ga", "kan", "roo"]) + self.assertTrue(dir(f) == ["ga", "kan", "roo"]) # dir(obj__dir__not_list) class Foo(object): @@ -334,10 +334,10 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0)) - self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25))) - self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75))) - self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75))) - self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25))) + self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25))) + self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75))) + self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75))) + self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25))) self.assertRaises(TypeError, divmod) @@ -489,7 +489,7 @@ class BuiltinTest(unittest.TestCase): def test_getattr(self): import sys - self.assert_(getattr(sys, 'stdout') is sys.stdout) + self.assertTrue(getattr(sys, 'stdout') is sys.stdout) self.assertRaises(TypeError, getattr, sys, 1) self.assertRaises(TypeError, getattr, sys, 1, "foo") self.assertRaises(TypeError, getattr) @@ -497,7 +497,7 @@ class BuiltinTest(unittest.TestCase): def test_hasattr(self): import sys - self.assert_(hasattr(sys, 'stdout')) + self.assertTrue(hasattr(sys, 'stdout')) self.assertRaises(TypeError, hasattr, sys, 1) self.assertRaises(TypeError, hasattr) self.assertEqual(False, hasattr(sys, chr(sys.maxunicode))) @@ -575,11 +575,11 @@ class BuiltinTest(unittest.TestCase): c = C() d = D() e = E() - self.assert_(isinstance(c, C)) - self.assert_(isinstance(d, C)) - self.assert_(not isinstance(e, C)) - self.assert_(not isinstance(c, D)) - self.assert_(not isinstance('foo', E)) + self.assertTrue(isinstance(c, C)) + self.assertTrue(isinstance(d, C)) + self.assertTrue(not isinstance(e, C)) + self.assertTrue(not isinstance(c, D)) + self.assertTrue(not isinstance('foo', E)) self.assertRaises(TypeError, isinstance, E, 'foo') self.assertRaises(TypeError, isinstance) @@ -593,9 +593,9 @@ class BuiltinTest(unittest.TestCase): c = C() d = D() e = E() - self.assert_(issubclass(D, C)) - self.assert_(issubclass(C, C)) - self.assert_(not issubclass(C, D)) + self.assertTrue(issubclass(D, C)) + self.assertTrue(issubclass(C, C)) + self.assertTrue(not issubclass(C, D)) self.assertRaises(TypeError, issubclass, 'foo', E) self.assertRaises(TypeError, issubclass, E, 'foo') self.assertRaises(TypeError, issubclass) @@ -958,18 +958,18 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2]) seq = list(range(a, b, c)) - self.assert_(a in seq) - self.assert_(b not in seq) + self.assertTrue(a in seq) + self.assertTrue(b not in seq) self.assertEqual(len(seq), 2) seq = list(range(b, a, -c)) - self.assert_(b in seq) - self.assert_(a not in seq) + self.assertTrue(b in seq) + self.assertTrue(a not in seq) self.assertEqual(len(seq), 2) seq = list(range(-a, -b, -c)) - self.assert_(-a in seq) - self.assert_(-b not in seq) + self.assertTrue(-a in seq) + self.assertTrue(-b not in seq) self.assertEqual(len(seq), 2) self.assertRaises(TypeError, range) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 992f3d2..caea909 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -102,22 +102,22 @@ class BaseBytesTest(unittest.TestCase): b3 = self.type2test([1, 3]) self.assertEqual(b1, b2) - self.failUnless(b2 != b3) - self.failUnless(b1 <= b2) - self.failUnless(b1 <= b3) - self.failUnless(b1 < b3) - self.failUnless(b1 >= b2) - self.failUnless(b3 >= b2) - self.failUnless(b3 > b2) - - self.failIf(b1 != b2) - self.failIf(b2 == b3) - self.failIf(b1 > b2) - self.failIf(b1 > b3) - self.failIf(b1 >= b3) - self.failIf(b1 < b2) - self.failIf(b3 < b2) - self.failIf(b3 <= b2) + self.assertTrue(b2 != b3) + self.assertTrue(b1 <= b2) + self.assertTrue(b1 <= b3) + self.assertTrue(b1 < b3) + self.assertTrue(b1 >= b2) + self.assertTrue(b3 >= b2) + self.assertTrue(b3 > b2) + + self.assertFalse(b1 != b2) + self.assertFalse(b2 == b3) + self.assertFalse(b1 > b2) + self.assertFalse(b1 > b3) + self.assertFalse(b1 >= b3) + self.assertFalse(b1 < b2) + self.assertFalse(b3 < b2) + self.assertFalse(b3 <= b2) def test_compare_to_str(self): warnings.simplefilter('ignore', BytesWarning) @@ -220,27 +220,27 @@ class BaseBytesTest(unittest.TestCase): def test_contains(self): b = self.type2test(b"abc") - self.failUnless(ord('a') in b) - self.failUnless(int(ord('a')) in b) - self.failIf(200 in b) - self.failIf(200 in b) + self.assertTrue(ord('a') in b) + self.assertTrue(int(ord('a')) in b) + self.assertFalse(200 in b) + self.assertFalse(200 in b) self.assertRaises(ValueError, lambda: 300 in b) self.assertRaises(ValueError, lambda: -1 in b) self.assertRaises(TypeError, lambda: None in b) self.assertRaises(TypeError, lambda: float(ord('a')) in b) self.assertRaises(TypeError, lambda: "a" in b) for f in bytes, bytearray: - self.failUnless(f(b"") in b) - self.failUnless(f(b"a") in b) - self.failUnless(f(b"b") in b) - self.failUnless(f(b"c") in b) - self.failUnless(f(b"ab") in b) - self.failUnless(f(b"bc") in b) - self.failUnless(f(b"abc") in b) - self.failIf(f(b"ac") in b) - self.failIf(f(b"d") in b) - self.failIf(f(b"dab") in b) - self.failIf(f(b"abd") in b) + self.assertTrue(f(b"") in b) + self.assertTrue(f(b"a") in b) + self.assertTrue(f(b"b") in b) + self.assertTrue(f(b"c") in b) + self.assertTrue(f(b"ab") in b) + self.assertTrue(f(b"bc") in b) + self.assertTrue(f(b"abc") in b) + self.assertFalse(f(b"ac") in b) + self.assertFalse(f(b"d") in b) + self.assertFalse(f(b"dab") in b) + self.assertFalse(f(b"abd") in b) def test_fromhex(self): self.assertRaises(TypeError, self.type2test.fromhex) @@ -626,7 +626,7 @@ class ByteArrayTest(BaseBytesTest): b += b"def" self.assertEqual(b, b"abcdef") self.assertEqual(b, b1) - self.failUnless(b is b1) + self.assertTrue(b is b1) b += b"xyz" self.assertEqual(b, b"abcdefxyz") try: @@ -642,7 +642,7 @@ class ByteArrayTest(BaseBytesTest): b *= 3 self.assertEqual(b, b"abcabcabc") self.assertEqual(b, b1) - self.failUnless(b is b1) + self.assertTrue(b is b1) def test_irepeat_1char(self): b = bytearray(b"x") @@ -650,17 +650,17 @@ class ByteArrayTest(BaseBytesTest): b *= 100 self.assertEqual(b, b"x"*100) self.assertEqual(b, b1) - self.failUnless(b is b1) + self.assertTrue(b is b1) def test_alloc(self): b = bytearray() alloc = b.__alloc__() - self.assert_(alloc >= 0) + self.assertTrue(alloc >= 0) seq = [alloc] for i in range(100): b += b"x" alloc = b.__alloc__() - self.assert_(alloc >= len(b)) + self.assertTrue(alloc >= len(b)) if alloc not in seq: seq.append(alloc) @@ -759,7 +759,7 @@ class ByteArrayTest(BaseBytesTest): a, b, c = bytearray(b"x").partition(b"y") self.assertEqual(b, b"") self.assertEqual(c, b"") - self.assert_(b is not c) + self.assertTrue(b is not c) b += b"!" self.assertEqual(c, b"") a, b, c = bytearray(b"x").partition(b"y") @@ -769,7 +769,7 @@ class ByteArrayTest(BaseBytesTest): b, c, a = bytearray(b"x").rpartition(b"y") self.assertEqual(b, b"") self.assertEqual(c, b"") - self.assert_(b is not c) + self.assertTrue(b is not c) b += b"!" self.assertEqual(c, b"") c, b, a = bytearray(b"x").rpartition(b"y") @@ -860,10 +860,10 @@ class AssortedBytesTest(unittest.TestCase): self.assertEqual(bytes(b"abc") <= b"ab", False) def test_doc(self): - self.failUnless(bytearray.__doc__ != None) - self.failUnless(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) - self.failUnless(bytes.__doc__ != None) - self.failUnless(bytes.__doc__.startswith("bytes("), bytes.__doc__) + self.assertTrue(bytearray.__doc__ != None) + self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) + self.assertTrue(bytes.__doc__ != None) + self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) def test_from_bytearray(self): sample = bytes(b"Hello world\n\x80\x81\xfe\xff") @@ -920,7 +920,7 @@ class AssortedBytesTest(unittest.TestCase): def test_return_self(self): # bytearray.replace must always return a new bytearray b = bytearray() - self.failIf(b.replace(b'', b'') is b) + self.assertFalse(b.replace(b'', b'') is b) def test_compare(self): if sys.flags.bytes_warning: @@ -997,20 +997,20 @@ class ByteArraySubclass(bytearray): class ByteArraySubclassTest(unittest.TestCase): def test_basic(self): - self.assert_(issubclass(ByteArraySubclass, bytearray)) - self.assert_(isinstance(ByteArraySubclass(), bytearray)) + self.assertTrue(issubclass(ByteArraySubclass, bytearray)) + self.assertTrue(isinstance(ByteArraySubclass(), bytearray)) a, b = b"abcd", b"efgh" _a, _b = ByteArraySubclass(a), ByteArraySubclass(b) # test comparison operators with subclass instances - self.assert_(_a == _a) - self.assert_(_a != _b) - self.assert_(_a < _b) - self.assert_(_a <= _b) - self.assert_(_b >= _a) - self.assert_(_b > _a) - self.assert_(_a is not a) + self.assertTrue(_a == _a) + self.assertTrue(_a != _b) + self.assertTrue(_a < _b) + self.assertTrue(_a <= _b) + self.assertTrue(_b >= _a) + self.assertTrue(_b > _a) + self.assertTrue(_a is not a) # test concat of subclass instances self.assertEqual(a + b, _a + _b) @@ -1018,7 +1018,7 @@ class ByteArraySubclassTest(unittest.TestCase): self.assertEqual(a + b, _a + b) # test repeat - self.assert_(a*5 == _a*5) + self.assertTrue(a*5 == _a*5) def test_join(self): # Make sure join returns a NEW object for single item sequences @@ -1026,12 +1026,12 @@ class ByteArraySubclassTest(unittest.TestCase): # Make sure that it is of the appropriate type. s1 = ByteArraySubclass(b"abcd") s2 = bytearray().join([s1]) - self.assert_(s1 is not s2) - self.assert_(type(s2) is bytearray, type(s2)) + self.assertTrue(s1 is not s2) + self.assertTrue(type(s2) is bytearray, type(s2)) # Test reverse, calling join on subclass s3 = s1.join([b"abcd"]) - self.assert_(type(s3) is bytearray) + self.assertTrue(type(s3) is bytearray) def test_pickle(self): a = ByteArraySubclass(b"abcd") diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py index d3d2226..0460679 100644 --- a/Lib/test/test_capi.py +++ b/Lib/test/test_capi.py @@ -24,7 +24,7 @@ class CAPITest(unittest.TestCase): def test_instancemethod(self): inst = InstanceMethod() self.assertEqual(id(inst), inst.id()) - self.assert_(inst.testfunction() is inst) + self.assertTrue(inst.testfunction() is inst) self.assertEqual(inst.testfunction.__doc__, testfunction.__doc__) self.assertEqual(InstanceMethod.testfunction.__doc__, testfunction.__doc__) @@ -64,7 +64,7 @@ class TestPendingCalls(unittest.TestCase): if context and not context.event.is_set(): continue count += 1 - self.failUnless(count < 10000, + self.assertTrue(count < 10000, "timeout waiting for %i callbacks, got %i"%(n, len(l))) if False and support.verbose: print("(%i)"%(len(l),)) diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py index 12fd00c..a3d2640 100644 --- a/Lib/test/test_cfgparser.py +++ b/Lib/test/test_cfgparser.py @@ -76,16 +76,16 @@ class TestCaseBase(unittest.TestCase): eq(cf.get('Spaces', 'key with spaces'), 'value') eq(cf.get('Spaces', 'another with spaces'), 'splat!') - self.failIf('__name__' in cf.options("Foo Bar"), + self.assertFalse('__name__' in cf.options("Foo Bar"), '__name__ "option" should not be exposed by the API!') # Make sure the right things happen for remove_option(); # added to include check for SourceForge bug #123324: - self.failUnless(cf.remove_option('Foo Bar', 'foo'), + self.assertTrue(cf.remove_option('Foo Bar', 'foo'), "remove_option() failed to report existence of option") - self.failIf(cf.has_option('Foo Bar', 'foo'), + self.assertFalse(cf.has_option('Foo Bar', 'foo'), "remove_option() failed to remove option") - self.failIf(cf.remove_option('Foo Bar', 'foo'), + self.assertFalse(cf.remove_option('Foo Bar', 'foo'), "remove_option() failed to report non-existence of option" " that was removed") @@ -107,10 +107,10 @@ class TestCaseBase(unittest.TestCase): eq(cf.options("a"), ["b"]) eq(cf.get("a", "b"), "value", "could not locate option, expecting case-insensitive option names") - self.failUnless(cf.has_option("a", "b")) + self.assertTrue(cf.has_option("a", "b")) cf.set("A", "A-B", "A-B value") for opt in ("a-b", "A-b", "a-B", "A-B"): - self.failUnless( + self.assertTrue( cf.has_option("A", opt), "has_option() returned false for option which should exist") eq(cf.options("A"), ["a-b"]) @@ -127,7 +127,7 @@ class TestCaseBase(unittest.TestCase): # SF bug #561822: cf = self.fromstring("[section]\nnekey=nevalue\n", defaults={"key":"value"}) - self.failUnless(cf.has_option("section", "Key")) + self.assertTrue(cf.has_option("section", "Key")) def test_default_case_sensitivity(self): @@ -163,7 +163,7 @@ class TestCaseBase(unittest.TestCase): cf = self.newconfig() self.assertEqual(cf.sections(), [], "new ConfigParser should have no defined sections") - self.failIf(cf.has_section("Foo"), + self.assertFalse(cf.has_section("Foo"), "new ConfigParser should have no acknowledged sections") self.assertRaises(configparser.NoSectionError, cf.options, "Foo") @@ -202,8 +202,8 @@ class TestCaseBase(unittest.TestCase): "E5=FALSE AND MORE" ) for x in range(1, 5): - self.failUnless(cf.getboolean('BOOLTEST', 't%d' % x)) - self.failIf(cf.getboolean('BOOLTEST', 'f%d' % x)) + self.assertTrue(cf.getboolean('BOOLTEST', 't%d' % x)) + self.assertFalse(cf.getboolean('BOOLTEST', 'f%d' % x)) self.assertRaises(ValueError, cf.getboolean, 'BOOLTEST', 'e%d' % x) diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py index 87028b5..ef7dfa5 100644 --- a/Lib/test/test_cgi.py +++ b/Lib/test/test_cgi.py @@ -143,7 +143,7 @@ class CgiTests(unittest.TestCase): # test individual fields for key in expect.keys(): expect_val = expect[key] - self.assert_(key in fs) + self.assertTrue(key in fs) if len(expect_val) > 1: self.assertEqual(fs.getvalue(key), expect_val) else: @@ -194,7 +194,7 @@ class CgiTests(unittest.TestCase): # if we're not chunking properly, readline is only called twice # (by read_binary); if we are chunking properly, it will be called 5 times # as long as the chunksize is 1 << 16. - self.assert_(f.numcalls > 2) + self.assertTrue(f.numcalls > 2) def test_fieldstorage_multipart(self): #Test basic FieldStorage multipart parsing diff --git a/Lib/test/test_cmath.py b/Lib/test/test_cmath.py index 17cb566..2d2deff 100755 --- a/Lib/test/test_cmath.py +++ b/Lib/test/test_cmath.py @@ -412,7 +412,7 @@ class CMathTests(unittest.TestCase): # real or imaginary part NaN for z in complex_nans: - self.assert_(math.isnan(phase(z))) + self.assertTrue(math.isnan(phase(z))) def test_abs(self): # zeros @@ -425,18 +425,18 @@ class CMathTests(unittest.TestCase): # real or imaginary part NaN self.assertEqual(abs(complex(NAN, -INF)), INF) - self.assert_(math.isnan(abs(complex(NAN, -2.3)))) - self.assert_(math.isnan(abs(complex(NAN, -0.0)))) - self.assert_(math.isnan(abs(complex(NAN, 0.0)))) - self.assert_(math.isnan(abs(complex(NAN, 2.3)))) + self.assertTrue(math.isnan(abs(complex(NAN, -2.3)))) + self.assertTrue(math.isnan(abs(complex(NAN, -0.0)))) + self.assertTrue(math.isnan(abs(complex(NAN, 0.0)))) + self.assertTrue(math.isnan(abs(complex(NAN, 2.3)))) self.assertEqual(abs(complex(NAN, INF)), INF) self.assertEqual(abs(complex(-INF, NAN)), INF) - self.assert_(math.isnan(abs(complex(-2.3, NAN)))) - self.assert_(math.isnan(abs(complex(-0.0, NAN)))) - self.assert_(math.isnan(abs(complex(0.0, NAN)))) - self.assert_(math.isnan(abs(complex(2.3, NAN)))) + self.assertTrue(math.isnan(abs(complex(-2.3, NAN)))) + self.assertTrue(math.isnan(abs(complex(-0.0, NAN)))) + self.assertTrue(math.isnan(abs(complex(0.0, NAN)))) + self.assertTrue(math.isnan(abs(complex(2.3, NAN)))) self.assertEqual(abs(complex(INF, NAN)), INF) - self.assert_(math.isnan(abs(complex(NAN, NAN)))) + self.assertTrue(math.isnan(abs(complex(NAN, NAN)))) # result overflows if float.__getformat__("double").startswith("IEEE"): @@ -455,26 +455,26 @@ class CMathTests(unittest.TestCase): self.assertCEqual(rect(1, -pi/2), (0, -1.)) def test_isnan(self): - self.failIf(cmath.isnan(1)) - self.failIf(cmath.isnan(1j)) - self.failIf(cmath.isnan(INF)) - self.assert_(cmath.isnan(NAN)) - self.assert_(cmath.isnan(complex(NAN, 0))) - self.assert_(cmath.isnan(complex(0, NAN))) - self.assert_(cmath.isnan(complex(NAN, NAN))) - self.assert_(cmath.isnan(complex(NAN, INF))) - self.assert_(cmath.isnan(complex(INF, NAN))) + self.assertFalse(cmath.isnan(1)) + self.assertFalse(cmath.isnan(1j)) + self.assertFalse(cmath.isnan(INF)) + self.assertTrue(cmath.isnan(NAN)) + self.assertTrue(cmath.isnan(complex(NAN, 0))) + self.assertTrue(cmath.isnan(complex(0, NAN))) + self.assertTrue(cmath.isnan(complex(NAN, NAN))) + self.assertTrue(cmath.isnan(complex(NAN, INF))) + self.assertTrue(cmath.isnan(complex(INF, NAN))) def test_isinf(self): - self.failIf(cmath.isinf(1)) - self.failIf(cmath.isinf(1j)) - self.failIf(cmath.isinf(NAN)) - self.assert_(cmath.isinf(INF)) - self.assert_(cmath.isinf(complex(INF, 0))) - self.assert_(cmath.isinf(complex(0, INF))) - self.assert_(cmath.isinf(complex(INF, INF))) - self.assert_(cmath.isinf(complex(NAN, INF))) - self.assert_(cmath.isinf(complex(INF, NAN))) + self.assertFalse(cmath.isinf(1)) + self.assertFalse(cmath.isinf(1j)) + self.assertFalse(cmath.isinf(NAN)) + self.assertTrue(cmath.isinf(INF)) + self.assertTrue(cmath.isinf(complex(INF, 0))) + self.assertTrue(cmath.isinf(complex(0, INF))) + self.assertTrue(cmath.isinf(complex(INF, INF))) + self.assertTrue(cmath.isinf(complex(NAN, INF))) + self.assertTrue(cmath.isinf(complex(INF, NAN))) def test_main(): diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index ef3c109..87ae2b6 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -169,7 +169,7 @@ class CmdLineTest(unittest.TestCase): p.stdin.flush() data, rc = _kill_python_and_exit_code(p) self.assertEqual(rc, 0) - self.assert_(data.startswith(b'x'), data) + self.assertTrue(data.startswith(b'x'), data) def test_large_PYTHONPATH(self): with test.support.EnvironmentVarGuard() as env: @@ -178,8 +178,8 @@ class CmdLineTest(unittest.TestCase): env['PYTHONPATH'] = path1 + os.pathsep + path2 p = _spawn_python('-S', '-c', 'import sys; print(sys.path)') stdout, _ = p.communicate() - self.assert_(path1.encode('ascii') in stdout) - self.assert_(path2.encode('ascii') in stdout) + self.assertTrue(path1.encode('ascii') in stdout) + self.assertTrue(path2.encode('ascii') in stdout) def test_main(): diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index e060ec1..7114681 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -154,9 +154,9 @@ class CmdLineTest(unittest.TestCase): print(printed_file) print(printed_package) print(printed_argv0) - self.assert_(printed_file in data) - self.assert_(printed_package in data) - self.assert_(printed_argv0 in data) + self.assertTrue(printed_file in data) + self.assertTrue(printed_package in data) + self.assertTrue(printed_argv0 in data) def _check_import_error(self, script_name, expected_msg, *cmd_line_switches): @@ -166,7 +166,7 @@ class CmdLineTest(unittest.TestCase): print('Output from test script %r:' % script_name) print(data) print('Expected output: %r' % expected_msg) - self.assert_(expected_msg in data) + self.assertTrue(expected_msg in data) def test_basic_script(self): with temp_dir() as script_dir: diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index e060471..9f73453 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -29,14 +29,14 @@ class MixInCheckStateHandling: d = codecs.getincrementaldecoder(encoding)() part1 = d.decode(s[:i]) state = d.getstate() - self.assert_(isinstance(state[1], int)) + self.assertTrue(isinstance(state[1], int)) # Check that the condition stated in the documentation for # IncrementalDecoder.getstate() holds if not state[1]: # reset decoder to the default state without anything buffered d.setstate((state[0][:0], 0)) # Feeding the previous input may not produce any output - self.assert_(not d.decode(state[0])) + self.assertTrue(not d.decode(state[0])) # The decoder must return to the same state self.assertEqual(state, d.getstate()) # Create a new decoder and set it to the state @@ -296,7 +296,7 @@ class UTF32Test(ReadTest): f.write("spam") d = s.getvalue() # check whether there is exactly one BOM in it - self.assert_(d == self.spamle or d == self.spambe) + self.assertTrue(d == self.spamle or d == self.spambe) # try to read it back s = io.BytesIO(d) f = reader(s) @@ -429,7 +429,7 @@ class UTF16Test(ReadTest): f.write("spam") d = s.getvalue() # check whether there is exactly one BOM in it - self.assert_(d == self.spamle or d == self.spambe) + self.assertTrue(d == self.spamle or d == self.spambe) # try to read it back s = io.BytesIO(d) f = reader(s) @@ -1335,7 +1335,7 @@ class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling): for c in s: writer.write(c) chunk = q.read() - self.assert_(type(chunk) is bytes, type(chunk)) + self.assertTrue(type(chunk) is bytes, type(chunk)) encodedresult += chunk q = Queue(b"") reader = codecs.getreader(encoding)(q) diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py index 134c3ae..ad44121 100644 --- a/Lib/test/test_codeop.py +++ b/Lib/test/test_codeop.py @@ -23,7 +23,7 @@ class CodeopTests(unittest.TestCase): '''succeed iff str is a valid piece of code''' if is_jython: code = compile_command(str, "", symbol) - self.assert_(code) + self.assertTrue(code) if symbol == "single": d,r = {},{} saved_stdout = sys.stdout @@ -52,9 +52,9 @@ class CodeopTests(unittest.TestCase): compile_command(str,symbol=symbol) self.fail("No exception thrown for invalid code") except SyntaxError: - self.assert_(is_syntax) + self.assertTrue(is_syntax) except OverflowError: - self.assert_(not is_syntax) + self.assertTrue(not is_syntax) def test_valid(self): av = self.assertValid diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 8387564..ded8b70 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -44,9 +44,9 @@ class TestNamedTuple(unittest.TestCase): namedtuple('_', 'a b c') # Test leading underscores in a typename nt = namedtuple('nt', 'the quick brown fox') # check unicode input - self.assert_("u'" not in repr(nt._fields)) + self.assertTrue("u'" not in repr(nt._fields)) nt = namedtuple('nt', ('the', 'quick')) # check unicode input - self.assert_("u'" not in repr(nt._fields)) + self.assertTrue("u'" not in repr(nt._fields)) self.assertRaises(TypeError, Point._make, [11]) # catch too few args self.assertRaises(TypeError, Point._make, [11, 22, 33]) # catch too many args @@ -75,8 +75,8 @@ class TestNamedTuple(unittest.TestCase): self.assertRaises(TypeError, eval, 'Point(XXX=1, y=2)', locals()) # wrong keyword argument self.assertRaises(TypeError, eval, 'Point(x=1)', locals()) # missing keyword argument self.assertEqual(repr(p), 'Point(x=11, y=22)') - self.assert_('__dict__' not in dir(p)) # verify instance has no dict - self.assert_('__weakref__' not in dir(p)) + self.assertTrue('__dict__' not in dir(p)) # verify instance has no dict + self.assertTrue('__weakref__' not in dir(p)) self.assertEqual(p, Point._make([11, 22])) # test _make classmethod self.assertEqual(p._fields, ('x', 'y')) # test _fields attribute self.assertEqual(p._replace(x=1), (1, 22)) # test _replace method @@ -103,7 +103,7 @@ class TestNamedTuple(unittest.TestCase): Point = namedtuple('Point', 'x y') p = Point(11, 22) - self.assert_(isinstance(p, tuple)) + self.assertTrue(isinstance(p, tuple)) self.assertEqual(p, (11, 22)) # matches a real tuple self.assertEqual(tuple(p), (11, 22)) # coercable to a real tuple self.assertEqual(list(p), [11, 22]) # coercable to a list @@ -236,8 +236,8 @@ class TestOneTrickPonyABCs(ABCTestCase): # Check some non-hashables non_samples = [bytearray(), list(), set(), dict()] for x in non_samples: - self.failIf(isinstance(x, Hashable), repr(x)) - self.failIf(issubclass(type(x), Hashable), repr(type(x))) + self.assertFalse(isinstance(x, Hashable), repr(x)) + self.assertFalse(issubclass(type(x), Hashable), repr(type(x))) # Check some hashables samples = [None, int(), float(), complex(), @@ -246,23 +246,23 @@ class TestOneTrickPonyABCs(ABCTestCase): int, list, object, type, bytes() ] for x in samples: - self.failUnless(isinstance(x, Hashable), repr(x)) - self.failUnless(issubclass(type(x), Hashable), repr(type(x))) + self.assertTrue(isinstance(x, Hashable), repr(x)) + self.assertTrue(issubclass(type(x), Hashable), repr(type(x))) self.assertRaises(TypeError, Hashable) # Check direct subclassing class H(Hashable): def __hash__(self): return super().__hash__() self.assertEqual(hash(H()), 0) - self.failIf(issubclass(int, H)) + self.assertFalse(issubclass(int, H)) self.validate_abstract_methods(Hashable, '__hash__') def test_Iterable(self): # Check some non-iterables non_samples = [None, 42, 3.14, 1j] for x in non_samples: - self.failIf(isinstance(x, Iterable), repr(x)) - self.failIf(issubclass(type(x), Iterable), repr(type(x))) + self.assertFalse(isinstance(x, Iterable), repr(x)) + self.assertFalse(issubclass(type(x), Iterable), repr(type(x))) # Check some iterables samples = [bytes(), str(), tuple(), list(), set(), frozenset(), dict(), @@ -271,21 +271,21 @@ class TestOneTrickPonyABCs(ABCTestCase): (x for x in []), ] for x in samples: - self.failUnless(isinstance(x, Iterable), repr(x)) - self.failUnless(issubclass(type(x), Iterable), repr(type(x))) + self.assertTrue(isinstance(x, Iterable), repr(x)) + self.assertTrue(issubclass(type(x), Iterable), repr(type(x))) # Check direct subclassing class I(Iterable): def __iter__(self): return super().__iter__() self.assertEqual(list(I()), []) - self.failIf(issubclass(str, I)) + self.assertFalse(issubclass(str, I)) self.validate_abstract_methods(Iterable, '__iter__') def test_Iterator(self): non_samples = [None, 42, 3.14, 1j, b"", "", (), [], {}, set()] for x in non_samples: - self.failIf(isinstance(x, Iterator), repr(x)) - self.failIf(issubclass(type(x), Iterator), repr(type(x))) + self.assertFalse(isinstance(x, Iterator), repr(x)) + self.assertFalse(issubclass(type(x), Iterator), repr(type(x))) samples = [iter(bytes()), iter(str()), iter(tuple()), iter(list()), iter(dict()), iter(set()), iter(frozenset()), @@ -295,8 +295,8 @@ class TestOneTrickPonyABCs(ABCTestCase): (x for x in []), ] for x in samples: - self.failUnless(isinstance(x, Iterator), repr(x)) - self.failUnless(issubclass(type(x), Iterator), repr(type(x))) + self.assertTrue(isinstance(x, Iterator), repr(x)) + self.assertTrue(issubclass(type(x), Iterator), repr(type(x))) self.validate_abstract_methods(Iterator, '__next__') def test_Sized(self): @@ -305,15 +305,15 @@ class TestOneTrickPonyABCs(ABCTestCase): (x for x in []), ] for x in non_samples: - self.failIf(isinstance(x, Sized), repr(x)) - self.failIf(issubclass(type(x), Sized), repr(type(x))) + self.assertFalse(isinstance(x, Sized), repr(x)) + self.assertFalse(issubclass(type(x), Sized), repr(type(x))) samples = [bytes(), str(), tuple(), list(), set(), frozenset(), dict(), dict().keys(), dict().items(), dict().values(), ] for x in samples: - self.failUnless(isinstance(x, Sized), repr(x)) - self.failUnless(issubclass(type(x), Sized), repr(type(x))) + self.assertTrue(isinstance(x, Sized), repr(x)) + self.assertTrue(issubclass(type(x), Sized), repr(type(x))) self.validate_abstract_methods(Sized, '__len__') def test_Container(self): @@ -322,15 +322,15 @@ class TestOneTrickPonyABCs(ABCTestCase): (x for x in []), ] for x in non_samples: - self.failIf(isinstance(x, Container), repr(x)) - self.failIf(issubclass(type(x), Container), repr(type(x))) + self.assertFalse(isinstance(x, Container), repr(x)) + self.assertFalse(issubclass(type(x), Container), repr(type(x))) samples = [bytes(), str(), tuple(), list(), set(), frozenset(), dict(), dict().keys(), dict().items(), ] for x in samples: - self.failUnless(isinstance(x, Container), repr(x)) - self.failUnless(issubclass(type(x), Container), repr(type(x))) + self.assertTrue(isinstance(x, Container), repr(x)) + self.assertTrue(issubclass(type(x), Container), repr(type(x))) self.validate_abstract_methods(Container, '__contains__') def test_Callable(self): @@ -340,32 +340,32 @@ class TestOneTrickPonyABCs(ABCTestCase): (x for x in []), ] for x in non_samples: - self.failIf(isinstance(x, Callable), repr(x)) - self.failIf(issubclass(type(x), Callable), repr(type(x))) + self.assertFalse(isinstance(x, Callable), repr(x)) + self.assertFalse(issubclass(type(x), Callable), repr(type(x))) samples = [lambda: None, type, int, object, len, list.append, [].append, ] for x in samples: - self.failUnless(isinstance(x, Callable), repr(x)) - self.failUnless(issubclass(type(x), Callable), repr(type(x))) + self.assertTrue(isinstance(x, Callable), repr(x)) + self.assertTrue(issubclass(type(x), Callable), repr(type(x))) self.validate_abstract_methods(Callable, '__call__') def test_direct_subclassing(self): for B in Hashable, Iterable, Iterator, Sized, Container, Callable: class C(B): pass - self.failUnless(issubclass(C, B)) - self.failIf(issubclass(int, C)) + self.assertTrue(issubclass(C, B)) + self.assertFalse(issubclass(int, C)) def test_registration(self): for B in Hashable, Iterable, Iterator, Sized, Container, Callable: class C: __hash__ = None # Make sure it isn't hashable by default - self.failIf(issubclass(C, B), B.__name__) + self.assertFalse(issubclass(C, B), B.__name__) B.register(C) - self.failUnless(issubclass(C, B)) + self.assertTrue(issubclass(C, B)) class WithSet(MutableSet): @@ -395,8 +395,8 @@ class TestCollectionABCs(ABCTestCase): def test_Set(self): for sample in [set, frozenset]: - self.failUnless(isinstance(sample(), Set)) - self.failUnless(issubclass(sample, Set)) + self.assertTrue(isinstance(sample(), Set)) + self.assertTrue(issubclass(sample, Set)) self.validate_abstract_methods(Set, '__contains__', '__iter__', '__len__') def test_hash_Set(self): @@ -412,13 +412,13 @@ class TestCollectionABCs(ABCTestCase): def __hash__(self): return self._hash() a, b = OneTwoThreeSet(), OneTwoThreeSet() - self.failUnless(hash(a) == hash(b)) + self.assertTrue(hash(a) == hash(b)) def test_MutableSet(self): - self.failUnless(isinstance(set(), MutableSet)) - self.failUnless(issubclass(set, MutableSet)) - self.failIf(isinstance(frozenset(), MutableSet)) - self.failIf(issubclass(frozenset, MutableSet)) + self.assertTrue(isinstance(set(), MutableSet)) + self.assertTrue(issubclass(set, MutableSet)) + self.assertFalse(isinstance(frozenset(), MutableSet)) + self.assertFalse(issubclass(frozenset, MutableSet)) self.validate_abstract_methods(MutableSet, '__contains__', '__iter__', '__len__', 'add', 'discard') @@ -457,46 +457,46 @@ class TestCollectionABCs(ABCTestCase): def test_Mapping(self): for sample in [dict]: - self.failUnless(isinstance(sample(), Mapping)) - self.failUnless(issubclass(sample, Mapping)) + self.assertTrue(isinstance(sample(), Mapping)) + self.assertTrue(issubclass(sample, Mapping)) self.validate_abstract_methods(Mapping, '__contains__', '__iter__', '__len__', '__getitem__') def test_MutableMapping(self): for sample in [dict]: - self.failUnless(isinstance(sample(), MutableMapping)) - self.failUnless(issubclass(sample, MutableMapping)) + self.assertTrue(isinstance(sample(), MutableMapping)) + self.assertTrue(issubclass(sample, MutableMapping)) self.validate_abstract_methods(MutableMapping, '__contains__', '__iter__', '__len__', '__getitem__', '__setitem__', '__delitem__') def test_Sequence(self): for sample in [tuple, list, bytes, str]: - self.failUnless(isinstance(sample(), Sequence)) - self.failUnless(issubclass(sample, Sequence)) - self.failUnless(isinstance(range(10), Sequence)) - self.failUnless(issubclass(range, Sequence)) - self.failUnless(issubclass(str, Sequence)) + self.assertTrue(isinstance(sample(), Sequence)) + self.assertTrue(issubclass(sample, Sequence)) + self.assertTrue(isinstance(range(10), Sequence)) + self.assertTrue(issubclass(range, Sequence)) + self.assertTrue(issubclass(str, Sequence)) self.validate_abstract_methods(Sequence, '__contains__', '__iter__', '__len__', '__getitem__') def test_ByteString(self): for sample in [bytes, bytearray]: - self.failUnless(isinstance(sample(), ByteString)) - self.failUnless(issubclass(sample, ByteString)) + self.assertTrue(isinstance(sample(), ByteString)) + self.assertTrue(issubclass(sample, ByteString)) for sample in [str, list, tuple]: - self.failIf(isinstance(sample(), ByteString)) - self.failIf(issubclass(sample, ByteString)) - self.failIf(isinstance(memoryview(b""), ByteString)) - self.failIf(issubclass(memoryview, ByteString)) + self.assertFalse(isinstance(sample(), ByteString)) + self.assertFalse(issubclass(sample, ByteString)) + self.assertFalse(isinstance(memoryview(b""), ByteString)) + self.assertFalse(issubclass(memoryview, ByteString)) def test_MutableSequence(self): for sample in [tuple, str, bytes]: - self.failIf(isinstance(sample(), MutableSequence)) - self.failIf(issubclass(sample, MutableSequence)) + self.assertFalse(isinstance(sample(), MutableSequence)) + self.assertFalse(issubclass(sample, MutableSequence)) for sample in [list, bytearray]: - self.failUnless(isinstance(sample(), MutableSequence)) - self.failUnless(issubclass(sample, MutableSequence)) - self.failIf(issubclass(str, MutableSequence)) + self.assertTrue(isinstance(sample(), MutableSequence)) + self.assertTrue(issubclass(sample, MutableSequence)) + self.assertFalse(issubclass(str, MutableSequence)) self.validate_abstract_methods(MutableSequence, '__contains__', '__iter__', '__len__', '__getitem__', '__setitem__', '__delitem__', 'insert') @@ -506,10 +506,10 @@ class TestCounter(unittest.TestCase): c = Counter('abcaba') self.assertEqual(c, Counter({'a':3 , 'b': 2, 'c': 1})) self.assertEqual(c, Counter(a=3, b=2, c=1)) - self.assert_(isinstance(c, dict)) - self.assert_(isinstance(c, Mapping)) - self.assert_(issubclass(Counter, dict)) - self.assert_(issubclass(Counter, Mapping)) + self.assertTrue(isinstance(c, dict)) + self.assertTrue(isinstance(c, Mapping)) + self.assertTrue(issubclass(Counter, dict)) + self.assertTrue(issubclass(Counter, Mapping)) self.assertEqual(len(c), 3) self.assertEqual(sum(c.values()), 6) self.assertEqual(sorted(c.values()), [1, 2, 3]) @@ -581,7 +581,7 @@ class TestCounter(unittest.TestCase): Counter(words), ]): msg = (i, dup, words) - self.assert_(dup is not words) + self.assertTrue(dup is not words) self.assertEquals(dup, words) self.assertEquals(len(dup), len(words)) self.assertEquals(type(dup), type(words)) @@ -597,7 +597,7 @@ class TestCounter(unittest.TestCase): def test_invariant_for_the_in_operator(self): c = Counter(a=10, b=-2, c=0) for elem in c: - self.assert_(elem in c) + self.assertTrue(elem in c) def test_multiset_operations(self): # Verify that adding a zero counter will strip zeros and negatives @@ -622,7 +622,7 @@ class TestCounter(unittest.TestCase): self.assertEqual(numberop(p[x], q[x]), result[x], (counterop, x, p, q)) # verify that results exclude non-positive counts - self.assert_(x>0 for x in result.values()) + self.assertTrue(x>0 for x in result.values()) elements = 'abcdef' for i in range(100): @@ -697,7 +697,7 @@ class TestOrderedDict(unittest.TestCase): pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)] od = OrderedDict(pairs) del od['a'] - self.assert_('a' not in od) + self.assertTrue('a' not in od) with self.assertRaises(KeyError): del od['a'] self.assertEqual(list(od.items()), pairs[:2] + pairs[3:]) @@ -778,7 +778,7 @@ class TestOrderedDict(unittest.TestCase): update_test, OrderedDict(od), ]): - self.assert_(dup is not od) + self.assertTrue(dup is not od) self.assertEquals(dup, od) self.assertEquals(list(dup.items()), list(od.items())) self.assertEquals(len(dup), len(od)) @@ -791,7 +791,7 @@ class TestOrderedDict(unittest.TestCase): od = OrderedDict(pairs) # yaml.dump(od) --> # '!!python/object/apply:__main__.OrderedDict\n- - [a, 1]\n - [b, 2]\n' - self.assert_(all(type(pair)==list for pair in od.__reduce__()[1])) + self.assertTrue(all(type(pair)==list for pair in od.__reduce__()[1])) def test_reduce_not_too_fat(self): # do not save instance dictionary if not needed diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 2b978eb..5d1f478 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -372,10 +372,10 @@ if 1: import __mangled_mod import __package__.module - self.assert_("_A__mangled" in A.f.__code__.co_varnames) - self.assert_("__not_mangled__" in A.f.__code__.co_varnames) - self.assert_("_A__mangled_mod" in A.f.__code__.co_varnames) - self.assert_("__package__" in A.f.__code__.co_varnames) + self.assertTrue("_A__mangled" in A.f.__code__.co_varnames) + self.assertTrue("__not_mangled__" in A.f.__code__.co_varnames) + self.assertTrue("_A__mangled_mod" in A.f.__code__.co_varnames) + self.assertTrue("__package__" in A.f.__code__.co_varnames) def test_compile_ast(self): fname = __file__ @@ -394,7 +394,7 @@ if 1: for fname, code in sample_code: co1 = compile(code, '%s1' % fname, 'exec') ast = compile(code, '%s2' % fname, 'exec', _ast.PyCF_ONLY_AST) - self.assert_(type(ast) == _ast.Module) + self.assertTrue(type(ast) == _ast.Module) co2 = compile(ast, '%s3' % fname, 'exec') self.assertEqual(co1, co2) # the code object's filename comes from the second compilation step diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py index f621186..faa7e1f 100644 --- a/Lib/test/test_complex.py +++ b/Lib/test/test_complex.py @@ -35,7 +35,7 @@ class ComplexTest(unittest.TestCase): if x == 0: return abs(y) < eps # check that relative difference < eps - self.assert_(abs((x-y)/y) < eps) + self.assertTrue(abs((x-y)/y) < eps) def assertFloatsAreIdentical(self, x, y): """assert that floats x and y are identical, in the sense that: @@ -66,7 +66,7 @@ class ComplexTest(unittest.TestCase): self.assertCloseAbs(x.imag, y.imag, eps) def assertIs(self, a, b): - self.assert_(a is b) + self.assertTrue(a is b) def check_div(self, x, y): """Compute complex z=x*y, and check that z/x==y and z/y==x.""" @@ -174,8 +174,8 @@ class ComplexTest(unittest.TestCase): def test_boolcontext(self): for i in range(100): - self.assert_(complex(random() + 1e-6, random() + 1e-6)) - self.assert_(not complex(0.0, 0.0)) + self.assertTrue(complex(random() + 1e-6, random() + 1e-6)) + self.assertTrue(not complex(0.0, 0.0)) def test_conjugate(self): self.assertClose(complex(5.3, 9.8).conjugate(), 5.3-9.8j) @@ -257,7 +257,7 @@ class ComplexTest(unittest.TestCase): self.assertEqual(split_zeros(complex(-0., 1.).real), split_zeros(-0.)) c = 3.14 + 1j - self.assert_(complex(c) is c) + self.assertTrue(complex(c) is c) del c self.assertRaises(TypeError, complex, "1", "1") diff --git a/Lib/test/test_contains.py b/Lib/test/test_contains.py index 3f0b234..622dfd4 100644 --- a/Lib/test/test_contains.py +++ b/Lib/test/test_contains.py @@ -20,19 +20,19 @@ class TestContains(unittest.TestCase): a = base_set(1) b = myset(1) c = seq(1) - self.assert_(1 in b) - self.assert_(0 not in b) - self.assert_(1 in c) - self.assert_(0 not in c) + self.assertTrue(1 in b) + self.assertTrue(0 not in b) + self.assertTrue(1 in c) + self.assertTrue(0 not in c) self.assertRaises(TypeError, lambda: 1 in a) self.assertRaises(TypeError, lambda: 1 not in a) # test char in string - self.assert_('c' in 'abc') - self.assert_('d' not in 'abc') + self.assertTrue('c' in 'abc') + self.assertTrue('d' not in 'abc') - self.assert_('' in '') - self.assert_('' in 'abc') + self.assertTrue('' in '') + self.assertTrue('' in 'abc') self.assertRaises(TypeError, lambda: None in 'abc') @@ -40,15 +40,15 @@ class TestContains(unittest.TestCase): # a collection of tests on builtin sequence types a = range(10) for i in a: - self.assert_(i in a) - self.assert_(16 not in a) - self.assert_(a not in a) + self.assertTrue(i in a) + self.assertTrue(16 not in a) + self.assertTrue(a not in a) a = tuple(a) for i in a: - self.assert_(i in a) - self.assert_(16 not in a) - self.assert_(a not in a) + self.assertTrue(i in a) + self.assertTrue(16 not in a) + self.assertTrue(a not in a) class Deviant1: """Behaves strangely when compared @@ -64,7 +64,7 @@ class TestContains(unittest.TestCase): self.aList.remove(14) return 0 - self.assert_(Deviant1() not in Deviant1.aList) + self.assertTrue(Deviant1() not in Deviant1.aList) def test_nonreflexive(self): # containment and equality tests involving elements that are @@ -81,9 +81,9 @@ class TestContains(unittest.TestCase): for constructor in constructors: container = constructor(values) for elem in container: - self.assert_(elem in container) - self.assert_(container == constructor(values)) - self.assert_(container == container) + self.assertTrue(elem in container) + self.assertTrue(container == constructor(values)) + self.assertTrue(container == container) def test_main(): diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index f97cd81..015a0c5 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -54,7 +54,7 @@ class ContextManagerTestCase(unittest.TestCase): ctx = whee() ctx.__enter__() # Calling __exit__ should not result in an exception - self.failIf(ctx.__exit__(TypeError, TypeError("foo"), None)) + self.assertFalse(ctx.__exit__(TypeError, TypeError("foo"), None)) def test_contextmanager_trap_yield_after_throw(self): @contextmanager @@ -261,17 +261,17 @@ class FileContextTestCase(unittest.TestCase): try: f = None with open(tfn, "w") as f: - self.failIf(f.closed) + self.assertFalse(f.closed) f.write("Booh\n") - self.failUnless(f.closed) + self.assertTrue(f.closed) f = None try: with open(tfn, "r") as f: - self.failIf(f.closed) + self.assertFalse(f.closed) self.assertEqual(f.read(), "Booh\n") 1/0 except ZeroDivisionError: - self.failUnless(f.closed) + self.assertTrue(f.closed) else: self.fail("Didn't raise ZeroDivisionError") finally: @@ -283,16 +283,16 @@ class FileContextTestCase(unittest.TestCase): class LockContextTestCase(unittest.TestCase): def boilerPlate(self, lock, locked): - self.failIf(locked()) + self.assertFalse(locked()) with lock: - self.failUnless(locked()) - self.failIf(locked()) + self.assertTrue(locked()) + self.assertFalse(locked()) try: with lock: - self.failUnless(locked()) + self.assertTrue(locked()) 1/0 except ZeroDivisionError: - self.failIf(locked()) + self.assertFalse(locked()) else: self.fail("Didn't raise ZeroDivisionError") diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py index 502bf3f..2af2109 100644 --- a/Lib/test/test_copy.py +++ b/Lib/test/test_copy.py @@ -17,8 +17,8 @@ class TestCopy(unittest.TestCase): # Attempt full line coverage of copy.py from top to bottom def test_exceptions(self): - self.assert_(copy.Error is copy.error) - self.assert_(issubclass(copy.Error, Exception)) + self.assertTrue(copy.Error is copy.error) + self.assertTrue(issubclass(copy.Error, Exception)) # The copy() method @@ -59,7 +59,7 @@ class TestCopy(unittest.TestCase): raise support.TestFailed("shouldn't call this") x = C() y = copy.copy(x) - self.assert_(y is x) + self.assertTrue(y is x) def test_copy_reduce(self): class C(object): @@ -67,7 +67,7 @@ class TestCopy(unittest.TestCase): return "" x = C() y = copy.copy(x) - self.assert_(y is x) + self.assertTrue(y is x) def test_copy_cant(self): class C(object): @@ -91,7 +91,7 @@ class TestCopy(unittest.TestCase): "hello", "hello\u1234", f.__code__, NewStyle, range(10), Classic, max] for x in tests: - self.assert_(copy.copy(x) is x, repr(x)) + self.assertTrue(copy.copy(x) is x, repr(x)) def test_copy_list(self): x = [1, 2, 3] @@ -185,9 +185,9 @@ class TestCopy(unittest.TestCase): x = [x, x] y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y is not x) - self.assert_(y[0] is not x[0]) - self.assert_(y[0] is y[1]) + self.assertTrue(y is not x) + self.assertTrue(y[0] is not x[0]) + self.assertTrue(y[0] is y[1]) def test_deepcopy_issubclass(self): # XXX Note: there's no way to test the TypeError coming out of @@ -232,7 +232,7 @@ class TestCopy(unittest.TestCase): raise support.TestFailed("shouldn't call this") x = C() y = copy.deepcopy(x) - self.assert_(y is x) + self.assertTrue(y is x) def test_deepcopy_reduce(self): class C(object): @@ -240,7 +240,7 @@ class TestCopy(unittest.TestCase): return "" x = C() y = copy.deepcopy(x) - self.assert_(y is x) + self.assertTrue(y is x) def test_deepcopy_cant(self): class C(object): @@ -264,14 +264,14 @@ class TestCopy(unittest.TestCase): "hello", "hello\u1234", f.__code__, NewStyle, range(10), Classic, max] for x in tests: - self.assert_(copy.deepcopy(x) is x, repr(x)) + self.assertTrue(copy.deepcopy(x) is x, repr(x)) def test_deepcopy_list(self): x = [[1, 2], 3] y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(x is not y) - self.assert_(x[0] is not y[0]) + self.assertTrue(x is not y) + self.assertTrue(x[0] is not y[0]) def test_deepcopy_reflexive_list(self): x = [] @@ -279,16 +279,16 @@ class TestCopy(unittest.TestCase): y = copy.deepcopy(x) for op in comparisons: self.assertRaises(RuntimeError, op, y, x) - self.assert_(y is not x) - self.assert_(y[0] is y) + self.assertTrue(y is not x) + self.assertTrue(y[0] is y) self.assertEqual(len(y), 1) def test_deepcopy_tuple(self): x = ([1, 2], 3) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(x is not y) - self.assert_(x[0] is not y[0]) + self.assertTrue(x is not y) + self.assertTrue(x[0] is not y[0]) def test_deepcopy_reflexive_tuple(self): x = ([],) @@ -296,16 +296,16 @@ class TestCopy(unittest.TestCase): y = copy.deepcopy(x) for op in comparisons: self.assertRaises(RuntimeError, op, y, x) - self.assert_(y is not x) - self.assert_(y[0] is not x[0]) - self.assert_(y[0][0] is y) + self.assertTrue(y is not x) + self.assertTrue(y[0] is not x[0]) + self.assertTrue(y[0][0] is y) def test_deepcopy_dict(self): x = {"foo": [1, 2], "bar": 3} y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(x is not y) - self.assert_(x["foo"] is not y["foo"]) + self.assertTrue(x is not y) + self.assertTrue(x["foo"] is not y["foo"]) def test_deepcopy_reflexive_dict(self): x = {} @@ -315,15 +315,15 @@ class TestCopy(unittest.TestCase): self.assertRaises(TypeError, op, y, x) for op in equality_comparisons: self.assertRaises(RuntimeError, op, y, x) - self.assert_(y is not x) - self.assert_(y['foo'] is y) + self.assertTrue(y is not x) + self.assertTrue(y['foo'] is y) self.assertEqual(len(y), 1) def test_deepcopy_keepalive(self): memo = {} x = 42 y = copy.deepcopy(x, memo) - self.assert_(memo[id(x)] is x) + self.assertTrue(memo[id(x)] is x) def test_deepcopy_inst_vanilla(self): class C: @@ -334,7 +334,7 @@ class TestCopy(unittest.TestCase): x = C([42]) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y.foo is not x.foo) def test_deepcopy_inst_deepcopy(self): class C: @@ -347,8 +347,8 @@ class TestCopy(unittest.TestCase): x = C([42]) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y is not x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y is not x) + self.assertTrue(y.foo is not x.foo) def test_deepcopy_inst_getinitargs(self): class C: @@ -361,8 +361,8 @@ class TestCopy(unittest.TestCase): x = C([42]) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y is not x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y is not x) + self.assertTrue(y.foo is not x.foo) def test_deepcopy_inst_getstate(self): class C: @@ -375,8 +375,8 @@ class TestCopy(unittest.TestCase): x = C([42]) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y is not x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y is not x) + self.assertTrue(y.foo is not x.foo) def test_deepcopy_inst_setstate(self): class C: @@ -389,8 +389,8 @@ class TestCopy(unittest.TestCase): x = C([42]) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y is not x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y is not x) + self.assertTrue(y.foo is not x.foo) def test_deepcopy_inst_getstate_setstate(self): class C: @@ -405,8 +405,8 @@ class TestCopy(unittest.TestCase): x = C([42]) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y is not x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y is not x) + self.assertTrue(y.foo is not x.foo) def test_deepcopy_reflexive_inst(self): class C: @@ -414,8 +414,8 @@ class TestCopy(unittest.TestCase): x = C() x.foo = x y = copy.deepcopy(x) - self.assert_(y is not x) - self.assert_(y.foo is y) + self.assertTrue(y is not x) + self.assertTrue(y.foo is y) # _reconstruct() @@ -425,9 +425,9 @@ class TestCopy(unittest.TestCase): return "" x = C() y = copy.copy(x) - self.assert_(y is x) + self.assertTrue(y is x) y = copy.deepcopy(x) - self.assert_(y is x) + self.assertTrue(y is x) def test_reconstruct_nostate(self): class C(object): @@ -436,9 +436,9 @@ class TestCopy(unittest.TestCase): x = C() x.foo = 42 y = copy.copy(x) - self.assert_(y.__class__ is x.__class__) + self.assertTrue(y.__class__ is x.__class__) y = copy.deepcopy(x) - self.assert_(y.__class__ is x.__class__) + self.assertTrue(y.__class__ is x.__class__) def test_reconstruct_state(self): class C(object): @@ -452,7 +452,7 @@ class TestCopy(unittest.TestCase): self.assertEqual(y, x) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y.foo is not x.foo) def test_reconstruct_state_setstate(self): class C(object): @@ -468,7 +468,7 @@ class TestCopy(unittest.TestCase): self.assertEqual(y, x) y = copy.deepcopy(x) self.assertEqual(y, x) - self.assert_(y.foo is not x.foo) + self.assertTrue(y.foo is not x.foo) def test_reconstruct_reflexive(self): class C(object): @@ -476,8 +476,8 @@ class TestCopy(unittest.TestCase): x = C() x.foo = x y = copy.deepcopy(x) - self.assert_(y is not x) - self.assert_(y.foo is y) + self.assertTrue(y is not x) + self.assertTrue(y.foo is y) # Additions for Python 2.3 and pickle protocol 2 @@ -491,12 +491,12 @@ class TestCopy(unittest.TestCase): x = C([[1, 2], 3]) y = copy.copy(x) self.assertEqual(x, y) - self.assert_(x is not y) - self.assert_(x[0] is y[0]) + self.assertTrue(x is not y) + self.assertTrue(x[0] is y[0]) y = copy.deepcopy(x) self.assertEqual(x, y) - self.assert_(x is not y) - self.assert_(x[0] is not y[0]) + self.assertTrue(x is not y) + self.assertTrue(x[0] is not y[0]) def test_reduce_5tuple(self): class C(dict): @@ -508,12 +508,12 @@ class TestCopy(unittest.TestCase): x = C([("foo", [1, 2]), ("bar", 3)]) y = copy.copy(x) self.assertEqual(x, y) - self.assert_(x is not y) - self.assert_(x["foo"] is y["foo"]) + self.assertTrue(x is not y) + self.assertTrue(x["foo"] is y["foo"]) y = copy.deepcopy(x) self.assertEqual(x, y) - self.assert_(x is not y) - self.assert_(x["foo"] is not y["foo"]) + self.assertTrue(x is not y) + self.assertTrue(x["foo"] is not y["foo"]) def test_copy_slots(self): class C(object): @@ -521,7 +521,7 @@ class TestCopy(unittest.TestCase): x = C() x.foo = [42] y = copy.copy(x) - self.assert_(x.foo is y.foo) + self.assertTrue(x.foo is y.foo) def test_deepcopy_slots(self): class C(object): @@ -530,7 +530,7 @@ class TestCopy(unittest.TestCase): x.foo = [42] y = copy.deepcopy(x) self.assertEqual(x.foo, y.foo) - self.assert_(x.foo is not y.foo) + self.assertTrue(x.foo is not y.foo) def test_copy_list_subclass(self): class C(list): @@ -540,8 +540,8 @@ class TestCopy(unittest.TestCase): y = copy.copy(x) self.assertEqual(list(x), list(y)) self.assertEqual(x.foo, y.foo) - self.assert_(x[0] is y[0]) - self.assert_(x.foo is y.foo) + self.assertTrue(x[0] is y[0]) + self.assertTrue(x.foo is y.foo) def test_deepcopy_list_subclass(self): class C(list): @@ -551,8 +551,8 @@ class TestCopy(unittest.TestCase): y = copy.deepcopy(x) self.assertEqual(list(x), list(y)) self.assertEqual(x.foo, y.foo) - self.assert_(x[0] is not y[0]) - self.assert_(x.foo is not y.foo) + self.assertTrue(x[0] is not y[0]) + self.assertTrue(x.foo is not y.foo) def test_copy_tuple_subclass(self): class C(tuple): @@ -569,8 +569,8 @@ class TestCopy(unittest.TestCase): self.assertEqual(tuple(x), ([1, 2], 3)) y = copy.deepcopy(x) self.assertEqual(tuple(y), ([1, 2], 3)) - self.assert_(x is not y) - self.assert_(x[0] is not y[0]) + self.assertTrue(x is not y) + self.assertTrue(x[0] is not y[0]) def test_getstate_exc(self): class EvilState(object): diff --git a/Lib/test/test_copyreg.py b/Lib/test/test_copyreg.py index 48e58ea..4fb89d0 100644 --- a/Lib/test/test_copyreg.py +++ b/Lib/test/test_copyreg.py @@ -51,10 +51,10 @@ class CopyRegTestCase(unittest.TestCase): mod, func, code) copyreg.add_extension(mod, func, code) # Should be in the registry. - self.assert_(copyreg._extension_registry[mod, func] == code) - self.assert_(copyreg._inverted_registry[code] == (mod, func)) + self.assertTrue(copyreg._extension_registry[mod, func] == code) + self.assertTrue(copyreg._inverted_registry[code] == (mod, func)) # Shouldn't be in the cache. - self.assert_(code not in copyreg._extension_cache) + self.assertTrue(code not in copyreg._extension_cache) # Redundant registration should be OK. copyreg.add_extension(mod, func, code) # shouldn't blow up # Conflicting code. @@ -81,7 +81,7 @@ class CopyRegTestCase(unittest.TestCase): e.restore() # Shouldn't be there anymore. - self.assert_((mod, func) not in copyreg._extension_registry) + self.assertTrue((mod, func) not in copyreg._extension_registry) # The code *may* be in copyreg._extension_registry, though, if # we happened to pick on a registered code. So don't check for # that. diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 7eb3a7f..95105be 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -315,7 +315,7 @@ class TestDialectRegistry(unittest.TestCase): expected_dialects.sort() csv.register_dialect(name, myexceltsv) try: - self.failUnless(csv.get_dialect(name).delimiter, '\t') + self.assertTrue(csv.get_dialect(name).delimiter, '\t') got_dialects = csv.list_dialects() got_dialects.sort() self.assertEqual(expected_dialects, got_dialects) @@ -326,8 +326,8 @@ class TestDialectRegistry(unittest.TestCase): name = 'fedcba' csv.register_dialect(name, delimiter=';') try: - self.failUnless(csv.get_dialect(name).delimiter, '\t') - self.failUnless(list(csv.reader('X;Y;Z', name)), ['X', 'Y', 'Z']) + self.assertTrue(csv.get_dialect(name).delimiter, '\t') + self.assertTrue(list(csv.reader('X;Y;Z', name)), ['X', 'Y', 'Z']) finally: csv.unregister_dialect(name) @@ -811,7 +811,7 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back # given that all three lines in sample3 are equal, # I think that any character could have been 'guessed' as the # delimiter, depending on dictionary order - self.assert_(dialect.delimiter in self.sample3) + self.assertTrue(dialect.delimiter in self.sample3) dialect = sniffer.sniff(self.sample3, delimiters="?,") self.assertEqual(dialect.delimiter, "?") dialect = sniffer.sniff(self.sample3, delimiters="/,") diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py index b9d5959..8bf8420 100644 --- a/Lib/test/test_datetime.py +++ b/Lib/test/test_datetime.py @@ -77,9 +77,9 @@ class TestTZInfo(unittest.TestCase): def __init__(self, offset, name): self.__offset = offset self.__name = name - self.failUnless(issubclass(NotEnough, tzinfo)) + self.assertTrue(issubclass(NotEnough, tzinfo)) ne = NotEnough(3, "NotByALongShot") - self.failUnless(isinstance(ne, tzinfo)) + self.assertTrue(isinstance(ne, tzinfo)) dt = datetime.now() self.assertRaises(NotImplementedError, ne.tzname, dt) @@ -88,7 +88,7 @@ class TestTZInfo(unittest.TestCase): def test_normal(self): fo = FixedOffset(3, "Three") - self.failUnless(isinstance(fo, tzinfo)) + self.assertTrue(isinstance(fo, tzinfo)) for dt in datetime.now(), None: self.assertEqual(fo.utcoffset(dt), timedelta(minutes=3)) self.assertEqual(fo.tzname(dt), "Three") @@ -99,25 +99,25 @@ class TestTZInfo(unittest.TestCase): # carry no data), but they need to be picklable anyway else # concrete subclasses can't be pickled. orig = tzinfo.__new__(tzinfo) - self.failUnless(type(orig) is tzinfo) + self.assertTrue(type(orig) is tzinfo) for pickler, unpickler, proto in pickle_choices: green = pickler.dumps(orig, proto) derived = unpickler.loads(green) - self.failUnless(type(derived) is tzinfo) + self.assertTrue(type(derived) is tzinfo) def test_pickling_subclass(self): # Make sure we can pickle/unpickle an instance of a subclass. offset = timedelta(minutes=-300) orig = PicklableFixedOffset(offset, 'cookie') - self.failUnless(isinstance(orig, tzinfo)) - self.failUnless(type(orig) is PicklableFixedOffset) + self.assertTrue(isinstance(orig, tzinfo)) + self.assertTrue(type(orig) is PicklableFixedOffset) self.assertEqual(orig.utcoffset(None), offset) self.assertEqual(orig.tzname(None), 'cookie') for pickler, unpickler, proto in pickle_choices: green = pickler.dumps(orig, proto) derived = unpickler.loads(green) - self.failUnless(isinstance(derived, tzinfo)) - self.failUnless(type(derived) is PicklableFixedOffset) + self.assertTrue(isinstance(derived, tzinfo)) + self.assertTrue(type(derived) is PicklableFixedOffset) self.assertEqual(derived.utcoffset(None), offset) self.assertEqual(derived.tzname(None), 'cookie') @@ -134,16 +134,16 @@ class HarmlessMixedComparison: def test_harmless_mixed_comparison(self): me = self.theclass(1, 1, 1) - self.failIf(me == ()) - self.failUnless(me != ()) - self.failIf(() == me) - self.failUnless(() != me) + self.assertFalse(me == ()) + self.assertTrue(me != ()) + self.assertFalse(() == me) + self.assertTrue(() != me) - self.failUnless(me in [1, 20, [], me]) - self.failIf(me not in [1, 20, [], me]) + self.assertTrue(me in [1, 20, [], me]) + self.assertFalse(me not in [1, 20, [], me]) - self.failUnless([] in [me, 1, 20, []]) - self.failIf([] not in [me, 1, 20, []]) + self.assertTrue([] in [me, 1, 20, []]) + self.assertFalse([] not in [me, 1, 20, []]) def test_harmful_mixed_comparison(self): me = self.theclass(1, 1, 1) @@ -303,26 +303,26 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): t1 = timedelta(2, 3, 4) t2 = timedelta(2, 3, 4) self.assertEqual(t1, t2) - self.failUnless(t1 <= t2) - self.failUnless(t1 >= t2) - self.failUnless(not t1 != t2) - self.failUnless(not t1 < t2) - self.failUnless(not t1 > t2) + self.assertTrue(t1 <= t2) + self.assertTrue(t1 >= t2) + self.assertTrue(not t1 != t2) + self.assertTrue(not t1 < t2) + self.assertTrue(not t1 > t2) for args in (3, 3, 3), (2, 4, 4), (2, 3, 5): t2 = timedelta(*args) # this is larger than t1 - self.failUnless(t1 < t2) - self.failUnless(t2 > t1) - self.failUnless(t1 <= t2) - self.failUnless(t2 >= t1) - self.failUnless(t1 != t2) - self.failUnless(t2 != t1) - self.failUnless(not t1 == t2) - self.failUnless(not t2 == t1) - self.failUnless(not t1 > t2) - self.failUnless(not t2 < t1) - self.failUnless(not t1 >= t2) - self.failUnless(not t2 <= t1) + self.assertTrue(t1 < t2) + self.assertTrue(t2 > t1) + self.assertTrue(t1 <= t2) + self.assertTrue(t2 >= t1) + self.assertTrue(t1 != t2) + self.assertTrue(t2 != t1) + self.assertTrue(not t1 == t2) + self.assertTrue(not t2 == t1) + self.assertTrue(not t1 > t2) + self.assertTrue(not t2 < t1) + self.assertTrue(not t1 >= t2) + self.assertTrue(not t2 <= t1) for badarg in OTHERSTUFF: self.assertEqual(t1 == badarg, False) @@ -368,7 +368,7 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): # Verify td -> string -> td identity. s = repr(td) - self.failUnless(s.startswith('datetime.')) + self.assertTrue(s.startswith('datetime.')) s = s[9:] td2 = eval(s) self.assertEqual(td, td2) @@ -378,10 +378,10 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): self.assertEqual(td, td2) def test_resolution_info(self): - self.assert_(isinstance(timedelta.min, timedelta)) - self.assert_(isinstance(timedelta.max, timedelta)) - self.assert_(isinstance(timedelta.resolution, timedelta)) - self.assert_(timedelta.max > timedelta.min) + self.assertTrue(isinstance(timedelta.min, timedelta)) + self.assertTrue(isinstance(timedelta.max, timedelta)) + self.assertTrue(isinstance(timedelta.resolution, timedelta)) + self.assertTrue(timedelta.max > timedelta.min) self.assertEqual(timedelta.min, timedelta(-999999999)) self.assertEqual(timedelta.max, timedelta(999999999, 24*3600-1, 1e6-1)) self.assertEqual(timedelta.resolution, timedelta(0, 0, 1)) @@ -428,11 +428,11 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): (-1, 24*3600-1, 999999)) def test_bool(self): - self.failUnless(timedelta(1)) - self.failUnless(timedelta(0, 1)) - self.failUnless(timedelta(0, 0, 1)) - self.failUnless(timedelta(microseconds=1)) - self.failUnless(not timedelta(0)) + self.assertTrue(timedelta(1)) + self.assertTrue(timedelta(0, 1)) + self.assertTrue(timedelta(0, 0, 1)) + self.assertTrue(timedelta(microseconds=1)) + self.assertTrue(not timedelta(0)) def test_subclass_timedelta(self): @@ -448,17 +448,17 @@ class TestTimeDelta(HarmlessMixedComparison, unittest.TestCase): return round(sum) t1 = T(days=1) - self.assert_(type(t1) is T) + self.assertTrue(type(t1) is T) self.assertEqual(t1.as_hours(), 24) t2 = T(days=-1, seconds=-3600) - self.assert_(type(t2) is T) + self.assertTrue(type(t2) is T) self.assertEqual(t2.as_hours(), -25) t3 = t1 + t2 - self.assert_(type(t3) is timedelta) + self.assertTrue(type(t3) is timedelta) t4 = T.from_td(t3) - self.assert_(type(t4) is T) + self.assertTrue(type(t4) is T) self.assertEqual(t3.days, t4.days) self.assertEqual(t3.seconds, t4.seconds) self.assertEqual(t3.microseconds, t4.microseconds) @@ -521,7 +521,7 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase): self.theclass.today()): # Verify dt -> string -> date identity. s = repr(dt) - self.failUnless(s.startswith('datetime.')) + self.assertTrue(s.startswith('datetime.')) s = s[9:] dt2 = eval(s) self.assertEqual(dt, dt2) @@ -755,7 +755,7 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase): # It worked or it didn't. If it didn't, assume it's reason #2, and # let the test pass if they're within half a second of each other. - self.failUnless(today == todayagain or + self.assertTrue(today == todayagain or abs(todayagain - today) < timedelta(seconds=0.5)) def test_weekday(self): @@ -891,10 +891,10 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase): self.assertEqual(b.__format__(fmt), 'B') def test_resolution_info(self): - self.assert_(isinstance(self.theclass.min, self.theclass)) - self.assert_(isinstance(self.theclass.max, self.theclass)) - self.assert_(isinstance(self.theclass.resolution, timedelta)) - self.assert_(self.theclass.max > self.theclass.min) + self.assertTrue(isinstance(self.theclass.min, self.theclass)) + self.assertTrue(isinstance(self.theclass.max, self.theclass)) + self.assertTrue(isinstance(self.theclass.resolution, timedelta)) + self.assertTrue(self.theclass.max > self.theclass.min) def test_extreme_timedelta(self): big = self.theclass.max - self.theclass.min @@ -943,26 +943,26 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase): t1 = self.theclass(2, 3, 4) t2 = self.theclass(2, 3, 4) self.assertEqual(t1, t2) - self.failUnless(t1 <= t2) - self.failUnless(t1 >= t2) - self.failUnless(not t1 != t2) - self.failUnless(not t1 < t2) - self.failUnless(not t1 > t2) + self.assertTrue(t1 <= t2) + self.assertTrue(t1 >= t2) + self.assertTrue(not t1 != t2) + self.assertTrue(not t1 < t2) + self.assertTrue(not t1 > t2) for args in (3, 3, 3), (2, 4, 4), (2, 3, 5): t2 = self.theclass(*args) # this is larger than t1 - self.failUnless(t1 < t2) - self.failUnless(t2 > t1) - self.failUnless(t1 <= t2) - self.failUnless(t2 >= t1) - self.failUnless(t1 != t2) - self.failUnless(t2 != t1) - self.failUnless(not t1 == t2) - self.failUnless(not t2 == t1) - self.failUnless(not t1 > t2) - self.failUnless(not t2 < t1) - self.failUnless(not t1 >= t2) - self.failUnless(not t2 <= t1) + self.assertTrue(t1 < t2) + self.assertTrue(t2 > t1) + self.assertTrue(t1 <= t2) + self.assertTrue(t2 >= t1) + self.assertTrue(t1 != t2) + self.assertTrue(t2 != t1) + self.assertTrue(not t1 == t2) + self.assertTrue(not t2 == t1) + self.assertTrue(not t1 > t2) + self.assertTrue(not t2 < t1) + self.assertTrue(not t1 >= t2) + self.assertTrue(not t2 <= t1) for badarg in OTHERSTUFF: self.assertEqual(t1 == badarg, False) @@ -1031,8 +1031,8 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase): def test_bool(self): # All dates are considered true. - self.failUnless(self.theclass.min) - self.failUnless(self.theclass.max) + self.assertTrue(self.theclass.min) + self.assertTrue(self.theclass.max) def test_strftime_out_of_range(self): # For nasty technical reasons, we can't handle years before 1900. @@ -1155,7 +1155,7 @@ class TestDateTime(TestDate): self.theclass.now()): # Verify dt -> string -> datetime identity. s = repr(dt) - self.failUnless(s.startswith('datetime.')) + self.assertTrue(s.startswith('datetime.')) s = s[9:] dt2 = eval(s) self.assertEqual(dt, dt2) @@ -1228,7 +1228,7 @@ class TestDateTime(TestDate): dt2 = self.theclass(2002, 3, 1, 10, 0, 0) dt3 = self.theclass(2002, 3, 1, 9, 0, 0) self.assertEqual(dt1, dt3) - self.assert_(dt2 > dt3) + self.assertTrue(dt2 > dt3) # Make sure comparison doesn't forget microseconds, and isn't done # via comparing a float timestamp (an IEEE double doesn't have enough @@ -1239,7 +1239,7 @@ class TestDateTime(TestDate): us = timedelta(microseconds=1) dt2 = dt1 + us self.assertEqual(dt2 - dt1, us) - self.assert_(dt1 < dt2) + self.assertTrue(dt1 < dt2) def test_strftime_with_bad_tzname_replace(self): # verify ok if tzinfo.tzname().replace() returns a non-string @@ -1420,28 +1420,28 @@ class TestDateTime(TestDate): t1 = self.theclass(*args) t2 = self.theclass(*args) self.assertEqual(t1, t2) - self.failUnless(t1 <= t2) - self.failUnless(t1 >= t2) - self.failUnless(not t1 != t2) - self.failUnless(not t1 < t2) - self.failUnless(not t1 > t2) + self.assertTrue(t1 <= t2) + self.assertTrue(t1 >= t2) + self.assertTrue(not t1 != t2) + self.assertTrue(not t1 < t2) + self.assertTrue(not t1 > t2) for i in range(len(args)): newargs = args[:] newargs[i] = args[i] + 1 t2 = self.theclass(*newargs) # this is larger than t1 - self.failUnless(t1 < t2) - self.failUnless(t2 > t1) - self.failUnless(t1 <= t2) - self.failUnless(t2 >= t1) - self.failUnless(t1 != t2) - self.failUnless(t2 != t1) - self.failUnless(not t1 == t2) - self.failUnless(not t2 == t1) - self.failUnless(not t1 > t2) - self.failUnless(not t2 < t1) - self.failUnless(not t1 >= t2) - self.failUnless(not t2 <= t1) + self.assertTrue(t1 < t2) + self.assertTrue(t2 > t1) + self.assertTrue(t1 <= t2) + self.assertTrue(t2 >= t1) + self.assertTrue(t1 != t2) + self.assertTrue(t2 != t1) + self.assertTrue(not t1 == t2) + self.assertTrue(not t2 == t1) + self.assertTrue(not t1 > t2) + self.assertTrue(not t2 < t1) + self.assertTrue(not t1 >= t2) + self.assertTrue(not t2 <= t1) # A helper for timestamp constructor tests. @@ -1520,7 +1520,7 @@ class TestDateTime(TestDate): if abs(from_timestamp - from_now) <= tolerance: break # Else try again a few times. - self.failUnless(abs(from_timestamp - from_now) <= tolerance) + self.assertTrue(abs(from_timestamp - from_now) <= tolerance) def test_strptime(self): import _strptime @@ -1689,7 +1689,7 @@ class TestTime(HarmlessMixedComparison, unittest.TestCase): # Verify t -> string -> time identity. s = repr(t) - self.failUnless(s.startswith('datetime.')) + self.assertTrue(s.startswith('datetime.')) s = s[9:] t2 = eval(s) self.assertEqual(t, t2) @@ -1704,28 +1704,28 @@ class TestTime(HarmlessMixedComparison, unittest.TestCase): t1 = self.theclass(*args) t2 = self.theclass(*args) self.assertEqual(t1, t2) - self.failUnless(t1 <= t2) - self.failUnless(t1 >= t2) - self.failUnless(not t1 != t2) - self.failUnless(not t1 < t2) - self.failUnless(not t1 > t2) + self.assertTrue(t1 <= t2) + self.assertTrue(t1 >= t2) + self.assertTrue(not t1 != t2) + self.assertTrue(not t1 < t2) + self.assertTrue(not t1 > t2) for i in range(len(args)): newargs = args[:] newargs[i] = args[i] + 1 t2 = self.theclass(*newargs) # this is larger than t1 - self.failUnless(t1 < t2) - self.failUnless(t2 > t1) - self.failUnless(t1 <= t2) - self.failUnless(t2 >= t1) - self.failUnless(t1 != t2) - self.failUnless(t2 != t1) - self.failUnless(not t1 == t2) - self.failUnless(not t2 == t1) - self.failUnless(not t1 > t2) - self.failUnless(not t2 < t1) - self.failUnless(not t1 >= t2) - self.failUnless(not t2 <= t1) + self.assertTrue(t1 < t2) + self.assertTrue(t2 > t1) + self.assertTrue(t1 <= t2) + self.assertTrue(t2 >= t1) + self.assertTrue(t1 != t2) + self.assertTrue(t2 != t1) + self.assertTrue(not t1 == t2) + self.assertTrue(not t2 == t1) + self.assertTrue(not t1 > t2) + self.assertTrue(not t2 < t1) + self.assertTrue(not t1 >= t2) + self.assertTrue(not t2 <= t1) for badarg in OTHERSTUFF: self.assertEqual(t1 == badarg, False) @@ -1876,10 +1876,10 @@ class TestTime(HarmlessMixedComparison, unittest.TestCase): "%s(23, 15)" % name) def test_resolution_info(self): - self.assert_(isinstance(self.theclass.min, self.theclass)) - self.assert_(isinstance(self.theclass.max, self.theclass)) - self.assert_(isinstance(self.theclass.resolution, timedelta)) - self.assert_(self.theclass.max > self.theclass.min) + self.assertTrue(isinstance(self.theclass.min, self.theclass)) + self.assertTrue(isinstance(self.theclass.max, self.theclass)) + self.assertTrue(isinstance(self.theclass.resolution, timedelta)) + self.assertTrue(self.theclass.max > self.theclass.min) def test_pickling(self): args = 20, 59, 16, 64**2 @@ -1899,12 +1899,12 @@ class TestTime(HarmlessMixedComparison, unittest.TestCase): def test_bool(self): cls = self.theclass - self.failUnless(cls(1)) - self.failUnless(cls(0, 1)) - self.failUnless(cls(0, 0, 1)) - self.failUnless(cls(0, 0, 0, 1)) - self.failUnless(not cls(0)) - self.failUnless(not cls()) + self.assertTrue(cls(1)) + self.assertTrue(cls(0, 1)) + self.assertTrue(cls(0, 0, 1)) + self.assertTrue(cls(0, 0, 0, 1)) + self.assertTrue(not cls(0)) + self.assertTrue(not cls()) def test_replace(self): cls = self.theclass @@ -2001,7 +2001,7 @@ class TZInfoBase: def utcoffset(self, dt): pass b = BetterTry() t = cls(1, 1, 1, tzinfo=b) - self.failUnless(t.tzinfo is b) + self.assertTrue(t.tzinfo is b) def test_utc_offset_out_of_bounds(self): class Edgy(tzinfo): @@ -2040,9 +2040,9 @@ class TZInfoBase: for t in (cls(1, 1, 1), cls(1, 1, 1, tzinfo=None), cls(1, 1, 1, tzinfo=C1())): - self.failUnless(t.utcoffset() is None) - self.failUnless(t.dst() is None) - self.failUnless(t.tzname() is None) + self.assertTrue(t.utcoffset() is None) + self.assertTrue(t.dst() is None) + self.assertTrue(t.tzname() is None) class C3(tzinfo): def utcoffset(self, dt): return timedelta(minutes=-1439) @@ -2137,7 +2137,7 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase): self.assertEqual(t.minute, 0) self.assertEqual(t.second, 0) self.assertEqual(t.microsecond, 0) - self.failUnless(t.tzinfo is None) + self.assertTrue(t.tzinfo is None) def test_zones(self): est = FixedOffset(-300, "EST", 1) @@ -2152,25 +2152,25 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase): self.assertEqual(t1.tzinfo, est) self.assertEqual(t2.tzinfo, utc) self.assertEqual(t3.tzinfo, met) - self.failUnless(t4.tzinfo is None) + self.assertTrue(t4.tzinfo is None) self.assertEqual(t5.tzinfo, utc) self.assertEqual(t1.utcoffset(), timedelta(minutes=-300)) self.assertEqual(t2.utcoffset(), timedelta(minutes=0)) self.assertEqual(t3.utcoffset(), timedelta(minutes=60)) - self.failUnless(t4.utcoffset() is None) + self.assertTrue(t4.utcoffset() is None) self.assertRaises(TypeError, t1.utcoffset, "no args") self.assertEqual(t1.tzname(), "EST") self.assertEqual(t2.tzname(), "UTC") self.assertEqual(t3.tzname(), "MET") - self.failUnless(t4.tzname() is None) + self.assertTrue(t4.tzname() is None) self.assertRaises(TypeError, t1.tzname, "no args") self.assertEqual(t1.dst(), timedelta(minutes=1)) self.assertEqual(t2.dst(), timedelta(minutes=-2)) self.assertEqual(t3.dst(), timedelta(minutes=3)) - self.failUnless(t4.dst() is None) + self.assertTrue(t4.dst() is None) self.assertRaises(TypeError, t1.dst, "no args") self.assertEqual(hash(t1), hash(t2)) @@ -2246,7 +2246,7 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase): green = pickler.dumps(orig, proto) derived = unpickler.loads(green) self.assertEqual(orig, derived) - self.failUnless(isinstance(derived.tzinfo, PicklableFixedOffset)) + self.assertTrue(isinstance(derived.tzinfo, PicklableFixedOffset)) self.assertEqual(derived.utcoffset(), timedelta(minutes=-300)) self.assertEqual(derived.tzname(), 'cookie') @@ -2255,20 +2255,20 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase): cls = self.theclass t = cls(0, tzinfo=FixedOffset(-300, "")) - self.failUnless(t) + self.assertTrue(t) t = cls(5, tzinfo=FixedOffset(-300, "")) - self.failUnless(t) + self.assertTrue(t) t = cls(5, tzinfo=FixedOffset(300, "")) - self.failUnless(not t) + self.assertTrue(not t) t = cls(23, 59, tzinfo=FixedOffset(23*60 + 59, "")) - self.failUnless(not t) + self.assertTrue(not t) # Mostly ensuring this doesn't overflow internally. t = cls(0, tzinfo=FixedOffset(23*60 + 59, "")) - self.failUnless(t) + self.assertTrue(t) # But this should yield a value error -- the utcoffset is bogus. t = cls(0, tzinfo=FixedOffset(24*60, "")) @@ -2302,13 +2302,13 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase): # Ensure we can get rid of a tzinfo. self.assertEqual(base.tzname(), "+100") base2 = base.replace(tzinfo=None) - self.failUnless(base2.tzinfo is None) - self.failUnless(base2.tzname() is None) + self.assertTrue(base2.tzinfo is None) + self.assertTrue(base2.tzname() is None) # Ensure we can add one. base3 = base2.replace(tzinfo=z100) self.assertEqual(base, base3) - self.failUnless(base.tzinfo is base3.tzinfo) + self.assertTrue(base.tzinfo is base3.tzinfo) # Out of bounds. base = cls(1) @@ -2345,7 +2345,7 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase): # But if they're not identical, it isn't ignored. t2 = t2.replace(tzinfo=Varies()) - self.failUnless(t1 < t2) # t1's offset counter still going up + self.assertTrue(t1 < t2) # t1's offset counter still going up def test_subclass_timetz(self): @@ -2401,9 +2401,9 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): tzinfo=FixedOffset(-1439, "")) # Make sure those compare correctly, and w/o overflow. - self.failUnless(t1 < t2) - self.failUnless(t1 != t2) - self.failUnless(t2 > t1) + self.assertTrue(t1 < t2) + self.assertTrue(t1 != t2) + self.assertTrue(t2 > t1) self.assertEqual(t1, t1) self.assertEqual(t2, t2) @@ -2415,21 +2415,21 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): # Change t1 not to subtract a minute, and t1 should be larger. t1 = self.theclass(1, 12, 31, 23, 59, tzinfo=FixedOffset(0, "")) - self.failUnless(t1 > t2) + self.assertTrue(t1 > t2) # Change t1 to subtract 2 minutes, and t1 should be smaller. t1 = self.theclass(1, 12, 31, 23, 59, tzinfo=FixedOffset(2, "")) - self.failUnless(t1 < t2) + self.assertTrue(t1 < t2) # Back to the original t1, but make seconds resolve it. t1 = self.theclass(1, 12, 31, 23, 59, tzinfo=FixedOffset(1, ""), second=1) - self.failUnless(t1 > t2) + self.assertTrue(t1 > t2) # Likewise, but make microseconds resolve it. t1 = self.theclass(1, 12, 31, 23, 59, tzinfo=FixedOffset(1, ""), microsecond=1) - self.failUnless(t1 > t2) + self.assertTrue(t1 > t2) # Make t2 naive and it should fail. t2 = self.theclass.min @@ -2473,7 +2473,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): green = pickler.dumps(orig, proto) derived = unpickler.loads(green) self.assertEqual(orig, derived) - self.failUnless(isinstance(derived.tzinfo, + self.assertTrue(isinstance(derived.tzinfo, PicklableFixedOffset)) self.assertEqual(derived.utcoffset(), timedelta(minutes=-300)) self.assertEqual(derived.tzname(), 'cookie') @@ -2544,7 +2544,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): tz55 = FixedOffset(-330, "west 5:30") timeaware = now.time().replace(tzinfo=tz55) nowaware = self.theclass.combine(now.date(), timeaware) - self.failUnless(nowaware.tzinfo is tz55) + self.assertTrue(nowaware.tzinfo is tz55) self.assertEqual(nowaware.timetz(), timeaware) # Can't mix aware and non-aware. @@ -2563,15 +2563,15 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): # Adding a delta should preserve tzinfo. delta = timedelta(weeks=1, minutes=12, microseconds=5678) nowawareplus = nowaware + delta - self.failUnless(nowaware.tzinfo is tz55) + self.assertTrue(nowaware.tzinfo is tz55) nowawareplus2 = delta + nowaware - self.failUnless(nowawareplus2.tzinfo is tz55) + self.assertTrue(nowawareplus2.tzinfo is tz55) self.assertEqual(nowawareplus, nowawareplus2) # that - delta should be what we started with, and that - what we # started with should be delta. diff = nowawareplus - delta - self.failUnless(diff.tzinfo is tz55) + self.assertTrue(diff.tzinfo is tz55) self.assertEqual(nowaware, diff) self.assertRaises(TypeError, lambda: delta - nowawareplus) self.assertEqual(nowawareplus - nowaware, delta) @@ -2580,7 +2580,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): tzr = FixedOffset(random.randrange(-1439, 1440), "randomtimezone") # Attach it to nowawareplus. nowawareplus = nowawareplus.replace(tzinfo=tzr) - self.failUnless(nowawareplus.tzinfo is tzr) + self.assertTrue(nowawareplus.tzinfo is tzr) # Make sure the difference takes the timezone adjustments into account. got = nowaware - nowawareplus # Expected: (nowaware base - nowaware offset) - @@ -2607,7 +2607,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): off42 = FixedOffset(42, "42") another = meth(off42) again = meth(tz=off42) - self.failUnless(another.tzinfo is again.tzinfo) + self.assertTrue(another.tzinfo is again.tzinfo) self.assertEqual(another.utcoffset(), timedelta(minutes=42)) # Bad argument with and w/o naming the keyword. self.assertRaises(TypeError, meth, 16) @@ -2624,7 +2624,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): utc = FixedOffset(0, "utc", 0) for dummy in range(3): now = datetime.now(weirdtz) - self.failUnless(now.tzinfo is weirdtz) + self.assertTrue(now.tzinfo is weirdtz) utcnow = datetime.utcnow().replace(tzinfo=utc) now2 = utcnow.astimezone(weirdtz) if abs(now - now2) < timedelta(seconds=30): @@ -2645,7 +2645,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): off42 = FixedOffset(42, "42") another = meth(ts, off42) again = meth(ts, tz=off42) - self.failUnless(another.tzinfo is again.tzinfo) + self.assertTrue(another.tzinfo is again.tzinfo) self.assertEqual(another.utcoffset(), timedelta(minutes=42)) # Bad argument with and w/o naming the keyword. self.assertRaises(TypeError, meth, ts, 16) @@ -2840,13 +2840,13 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): # Ensure we can get rid of a tzinfo. self.assertEqual(base.tzname(), "+100") base2 = base.replace(tzinfo=None) - self.failUnless(base2.tzinfo is None) - self.failUnless(base2.tzname() is None) + self.assertTrue(base2.tzinfo is None) + self.assertTrue(base2.tzname() is None) # Ensure we can add one. base3 = base2.replace(tzinfo=z100) self.assertEqual(base, base3) - self.failUnless(base.tzinfo is base3.tzinfo) + self.assertTrue(base.tzinfo is base3.tzinfo) # Out of bounds. base = cls(2000, 2, 29) @@ -2859,20 +2859,20 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): fm5h = FixedOffset(-timedelta(hours=5), "m300") dt = self.theclass.now(tz=f44m) - self.failUnless(dt.tzinfo is f44m) + self.assertTrue(dt.tzinfo is f44m) # Replacing with degenerate tzinfo raises an exception. self.assertRaises(ValueError, dt.astimezone, fnone) # Ditto with None tz. self.assertRaises(TypeError, dt.astimezone, None) # Replacing with same tzinfo makes no change. x = dt.astimezone(dt.tzinfo) - self.failUnless(x.tzinfo is f44m) + self.assertTrue(x.tzinfo is f44m) self.assertEqual(x.date(), dt.date()) self.assertEqual(x.time(), dt.time()) # Replacing with different tzinfo does adjust. got = dt.astimezone(fm5h) - self.failUnless(got.tzinfo is fm5h) + self.assertTrue(got.tzinfo is fm5h) self.assertEqual(got.utcoffset(), timedelta(hours=-5)) expected = dt - dt.utcoffset() # in effect, convert to UTC expected += fm5h.utcoffset(dt) # and from there to local time @@ -2880,7 +2880,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): self.assertEqual(got.date(), expected.date()) self.assertEqual(got.time(), expected.time()) self.assertEqual(got.timetz(), expected.timetz()) - self.failUnless(got.tzinfo is expected.tzinfo) + self.assertTrue(got.tzinfo is expected.tzinfo) self.assertEqual(got, expected) def test_aware_subtract(self): @@ -2955,7 +2955,7 @@ class TestDateTimeTZ(TestDateTime, TZInfoBase, unittest.TestCase): # But if they're not identical, it isn't ignored. t2 = t2.replace(tzinfo=Varies()) - self.failUnless(t1 < t2) # t1's offset counter still going up + self.assertTrue(t1 < t2) # t1's offset counter still going up def test_subclass_datetimetz(self): @@ -3306,10 +3306,10 @@ class Oddballs(unittest.TestCase): # type comparison, despite that datetime is a subclass of date. as_date = date.today() as_datetime = datetime.combine(as_date, time()) - self.assert_(as_date != as_datetime) - self.assert_(as_datetime != as_date) - self.assert_(not as_date == as_datetime) - self.assert_(not as_datetime == as_date) + self.assertTrue(as_date != as_datetime) + self.assertTrue(as_datetime != as_date) + self.assertTrue(not as_date == as_datetime) + self.assertTrue(not as_datetime == as_date) self.assertRaises(TypeError, lambda: as_date < as_datetime) self.assertRaises(TypeError, lambda: as_datetime < as_date) self.assertRaises(TypeError, lambda: as_date <= as_datetime) diff --git a/Lib/test/test_dbm.py b/Lib/test/test_dbm.py index 35d12e4..818be45 100644 --- a/Lib/test/test_dbm.py +++ b/Lib/test/test_dbm.py @@ -57,7 +57,7 @@ class AnyDBMTestCase(unittest.TestCase): return keys def test_error(self): - self.assert_(issubclass(self.module.error, IOError)) + self.assertTrue(issubclass(self.module.error, IOError)) def test_anydbm_not_existing(self): self.assertRaises(dbm.error, dbm.open, _fname) @@ -154,9 +154,9 @@ class WhichDBTestCase(unittest.TestCase): self.d[k] = v self.assertEqual(sorted(self.d.keys()), sorted(k for (k, v) in a)) for k, v in a: - self.assert_(k in self.d) + self.assertTrue(k in self.d) self.assertEqual(self.d[k], v) - self.assert_(b'xxx' not in self.d) + self.assertTrue(b'xxx' not in self.d) self.assertRaises(KeyError, lambda: self.d[b'xxx']) self.d.close() diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py index e2964aa..956eec6 100644 --- a/Lib/test/test_dbm_dumb.py +++ b/Lib/test/test_dbm_dumb.py @@ -118,7 +118,7 @@ class DumbDBMTestCase(unittest.TestCase): f['1'] = 'a' f.close() f = dumbdbm.open(_fname, 'r') - self.assert_('\u00fc' in f) + self.assertTrue('\u00fc' in f) self.assertEqual(f['\u00fc'.encode('utf-8')], self._dict['\u00fc'.encode('utf-8')]) self.assertEqual(f[b'1'], b'a') diff --git a/Lib/test/test_dbm_gnu.py b/Lib/test/test_dbm_gnu.py index 857aeb1..2173b92 100755 --- a/Lib/test/test_dbm_gnu.py +++ b/Lib/test/test_dbm_gnu.py @@ -24,11 +24,11 @@ class TestGdbm(unittest.TestCase): self.g[b'bytes'] = b'data' key_set = set(self.g.keys()) self.assertEqual(key_set, set([b'a', b'bytes', b'12345678910'])) - self.assert_(b'a' in self.g) + self.assertTrue(b'a' in self.g) self.assertEqual(self.g[b'bytes'], b'data') key = self.g.firstkey() while key: - self.assert_(key in key_set) + self.assertTrue(key in key_set) key_set.remove(key) key = self.g.nextkey(key) self.assertRaises(KeyError, lambda: self.g['xxx']) @@ -66,7 +66,7 @@ class TestGdbm(unittest.TestCase): self.g['x'] = 'x' * 10000 size1 = os.path.getsize(filename) - self.assert_(size0 < size1) + self.assertTrue(size0 < size1) del self.g['x'] # 'size' is supposed to be the same even after deleting an entry. @@ -74,7 +74,7 @@ class TestGdbm(unittest.TestCase): self.g.reorganize() size2 = os.path.getsize(filename) - self.assert_(size1 > size2 >= size0) + self.assertTrue(size1 > size2 >= size0) def test_main(): diff --git a/Lib/test/test_dbm_ndbm.py b/Lib/test/test_dbm_ndbm.py index c5e968f..141d4b3 100755 --- a/Lib/test/test_dbm_ndbm.py +++ b/Lib/test/test_dbm_ndbm.py @@ -19,12 +19,12 @@ class DbmTestCase(unittest.TestCase): def test_keys(self): self.d = dbm.ndbm.open(self.filename, 'c') - self.assert_(self.d.keys() == []) + self.assertTrue(self.d.keys() == []) self.d['a'] = 'b' self.d[b'bytes'] = b'data' self.d['12345678910'] = '019237410982340912840198242' self.d.keys() - self.assert_(b'a' in self.d) + self.assertTrue(b'a' in self.d) self.assertEqual(self.d[b'bytes'], b'data') self.d.close() diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 01deeed..927fd1a 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -504,7 +504,7 @@ class DecimalExplicitConstructionTest(unittest.TestCase): # from int d = nc.create_decimal(456) - self.failUnless(isinstance(d, Decimal)) + self.assertTrue(isinstance(d, Decimal)) self.assertEqual(nc.create_decimal(45678), nc.create_decimal('457E+2')) @@ -1056,12 +1056,12 @@ class DecimalArithmeticOperatorsTest(unittest.TestCase): f = Decimal('2') for x, y in [(n, n), (n, i), (i, n), (n, f), (f, n), (s, n), (n, s), (s, i), (i, s), (s, f), (f, s), (s, s)]: - self.assert_(x != y) - self.assert_(not (x == y)) - self.assert_(not (x < y)) - self.assert_(not (x <= y)) - self.assert_(not (x > y)) - self.assert_(not (x >= y)) + self.assertTrue(x != y) + self.assertTrue(not (x == y)) + self.assertTrue(not (x < y)) + self.assertTrue(not (x <= y)) + self.assertTrue(not (x > y)) + self.assertTrue(not (x >= y)) # The following are two functions used to test threading in the next class @@ -1134,18 +1134,18 @@ class DecimalUsabilityTest(unittest.TestCase): dc = Decimal('45') #two Decimals - self.failUnless(dc > da) - self.failUnless(dc >= da) - self.failUnless(da < dc) - self.failUnless(da <= dc) + self.assertTrue(dc > da) + self.assertTrue(dc >= da) + self.assertTrue(da < dc) + self.assertTrue(da <= dc) self.assertEqual(da, db) - self.failUnless(da != dc) - self.failUnless(da <= db) - self.failUnless(da >= db) + self.assertTrue(da != dc) + self.assertTrue(da <= db) + self.assertTrue(da >= db) #a Decimal and an int - self.failUnless(dc > 23) - self.failUnless(23 < dc) + self.assertTrue(dc > 23) + self.assertTrue(23 < dc) self.assertEqual(dc, 45) #a Decimal and uncomparable @@ -1206,8 +1206,8 @@ class DecimalUsabilityTest(unittest.TestCase): #the same hash that to an int self.assertEqual(hash(Decimal(23)), hash(23)) self.assertRaises(TypeError, hash, Decimal('NaN')) - self.assert_(hash(Decimal('Inf'))) - self.assert_(hash(Decimal('-Inf'))) + self.assertTrue(hash(Decimal('Inf'))) + self.assertTrue(hash(Decimal('-Inf'))) # check that the value of the hash doesn't depend on the # current context (issue #1757) @@ -1234,22 +1234,22 @@ class DecimalUsabilityTest(unittest.TestCase): l2 = 28 #between Decimals - self.failUnless(min(d1,d2) is d1) - self.failUnless(min(d2,d1) is d1) - self.failUnless(max(d1,d2) is d2) - self.failUnless(max(d2,d1) is d2) + self.assertTrue(min(d1,d2) is d1) + self.assertTrue(min(d2,d1) is d1) + self.assertTrue(max(d1,d2) is d2) + self.assertTrue(max(d2,d1) is d2) #between Decimal and long - self.failUnless(min(d1,l2) is d1) - self.failUnless(min(l2,d1) is d1) - self.failUnless(max(l1,d2) is d2) - self.failUnless(max(d2,l1) is d2) + self.assertTrue(min(d1,l2) is d1) + self.assertTrue(min(l2,d1) is d1) + self.assertTrue(max(l1,d2) is d2) + self.assertTrue(max(d2,l1) is d2) def test_as_nonzero(self): #as false - self.failIf(Decimal(0)) + self.assertFalse(Decimal(0)) #as true - self.failUnless(Decimal('0.372')) + self.assertTrue(Decimal('0.372')) def test_tostring_methods(self): #Test str and repr methods. @@ -1519,10 +1519,10 @@ class DecimalUsabilityTest(unittest.TestCase): class DecimalPythonAPItests(unittest.TestCase): def test_abc(self): - self.assert_(issubclass(Decimal, numbers.Number)) - self.assert_(not issubclass(Decimal, numbers.Real)) - self.assert_(isinstance(Decimal(0), numbers.Number)) - self.assert_(not isinstance(Decimal(0), numbers.Real)) + self.assertTrue(issubclass(Decimal, numbers.Number)) + self.assertTrue(not issubclass(Decimal, numbers.Real)) + self.assertTrue(isinstance(Decimal(0), numbers.Number)) + self.assertTrue(not isinstance(Decimal(0), numbers.Real)) def test_pickle(self): d = Decimal('-3.141590000') @@ -1561,9 +1561,9 @@ class DecimalPythonAPItests(unittest.TestCase): '0.1000000000000000055511151231257827021181583404541015625') bigint = 12345678901234567890123456789 self.assertEqual(MyDecimal.from_float(bigint), MyDecimal(bigint)) - self.assert_(MyDecimal.from_float(float('nan')).is_qnan()) - self.assert_(MyDecimal.from_float(float('inf')).is_infinite()) - self.assert_(MyDecimal.from_float(float('-inf')).is_infinite()) + self.assertTrue(MyDecimal.from_float(float('nan')).is_qnan()) + self.assertTrue(MyDecimal.from_float(float('inf')).is_infinite()) + self.assertTrue(MyDecimal.from_float(float('-inf')).is_infinite()) self.assertEqual(str(MyDecimal.from_float(float('nan'))), str(Decimal('NaN'))) self.assertEqual(str(MyDecimal.from_float(float('inf'))), @@ -1610,8 +1610,8 @@ class ContextAPItests(unittest.TestCase): self.assertEqual(v1, v2) def test_equality_with_other_types(self): - self.assert_(Decimal(10) in ['a', 1.0, Decimal(10), (1,2), {}]) - self.assert_(Decimal(10) not in ['a', 1.0, (1,2), {}]) + self.assertTrue(Decimal(10) in ['a', 1.0, Decimal(10), (1,2), {}]) + self.assertTrue(Decimal(10) not in ['a', 1.0, (1,2), {}]) def test_copy(self): # All copies should be deep @@ -1631,9 +1631,9 @@ class WithStatementTest(unittest.TestCase): with localcontext() as enter_ctx: set_ctx = getcontext() final_ctx = getcontext() - self.assert_(orig_ctx is final_ctx, 'did not restore context correctly') - self.assert_(orig_ctx is not set_ctx, 'did not copy the context') - self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context') + self.assertTrue(orig_ctx is final_ctx, 'did not restore context correctly') + self.assertTrue(orig_ctx is not set_ctx, 'did not copy the context') + self.assertTrue(set_ctx is enter_ctx, '__enter__ returned wrong context') def test_localcontextarg(self): # Use a copy of the supplied context in the block @@ -1642,10 +1642,10 @@ class WithStatementTest(unittest.TestCase): with localcontext(new_ctx) as enter_ctx: set_ctx = getcontext() final_ctx = getcontext() - self.assert_(orig_ctx is final_ctx, 'did not restore context correctly') - self.assert_(set_ctx.prec == new_ctx.prec, 'did not set correct context') - self.assert_(new_ctx is not set_ctx, 'did not copy the context') - self.assert_(set_ctx is enter_ctx, '__enter__ returned wrong context') + self.assertTrue(orig_ctx is final_ctx, 'did not restore context correctly') + self.assertTrue(set_ctx.prec == new_ctx.prec, 'did not set correct context') + self.assertTrue(new_ctx is not set_ctx, 'did not copy the context') + self.assertTrue(set_ctx is enter_ctx, '__enter__ returned wrong context') class ContextFlags(unittest.TestCase): def test_flags_irrelevant(self): diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py index 76fc6a6..e5a9bd5 100644 --- a/Lib/test/test_defaultdict.py +++ b/Lib/test/test_defaultdict.py @@ -25,21 +25,21 @@ class TestDefaultDict(unittest.TestCase): d1[13] d1[14] self.assertEqual(d1, {12: [42, 24], 13: [], 14: []}) - self.assert_(d1[12] is not d1[13] is not d1[14]) + self.assertTrue(d1[12] is not d1[13] is not d1[14]) d2 = defaultdict(list, foo=1, bar=2) self.assertEqual(d2.default_factory, list) self.assertEqual(d2, {"foo": 1, "bar": 2}) self.assertEqual(d2["foo"], 1) self.assertEqual(d2["bar"], 2) self.assertEqual(d2[42], []) - self.assert_("foo" in d2) - self.assert_("foo" in d2.keys()) - self.assert_("bar" in d2) - self.assert_("bar" in d2.keys()) - self.assert_(42 in d2) - self.assert_(42 in d2.keys()) - self.assert_(12 not in d2) - self.assert_(12 not in d2.keys()) + self.assertTrue("foo" in d2) + self.assertTrue("foo" in d2.keys()) + self.assertTrue("bar" in d2) + self.assertTrue("bar" in d2.keys()) + self.assertTrue(42 in d2) + self.assertTrue(42 in d2.keys()) + self.assertTrue(12 not in d2) + self.assertTrue(12 not in d2.keys()) d2.default_factory = None self.assertEqual(d2.default_factory, None) try: @@ -69,7 +69,7 @@ class TestDefaultDict(unittest.TestCase): self.assertEqual(repr(d2), "defaultdict(, {12: 42})") def foo(): return 43 d3 = defaultdict(foo) - self.assert_(d3.default_factory is foo) + self.assertTrue(d3.default_factory is foo) d3[13] self.assertEqual(repr(d3), "defaultdict(%s, {13: 43})" % repr(foo)) @@ -134,7 +134,7 @@ class TestDefaultDict(unittest.TestCase): d2 = copy.deepcopy(d1) self.assertEqual(d2.default_factory, foobar) self.assertEqual(d2, d1) - self.assert_(d1[1] is not d2[1]) + self.assertTrue(d1[1] is not d2[1]) d1.default_factory = list d2 = copy.deepcopy(d1) self.assertEqual(d2.default_factory, list) @@ -157,7 +157,7 @@ class TestDefaultDict(unittest.TestCase): def _factory(self): return [] d = sub() - self.assert_(repr(d).startswith( + self.assertTrue(repr(d).startswith( "defaultdict(= 0) + self.assertTrue(str(c1).find('C object at ') >= 0) self.assertEqual(str(c1), repr(c1)) - self.assert_(-1 not in c1) + self.assertTrue(-1 not in c1) for i in range(10): - self.assert_(i in c1) + self.assertTrue(i in c1) self.assertFalse(10 in c1) # Test the default behavior for dynamic classes class D(object): @@ -1673,21 +1673,21 @@ order (MRO) for bases """ raise IndexError d1 = D() d2 = D() - self.assert_(not not d1) + self.assertTrue(not not d1) self.assertNotEqual(id(d1), id(d2)) hash(d1) hash(d2) self.assertEqual(d1, d1) self.assertNotEqual(d1, d2) - self.assert_(not d1 != d1) - self.assert_(not d1 == d2) + self.assertTrue(not d1 != d1) + self.assertTrue(not d1 == d2) # Note that the module name appears in str/repr, and that varies # depending on whether this test is run standalone or from a framework. - self.assert_(str(d1).find('D object at ') >= 0) + self.assertTrue(str(d1).find('D object at ') >= 0) self.assertEqual(str(d1), repr(d1)) - self.assert_(-1 not in d1) + self.assertTrue(-1 not in d1) for i in range(10): - self.assert_(i in d1) + self.assertTrue(i in d1) self.assertFalse(10 in d1) # Test overridden behavior class Proxy(object): @@ -1719,22 +1719,22 @@ order (MRO) for bases """ p1 = Proxy(1) p_1 = Proxy(-1) self.assertFalse(p0) - self.assert_(not not p1) + self.assertTrue(not not p1) self.assertEqual(hash(p0), hash(0)) self.assertEqual(p0, p0) self.assertNotEqual(p0, p1) - self.assert_(not p0 != p0) + self.assertTrue(not p0 != p0) self.assertEqual(not p0, p1) - self.assert_(p0 < p1) - self.assert_(p0 <= p1) - self.assert_(p1 > p0) - self.assert_(p1 >= p0) + self.assertTrue(p0 < p1) + self.assertTrue(p0 <= p1) + self.assertTrue(p1 > p0) + self.assertTrue(p1 >= p0) self.assertEqual(str(p0), "Proxy:0") self.assertEqual(repr(p0), "Proxy(0)") p10 = Proxy(range(10)) self.assertFalse(-1 in p10) for i in range(10): - self.assert_(i in p10) + self.assertTrue(i in p10) self.assertFalse(10 in p10) def test_weakrefs(self): @@ -1755,7 +1755,7 @@ order (MRO) for bases """ try: weakref.ref(no) except TypeError as msg: - self.assert_(str(msg).find("weak reference") >= 0) + self.assertTrue(str(msg).find("weak reference") >= 0) else: self.fail("weakref.ref(no) should be illegal") class Weak(object): @@ -1792,18 +1792,18 @@ order (MRO) for bases """ self.assertFalse(hasattr(a, "x")) raw = C.__dict__['x'] - self.assert_(isinstance(raw, property)) + self.assertTrue(isinstance(raw, property)) attrs = dir(raw) - self.assert_("__doc__" in attrs) - self.assert_("fget" in attrs) - self.assert_("fset" in attrs) - self.assert_("fdel" in attrs) + self.assertTrue("__doc__" in attrs) + self.assertTrue("fget" in attrs) + self.assertTrue("fset" in attrs) + self.assertTrue("fdel" in attrs) self.assertEqual(raw.__doc__, "I'm the x property.") - self.assert_(raw.fget is C.__dict__['getx']) - self.assert_(raw.fset is C.__dict__['setx']) - self.assert_(raw.fdel is C.__dict__['delx']) + self.assertTrue(raw.fget is C.__dict__['getx']) + self.assertTrue(raw.fset is C.__dict__['setx']) + self.assertTrue(raw.fdel is C.__dict__['delx']) for attr in "__doc__", "fget", "fset", "fdel": try: @@ -1865,7 +1865,7 @@ order (MRO) for bases """ self.assertEqual(C.foo.__doc__, "hello") self.assertFalse(hasattr(c, "foo")) c.foo = -42 - self.assert_(hasattr(c, '_foo')) + self.assertTrue(hasattr(c, '_foo')) self.assertEqual(c._foo, 42) self.assertEqual(c.foo, 42) del c.foo @@ -2023,12 +2023,12 @@ order (MRO) for bases """ c = C() self.assertEqual(interesting(dir(c)), cstuff) - ## self.assert_('__self__' in dir(C.Cmethod)) + ## self.assertTrue('__self__' in dir(C.Cmethod)) c.cdata = 2 c.cmethod = lambda self: 0 self.assertEqual(interesting(dir(c)), cstuff + ['cdata', 'cmethod']) - ## self.assert_('__self__' in dir(c.Cmethod)) + ## self.assertTrue('__self__' in dir(c.Cmethod)) class A(C): Adata = 1 @@ -2036,13 +2036,13 @@ order (MRO) for bases """ astuff = ['Adata', 'Amethod'] + cstuff self.assertEqual(interesting(dir(A)), astuff) - ## self.assert_('__self__' in dir(A.Amethod)) + ## self.assertTrue('__self__' in dir(A.Amethod)) a = A() self.assertEqual(interesting(dir(a)), astuff) a.adata = 42 a.amethod = lambda self: 3 self.assertEqual(interesting(dir(a)), astuff + ['adata', 'amethod']) - ## self.assert_('__self__' in dir(a.Amethod)) + ## self.assertTrue('__self__' in dir(a.Amethod)) # Try a module subclass. import sys @@ -2226,13 +2226,13 @@ order (MRO) for bases """ a = hexint(12345) self.assertEqual(a, 12345) self.assertEqual(int(a), 12345) - self.assert_(int(a).__class__ is int) + self.assertTrue(int(a).__class__ is int) self.assertEqual(hash(a), hash(12345)) - self.assert_((+a).__class__ is int) - self.assert_((a >> 0).__class__ is int) - self.assert_((a << 0).__class__ is int) - self.assert_((hexint(0) << 12).__class__ is int) - self.assert_((hexint(0) >> 12).__class__ is int) + self.assertTrue((+a).__class__ is int) + self.assertTrue((a >> 0).__class__ is int) + self.assertTrue((a << 0).__class__ is int) + self.assertTrue((hexint(0) << 12).__class__ is int) + self.assertTrue((hexint(0) >> 12).__class__ is int) class octlong(int): __slots__ = [] @@ -2252,36 +2252,36 @@ order (MRO) for bases """ self.assertEqual(a, 12345) self.assertEqual(int(a), 12345) self.assertEqual(hash(a), hash(12345)) - self.assert_(int(a).__class__ is int) - self.assert_((+a).__class__ is int) - self.assert_((-a).__class__ is int) - self.assert_((-octlong(0)).__class__ is int) - self.assert_((a >> 0).__class__ is int) - self.assert_((a << 0).__class__ is int) - self.assert_((a - 0).__class__ is int) - self.assert_((a * 1).__class__ is int) - self.assert_((a ** 1).__class__ is int) - self.assert_((a // 1).__class__ is int) - self.assert_((1 * a).__class__ is int) - self.assert_((a | 0).__class__ is int) - self.assert_((a ^ 0).__class__ is int) - self.assert_((a & -1).__class__ is int) - self.assert_((octlong(0) << 12).__class__ is int) - self.assert_((octlong(0) >> 12).__class__ is int) - self.assert_(abs(octlong(0)).__class__ is int) + self.assertTrue(int(a).__class__ is int) + self.assertTrue((+a).__class__ is int) + self.assertTrue((-a).__class__ is int) + self.assertTrue((-octlong(0)).__class__ is int) + self.assertTrue((a >> 0).__class__ is int) + self.assertTrue((a << 0).__class__ is int) + self.assertTrue((a - 0).__class__ is int) + self.assertTrue((a * 1).__class__ is int) + self.assertTrue((a ** 1).__class__ is int) + self.assertTrue((a // 1).__class__ is int) + self.assertTrue((1 * a).__class__ is int) + self.assertTrue((a | 0).__class__ is int) + self.assertTrue((a ^ 0).__class__ is int) + self.assertTrue((a & -1).__class__ is int) + self.assertTrue((octlong(0) << 12).__class__ is int) + self.assertTrue((octlong(0) >> 12).__class__ is int) + self.assertTrue(abs(octlong(0)).__class__ is int) # Because octlong overrides __add__, we can't check the absence of +0 # optimizations using octlong. class longclone(int): pass a = longclone(1) - self.assert_((a + 0).__class__ is int) - self.assert_((0 + a).__class__ is int) + self.assertTrue((a + 0).__class__ is int) + self.assertTrue((0 + a).__class__ is int) # Check that negative clones don't segfault a = longclone(-1) self.assertEqual(a.__dict__, {}) - self.assertEqual(int(a), -1) # self.assert_ PyNumber_Long() copies the sign bit + self.assertEqual(int(a), -1) # self.assertTrue PyNumber_Long() copies the sign bit class precfloat(float): __slots__ = ['prec'] @@ -2293,9 +2293,9 @@ order (MRO) for bases """ a = precfloat(12345) self.assertEqual(a, 12345.0) self.assertEqual(float(a), 12345.0) - self.assert_(float(a).__class__ is float) + self.assertTrue(float(a).__class__ is float) self.assertEqual(hash(a), hash(12345.0)) - self.assert_((+a).__class__ is float) + self.assertTrue((+a).__class__ is float) class madcomplex(complex): def __repr__(self): @@ -2343,20 +2343,20 @@ order (MRO) for bases """ self.assertEqual(v, t) a = madtuple((1,2,3,4,5)) self.assertEqual(tuple(a), (1,2,3,4,5)) - self.assert_(tuple(a).__class__ is tuple) + self.assertTrue(tuple(a).__class__ is tuple) self.assertEqual(hash(a), hash((1,2,3,4,5))) - self.assert_(a[:].__class__ is tuple) - self.assert_((a * 1).__class__ is tuple) - self.assert_((a * 0).__class__ is tuple) - self.assert_((a + ()).__class__ is tuple) + self.assertTrue(a[:].__class__ is tuple) + self.assertTrue((a * 1).__class__ is tuple) + self.assertTrue((a * 0).__class__ is tuple) + self.assertTrue((a + ()).__class__ is tuple) a = madtuple(()) self.assertEqual(tuple(a), ()) - self.assert_(tuple(a).__class__ is tuple) - self.assert_((a + a).__class__ is tuple) - self.assert_((a * 0).__class__ is tuple) - self.assert_((a * 1).__class__ is tuple) - self.assert_((a * 2).__class__ is tuple) - self.assert_(a[:].__class__ is tuple) + self.assertTrue(tuple(a).__class__ is tuple) + self.assertTrue((a + a).__class__ is tuple) + self.assertTrue((a * 0).__class__ is tuple) + self.assertTrue((a * 1).__class__ is tuple) + self.assertTrue((a * 2).__class__ is tuple) + self.assertTrue(a[:].__class__ is tuple) class madstring(str): _rev = None @@ -2378,48 +2378,48 @@ order (MRO) for bases """ self.assertEqual(u, s) s = madstring("12345") self.assertEqual(str(s), "12345") - self.assert_(str(s).__class__ is str) + self.assertTrue(str(s).__class__ is str) base = "\x00" * 5 s = madstring(base) self.assertEqual(s, base) self.assertEqual(str(s), base) - self.assert_(str(s).__class__ is str) + self.assertTrue(str(s).__class__ is str) self.assertEqual(hash(s), hash(base)) self.assertEqual({s: 1}[base], 1) self.assertEqual({base: 1}[s], 1) - self.assert_((s + "").__class__ is str) + self.assertTrue((s + "").__class__ is str) self.assertEqual(s + "", base) - self.assert_(("" + s).__class__ is str) + self.assertTrue(("" + s).__class__ is str) self.assertEqual("" + s, base) - self.assert_((s * 0).__class__ is str) + self.assertTrue((s * 0).__class__ is str) self.assertEqual(s * 0, "") - self.assert_((s * 1).__class__ is str) + self.assertTrue((s * 1).__class__ is str) self.assertEqual(s * 1, base) - self.assert_((s * 2).__class__ is str) + self.assertTrue((s * 2).__class__ is str) self.assertEqual(s * 2, base + base) - self.assert_(s[:].__class__ is str) + self.assertTrue(s[:].__class__ is str) self.assertEqual(s[:], base) - self.assert_(s[0:0].__class__ is str) + self.assertTrue(s[0:0].__class__ is str) self.assertEqual(s[0:0], "") - self.assert_(s.strip().__class__ is str) + self.assertTrue(s.strip().__class__ is str) self.assertEqual(s.strip(), base) - self.assert_(s.lstrip().__class__ is str) + self.assertTrue(s.lstrip().__class__ is str) self.assertEqual(s.lstrip(), base) - self.assert_(s.rstrip().__class__ is str) + self.assertTrue(s.rstrip().__class__ is str) self.assertEqual(s.rstrip(), base) identitytab = {} - self.assert_(s.translate(identitytab).__class__ is str) + self.assertTrue(s.translate(identitytab).__class__ is str) self.assertEqual(s.translate(identitytab), base) - self.assert_(s.replace("x", "x").__class__ is str) + self.assertTrue(s.replace("x", "x").__class__ is str) self.assertEqual(s.replace("x", "x"), base) - self.assert_(s.ljust(len(s)).__class__ is str) + self.assertTrue(s.ljust(len(s)).__class__ is str) self.assertEqual(s.ljust(len(s)), base) - self.assert_(s.rjust(len(s)).__class__ is str) + self.assertTrue(s.rjust(len(s)).__class__ is str) self.assertEqual(s.rjust(len(s)), base) - self.assert_(s.center(len(s)).__class__ is str) + self.assertTrue(s.center(len(s)).__class__ is str) self.assertEqual(s.center(len(s)), base) - self.assert_(s.lower().__class__ is str) + self.assertTrue(s.lower().__class__ is str) self.assertEqual(s.lower(), base) class madunicode(str): @@ -2438,47 +2438,47 @@ order (MRO) for bases """ base = "12345" u = madunicode(base) self.assertEqual(str(u), base) - self.assert_(str(u).__class__ is str) + self.assertTrue(str(u).__class__ is str) self.assertEqual(hash(u), hash(base)) self.assertEqual({u: 1}[base], 1) self.assertEqual({base: 1}[u], 1) - self.assert_(u.strip().__class__ is str) + self.assertTrue(u.strip().__class__ is str) self.assertEqual(u.strip(), base) - self.assert_(u.lstrip().__class__ is str) + self.assertTrue(u.lstrip().__class__ is str) self.assertEqual(u.lstrip(), base) - self.assert_(u.rstrip().__class__ is str) + self.assertTrue(u.rstrip().__class__ is str) self.assertEqual(u.rstrip(), base) - self.assert_(u.replace("x", "x").__class__ is str) + self.assertTrue(u.replace("x", "x").__class__ is str) self.assertEqual(u.replace("x", "x"), base) - self.assert_(u.replace("xy", "xy").__class__ is str) + self.assertTrue(u.replace("xy", "xy").__class__ is str) self.assertEqual(u.replace("xy", "xy"), base) - self.assert_(u.center(len(u)).__class__ is str) + self.assertTrue(u.center(len(u)).__class__ is str) self.assertEqual(u.center(len(u)), base) - self.assert_(u.ljust(len(u)).__class__ is str) + self.assertTrue(u.ljust(len(u)).__class__ is str) self.assertEqual(u.ljust(len(u)), base) - self.assert_(u.rjust(len(u)).__class__ is str) + self.assertTrue(u.rjust(len(u)).__class__ is str) self.assertEqual(u.rjust(len(u)), base) - self.assert_(u.lower().__class__ is str) + self.assertTrue(u.lower().__class__ is str) self.assertEqual(u.lower(), base) - self.assert_(u.upper().__class__ is str) + self.assertTrue(u.upper().__class__ is str) self.assertEqual(u.upper(), base) - self.assert_(u.capitalize().__class__ is str) + self.assertTrue(u.capitalize().__class__ is str) self.assertEqual(u.capitalize(), base) - self.assert_(u.title().__class__ is str) + self.assertTrue(u.title().__class__ is str) self.assertEqual(u.title(), base) - self.assert_((u + "").__class__ is str) + self.assertTrue((u + "").__class__ is str) self.assertEqual(u + "", base) - self.assert_(("" + u).__class__ is str) + self.assertTrue(("" + u).__class__ is str) self.assertEqual("" + u, base) - self.assert_((u * 0).__class__ is str) + self.assertTrue((u * 0).__class__ is str) self.assertEqual(u * 0, "") - self.assert_((u * 1).__class__ is str) + self.assertTrue((u * 1).__class__ is str) self.assertEqual(u * 1, base) - self.assert_((u * 2).__class__ is str) + self.assertTrue((u * 2).__class__ is str) self.assertEqual(u * 2, base + base) - self.assert_(u[:].__class__ is str) + self.assertTrue(u[:].__class__ is str) self.assertEqual(u[:], base) - self.assert_(u[0:0].__class__ is str) + self.assertTrue(u[0:0].__class__ is str) self.assertEqual(u[0:0], "") class sublist(list): @@ -2597,7 +2597,7 @@ order (MRO) for bases """ self.assertEqual(d[cistr('one')], 1) self.assertEqual(d[cistr('tWo')], 2) self.assertEqual(d[cistr('THrEE')], 3) - self.assert_(cistr('ONe') in d) + self.assertTrue(cistr('ONe') in d) self.assertEqual(d.get(cistr('thrEE')), 3) def test_classic_comparisons(self): @@ -2654,13 +2654,13 @@ order (MRO) for bases """ for x in 1, 2, 3: for y in 1, 2, 3: for op in "<", "<=", "==", "!=", ">", ">=": - self.assert_(eval("c[x] %s c[y]" % op) == + self.assertTrue(eval("c[x] %s c[y]" % op) == eval("x %s y" % op), "x=%d, y=%d" % (x, y)) - self.assert_(eval("c[x] %s y" % op) == + self.assertTrue(eval("c[x] %s y" % op) == eval("x %s y" % op), "x=%d, y=%d" % (x, y)) - self.assert_(eval("x %s c[y]" % op) == + self.assertTrue(eval("x %s c[y]" % op) == eval("x %s y" % op), "x=%d, y=%d" % (x, y)) @@ -2733,11 +2733,11 @@ order (MRO) for bases """ for x in 1, 2, 3: for y in 1, 2, 3: for op in "<", "<=", "==", "!=", ">", ">=": - self.assert_(eval("c[x] %s c[y]" % op) == eval("x %s y" % op), + self.assertTrue(eval("c[x] %s c[y]" % op) == eval("x %s y" % op), "x=%d, y=%d" % (x, y)) - self.assert_(eval("c[x] %s y" % op) == eval("x %s y" % op), + self.assertTrue(eval("c[x] %s y" % op) == eval("x %s y" % op), "x=%d, y=%d" % (x, y)) - self.assert_(eval("x %s c[y]" % op) == eval("x %s y" % op), + self.assertTrue(eval("x %s c[y]" % op) == eval("x %s y" % op), "x=%d, y=%d" % (x, y)) def test_descrdoc(self): @@ -2777,9 +2777,9 @@ order (MRO) for bases """ for cls2 in C, D, E, F: x = cls() x.__class__ = cls2 - self.assert_(x.__class__ is cls2) + self.assertTrue(x.__class__ is cls2) x.__class__ = cls - self.assert_(x.__class__ is cls) + self.assertTrue(x.__class__ is cls) def cant(x, C): try: x.__class__ = C @@ -2835,11 +2835,11 @@ order (MRO) for bases """ x = cls() x.a = 1 x.__class__ = cls2 - self.assert_(x.__class__ is cls2, + self.assertTrue(x.__class__ is cls2, "assigning %r as __class__ for %r silently failed" % (cls2, x)) self.assertEqual(x.a, 1) x.__class__ = cls - self.assert_(x.__class__ is cls, + self.assertTrue(x.__class__ is cls, "assigning %r as __class__ for %r silently failed" % (cls, x)) self.assertEqual(x.a, 1) for cls in G, J, K, L, M, N, P, R, list, Int: @@ -3008,7 +3008,7 @@ order (MRO) for bases """ for cls in C, C1, C2: s = pickle.dumps(cls, bin) cls2 = pickle.loads(s) - self.assert_(cls2 is cls) + self.assertTrue(cls2 is cls) a = C1(1, 2); a.append(42); a.append(24) b = C2("hello", "world", 42) @@ -3038,7 +3038,7 @@ order (MRO) for bases """ import copy for cls in C, C1, C2: cls2 = copy.deepcopy(cls) - self.assert_(cls2 is cls) + self.assertTrue(cls2 is cls) a = C1(1, 2); a.append(42); a.append(24) b = C2("hello", "world", 42) @@ -3581,8 +3581,8 @@ order (MRO) for bases """ __slots__=() if support.check_impl_detail(): self.assertEqual(C.__basicsize__, B.__basicsize__) - self.assert_(hasattr(C, '__dict__')) - self.assert_(hasattr(C, '__weakref__')) + self.assertTrue(hasattr(C, '__dict__')) + self.assertTrue(hasattr(C, '__weakref__')) C().x = 2 def test_rmul(self): @@ -3916,29 +3916,29 @@ order (MRO) for bases """ pass a = C() pa = Proxy(a) - self.assert_(isinstance(a, C)) # Baseline - self.assert_(isinstance(pa, C)) # Test + self.assertTrue(isinstance(a, C)) # Baseline + self.assertTrue(isinstance(pa, C)) # Test # Test with a classic subclass class D(C): pass a = D() pa = Proxy(a) - self.assert_(isinstance(a, C)) # Baseline - self.assert_(isinstance(pa, C)) # Test + self.assertTrue(isinstance(a, C)) # Baseline + self.assertTrue(isinstance(pa, C)) # Test # Test with a new-style class class C(object): pass a = C() pa = Proxy(a) - self.assert_(isinstance(a, C)) # Baseline - self.assert_(isinstance(pa, C)) # Test + self.assertTrue(isinstance(a, C)) # Baseline + self.assertTrue(isinstance(pa, C)) # Test # Test with a new-style subclass class D(C): pass a = D() pa = Proxy(a) - self.assert_(isinstance(a, C)) # Baseline - self.assert_(isinstance(pa, C)) # Test + self.assertTrue(isinstance(a, C)) # Baseline + self.assertTrue(isinstance(pa, C)) # Test def test_proxy_super(self): # Testing super() for a proxy object... @@ -4067,17 +4067,17 @@ order (MRO) for bases """ l = [] self.assertEqual(l.__add__, l.__add__) self.assertEqual(l.__add__, [].__add__) - self.assert_(l.__add__ != [5].__add__) - self.assert_(l.__add__ != l.__mul__) - self.assert_(l.__add__.__name__ == '__add__') + self.assertTrue(l.__add__ != [5].__add__) + self.assertTrue(l.__add__ != l.__mul__) + self.assertTrue(l.__add__.__name__ == '__add__') if hasattr(l.__add__, '__self__'): # CPython - self.assert_(l.__add__.__self__ is l) - self.assert_(l.__add__.__objclass__ is list) + self.assertTrue(l.__add__.__self__ is l) + self.assertTrue(l.__add__.__objclass__ is list) else: # Python implementations where [].__add__ is a normal bound method - self.assert_(l.__add__.im_self is l) - self.assert_(l.__add__.im_class is list) + self.assertTrue(l.__add__.im_self is l) + self.assertTrue(l.__add__.im_class is list) self.assertEqual(l.__add__.__doc__, list.__add__.__doc__) try: hash(l.__add__) diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 1c9bca8..1519689 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -10,7 +10,7 @@ class DictTest(unittest.TestCase): def test_constructor(self): # calling built-in types without argument must return empty self.assertEqual(dict(), {}) - self.assert_(dict() is not {}) + self.assertTrue(dict() is not {}) def test_literal_constructor(self): # check literal constructor for different sized dicts (to exercise the BUILD_MAP oparg @@ -24,18 +24,18 @@ class DictTest(unittest.TestCase): self.assertEqual(eval(dictliteral), dict(items)) def test_bool(self): - self.assert_(not {}) - self.assert_({1: 2}) - self.assert_(bool({}) is False) - self.assert_(bool({1: 2}) is True) + self.assertTrue(not {}) + self.assertTrue({1: 2}) + self.assertTrue(bool({}) is False) + self.assertTrue(bool({1: 2}) is True) def test_keys(self): d = {} self.assertEqual(set(d.keys()), set()) d = {'a': 1, 'b': 2} k = d.keys() - self.assert_('a' in d) - self.assert_('b' in d) + self.assertTrue('a' in d) + self.assertTrue('b' in d) self.assertRaises(TypeError, d.keys, None) self.assertEqual(repr(dict(a=1).keys()), "dict_keys(['a'])") @@ -58,12 +58,12 @@ class DictTest(unittest.TestCase): def test_contains(self): d = {} - self.assert_(not ('a' in d)) - self.assert_('a' not in d) + self.assertTrue(not ('a' in d)) + self.assertTrue('a' not in d) d = {'a': 1, 'b': 2} - self.assert_('a' in d) - self.assert_('b' in d) - self.assert_('c' not in d) + self.assertTrue('a' in d) + self.assertTrue('b' in d) + self.assertTrue('c' not in d) self.assertRaises(TypeError, d.__contains__) @@ -197,7 +197,7 @@ class DictTest(unittest.TestCase): def test_fromkeys(self): self.assertEqual(dict.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) d = {} - self.assert_(not(d.fromkeys('abc') is d)) + self.assertTrue(not(d.fromkeys('abc') is d)) self.assertEqual(d.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) self.assertEqual(d.fromkeys((4,5),0), {4:0, 5:0}) self.assertEqual(d.fromkeys([]), {}) @@ -208,14 +208,14 @@ class DictTest(unittest.TestCase): class dictlike(dict): pass self.assertEqual(dictlike.fromkeys('a'), {'a':None}) self.assertEqual(dictlike().fromkeys('a'), {'a':None}) - self.assert_(type(dictlike.fromkeys('a')) is dictlike) - self.assert_(type(dictlike().fromkeys('a')) is dictlike) + self.assertTrue(type(dictlike.fromkeys('a')) is dictlike) + self.assertTrue(type(dictlike().fromkeys('a')) is dictlike) class mydict(dict): def __new__(cls): return collections.UserDict() ud = mydict.fromkeys('ab') self.assertEqual(ud, {'a':None, 'b':None}) - self.assert_(isinstance(ud, collections.UserDict)) + self.assertTrue(isinstance(ud, collections.UserDict)) self.assertRaises(TypeError, dict.fromkeys) class Exc(Exception): pass @@ -252,10 +252,10 @@ class DictTest(unittest.TestCase): def test_get(self): d = {} - self.assert_(d.get('c') is None) + self.assertTrue(d.get('c') is None) self.assertEqual(d.get('c', 3), 3) d = {'a' : 1, 'b' : 2} - self.assert_(d.get('c') is None) + self.assertTrue(d.get('c') is None) self.assertEqual(d.get('c', 3), 3) self.assertEqual(d.get('a'), 1) self.assertEqual(d.get('a', 3), 1) @@ -265,9 +265,9 @@ class DictTest(unittest.TestCase): def test_setdefault(self): # dict.setdefault() d = {} - self.assert_(d.setdefault('key0') is None) + self.assertTrue(d.setdefault('key0') is None) d.setdefault('key0', []) - self.assert_(d.setdefault('key0') is None) + self.assertTrue(d.setdefault('key0') is None) d.setdefault('key', []).append(3) self.assertEqual(d['key'][0], 3) d.setdefault('key', []).append(4) @@ -309,9 +309,9 @@ class DictTest(unittest.TestCase): self.assertEqual(va, int(ka)) kb, vb = tb = b.popitem() self.assertEqual(vb, int(kb)) - self.assert_(not(copymode < 0 and ta != tb)) - self.assert_(not a) - self.assert_(not b) + self.assertTrue(not(copymode < 0 and ta != tb)) + self.assertTrue(not a) + self.assertTrue(not b) d = {} self.assertRaises(KeyError, d.popitem) @@ -525,8 +525,8 @@ class DictTest(unittest.TestCase): d = D({1: 2, 3: 4}) self.assertEqual(d[1], 2) self.assertEqual(d[3], 4) - self.assert_(2 not in d) - self.assert_(2 not in d.keys()) + self.assertTrue(2 not in d) + self.assertTrue(2 not in d.keys()) self.assertEqual(d[2], 42) class E(dict): def __missing__(self, key): @@ -663,7 +663,7 @@ class DictTest(unittest.TestCase): obj.x = iter(obj.v) del obj, container gc.collect() - self.assert_(ref() is None, "Cycle was not collected") + self.assertTrue(ref() is None, "Cycle was not collected") def _not_tracked(self, t): # Nested containers can take several collections to untrack diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py index 34883d2..4fee755 100644 --- a/Lib/test/test_dictviews.py +++ b/Lib/test/test_dictviews.py @@ -24,10 +24,10 @@ class DictSetTest(unittest.TestCase): self.assertNotEqual(keys, {1, "b"}) self.assertNotEqual(keys, {1}) self.assertNotEqual(keys, 42) - self.assert_(1 in keys) - self.assert_("a" in keys) - self.assert_(10 not in keys) - self.assert_("Z" not in keys) + self.assertTrue(1 in keys) + self.assertTrue("a" in keys) + self.assertTrue(10 not in keys) + self.assertTrue("Z" not in keys) self.assertEqual(d.keys(), d.keys()) e = {1: 11, "a": "def"} self.assertEqual(d.keys(), e.keys()) @@ -44,13 +44,13 @@ class DictSetTest(unittest.TestCase): self.assertNotEqual(items, {(1, 10), ("a", "def")}) self.assertNotEqual(items, {(1, 10)}) self.assertNotEqual(items, 42) - self.assert_((1, 10) in items) - self.assert_(("a", "ABC") in items) - self.assert_((1, 11) not in items) - self.assert_(1 not in items) - self.assert_(() not in items) - self.assert_((1,) not in items) - self.assert_((1, 2, 3) not in items) + self.assertTrue((1, 10) in items) + self.assertTrue(("a", "ABC") in items) + self.assertTrue((1, 11) not in items) + self.assertTrue(1 not in items) + self.assertTrue(() not in items) + self.assertTrue((1,) not in items) + self.assertTrue((1, 2, 3) not in items) self.assertEqual(d.items(), d.items()) e = d.copy() self.assertEqual(d.items(), e.items()) diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py index bd96e23..7bffa48 100644 --- a/Lib/test/test_docxmlrpc.py +++ b/Lib/test/test_docxmlrpc.py @@ -104,7 +104,7 @@ class DocXMLRPCHTTPGETServer(unittest.TestCase): self.client.request("GET", "/") response = self.client.getresponse() - self.assert_( + self.assertTrue( b"""
    <lambda>(x, y)
    """ in response.read()) @@ -118,7 +118,7 @@ b"""
    <lambda>(x, y)< self.client.request("GET", "/") response = self.client.getresponse().read() - self.assert_( # This is ugly ... how can it be made better? + self.assertTrue( # This is ugly ... how can it be made better? b"""
    add(x, y)
    Add two instances together. This follows PEP008, but has nothing
    \nto do with RFC1952. Case should matter: pEp008 and rFC1952.  Things
    \nthat start with http and ftp should be auto-linked, too:
    \nhttp://google.com.
    """ in response, response) @@ -131,7 +131,7 @@ b"""
    add(x, y)
    Add t self.client.request("GET", "/") response = self.client.getresponse().read() - self.assert_( + self.assertTrue( b"""
    system.methodHelp(method_name)
    system.methodHelp(\'add\') => "Adds two integers together"
    \n 
    \nReturns a string containing documentation for the specified method.
    \n
    system.methodSignature(method_name)
    system.methodSignature(\'add\') => [double, int, int]
    \n 
    \nReturns a list describing the signature of the method. In the
    \nabove example, the add method takes two integers as arguments
    \nand returns a double result.
    \n 
    \nThis server does NOT support system.methodSignature.
    \n
    test_method(arg)
    Test method\'s docs. This method truly does very little.
    """ in response) def test_autolink_dotted_methods(self): @@ -140,7 +140,7 @@ b"""
    system.methodHelp( self.client.request("GET", "/") response = self.client.getresponse() - self.assert_(b"""Try self.add, too.""" in + self.assertTrue(b"""Try self.add, too.""" in response.read()) def test_main(): diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py index ecac3ee..240b61a 100644 --- a/Lib/test/test_dummy_thread.py +++ b/Lib/test/test_dummy_thread.py @@ -24,43 +24,43 @@ class LockTests(unittest.TestCase): def test_initlock(self): #Make sure locks start locked - self.failUnless(not self.lock.locked(), + self.assertTrue(not self.lock.locked(), "Lock object is not initialized unlocked.") def test_release(self): # Test self.lock.release() self.lock.acquire() self.lock.release() - self.failUnless(not self.lock.locked(), + self.assertTrue(not self.lock.locked(), "Lock object did not release properly.") def test_improper_release(self): #Make sure release of an unlocked thread raises _thread.error - self.failUnlessRaises(_thread.error, self.lock.release) + self.assertRaises(_thread.error, self.lock.release) def test_cond_acquire_success(self): #Make sure the conditional acquiring of the lock works. - self.failUnless(self.lock.acquire(0), + self.assertTrue(self.lock.acquire(0), "Conditional acquiring of the lock failed.") def test_cond_acquire_fail(self): #Test acquiring locked lock returns False self.lock.acquire(0) - self.failUnless(not self.lock.acquire(0), + self.assertTrue(not self.lock.acquire(0), "Conditional acquiring of a locked lock incorrectly " "succeeded.") def test_uncond_acquire_success(self): #Make sure unconditional acquiring of a lock works. self.lock.acquire() - self.failUnless(self.lock.locked(), + self.assertTrue(self.lock.locked(), "Uncondional locking failed.") def test_uncond_acquire_return_val(self): #Make sure that an unconditional locking returns True. - self.failUnless(self.lock.acquire(1) is True, + self.assertTrue(self.lock.acquire(1) is True, "Unconditional locking did not return True.") - self.failUnless(self.lock.acquire() is True) + self.assertTrue(self.lock.acquire() is True) def test_uncond_acquire_blocking(self): #Make sure that unconditional acquiring of a locked lock blocks. @@ -80,7 +80,7 @@ class LockTests(unittest.TestCase): end_time = int(time.time()) if support.verbose: print("done") - self.failUnless((end_time - start_time) >= DELAY, + self.assertTrue((end_time - start_time) >= DELAY, "Blocking by unconditional acquiring failed.") class MiscTests(unittest.TestCase): @@ -88,18 +88,18 @@ class MiscTests(unittest.TestCase): def test_exit(self): #Make sure _thread.exit() raises SystemExit - self.failUnlessRaises(SystemExit, _thread.exit) + self.assertRaises(SystemExit, _thread.exit) def test_ident(self): #Test sanity of _thread.get_ident() - self.failUnless(isinstance(_thread.get_ident(), int), + self.assertTrue(isinstance(_thread.get_ident(), int), "_thread.get_ident() returned a non-integer") - self.failUnless(_thread.get_ident() != 0, + self.assertTrue(_thread.get_ident() != 0, "_thread.get_ident() returned 0") def test_LockType(self): #Make sure _thread.LockType is the same type as _thread.allocate_locke() - self.failUnless(isinstance(_thread.allocate_lock(), _thread.LockType), + self.assertTrue(isinstance(_thread.allocate_lock(), _thread.LockType), "_thread.LockType is not an instance of what is " "returned by _thread.allocate_lock()") @@ -108,13 +108,13 @@ class MiscTests(unittest.TestCase): # should raise KeyboardInterrupt upon completion. def call_interrupt(): _thread.interrupt_main() - self.failUnlessRaises(KeyboardInterrupt, _thread.start_new_thread, + self.assertRaises(KeyboardInterrupt, _thread.start_new_thread, call_interrupt, tuple()) def test_interrupt_in_main(self): # Make sure that if interrupt_main is called in main threat that # KeyboardInterrupt is raised instantly. - self.failUnlessRaises(KeyboardInterrupt, _thread.interrupt_main) + self.assertRaises(KeyboardInterrupt, _thread.interrupt_main) class ThreadTests(unittest.TestCase): """Test thread creation.""" @@ -128,16 +128,16 @@ class ThreadTests(unittest.TestCase): testing_queue = queue.Queue(1) _thread.start_new_thread(arg_tester, (testing_queue, True, True)) result = testing_queue.get() - self.failUnless(result[0] and result[1], + self.assertTrue(result[0] and result[1], "Argument passing for thread creation using tuple failed") _thread.start_new_thread(arg_tester, tuple(), {'queue':testing_queue, 'arg1':True, 'arg2':True}) result = testing_queue.get() - self.failUnless(result[0] and result[1], + self.assertTrue(result[0] and result[1], "Argument passing for thread creation using kwargs failed") _thread.start_new_thread(arg_tester, (testing_queue, True), {'arg2':True}) result = testing_queue.get() - self.failUnless(result[0] and result[1], + self.assertTrue(result[0] and result[1], "Argument passing for thread creation using both tuple" " and kwargs failed") @@ -164,7 +164,7 @@ class ThreadTests(unittest.TestCase): time.sleep(DELAY) if support.verbose: print('done') - self.failUnless(testing_queue.qsize() == thread_count, + self.assertTrue(testing_queue.qsize() == thread_count, "Not all %s threads executed properly after %s sec." % (thread_count, DELAY)) diff --git a/Lib/test/test_epoll.py b/Lib/test/test_epoll.py index ab6bf0b..847b991 100644 --- a/Lib/test/test_epoll.py +++ b/Lib/test/test_epoll.py @@ -71,10 +71,10 @@ class TestEPoll(unittest.TestCase): ep = select.epoll(16) except OSError as e: raise AssertionError(str(e)) - self.assert_(ep.fileno() > 0, ep.fileno()) - self.assert_(not ep.closed) + self.assertTrue(ep.fileno() > 0, ep.fileno()) + self.assertTrue(not ep.closed) ep.close() - self.assert_(ep.closed) + self.assertTrue(ep.closed) self.assertRaises(ValueError, ep.fileno) def test_badcreate(self): @@ -141,7 +141,7 @@ class TestEPoll(unittest.TestCase): try: ep2.poll(1, 4) except IOError as e: - self.failUnlessEqual(e.args[0], errno.EBADF, e) + self.assertEqual(e.args[0], errno.EBADF, e) else: self.fail("epoll on closed fd didn't raise EBADF") @@ -157,7 +157,7 @@ class TestEPoll(unittest.TestCase): now = time.time() events = ep.poll(1, 4) then = time.time() - self.failIf(then - now > 0.1, then - now) + self.assertFalse(then - now > 0.1, then - now) events.sort() expected = [(client.fileno(), select.EPOLLOUT), @@ -165,12 +165,12 @@ class TestEPoll(unittest.TestCase): expected.sort() self.assertEquals(events, expected) - self.failIf(then - now > 0.01, then - now) + self.assertFalse(then - now > 0.01, then - now) now = time.time() events = ep.poll(timeout=2.1, maxevents=4) then = time.time() - self.failIf(events) + self.assertFalse(events) client.send(b"Hello!") server.send(b"world!!!") @@ -178,7 +178,7 @@ class TestEPoll(unittest.TestCase): now = time.time() events = ep.poll(1, 4) then = time.time() - self.failIf(then - now > 0.01) + self.assertFalse(then - now > 0.01) events.sort() expected = [(client.fileno(), select.EPOLLIN | select.EPOLLOUT), @@ -192,7 +192,7 @@ class TestEPoll(unittest.TestCase): now = time.time() events = ep.poll(1, 4) then = time.time() - self.failIf(then - now > 0.01) + self.assertFalse(then - now > 0.01) expected = [(server.fileno(), select.EPOLLOUT)] self.assertEquals(events, expected) @@ -211,7 +211,7 @@ class TestEPoll(unittest.TestCase): now = time.time() events = ep.poll(1, 4) then = time.time() - self.failIf(then - now > 0.01) + self.assertFalse(then - now > 0.01) server.close() ep.unregister(fd) diff --git a/Lib/test/test_errno.py b/Lib/test/test_errno.py index 28425e2..80edcc6 100755 --- a/Lib/test/test_errno.py +++ b/Lib/test/test_errno.py @@ -14,13 +14,13 @@ class ErrnoAttributeTests(unittest.TestCase): def test_for_improper_attributes(self): # No unexpected attributes should be on the module. for error_code in std_c_errors: - self.assert_(hasattr(errno, error_code), + self.assertTrue(hasattr(errno, error_code), "errno is missing %s" % error_code) def test_using_errorcode(self): # Every key value in errno.errorcode should be on the module. for value in errno.errorcode.values(): - self.assert_(hasattr(errno, value), 'no %s attr in errno' % value) + self.assertTrue(hasattr(errno, value), 'no %s attr in errno' % value) class ErrorcodeTests(unittest.TestCase): @@ -28,7 +28,7 @@ class ErrorcodeTests(unittest.TestCase): def test_attributes_in_errorcode(self): for attribute in errno.__dict__.keys(): if attribute.isupper(): - self.assert_(getattr(errno, attribute) in errno.errorcode, + self.assertTrue(getattr(errno, attribute) in errno.errorcode, 'no %s attr in errno.errorcode' % attribute) diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 8bb2079..89e6ebb 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -155,7 +155,7 @@ class ExceptionTests(unittest.TestCase): exc, err, tb = sys.exc_info() co = tb.tb_frame.f_code self.assertEquals(co.co_name, "test_capi1") - self.assert_(co.co_filename.endswith('test_exceptions.py')) + self.assertTrue(co.co_filename.endswith('test_exceptions.py')) else: self.fail("Expected exception") @@ -167,7 +167,7 @@ class ExceptionTests(unittest.TestCase): exc, err, tb = sys.exc_info() co = tb.tb_frame.f_code self.assertEquals(co.co_name, "__init__") - self.assert_(co.co_filename.endswith('test_exceptions.py')) + self.assertTrue(co.co_filename.endswith('test_exceptions.py')) co2 = tb.tb_frame.f_back.f_code self.assertEquals(co2.co_name, "test_capi2") else: @@ -189,12 +189,12 @@ class ExceptionTests(unittest.TestCase): except NameError: pass else: - self.failUnlessEqual(str(WindowsError(1001)), + self.assertEqual(str(WindowsError(1001)), "1001") - self.failUnlessEqual(str(WindowsError(1001, "message")), + self.assertEqual(str(WindowsError(1001, "message")), "[Error 1001] message") - self.failUnlessEqual(WindowsError(1001, "message").errno, 22) - self.failUnlessEqual(WindowsError(1001, "message").winerror, 1001) + self.assertEqual(WindowsError(1001, "message").errno, 22) + self.assertEqual(WindowsError(1001, "message").winerror, 1001) def testAttributes(self): # test that exception attributes are happy @@ -319,25 +319,25 @@ class ExceptionTests(unittest.TestCase): tb = sys.exc_info()[2] e = BaseException().with_traceback(tb) - self.failUnless(isinstance(e, BaseException)) + self.assertTrue(isinstance(e, BaseException)) self.assertEqual(e.__traceback__, tb) e = IndexError(5).with_traceback(tb) - self.failUnless(isinstance(e, IndexError)) + self.assertTrue(isinstance(e, IndexError)) self.assertEqual(e.__traceback__, tb) class MyException(Exception): pass e = MyException().with_traceback(tb) - self.failUnless(isinstance(e, MyException)) + self.assertTrue(isinstance(e, MyException)) self.assertEqual(e.__traceback__, tb) def testInvalidTraceback(self): try: Exception().__traceback__ = 5 except TypeError as e: - self.failUnless("__traceback__ must be a traceback" in str(e)) + self.assertTrue("__traceback__ must be a traceback" in str(e)) else: self.fail("No exception raised") @@ -402,10 +402,10 @@ class ExceptionTests(unittest.TestCase): def testUnicodeStrUsage(self): # Make sure both instances and classes have a str and unicode # representation. - self.failUnless(str(Exception)) - self.failUnless(str(Exception)) - self.failUnless(str(Exception('a'))) - self.failUnless(str(Exception('a'))) + self.assertTrue(str(Exception)) + self.assertTrue(str(Exception)) + self.assertTrue(str(Exception('a'))) + self.assertTrue(str(Exception('a'))) def testExceptionCleanupNames(self): # Make sure the local variable bound to the exception instance by @@ -413,9 +413,9 @@ class ExceptionTests(unittest.TestCase): try: raise Exception() except Exception as e: - self.failUnless(e) + self.assertTrue(e) del e - self.failIf('e' in locals()) + self.assertFalse('e' in locals()) def testExceptionCleanupState(self): # Make sure exception state is cleaned up as soon as the except @@ -441,7 +441,7 @@ class ExceptionTests(unittest.TestCase): pass obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) # Qualified "except" without "as" obj = MyObj() @@ -452,7 +452,7 @@ class ExceptionTests(unittest.TestCase): pass obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) # Bare "except" obj = MyObj() @@ -463,7 +463,7 @@ class ExceptionTests(unittest.TestCase): pass obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) # "except" with premature block leave obj = MyObj() @@ -475,7 +475,7 @@ class ExceptionTests(unittest.TestCase): break obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) # "except" block raising another exception obj = MyObj() @@ -493,7 +493,7 @@ class ExceptionTests(unittest.TestCase): e.__context__ = None obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) # Some complicated construct obj = MyObj() @@ -510,7 +510,7 @@ class ExceptionTests(unittest.TestCase): pass obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) # Inside an exception-silencing "with" block class Context: @@ -524,7 +524,7 @@ class ExceptionTests(unittest.TestCase): inner_raising_func() obj = None obj = wr() - self.failUnless(obj is None, "%s" % obj) + self.assertTrue(obj is None, "%s" % obj) def test_generator_leaking(self): # Test that generator exception state doesn't leak into the calling @@ -598,8 +598,8 @@ class ExceptionTests(unittest.TestCase): except RuntimeError: return sys.exc_info() e, v, tb = g() - self.assert_(isinstance(v, RuntimeError), type(v)) - self.assert_("maximum recursion depth exceeded" in str(v), str(v)) + self.assertTrue(isinstance(v, RuntimeError), type(v)) + self.assertTrue("maximum recursion depth exceeded" in str(v), str(v)) def test_MemoryError(self): diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py index 3360121..bd2d7c0 100644 --- a/Lib/test/test_file.py +++ b/Lib/test/test_file.py @@ -83,13 +83,13 @@ class AutoFileTests(unittest.TestCase): def testErrors(self): f = self.f self.assertEquals(f.name, TESTFN) - self.assert_(not f.isatty()) - self.assert_(not f.closed) + self.assertTrue(not f.isatty()) + self.assertTrue(not f.closed) if hasattr(f, "readinto"): self.assertRaises((IOError, TypeError), f.readinto, "") f.close() - self.assert_(f.closed) + self.assertTrue(f.closed) def testMethods(self): methods = [('fileno', ()), @@ -111,7 +111,7 @@ class AutoFileTests(unittest.TestCase): # __exit__ should close the file self.f.__exit__(None, None, None) - self.assert_(self.f.closed) + self.assertTrue(self.f.closed) for methodname, args in methods: method = getattr(self.f, methodname) diff --git a/Lib/test/test_filecmp.py b/Lib/test/test_filecmp.py index 22f0be7..c71a27a 100644 --- a/Lib/test/test_filecmp.py +++ b/Lib/test/test_filecmp.py @@ -25,19 +25,19 @@ class FileCompareTestCase(unittest.TestCase): os.unlink(self.name_diff) def test_matching(self): - self.failUnless(filecmp.cmp(self.name, self.name_same), + self.assertTrue(filecmp.cmp(self.name, self.name_same), "Comparing file to itself fails") - self.failUnless(filecmp.cmp(self.name, self.name_same, shallow=False), + self.assertTrue(filecmp.cmp(self.name, self.name_same, shallow=False), "Comparing file to itself fails") - self.failUnless(filecmp.cmp(self.name, self.name, shallow=False), + self.assertTrue(filecmp.cmp(self.name, self.name, shallow=False), "Comparing file to identical file fails") - self.failUnless(filecmp.cmp(self.name, self.name), + self.assertTrue(filecmp.cmp(self.name, self.name), "Comparing file to identical file fails") def test_different(self): - self.failIf(filecmp.cmp(self.name, self.name_diff), + self.assertFalse(filecmp.cmp(self.name, self.name_diff), "Mismatched files compare as equal") - self.failIf(filecmp.cmp(self.name, self.dir), + self.assertFalse(filecmp.cmp(self.name, self.dir), "File and directory compare as equal") class DirCompareTestCase(unittest.TestCase): @@ -69,19 +69,19 @@ class DirCompareTestCase(unittest.TestCase): shutil.rmtree(self.dir_diff) def test_cmpfiles(self): - self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file']) == + self.assertTrue(filecmp.cmpfiles(self.dir, self.dir, ['file']) == (['file'], [], []), "Comparing directory to itself fails") - self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file']) == + self.assertTrue(filecmp.cmpfiles(self.dir, self.dir_same, ['file']) == (['file'], [], []), "Comparing directory to same fails") # Try it with shallow=False - self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file'], + self.assertTrue(filecmp.cmpfiles(self.dir, self.dir, ['file'], shallow=False) == (['file'], [], []), "Comparing directory to itself fails") - self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file'], + self.assertTrue(filecmp.cmpfiles(self.dir, self.dir_same, ['file'], shallow=False), "Comparing directory to same fails") @@ -90,7 +90,7 @@ class DirCompareTestCase(unittest.TestCase): output.write('Different contents.\n') output.close() - self.failIf(filecmp.cmpfiles(self.dir, self.dir_same, + self.assertFalse(filecmp.cmpfiles(self.dir, self.dir_same, ['file', 'file2']) == (['file'], ['file2'], []), "Comparing mismatched directories fails") @@ -104,14 +104,14 @@ class DirCompareTestCase(unittest.TestCase): else: self.assertEqual([d.left_list, d.right_list],[['file'], ['file']]) self.assertEqual(d.common, ['file']) - self.failUnless(d.left_only == d.right_only == []) + self.assertTrue(d.left_only == d.right_only == []) self.assertEqual(d.same_files, ['file']) self.assertEqual(d.diff_files, []) # Check attributes for comparison of two different directories d = filecmp.dircmp(self.dir, self.dir_diff) self.assertEqual(d.left_list, ['file']) - self.failUnless(d.right_list == ['file', 'file2']) + self.assertTrue(d.right_list == ['file', 'file2']) self.assertEqual(d.common, ['file']) self.assertEqual(d.left_only, []) self.assertEqual(d.right_only, ['file2']) diff --git a/Lib/test/test_fileinput.py b/Lib/test/test_fileinput.py index a4d59e1..aae16ea 100644 --- a/Lib/test/test_fileinput.py +++ b/Lib/test/test_fileinput.py @@ -68,8 +68,8 @@ class BufferSizesTests(unittest.TestCase): self.assertEqual(fi.filename(), t2) self.assertEqual(fi.lineno(), 21) self.assertEqual(fi.filelineno(), 6) - self.failIf(fi.isfirstline()) - self.failIf(fi.isstdin()) + self.assertFalse(fi.isfirstline()) + self.assertFalse(fi.isstdin()) if verbose: print('%s. Nextfile (bs=%s)' % (start+2, bs)) @@ -138,7 +138,7 @@ class FileInputTests(unittest.TestCase): self.assertEqual(fi.filename(), t3) line = fi.readline() - self.failIf(line) + self.assertFalse(line) self.assertEqual(fi.lineno(), 1) self.assertEqual(fi.filelineno(), 0) self.assertEqual(fi.filename(), t4) diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py index 657401e..679ed08 100644 --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -80,17 +80,17 @@ class AutoFileTests(unittest.TestCase): def testErrors(self): f = self.f - self.assert_(not f.isatty()) - self.assert_(not f.closed) + self.assertTrue(not f.isatty()) + self.assertTrue(not f.closed) #self.assertEquals(f.name, TESTFN) self.assertRaises(ValueError, f.read, 10) # Open for reading f.close() - self.assert_(f.closed) + self.assertTrue(f.closed) f = _FileIO(TESTFN, 'r') self.assertRaises(TypeError, f.readinto, "") - self.assert_(not f.closed) + self.assertTrue(not f.closed) f.close() - self.assert_(f.closed) + self.assertTrue(f.closed) def testMethods(self): methods = ['fileno', 'isatty', 'read', 'readinto', @@ -100,7 +100,7 @@ class AutoFileTests(unittest.TestCase): methods.remove('truncate') self.f.close() - self.assert_(self.f.closed) + self.assertTrue(self.f.closed) for methodname in methods: method = getattr(self.f, methodname) diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index e74e892..af5e13c 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -136,27 +136,27 @@ class GeneralFloatCases(unittest.TestCase): def test_float_containment(self): floats = (INF, -INF, 0.0, 1.0, NAN) for f in floats: - self.assert_(f in [f], "'%r' not in []" % f) - self.assert_(f in (f,), "'%r' not in ()" % f) - self.assert_(f in {f}, "'%r' not in set()" % f) - self.assert_(f in {f: None}, "'%r' not in {}" % f) + self.assertTrue(f in [f], "'%r' not in []" % f) + self.assertTrue(f in (f,), "'%r' not in ()" % f) + self.assertTrue(f in {f}, "'%r' not in set()" % f) + self.assertTrue(f in {f: None}, "'%r' not in {}" % f) self.assertEqual([f].count(f), 1, "[].count('%r') != 1" % f) - self.assert_(f in floats, "'%r' not in container" % f) + self.assertTrue(f in floats, "'%r' not in container" % f) for f in floats: # nonidentical containers, same type, same contents - self.assert_([f] == [f], "[%r] != [%r]" % (f, f)) - self.assert_((f,) == (f,), "(%r,) != (%r,)" % (f, f)) - self.assert_({f} == {f}, "{%r} != {%r}" % (f, f)) - self.assert_({f : None} == {f: None}, "{%r : None} != " + self.assertTrue([f] == [f], "[%r] != [%r]" % (f, f)) + self.assertTrue((f,) == (f,), "(%r,) != (%r,)" % (f, f)) + self.assertTrue({f} == {f}, "{%r} != {%r}" % (f, f)) + self.assertTrue({f : None} == {f: None}, "{%r : None} != " "{%r : None}" % (f, f)) # identical containers l, t, s, d = [f], (f,), {f}, {f: None} - self.assert_(l == l, "[%r] not equal to itself" % f) - self.assert_(t == t, "(%r,) not equal to itself" % f) - self.assert_(s == s, "{%r} not equal to itself" % f) - self.assert_(d == d, "{%r : None} not equal to itself" % f) + self.assertTrue(l == l, "[%r] not equal to itself" % f) + self.assertTrue(t == t, "(%r,) not equal to itself" % f) + self.assertTrue(s == s, "{%r} not equal to itself" % f) + self.assertTrue(d == d, "{%r : None} not equal to itself" % f) @@ -171,9 +171,9 @@ class FormatFunctionsTestCase(unittest.TestCase): float.__setformat__('float', self.save_formats['float']) def test_getformat(self): - self.assert_(float.__getformat__('double') in + self.assertTrue(float.__getformat__('double') in ['unknown', 'IEEE, big-endian', 'IEEE, little-endian']) - self.assert_(float.__getformat__('float') in + self.assertTrue(float.__getformat__('float') in ['unknown', 'IEEE, big-endian', 'IEEE, little-endian']) self.assertRaises(ValueError, float.__getformat__, 'chicken') self.assertRaises(TypeError, float.__getformat__, 1) @@ -493,12 +493,12 @@ class RoundTestCase(unittest.TestCase): # ways to create and represent inf and nan class InfNanTest(unittest.TestCase): def test_inf_from_str(self): - self.assert_(isinf(float("inf"))) - self.assert_(isinf(float("+inf"))) - self.assert_(isinf(float("-inf"))) - self.assert_(isinf(float("infinity"))) - self.assert_(isinf(float("+infinity"))) - self.assert_(isinf(float("-infinity"))) + self.assertTrue(isinf(float("inf"))) + self.assertTrue(isinf(float("+inf"))) + self.assertTrue(isinf(float("-inf"))) + self.assertTrue(isinf(float("infinity"))) + self.assertTrue(isinf(float("+infinity"))) + self.assertTrue(isinf(float("-infinity"))) self.assertEqual(repr(float("inf")), "inf") self.assertEqual(repr(float("+inf")), "inf") @@ -545,9 +545,9 @@ class InfNanTest(unittest.TestCase): self.assertEqual(str(-1e300 * 1e300), "-inf") def test_nan_from_str(self): - self.assert_(isnan(float("nan"))) - self.assert_(isnan(float("+nan"))) - self.assert_(isnan(float("-nan"))) + self.assertTrue(isnan(float("nan"))) + self.assertTrue(isnan(float("+nan"))) + self.assertTrue(isnan(float("-nan"))) self.assertEqual(repr(float("nan")), "nan") self.assertEqual(repr(float("+nan")), "nan") @@ -581,14 +581,14 @@ class InfNanTest(unittest.TestCase): self.assertEqual(str(-1e300 * 1e300 * 0), "nan") def notest_float_nan(self): - self.assert_(NAN.is_nan()) - self.failIf(INF.is_nan()) - self.failIf((0.).is_nan()) + self.assertTrue(NAN.is_nan()) + self.assertFalse(INF.is_nan()) + self.assertFalse((0.).is_nan()) def notest_float_inf(self): - self.assert_(INF.is_inf()) - self.failIf(NAN.is_inf()) - self.failIf((0.).is_inf()) + self.assertTrue(INF.is_inf()) + self.assertFalse(NAN.is_inf()) + self.assertFalse((0.).is_inf()) fromHex = float.fromhex toHex = float.hex diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py index 30ccf69..2f701ca 100644 --- a/Lib/test/test_fnmatch.py +++ b/Lib/test/test_fnmatch.py @@ -9,11 +9,11 @@ from fnmatch import fnmatch, fnmatchcase class FnmatchTestCase(unittest.TestCase): def check_match(self, filename, pattern, should_match=1): if should_match: - self.assert_(fnmatch(filename, pattern), + self.assertTrue(fnmatch(filename, pattern), "expected %r to match pattern %r" % (filename, pattern)) else: - self.assert_(not fnmatch(filename, pattern), + self.assertTrue(not fnmatch(filename, pattern), "expected %r not to match pattern %r" % (filename, pattern)) diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py index afc8fda..b83cba0 100644 --- a/Lib/test/test_ftplib.py +++ b/Lib/test/test_ftplib.py @@ -444,7 +444,7 @@ class TestTimeouts(TestCase): def testTimeoutDefault(self): # default -- use global socket timeout - self.assert_(socket.getdefaulttimeout() is None) + self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: ftp = ftplib.FTP("localhost") @@ -456,7 +456,7 @@ class TestTimeouts(TestCase): def testTimeoutNone(self): # no timeout -- do not use global socket timeout - self.assert_(socket.getdefaulttimeout() is None) + self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: ftp = ftplib.FTP("localhost", timeout=None) diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py index b42f6cc..5765b4e 100644 --- a/Lib/test/test_funcattrs.py +++ b/Lib/test/test_funcattrs.py @@ -35,11 +35,11 @@ class FunctionPropertiesTest(FuncAttrsTest): def test_dir_includes_correct_attrs(self): self.b.known_attr = 7 - self.assert_('known_attr' in dir(self.b), + self.assertTrue('known_attr' in dir(self.b), "set attributes not in dir listing of method") # Test on underlying function object of method self.F.a.known_attr = 7 - self.assert_('known_attr' in dir(self.fi.a), "set attribute on function " + self.assertTrue('known_attr' in dir(self.fi.a), "set attribute on function " "implementations, should show up in next dir") def test_duplicate_function_equality(self): @@ -248,11 +248,11 @@ class CellTest(unittest.TestCase): # their presence should not be interpreted as providing any # guarantees about the semantics (or even existence) of cell # comparisons in future versions of CPython. - self.assert_(cell(2) < cell(3)) - self.assert_(empty_cell() < cell('saturday')) - self.assert_(empty_cell() == empty_cell()) - self.assert_(cell(-36) == cell(-36.0)) - self.assert_(cell(True) > empty_cell()) + self.assertTrue(cell(2) < cell(3)) + self.assertTrue(empty_cell() < cell('saturday')) + self.assertTrue(empty_cell() == empty_cell()) + self.assertTrue(cell(-36) == cell(-36.0)) + self.assertTrue(cell(True) > empty_cell()) class StaticMethodAttrsTest(unittest.TestCase): def test_func_attribute(self): @@ -260,10 +260,10 @@ class StaticMethodAttrsTest(unittest.TestCase): pass c = classmethod(f) - self.assert_(c.__func__ is f) + self.assertTrue(c.__func__ is f) s = staticmethod(f) - self.assert_(s.__func__ is f) + self.assertTrue(s.__func__ is f) def test_main(): diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index dedfb1e..eff31e0 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -96,7 +96,7 @@ class TestPartial(unittest.TestCase): p = self.thetype(capture, *args) expected = args + ('x',) got, empty = p('x') - self.failUnless(expected == got and empty == {}) + self.assertTrue(expected == got and empty == {}) def test_keyword(self): # make sure keyword arguments are captured correctly @@ -104,15 +104,15 @@ class TestPartial(unittest.TestCase): p = self.thetype(capture, a=a) expected = {'a':a,'x':None} empty, got = p(x=None) - self.failUnless(expected == got and empty == ()) + self.assertTrue(expected == got and empty == ()) def test_no_side_effects(self): # make sure there are no side effects that affect subsequent calls p = self.thetype(capture, 0, a=1) args1, kw1 = p(1, b=2) - self.failUnless(args1 == (0,1) and kw1 == {'a':1,'b':2}) + self.assertTrue(args1 == (0,1) and kw1 == {'a':1,'b':2}) args2, kw2 = p() - self.failUnless(args2 == (0,) and kw2 == {'a':1}) + self.assertTrue(args2 == (0,) and kw2 == {'a':1}) def test_error_propagation(self): def f(x, y): @@ -172,13 +172,13 @@ class TestUpdateWrapper(unittest.TestCase): updated=functools.WRAPPER_UPDATES): # Check attributes were assigned for name in assigned: - self.failUnless(getattr(wrapper, name) is getattr(wrapped, name)) + self.assertTrue(getattr(wrapper, name) is getattr(wrapped, name)) # Check attributes were updated for name in updated: wrapper_attr = getattr(wrapper, name) wrapped_attr = getattr(wrapped, name) for key in wrapped_attr: - self.failUnless(wrapped_attr[key] is wrapper_attr[key]) + self.assertTrue(wrapped_attr[key] is wrapper_attr[key]) def test_default_update(self): def f(): @@ -204,7 +204,7 @@ class TestUpdateWrapper(unittest.TestCase): self.check_wrapper(wrapper, f, (), ()) self.assertEqual(wrapper.__name__, 'wrapper') self.assertEqual(wrapper.__doc__, None) - self.failIf(hasattr(wrapper, 'attr')) + self.assertFalse(hasattr(wrapper, 'attr')) def test_selective_update(self): def f(): @@ -229,7 +229,7 @@ class TestUpdateWrapper(unittest.TestCase): pass functools.update_wrapper(wrapper, max) self.assertEqual(wrapper.__name__, 'max') - self.assert_(wrapper.__doc__.startswith('max(')) + self.assertTrue(wrapper.__doc__.startswith('max(')) class TestWraps(TestUpdateWrapper): @@ -257,7 +257,7 @@ class TestWraps(TestUpdateWrapper): self.check_wrapper(wrapper, f, (), ()) self.assertEqual(wrapper.__name__, 'wrapper') self.assertEqual(wrapper.__doc__, None) - self.failIf(hasattr(wrapper, 'attr')) + self.assertFalse(hasattr(wrapper, 'attr')) def test_selective_update(self): def f(): diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py index 9d0baeb..3be9c89 100644 --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -6,7 +6,7 @@ import genericpath class AllCommonTest(unittest.TestCase): def assertIs(self, a, b): - self.assert_(a is b) + self.assertTrue(a is b) def test_commonprefix(self): self.assertEqual( @@ -50,7 +50,7 @@ class AllCommonTest(unittest.TestCase): f.close() self.assertEqual(d, b"foobar") - self.assert_( + self.assertTrue( genericpath.getctime(support.TESTFN) <= genericpath.getmtime(support.TESTFN) ) diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py index 34d8ee0..3ffc1cc 100644 --- a/Lib/test/test_getargs2.py +++ b/Lib/test/test_getargs2.py @@ -68,68 +68,68 @@ class Unsigned_TestCase(unittest.TestCase): from _testcapi import getargs_b # b returns 'unsigned char', and does range checking (0 ... UCHAR_MAX) self.assertRaises(TypeError, getargs_b, 3.14) - self.failUnlessEqual(99, getargs_b(Long())) - self.failUnlessEqual(99, getargs_b(Int())) + self.assertEqual(99, getargs_b(Long())) + self.assertEqual(99, getargs_b(Int())) self.assertRaises(OverflowError, getargs_b, -1) - self.failUnlessEqual(0, getargs_b(0)) - self.failUnlessEqual(UCHAR_MAX, getargs_b(UCHAR_MAX)) + self.assertEqual(0, getargs_b(0)) + self.assertEqual(UCHAR_MAX, getargs_b(UCHAR_MAX)) self.assertRaises(OverflowError, getargs_b, UCHAR_MAX + 1) - self.failUnlessEqual(42, getargs_b(42)) - self.failUnlessEqual(42, getargs_b(42)) + self.assertEqual(42, getargs_b(42)) + self.assertEqual(42, getargs_b(42)) self.assertRaises(OverflowError, getargs_b, VERY_LARGE) def test_B(self): from _testcapi import getargs_B # B returns 'unsigned char', no range checking self.assertRaises(TypeError, getargs_B, 3.14) - self.failUnlessEqual(99, getargs_B(Long())) - self.failUnlessEqual(99, getargs_B(Int())) + self.assertEqual(99, getargs_B(Long())) + self.assertEqual(99, getargs_B(Int())) - self.failUnlessEqual(UCHAR_MAX, getargs_B(-1)) - self.failUnlessEqual(UCHAR_MAX, getargs_B(-1)) - self.failUnlessEqual(0, getargs_B(0)) - self.failUnlessEqual(UCHAR_MAX, getargs_B(UCHAR_MAX)) - self.failUnlessEqual(0, getargs_B(UCHAR_MAX+1)) + self.assertEqual(UCHAR_MAX, getargs_B(-1)) + self.assertEqual(UCHAR_MAX, getargs_B(-1)) + self.assertEqual(0, getargs_B(0)) + self.assertEqual(UCHAR_MAX, getargs_B(UCHAR_MAX)) + self.assertEqual(0, getargs_B(UCHAR_MAX+1)) - self.failUnlessEqual(42, getargs_B(42)) - self.failUnlessEqual(42, getargs_B(42)) - self.failUnlessEqual(UCHAR_MAX & VERY_LARGE, getargs_B(VERY_LARGE)) + self.assertEqual(42, getargs_B(42)) + self.assertEqual(42, getargs_B(42)) + self.assertEqual(UCHAR_MAX & VERY_LARGE, getargs_B(VERY_LARGE)) def test_H(self): from _testcapi import getargs_H # H returns 'unsigned short', no range checking self.assertRaises(TypeError, getargs_H, 3.14) - self.failUnlessEqual(99, getargs_H(Long())) - self.failUnlessEqual(99, getargs_H(Int())) + self.assertEqual(99, getargs_H(Long())) + self.assertEqual(99, getargs_H(Int())) - self.failUnlessEqual(USHRT_MAX, getargs_H(-1)) - self.failUnlessEqual(0, getargs_H(0)) - self.failUnlessEqual(USHRT_MAX, getargs_H(USHRT_MAX)) - self.failUnlessEqual(0, getargs_H(USHRT_MAX+1)) + self.assertEqual(USHRT_MAX, getargs_H(-1)) + self.assertEqual(0, getargs_H(0)) + self.assertEqual(USHRT_MAX, getargs_H(USHRT_MAX)) + self.assertEqual(0, getargs_H(USHRT_MAX+1)) - self.failUnlessEqual(42, getargs_H(42)) - self.failUnlessEqual(42, getargs_H(42)) + self.assertEqual(42, getargs_H(42)) + self.assertEqual(42, getargs_H(42)) - self.failUnlessEqual(VERY_LARGE & USHRT_MAX, getargs_H(VERY_LARGE)) + self.assertEqual(VERY_LARGE & USHRT_MAX, getargs_H(VERY_LARGE)) def test_I(self): from _testcapi import getargs_I # I returns 'unsigned int', no range checking self.assertRaises(TypeError, getargs_I, 3.14) - self.failUnlessEqual(99, getargs_I(Long())) - self.failUnlessEqual(99, getargs_I(Int())) + self.assertEqual(99, getargs_I(Long())) + self.assertEqual(99, getargs_I(Int())) - self.failUnlessEqual(UINT_MAX, getargs_I(-1)) - self.failUnlessEqual(0, getargs_I(0)) - self.failUnlessEqual(UINT_MAX, getargs_I(UINT_MAX)) - self.failUnlessEqual(0, getargs_I(UINT_MAX+1)) + self.assertEqual(UINT_MAX, getargs_I(-1)) + self.assertEqual(0, getargs_I(0)) + self.assertEqual(UINT_MAX, getargs_I(UINT_MAX)) + self.assertEqual(0, getargs_I(UINT_MAX+1)) - self.failUnlessEqual(42, getargs_I(42)) - self.failUnlessEqual(42, getargs_I(42)) + self.assertEqual(42, getargs_I(42)) + self.assertEqual(42, getargs_I(42)) - self.failUnlessEqual(VERY_LARGE & UINT_MAX, getargs_I(VERY_LARGE)) + self.assertEqual(VERY_LARGE & UINT_MAX, getargs_I(VERY_LARGE)) def test_k(self): from _testcapi import getargs_k @@ -139,47 +139,47 @@ class Unsigned_TestCase(unittest.TestCase): self.assertRaises(TypeError, getargs_k, Long()) self.assertRaises(TypeError, getargs_k, Int()) - self.failUnlessEqual(ULONG_MAX, getargs_k(-1)) - self.failUnlessEqual(0, getargs_k(0)) - self.failUnlessEqual(ULONG_MAX, getargs_k(ULONG_MAX)) - self.failUnlessEqual(0, getargs_k(ULONG_MAX+1)) + self.assertEqual(ULONG_MAX, getargs_k(-1)) + self.assertEqual(0, getargs_k(0)) + self.assertEqual(ULONG_MAX, getargs_k(ULONG_MAX)) + self.assertEqual(0, getargs_k(ULONG_MAX+1)) - self.failUnlessEqual(42, getargs_k(42)) - self.failUnlessEqual(42, getargs_k(42)) + self.assertEqual(42, getargs_k(42)) + self.assertEqual(42, getargs_k(42)) - self.failUnlessEqual(VERY_LARGE & ULONG_MAX, getargs_k(VERY_LARGE)) + self.assertEqual(VERY_LARGE & ULONG_MAX, getargs_k(VERY_LARGE)) class Signed_TestCase(unittest.TestCase): def test_i(self): from _testcapi import getargs_i # i returns 'int', and does range checking (INT_MIN ... INT_MAX) self.assertRaises(TypeError, getargs_i, 3.14) - self.failUnlessEqual(99, getargs_i(Long())) - self.failUnlessEqual(99, getargs_i(Int())) + self.assertEqual(99, getargs_i(Long())) + self.assertEqual(99, getargs_i(Int())) self.assertRaises(OverflowError, getargs_i, INT_MIN-1) - self.failUnlessEqual(INT_MIN, getargs_i(INT_MIN)) - self.failUnlessEqual(INT_MAX, getargs_i(INT_MAX)) + self.assertEqual(INT_MIN, getargs_i(INT_MIN)) + self.assertEqual(INT_MAX, getargs_i(INT_MAX)) self.assertRaises(OverflowError, getargs_i, INT_MAX+1) - self.failUnlessEqual(42, getargs_i(42)) - self.failUnlessEqual(42, getargs_i(42)) + self.assertEqual(42, getargs_i(42)) + self.assertEqual(42, getargs_i(42)) self.assertRaises(OverflowError, getargs_i, VERY_LARGE) def test_l(self): from _testcapi import getargs_l # l returns 'long', and does range checking (LONG_MIN ... LONG_MAX) self.assertRaises(TypeError, getargs_l, 3.14) - self.failUnlessEqual(99, getargs_l(Long())) - self.failUnlessEqual(99, getargs_l(Int())) + self.assertEqual(99, getargs_l(Long())) + self.assertEqual(99, getargs_l(Int())) self.assertRaises(OverflowError, getargs_l, LONG_MIN-1) - self.failUnlessEqual(LONG_MIN, getargs_l(LONG_MIN)) - self.failUnlessEqual(LONG_MAX, getargs_l(LONG_MAX)) + self.assertEqual(LONG_MIN, getargs_l(LONG_MIN)) + self.assertEqual(LONG_MAX, getargs_l(LONG_MAX)) self.assertRaises(OverflowError, getargs_l, LONG_MAX+1) - self.failUnlessEqual(42, getargs_l(42)) - self.failUnlessEqual(42, getargs_l(42)) + self.assertEqual(42, getargs_l(42)) + self.assertEqual(42, getargs_l(42)) self.assertRaises(OverflowError, getargs_l, VERY_LARGE) def test_n(self): @@ -191,12 +191,12 @@ class Signed_TestCase(unittest.TestCase): self.assertRaises(TypeError, getargs_n, Int()) self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MIN-1) - self.failUnlessEqual(PY_SSIZE_T_MIN, getargs_n(PY_SSIZE_T_MIN)) - self.failUnlessEqual(PY_SSIZE_T_MAX, getargs_n(PY_SSIZE_T_MAX)) + self.assertEqual(PY_SSIZE_T_MIN, getargs_n(PY_SSIZE_T_MIN)) + self.assertEqual(PY_SSIZE_T_MAX, getargs_n(PY_SSIZE_T_MAX)) self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MAX+1) - self.failUnlessEqual(42, getargs_n(42)) - self.failUnlessEqual(42, getargs_n(42)) + self.assertEqual(42, getargs_n(42)) + self.assertEqual(42, getargs_n(42)) self.assertRaises(OverflowError, getargs_n, VERY_LARGE) @@ -204,18 +204,18 @@ class LongLong_TestCase(unittest.TestCase): def test_L(self): from _testcapi import getargs_L # L returns 'long long', and does range checking (LLONG_MIN ... LLONG_MAX) - self.failUnlessRaises(TypeError, getargs_L, "Hello") - self.failUnlessEqual(3, getargs_L(3.14)) - self.failUnlessEqual(99, getargs_L(Long())) - self.failUnlessEqual(99, getargs_L(Int())) + self.assertRaises(TypeError, getargs_L, "Hello") + self.assertEqual(3, getargs_L(3.14)) + self.assertEqual(99, getargs_L(Long())) + self.assertEqual(99, getargs_L(Int())) self.assertRaises(OverflowError, getargs_L, LLONG_MIN-1) - self.failUnlessEqual(LLONG_MIN, getargs_L(LLONG_MIN)) - self.failUnlessEqual(LLONG_MAX, getargs_L(LLONG_MAX)) + self.assertEqual(LLONG_MIN, getargs_L(LLONG_MIN)) + self.assertEqual(LLONG_MAX, getargs_L(LLONG_MAX)) self.assertRaises(OverflowError, getargs_L, LLONG_MAX+1) - self.failUnlessEqual(42, getargs_L(42)) - self.failUnlessEqual(42, getargs_L(42)) + self.assertEqual(42, getargs_L(42)) + self.assertEqual(42, getargs_L(42)) self.assertRaises(OverflowError, getargs_L, VERY_LARGE) def test_K(self): @@ -224,14 +224,14 @@ class LongLong_TestCase(unittest.TestCase): self.assertRaises(TypeError, getargs_K, 3.14) self.assertRaises(TypeError, getargs_K, Long()) self.assertRaises(TypeError, getargs_K, Int()) - self.failUnlessEqual(ULLONG_MAX, getargs_K(ULLONG_MAX)) - self.failUnlessEqual(0, getargs_K(0)) - self.failUnlessEqual(0, getargs_K(ULLONG_MAX+1)) + self.assertEqual(ULLONG_MAX, getargs_K(ULLONG_MAX)) + self.assertEqual(0, getargs_K(0)) + self.assertEqual(0, getargs_K(ULLONG_MAX+1)) - self.failUnlessEqual(42, getargs_K(42)) - self.failUnlessEqual(42, getargs_K(42)) + self.assertEqual(42, getargs_K(42)) + self.assertEqual(42, getargs_K(42)) - self.failUnlessEqual(VERY_LARGE & ULLONG_MAX, getargs_K(VERY_LARGE)) + self.assertEqual(VERY_LARGE & ULLONG_MAX, getargs_K(VERY_LARGE)) class Tuple_TestCase(unittest.TestCase): diff --git a/Lib/test/test_getopt.py b/Lib/test/test_getopt.py index b7a6309..20b5690 100644 --- a/Lib/test/test_getopt.py +++ b/Lib/test/test_getopt.py @@ -23,21 +23,21 @@ class GetoptTests(unittest.TestCase): self.assertRaises(getopt.GetoptError, *args, **kwargs) def test_short_has_arg(self): - self.failUnless(getopt.short_has_arg('a', 'a:')) - self.failIf(getopt.short_has_arg('a', 'a')) + self.assertTrue(getopt.short_has_arg('a', 'a:')) + self.assertFalse(getopt.short_has_arg('a', 'a')) self.assertError(getopt.short_has_arg, 'a', 'b') def test_long_has_args(self): has_arg, option = getopt.long_has_args('abc', ['abc=']) - self.failUnless(has_arg) + self.assertTrue(has_arg) self.assertEqual(option, 'abc') has_arg, option = getopt.long_has_args('abc', ['abc']) - self.failIf(has_arg) + self.assertFalse(has_arg) self.assertEqual(option, 'abc') has_arg, option = getopt.long_has_args('abc', ['abcd']) - self.failIf(has_arg) + self.assertFalse(has_arg) self.assertEqual(option, 'abcd') self.assertError(getopt.long_has_args, 'abc', ['def']) diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index 0023941..d667819 100644 --- a/Lib/test/test_gettext.py +++ b/Lib/test/test_gettext.py @@ -306,7 +306,7 @@ class UnicodeTranslationsTest(GettextBaseTest): self._ = self.t.gettext def test_unicode_msgid(self): - unless = self.failUnless + unless = self.assertTrue unless(isinstance(self._(''), str)) unless(isinstance(self._(''), str)) diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 977f0b8..b861207 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -38,9 +38,9 @@ class TokenTests(unittest.TestCase): if maxsize == 2147483647: self.assertEquals(-2147483647-1, -0o20000000000) # XXX -2147483648 - self.assert_(0o37777777777 > 0) - self.assert_(0xffffffff > 0) - self.assert_(0b1111111111111111111111111111111 > 0) + self.assertTrue(0o37777777777 > 0) + self.assertTrue(0xffffffff > 0) + self.assertTrue(0b1111111111111111111111111111111 > 0) for s in ('2147483648', '0o40000000000', '0x100000000', '0b10000000000000000000000000000000'): try: @@ -49,9 +49,9 @@ class TokenTests(unittest.TestCase): self.fail("OverflowError on huge integer literal %r" % s) elif maxsize == 9223372036854775807: self.assertEquals(-9223372036854775807-1, -0o1000000000000000000000) - self.assert_(0o1777777777777777777777 > 0) - self.assert_(0xffffffffffffffff > 0) - self.assert_(0b11111111111111111111111111111111111111111111111111111111111111 > 0) + self.assertTrue(0o1777777777777777777777 > 0) + self.assertTrue(0xffffffffffffffff > 0) + self.assertTrue(0b11111111111111111111111111111111111111111111111111111111111111 > 0) for s in '9223372036854775808', '0o2000000000000000000000', \ '0x10000000000000000', \ '0b100000000000000000000000000000000000000000000000000000000000000': @@ -87,15 +87,15 @@ class TokenTests(unittest.TestCase): x = 3.1e4 def testStringLiterals(self): - x = ''; y = ""; self.assert_(len(x) == 0 and x == y) - x = '\''; y = "'"; self.assert_(len(x) == 1 and x == y and ord(x) == 39) - x = '"'; y = "\""; self.assert_(len(x) == 1 and x == y and ord(x) == 34) + x = ''; y = ""; self.assertTrue(len(x) == 0 and x == y) + x = '\''; y = "'"; self.assertTrue(len(x) == 1 and x == y and ord(x) == 39) + x = '"'; y = "\""; self.assertTrue(len(x) == 1 and x == y and ord(x) == 34) x = "doesn't \"shrink\" does it" y = 'doesn\'t "shrink" does it' - self.assert_(len(x) == 24 and x == y) + self.assertTrue(len(x) == 24 and x == y) x = "does \"shrink\" doesn't it" y = 'does "shrink" doesn\'t it' - self.assert_(len(x) == 24 and x == y) + self.assertTrue(len(x) == 24 and x == y) x = """ The "quick" brown fox @@ -128,7 +128,7 @@ the \'lazy\' dog.\n\ def testEllipsis(self): x = ... - self.assert_(x is Ellipsis) + self.assertTrue(x is Ellipsis) self.assertRaises(SyntaxError, eval, ".. .") class GrammarTests(unittest.TestCase): @@ -494,7 +494,7 @@ class GrammarTests(unittest.TestCase): nonlocal x, y def testAssert(self): - # assert_stmt: 'assert' test [',' test] + # assertTruestmt: 'assert' test [',' test] assert 1 assert 1, 1 assert lambda x:x diff --git a/Lib/test/test_grp.py b/Lib/test/test_grp.py index 1c1f75f..765b4b6 100755 --- a/Lib/test/test_grp.py +++ b/Lib/test/test_grp.py @@ -12,13 +12,13 @@ class GroupDatabaseTestCase(unittest.TestCase): # attributes promised by the docs self.assertEqual(len(value), 4) self.assertEqual(value[0], value.gr_name) - self.assert_(isinstance(value.gr_name, str)) + self.assertTrue(isinstance(value.gr_name, str)) self.assertEqual(value[1], value.gr_passwd) - self.assert_(isinstance(value.gr_passwd, str)) + self.assertTrue(isinstance(value.gr_passwd, str)) self.assertEqual(value[2], value.gr_gid) - self.assert_(isinstance(value.gr_gid, int)) + self.assertTrue(isinstance(value.gr_gid, int)) self.assertEqual(value[3], value.gr_mem) - self.assert_(isinstance(value.gr_mem, list)) + self.assertTrue(isinstance(value.gr_mem, list)) def test_values(self): entries = grp.getgrall() diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py index baf3a21..d928635 100644 --- a/Lib/test/test_gzip.py +++ b/Lib/test/test_gzip.py @@ -91,7 +91,7 @@ class TestGzip(unittest.TestCase): while 1: L = f.readline(line_length) if not L and line_length != 0: break - self.assert_(len(L) <= line_length) + self.assertTrue(len(L) <= line_length) line_length = (line_length + 1) % 50 f.close() @@ -157,7 +157,7 @@ class TestGzip(unittest.TestCase): def test_1647484(self): for mode in ('wb', 'rb'): f = gzip.GzipFile(self.filename, mode) - self.assert_(hasattr(f, "name")) + self.assertTrue(hasattr(f, "name")) self.assertEqual(f.name, self.filename) f.close() @@ -169,7 +169,7 @@ class TestGzip(unittest.TestCase): fRead = gzip.GzipFile(self.filename) dataRead = fRead.read() self.assertEqual(dataRead, data1) - self.assert_(hasattr(fRead, 'mtime')) + self.assertTrue(hasattr(fRead, 'mtime')) self.assertEqual(fRead.mtime, mtime) fRead.close() diff --git a/Lib/test/test_hash.py b/Lib/test/test_hash.py index 5babc5a..569e5e0 100644 --- a/Lib/test/test_hash.py +++ b/Lib/test/test_hash.py @@ -91,7 +91,7 @@ class HashInheritanceTestCase(unittest.TestCase): objects = (self.default_expected + self.fixed_expected) for obj in objects: - self.assert_(isinstance(obj, Hashable), repr(obj)) + self.assertTrue(isinstance(obj, Hashable), repr(obj)) def test_not_hashable(self): for obj in self.error_expected: diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 5bfea6b..d0ad07d 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -36,7 +36,7 @@ class HashLibTestCase(unittest.TestCase): except ValueError: pass else: - self.assert_(0 == "hashlib didn't reject bogus hash name") + self.assertTrue(0 == "hashlib didn't reject bogus hash name") def test_hexdigest(self): for name in self.supported_hash_names: diff --git a/Lib/test/test_heapq.py b/Lib/test/test_heapq.py index 94c3992..5e3b0ee 100644 --- a/Lib/test/test_heapq.py +++ b/Lib/test/test_heapq.py @@ -46,7 +46,7 @@ class TestHeap(unittest.TestCase): for pos, item in enumerate(heap): if pos: # pos 0 has no parent parentpos = (pos-1) >> 1 - self.assert_(heap[parentpos] <= item) + self.assertTrue(heap[parentpos] <= item) def test_heapify(self): for size in range(30): diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py index 8dcbe7e..fb78eba 100644 --- a/Lib/test/test_hmac.py +++ b/Lib/test/test_hmac.py @@ -280,7 +280,7 @@ class CopyTestCase(unittest.TestCase): # Testing if attributes are of same type. h1 = hmac.HMAC(b"key") h2 = h1.copy() - self.failUnless(h1.digest_cons == h2.digest_cons, + self.assertTrue(h1.digest_cons == h2.digest_cons, "digest constructors don't match.") self.assertEqual(type(h1.inner), type(h2.inner), "Types of inner don't match.") @@ -292,10 +292,10 @@ class CopyTestCase(unittest.TestCase): h1 = hmac.HMAC(b"key") h2 = h1.copy() # Using id() in case somebody has overridden __eq__/__ne__. - self.failUnless(id(h1) != id(h2), "No real copy of the HMAC instance.") - self.failUnless(id(h1.inner) != id(h2.inner), + self.assertTrue(id(h1) != id(h2), "No real copy of the HMAC instance.") + self.assertTrue(id(h1.inner) != id(h2.inner), "No real copy of the attribute 'inner'.") - self.failUnless(id(h1.outer) != id(h2.outer), + self.assertTrue(id(h1.outer) != id(h2.outer), "No real copy of the attribute 'outer'.") def test_equality(self): diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py index 5ec0c25..e5f7143 100644 --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -25,7 +25,7 @@ class DateTimeTests(TestCase): az = time2isoz() bz = time2isoz(500000) for text in (az, bz): - self.assert_(re.search(r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", text), + self.assertTrue(re.search(r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", text), "bad time2isoz format: %s %s" % (az, bz)) def test_http2time(self): @@ -74,7 +74,7 @@ class DateTimeTests(TestCase): t2 = http2time(s.lower()) t3 = http2time(s.upper()) - self.assert_(t == t2 == t3 == test_t, + self.assertTrue(t == t2 == t3 == test_t, "'%s' => %s, %s, %s (%s)" % (s, t, t2, t3, test_t)) def test_http2time_garbage(self): @@ -90,7 +90,7 @@ class DateTimeTests(TestCase): '01-01-1980 00:61:00', '01-01-1980 00:00:62', ]: - self.assert_(http2time(test) is None, + self.assertTrue(http2time(test) is None, "http2time(%s) is not None\n" "http2time(test) %s" % (test, http2time(test)) ) @@ -332,8 +332,8 @@ class CookieTests(TestCase): ]: request = urllib.request.Request(url) r = pol.domain_return_ok(domain, request) - if ok: self.assert_(r) - else: self.assert_(not r) + if ok: self.assertTrue(r) + else: self.assertTrue(not r) def test_missing_value(self): # missing = sign in Cookie: header is regarded by Mozilla as a missing @@ -343,10 +343,10 @@ class CookieTests(TestCase): interact_netscape(c, "http://www.acme.com/", 'eggs') interact_netscape(c, "http://www.acme.com/", '"spam"; path=/foo/') cookie = c._cookies["www.acme.com"]["/"]["eggs"] - self.assert_(cookie.value is None) + self.assertTrue(cookie.value is None) self.assertEquals(cookie.name, "eggs") cookie = c._cookies["www.acme.com"]['/foo/']['"spam"'] - self.assert_(cookie.value is None) + self.assertTrue(cookie.value is None) self.assertEquals(cookie.name, '"spam"') self.assertEquals(lwp_cookie_str(cookie), ( r'"spam"; path="/foo/"; domain="www.acme.com"; ' @@ -388,7 +388,7 @@ class CookieTests(TestCase): try: cookie = c._cookies["www.example.com"]["/"]["ni"] except KeyError: - self.assert_(version is None) # didn't expect a stored cookie + self.assertTrue(version is None) # didn't expect a stored cookie else: self.assertEqual(cookie.version, version) # 2965 cookies are unaffected @@ -410,28 +410,28 @@ class CookieTests(TestCase): cookie = c._cookies[".acme.com"]["/"]["spam"] self.assertEquals(cookie.domain, ".acme.com") - self.assert_(cookie.domain_specified) + self.assertTrue(cookie.domain_specified) self.assertEquals(cookie.port, DEFAULT_HTTP_PORT) - self.assert_(not cookie.port_specified) + self.assertTrue(not cookie.port_specified) # case is preserved - self.assert_(cookie.has_nonstandard_attr("blArgh") and + self.assertTrue(cookie.has_nonstandard_attr("blArgh") and not cookie.has_nonstandard_attr("blargh")) cookie = c._cookies["www.acme.com"]["/"]["ni"] self.assertEquals(cookie.domain, "www.acme.com") - self.assert_(not cookie.domain_specified) + self.assertTrue(not cookie.domain_specified) self.assertEquals(cookie.port, "80,8080") - self.assert_(cookie.port_specified) + self.assertTrue(cookie.port_specified) cookie = c._cookies["www.acme.com"]["/"]["nini"] - self.assert_(cookie.port is None) - self.assert_(not cookie.port_specified) + self.assertTrue(cookie.port is None) + self.assertTrue(not cookie.port_specified) # invalid expires should not cause cookie to be dropped foo = c._cookies["www.acme.com"]["/"]["foo"] spam = c._cookies["www.acme.com"]["/"]["foo"] - self.assert_(foo.expires is None) - self.assert_(spam.expires is None) + self.assertTrue(foo.expires is None) + self.assertTrue(spam.expires is None) def test_ns_parser_special_names(self): # names such as 'expires' are not special in first name=value pair @@ -441,8 +441,8 @@ class CookieTests(TestCase): interact_netscape(c, "http://www.acme.com/", 'version=eggs; spam=eggs') cookies = c._cookies["www.acme.com"]["/"] - self.assert_('expires' in cookies) - self.assert_('version' in cookies) + self.assertTrue('expires' in cookies) + self.assertTrue('version' in cookies) def test_expires(self): # if expires is in future, keep cookie... @@ -457,7 +457,7 @@ class CookieTests(TestCase): now) h = interact_netscape(c, "http://www.acme.com/") self.assertEquals(len(c), 1) - self.assert_('spam="bar"' in h and "foo" not in h) + self.assertTrue('spam="bar"' in h and "foo" not in h) # max-age takes precedence over expires, and zero max-age is request to # delete both new cookie and any old matching cookie @@ -478,7 +478,7 @@ class CookieTests(TestCase): self.assertEquals(len(c), 2) c.clear_session_cookies() self.assertEquals(len(c), 1) - self.assert_('spam="bar"' in h) + self.assertTrue('spam="bar"' in h) # XXX RFC 2965 expiry rules (some apply to V0 too) @@ -488,39 +488,39 @@ class CookieTests(TestCase): c = CookieJar(pol) interact_2965(c, "http://www.acme.com/", 'spam="bar"; Version="1"') - self.assert_("/" in c._cookies["www.acme.com"]) + self.assertTrue("/" in c._cookies["www.acme.com"]) c = CookieJar(pol) interact_2965(c, "http://www.acme.com/blah", 'eggs="bar"; Version="1"') - self.assert_("/" in c._cookies["www.acme.com"]) + self.assertTrue("/" in c._cookies["www.acme.com"]) c = CookieJar(pol) interact_2965(c, "http://www.acme.com/blah/rhubarb", 'eggs="bar"; Version="1"') - self.assert_("/blah/" in c._cookies["www.acme.com"]) + self.assertTrue("/blah/" in c._cookies["www.acme.com"]) c = CookieJar(pol) interact_2965(c, "http://www.acme.com/blah/rhubarb/", 'eggs="bar"; Version="1"') - self.assert_("/blah/rhubarb/" in c._cookies["www.acme.com"]) + self.assertTrue("/blah/rhubarb/" in c._cookies["www.acme.com"]) # Netscape c = CookieJar() interact_netscape(c, "http://www.acme.com/", 'spam="bar"') - self.assert_("/" in c._cookies["www.acme.com"]) + self.assertTrue("/" in c._cookies["www.acme.com"]) c = CookieJar() interact_netscape(c, "http://www.acme.com/blah", 'eggs="bar"') - self.assert_("/" in c._cookies["www.acme.com"]) + self.assertTrue("/" in c._cookies["www.acme.com"]) c = CookieJar() interact_netscape(c, "http://www.acme.com/blah/rhubarb", 'eggs="bar"') - self.assert_("/blah" in c._cookies["www.acme.com"]) + self.assertTrue("/blah" in c._cookies["www.acme.com"]) c = CookieJar() interact_netscape(c, "http://www.acme.com/blah/rhubarb/", 'eggs="bar"') - self.assert_("/blah/rhubarb" in c._cookies["www.acme.com"]) + self.assertTrue("/blah/rhubarb" in c._cookies["www.acme.com"]) def test_escape_path(self): cases = [ @@ -589,14 +589,14 @@ class CookieTests(TestCase): self.assertEquals(request_host(req), "www.acme.com") def test_is_HDN(self): - self.assert_(is_HDN("foo.bar.com")) - self.assert_(is_HDN("1foo2.3bar4.5com")) - self.assert_(not is_HDN("192.168.1.1")) - self.assert_(not is_HDN("")) - self.assert_(not is_HDN(".")) - self.assert_(not is_HDN(".foo.bar.com")) - self.assert_(not is_HDN("..foo")) - self.assert_(not is_HDN("foo.")) + self.assertTrue(is_HDN("foo.bar.com")) + self.assertTrue(is_HDN("1foo2.3bar4.5com")) + self.assertTrue(not is_HDN("192.168.1.1")) + self.assertTrue(not is_HDN("")) + self.assertTrue(not is_HDN(".")) + self.assertTrue(not is_HDN(".foo.bar.com")) + self.assertTrue(not is_HDN("..foo")) + self.assertTrue(not is_HDN("foo.")) def test_reach(self): self.assertEquals(reach("www.acme.com"), ".acme.com") @@ -609,40 +609,40 @@ class CookieTests(TestCase): self.assertEquals(reach("192.168.0.1"), "192.168.0.1") def test_domain_match(self): - self.assert_(domain_match("192.168.1.1", "192.168.1.1")) - self.assert_(not domain_match("192.168.1.1", ".168.1.1")) - self.assert_(domain_match("x.y.com", "x.Y.com")) - self.assert_(domain_match("x.y.com", ".Y.com")) - self.assert_(not domain_match("x.y.com", "Y.com")) - self.assert_(domain_match("a.b.c.com", ".c.com")) - self.assert_(not domain_match(".c.com", "a.b.c.com")) - self.assert_(domain_match("example.local", ".local")) - self.assert_(not domain_match("blah.blah", "")) - self.assert_(not domain_match("", ".rhubarb.rhubarb")) - self.assert_(domain_match("", "")) - - self.assert_(user_domain_match("acme.com", "acme.com")) - self.assert_(not user_domain_match("acme.com", ".acme.com")) - self.assert_(user_domain_match("rhubarb.acme.com", ".acme.com")) - self.assert_(user_domain_match("www.rhubarb.acme.com", ".acme.com")) - self.assert_(user_domain_match("x.y.com", "x.Y.com")) - self.assert_(user_domain_match("x.y.com", ".Y.com")) - self.assert_(not user_domain_match("x.y.com", "Y.com")) - self.assert_(user_domain_match("y.com", "Y.com")) - self.assert_(not user_domain_match(".y.com", "Y.com")) - self.assert_(user_domain_match(".y.com", ".Y.com")) - self.assert_(user_domain_match("x.y.com", ".com")) - self.assert_(not user_domain_match("x.y.com", "com")) - self.assert_(not user_domain_match("x.y.com", "m")) - self.assert_(not user_domain_match("x.y.com", ".m")) - self.assert_(not user_domain_match("x.y.com", "")) - self.assert_(not user_domain_match("x.y.com", ".")) - self.assert_(user_domain_match("192.168.1.1", "192.168.1.1")) + self.assertTrue(domain_match("192.168.1.1", "192.168.1.1")) + self.assertTrue(not domain_match("192.168.1.1", ".168.1.1")) + self.assertTrue(domain_match("x.y.com", "x.Y.com")) + self.assertTrue(domain_match("x.y.com", ".Y.com")) + self.assertTrue(not domain_match("x.y.com", "Y.com")) + self.assertTrue(domain_match("a.b.c.com", ".c.com")) + self.assertTrue(not domain_match(".c.com", "a.b.c.com")) + self.assertTrue(domain_match("example.local", ".local")) + self.assertTrue(not domain_match("blah.blah", "")) + self.assertTrue(not domain_match("", ".rhubarb.rhubarb")) + self.assertTrue(domain_match("", "")) + + self.assertTrue(user_domain_match("acme.com", "acme.com")) + self.assertTrue(not user_domain_match("acme.com", ".acme.com")) + self.assertTrue(user_domain_match("rhubarb.acme.com", ".acme.com")) + self.assertTrue(user_domain_match("www.rhubarb.acme.com", ".acme.com")) + self.assertTrue(user_domain_match("x.y.com", "x.Y.com")) + self.assertTrue(user_domain_match("x.y.com", ".Y.com")) + self.assertTrue(not user_domain_match("x.y.com", "Y.com")) + self.assertTrue(user_domain_match("y.com", "Y.com")) + self.assertTrue(not user_domain_match(".y.com", "Y.com")) + self.assertTrue(user_domain_match(".y.com", ".Y.com")) + self.assertTrue(user_domain_match("x.y.com", ".com")) + self.assertTrue(not user_domain_match("x.y.com", "com")) + self.assertTrue(not user_domain_match("x.y.com", "m")) + self.assertTrue(not user_domain_match("x.y.com", ".m")) + self.assertTrue(not user_domain_match("x.y.com", "")) + self.assertTrue(not user_domain_match("x.y.com", ".")) + self.assertTrue(user_domain_match("192.168.1.1", "192.168.1.1")) # not both HDNs, so must string-compare equal to match - self.assert_(not user_domain_match("192.168.1.1", ".168.1.1")) - self.assert_(not user_domain_match("192.168.1.1", ".")) + self.assertTrue(not user_domain_match("192.168.1.1", ".168.1.1")) + self.assertTrue(not user_domain_match("192.168.1.1", ".")) # empty string is a special case - self.assert_(not user_domain_match("192.168.1.1", "")) + self.assertTrue(not user_domain_match("192.168.1.1", "")) def test_wrong_domain(self): # Cookies whose effective request-host name does not domain-match the @@ -789,7 +789,7 @@ class CookieTests(TestCase): self.assertEquals(len(c), 2) # ... and check is doesn't get returned c.add_cookie_header(req) - self.assert_(not req.has_header("Cookie")) + self.assertTrue(not req.has_header("Cookie")) def test_domain_block(self): pol = DefaultCookiePolicy( @@ -813,7 +813,7 @@ class CookieTests(TestCase): self.assertEquals(len(c), 1) req = urllib.request.Request("http://www.roadrunner.net/") c.add_cookie_header(req) - self.assert_((req.has_header("Cookie") and + self.assertTrue((req.has_header("Cookie") and req.has_header("Cookie2"))) c.clear() @@ -829,7 +829,7 @@ class CookieTests(TestCase): self.assertEquals(len(c), 2) # ... and check is doesn't get returned c.add_cookie_header(req) - self.assert_(not req.has_header("Cookie")) + self.assertTrue(not req.has_header("Cookie")) def test_secure(self): for ns in True, False: @@ -847,10 +847,10 @@ class CookieTests(TestCase): url = "http://www.acme.com/" int(c, url, "foo1=bar%s%s" % (vs, whitespace)) int(c, url, "foo2=bar%s; secure%s" % (vs, whitespace)) - self.assert_( + self.assertTrue( not c._cookies["www.acme.com"]["/"]["foo1"].secure, "non-secure cookie registered secure") - self.assert_( + self.assertTrue( c._cookies["www.acme.com"]["/"]["foo2"].secure, "secure cookie registered non-secure") @@ -868,7 +868,7 @@ class CookieTests(TestCase): req = urllib.request.Request(url) self.assertEquals(len(c), 1) c.add_cookie_header(req) - self.assert_(req.has_header("Cookie")) + self.assertTrue(req.has_header("Cookie")) def test_domain_mirror(self): pol = DefaultCookiePolicy(rfc2965=True) @@ -877,21 +877,21 @@ class CookieTests(TestCase): url = "http://foo.bar.com/" interact_2965(c, url, "spam=eggs; Version=1") h = interact_2965(c, url) - self.assert_("Domain" not in h, + self.assertTrue("Domain" not in h, "absent domain returned with domain present") c = CookieJar(pol) url = "http://foo.bar.com/" interact_2965(c, url, 'spam=eggs; Version=1; Domain=.bar.com') h = interact_2965(c, url) - self.assert_('$Domain=".bar.com"' in h, "domain not returned") + self.assertTrue('$Domain=".bar.com"' in h, "domain not returned") c = CookieJar(pol) url = "http://foo.bar.com/" # note missing initial dot in Domain interact_2965(c, url, 'spam=eggs; Version=1; Domain=bar.com') h = interact_2965(c, url) - self.assert_('$Domain="bar.com"' in h, "domain not returned") + self.assertTrue('$Domain="bar.com"' in h, "domain not returned") def test_path_mirror(self): pol = DefaultCookiePolicy(rfc2965=True) @@ -900,14 +900,14 @@ class CookieTests(TestCase): url = "http://foo.bar.com/" interact_2965(c, url, "spam=eggs; Version=1") h = interact_2965(c, url) - self.assert_("Path" not in h, + self.assertTrue("Path" not in h, "absent path returned with path present") c = CookieJar(pol) url = "http://foo.bar.com/" interact_2965(c, url, 'spam=eggs; Version=1; Path=/') h = interact_2965(c, url) - self.assert_('$Path="/"' in h, "path not returned") + self.assertTrue('$Path="/"' in h, "path not returned") def test_port_mirror(self): pol = DefaultCookiePolicy(rfc2965=True) @@ -916,28 +916,28 @@ class CookieTests(TestCase): url = "http://foo.bar.com/" interact_2965(c, url, "spam=eggs; Version=1") h = interact_2965(c, url) - self.assert_("Port" not in h, + self.assertTrue("Port" not in h, "absent port returned with port present") c = CookieJar(pol) url = "http://foo.bar.com/" interact_2965(c, url, "spam=eggs; Version=1; Port") h = interact_2965(c, url) - self.assert_(re.search("\$Port([^=]|$)", h), + self.assertTrue(re.search("\$Port([^=]|$)", h), "port with no value not returned with no value") c = CookieJar(pol) url = "http://foo.bar.com/" interact_2965(c, url, 'spam=eggs; Version=1; Port="80"') h = interact_2965(c, url) - self.assert_('$Port="80"' in h, + self.assertTrue('$Port="80"' in h, "port with single value not returned with single value") c = CookieJar(pol) url = "http://foo.bar.com/" interact_2965(c, url, 'spam=eggs; Version=1; Port="80,8080"') h = interact_2965(c, url) - self.assert_('$Port="80,8080"' in h, + self.assertTrue('$Port="80,8080"' in h, "port with multiple values not returned with multiple " "values") @@ -948,7 +948,7 @@ class CookieTests(TestCase): 'Comment="does anybody read these?"; ' 'CommentURL="http://foo.bar.net/comment.html"') h = interact_2965(c, url) - self.assert_( + self.assertTrue( "Comment" not in h, "Comment or CommentURL cookie-attributes returned to server") @@ -977,7 +977,7 @@ class CookieTests(TestCase): for i in range(4): i = 0 for c in cs: - self.assert_(isinstance(c, Cookie)) + self.assertTrue(isinstance(c, Cookie)) self.assertEquals(c.version, versions[i]) self.assertEquals(c.name, names[i]) self.assertEquals(c.domain, domains[i]) @@ -1030,7 +1030,7 @@ class CookieTests(TestCase): headers = ["Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000"] c = cookiejar_from_cookie_headers(headers) cookie = c._cookies["www.example.com"]["/"]["c"] - self.assert_(cookie.expires is None) + self.assertTrue(cookie.expires is None) class LWPCookieTests(TestCase): @@ -1104,7 +1104,7 @@ class LWPCookieTests(TestCase): c.add_cookie_header(req) h = req.get_header("Cookie") - self.assert_("PART_NUMBER=ROCKET_LAUNCHER_0001" in h and + self.assertTrue("PART_NUMBER=ROCKET_LAUNCHER_0001" in h and "CUSTOMER=WILE_E_COYOTE" in h) headers.append('Set-Cookie: SHIPPING=FEDEX; path=/foo') @@ -1115,7 +1115,7 @@ class LWPCookieTests(TestCase): c.add_cookie_header(req) h = req.get_header("Cookie") - self.assert_("PART_NUMBER=ROCKET_LAUNCHER_0001" in h and + self.assertTrue("PART_NUMBER=ROCKET_LAUNCHER_0001" in h and "CUSTOMER=WILE_E_COYOTE" in h and "SHIPPING=FEDEX" not in h) @@ -1123,7 +1123,7 @@ class LWPCookieTests(TestCase): c.add_cookie_header(req) h = req.get_header("Cookie") - self.assert_(("PART_NUMBER=ROCKET_LAUNCHER_0001" in h and + self.assertTrue(("PART_NUMBER=ROCKET_LAUNCHER_0001" in h and "CUSTOMER=WILE_E_COYOTE" in h and h.startswith("SHIPPING=FEDEX;"))) @@ -1174,7 +1174,7 @@ class LWPCookieTests(TestCase): req = urllib.request.Request("http://www.acme.com/ammo") c.add_cookie_header(req) - self.assert_(re.search(r"PART_NUMBER=RIDING_ROCKET_0023;\s*" + self.assertTrue(re.search(r"PART_NUMBER=RIDING_ROCKET_0023;\s*" "PART_NUMBER=ROCKET_LAUNCHER_0001", req.get_header("Cookie"))) @@ -1209,7 +1209,7 @@ class LWPCookieTests(TestCase): cookie = interact_2965( c, 'http://www.acme.com/acme/login', 'Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"') - self.assert_(not cookie) + self.assertTrue(not cookie) # # 3. User Agent -> Server @@ -1231,7 +1231,7 @@ class LWPCookieTests(TestCase): cookie = interact_2965(c, 'http://www.acme.com/acme/pickitem', 'Part_Number="Rocket_Launcher_0001"; ' 'Version="1"; Path="/acme"'); - self.assert_(re.search( + self.assertTrue(re.search( r'^\$Version="?1"?; Customer="?WILE_E_COYOTE"?; \$Path="/acme"$', cookie)) @@ -1256,10 +1256,10 @@ class LWPCookieTests(TestCase): cookie = interact_2965(c, "http://www.acme.com/acme/shipping", 'Shipping="FedEx"; Version="1"; Path="/acme"') - self.assert_(re.search(r'^\$Version="?1"?;', cookie)) - self.assert_(re.search(r'Part_Number="?Rocket_Launcher_0001"?;' + self.assertTrue(re.search(r'^\$Version="?1"?;', cookie)) + self.assertTrue(re.search(r'Part_Number="?Rocket_Launcher_0001"?;' '\s*\$Path="\/acme"', cookie)) - self.assert_(re.search(r'Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"', + self.assertTrue(re.search(r'Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"', cookie)) # @@ -1281,7 +1281,7 @@ class LWPCookieTests(TestCase): # Transaction is complete. cookie = interact_2965(c, "http://www.acme.com/acme/process") - self.assert_( + self.assertTrue( re.search(r'Shipping="?FedEx"?;\s*\$Path="\/acme"', cookie) and "WILE_E_COYOTE" in cookie) @@ -1330,7 +1330,7 @@ class LWPCookieTests(TestCase): # than once. cookie = interact_2965(c, "http://www.acme.com/acme/ammo/...") - self.assert_( + self.assertTrue( re.search(r"Riding_Rocket_0023.*Rocket_Launcher_0001", cookie)) # A subsequent request by the user agent to the (same) server for a URL of @@ -1343,7 +1343,7 @@ class LWPCookieTests(TestCase): # the server. cookie = interact_2965(c, "http://www.acme.com/acme/parts/") - self.assert_("Rocket_Launcher_0001" in cookie and + self.assertTrue("Rocket_Launcher_0001" in cookie and "Riding_Rocket_0023" not in cookie) def test_rejection(self): @@ -1357,7 +1357,7 @@ class LWPCookieTests(TestCase): # illegal domain (no embedded dots) cookie = interact_2965(c, "http://www.acme.com", 'foo=bar; domain=".com"; version=1') - self.assert_(not c) + self.assertTrue(not c) # legal domain cookie = interact_2965(c, "http://www.acme.com", @@ -1449,11 +1449,11 @@ class LWPCookieTests(TestCase): c, "http://www.acme.com/foo%2f%25/<<%0anew\345/\346\370\345", 'bar=baz; path="/foo/"; version=1'); version_re = re.compile(r'^\$version=\"?1\"?', re.I) - self.assert_("foo=bar" in cookie and version_re.search(cookie)) + self.assertTrue("foo=bar" in cookie and version_re.search(cookie)) cookie = interact_2965( c, "http://www.acme.com/foo/%25/<<%0anew\345/\346\370\345") - self.assert_(not cookie) + self.assertTrue(not cookie) # unicode URL doesn't raise exception cookie = interact_2965(c, "http://www.acme.com/\xfc") @@ -1493,11 +1493,11 @@ class LWPCookieTests(TestCase): new_c = save_and_restore(c, True) self.assertEquals(len(new_c), 6) # none discarded - self.assert_("name='foo1', value='bar'" in repr(new_c)) + self.assertTrue("name='foo1', value='bar'" in repr(new_c)) new_c = save_and_restore(c, False) self.assertEquals(len(new_c), 4) # 2 of them discarded on save - self.assert_("name='foo1', value='bar'" in repr(new_c)) + self.assertTrue("name='foo1', value='bar'" in repr(new_c)) def test_netscape_misc(self): # Some additional Netscape cookies tests. @@ -1519,7 +1519,7 @@ class LWPCookieTests(TestCase): req = urllib.request.Request("http://foo.bar.acme.com/foo") c.add_cookie_header(req) - self.assert_( + self.assertTrue( "PART_NUMBER=3,4" in req.get_header("Cookie") and "Customer=WILE_E_COYOTE" in req.get_header("Cookie")) @@ -1530,11 +1530,11 @@ class LWPCookieTests(TestCase): "foo1=bar; PORT; Discard; Version=1;") cookie = interact_2965(c, "http://example/", 'foo2=bar; domain=".local"; Version=1') - self.assert_("foo1=bar" in cookie) + self.assertTrue("foo1=bar" in cookie) interact_2965(c, "http://example/", 'foo3=bar; Version=1') cookie = interact_2965(c, "http://example/") - self.assert_("foo2=bar" in cookie and len(c) == 3) + self.assertTrue("foo2=bar" in cookie and len(c) == 3) def test_intranet_domains_ns(self): c = CookieJar(DefaultCookiePolicy(rfc2965 = False)) @@ -1542,10 +1542,10 @@ class LWPCookieTests(TestCase): cookie = interact_netscape(c, "http://example/", 'foo2=bar; domain=.local') self.assertEquals(len(c), 2) - self.assert_("foo1=bar" in cookie) + self.assertTrue("foo1=bar" in cookie) cookie = interact_netscape(c, "http://example/") - self.assert_("foo2=bar" in cookie) + self.assertTrue("foo2=bar" in cookie) self.assertEquals(len(c), 2) def test_empty_path(self): @@ -1614,7 +1614,7 @@ class LWPCookieTests(TestCase): key = "%s_after" % cookie.value counter[key] = counter[key] + 1 - self.assert_(not ( + self.assertTrue(not ( # a permanent cookie got lost accidently counter["perm_after"] != counter["perm_before"] or # a session cookie hasn't been cleared diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index d43c82d..2d76f7a 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -265,7 +265,7 @@ class TimeoutTest(TestCase): # and into the socket. # default -- use global socket timeout - self.assert_(socket.getdefaulttimeout() is None) + self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: httpConn = client.HTTPConnection(HOST, TimeoutTest.PORT) @@ -276,7 +276,7 @@ class TimeoutTest(TestCase): httpConn.close() # no timeout -- do not use global socket default - self.assert_(socket.getdefaulttimeout() is None) + self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: httpConn = client.HTTPConnection(HOST, TimeoutTest.PORT, diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 837d4a6..13e4030 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -217,9 +217,9 @@ class SimpleHTTPServerTestCase(BaseTestCase): def check_status_and_reason(self, response, status, data=None): body = response.read() - self.assert_(response) + self.assertTrue(response) self.assertEquals(response.status, status) - self.assert_(response.reason != None) + self.assertTrue(response.reason != None) if data: self.assertEqual(data, body) diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py index cc6792a..70169e0 100644 --- a/Lib/test/test_imp.py +++ b/Lib/test/test_imp.py @@ -12,7 +12,7 @@ class LockTests(unittest.TestCase): """Very basic test of import lock functions.""" def verify_lock_state(self, expected): - self.failUnlessEqual(imp.lock_held(), expected, + self.assertEqual(imp.lock_held(), expected, "expected imp.lock_held() to be %r" % expected) def testLock(self): LOOPS = 50 diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index 8196865..44e67c3 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -172,12 +172,12 @@ class ImportTest(unittest.TestCase): # import x.y.z binds x in the current namespace import test as x import test.support - self.assert_(x is test, x.__name__) - self.assert_(hasattr(test.support, "__file__")) + self.assertTrue(x is test, x.__name__) + self.assertTrue(hasattr(test.support, "__file__")) # import x.y.z as w binds z as w import test.support as y - self.assert_(y is test.support, y.__name__) + self.assertTrue(y is test.support, y.__name__) def test_import_initless_directory_warning(self): with warnings.catch_warnings(): @@ -195,7 +195,7 @@ class ImportTest(unittest.TestCase): sys.path.insert(0, os.curdir) try: mod = __import__(TESTFN) - self.assert_(TESTFN in sys.modules, "expected module in sys.modules") + self.assertTrue(TESTFN in sys.modules, "expected module in sys.modules") self.assertEquals(mod.a, 1, "module has wrong attribute values") self.assertEquals(mod.b, 2, "module has wrong attribute values") @@ -212,7 +212,7 @@ class ImportTest(unittest.TestCase): self.assertRaises(ZeroDivisionError, imp.reload, mod) # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.failIf(mod is None, "expected module to still be in sys.modules") + self.assertFalse(mod is None, "expected module to still be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. @@ -234,12 +234,12 @@ class ImportTest(unittest.TestCase): sys.path.insert(0, os.curdir) try: mod = __import__(TESTFN) - self.failUnless(mod.__file__.endswith('.py')) + self.assertTrue(mod.__file__.endswith('.py')) os.remove(source) del sys.modules[TESTFN] mod = __import__(TESTFN) ext = mod.__file__[-4:] - self.failUnless(ext in ('.pyc', '.pyo'), ext) + self.assertTrue(ext in ('.pyc', '.pyo'), ext) finally: sys.path.pop(0) remove_files(TESTFN) diff --git a/Lib/test/test_importhooks.py b/Lib/test/test_importhooks.py index f267f79..bf2870d 100644 --- a/Lib/test/test_importhooks.py +++ b/Lib/test/test_importhooks.py @@ -177,7 +177,7 @@ class ImportHooksTestCase(ImportHooksBaseTestCase): TestImporter.modules['reloadmodule'] = (False, test_co) import reloadmodule - self.failIf(hasattr(reloadmodule,'reloaded')) + self.assertFalse(hasattr(reloadmodule,'reloaded')) import hooktestpackage.newrel self.assertEqual(hooktestpackage.newrel.get_name(), diff --git a/Lib/test/test_index.py b/Lib/test/test_index.py index 31609c3..ae905c2 100644 --- a/Lib/test/test_index.py +++ b/Lib/test/test_index.py @@ -59,10 +59,10 @@ class BaseTestCase(unittest.TestCase): def test_error(self): self.o.ind = 'dumb' self.n.ind = 'bad' - self.failUnlessRaises(TypeError, operator.index, self.o) - self.failUnlessRaises(TypeError, operator.index, self.n) - self.failUnlessRaises(TypeError, slice(self.o).indices, 0) - self.failUnlessRaises(TypeError, slice(self.n).indices, 0) + self.assertRaises(TypeError, operator.index, self.o) + self.assertRaises(TypeError, operator.index, self.n) + self.assertRaises(TypeError, slice(self.o).indices, 0) + self.assertRaises(TypeError, slice(self.n).indices, 0) class SeqTestCase(unittest.TestCase): @@ -114,11 +114,11 @@ class SeqTestCase(unittest.TestCase): self.o.ind = 'dumb' self.n.ind = 'bad' indexobj = lambda x, obj: obj.seq[x] - self.failUnlessRaises(TypeError, indexobj, self.o, self) - self.failUnlessRaises(TypeError, indexobj, self.n, self) + self.assertRaises(TypeError, indexobj, self.o, self) + self.assertRaises(TypeError, indexobj, self.n, self) sliceobj = lambda x, obj: obj.seq[x:] - self.failUnlessRaises(TypeError, sliceobj, self.o, self) - self.failUnlessRaises(TypeError, sliceobj, self.n, self) + self.assertRaises(TypeError, sliceobj, self.o, self) + self.assertRaises(TypeError, sliceobj, self.n, self) class ListTestCase(SeqTestCase): @@ -151,7 +151,7 @@ class ListTestCase(SeqTestCase): lst = [5, 6, 7, 8, 9, 11] l2 = lst.__imul__(self.n) - self.assert_(l2 is lst) + self.assertTrue(l2 is lst) self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3) @@ -188,8 +188,8 @@ class OverflowTestCase(unittest.TestCase): (0, maxsize, 1)) def test_sequence_repeat(self): - self.failUnlessRaises(OverflowError, lambda: "a" * self.pos) - self.failUnlessRaises(OverflowError, lambda: "a" * self.neg) + self.assertRaises(OverflowError, lambda: "a" * self.pos) + self.assertRaises(OverflowError, lambda: "a" * self.neg) def test_main(): diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 37be205..c1df23e 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -52,13 +52,13 @@ class IsTestBase(unittest.TestCase): def istest(self, predicate, exp): obj = eval(exp) - self.failUnless(predicate(obj), '%s(%s)' % (predicate.__name__, exp)) + self.assertTrue(predicate(obj), '%s(%s)' % (predicate.__name__, exp)) for other in self.predicates - set([predicate]): if predicate == inspect.isgeneratorfunction and\ other == inspect.isfunction: continue - self.failIf(other(obj), 'not %s(%s)' % (other.__name__, exp)) + self.assertFalse(other(obj), 'not %s(%s)' % (other.__name__, exp)) def generator_function_example(self): for i in range(2): @@ -91,15 +91,15 @@ class TestPredicates(IsTestBase): self.istest(inspect.isgetsetdescriptor, 'type(tb.tb_frame).f_locals') else: - self.failIf(inspect.isgetsetdescriptor(type(tb.tb_frame).f_locals)) + self.assertFalse(inspect.isgetsetdescriptor(type(tb.tb_frame).f_locals)) if hasattr(types, 'MemberDescriptorType'): self.istest(inspect.ismemberdescriptor, 'datetime.timedelta.days') else: - self.failIf(inspect.ismemberdescriptor(datetime.timedelta.days)) + self.assertFalse(inspect.ismemberdescriptor(datetime.timedelta.days)) def test_isroutine(self): - self.assert_(inspect.isroutine(mod.spam)) - self.assert_(inspect.isroutine([].count)) + self.assertTrue(inspect.isroutine(mod.spam)) + self.assertTrue(inspect.isroutine([].count)) def test_isclass(self): self.istest(inspect.isclass, 'mod.StupidGit') @@ -117,8 +117,8 @@ class TestPredicates(IsTestBase): x = C() x.a = 42 members = dict(inspect.getmembers(x)) - self.assert_('a' in members) - self.assert_('b' not in members) + self.assertTrue('a' in members) + self.assertTrue('b' not in members) class TestInterpreterStack(IsTestBase): @@ -132,7 +132,7 @@ class TestInterpreterStack(IsTestBase): self.istest(inspect.isframe, 'mod.fr') def test_stack(self): - self.assert_(len(mod.st) >= 5) + self.assertTrue(len(mod.st) >= 5) self.assertEqual(revise(*mod.st[0][1:]), (modfile, 16, 'eggs', [' st = inspect.stack()\n'], 0)) self.assertEqual(revise(*mod.st[1][1:]), @@ -449,25 +449,25 @@ class TestClassesAndFunctions(unittest.TestCase): datablob = '1' attrs = attrs_wo_objs(A) - self.assert_(('s', 'static method', A) in attrs, 'missing static method') - self.assert_(('c', 'class method', A) in attrs, 'missing class method') - self.assert_(('p', 'property', A) in attrs, 'missing property') - self.assert_(('m', 'method', A) in attrs, + self.assertTrue(('s', 'static method', A) in attrs, 'missing static method') + self.assertTrue(('c', 'class method', A) in attrs, 'missing class method') + self.assertTrue(('p', 'property', A) in attrs, 'missing property') + self.assertTrue(('m', 'method', A) in attrs, 'missing plain method: %r' % attrs) - self.assert_(('m1', 'method', A) in attrs, 'missing plain method') - self.assert_(('datablob', 'data', A) in attrs, 'missing data') + self.assertTrue(('m1', 'method', A) in attrs, 'missing plain method') + self.assertTrue(('datablob', 'data', A) in attrs, 'missing data') class B(A): def m(self): pass attrs = attrs_wo_objs(B) - self.assert_(('s', 'static method', A) in attrs, 'missing static method') - self.assert_(('c', 'class method', A) in attrs, 'missing class method') - self.assert_(('p', 'property', A) in attrs, 'missing property') - self.assert_(('m', 'method', B) in attrs, 'missing plain method') - self.assert_(('m1', 'method', A) in attrs, 'missing plain method') - self.assert_(('datablob', 'data', A) in attrs, 'missing data') + self.assertTrue(('s', 'static method', A) in attrs, 'missing static method') + self.assertTrue(('c', 'class method', A) in attrs, 'missing class method') + self.assertTrue(('p', 'property', A) in attrs, 'missing property') + self.assertTrue(('m', 'method', B) in attrs, 'missing plain method') + self.assertTrue(('m1', 'method', A) in attrs, 'missing plain method') + self.assertTrue(('datablob', 'data', A) in attrs, 'missing data') class C(A): @@ -476,24 +476,24 @@ class TestClassesAndFunctions(unittest.TestCase): def c(self): pass attrs = attrs_wo_objs(C) - self.assert_(('s', 'static method', A) in attrs, 'missing static method') - self.assert_(('c', 'method', C) in attrs, 'missing plain method') - self.assert_(('p', 'property', A) in attrs, 'missing property') - self.assert_(('m', 'method', C) in attrs, 'missing plain method') - self.assert_(('m1', 'method', A) in attrs, 'missing plain method') - self.assert_(('datablob', 'data', A) in attrs, 'missing data') + self.assertTrue(('s', 'static method', A) in attrs, 'missing static method') + self.assertTrue(('c', 'method', C) in attrs, 'missing plain method') + self.assertTrue(('p', 'property', A) in attrs, 'missing property') + self.assertTrue(('m', 'method', C) in attrs, 'missing plain method') + self.assertTrue(('m1', 'method', A) in attrs, 'missing plain method') + self.assertTrue(('datablob', 'data', A) in attrs, 'missing data') class D(B, C): def m1(self): pass attrs = attrs_wo_objs(D) - self.assert_(('s', 'static method', A) in attrs, 'missing static method') - self.assert_(('c', 'method', C) in attrs, 'missing plain method') - self.assert_(('p', 'property', A) in attrs, 'missing property') - self.assert_(('m', 'method', B) in attrs, 'missing plain method') - self.assert_(('m1', 'method', D) in attrs, 'missing plain method') - self.assert_(('datablob', 'data', A) in attrs, 'missing data') + self.assertTrue(('s', 'static method', A) in attrs, 'missing static method') + self.assertTrue(('c', 'method', C) in attrs, 'missing plain method') + self.assertTrue(('p', 'property', A) in attrs, 'missing property') + self.assertTrue(('m', 'method', B) in attrs, 'missing plain method') + self.assertTrue(('m1', 'method', D) in attrs, 'missing plain method') + self.assertTrue(('datablob', 'data', A) in attrs, 'missing data') def test_main(): run_unittest(TestDecorators, TestRetrievingSourceCode, TestOneliners, diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py index dd40ef6..d56e1f0 100644 --- a/Lib/test/test_int.py +++ b/Lib/test/test_int.py @@ -52,15 +52,15 @@ class IntTestCases(unittest.TestCase): s = repr(-1-sys.maxsize) x = int(s) self.assertEqual(x+1, -sys.maxsize) - self.assert_(isinstance(x, int)) + self.assertTrue(isinstance(x, int)) # should return long self.assertEqual(int(s[1:]), sys.maxsize+1) # should return long x = int(1e100) - self.assert_(isinstance(x, int)) + self.assertTrue(isinstance(x, int)) x = int(-1e100) - self.assert_(isinstance(x, int)) + self.assertTrue(isinstance(x, int)) # SF bug 434186: 0x80000000/2 != 0x80000000>>1. @@ -78,7 +78,7 @@ class IntTestCases(unittest.TestCase): self.assertRaises(ValueError, int, '123\x00 245', 20) x = int('1' * 600) - self.assert_(isinstance(x, int)) + self.assertTrue(isinstance(x, int)) self.assertRaises(TypeError, int, 1, 12) @@ -96,8 +96,8 @@ class IntTestCases(unittest.TestCase): self.assertRaises(ValueError, int, "0b", 0) # Bug #3236: Return small longs from PyLong_FromString - self.assert_(int("10") is 10) - self.assert_(int("-1") is -1) + self.assertTrue(int("10") is 10) + self.assertTrue(int("-1") is -1) # SF bug 1334662: int(string, base) wrong answers # Various representations of 2**32 evaluated to 0 diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 407a8a4..a9094d9 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -391,7 +391,7 @@ class IOTest(unittest.TestCase): with self.open(support.TESTFN, "ab") as f: self.assertEqual(f.tell(), 3) with self.open(support.TESTFN, "a") as f: - self.assert_(f.tell() > 0) + self.assertTrue(f.tell() > 0) def test_destructor(self): record = [] @@ -509,7 +509,7 @@ class IOTest(unittest.TestCase): wr = weakref.ref(f) del f support.gc_collect() - self.assert_(wr() is None, wr) + self.assertTrue(wr() is None, wr) with self.open(support.TESTFN, "rb") as f: self.assertEqual(f.read(), b"abcxxx") @@ -615,8 +615,8 @@ class CommonBufferedTests: if s: # The destructor *may* have printed an unraisable error, check it self.assertEqual(len(s.splitlines()), 1) - self.assert_(s.startswith("Exception IOError: "), s) - self.assert_(s.endswith(" ignored"), s) + self.assertTrue(s.startswith("Exception IOError: "), s) + self.assertTrue(s.endswith(" ignored"), s) def test_repr(self): raw = self.MockRawIO() @@ -713,7 +713,7 @@ class BufferedReaderTest(unittest.TestCase, CommonBufferedTests): self.assertEquals(b"e", bufio.read(1)) self.assertEquals(b"fg", bufio.read()) self.assertEquals(b"", bufio.peek(1)) - self.assert_(None is bufio.read()) + self.assertTrue(None is bufio.read()) self.assertEquals(b"", bufio.read()) def test_read_past_eof(self): @@ -815,7 +815,7 @@ class CBufferedReaderTest(BufferedReaderTest): wr = weakref.ref(f) del f support.gc_collect() - self.assert_(wr() is None, wr) + self.assertTrue(wr() is None, wr) class PyBufferedReaderTest(BufferedReaderTest): tp = pyio.BufferedReader @@ -864,7 +864,7 @@ class BufferedWriterTest(unittest.TestCase, CommonBufferedTests): flushed = b"".join(writer._write_stack) # At least (total - 8) bytes were implicitly flushed, perhaps more # depending on the implementation. - self.assert_(flushed.startswith(contents[:-8]), flushed) + self.assertTrue(flushed.startswith(contents[:-8]), flushed) def check_writes(self, intermediate_func): # Lots of writes, test the flushed output is as expected. @@ -1075,7 +1075,7 @@ class CBufferedWriterTest(BufferedWriterTest): wr = weakref.ref(f) del f support.gc_collect() - self.assert_(wr() is None, wr) + self.assertTrue(wr() is None, wr) with self.open(support.TESTFN, "rb") as f: self.assertEqual(f.read(), b"123xxx") @@ -1585,7 +1585,7 @@ class TextIOWrapperTest(unittest.TestCase): t = self.TextIOWrapper(b, encoding="utf8") self.assertEqual(t.encoding, "utf8") t = self.TextIOWrapper(b) - self.assert_(t.encoding is not None) + self.assertTrue(t.encoding is not None) codecs.lookup(t.encoding) def test_encoding_errors_reading(self): @@ -1755,8 +1755,8 @@ class TextIOWrapperTest(unittest.TestCase): if s: # The destructor *may* have printed an unraisable error, check it self.assertEqual(len(s.splitlines()), 1) - self.assert_(s.startswith("Exception IOError: "), s) - self.assert_(s.endswith(" ignored"), s) + self.assertTrue(s.startswith("Exception IOError: "), s) + self.assertTrue(s.endswith(" ignored"), s) # Systematic tests of the text I/O API @@ -2074,7 +2074,7 @@ class CTextIOWrapperTest(TextIOWrapperTest): wr = weakref.ref(t) del t support.gc_collect() - self.assert_(wr() is None, wr) + self.assertTrue(wr() is None, wr) with self.open(support.TESTFN, "rb") as f: self.assertEqual(f.read(), b"456def") @@ -2298,7 +2298,7 @@ class MiscIOTest(unittest.TestCase): wr = weakref.ref(c) del c, b support.gc_collect() - self.assert_(wr() is None, wr) + self.assertTrue(wr() is None, wr) def test_abcs(self): # Test the visible base classes are ABCs. diff --git a/Lib/test/test_ioctl.py b/Lib/test/test_ioctl.py index dcb6695..50597ca 100644 --- a/Lib/test/test_ioctl.py +++ b/Lib/test/test_ioctl.py @@ -24,7 +24,7 @@ class IoctlTests(unittest.TestCase): tty = open("/dev/tty", "r") r = fcntl.ioctl(tty, termios.TIOCGPGRP, " ") rpgrp = struct.unpack("i", r)[0] - self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids)) + self.assertTrue(rpgrp in ids, "%s not in %s" % (rpgrp, ids)) def test_ioctl_mutate(self): import array @@ -34,7 +34,7 @@ class IoctlTests(unittest.TestCase): r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1) rpgrp = buf[0] self.assertEquals(r, 0) - self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids)) + self.assertTrue(rpgrp in ids, "%s not in %s" % (rpgrp, ids)) def test_ioctl_signed_unsigned_code_param(self): if not pty: diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py index 7788502..a826598 100644 --- a/Lib/test/test_iter.py +++ b/Lib/test/test_iter.py @@ -75,7 +75,7 @@ class TestCase(unittest.TestCase): seq = list(range(10)) it = iter(seq) it2 = iter(it) - self.assert_(it is it2) + self.assertTrue(it is it2) # Test that for loops over iterators work def test_iter_for_loop(self): @@ -542,23 +542,23 @@ class TestCase(unittest.TestCase): def test_in_and_not_in(self): for sc5 in IteratingSequenceClass(5), SequenceClass(5): for i in range(5): - self.assert_(i in sc5) + self.assertTrue(i in sc5) for i in "abc", -1, 5, 42.42, (3, 4), [], {1: 1}, 3-12j, sc5: - self.assert_(i not in sc5) + self.assertTrue(i not in sc5) self.assertRaises(TypeError, lambda: 3 in 12) self.assertRaises(TypeError, lambda: 3 not in map) d = {"one": 1, "two": 2, "three": 3, 1j: 2j} for k in d: - self.assert_(k in d) - self.assert_(k not in d.values()) + self.assertTrue(k in d) + self.assertTrue(k not in d.values()) for v in d.values(): - self.assert_(v in d.values()) - self.assert_(v not in d) + self.assertTrue(v in d.values()) + self.assertTrue(v not in d) for k, v in d.items(): - self.assert_((k, v) in d.items()) - self.assert_((v, k) not in d.items()) + self.assertTrue((k, v) in d.items()) + self.assertTrue((v, k) not in d.items()) f = open(TESTFN, "w") try: @@ -569,9 +569,9 @@ class TestCase(unittest.TestCase): try: for chunk in "abc": f.seek(0, 0) - self.assert_(chunk not in f) + self.assertTrue(chunk not in f) f.seek(0, 0) - self.assert_((chunk + "\n") in f) + self.assertTrue((chunk + "\n") in f) finally: f.close() try: diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index af2efa0..d917262 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -131,7 +131,7 @@ class TestBasicOps(unittest.TestCase): self.assertEqual(len(c), r) # r-length combinations self.assertEqual(len(set(c)), r) # no duplicate elements self.assertEqual(list(c), sorted(c)) # keep original ordering - self.assert_(all(e in values for e in c)) # elements taken from input iterable + self.assertTrue(all(e in values for e in c)) # elements taken from input iterable self.assertEqual(list(c), [e for e in values if e in c]) # comb is a subsequence of the input iterable self.assertEqual(result, list(combinations1(values, r))) # matches first pure python version @@ -195,14 +195,14 @@ class TestBasicOps(unittest.TestCase): if n == 0 or r <= 1: self.assertEquals(result, regular_combs) # cases that should be identical else: - self.assert_(set(result) >= set(regular_combs)) # rest should be supersets of regular combs + self.assertTrue(set(result) >= set(regular_combs)) # rest should be supersets of regular combs for c in result: self.assertEqual(len(c), r) # r-length combinations noruns = [k for k,v in groupby(c)] # combo without consecutive repeats self.assertEqual(len(noruns), len(set(noruns))) # no repeats other than consecutive self.assertEqual(list(c), sorted(c)) # keep original ordering - self.assert_(all(e in values for e in c)) # elements taken from input iterable + self.assertTrue(all(e in values for e in c)) # elements taken from input iterable self.assertEqual(noruns, [e for e in values if e in c]) # comb is a subsequence of the input iterable self.assertEqual(result, list(cwr1(values, r))) # matches first pure python version @@ -265,7 +265,7 @@ class TestBasicOps(unittest.TestCase): for p in result: self.assertEqual(len(p), r) # r-length permutations self.assertEqual(len(set(p)), r) # no duplicate elements - self.assert_(all(e in values for e in p)) # elements taken from input iterable + self.assertTrue(all(e in values for e in p)) # elements taken from input iterable self.assertEqual(result, list(permutations1(values, r))) # matches first pure python version self.assertEqual(result, list(permutations2(values, r))) # matches second pure python version if r == n: @@ -836,7 +836,7 @@ class TestBasicOps(unittest.TestCase): # tee pass-through to copyable iterator a, b = tee('abc') c, d = tee(a) - self.assert_(a is c) + self.assertTrue(a is c) # test tee_new t1, t2 = tee('abc') @@ -844,7 +844,7 @@ class TestBasicOps(unittest.TestCase): self.assertRaises(TypeError, tnew) self.assertRaises(TypeError, tnew, 10) t3 = tnew(t1) - self.assert_(list(t1) == list(t2) == list(t3) == list('abc')) + self.assertTrue(list(t1) == list(t2) == list(t3) == list('abc')) # test that tee objects are weak referencable a, b = tee(range(10)) @@ -1356,7 +1356,7 @@ class SubclassWithKwargsTest(unittest.TestCase): Subclass(newarg=1) except TypeError as err: # we expect type errors because of wrong argument count - self.failIf("does not take keyword arguments" in err.args[0]) + self.assertFalse("does not take keyword arguments" in err.args[0]) libreftest = """ Doctest for examples in the library reference: libitertools.tex diff --git a/Lib/test/test_kqueue.py b/Lib/test/test_kqueue.py index 42ef958..dd1ecc8 100644 --- a/Lib/test/test_kqueue.py +++ b/Lib/test/test_kqueue.py @@ -15,10 +15,10 @@ if not hasattr(select, "kqueue"): class TestKQueue(unittest.TestCase): def test_create_queue(self): kq = select.kqueue() - self.assert_(kq.fileno() > 0, kq.fileno()) - self.assert_(not kq.closed) + self.assertTrue(kq.fileno() > 0, kq.fileno()) + self.assertTrue(not kq.closed) kq.close() - self.assert_(kq.closed) + self.assertTrue(kq.closed) self.assertRaises(ValueError, kq.fileno) def test_create_event(self): @@ -34,8 +34,8 @@ class TestKQueue(unittest.TestCase): self.assertEqual(ev.udata, 0) self.assertEqual(ev, ev) self.assertNotEqual(ev, other) - self.assert_(ev < other) - self.assert_(other >= ev) + self.assertTrue(ev < other) + self.assertTrue(other >= ev) for op in lt, le, gt, ge: self.assertRaises(TypeError, op, ev, None) self.assertRaises(TypeError, op, ev, 1) diff --git a/Lib/test/test_largefile.py b/Lib/test/test_largefile.py index 1e868e0..7fd3e0e 100644 --- a/Lib/test/test_largefile.py +++ b/Lib/test/test_largefile.py @@ -139,7 +139,7 @@ class LargeFileTest(unittest.TestCase): for pos in (2**31-1, 2**31, 2**31+1): with self.open(TESTFN, 'rb') as f: f.seek(pos) - self.assert_(f.seekable()) + self.assertTrue(f.seekable()) def test_main(): diff --git a/Lib/test/test_list.py b/Lib/test/test_list.py index 279afec..3510bd5 100644 --- a/Lib/test/test_list.py +++ b/Lib/test/test_list.py @@ -9,7 +9,7 @@ class ListTest(list_tests.CommonTest): l0_3 = [0, 1, 2, 3] l0_3_bis = list(l0_3) self.assertEqual(l0_3, l0_3_bis) - self.assert_(l0_3 is not l0_3_bis) + self.assertTrue(l0_3 is not l0_3_bis) self.assertEqual(list(()), []) self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3]) self.assertEqual(list(''), []) @@ -39,11 +39,11 @@ class ListTest(list_tests.CommonTest): def test_truth(self): super().test_truth() - self.assert_(not []) - self.assert_([42]) + self.assertTrue(not []) + self.assertTrue([42]) def test_identity(self): - self.assert_([] is not []) + self.assertTrue([] is not []) def test_len(self): super().test_len() diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 69ec491..72b26bb 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -99,7 +99,7 @@ class BaseTest(unittest.TestCase): finally: logging._releaseLock() - def assert_log_lines(self, expected_values, stream=None): + def assertTruelog_lines(self, expected_values, stream=None): """Match the collected log lines against the regular expression self.expected_log_pat, and compare the extracted group values to the expected_values list of tuples.""" @@ -165,7 +165,7 @@ class BuiltinLevelsTest(BaseTest): INF.debug(m()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('ERR', 'CRITICAL', '1'), ('ERR', 'ERROR', '2'), ('INF', 'CRITICAL', '3'), @@ -197,7 +197,7 @@ class BuiltinLevelsTest(BaseTest): INF_ERR.info(m()) INF_ERR.debug(m()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('INF.ERR', 'CRITICAL', '1'), ('INF.ERR', 'ERROR', '2'), ]) @@ -228,7 +228,7 @@ class BuiltinLevelsTest(BaseTest): INF_ERR_UNDEF.info(m()) INF_ERR_UNDEF.debug(m()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('INF.UNDEF', 'CRITICAL', '1'), ('INF.UNDEF', 'ERROR', '2'), ('INF.UNDEF', 'WARNING', '3'), @@ -256,7 +256,7 @@ class BuiltinLevelsTest(BaseTest): GRANDCHILD.debug(m()) CHILD.debug(m()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('INF.BADPARENT.UNDEF', 'CRITICAL', '1'), ('INF.BADPARENT.UNDEF', 'INFO', '2'), ('INF.BADPARENT', 'CRITICAL', '3'), @@ -285,7 +285,7 @@ class BasicFilterTest(BaseTest): spam_eggs_fish.info(self.next_message()) # Good. spam_bakedbeans.info(self.next_message()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('spam.eggs', 'INFO', '2'), ('spam.eggs.fish', 'INFO', '3'), ]) @@ -367,7 +367,7 @@ class CustomLevelsAndFiltersTest(BaseTest): self.root_logger.setLevel(VERBOSE) # Levels >= 'Verbose' are good. self.log_at_all_levels(self.root_logger) - self.assert_log_lines([ + self.assertTruelog_lines([ ('Verbose', '5'), ('Sociable', '6'), ('Effusive', '7'), @@ -382,7 +382,7 @@ class CustomLevelsAndFiltersTest(BaseTest): try: # Levels >= 'Sociable' are good. self.log_at_all_levels(self.root_logger) - self.assert_log_lines([ + self.assertTruelog_lines([ ('Sociable', '6'), ('Effusive', '7'), ('Terse', '8'), @@ -413,12 +413,12 @@ class CustomLevelsAndFiltersTest(BaseTest): ('Taciturn', '9'), ('Silent', '10'), ] - self.assert_log_lines(first_lines) + self.assertTruelog_lines(first_lines) specific_filter = VerySpecificFilter() self.root_logger.addFilter(specific_filter) self.log_at_all_levels(self.root_logger) - self.assert_log_lines(first_lines + [ + self.assertTruelog_lines(first_lines + [ # Not only 'Garrulous' is still missing, but also 'Sociable' # and 'Taciturn' ('Boring', '11'), @@ -458,9 +458,9 @@ class MemoryHandlerTest(BaseTest): # The memory handler flushes to its target handler based on specific # criteria (message count and message level). self.mem_logger.debug(self.next_message()) - self.assert_log_lines([]) + self.assertTruelog_lines([]) self.mem_logger.info(self.next_message()) - self.assert_log_lines([]) + self.assertTruelog_lines([]) # This will flush because the level is >= logging.WARNING self.mem_logger.warn(self.next_message()) lines = [ @@ -468,19 +468,19 @@ class MemoryHandlerTest(BaseTest): ('INFO', '2'), ('WARNING', '3'), ] - self.assert_log_lines(lines) + self.assertTruelog_lines(lines) for n in (4, 14): for i in range(9): self.mem_logger.debug(self.next_message()) - self.assert_log_lines(lines) + self.assertTruelog_lines(lines) # This will flush because it's the 10th message since the last # flush. self.mem_logger.debug(self.next_message()) lines = lines + [('DEBUG', str(i)) for i in range(n, n + 10)] - self.assert_log_lines(lines) + self.assertTruelog_lines(lines) self.mem_logger.debug(self.next_message()) - self.assert_log_lines(lines) + self.assertTruelog_lines(lines) class ExceptionFormatter(logging.Formatter): @@ -650,11 +650,11 @@ class ConfigFileTest(BaseTest): logger.info(self.next_message()) # Outputs a message logger.error(self.next_message()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('ERROR', '2'), ], stream=output) # Original logger output is empty. - self.assert_log_lines([]) + self.assertTruelog_lines([]) def test_config1_ok(self, config=config1): # A config file defining a sub-parser as well. @@ -664,12 +664,12 @@ class ConfigFileTest(BaseTest): # Both will output a message logger.info(self.next_message()) logger.error(self.next_message()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('INFO', '1'), ('ERROR', '2'), ], stream=output) # Original logger output is empty. - self.assert_log_lines([]) + self.assertTruelog_lines([]) def test_config2_failure(self): # A simple config file which overrides the default settings. @@ -692,7 +692,7 @@ class ConfigFileTest(BaseTest): self.assertEquals(output.getvalue(), "ERROR:root:just testing\nGot a [RuntimeError]\n") # Original logger output is empty - self.assert_log_lines([]) + self.assertTruelog_lines([]) def test_config5_ok(self): self.test_config1_ok(config=self.config5) @@ -826,7 +826,7 @@ class MemoryTest(BaseTest): key = id(obj), repr(obj) self._survivors[key] = weakref.ref(obj) - def _assert_survival(self): + def _assertTruesurvival(self): """Assert that all objects watched for survival have survived.""" # Trigger cycle breaking. gc.collect() @@ -847,16 +847,16 @@ class MemoryTest(BaseTest): foo.setLevel(logging.DEBUG) self.root_logger.debug(self.next_message()) foo.debug(self.next_message()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('foo', 'DEBUG', '2'), ]) del foo # foo has survived. - self._assert_survival() + self._assertTruesurvival() # foo has retained its settings. bar = logging.getLogger("foo") bar.debug(self.next_message()) - self.assert_log_lines([ + self.assertTruelog_lines([ ('foo', 'DEBUG', '2'), ('foo', 'DEBUG', '3'), ]) @@ -881,7 +881,7 @@ class EncodingTest(BaseTest): # check we wrote exactly those bytes, ignoring trailing \n etc f = open(fn, encoding="utf8") try: - self.failUnlessEqual(f.read().rstrip(), data) + self.assertEqual(f.read().rstrip(), data) finally: f.close() finally: diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index 53d3e6b..1b5e6d4 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -65,7 +65,7 @@ class LongTest(unittest.TestCase): # The sign of the number is also random. def getran(self, ndigits): - self.assert_(ndigits > 0) + self.assertTrue(ndigits > 0) nbits_hi = ndigits * SHIFT nbits_lo = nbits_hi - SHIFT + 1 answer = 0 @@ -74,13 +74,13 @@ class LongTest(unittest.TestCase): while nbits < nbits_lo: bits = (r >> 1) + 1 bits = min(bits, nbits_hi - nbits) - self.assert_(1 <= bits <= SHIFT) + self.assertTrue(1 <= bits <= SHIFT) nbits = nbits + bits answer = answer << bits if r & 1: answer = answer | ((1 << bits) - 1) r = int(random.random() * (SHIFT * 2)) - self.assert_(nbits_lo <= nbits <= nbits_hi) + self.assertTrue(nbits_lo <= nbits <= nbits_hi) if random.random() < 0.5: answer = -answer return answer @@ -106,9 +106,9 @@ class LongTest(unittest.TestCase): eq(r, r2, Frm("divmod returns different mod than %% for %r and %r", x, y)) eq(x, q*y + r, Frm("x != q*y + r after divmod on x=%r, y=%r", x, y)) if y > 0: - self.assert_(0 <= r < y, Frm("bad mod from divmod on %r and %r", x, y)) + self.assertTrue(0 <= r < y, Frm("bad mod from divmod on %r and %r", x, y)) else: - self.assert_(y < r <= 0, Frm("bad mod from divmod on %r and %r", x, y)) + self.assertTrue(y < r <= 0, Frm("bad mod from divmod on %r and %r", x, y)) def test_division(self): digits = list(range(1, MAXDIGITS+1)) + list(range(KARATSUBA_CUTOFF, @@ -538,7 +538,7 @@ class LongTest(unittest.TestCase): y = int(x) except OverflowError: self.fail("int(long(sys.maxsize) + 1) mustn't overflow") - self.assert_(isinstance(y, int), + self.assertTrue(isinstance(y, int), "int(long(sys.maxsize) + 1) should have returned long") x = hugeneg_aslong - 1 @@ -546,14 +546,14 @@ class LongTest(unittest.TestCase): y = int(x) except OverflowError: self.fail("int(long(-sys.maxsize-1) - 1) mustn't overflow") - self.assert_(isinstance(y, int), + self.assertTrue(isinstance(y, int), "int(long(-sys.maxsize-1) - 1) should have returned long") class long2(int): pass x = long2(1<<100) y = int(x) - self.assert_(type(y) is int, + self.assertTrue(type(y) is int, "overflowing int conversion must return long not long subtype") # ----------------------------------- tests of auto int->long conversion @@ -958,7 +958,7 @@ class LongTest(unittest.TestCase): self.assertEqual(k, len(bin(x).lstrip('-0b'))) # Behaviour as specified in the docs if x != 0: - self.assert_(2**(k-1) <= abs(x) < 2**k) + self.assertTrue(2**(k-1) <= abs(x) < 2**k) else: self.assertEqual(k, 0) # Alternative definition: x.bit_length() == 1 + floor(log_2(x)) @@ -995,7 +995,7 @@ class LongTest(unittest.TestCase): got = round(k+offset, -1) expected = v+offset self.assertEqual(got, expected) - self.assert_(type(got) is int) + self.assertTrue(type(got) is int) # larger second argument self.assertEqual(round(-150, -2), -200) @@ -1034,7 +1034,7 @@ class LongTest(unittest.TestCase): got = round(10**k + 324678, -3) expect = 10**k + 325000 self.assertEqual(got, expect) - self.assert_(type(got) is int) + self.assertTrue(type(got) is int) # nonnegative second argument: round(x, n) should just return x for n in range(5): @@ -1042,7 +1042,7 @@ class LongTest(unittest.TestCase): x = random.randrange(-10000, 10000) got = round(x, n) self.assertEqual(got, x) - self.assert_(type(got) is int) + self.assertTrue(type(got) is int) for huge_n in 2**31-1, 2**31, 2**63-1, 2**63, 2**100, 10**100: self.assertEqual(round(8979323, huge_n), 8979323) @@ -1051,7 +1051,7 @@ class LongTest(unittest.TestCase): x = random.randrange(-10000, 10000) got = round(x) self.assertEqual(got, x) - self.assert_(type(got) is int) + self.assertTrue(type(got) is int) # bad second argument bad_exponents = ('brian', 2.0, 0j, None) diff --git a/Lib/test/test_macpath.py b/Lib/test/test_macpath.py index 368d8f5..e13865d 100644 --- a/Lib/test/test_macpath.py +++ b/Lib/test/test_macpath.py @@ -10,37 +10,37 @@ class MacPathTestCase(unittest.TestCase): def test_isabs(self): isabs = macpath.isabs - self.assert_(isabs("xx:yy")) - self.assert_(isabs("xx:yy:")) - self.assert_(isabs("xx:")) - self.failIf(isabs("foo")) - self.failIf(isabs(":foo")) - self.failIf(isabs(":foo:bar")) - self.failIf(isabs(":foo:bar:")) - - self.assert_(isabs(b"xx:yy")) - self.assert_(isabs(b"xx:yy:")) - self.assert_(isabs(b"xx:")) - self.failIf(isabs(b"foo")) - self.failIf(isabs(b":foo")) - self.failIf(isabs(b":foo:bar")) - self.failIf(isabs(b":foo:bar:")) + self.assertTrue(isabs("xx:yy")) + self.assertTrue(isabs("xx:yy:")) + self.assertTrue(isabs("xx:")) + self.assertFalse(isabs("foo")) + self.assertFalse(isabs(":foo")) + self.assertFalse(isabs(":foo:bar")) + self.assertFalse(isabs(":foo:bar:")) + + self.assertTrue(isabs(b"xx:yy")) + self.assertTrue(isabs(b"xx:yy:")) + self.assertTrue(isabs(b"xx:")) + self.assertFalse(isabs(b"foo")) + self.assertFalse(isabs(b":foo")) + self.assertFalse(isabs(b":foo:bar")) + self.assertFalse(isabs(b":foo:bar:")) def test_commonprefix(self): commonprefix = macpath.commonprefix - self.assert_(commonprefix(["home:swenson:spam", "home:swen:spam"]) + self.assertTrue(commonprefix(["home:swenson:spam", "home:swen:spam"]) == "home:swen") - self.assert_(commonprefix([":home:swen:spam", ":home:swen:eggs"]) + self.assertTrue(commonprefix([":home:swen:spam", ":home:swen:eggs"]) == ":home:swen:") - self.assert_(commonprefix([":home:swen:spam", ":home:swen:spam"]) + self.assertTrue(commonprefix([":home:swen:spam", ":home:swen:spam"]) == ":home:swen:spam") - self.assert_(commonprefix([b"home:swenson:spam", b"home:swen:spam"]) + self.assertTrue(commonprefix([b"home:swenson:spam", b"home:swen:spam"]) == b"home:swen") - self.assert_(commonprefix([b":home:swen:spam", b":home:swen:eggs"]) + self.assertTrue(commonprefix([b":home:swen:spam", b":home:swen:eggs"]) == b":home:swen:") - self.assert_(commonprefix([b":home:swen:spam", b":home:swen:spam"]) + self.assertTrue(commonprefix([b":home:swen:spam", b":home:swen:spam"]) == b":home:swen:spam") def test_split(self): diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py index 655b639..8994340 100644 --- a/Lib/test/test_mailbox.py +++ b/Lib/test/test_mailbox.py @@ -21,16 +21,16 @@ class TestBase(unittest.TestCase): def _check_sample(self, msg): # Inspect a mailbox.Message representation of the sample message - self.assert_(isinstance(msg, email.message.Message)) - self.assert_(isinstance(msg, mailbox.Message)) + self.assertTrue(isinstance(msg, email.message.Message)) + self.assertTrue(isinstance(msg, mailbox.Message)) for key, value in _sample_headers.items(): - self.assert_(value in msg.get_all(key)) - self.assert_(msg.is_multipart()) + self.assertTrue(value in msg.get_all(key)) + self.assertTrue(msg.is_multipart()) self.assertEqual(len(msg.get_payload()), len(_sample_payloads)) for i, payload in enumerate(_sample_payloads): part = msg.get_payload(i) - self.assert_(isinstance(part, email.message.Message)) - self.assert_(not isinstance(part, mailbox.Message)) + self.assertTrue(isinstance(part, email.message.Message)) + self.assertTrue(not isinstance(part, mailbox.Message)) self.assertEqual(part.get_payload(), payload) def _delete_recursively(self, target): @@ -92,7 +92,7 @@ class TestMailbox(TestBase): self.assertEqual(len(self._box), 2) method(key0) l = len(self._box) - self.assert_(l == 1, "actual l: %s" % l) + self.assertTrue(l == 1, "actual l: %s" % l) self.assertRaises(KeyError, lambda: self._box[key0]) self.assertRaises(KeyError, lambda: method(key0)) self.assertEqual(self._box.get_string(key1), self._template % 1) @@ -100,7 +100,7 @@ class TestMailbox(TestBase): self.assertEqual(len(self._box), 2) method(key2) l = len(self._box) - self.assert_(l == 1, "actual l: %s" % l) + self.assertTrue(l == 1, "actual l: %s" % l) self.assertRaises(KeyError, lambda: self._box[key2]) self.assertRaises(KeyError, lambda: method(key2)) self.assertEqual(self._box.get_string(key1), self._template % 1) @@ -127,8 +127,8 @@ class TestMailbox(TestBase): msg = self._box.get(key0) self.assertEqual(msg['from'], 'foo') self.assertEqual(msg.get_payload(), '0') - self.assert_(self._box.get('foo') is None) - self.assert_(self._box.get('foo', False) is False) + self.assertTrue(self._box.get('foo') is None) + self.assertTrue(self._box.get('foo', False) is False) self._box.close() self._box = self._factory(self._path) key1 = self._box.add(self._template % 1) @@ -151,7 +151,7 @@ class TestMailbox(TestBase): key0 = self._box.add(self._template % 0) key1 = self._box.add(_sample_message) msg0 = self._box.get_message(key0) - self.assert_(isinstance(msg0, mailbox.Message)) + self.assertTrue(isinstance(msg0, mailbox.Message)) self.assertEqual(msg0['from'], 'foo') self.assertEqual(msg0.get_payload(), '0') self._check_sample(self._box.get_message(key1)) @@ -228,29 +228,29 @@ class TestMailbox(TestBase): count = 0 for value in returned_values: self.assertEqual(value['from'], 'foo') - self.assert_(int(value.get_payload()) < repetitions) + self.assertTrue(int(value.get_payload()) < repetitions) count += 1 self.assertEqual(len(values), count) def test_contains(self): # Check existence of keys using __contains__() method = self._box.__contains__ - self.assert_(not method('foo')) + self.assertTrue(not method('foo')) key0 = self._box.add(self._template % 0) - self.assert_(method(key0)) - self.assert_(not method('foo')) + self.assertTrue(method(key0)) + self.assertTrue(not method('foo')) key1 = self._box.add(self._template % 1) - self.assert_(method(key1)) - self.assert_(method(key0)) - self.assert_(not method('foo')) + self.assertTrue(method(key1)) + self.assertTrue(method(key0)) + self.assertTrue(not method('foo')) self._box.remove(key0) - self.assert_(not method(key0)) - self.assert_(method(key1)) - self.assert_(not method('foo')) + self.assertTrue(not method(key0)) + self.assertTrue(method(key1)) + self.assertTrue(not method('foo')) self._box.remove(key1) - self.assert_(not method(key1)) - self.assert_(not method(key0)) - self.assert_(not method('foo')) + self.assertTrue(not method(key1)) + self.assertTrue(not method(key0)) + self.assertTrue(not method('foo')) def test_len(self, repetitions=10): # Get message count @@ -297,7 +297,7 @@ class TestMailbox(TestBase): for i in range(iterations): self._box.add(self._template % i) for i, key in enumerate(keys): - self.assert_(self._box.get_string(key) == self._template % i) + self.assertTrue(self._box.get_string(key) == self._template % i) self._box.clear() self.assertEqual(len(self._box), 0) for i, key in enumerate(keys): @@ -306,19 +306,19 @@ class TestMailbox(TestBase): def test_pop(self): # Get and remove a message using pop() key0 = self._box.add(self._template % 0) - self.assert_(key0 in self._box) + self.assertTrue(key0 in self._box) key1 = self._box.add(self._template % 1) - self.assert_(key1 in self._box) + self.assertTrue(key1 in self._box) self.assertEqual(self._box.pop(key0).get_payload(), '0') - self.assert_(key0 not in self._box) - self.assert_(key1 in self._box) + self.assertTrue(key0 not in self._box) + self.assertTrue(key1 in self._box) key2 = self._box.add(self._template % 2) - self.assert_(key2 in self._box) + self.assertTrue(key2 in self._box) self.assertEqual(self._box.pop(key2).get_payload(), '2') - self.assert_(key2 not in self._box) - self.assert_(key1 in self._box) + self.assertTrue(key2 not in self._box) + self.assertTrue(key1 in self._box) self.assertEqual(self._box.pop(key1).get_payload(), '1') - self.assert_(key1 not in self._box) + self.assertTrue(key1 not in self._box) self.assertEqual(len(self._box), 0) def test_popitem(self, iterations=10): @@ -329,8 +329,8 @@ class TestMailbox(TestBase): seen = [] for i in range(10): key, msg = self._box.popitem() - self.assert_(key in keys) - self.assert_(key not in seen) + self.assertTrue(key in keys) + self.assertTrue(key not in seen) seen.append(key) self.assertEqual(int(msg.get_payload()), keys.index(key)) self.assertEqual(len(self._box), 0) @@ -377,11 +377,11 @@ class TestMailbox(TestBase): def test_lock_unlock(self): # Lock and unlock the mailbox - self.assert_(not os.path.exists(self._get_lock_path())) + self.assertTrue(not os.path.exists(self._get_lock_path())) self._box.lock() - self.assert_(os.path.exists(self._get_lock_path())) + self.assertTrue(os.path.exists(self._get_lock_path())) self._box.unlock() - self.assert_(not os.path.exists(self._get_lock_path())) + self.assertTrue(not os.path.exists(self._get_lock_path())) def test_close(self): # Close mailbox and flush changes to disk @@ -400,7 +400,7 @@ class TestMailbox(TestBase): keys = self._box.keys() self.assertEqual(len(keys), 3) for key in keys: - self.assert_(self._box.get_string(key) in contents) + self.assertTrue(self._box.get_string(key) in contents) oldbox.close() def test_dump_message(self): @@ -469,7 +469,7 @@ class TestMaildir(TestMailbox): msg.set_subdir('cur') msg.set_info('foo') key = self._box.add(msg) - self.assert_(os.path.exists(os.path.join(self._path, 'cur', '%s%sfoo' % + self.assertTrue(os.path.exists(os.path.join(self._path, 'cur', '%s%sfoo' % (key, self._box.colon)))) def test_get_MM(self): @@ -479,7 +479,7 @@ class TestMaildir(TestMailbox): msg.set_flags('RF') key = self._box.add(msg) msg_returned = self._box.get_message(key) - self.assert_(isinstance(msg_returned, mailbox.MaildirMessage)) + self.assertTrue(isinstance(msg_returned, mailbox.MaildirMessage)) self.assertEqual(msg_returned.get_subdir(), 'cur') self.assertEqual(msg_returned.get_flags(), 'FR') @@ -519,7 +519,7 @@ class TestMaildir(TestMailbox): box = mailbox.Maildir(self._path, factory=FakeMessage) box.colon = self._box.colon msg2 = box.get_message(key) - self.assert_(isinstance(msg2, FakeMessage)) + self.assertTrue(isinstance(msg2, FakeMessage)) def test_initialize_new(self): # Initialize a non-existent mailbox @@ -545,7 +545,7 @@ class TestMaildir(TestMailbox): for subdir in '', 'tmp', 'new', 'cur': path = os.path.join(self._path, subdir) mode = os.stat(path)[stat.ST_MODE] - self.assert_(stat.S_ISDIR(mode), "Not a directory: '%s'" % path) + self.assertTrue(stat.S_ISDIR(mode), "Not a directory: '%s'" % path) def test_list_folders(self): # List folders @@ -561,7 +561,7 @@ class TestMaildir(TestMailbox): self._box.add_folder('foo.bar') folder0 = self._box.get_folder('foo.bar') folder0.add(self._template % 'bar') - self.assert_(os.path.isdir(os.path.join(self._path, '.foo.bar'))) + self.assertTrue(os.path.isdir(os.path.join(self._path, '.foo.bar'))) folder1 = self._box.get_folder('foo.bar') self.assertEqual(folder1.get_string(folder1.keys()[0]), self._template % 'bar') @@ -571,7 +571,7 @@ class TestMaildir(TestMailbox): self._box.add_folder('one') self._box.add_folder('two') self.assertEqual(len(self._box.list_folders()), 2) - self.assert_(set(self._box.list_folders()) == set(('one', 'two'))) + self.assertTrue(set(self._box.list_folders()) == set(('one', 'two'))) self._box.remove_folder('one') self.assertEqual(len(self._box.list_folders()), 1) self.assertEqual(set(self._box.list_folders()), set(('two',))) @@ -596,14 +596,14 @@ class TestMaildir(TestMailbox): f.write("@") f.close() self._box.clean() - self.assert_(os.path.exists(foo_path)) - self.assert_(os.path.exists(bar_path)) + self.assertTrue(os.path.exists(foo_path)) + self.assertTrue(os.path.exists(bar_path)) foo_stat = os.stat(foo_path) os.utime(foo_path, (time.time() - 129600 - 2, foo_stat.st_mtime)) self._box.clean() - self.assert_(not os.path.exists(foo_path)) - self.assert_(os.path.exists(bar_path)) + self.assertTrue(not os.path.exists(foo_path)) + self.assertTrue(os.path.exists(bar_path)) def test_create_tmp(self, repetitions=10): # Create files in tmp directory @@ -623,13 +623,13 @@ class TestMaildir(TestMailbox): "tmp")), "File in wrong location: '%s'" % head) match = pattern.match(tail) - self.assert_(match is not None, "Invalid file name: '%s'" % tail) + self.assertTrue(match is not None, "Invalid file name: '%s'" % tail) groups = match.groups() if previous_groups is not None: - self.assert_(int(groups[0] >= previous_groups[0]), + self.assertTrue(int(groups[0] >= previous_groups[0]), "Non-monotonic seconds: '%s' before '%s'" % (previous_groups[0], groups[0])) - self.assert_(int(groups[1] >= previous_groups[1]) or + self.assertTrue(int(groups[1] >= previous_groups[1]) or groups[0] != groups[1], "Non-monotonic milliseconds: '%s' before '%s'" % (previous_groups[1], groups[1])) @@ -691,10 +691,10 @@ class TestMaildir(TestMailbox): return None box = self._factory(self._path, factory=dummy_factory) folder = box.add_folder('folder1') - self.assert_(folder._factory is dummy_factory) + self.assertTrue(folder._factory is dummy_factory) folder1_alias = box.get_folder('folder1') - self.assert_(folder1_alias._factory is dummy_factory) + self.assertTrue(folder1_alias._factory is dummy_factory) def test_directory_in_folder (self): # Test that mailboxes still work if there's a stray extra directory @@ -721,7 +721,7 @@ class TestMaildir(TestMailbox): os.umask(orig_umask) path = os.path.join(self._path, self._box._lookup(key)) mode = os.stat(path).st_mode - self.assert_(mode & 0o111 == 0) + self.assertTrue(mode & 0o111 == 0) def test_folder_file_perms(self): # From bug #3228, we want to verify that the file created inside a Maildir @@ -802,7 +802,7 @@ class _TestMboxMMDF(TestMailbox): self._box = self._factory(self._path) self.assertEqual(len(self._box), 3) for key in self._box.keys(): - self.assert_(self._box.get_string(key) in values) + self.assertTrue(self._box.get_string(key) in values) self._box.close() self.assertEqual(mtime, os.path.getmtime(self._path)) @@ -859,7 +859,7 @@ class _TestMboxMMDF(TestMailbox): self._box.lock() key2 = self._box.add(msg) self._box.flush() - self.assert_(self._box._locked) + self.assertTrue(self._box._locked) self._box.close() @@ -913,15 +913,15 @@ class TestMH(TestMailbox): new_folder = self._box.add_folder('foo.bar') folder0 = self._box.get_folder('foo.bar') folder0.add(self._template % 'bar') - self.assert_(os.path.isdir(os.path.join(self._path, 'foo.bar'))) + self.assertTrue(os.path.isdir(os.path.join(self._path, 'foo.bar'))) folder1 = self._box.get_folder('foo.bar') self.assertEqual(folder1.get_string(folder1.keys()[0]), self._template % 'bar') # Test for bug #1569790: verify that folders returned by .get_folder() # use the same factory function. - self.assert_(new_folder._factory is self._box._factory) - self.assert_(folder0._factory is self._box._factory) + self.assertTrue(new_folder._factory is self._box._factory) + self.assertTrue(folder0._factory is self._box._factory) def test_add_and_remove_folders(self): # Delete folders @@ -990,7 +990,7 @@ class TestMH(TestMailbox): {'foo':[key0,key1,key3], 'unseen':[key0], 'bar':[key3], 'replied':[key3]}) self._box.pack() - self.assert_(self._box.keys() == [1, 2, 3]) + self.assertTrue(self._box.keys() == [1, 2, 3]) key0 = key0 key1 = key0 + 1 key2 = key1 + 1 @@ -1082,11 +1082,11 @@ class TestMessage(TestBase): # Initialize without arguments msg = self._factory() self._post_initialize_hook(msg) - self.assert_(isinstance(msg, email.message.Message)) - self.assert_(isinstance(msg, mailbox.Message)) - self.assert_(isinstance(msg, self._factory)) + self.assertTrue(isinstance(msg, email.message.Message)) + self.assertTrue(isinstance(msg, mailbox.Message)) + self.assertTrue(isinstance(msg, self._factory)) self.assertEqual(msg.keys(), []) - self.assert_(not msg.is_multipart()) + self.assertTrue(not msg.is_multipart()) self.assertEqual(msg.get_payload(), None) def test_initialize_incorrectly(self): @@ -1159,7 +1159,7 @@ class TestMaildirMessage(TestMessage): def test_date(self): # Use get_date() and set_date() msg = mailbox.MaildirMessage(_sample_message) - self.assert_(abs(msg.get_date() - time.time()) < 60) + self.assertTrue(abs(msg.get_date() - time.time()) < 60) msg.set_date(0.0) self.assertEqual(msg.get_date(), 0.0) @@ -1234,7 +1234,7 @@ class _TestMboxMMDFMessage(TestMessage): # Check contents of "From " line if sender is None: sender = "MAILER-DAEMON" - self.assert_(re.match(sender + r" \w{3} \w{3} [\d ]\d [\d ]\d:\d{2}:" + self.assertTrue(re.match(sender + r" \w{3} \w{3} [\d ]\d [\d ]\d:\d{2}:" r"\d{2} \d{4}", msg.get_from()) is not None) @@ -1309,19 +1309,19 @@ class TestBabylMessage(TestMessage): msg = mailbox.BabylMessage(_sample_message) visible = msg.get_visible() self.assertEqual(visible.keys(), []) - self.assert_(visible.get_payload() is None) + self.assertTrue(visible.get_payload() is None) visible['User-Agent'] = 'FooBar 1.0' visible['X-Whatever'] = 'Blah' self.assertEqual(msg.get_visible().keys(), []) msg.set_visible(visible) visible = msg.get_visible() - self.assert_(visible.keys() == ['User-Agent', 'X-Whatever']) - self.assert_(visible['User-Agent'] == 'FooBar 1.0') + self.assertTrue(visible.keys() == ['User-Agent', 'X-Whatever']) + self.assertTrue(visible['User-Agent'] == 'FooBar 1.0') self.assertEqual(visible['X-Whatever'], 'Blah') - self.assert_(visible.get_payload() is None) + self.assertTrue(visible.get_payload() is None) msg.update_visible() self.assertEqual(visible.keys(), ['User-Agent', 'X-Whatever']) - self.assert_(visible.get_payload() is None) + self.assertTrue(visible.get_payload() is None) visible = msg.get_visible() self.assertEqual(visible.keys(), ['User-Agent', 'Date', 'From', 'To', 'Subject']) @@ -1423,7 +1423,7 @@ class TestMessageConversion(TestBase): msg_mboxMMDF.set_flags(setting) msg = mailbox.MaildirMessage(msg_mboxMMDF) self.assertEqual(msg.get_flags(), result) - self.assert_(msg.get_date() == 0.0, msg.get_date()) + self.assertTrue(msg.get_date() == 0.0, msg.get_date()) msg_mboxMMDF.set_flags('O') self.assertEqual(mailbox.MaildirMessage(msg_mboxMMDF).get_subdir(), 'cur') @@ -1655,7 +1655,7 @@ class TestProxyFileBase(TestBase): proxy.seek(2, 0) self.assertEqual(proxy.read(), b'o' + linesep + b'bar' + linesep) proxy.seek(100) - self.failIf(proxy.read()) + self.assertFalse(proxy.read()) def _test_close(self, proxy): # Close a file @@ -1820,36 +1820,36 @@ class MaildirTestCase(unittest.TestCase): # Test for regression on bug #117490: # Make sure the boxes attribute actually gets set. self.mbox = mailbox.Maildir(support.TESTFN) - #self.assert_(hasattr(self.mbox, "boxes")) + #self.assertTrue(hasattr(self.mbox, "boxes")) #self.assertEqual(len(self.mbox.boxes), 0) - self.assert_(self.mbox.next() is None) - self.assert_(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is None) def test_nonempty_maildir_cur(self): self.createMessage("cur") self.mbox = mailbox.Maildir(support.TESTFN) #self.assertEqual(len(self.mbox.boxes), 1) - self.assert_(self.mbox.next() is not None) - self.assert_(self.mbox.next() is None) - self.assert_(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is not None) + self.assertTrue(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is None) def test_nonempty_maildir_new(self): self.createMessage("new") self.mbox = mailbox.Maildir(support.TESTFN) #self.assertEqual(len(self.mbox.boxes), 1) - self.assert_(self.mbox.next() is not None) - self.assert_(self.mbox.next() is None) - self.assert_(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is not None) + self.assertTrue(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is None) def test_nonempty_maildir_both(self): self.createMessage("cur") self.createMessage("new") self.mbox = mailbox.Maildir(support.TESTFN) #self.assertEqual(len(self.mbox.boxes), 2) - self.assert_(self.mbox.next() is not None) - self.assert_(self.mbox.next() is not None) - self.assert_(self.mbox.next() is None) - self.assert_(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is not None) + self.assertTrue(self.mbox.next() is not None) + self.assertTrue(self.mbox.next() is None) + self.assertTrue(self.mbox.next() is None) ## End: tests from the original module (for backward compatibility). diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index d74f01f..2321a09 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -72,7 +72,7 @@ class MathTests(unittest.TestCase): self.ftest('acos(1)', math.acos(1), 0) self.assertRaises(ValueError, math.acos, INF) self.assertRaises(ValueError, math.acos, NINF) - self.assert_(math.isnan(math.acos(NAN))) + self.assertTrue(math.isnan(math.acos(NAN))) def testAcosh(self): self.assertRaises(TypeError, math.acosh) @@ -82,7 +82,7 @@ class MathTests(unittest.TestCase): self.assertRaises(ValueError, math.acosh, -1) self.assertEquals(math.acosh(INF), INF) self.assertRaises(ValueError, math.acosh, NINF) - self.assert_(math.isnan(math.acosh(NAN))) + self.assertTrue(math.isnan(math.acosh(NAN))) def testAsin(self): self.assertRaises(TypeError, math.asin) @@ -91,7 +91,7 @@ class MathTests(unittest.TestCase): self.ftest('asin(1)', math.asin(1), math.pi/2) self.assertRaises(ValueError, math.asin, INF) self.assertRaises(ValueError, math.asin, NINF) - self.assert_(math.isnan(math.asin(NAN))) + self.assertTrue(math.isnan(math.asin(NAN))) def testAsinh(self): self.assertRaises(TypeError, math.asinh) @@ -100,7 +100,7 @@ class MathTests(unittest.TestCase): self.ftest('asinh(-1)', math.asinh(-1), -0.88137358701954305) self.assertEquals(math.asinh(INF), INF) self.assertEquals(math.asinh(NINF), NINF) - self.assert_(math.isnan(math.asinh(NAN))) + self.assertTrue(math.isnan(math.asinh(NAN))) def testAtan(self): self.assertRaises(TypeError, math.atan) @@ -109,7 +109,7 @@ class MathTests(unittest.TestCase): self.ftest('atan(1)', math.atan(1), math.pi/4) self.ftest('atan(inf)', math.atan(INF), math.pi/2) self.ftest('atan(-inf)', math.atan(NINF), -math.pi/2) - self.assert_(math.isnan(math.atan(NAN))) + self.assertTrue(math.isnan(math.atan(NAN))) def testAtanh(self): self.assertRaises(TypeError, math.atan) @@ -120,7 +120,7 @@ class MathTests(unittest.TestCase): self.assertRaises(ValueError, math.atanh, -1) self.assertRaises(ValueError, math.atanh, INF) self.assertRaises(ValueError, math.atanh, NINF) - self.assert_(math.isnan(math.atanh(NAN))) + self.assertTrue(math.isnan(math.atanh(NAN))) def testAtan2(self): self.assertRaises(TypeError, math.atan2) @@ -137,7 +137,7 @@ class MathTests(unittest.TestCase): self.assertEqual(math.atan2(0., 0.), 0.) self.assertEqual(math.atan2(0., 2.3), 0.) self.assertEqual(math.atan2(0., INF), 0.) - self.assert_(math.isnan(math.atan2(0., NAN))) + self.assertTrue(math.isnan(math.atan2(0., NAN))) # math.atan2(-0, x) self.ftest('atan2(-0., -inf)', math.atan2(-0., NINF), -math.pi) self.ftest('atan2(-0., -2.3)', math.atan2(-0., -2.3), -math.pi) @@ -145,7 +145,7 @@ class MathTests(unittest.TestCase): self.assertEqual(math.atan2(-0., 0.), -0.) self.assertEqual(math.atan2(-0., 2.3), -0.) self.assertEqual(math.atan2(-0., INF), -0.) - self.assert_(math.isnan(math.atan2(-0., NAN))) + self.assertTrue(math.isnan(math.atan2(-0., NAN))) # math.atan2(INF, x) self.ftest('atan2(inf, -inf)', math.atan2(INF, NINF), math.pi*3/4) self.ftest('atan2(inf, -2.3)', math.atan2(INF, -2.3), math.pi/2) @@ -153,7 +153,7 @@ class MathTests(unittest.TestCase): self.ftest('atan2(inf, 0.)', math.atan2(INF, 0.0), math.pi/2) self.ftest('atan2(inf, 2.3)', math.atan2(INF, 2.3), math.pi/2) self.ftest('atan2(inf, inf)', math.atan2(INF, INF), math.pi/4) - self.assert_(math.isnan(math.atan2(INF, NAN))) + self.assertTrue(math.isnan(math.atan2(INF, NAN))) # math.atan2(NINF, x) self.ftest('atan2(-inf, -inf)', math.atan2(NINF, NINF), -math.pi*3/4) self.ftest('atan2(-inf, -2.3)', math.atan2(NINF, -2.3), -math.pi/2) @@ -161,27 +161,27 @@ class MathTests(unittest.TestCase): self.ftest('atan2(-inf, 0.)', math.atan2(NINF, 0.0), -math.pi/2) self.ftest('atan2(-inf, 2.3)', math.atan2(NINF, 2.3), -math.pi/2) self.ftest('atan2(-inf, inf)', math.atan2(NINF, INF), -math.pi/4) - self.assert_(math.isnan(math.atan2(NINF, NAN))) + self.assertTrue(math.isnan(math.atan2(NINF, NAN))) # math.atan2(+finite, x) self.ftest('atan2(2.3, -inf)', math.atan2(2.3, NINF), math.pi) self.ftest('atan2(2.3, -0.)', math.atan2(2.3, -0.), math.pi/2) self.ftest('atan2(2.3, 0.)', math.atan2(2.3, 0.), math.pi/2) self.assertEqual(math.atan2(2.3, INF), 0.) - self.assert_(math.isnan(math.atan2(2.3, NAN))) + self.assertTrue(math.isnan(math.atan2(2.3, NAN))) # math.atan2(-finite, x) self.ftest('atan2(-2.3, -inf)', math.atan2(-2.3, NINF), -math.pi) self.ftest('atan2(-2.3, -0.)', math.atan2(-2.3, -0.), -math.pi/2) self.ftest('atan2(-2.3, 0.)', math.atan2(-2.3, 0.), -math.pi/2) self.assertEqual(math.atan2(-2.3, INF), -0.) - self.assert_(math.isnan(math.atan2(-2.3, NAN))) + self.assertTrue(math.isnan(math.atan2(-2.3, NAN))) # math.atan2(NAN, x) - self.assert_(math.isnan(math.atan2(NAN, NINF))) - self.assert_(math.isnan(math.atan2(NAN, -2.3))) - self.assert_(math.isnan(math.atan2(NAN, -0.))) - self.assert_(math.isnan(math.atan2(NAN, 0.))) - self.assert_(math.isnan(math.atan2(NAN, 2.3))) - self.assert_(math.isnan(math.atan2(NAN, INF))) - self.assert_(math.isnan(math.atan2(NAN, NAN))) + self.assertTrue(math.isnan(math.atan2(NAN, NINF))) + self.assertTrue(math.isnan(math.atan2(NAN, -2.3))) + self.assertTrue(math.isnan(math.atan2(NAN, -0.))) + self.assertTrue(math.isnan(math.atan2(NAN, 0.))) + self.assertTrue(math.isnan(math.atan2(NAN, 2.3))) + self.assertTrue(math.isnan(math.atan2(NAN, INF))) + self.assertTrue(math.isnan(math.atan2(NAN, NAN))) def testCeil(self): self.assertRaises(TypeError, math.ceil) @@ -194,7 +194,7 @@ class MathTests(unittest.TestCase): self.ftest('ceil(-1.5)', math.ceil(-1.5), -1) #self.assertEquals(math.ceil(INF), INF) #self.assertEquals(math.ceil(NINF), NINF) - #self.assert_(math.isnan(math.ceil(NAN))) + #self.assertTrue(math.isnan(math.ceil(NAN))) class TestCeil: def __ceil__(self): @@ -226,14 +226,14 @@ class MathTests(unittest.TestCase): self.assertEquals(copysign(INF, NINF), NINF) self.assertEquals(copysign(NINF, INF), INF) self.assertEquals(copysign(NINF, NINF), NINF) - self.assert_(math.isnan(copysign(NAN, 1.))) - self.assert_(math.isnan(copysign(NAN, INF))) - self.assert_(math.isnan(copysign(NAN, NINF))) - self.assert_(math.isnan(copysign(NAN, NAN))) + self.assertTrue(math.isnan(copysign(NAN, 1.))) + self.assertTrue(math.isnan(copysign(NAN, INF))) + self.assertTrue(math.isnan(copysign(NAN, NINF))) + self.assertTrue(math.isnan(copysign(NAN, NAN))) # copysign(INF, NAN) may be INF or it may be NINF, since # we don't know whether the sign bit of NAN is set on any # given platform. - self.assert_(math.isinf(copysign(INF, NAN))) + self.assertTrue(math.isinf(copysign(INF, NAN))) # similarly, copysign(2., NAN) could be 2. or -2. self.assertEquals(abs(copysign(2., NAN)), 2.) @@ -244,12 +244,12 @@ class MathTests(unittest.TestCase): self.ftest('cos(pi/2)', math.cos(math.pi/2), 0) self.ftest('cos(pi)', math.cos(math.pi), -1) try: - self.assert_(math.isnan(math.cos(INF))) - self.assert_(math.isnan(math.cos(NINF))) + self.assertTrue(math.isnan(math.cos(INF))) + self.assertTrue(math.isnan(math.cos(NINF))) except ValueError: self.assertRaises(ValueError, math.cos, INF) self.assertRaises(ValueError, math.cos, NINF) - self.assert_(math.isnan(math.cos(NAN))) + self.assertTrue(math.isnan(math.cos(NAN))) def testCosh(self): self.assertRaises(TypeError, math.cosh) @@ -257,7 +257,7 @@ class MathTests(unittest.TestCase): self.ftest('cosh(2)-2*cosh(1)**2', math.cosh(2)-2*math.cosh(1)**2, -1) # Thanks to Lambert self.assertEquals(math.cosh(INF), INF) self.assertEquals(math.cosh(NINF), INF) - self.assert_(math.isnan(math.cosh(NAN))) + self.assertTrue(math.isnan(math.cosh(NAN))) def testDegrees(self): self.assertRaises(TypeError, math.degrees) @@ -272,7 +272,7 @@ class MathTests(unittest.TestCase): self.ftest('exp(1)', math.exp(1), math.e) self.assertEquals(math.exp(INF), INF) self.assertEquals(math.exp(NINF), 0.) - self.assert_(math.isnan(math.exp(NAN))) + self.assertTrue(math.isnan(math.exp(NAN))) def testFabs(self): self.assertRaises(TypeError, math.fabs) @@ -309,7 +309,7 @@ class MathTests(unittest.TestCase): self.ftest('floor(-1.23e167)', math.floor(-1.23e167), -1.23e167) #self.assertEquals(math.ceil(INF), INF) #self.assertEquals(math.ceil(NINF), NINF) - #self.assert_(math.isnan(math.floor(NAN))) + #self.assertTrue(math.isnan(math.floor(NAN))) class TestFloor: def __floor__(self): @@ -332,9 +332,9 @@ class MathTests(unittest.TestCase): self.ftest('fmod(-10,1)', math.fmod(-10,1), 0) self.ftest('fmod(-10,0.5)', math.fmod(-10,0.5), 0) self.ftest('fmod(-10,1.5)', math.fmod(-10,1.5), -1) - self.assert_(math.isnan(math.fmod(NAN, 1.))) - self.assert_(math.isnan(math.fmod(1., NAN))) - self.assert_(math.isnan(math.fmod(NAN, NAN))) + self.assertTrue(math.isnan(math.fmod(NAN, 1.))) + self.assertTrue(math.isnan(math.fmod(1., NAN))) + self.assertTrue(math.isnan(math.fmod(NAN, NAN))) self.assertRaises(ValueError, math.fmod, 1., 0.) self.assertRaises(ValueError, math.fmod, INF, 1.) self.assertRaises(ValueError, math.fmod, NINF, 1.) @@ -362,7 +362,7 @@ class MathTests(unittest.TestCase): self.assertEquals(math.frexp(INF)[0], INF) self.assertEquals(math.frexp(NINF)[0], NINF) - self.assert_(math.isnan(math.frexp(NAN)[0])) + self.assertTrue(math.isnan(math.frexp(NAN)[0])) @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), "test requires IEEE 754 doubles") @@ -464,8 +464,8 @@ class MathTests(unittest.TestCase): self.assertEqual(math.hypot(INF, NAN), INF) self.assertEqual(math.hypot(NAN, NINF), INF) self.assertEqual(math.hypot(NINF, NAN), INF) - self.assert_(math.isnan(math.hypot(1.0, NAN))) - self.assert_(math.isnan(math.hypot(NAN, -2.0))) + self.assertTrue(math.isnan(math.hypot(1.0, NAN))) + self.assertTrue(math.isnan(math.hypot(NAN, -2.0))) def testLdexp(self): self.assertRaises(TypeError, math.ldexp) @@ -479,7 +479,7 @@ class MathTests(unittest.TestCase): self.assertEquals(math.ldexp(-1., -1000000), -0.) self.assertEquals(math.ldexp(INF, 30), INF) self.assertEquals(math.ldexp(NINF, -213), NINF) - self.assert_(math.isnan(math.ldexp(NAN, 0))) + self.assertTrue(math.isnan(math.ldexp(NAN, 0))) # large second argument for n in [10**5, 10**10, 10**20, 10**40]: @@ -489,7 +489,7 @@ class MathTests(unittest.TestCase): self.assertEquals(math.ldexp(-1., -n), -0.) self.assertEquals(math.ldexp(0., -n), 0.) self.assertEquals(math.ldexp(-0., -n), -0.) - self.assert_(math.isnan(math.ldexp(NAN, -n))) + self.assertTrue(math.isnan(math.ldexp(NAN, -n))) self.assertRaises(OverflowError, math.ldexp, 1., n) self.assertRaises(OverflowError, math.ldexp, -1., n) @@ -497,7 +497,7 @@ class MathTests(unittest.TestCase): self.assertEquals(math.ldexp(-0., n), -0.) self.assertEquals(math.ldexp(INF, n), INF) self.assertEquals(math.ldexp(NINF, n), NINF) - self.assert_(math.isnan(math.ldexp(NAN, n))) + self.assertTrue(math.isnan(math.ldexp(NAN, n))) def testLog(self): self.assertRaises(TypeError, math.log) @@ -509,7 +509,7 @@ class MathTests(unittest.TestCase): self.ftest('log(10**40, 10**20)', math.log(10**40, 10**20), 2) self.assertEquals(math.log(INF), INF) self.assertRaises(ValueError, math.log, NINF) - self.assert_(math.isnan(math.log(NAN))) + self.assertTrue(math.isnan(math.log(NAN))) def testLog1p(self): self.assertRaises(TypeError, math.log1p) @@ -519,7 +519,7 @@ class MathTests(unittest.TestCase): self.ftest('log1p(1)', math.log1p(1), math.log(2)) self.assertEquals(math.log1p(INF), INF) self.assertRaises(ValueError, math.log1p, NINF) - self.assert_(math.isnan(math.log1p(NAN))) + self.assertTrue(math.isnan(math.log1p(NAN))) n= 2**90 self.assertAlmostEquals(math.log1p(n), 62.383246250395075) self.assertAlmostEquals(math.log1p(n), math.log1p(float(n))) @@ -531,7 +531,7 @@ class MathTests(unittest.TestCase): self.ftest('log10(10)', math.log10(10), 1) self.assertEquals(math.log(INF), INF) self.assertRaises(ValueError, math.log10, NINF) - self.assert_(math.isnan(math.log10(NAN))) + self.assertTrue(math.isnan(math.log10(NAN))) def testModf(self): self.assertRaises(TypeError, math.modf) @@ -549,8 +549,8 @@ class MathTests(unittest.TestCase): self.assertEquals(math.modf(NINF), (-0.0, NINF)) modf_nan = math.modf(NAN) - self.assert_(math.isnan(modf_nan[0])) - self.assert_(math.isnan(modf_nan[1])) + self.assertTrue(math.isnan(modf_nan[0])) + self.assertTrue(math.isnan(modf_nan[1])) def testPow(self): self.assertRaises(TypeError, math.pow) @@ -562,9 +562,9 @@ class MathTests(unittest.TestCase): self.assertEqual(math.pow(NINF, 1), NINF) self.assertEqual((math.pow(1, INF)), 1.) self.assertEqual((math.pow(1, NINF)), 1.) - self.assert_(math.isnan(math.pow(NAN, 1))) - self.assert_(math.isnan(math.pow(2, NAN))) - self.assert_(math.isnan(math.pow(0, NAN))) + self.assertTrue(math.isnan(math.pow(NAN, 1))) + self.assertTrue(math.isnan(math.pow(2, NAN))) + self.assertTrue(math.isnan(math.pow(0, NAN))) self.assertEqual(math.pow(1, NAN), 1) # pow(0., x) @@ -578,7 +578,7 @@ class MathTests(unittest.TestCase): self.assertRaises(ValueError, math.pow, 0., -2.3) self.assertRaises(ValueError, math.pow, 0., -3.) self.assertRaises(ValueError, math.pow, 0., NINF) - self.assert_(math.isnan(math.pow(0., NAN))) + self.assertTrue(math.isnan(math.pow(0., NAN))) # pow(INF, x) self.assertEqual(math.pow(INF, INF), INF) @@ -591,7 +591,7 @@ class MathTests(unittest.TestCase): self.assertEqual(math.pow(INF, -2.3), 0.) self.assertEqual(math.pow(INF, -3.), 0.) self.assertEqual(math.pow(INF, NINF), 0.) - self.assert_(math.isnan(math.pow(INF, NAN))) + self.assertTrue(math.isnan(math.pow(INF, NAN))) # pow(-0., x) self.assertEqual(math.pow(-0., INF), 0.) @@ -604,7 +604,7 @@ class MathTests(unittest.TestCase): self.assertRaises(ValueError, math.pow, -0., -2.3) self.assertRaises(ValueError, math.pow, -0., -3.) self.assertRaises(ValueError, math.pow, -0., NINF) - self.assert_(math.isnan(math.pow(-0., NAN))) + self.assertTrue(math.isnan(math.pow(-0., NAN))) # pow(NINF, x) self.assertEqual(math.pow(NINF, INF), INF) @@ -617,7 +617,7 @@ class MathTests(unittest.TestCase): self.assertEqual(math.pow(NINF, -2.3), 0.) self.assertEqual(math.pow(NINF, -3.), -0.) self.assertEqual(math.pow(NINF, NINF), 0.) - self.assert_(math.isnan(math.pow(NINF, NAN))) + self.assertTrue(math.isnan(math.pow(NINF, NAN))) # pow(-1, x) self.assertEqual(math.pow(-1., INF), 1.) @@ -630,7 +630,7 @@ class MathTests(unittest.TestCase): self.assertRaises(ValueError, math.pow, -1., -2.3) self.assertEqual(math.pow(-1., -3.), -1.) self.assertEqual(math.pow(-1., NINF), 1.) - self.assert_(math.isnan(math.pow(-1., NAN))) + self.assertTrue(math.isnan(math.pow(-1., NAN))) # pow(1, x) self.assertEqual(math.pow(1., INF), 1.) @@ -713,12 +713,12 @@ class MathTests(unittest.TestCase): self.ftest('sin(pi/2)', math.sin(math.pi/2), 1) self.ftest('sin(-pi/2)', math.sin(-math.pi/2), -1) try: - self.assert_(math.isnan(math.sin(INF))) - self.assert_(math.isnan(math.sin(NINF))) + self.assertTrue(math.isnan(math.sin(INF))) + self.assertTrue(math.isnan(math.sin(NINF))) except ValueError: self.assertRaises(ValueError, math.sin, INF) self.assertRaises(ValueError, math.sin, NINF) - self.assert_(math.isnan(math.sin(NAN))) + self.assertTrue(math.isnan(math.sin(NAN))) def testSinh(self): self.assertRaises(TypeError, math.sinh) @@ -727,7 +727,7 @@ class MathTests(unittest.TestCase): self.ftest('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0) self.assertEquals(math.sinh(INF), INF) self.assertEquals(math.sinh(NINF), NINF) - self.assert_(math.isnan(math.sinh(NAN))) + self.assertTrue(math.isnan(math.sinh(NAN))) def testSqrt(self): self.assertRaises(TypeError, math.sqrt) @@ -736,7 +736,7 @@ class MathTests(unittest.TestCase): self.ftest('sqrt(4)', math.sqrt(4), 2) self.assertEquals(math.sqrt(INF), INF) self.assertRaises(ValueError, math.sqrt, NINF) - self.assert_(math.isnan(math.sqrt(NAN))) + self.assertTrue(math.isnan(math.sqrt(NAN))) def testTan(self): self.assertRaises(TypeError, math.tan) @@ -744,12 +744,12 @@ class MathTests(unittest.TestCase): self.ftest('tan(pi/4)', math.tan(math.pi/4), 1) self.ftest('tan(-pi/4)', math.tan(-math.pi/4), -1) try: - self.assert_(math.isnan(math.tan(INF))) - self.assert_(math.isnan(math.tan(NINF))) + self.assertTrue(math.isnan(math.tan(INF))) + self.assertTrue(math.isnan(math.tan(NINF))) except: self.assertRaises(ValueError, math.tan, INF) self.assertRaises(ValueError, math.tan, NINF) - self.assert_(math.isnan(math.tan(NAN))) + self.assertTrue(math.isnan(math.tan(NAN))) def testTanh(self): self.assertRaises(TypeError, math.tanh) @@ -757,7 +757,7 @@ class MathTests(unittest.TestCase): self.ftest('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0) self.ftest('tanh(inf)', math.tanh(INF), 1) self.ftest('tanh(-inf)', math.tanh(NINF), -1) - self.assert_(math.isnan(math.tanh(NAN))) + self.assertTrue(math.isnan(math.tanh(NAN))) # check that tanh(-0.) == -0. on IEEE 754 systems if float.__getformat__("double").startswith("IEEE"): self.assertEqual(math.tanh(-0.), -0.) @@ -804,20 +804,20 @@ class MathTests(unittest.TestCase): self.assertEqual(math.copysign(4., -0.), -4.0) def testIsnan(self): - self.assert_(math.isnan(float("nan"))) - self.assert_(math.isnan(float("inf")* 0.)) - self.failIf(math.isnan(float("inf"))) - self.failIf(math.isnan(0.)) - self.failIf(math.isnan(1.)) + self.assertTrue(math.isnan(float("nan"))) + self.assertTrue(math.isnan(float("inf")* 0.)) + self.assertFalse(math.isnan(float("inf"))) + self.assertFalse(math.isnan(0.)) + self.assertFalse(math.isnan(1.)) def testIsinf(self): - self.assert_(math.isinf(float("inf"))) - self.assert_(math.isinf(float("-inf"))) - self.assert_(math.isinf(1E400)) - self.assert_(math.isinf(-1E400)) - self.failIf(math.isinf(float("nan"))) - self.failIf(math.isinf(0.)) - self.failIf(math.isinf(1.)) + self.assertTrue(math.isinf(float("inf"))) + self.assertTrue(math.isinf(float("-inf"))) + self.assertTrue(math.isinf(1E400)) + self.assertTrue(math.isinf(-1E400)) + self.assertFalse(math.isinf(float("nan"))) + self.assertFalse(math.isinf(0.)) + self.assertFalse(math.isinf(1.)) # RED_FLAG 16-Oct-2000 Tim # While 2.0 is more consistent about exceptions than previous releases, it diff --git a/Lib/test/test_memoryio.py b/Lib/test/test_memoryio.py index 187adad..48d5354 100644 --- a/Lib/test/test_memoryio.py +++ b/Lib/test/test_memoryio.py @@ -222,8 +222,8 @@ class MemoryTestMixin: memio = self.ioclass(buf * 10) self.assertEqual(iter(memio), memio) - self.failUnless(hasattr(memio, '__iter__')) - self.failUnless(hasattr(memio, '__next__')) + self.assertTrue(hasattr(memio, '__iter__')) + self.assertTrue(hasattr(memio, '__next__')) i = 0 for line in memio: self.assertEqual(line, buf) diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py index 31bfa62..abda678 100644 --- a/Lib/test/test_memoryview.py +++ b/Lib/test/test_memoryview.py @@ -28,7 +28,7 @@ class AbstractMemoryTests: oldrefcount = sys.getrefcount(b) m = self._view(b) self.assertEquals(m[0], item(b"a")) - self.assert_(isinstance(m[0], bytes), type(m[0])) + self.assertTrue(isinstance(m[0], bytes), type(m[0])) self.assertEquals(m[5], item(b"f")) self.assertEquals(m[-1], item(b"f")) self.assertEquals(m[-6], item(b"a")) @@ -119,7 +119,7 @@ class AbstractMemoryTests: expected = b"".join( self.getitem_type(bytes([c])) for c in b"abcdef") self.assertEquals(b, expected) - self.assert_(isinstance(b, bytes), type(b)) + self.assertTrue(isinstance(b, bytes), type(b)) def test_tolist(self): for tp in self._types: @@ -214,7 +214,7 @@ class AbstractMemoryTests: b = m = o = None # The cycle must be broken gc.collect() - self.assert_(wr() is None, wr()) + self.assertTrue(wr() is None, wr()) # Variations on source objects for the buffer: bytes-like objects, then arrays @@ -291,8 +291,8 @@ class BytesMemoryviewTest(unittest.TestCase, def test_constructor(self): for tp in self._types: ob = tp(self._source) - self.assert_(memoryview(ob)) - self.assert_(memoryview(object=ob)) + self.assertTrue(memoryview(ob)) + self.assertTrue(memoryview(object=ob)) self.assertRaises(TypeError, memoryview) self.assertRaises(TypeError, memoryview, ob, ob) self.assertRaises(TypeError, memoryview, argument=ob) diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py index 9651a60..7918de6 100644 --- a/Lib/test/test_mimetypes.py +++ b/Lib/test/test_mimetypes.py @@ -47,7 +47,7 @@ class MimeTypesTestCase(unittest.TestCase): def test_guess_all_types(self): eq = self.assertEqual - unless = self.failUnless + unless = self.assertTrue # First try strict. Use a set here for testing the results because if # test_urllib2 is run before test_mimetypes, global state is modified # such that the 'all' set will have more items in it. diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py index 76b7354..0a0a663 100644 --- a/Lib/test/test_minidom.py +++ b/Lib/test/test_minidom.py @@ -733,7 +733,7 @@ class MinidomTest(unittest.TestCase): def check_clone_attribute(self, deep, testName): doc = parseString("") attr = doc.documentElement.getAttributeNode("attr") - self.failIfEqual(attr, None) + self.assertNotEqual(attr, None) clone = attr.cloneNode(deep) self.confirm(not clone.isSameNode(attr)) self.confirm(not attr.isSameNode(clone)) diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index dec0980..eae4157 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -501,8 +501,8 @@ class MmapTests(unittest.TestCase): f.close() def test_error(self): - self.assert_(issubclass(mmap.error, EnvironmentError)) - self.assert_("mmap.error" in str(mmap.error)) + self.assertTrue(issubclass(mmap.error, EnvironmentError)) + self.assertTrue("mmap.error" in str(mmap.error)) def test_io_methods(self): data = b"0123456789" diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py index 45556e8..225e954 100644 --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -10,7 +10,7 @@ class ModuleTests(unittest.TestCase): # An uninitialized module has no __dict__ or __name__, # and __doc__ is None foo = ModuleType.__new__(ModuleType) - self.failUnless(foo.__dict__ is None) + self.assertTrue(foo.__dict__ is None) try: s = foo.__name__ self.fail("__name__ = %s" % repr(s)) @@ -52,7 +52,7 @@ class ModuleTests(unittest.TestCase): self.assertEqual(foo.bar, 42) self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": "foodoc", "bar": 42}) - self.failUnless(foo.__dict__ is d) + self.assertTrue(foo.__dict__ is d) def test_main(): run_unittest(ModuleTests) diff --git a/Lib/test/test_modulefinder.py b/Lib/test/test_modulefinder.py index bddd6c5..b4fa06a 100644 --- a/Lib/test/test_modulefinder.py +++ b/Lib/test/test_modulefinder.py @@ -233,12 +233,12 @@ class ModuleFinderTest(unittest.TestCase): more = list(found - modules) less = list(modules - found) # check if we found what we expected, not more, not less - self.failUnlessEqual((more, less), ([], [])) + self.assertEqual((more, less), ([], [])) # check for missing and maybe missing modules bad, maybe = mf.any_missing_maybe() - self.failUnlessEqual(bad, missing) - self.failUnlessEqual(maybe, maybe_missing) + self.assertEqual(bad, missing) + self.assertEqual(maybe, maybe_missing) finally: distutils.dir_util.remove_tree(TEST_DIR) diff --git a/Lib/test/test_multibytecodec.py b/Lib/test/test_multibytecodec.py index 1d9d9e35..b482b39 100644 --- a/Lib/test/test_multibytecodec.py +++ b/Lib/test/test_multibytecodec.py @@ -242,10 +242,10 @@ class Test_ISO2022(unittest.TestCase): self.assertEqual(iso2022jp2.decode('iso2022-jp-2'), uni) def test_iso2022_jp_g0(self): - self.failIf(b'\x0e' in '\N{SOFT HYPHEN}'.encode('iso-2022-jp-2')) + self.assertFalse(b'\x0e' in '\N{SOFT HYPHEN}'.encode('iso-2022-jp-2')) for encoding in ('iso-2022-jp-2004', 'iso-2022-jp-3'): e = '\u3406'.encode(encoding) - self.failIf(any(x > 0x80 for x in e)) + self.assertFalse(any(x > 0x80 for x in e)) def test_bug1572832(self): if sys.maxunicode >= 0x10000: diff --git a/Lib/test/test_multibytecodec_support.py b/Lib/test/test_multibytecodec_support.py index 3e0476e..5e68856 100644 --- a/Lib/test/test_multibytecodec_support.py +++ b/Lib/test/test_multibytecodec_support.py @@ -53,9 +53,9 @@ class TestBase: if expected: result = func(source, scheme)[0] if func is self.decode: - self.assert_(type(result) is str, type(result)) + self.assertTrue(type(result) is str, type(result)) else: - self.assert_(type(result) is bytes, type(result)) + self.assertTrue(type(result) is bytes, type(result)) self.assertEqual(result, expected) else: self.assertRaises(UnicodeError, func, source, scheme) diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py index 938e255..21ff88c 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -34,11 +34,11 @@ class NetrcTestCase(unittest.TestCase): def test_case_1(self): nrc = netrc.netrc(temp_filename) - self.assert_(nrc.macros == {'macro1':['line1\n', 'line2\n'], + self.assertTrue(nrc.macros == {'macro1':['line1\n', 'line2\n'], 'macro2':['line3\n', 'line4\n']} ) - self.assert_(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1')) - self.assert_(nrc.hosts['default'] == ('log2', None, 'pass2')) + self.assertTrue(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1')) + self.assertTrue(nrc.hosts['default'] == ('log2', None, 'pass2')) def test_main(): support.run_unittest(NetrcTestCase) diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py index 9e85e0a..f92a714 100644 --- a/Lib/test/test_normalization.py +++ b/Lib/test/test_normalization.py @@ -67,14 +67,14 @@ class NormalizationTest(unittest.TestCase): continue # Perform tests - self.failUnless(c2 == NFC(c1) == NFC(c2) == NFC(c3), line) - self.failUnless(c4 == NFC(c4) == NFC(c5), line) - self.failUnless(c3 == NFD(c1) == NFD(c2) == NFD(c3), line) - self.failUnless(c5 == NFD(c4) == NFD(c5), line) - self.failUnless(c4 == NFKC(c1) == NFKC(c2) == \ + self.assertTrue(c2 == NFC(c1) == NFC(c2) == NFC(c3), line) + self.assertTrue(c4 == NFC(c4) == NFC(c5), line) + self.assertTrue(c3 == NFD(c1) == NFD(c2) == NFD(c3), line) + self.assertTrue(c5 == NFD(c4) == NFD(c5), line) + self.assertTrue(c4 == NFKC(c1) == NFKC(c2) == \ NFKC(c3) == NFKC(c4) == NFKC(c5), line) - self.failUnless(c5 == NFKD(c1) == NFKD(c2) == \ + self.assertTrue(c5 == NFKD(c1) == NFKD(c2) == \ NFKD(c3) == NFKD(c4) == NFKD(c5), line) @@ -87,7 +87,7 @@ class NormalizationTest(unittest.TestCase): X = chr(c) if X in part1_data: continue - self.failUnless(X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X), c) + self.assertTrue(X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X), c) def test_bug_834676(self): # Check for bug 834676 diff --git a/Lib/test/test_opcodes.py b/Lib/test/test_opcodes.py index 4403a11..8b7fd9e 100644 --- a/Lib/test/test_opcodes.py +++ b/Lib/test/test_opcodes.py @@ -60,7 +60,7 @@ class OpcodeTest(unittest.TestCase): try: raise DClass(a) except DClass as v: - self.assert_(isinstance(v, DClass)) + self.assertTrue(isinstance(v, DClass)) else: self.fail("no exception") diff --git a/Lib/test/test_operator.py b/Lib/test/test_operator.py index bf38298..aa3219f 100644 --- a/Lib/test/test_operator.py +++ b/Lib/test/test_operator.py @@ -34,237 +34,237 @@ class Seq2(object): class OperatorTestCase(unittest.TestCase): def test_lt(self): - self.failUnlessRaises(TypeError, operator.lt) - self.failUnlessRaises(TypeError, operator.lt, 1j, 2j) - self.failIf(operator.lt(1, 0)) - self.failIf(operator.lt(1, 0.0)) - self.failIf(operator.lt(1, 1)) - self.failIf(operator.lt(1, 1.0)) - self.failUnless(operator.lt(1, 2)) - self.failUnless(operator.lt(1, 2.0)) + self.assertRaises(TypeError, operator.lt) + self.assertRaises(TypeError, operator.lt, 1j, 2j) + self.assertFalse(operator.lt(1, 0)) + self.assertFalse(operator.lt(1, 0.0)) + self.assertFalse(operator.lt(1, 1)) + self.assertFalse(operator.lt(1, 1.0)) + self.assertTrue(operator.lt(1, 2)) + self.assertTrue(operator.lt(1, 2.0)) def test_le(self): - self.failUnlessRaises(TypeError, operator.le) - self.failUnlessRaises(TypeError, operator.le, 1j, 2j) - self.failIf(operator.le(1, 0)) - self.failIf(operator.le(1, 0.0)) - self.failUnless(operator.le(1, 1)) - self.failUnless(operator.le(1, 1.0)) - self.failUnless(operator.le(1, 2)) - self.failUnless(operator.le(1, 2.0)) + self.assertRaises(TypeError, operator.le) + self.assertRaises(TypeError, operator.le, 1j, 2j) + self.assertFalse(operator.le(1, 0)) + self.assertFalse(operator.le(1, 0.0)) + self.assertTrue(operator.le(1, 1)) + self.assertTrue(operator.le(1, 1.0)) + self.assertTrue(operator.le(1, 2)) + self.assertTrue(operator.le(1, 2.0)) def test_eq(self): class C(object): def __eq__(self, other): raise SyntaxError - self.failUnlessRaises(TypeError, operator.eq) - self.failUnlessRaises(SyntaxError, operator.eq, C(), C()) - self.failIf(operator.eq(1, 0)) - self.failIf(operator.eq(1, 0.0)) - self.failUnless(operator.eq(1, 1)) - self.failUnless(operator.eq(1, 1.0)) - self.failIf(operator.eq(1, 2)) - self.failIf(operator.eq(1, 2.0)) + self.assertRaises(TypeError, operator.eq) + self.assertRaises(SyntaxError, operator.eq, C(), C()) + self.assertFalse(operator.eq(1, 0)) + self.assertFalse(operator.eq(1, 0.0)) + self.assertTrue(operator.eq(1, 1)) + self.assertTrue(operator.eq(1, 1.0)) + self.assertFalse(operator.eq(1, 2)) + self.assertFalse(operator.eq(1, 2.0)) def test_ne(self): class C(object): def __ne__(self, other): raise SyntaxError - self.failUnlessRaises(TypeError, operator.ne) - self.failUnlessRaises(SyntaxError, operator.ne, C(), C()) - self.failUnless(operator.ne(1, 0)) - self.failUnless(operator.ne(1, 0.0)) - self.failIf(operator.ne(1, 1)) - self.failIf(operator.ne(1, 1.0)) - self.failUnless(operator.ne(1, 2)) - self.failUnless(operator.ne(1, 2.0)) + self.assertRaises(TypeError, operator.ne) + self.assertRaises(SyntaxError, operator.ne, C(), C()) + self.assertTrue(operator.ne(1, 0)) + self.assertTrue(operator.ne(1, 0.0)) + self.assertFalse(operator.ne(1, 1)) + self.assertFalse(operator.ne(1, 1.0)) + self.assertTrue(operator.ne(1, 2)) + self.assertTrue(operator.ne(1, 2.0)) def test_ge(self): - self.failUnlessRaises(TypeError, operator.ge) - self.failUnlessRaises(TypeError, operator.ge, 1j, 2j) - self.failUnless(operator.ge(1, 0)) - self.failUnless(operator.ge(1, 0.0)) - self.failUnless(operator.ge(1, 1)) - self.failUnless(operator.ge(1, 1.0)) - self.failIf(operator.ge(1, 2)) - self.failIf(operator.ge(1, 2.0)) + self.assertRaises(TypeError, operator.ge) + self.assertRaises(TypeError, operator.ge, 1j, 2j) + self.assertTrue(operator.ge(1, 0)) + self.assertTrue(operator.ge(1, 0.0)) + self.assertTrue(operator.ge(1, 1)) + self.assertTrue(operator.ge(1, 1.0)) + self.assertFalse(operator.ge(1, 2)) + self.assertFalse(operator.ge(1, 2.0)) def test_gt(self): - self.failUnlessRaises(TypeError, operator.gt) - self.failUnlessRaises(TypeError, operator.gt, 1j, 2j) - self.failUnless(operator.gt(1, 0)) - self.failUnless(operator.gt(1, 0.0)) - self.failIf(operator.gt(1, 1)) - self.failIf(operator.gt(1, 1.0)) - self.failIf(operator.gt(1, 2)) - self.failIf(operator.gt(1, 2.0)) + self.assertRaises(TypeError, operator.gt) + self.assertRaises(TypeError, operator.gt, 1j, 2j) + self.assertTrue(operator.gt(1, 0)) + self.assertTrue(operator.gt(1, 0.0)) + self.assertFalse(operator.gt(1, 1)) + self.assertFalse(operator.gt(1, 1.0)) + self.assertFalse(operator.gt(1, 2)) + self.assertFalse(operator.gt(1, 2.0)) def test_abs(self): - self.failUnlessRaises(TypeError, operator.abs) - self.failUnlessRaises(TypeError, operator.abs, None) + self.assertRaises(TypeError, operator.abs) + self.assertRaises(TypeError, operator.abs, None) self.assertEqual(operator.abs(-1), 1) self.assertEqual(operator.abs(1), 1) def test_add(self): - self.failUnlessRaises(TypeError, operator.add) - self.failUnlessRaises(TypeError, operator.add, None, None) - self.failUnless(operator.add(3, 4) == 7) + self.assertRaises(TypeError, operator.add) + self.assertRaises(TypeError, operator.add, None, None) + self.assertTrue(operator.add(3, 4) == 7) def test_bitwise_and(self): - self.failUnlessRaises(TypeError, operator.and_) - self.failUnlessRaises(TypeError, operator.and_, None, None) - self.failUnless(operator.and_(0xf, 0xa) == 0xa) + self.assertRaises(TypeError, operator.and_) + self.assertRaises(TypeError, operator.and_, None, None) + self.assertTrue(operator.and_(0xf, 0xa) == 0xa) def test_concat(self): - self.failUnlessRaises(TypeError, operator.concat) - self.failUnlessRaises(TypeError, operator.concat, None, None) - self.failUnless(operator.concat('py', 'thon') == 'python') - self.failUnless(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4]) - self.failUnless(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7]) - self.failUnless(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7]) - self.failUnlessRaises(TypeError, operator.concat, 13, 29) + self.assertRaises(TypeError, operator.concat) + self.assertRaises(TypeError, operator.concat, None, None) + self.assertTrue(operator.concat('py', 'thon') == 'python') + self.assertTrue(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4]) + self.assertTrue(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7]) + self.assertTrue(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7]) + self.assertRaises(TypeError, operator.concat, 13, 29) def test_countOf(self): - self.failUnlessRaises(TypeError, operator.countOf) - self.failUnlessRaises(TypeError, operator.countOf, None, None) - self.failUnless(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1) - self.failUnless(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0) + self.assertRaises(TypeError, operator.countOf) + self.assertRaises(TypeError, operator.countOf, None, None) + self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1) + self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0) def test_delitem(self): a = [4, 3, 2, 1] - self.failUnlessRaises(TypeError, operator.delitem, a) - self.failUnlessRaises(TypeError, operator.delitem, a, None) - self.failUnless(operator.delitem(a, 1) is None) - self.assert_(a == [4, 2, 1]) + self.assertRaises(TypeError, operator.delitem, a) + self.assertRaises(TypeError, operator.delitem, a, None) + self.assertTrue(operator.delitem(a, 1) is None) + self.assertTrue(a == [4, 2, 1]) def test_floordiv(self): - self.failUnlessRaises(TypeError, operator.floordiv, 5) - self.failUnlessRaises(TypeError, operator.floordiv, None, None) - self.failUnless(operator.floordiv(5, 2) == 2) + self.assertRaises(TypeError, operator.floordiv, 5) + self.assertRaises(TypeError, operator.floordiv, None, None) + self.assertTrue(operator.floordiv(5, 2) == 2) def test_truediv(self): - self.failUnlessRaises(TypeError, operator.truediv, 5) - self.failUnlessRaises(TypeError, operator.truediv, None, None) - self.failUnless(operator.truediv(5, 2) == 2.5) + self.assertRaises(TypeError, operator.truediv, 5) + self.assertRaises(TypeError, operator.truediv, None, None) + self.assertTrue(operator.truediv(5, 2) == 2.5) def test_getitem(self): a = range(10) - self.failUnlessRaises(TypeError, operator.getitem) - self.failUnlessRaises(TypeError, operator.getitem, a, None) - self.failUnless(operator.getitem(a, 2) == 2) + self.assertRaises(TypeError, operator.getitem) + self.assertRaises(TypeError, operator.getitem, a, None) + self.assertTrue(operator.getitem(a, 2) == 2) def test_indexOf(self): - self.failUnlessRaises(TypeError, operator.indexOf) - self.failUnlessRaises(TypeError, operator.indexOf, None, None) - self.failUnless(operator.indexOf([4, 3, 2, 1], 3) == 1) + self.assertRaises(TypeError, operator.indexOf) + self.assertRaises(TypeError, operator.indexOf, None, None) + self.assertTrue(operator.indexOf([4, 3, 2, 1], 3) == 1) self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0) def test_invert(self): - self.failUnlessRaises(TypeError, operator.invert) - self.failUnlessRaises(TypeError, operator.invert, None) + self.assertRaises(TypeError, operator.invert) + self.assertRaises(TypeError, operator.invert, None) self.assertEqual(operator.inv(4), -5) def test_lshift(self): - self.failUnlessRaises(TypeError, operator.lshift) - self.failUnlessRaises(TypeError, operator.lshift, None, 42) - self.failUnless(operator.lshift(5, 1) == 10) - self.failUnless(operator.lshift(5, 0) == 5) + self.assertRaises(TypeError, operator.lshift) + self.assertRaises(TypeError, operator.lshift, None, 42) + self.assertTrue(operator.lshift(5, 1) == 10) + self.assertTrue(operator.lshift(5, 0) == 5) self.assertRaises(ValueError, operator.lshift, 2, -1) def test_mod(self): - self.failUnlessRaises(TypeError, operator.mod) - self.failUnlessRaises(TypeError, operator.mod, None, 42) - self.failUnless(operator.mod(5, 2) == 1) + self.assertRaises(TypeError, operator.mod) + self.assertRaises(TypeError, operator.mod, None, 42) + self.assertTrue(operator.mod(5, 2) == 1) def test_mul(self): - self.failUnlessRaises(TypeError, operator.mul) - self.failUnlessRaises(TypeError, operator.mul, None, None) - self.failUnless(operator.mul(5, 2) == 10) + self.assertRaises(TypeError, operator.mul) + self.assertRaises(TypeError, operator.mul, None, None) + self.assertTrue(operator.mul(5, 2) == 10) def test_neg(self): - self.failUnlessRaises(TypeError, operator.neg) - self.failUnlessRaises(TypeError, operator.neg, None) + self.assertRaises(TypeError, operator.neg) + self.assertRaises(TypeError, operator.neg, None) self.assertEqual(operator.neg(5), -5) self.assertEqual(operator.neg(-5), 5) self.assertEqual(operator.neg(0), 0) self.assertEqual(operator.neg(-0), 0) def test_bitwise_or(self): - self.failUnlessRaises(TypeError, operator.or_) - self.failUnlessRaises(TypeError, operator.or_, None, None) - self.failUnless(operator.or_(0xa, 0x5) == 0xf) + self.assertRaises(TypeError, operator.or_) + self.assertRaises(TypeError, operator.or_, None, None) + self.assertTrue(operator.or_(0xa, 0x5) == 0xf) def test_pos(self): - self.failUnlessRaises(TypeError, operator.pos) - self.failUnlessRaises(TypeError, operator.pos, None) + self.assertRaises(TypeError, operator.pos) + self.assertRaises(TypeError, operator.pos, None) self.assertEqual(operator.pos(5), 5) self.assertEqual(operator.pos(-5), -5) self.assertEqual(operator.pos(0), 0) self.assertEqual(operator.pos(-0), 0) def test_pow(self): - self.failUnlessRaises(TypeError, operator.pow) - self.failUnlessRaises(TypeError, operator.pow, None, None) + self.assertRaises(TypeError, operator.pow) + self.assertRaises(TypeError, operator.pow, None, None) self.assertEqual(operator.pow(3,5), 3**5) self.assertEqual(operator.__pow__(3,5), 3**5) self.assertRaises(TypeError, operator.pow, 1) self.assertRaises(TypeError, operator.pow, 1, 2, 3) def test_rshift(self): - self.failUnlessRaises(TypeError, operator.rshift) - self.failUnlessRaises(TypeError, operator.rshift, None, 42) - self.failUnless(operator.rshift(5, 1) == 2) - self.failUnless(operator.rshift(5, 0) == 5) + self.assertRaises(TypeError, operator.rshift) + self.assertRaises(TypeError, operator.rshift, None, 42) + self.assertTrue(operator.rshift(5, 1) == 2) + self.assertTrue(operator.rshift(5, 0) == 5) self.assertRaises(ValueError, operator.rshift, 2, -1) def test_contains(self): - self.failUnlessRaises(TypeError, operator.contains) - self.failUnlessRaises(TypeError, operator.contains, None, None) - self.failUnless(operator.contains(range(4), 2)) - self.failIf(operator.contains(range(4), 5)) + self.assertRaises(TypeError, operator.contains) + self.assertRaises(TypeError, operator.contains, None, None) + self.assertTrue(operator.contains(range(4), 2)) + self.assertFalse(operator.contains(range(4), 5)) def test_setitem(self): a = list(range(3)) - self.failUnlessRaises(TypeError, operator.setitem, a) - self.failUnlessRaises(TypeError, operator.setitem, a, None, None) - self.failUnless(operator.setitem(a, 0, 2) is None) - self.assert_(a == [2, 1, 2]) + self.assertRaises(TypeError, operator.setitem, a) + self.assertRaises(TypeError, operator.setitem, a, None, None) + self.assertTrue(operator.setitem(a, 0, 2) is None) + self.assertTrue(a == [2, 1, 2]) self.assertRaises(IndexError, operator.setitem, a, 4, 2) def test_sub(self): - self.failUnlessRaises(TypeError, operator.sub) - self.failUnlessRaises(TypeError, operator.sub, None, None) - self.failUnless(operator.sub(5, 2) == 3) + self.assertRaises(TypeError, operator.sub) + self.assertRaises(TypeError, operator.sub, None, None) + self.assertTrue(operator.sub(5, 2) == 3) def test_truth(self): class C(object): def __bool__(self): raise SyntaxError - self.failUnlessRaises(TypeError, operator.truth) - self.failUnlessRaises(SyntaxError, operator.truth, C()) - self.failUnless(operator.truth(5)) - self.failUnless(operator.truth([0])) - self.failIf(operator.truth(0)) - self.failIf(operator.truth([])) + self.assertRaises(TypeError, operator.truth) + self.assertRaises(SyntaxError, operator.truth, C()) + self.assertTrue(operator.truth(5)) + self.assertTrue(operator.truth([0])) + self.assertFalse(operator.truth(0)) + self.assertFalse(operator.truth([])) def test_bitwise_xor(self): - self.failUnlessRaises(TypeError, operator.xor) - self.failUnlessRaises(TypeError, operator.xor, None, None) - self.failUnless(operator.xor(0xb, 0xc) == 0x7) + self.assertRaises(TypeError, operator.xor) + self.assertRaises(TypeError, operator.xor, None, None) + self.assertTrue(operator.xor(0xb, 0xc) == 0x7) def test_is(self): a = b = 'xyzpdq' c = a[:3] + b[3:] - self.failUnlessRaises(TypeError, operator.is_) - self.failUnless(operator.is_(a, b)) - self.failIf(operator.is_(a,c)) + self.assertRaises(TypeError, operator.is_) + self.assertTrue(operator.is_(a, b)) + self.assertFalse(operator.is_(a,c)) def test_is_not(self): a = b = 'xyzpdq' c = a[:3] + b[3:] - self.failUnlessRaises(TypeError, operator.is_not) - self.failIf(operator.is_not(a, b)) - self.failUnless(operator.is_not(a,c)) + self.assertRaises(TypeError, operator.is_not) + self.assertFalse(operator.is_not(a, b)) + self.assertTrue(operator.is_not(a,c)) def test_attrgetter(self): class A: @@ -290,7 +290,7 @@ class OperatorTestCase(unittest.TestCase): class C(object): def __getattr__(self, name): raise SyntaxError - self.failUnlessRaises(SyntaxError, operator.attrgetter('foo'), C()) + self.assertRaises(SyntaxError, operator.attrgetter('foo'), C()) # recursive gets a = A() @@ -322,7 +322,7 @@ class OperatorTestCase(unittest.TestCase): class C(object): def __getitem__(self, name): raise SyntaxError - self.failUnlessRaises(SyntaxError, operator.itemgetter(42), C()) + self.assertRaises(SyntaxError, operator.itemgetter(42), C()) f = operator.itemgetter('name') self.assertRaises(TypeError, f, a) diff --git a/Lib/test/test_optparse.py b/Lib/test/test_optparse.py index 9c52f86..cdbbc9d 100644 --- a/Lib/test/test_optparse.py +++ b/Lib/test/test_optparse.py @@ -109,7 +109,7 @@ Args were %(args)s.""" % locals ()) except expected_exception as err: actual_message = str(err) if isinstance(expected_message, retype): - self.assert_(expected_message.search(actual_message), + self.assertTrue(expected_message.search(actual_message), """\ expected exception message pattern: /%s/ @@ -165,7 +165,7 @@ and kwargs %(kwargs)r sys.stdout = save_stdout except InterceptedError as err: - self.assert_( + self.assertTrue( isinstance(output, str), "expected output to be an ordinary string, not %r" % type(output)) @@ -338,7 +338,7 @@ class TestOptionParser(BaseTest): def test_get_option(self): opt1 = self.parser.get_option("-v") - self.assert_(isinstance(opt1, Option)) + self.assertTrue(isinstance(opt1, Option)) self.assertEqual(opt1._short_opts, ["-v", "-n"]) self.assertEqual(opt1._long_opts, ["--verbose", "--noisy"]) self.assertEqual(opt1.action, "store_true") @@ -349,33 +349,33 @@ class TestOptionParser(BaseTest): opt2 = self.parser.get_option("--verbose") opt3 = self.parser.get_option("-n") opt4 = self.parser.get_option("--noisy") - self.assert_(opt1 is opt2 is opt3 is opt4) + self.assertTrue(opt1 is opt2 is opt3 is opt4) def test_has_option(self): - self.assert_(self.parser.has_option("-v")) - self.assert_(self.parser.has_option("--verbose")) + self.assertTrue(self.parser.has_option("-v")) + self.assertTrue(self.parser.has_option("--verbose")) - def assert_removed(self): - self.assert_(self.parser.get_option("-v") is None) - self.assert_(self.parser.get_option("--verbose") is None) - self.assert_(self.parser.get_option("-n") is None) - self.assert_(self.parser.get_option("--noisy") is None) + def assertTrueremoved(self): + self.assertTrue(self.parser.get_option("-v") is None) + self.assertTrue(self.parser.get_option("--verbose") is None) + self.assertTrue(self.parser.get_option("-n") is None) + self.assertTrue(self.parser.get_option("--noisy") is None) - self.failIf(self.parser.has_option("-v")) - self.failIf(self.parser.has_option("--verbose")) - self.failIf(self.parser.has_option("-n")) - self.failIf(self.parser.has_option("--noisy")) + self.assertFalse(self.parser.has_option("-v")) + self.assertFalse(self.parser.has_option("--verbose")) + self.assertFalse(self.parser.has_option("-n")) + self.assertFalse(self.parser.has_option("--noisy")) - self.assert_(self.parser.has_option("-q")) - self.assert_(self.parser.has_option("--silent")) + self.assertTrue(self.parser.has_option("-q")) + self.assertTrue(self.parser.has_option("--silent")) def test_remove_short_opt(self): self.parser.remove_option("-n") - self.assert_removed() + self.assertTrueremoved() def test_remove_long_opt(self): self.parser.remove_option("--verbose") - self.assert_removed() + self.assertTrueremoved() def test_remove_nonexistent(self): self.assertRaises(self.parser.remove_option, ('foo',), None, @@ -779,14 +779,14 @@ class TestBool(BaseTest): {'verbose': 0}, []) if hasattr(__builtins__, 'False'): - self.failUnless(options.verbose is False) + self.assertTrue(options.verbose is False) def test_bool_true(self): (options, args) = self.assertParseOK(["-v"], {'verbose': 1}, []) if hasattr(__builtins__, 'True'): - self.failUnless(options.verbose is True) + self.assertTrue(options.verbose is True) def test_bool_flicker_on_and_off(self): self.assertParseOK(["-qvq", "-q", "-v"], @@ -992,7 +992,7 @@ class TestOptionGroup(BaseTest): description="Some more options") group.set_title("Bacon") group.add_option("--bacon", type="int") - self.assert_(self.parser.get_option_group("--bacon"), group) + self.assertTrue(self.parser.get_option_group("--bacon"), group) # -- Test extending and parser.parse_args() ---------------------------- @@ -1088,15 +1088,15 @@ class TestCallback(BaseTest): if opt == "-x": self.assertEqual(option._short_opts, ["-x"]) self.assertEqual(option._long_opts, []) - self.assert_(parser_ is self.parser) - self.assert_(value is None) + self.assertTrue(parser_ is self.parser) + self.assertTrue(value is None) self.assertEqual(vars(parser_.values), {'filename': None}) parser_.values.x = 42 elif opt == "--file": self.assertEqual(option._short_opts, ["-f"]) self.assertEqual(option._long_opts, ["--file"]) - self.assert_(parser_ is self.parser) + self.assertTrue(parser_ is self.parser) self.assertEqual(value, "foo") self.assertEqual(vars(parser_.values), {'filename': None, 'x': 42}) @@ -1134,7 +1134,7 @@ class TestCallbackExtraArgs(BaseTest): def process_tuple(self, option, opt, value, parser_, len, type): self.assertEqual(len, 3) - self.assert_(type is int) + self.assertTrue(type is int) if opt == "-p": self.assertEqual(value, "1,2,3") @@ -1225,7 +1225,7 @@ class TestCallbackVarArgs(BaseTest): option_list=options) def variable_args(self, option, opt, value, parser): - self.assert_(value is None) + self.assertTrue(value is None) done = 0 value = [] rargs = parser.rargs @@ -1281,7 +1281,7 @@ class ConflictBase(BaseTest): class TestConflict(ConflictBase): """Use the default conflict resolution for Optik 1.2: error.""" - def assert_conflict_error(self, func): + def assertTrueconflict_error(self, func): err = self.assertRaises( func, ("-v", "--version"), {'action' : "callback", 'callback' : self.show_version, @@ -1293,11 +1293,11 @@ class TestConflict(ConflictBase): self.assertEqual(err.option_id, "-v/--version") def test_conflict_error(self): - self.assert_conflict_error(self.parser.add_option) + self.assertTrueconflict_error(self.parser.add_option) def test_conflict_error_group(self): group = OptionGroup(self.parser, "Group 1") - self.assert_conflict_error(group.add_option) + self.assertTrueconflict_error(group.add_option) def test_no_such_conflict_handler(self): self.assertRaises( @@ -1317,8 +1317,8 @@ class TestConflictResolve(ConflictBase): verbose_opt = self.parser.get_option("--verbose") version_opt = self.parser.get_option("--version") - self.assert_(v_opt is version_opt) - self.assert_(v_opt is not verbose_opt) + self.assertTrue(v_opt is version_opt) + self.assertTrue(v_opt is not verbose_opt) self.assertEqual(v_opt._long_opts, ["--version"]) self.assertEqual(version_opt._short_opts, ["-v"]) self.assertEqual(version_opt._long_opts, ["--version"]) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 9e60f00..62edd6c 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -20,7 +20,7 @@ class FileTests(unittest.TestCase): def test_access(self): f = os.open(support.TESTFN, os.O_CREAT|os.O_RDWR) os.close(f) - self.assert_(os.access(support.TESTFN, os.W_OK)) + self.assertTrue(os.access(support.TESTFN, os.W_OK)) def test_closerange(self): first = os.open(support.TESTFN, os.O_CREAT|os.O_RDWR) @@ -85,7 +85,7 @@ class TemporaryFileTests(unittest.TestCase): def check_tempfile(self, name): # make sure it doesn't already exist: - self.failIf(os.path.exists(name), + self.assertFalse(os.path.exists(name), "file already exists for temporary file") # make sure we can create the file open(name, "w") @@ -102,7 +102,7 @@ class TemporaryFileTests(unittest.TestCase): self.check_tempfile(name) name = os.tempnam(support.TESTFN, "pfx") - self.assert_(os.path.basename(name)[:3] == "pfx") + self.assertTrue(os.path.basename(name)[:3] == "pfx") self.check_tempfile(name) def test_tmpfile(self): @@ -151,7 +151,7 @@ class TemporaryFileTests(unittest.TestCase): fp.seek(0,0) s = fp.read() fp.close() - self.assert_(s == "foobar") + self.assertTrue(s == "foobar") def test_tmpnam(self): import sys @@ -176,7 +176,7 @@ class TemporaryFileTests(unittest.TestCase): # the root of the current drive. That's a terrible place to # put temp files, and, depending on privileges, the user # may not even be able to open a file in the root directory. - self.failIf(os.path.exists(name), + self.assertFalse(os.path.exists(name), "file already exists for temporary file") else: self.check_tempfile(name) @@ -228,7 +228,7 @@ class StatAttributeTests(unittest.TestCase): def trunc(x): return x self.assertEquals(trunc(getattr(result, attr)), result[getattr(stat, name)]) - self.assert_(attr in members) + self.assertTrue(attr in members) try: result[200] @@ -520,7 +520,7 @@ class MakedirTests(unittest.TestCase): os.makedirs(path) # Try paths with a '.' in them - self.failUnlessRaises(OSError, os.makedirs, os.curdir) + self.assertRaises(OSError, os.makedirs, os.curdir) path = os.path.join(base, 'dir1', 'dir2', 'dir3', 'dir4', 'dir5', os.curdir) os.makedirs(path) path = os.path.join(base, 'dir1', os.curdir, 'dir2', 'dir3', 'dir4', diff --git a/Lib/test/test_ossaudiodev.py b/Lib/test/test_ossaudiodev.py index 603aea3..dda6137 100644 --- a/Lib/test/test_ossaudiodev.py +++ b/Lib/test/test_ossaudiodev.py @@ -58,7 +58,7 @@ class OSSAudioDevTests(unittest.TestCase): dsp.fileno() # Make sure the read-only attributes work. - self.failIf(dsp.closed) + self.assertFalse(dsp.closed) self.assertEqual(dsp.name, "/dev/dsp") self.assertEqual(dsp.mode, "w", "bad dsp.mode: %r" % dsp.mode) @@ -84,7 +84,7 @@ class OSSAudioDevTests(unittest.TestCase): elapsed_time = t2 - t1 percent_diff = (abs(elapsed_time - expected_time) / expected_time) * 100 - self.failUnless(percent_diff <= 10.0, + self.assertTrue(percent_diff <= 10.0, "elapsed time (%s) > 10%% off of expected time (%s)" % (elapsed_time, expected_time)) @@ -133,7 +133,7 @@ class OSSAudioDevTests(unittest.TestCase): ]: (fmt, channels, rate) = config result = dsp.setparameters(fmt, channels, rate, False) - self.failIfEqual(result, config, + self.assertNotEqual(result, config, "unexpectedly got requested configuration") try: @@ -157,7 +157,7 @@ class OSSAudioDevTests(unittest.TestCase): #self.set_bad_parameters(dsp) finally: dsp.close() - self.failUnless(dsp.closed) + self.assertTrue(dsp.closed) def test_main(): diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 65d1d35..c7cc13f 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -545,15 +545,15 @@ class STObjectTestCase(unittest.TestCase): bottom = min(st1, st2, st3) top = max(st1, st2, st3) mid = sorted([st1, st2, st3])[1] - self.assert_(bottom < mid) - self.assert_(bottom < top) - self.assert_(mid < top) - self.assert_(bottom <= mid) - self.assert_(bottom <= top) - self.assert_(mid <= top) - self.assert_(bottom <= bottom) - self.assert_(mid <= mid) - self.assert_(top <= top) + self.assertTrue(bottom < mid) + self.assertTrue(bottom < top) + self.assertTrue(mid < top) + self.assertTrue(bottom <= mid) + self.assertTrue(bottom <= top) + self.assertTrue(mid <= top) + self.assertTrue(bottom <= bottom) + self.assertTrue(mid <= mid) + self.assertTrue(top <= top) # interaction with other types self.assertEquals(st1 == 1588.602459, False) self.assertEquals('spanish armada' != st2, True) diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py index 1543f3b..5696500 100644 --- a/Lib/test/test_peepholer.py +++ b/Lib/test/test_peepholer.py @@ -25,9 +25,9 @@ class TestTranforms(unittest.TestCase): del x asm = disassemble(unot) for elem in ('UNARY_NOT', 'POP_JUMP_IF_FALSE'): - self.assert_(elem not in asm) + self.assertTrue(elem not in asm) for elem in ('POP_JUMP_IF_TRUE',): - self.assert_(elem in asm) + self.assertTrue(elem in asm) def test_elim_inversion_of_is_or_in(self): for line, elem in ( @@ -37,7 +37,7 @@ class TestTranforms(unittest.TestCase): ('not a not in b', '(in)',), ): asm = dis_single(line) - self.assert_(elem in asm) + self.assertTrue(elem in asm) def test_global_as_constant(self): # LOAD_GLOBAL None/True/False --> LOAD_CONST None/True/False @@ -54,14 +54,14 @@ class TestTranforms(unittest.TestCase): for func, name in ((f, 'None'), (g, 'True'), (h, 'False')): asm = disassemble(func) for elem in ('LOAD_GLOBAL',): - self.assert_(elem not in asm) + self.assertTrue(elem not in asm) for elem in ('LOAD_CONST', '('+name+')'): - self.assert_(elem in asm) + self.assertTrue(elem in asm) def f(): 'Adding a docstring made this test fail in Py2.5.0' return None - self.assert_('LOAD_CONST' in disassemble(f)) - self.assert_('LOAD_GLOBAL' not in disassemble(f)) + self.assertTrue('LOAD_CONST' in disassemble(f)) + self.assertTrue('LOAD_GLOBAL' not in disassemble(f)) def test_while_one(self): # Skip over: LOAD_CONST trueconst POP_JUMP_IF_FALSE xx @@ -71,9 +71,9 @@ class TestTranforms(unittest.TestCase): return list asm = disassemble(f) for elem in ('LOAD_CONST', 'POP_JUMP_IF_FALSE'): - self.assert_(elem not in asm) + self.assertTrue(elem not in asm) for elem in ('JUMP_ABSOLUTE',): - self.assert_(elem in asm) + self.assertTrue(elem in asm) def test_pack_unpack(self): for line, elem in ( @@ -82,9 +82,9 @@ class TestTranforms(unittest.TestCase): ('a, b, c = a, b, c', 'ROT_THREE',), ): asm = dis_single(line) - self.assert_(elem in asm) - self.assert_('BUILD_TUPLE' not in asm) - self.assert_('UNPACK_TUPLE' not in asm) + self.assertTrue(elem in asm) + self.assertTrue('BUILD_TUPLE' not in asm) + self.assertTrue('UNPACK_TUPLE' not in asm) def test_folding_of_tuples_of_constants(self): for line, elem in ( @@ -95,8 +95,8 @@ class TestTranforms(unittest.TestCase): ('((1, 2), 3, 4)', '(((1, 2), 3, 4))'), ): asm = dis_single(line) - self.assert_(elem in asm) - self.assert_('BUILD_TUPLE' not in asm) + self.assertTrue(elem in asm) + self.assertTrue('BUILD_TUPLE' not in asm) # Bug 1053819: Tuple of constants misidentified when presented with: # . . . opcode_with_arg 100 unary_opcode BUILD_TUPLE 1 . . . @@ -134,17 +134,17 @@ class TestTranforms(unittest.TestCase): ('a = 13 | 7', '(15)'), # binary or ): asm = dis_single(line) - self.assert_(elem in asm, asm) - self.assert_('BINARY_' not in asm) + self.assertTrue(elem in asm, asm) + self.assertTrue('BINARY_' not in asm) # Verify that unfoldables are skipped asm = dis_single('a=2+"b"') - self.assert_('(2)' in asm) - self.assert_("('b')" in asm) + self.assertTrue('(2)' in asm) + self.assertTrue("('b')" in asm) # Verify that large sequences do not result from folding asm = dis_single('a="x"*1000') - self.assert_('(1000)' in asm) + self.assertTrue('(1000)' in asm) def test_folding_of_unaryops_on_constants(self): for line, elem in ( @@ -152,8 +152,8 @@ class TestTranforms(unittest.TestCase): ('~-2', '(1)'), # unary invert ): asm = dis_single(line) - self.assert_(elem in asm, asm) - self.assert_('UNARY_' not in asm) + self.assertTrue(elem in asm, asm) + self.assertTrue('UNARY_' not in asm) # Verify that unfoldables are skipped for line, elem in ( @@ -161,16 +161,16 @@ class TestTranforms(unittest.TestCase): ('~"abc"', "('abc')"), # unary invert ): asm = dis_single(line) - self.assert_(elem in asm, asm) - self.assert_('UNARY_' in asm) + self.assertTrue(elem in asm, asm) + self.assertTrue('UNARY_' in asm) def test_elim_extra_return(self): # RETURN LOAD_CONST None RETURN --> RETURN def f(x): return x asm = disassemble(f) - self.assert_('LOAD_CONST' not in asm) - self.assert_('(None)' not in asm) + self.assertTrue('LOAD_CONST' not in asm) + self.assertTrue('(None)' not in asm) self.assertEqual(asm.split().count('RETURN_VALUE'), 1) def test_elim_jump_to_return(self): @@ -178,8 +178,8 @@ class TestTranforms(unittest.TestCase): def f(cond, true_value, false_value): return true_value if cond else false_value asm = disassemble(f) - self.assert_('JUMP_FORWARD' not in asm) - self.assert_('JUMP_ABSOLUTE' not in asm) + self.assertTrue('JUMP_FORWARD' not in asm) + self.assertTrue('JUMP_ABSOLUTE' not in asm) self.assertEqual(asm.split().count('RETURN_VALUE'), 2) def test_elim_jump_after_return1(self): @@ -194,8 +194,8 @@ class TestTranforms(unittest.TestCase): return 5 return 6 asm = disassemble(f) - self.assert_('JUMP_FORWARD' not in asm) - self.assert_('JUMP_ABSOLUTE' not in asm) + self.assertTrue('JUMP_FORWARD' not in asm) + self.assertTrue('JUMP_ABSOLUTE' not in asm) self.assertEqual(asm.split().count('RETURN_VALUE'), 6) def test_elim_jump_after_return2(self): @@ -204,7 +204,7 @@ class TestTranforms(unittest.TestCase): while 1: if cond1: return 4 asm = disassemble(f) - self.assert_('JUMP_FORWARD' not in asm) + self.assertTrue('JUMP_FORWARD' not in asm) # There should be one jump for the while loop. self.assertEqual(asm.split().count('JUMP_ABSOLUTE'), 1) self.assertEqual(asm.split().count('RETURN_VALUE'), 2) @@ -215,7 +215,7 @@ class TestTranforms(unittest.TestCase): pass return g asm = disassemble(f) - self.assert_('BINARY_ADD' not in asm) + self.assertTrue('BINARY_ADD' not in asm) def test_main(verbose=None): diff --git a/Lib/test/test_pep247.py b/Lib/test/test_pep247.py index 733109a..da8f816 100644 --- a/Lib/test/test_pep247.py +++ b/Lib/test/test_pep247.py @@ -11,8 +11,8 @@ from test import support class Pep247Test(unittest.TestCase): def check_module(self, module, key=None): - self.assert_(hasattr(module, 'digest_size')) - self.assert_(module.digest_size is None or module.digest_size > 0) + self.assertTrue(hasattr(module, 'digest_size')) + self.assertTrue(module.digest_size is None or module.digest_size > 0) self.check_object(module.new, module.digest_size, key) def check_object(self, cls, digest_size, key): @@ -31,7 +31,7 @@ class Pep247Test(unittest.TestCase): obj3.update(b'string') h2 = obj3.digest() self.assertEquals(h1, h2) - self.assert_(hasattr(obj1, 'digest_size')) + self.assertTrue(hasattr(obj1, 'digest_size')) if digest_size is not None: self.assertEquals(obj1.digest_size, digest_size) diff --git a/Lib/test/test_pep277.py b/Lib/test/test_pep277.py index e18f602..11039ac 100644 --- a/Lib/test/test_pep277.py +++ b/Lib/test/test_pep277.py @@ -82,8 +82,8 @@ class UnicodeFileTests(unittest.TestCase): sys.getfilesystemencoding())) sf2 = set("\\".join((str(support.TESTFN), f)) for f in f2) - self.failUnlessEqual(len(f1), len(self.files)) - self.failUnlessEqual(sf2, set(self.files)) + self.assertEqual(len(f1), len(self.files)) + self.assertEqual(sf2, set(self.files)) def test_rename(self): for name in self.files: diff --git a/Lib/test/test_pep3120.py b/Lib/test/test_pep3120.py index 81d15bc..85da048 100644 --- a/Lib/test/test_pep3120.py +++ b/Lib/test/test_pep3120.py @@ -19,7 +19,7 @@ class PEP3120Test(unittest.TestCase): try: import test.badsyntax_pep3120 except SyntaxError as msg: - self.assert_(str(msg).find("Non-UTF-8 code starting with") >= 0) + self.assertTrue(str(msg).find("Non-UTF-8 code starting with") >= 0) else: self.fail("expected exception didn't occur") diff --git a/Lib/test/test_pep352.py b/Lib/test/test_pep352.py index 1481244..b9645d5 100644 --- a/Lib/test/test_pep352.py +++ b/Lib/test/test_pep352.py @@ -12,7 +12,7 @@ class ExceptionClassTests(unittest.TestCase): inheritance hierarchy)""" def test_builtins_new_style(self): - self.failUnless(issubclass(Exception, object)) + self.assertTrue(issubclass(Exception, object)) def verify_instance_interface(self, ins): for attr in ("args", "__str__", "__repr__"): @@ -38,7 +38,7 @@ class ExceptionClassTests(unittest.TestCase): last_exc = getattr(builtins, superclass_name) except AttributeError: self.fail("base class %s not a built-in" % superclass_name) - self.failUnless(superclass_name in exc_set, + self.assertTrue(superclass_name in exc_set, '%s not found' % superclass_name) exc_set.discard(superclass_name) superclasses = [] # Loop will insert base exception @@ -66,20 +66,20 @@ class ExceptionClassTests(unittest.TestCase): elif last_depth > depth: while superclasses[-1][0] >= depth: superclasses.pop() - self.failUnless(issubclass(exc, superclasses[-1][1]), + self.assertTrue(issubclass(exc, superclasses[-1][1]), "%s is not a subclass of %s" % (exc.__name__, superclasses[-1][1].__name__)) try: # Some exceptions require arguments; just skip them self.verify_instance_interface(exc()) except TypeError: pass - self.failUnless(exc_name in exc_set) + self.assertTrue(exc_name in exc_set) exc_set.discard(exc_name) last_exc = exc last_depth = depth finally: inheritance_tree.close() - self.failUnlessEqual(len(exc_set), 0, "%s not accounted for" % exc_set) + self.assertEqual(len(exc_set), 0, "%s not accounted for" % exc_set) interface_tests = ("length", "args", "str", "repr") diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py index 1064617..0c568bb 100644 --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -130,7 +130,7 @@ class TestPkg(unittest.TestCase): self.assertEqual(subsub.__name__, "t2.sub.subsub") self.assertEqual(sub.subsub.__name__, "t2.sub.subsub") for name in ['spam', 'sub', 'subsub', 't2']: - self.failUnless(locals()["name"], "Failed to import %s" % name) + self.assertTrue(locals()["name"], "Failed to import %s" % name) import t2.sub import t2.sub.subsub @@ -140,7 +140,7 @@ class TestPkg(unittest.TestCase): s = """ from t2 import * - self.failUnless(dir(), ['self', 'sub']) + self.assertTrue(dir(), ['self', 'sub']) """ self.run_code(s) @@ -258,25 +258,25 @@ class TestPkg(unittest.TestCase): self.assertEqual(fixdir(dir(tas)), ['__doc__', '__file__', '__name__', '__package__', '__path__']) - self.failIf(t7) + self.assertFalse(t7) from t7 import sub as subpar self.assertEqual(fixdir(dir(subpar)), ['__doc__', '__file__', '__name__', '__package__', '__path__']) - self.failIf(t7) - self.failIf(sub) + self.assertFalse(t7) + self.assertFalse(sub) from t7.sub import subsub as subsubsub self.assertEqual(fixdir(dir(subsubsub)), ['__doc__', '__file__', '__name__', '__package__', '__path__', 'spam']) - self.failIf(t7) - self.failIf(sub) - self.failIf(subsub) + self.assertFalse(t7) + self.assertFalse(sub) + self.assertFalse(subsub) from t7.sub.subsub import spam as ham self.assertEqual(ham, 1) - self.failIf(t7) - self.failIf(sub) - self.failIf(subsub) + self.assertFalse(t7) + self.assertFalse(sub) + self.assertFalse(subsub) def test_main(): diff --git a/Lib/test/test_pkgimport.py b/Lib/test/test_pkgimport.py index eff7b5a..60f5c32 100644 --- a/Lib/test/test_pkgimport.py +++ b/Lib/test/test_pkgimport.py @@ -52,7 +52,7 @@ class TestImport(unittest.TestCase): try: __import__(self.module_name) except SyntaxError: pass else: raise RuntimeError('Failed to induce SyntaxError') - self.assert_(self.module_name not in sys.modules and + self.assertTrue(self.module_name not in sys.modules and not hasattr(sys.modules[self.package_name], 'foo')) # ...make up a variable name that isn't bound in __builtins__ diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index 9bb5bdd..8b1815e 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -125,12 +125,12 @@ class PlatformTest(unittest.TestCase): def test_uname(self): res = platform.uname() - self.assert_(any(res)) + self.assertTrue(any(res)) def test_java_ver(self): res = platform.java_ver() if sys.platform == 'java': - self.assert_(all(res)) + self.assertTrue(all(res)) def test_win32_ver(self): res = platform.win32_ver() @@ -148,7 +148,7 @@ class PlatformTest(unittest.TestCase): real_ver = ln.strip().split()[-1] break fd.close() - self.failIf(real_ver is None) + self.assertFalse(real_ver is None) self.assertEquals(res[0], real_ver) # res[1] claims to contain diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py index 1807bca..520c20f 100644 --- a/Lib/test/test_poplib.py +++ b/Lib/test/test_poplib.py @@ -258,7 +258,7 @@ if hasattr(poplib, 'POP3_SSL'): self.client = poplib.POP3_SSL(self.server.host, self.server.port) def test__all__(self): - self.assert_('POP3_SSL' in poplib.__all__) + self.assertTrue('POP3_SSL' in poplib.__all__) class TestTimeouts(TestCase): diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 73ad95e..2047e52 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -42,13 +42,13 @@ class PosixTester(unittest.TestCase): def test_statvfs(self): if hasattr(posix, 'statvfs'): - self.assert_(posix.statvfs(os.curdir)) + self.assertTrue(posix.statvfs(os.curdir)) def test_fstatvfs(self): if hasattr(posix, 'fstatvfs'): fp = open(support.TESTFN) try: - self.assert_(posix.fstatvfs(fp.fileno())) + self.assertTrue(posix.fstatvfs(fp.fileno())) finally: fp.close() @@ -68,7 +68,7 @@ class PosixTester(unittest.TestCase): fp = open(support.TESTFN) try: fd = posix.dup(fp.fileno()) - self.assert_(isinstance(fd, int)) + self.assertTrue(isinstance(fd, int)) os.close(fd) finally: fp.close() @@ -123,13 +123,13 @@ class PosixTester(unittest.TestCase): if hasattr(posix, 'fstat'): fp = open(support.TESTFN) try: - self.assert_(posix.fstat(fp.fileno())) + self.assertTrue(posix.fstat(fp.fileno())) finally: fp.close() def test_stat(self): if hasattr(posix, 'stat'): - self.assert_(posix.stat(support.TESTFN)) + self.assertTrue(posix.stat(support.TESTFN)) if hasattr(posix, 'chown'): def test_chown(self): @@ -165,21 +165,21 @@ class PosixTester(unittest.TestCase): def test_lsdir(self): if hasattr(posix, 'lsdir'): - self.assert_(support.TESTFN in posix.lsdir(os.curdir)) + self.assertTrue(support.TESTFN in posix.lsdir(os.curdir)) def test_access(self): if hasattr(posix, 'access'): - self.assert_(posix.access(support.TESTFN, os.R_OK)) + self.assertTrue(posix.access(support.TESTFN, os.R_OK)) def test_umask(self): if hasattr(posix, 'umask'): old_mask = posix.umask(0) - self.assert_(isinstance(old_mask, int)) + self.assertTrue(isinstance(old_mask, int)) posix.umask(old_mask) def test_strerror(self): if hasattr(posix, 'strerror'): - self.assert_(posix.strerror(0)) + self.assertTrue(posix.strerror(0)) def test_pipe(self): if hasattr(posix, 'pipe'): diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py index eb918f4..0efe3ff 100644 --- a/Lib/test/test_posixpath.py +++ b/Lib/test/test_posixpath.py @@ -26,7 +26,7 @@ class PosixPathTest(unittest.TestCase): safe_rmdir(support.TESTFN + suffix) def assertIs(self, a, b): - self.assert_(a is b) + self.assertTrue(a is b) def test_normcase(self): # Check that normcase() is idempotent @@ -200,8 +200,8 @@ class PosixPathTest(unittest.TestCase): for s1 in testlist: for s2 in testlist: p = posixpath.commonprefix([s1, s2]) - self.assert_(s1.startswith(p)) - self.assert_(s2.startswith(p)) + self.assertTrue(s1.startswith(p)) + self.assertTrue(s2.startswith(p)) if s1 != s2: n = len(p) self.assertNotEqual(s1[n:n+1], s2[n:n+1]) @@ -229,7 +229,7 @@ class PosixPathTest(unittest.TestCase): f.close() self.assertEqual(d, b"foobar") - self.assert_( + self.assertTrue( posixpath.getctime(support.TESTFN) <= posixpath.getmtime(support.TESTFN) ) @@ -402,8 +402,8 @@ class PosixPathTest(unittest.TestCase): except ImportError: pass else: - self.assert_(isinstance(posixpath.expanduser("~/"), str)) - self.assert_(isinstance(posixpath.expanduser(b"~/"), bytes)) + self.assertTrue(isinstance(posixpath.expanduser("~/"), str)) + self.assertTrue(isinstance(posixpath.expanduser(b"~/"), bytes)) # if home directory == root directory, this test makes no sense if posixpath.expanduser("~") != '/': self.assertEqual( @@ -414,10 +414,10 @@ class PosixPathTest(unittest.TestCase): posixpath.expanduser(b"~") + b"/", posixpath.expanduser(b"~/") ) - self.assert_(isinstance(posixpath.expanduser("~root/"), str)) - self.assert_(isinstance(posixpath.expanduser("~foo/"), str)) - self.assert_(isinstance(posixpath.expanduser(b"~root/"), bytes)) - self.assert_(isinstance(posixpath.expanduser(b"~foo/"), bytes)) + self.assertTrue(isinstance(posixpath.expanduser("~root/"), str)) + self.assertTrue(isinstance(posixpath.expanduser("~foo/"), str)) + self.assertTrue(isinstance(posixpath.expanduser(b"~root/"), bytes)) + self.assertTrue(isinstance(posixpath.expanduser(b"~foo/"), bytes)) with support.EnvironmentVarGuard() as env: env['HOME'] = '/' @@ -481,14 +481,14 @@ class PosixPathTest(unittest.TestCase): self.assertRaises(TypeError, posixpath.normpath) def test_abspath(self): - self.assert_("foo" in posixpath.abspath("foo")) - self.assert_(b"foo" in posixpath.abspath(b"foo")) + self.assertTrue("foo" in posixpath.abspath("foo")) + self.assertTrue(b"foo" in posixpath.abspath(b"foo")) self.assertRaises(TypeError, posixpath.abspath) def test_realpath(self): - self.assert_("foo" in realpath("foo")) - self.assert_(b"foo" in realpath(b"foo")) + self.assertTrue("foo" in realpath("foo")) + self.assertTrue(b"foo" in realpath(b"foo")) self.assertRaises(TypeError, posixpath.realpath) if hasattr(os, "symlink"): diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py index 1469ff0..3d13b60 100644 --- a/Lib/test/test_pprint.py +++ b/Lib/test/test_pprint.py @@ -34,7 +34,7 @@ class QueryTestCase(unittest.TestCase): def test_basic(self): # Verify .isrecursive() and .isreadable() w/o recursion - verify = self.assert_ + verify = self.assertTrue pp = pprint.PrettyPrinter() for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, "yaddayadda", self.a, self.b): @@ -57,7 +57,7 @@ class QueryTestCase(unittest.TestCase): self.d = {} self.d[0] = self.d[1] = self.d[2] = self.d - verify = self.assert_ + verify = self.assertTrue pp = pprint.PrettyPrinter() for icky in self.a, self.b, self.d, (self.d, self.d): @@ -85,7 +85,7 @@ class QueryTestCase(unittest.TestCase): def test_unreadable(self): # Not recursive but not readable anyway - verify = self.assert_ + verify = self.assertTrue pp = pprint.PrettyPrinter() for unreadable in type(3), pprint, pprint.isrecursive: # module-level convenience functions @@ -108,7 +108,7 @@ class QueryTestCase(unittest.TestCase): # it sorted a dict display if and only if the display required # multiple lines. For that reason, dicts with more than one element # aren't tested here. - verify = self.assert_ + verify = self.assertTrue for simple in (0, 0, 0+0j, 0.0, "", b"", (), tuple2(), tuple3(), [], list2(), list3(), diff --git a/Lib/test/test_property.py b/Lib/test/test_property.py index 4ce1da2..d9469d9 100644 --- a/Lib/test/test_property.py +++ b/Lib/test/test_property.py @@ -86,8 +86,8 @@ class PropertyTests(unittest.TestCase): self.assertEqual(base.spam, 10) self.assertEqual(base._spam, 10) delattr(base, "spam") - self.assert_(not hasattr(base, "spam")) - self.assert_(not hasattr(base, "_spam")) + self.assertTrue(not hasattr(base, "spam")) + self.assertTrue(not hasattr(base, "_spam")) base.spam = 20 self.assertEqual(base.spam, 20) self.assertEqual(base._spam, 20) diff --git a/Lib/test/test_pwd.py b/Lib/test/test_pwd.py index 450306c..406578a 100644 --- a/Lib/test/test_pwd.py +++ b/Lib/test/test_pwd.py @@ -13,19 +13,19 @@ class PwdTest(unittest.TestCase): for e in entries: self.assertEqual(len(e), 7) self.assertEqual(e[0], e.pw_name) - self.assert_(isinstance(e.pw_name, str)) + self.assertTrue(isinstance(e.pw_name, str)) self.assertEqual(e[1], e.pw_passwd) - self.assert_(isinstance(e.pw_passwd, str)) + self.assertTrue(isinstance(e.pw_passwd, str)) self.assertEqual(e[2], e.pw_uid) - self.assert_(isinstance(e.pw_uid, int)) + self.assertTrue(isinstance(e.pw_uid, int)) self.assertEqual(e[3], e.pw_gid) - self.assert_(isinstance(e.pw_gid, int)) + self.assertTrue(isinstance(e.pw_gid, int)) self.assertEqual(e[4], e.pw_gecos) - self.assert_(isinstance(e.pw_gecos, str)) + self.assertTrue(isinstance(e.pw_gecos, str)) self.assertEqual(e[5], e.pw_dir) - self.assert_(isinstance(e.pw_dir, str)) + self.assertTrue(isinstance(e.pw_dir, str)) self.assertEqual(e[6], e.pw_shell) - self.assert_(isinstance(e.pw_shell, str)) + self.assertTrue(isinstance(e.pw_shell, str)) # The following won't work, because of duplicate entries # for one uid @@ -43,8 +43,8 @@ class PwdTest(unittest.TestCase): for e in entries: if not e[0] or e[0] == '+': continue # skip NIS entries etc. - self.assert_(pwd.getpwnam(e.pw_name) in entriesbyname[e.pw_name]) - self.assert_(pwd.getpwuid(e.pw_uid) in entriesbyuid[e.pw_uid]) + self.assertTrue(pwd.getpwnam(e.pw_name) in entriesbyname[e.pw_name]) + self.assertTrue(pwd.getpwuid(e.pw_uid) in entriesbyuid[e.pw_uid]) def test_errors(self): self.assertRaises(TypeError, pwd.getpwuid) diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py index 9438c7b..30d8249 100644 --- a/Lib/test/test_pyclbr.py +++ b/Lib/test/test_pyclbr.py @@ -31,7 +31,7 @@ class PyclbrTest(TestCase): ''' succeed iff hasattr(obj,attr) or attr in ignore. ''' if attr in ignore: return if not hasattr(obj, attr): print("???", attr) - self.failUnless(hasattr(obj, attr), + self.assertTrue(hasattr(obj, attr), 'expected hasattr(%r, %r)' % (obj, attr)) @@ -40,7 +40,7 @@ class PyclbrTest(TestCase): if key in ignore: return if key not in obj: print("***",key, file=sys.stderr) - self.failUnless(key in obj, "%r in %r" % (key, obj)) + self.assertTrue(key in obj, "%r in %r" % (key, obj)) def assertEqualsOrIgnored(self, a, b, ignore): ''' succeed iff a == b or a in ignore or b in ignore ''' @@ -84,12 +84,12 @@ class PyclbrTest(TestCase): self.assertHasattr(module, name, ignore) py_item = getattr(module, name) if isinstance(value, pyclbr.Function): - self.assert_(isinstance(py_item, (FunctionType, BuiltinFunctionType))) + self.assertTrue(isinstance(py_item, (FunctionType, BuiltinFunctionType))) if py_item.__module__ != moduleName: continue # skip functions that came from somewhere else self.assertEquals(py_item.__module__, value.module) else: - self.failUnless(isinstance(py_item, type)) + self.assertTrue(isinstance(py_item, type)) if py_item.__module__ != moduleName: continue # skip classes that came from somewhere else diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 00a2ada..76822af 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -309,7 +309,7 @@ class TestDescriptions(unittest.TestCase): # Check that pydocfodder module can be described from test import pydocfodder doc = pydoc.render_doc(pydocfodder) - self.assert_("pydocfodder" in doc) + self.assertTrue("pydocfodder" in doc) def test_classic_class(self): class C: "Classic class" @@ -317,7 +317,7 @@ class TestDescriptions(unittest.TestCase): self.assertEqual(pydoc.describe(C), 'class C') self.assertEqual(pydoc.describe(c), 'C') expected = 'C in module %s' % __name__ - self.assert_(expected in pydoc.render_doc(c)) + self.assertTrue(expected in pydoc.render_doc(c)) def test_class(self): class C(object): "New-style class" @@ -326,7 +326,7 @@ class TestDescriptions(unittest.TestCase): self.assertEqual(pydoc.describe(C), 'class C') self.assertEqual(pydoc.describe(c), 'C') expected = 'C in module %s object' % __name__ - self.assert_(expected in pydoc.render_doc(c)) + self.assertTrue(expected in pydoc.render_doc(c)) def test_main(): diff --git a/Lib/test/test_queue.py b/Lib/test/test_queue.py index 22cdcad..95f80ac 100644 --- a/Lib/test/test_queue.py +++ b/Lib/test/test_queue.py @@ -103,12 +103,12 @@ class BaseQueueTest(unittest.TestCase, BlockingTestMixin): "Didn't seem to queue the correct data!") for i in range(QUEUE_SIZE-1): q.put(i) - self.assert_(q.qsize(), "Queue should not be empty") - self.assert_(not qfull(q), "Queue should not be full") + self.assertTrue(q.qsize(), "Queue should not be empty") + self.assertTrue(not qfull(q), "Queue should not be full") last = 2 * QUEUE_SIZE full = 3 * 2 * QUEUE_SIZE q.put(last) - self.assert_(qfull(q), "Queue should be full") + self.assertTrue(qfull(q), "Queue should be full") try: q.put(full, block=0) self.fail("Didn't appear to block with a full queue") @@ -125,7 +125,7 @@ class BaseQueueTest(unittest.TestCase, BlockingTestMixin): # Empty it for i in range(QUEUE_SIZE): q.get() - self.assert_(not q.qsize(), "Queue should be empty") + self.assertTrue(not q.qsize(), "Queue should be empty") try: q.get(block=0) self.fail("Didn't appear to block with an empty queue") @@ -247,7 +247,7 @@ class FailingQueueTest(unittest.TestCase, BlockingTestMixin): except FailingQueueException: pass q.put("last") - self.assert_(qfull(q), "Queue should be full") + self.assertTrue(qfull(q), "Queue should be full") # Test a failing blocking put q.fail_next_put = True try: @@ -269,17 +269,17 @@ class FailingQueueTest(unittest.TestCase, BlockingTestMixin): # Check the Queue isn't damaged. # put failed, but get succeeded - re-add q.put("last") - self.assert_(qfull(q), "Queue should be full") + self.assertTrue(qfull(q), "Queue should be full") q.get() - self.assert_(not qfull(q), "Queue should not be full") + self.assertTrue(not qfull(q), "Queue should not be full") q.put("last") - self.assert_(qfull(q), "Queue should be full") + self.assertTrue(qfull(q), "Queue should be full") # Test a blocking put self.do_blocking_test(q.put, ("full",), q.get, ()) # Empty it for i in range(QUEUE_SIZE): q.get() - self.assert_(not q.qsize(), "Queue should be empty") + self.assertTrue(not q.qsize(), "Queue should be empty") q.put("first") q.fail_next_get = True try: @@ -287,16 +287,16 @@ class FailingQueueTest(unittest.TestCase, BlockingTestMixin): self.fail("The queue didn't fail when it should have") except FailingQueueException: pass - self.assert_(q.qsize(), "Queue should not be empty") + self.assertTrue(q.qsize(), "Queue should not be empty") q.fail_next_get = True try: q.get(timeout=0.1) self.fail("The queue didn't fail when it should have") except FailingQueueException: pass - self.assert_(q.qsize(), "Queue should not be empty") + self.assertTrue(q.qsize(), "Queue should not be empty") q.get() - self.assert_(not q.qsize(), "Queue should be empty") + self.assertTrue(not q.qsize(), "Queue should be empty") q.fail_next_get = True try: self.do_exceptional_blocking_test(q.get, (), q.put, ('empty',), @@ -305,9 +305,9 @@ class FailingQueueTest(unittest.TestCase, BlockingTestMixin): except FailingQueueException: pass # put succeeded, but get failed. - self.assert_(q.qsize(), "Queue should not be empty") + self.assertTrue(q.qsize(), "Queue should not be empty") q.get() - self.assert_(not q.qsize(), "Queue should be empty") + self.assertTrue(not q.qsize(), "Queue should be empty") def test_failing_queue(self): # Test to make sure a queue is functioning correctly. diff --git a/Lib/test/test_raise.py b/Lib/test/test_raise.py index 5a63b86..ff4800b 100644 --- a/Lib/test/test_raise.py +++ b/Lib/test/test_raise.py @@ -28,7 +28,7 @@ class TestRaise(unittest.TestCase): try: raise except RuntimeError as e: - self.failUnless("No active exception" in str(e)) + self.assertTrue("No active exception" in str(e)) else: self.fail("No exception raised") @@ -40,7 +40,7 @@ class TestRaise(unittest.TestCase): exc1 = e raise except IndexError as exc2: - self.failUnless(exc1 is exc2) + self.assertTrue(exc1 is exc2) else: self.fail("No exception raised") @@ -127,7 +127,7 @@ class TestCause(unittest.TestCase): try: raise IndexError from 5 except TypeError as e: - self.failUnless("exception cause" in str(e)) + self.assertTrue("exception cause" in str(e)) else: self.fail("No exception raised") @@ -135,7 +135,7 @@ class TestCause(unittest.TestCase): try: raise IndexError from KeyError except IndexError as e: - self.failUnless(isinstance(e.__cause__, KeyError)) + self.assertTrue(isinstance(e.__cause__, KeyError)) else: self.fail("No exception raised") @@ -144,7 +144,7 @@ class TestCause(unittest.TestCase): try: raise IndexError from cause except IndexError as e: - self.failUnless(e.__cause__ is cause) + self.assertTrue(e.__cause__ is cause) else: self.fail("No exception raised") @@ -166,7 +166,7 @@ class TestTraceback(unittest.TestCase): try: raise IndexError() except IndexError as e: - self.failUnless(isinstance(e.__traceback__, types.TracebackType)) + self.assertTrue(isinstance(e.__traceback__, types.TracebackType)) else: self.fail("No exception raised") @@ -203,7 +203,7 @@ class TestContext(unittest.TestCase): raise OSError() except OSError as e: self.assertNotEqual(e.__context__, context) - self.failUnless(isinstance(e.__context__, context)) + self.assertTrue(isinstance(e.__context__, context)) else: self.fail("No exception raised") @@ -216,7 +216,7 @@ class TestContext(unittest.TestCase): raise OSError except OSError as e: self.assertNotEqual(e.__context__, context) - self.failUnless(isinstance(e.__context__, context)) + self.assertTrue(isinstance(e.__context__, context)) else: self.fail("No exception raised") @@ -227,7 +227,7 @@ class TestContext(unittest.TestCase): except: raise OSError except OSError as e: - self.failUnless(isinstance(e.__context__, ZeroDivisionError)) + self.assertTrue(isinstance(e.__context__, ZeroDivisionError)) else: self.fail("No exception raised") @@ -238,7 +238,7 @@ class TestContext(unittest.TestCase): except: xyzzy except NameError as e: - self.failUnless(isinstance(e.__context__, ZeroDivisionError)) + self.assertTrue(isinstance(e.__context__, ZeroDivisionError)) else: self.fail("No exception raised") @@ -249,7 +249,7 @@ class TestContext(unittest.TestCase): finally: raise OSError except OSError as e: - self.failUnless(e.__context__ is None) + self.assertTrue(e.__context__ is None) else: self.fail("No exception raised") @@ -260,7 +260,7 @@ class TestContext(unittest.TestCase): finally: raise OSError except OSError as e: - self.failUnless(isinstance(e.__context__, ZeroDivisionError)) + self.assertTrue(isinstance(e.__context__, ZeroDivisionError)) else: self.fail("No exception raised") @@ -274,7 +274,7 @@ class TestContext(unittest.TestCase): with ContextManager(): 1/0 except NameError as e: - self.failUnless(isinstance(e.__context__, ZeroDivisionError)) + self.assertTrue(isinstance(e.__context__, ZeroDivisionError)) else: self.fail("No exception raised") @@ -286,7 +286,7 @@ class TestContext(unittest.TestCase): except ZeroDivisionError as e: raise e except ZeroDivisionError as e: - self.failUnless(e.__context__ is None, e.__context__) + self.assertTrue(e.__context__ is None, e.__context__) def test_reraise_cycle_broken(self): # Non-trivial context cycles (through re-raising a previous exception) @@ -300,7 +300,7 @@ class TestContext(unittest.TestCase): except ZeroDivisionError: raise a except NameError as e: - self.failUnless(e.__context__.__context__ is None) + self.assertTrue(e.__context__.__context__ is None) def test_3118(self): # deleting the generator caused the __context__ to be cleared @@ -320,7 +320,7 @@ class TestContext(unittest.TestCase): del g raise KeyError except Exception as e: - self.assert_(isinstance(e.__context__, ValueError)) + self.assertTrue(isinstance(e.__context__, ValueError)) f() @@ -344,7 +344,7 @@ class TestContext(unittest.TestCase): raise TypeError except Exception as e: self.assertNotEqual(e.__context__, None) - self.assert_(isinstance(e.__context__, AttributeError)) + self.assertTrue(isinstance(e.__context__, AttributeError)) with support.captured_output("stderr"): f() diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index f2af196..df07b76 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -52,7 +52,7 @@ class TestBasicOps(unittest.TestCase): self.assertEqual(len(s), k) uniq = set(s) self.assertEqual(len(uniq), k) - self.failUnless(uniq <= set(population)) + self.assertTrue(uniq <= set(population)) self.assertEqual(self.gen.sample([], 0), []) # test edge case N==k==0 def test_sample_distribution(self): @@ -161,7 +161,7 @@ class SystemRandom_TestBasicOps(TestBasicOps): cum = 0 for i in range(100): r = self.gen.randrange(span) - self.assert_(0 <= r < span) + self.assertTrue(0 <= r < span) cum |= r self.assertEqual(cum, span-1) @@ -171,7 +171,7 @@ class SystemRandom_TestBasicOps(TestBasicOps): stop = self.gen.randrange(2 ** (i-2)) if stop <= start: return - self.assert_(start <= self.gen.randrange(start, stop) < stop) + self.assertTrue(start <= self.gen.randrange(start, stop) < stop) def test_rangelimits(self): for start, stop in [(-2,0), (-(2**60)-2,-(2**60)), (2**60,2**60+2)]: @@ -181,7 +181,7 @@ class SystemRandom_TestBasicOps(TestBasicOps): def test_genrandbits(self): # Verify ranges for k in range(1, 1000): - self.assert_(0 <= self.gen.getrandbits(k) < 2**k) + self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k) # Verify all bits active getbits = self.gen.getrandbits @@ -211,13 +211,13 @@ class SystemRandom_TestBasicOps(TestBasicOps): n += n - 1 # check 1 below the next power of two k = int(1.00001 + _log(n, 2)) - self.assert_(k in [numbits, numbits+1]) - self.assert_(2**k > n > 2**(k-2)) + self.assertTrue(k in [numbits, numbits+1]) + self.assertTrue(2**k > n > 2**(k-2)) n -= n >> 15 # check a little farther below the next power of two k = int(1.00001 + _log(n, 2)) self.assertEqual(k, numbits) # note the stronger assertion - self.assert_(2**k > n > 2**(k-1)) # note the stronger assertion + self.assertTrue(2**k > n > 2**(k-1)) # note the stronger assertion class MersenneTwister_TestBasicOps(TestBasicOps): @@ -313,7 +313,7 @@ class MersenneTwister_TestBasicOps(TestBasicOps): cum = 0 for i in range(100): r = self.gen.randrange(span) - self.assert_(0 <= r < span) + self.assertTrue(0 <= r < span) cum |= r self.assertEqual(cum, span-1) @@ -323,7 +323,7 @@ class MersenneTwister_TestBasicOps(TestBasicOps): stop = self.gen.randrange(2 ** (i-2)) if stop <= start: return - self.assert_(start <= self.gen.randrange(start, stop) < stop) + self.assertTrue(start <= self.gen.randrange(start, stop) < stop) def test_rangelimits(self): for start, stop in [(-2,0), (-(2**60)-2,-(2**60)), (2**60,2**60+2)]: @@ -337,7 +337,7 @@ class MersenneTwister_TestBasicOps(TestBasicOps): 97904845777343510404718956115) # Verify ranges for k in range(1, 1000): - self.assert_(0 <= self.gen.getrandbits(k) < 2**k) + self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k) # Verify all bits active getbits = self.gen.getrandbits @@ -367,20 +367,20 @@ class MersenneTwister_TestBasicOps(TestBasicOps): n += n - 1 # check 1 below the next power of two k = int(1.00001 + _log(n, 2)) - self.assert_(k in [numbits, numbits+1]) - self.assert_(2**k > n > 2**(k-2)) + self.assertTrue(k in [numbits, numbits+1]) + self.assertTrue(2**k > n > 2**(k-2)) n -= n >> 15 # check a little farther below the next power of two k = int(1.00001 + _log(n, 2)) self.assertEqual(k, numbits) # note the stronger assertion - self.assert_(2**k > n > 2**(k-1)) # note the stronger assertion + self.assertTrue(2**k > n > 2**(k-1)) # note the stronger assertion def test_randrange_bug_1590891(self): start = 1000000000000 stop = -100000000000000000000 step = -200 x = self.gen.randrange(start, stop, step) - self.assert_(stop < x <= start) + self.assertTrue(stop < x <= start) self.assertEqual((x+stop)%step, 0) def gamma(z, sqrt2pi=(2.0*pi)**0.5): @@ -458,7 +458,7 @@ class TestModule(unittest.TestCase): def test__all__(self): # tests validity but not completeness of the __all__ list - self.failUnless(set(random.__all__) <= set(dir(random))) + self.assertTrue(set(random.__all__) <= set(dir(random))) def test_random_subclass_with_kwargs(self): # SF bug #1486663 -- this used to erroneously raise a TypeError diff --git a/Lib/test/test_range.py b/Lib/test/test_range.py index 7650103..24836d0 100644 --- a/Lib/test/test_range.py +++ b/Lib/test/test_range.py @@ -26,18 +26,18 @@ class RangeTest(unittest.TestCase): self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2]) seq = list(range(a, b, c)) - self.assert_(a in seq) - self.assert_(b not in seq) + self.assertTrue(a in seq) + self.assertTrue(b not in seq) self.assertEqual(len(seq), 2) seq = list(range(b, a, -c)) - self.assert_(b in seq) - self.assert_(a not in seq) + self.assertTrue(b in seq) + self.assertTrue(a not in seq) self.assertEqual(len(seq), 2) seq = list(range(-a, -b, -c)) - self.assert_(-a in seq) - self.assert_(-b not in seq) + self.assertTrue(-a in seq) + self.assertTrue(-b not in seq) self.assertEqual(len(seq), 2) self.assertRaises(TypeError, range) diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index a857aab..383b56a 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -582,7 +582,7 @@ class ReTests(unittest.TestCase): [":", "::", ":::"]) def test_bug_926075(self): - self.assert_(re.compile('bug_926075') is not + self.assertTrue(re.compile('bug_926075') is not re.compile(b'bug_926075')) def test_bug_931848(self): diff --git a/Lib/test/test_reprlib.py b/Lib/test/test_reprlib.py index 8bd0ccf..12e207b 100644 --- a/Lib/test/test_reprlib.py +++ b/Lib/test/test_reprlib.py @@ -123,12 +123,12 @@ class ReprTests(unittest.TestCase): eq(r(i3), (""%id(i3))) s = r(ClassWithFailingRepr) - self.failUnless(s.startswith("")) - self.failUnless(s.find("...") in [12, 13]) + self.assertTrue(s.startswith("")) + self.assertTrue(s.find("...") in [12, 13]) def test_lambda(self): - self.failUnless(repr(lambda x: x).startswith( + self.assertTrue(repr(lambda x: x).startswith( "') # Methods - self.failUnless(repr(''.split).startswith( + self.assertTrue(repr(''.split).startswith( ' p) - self.assert_(q >= p) - self.failIf(q < r) - self.failIf(q <= r) - self.failIf(q > r) - self.failIf(q >= r) - self.assert_(set('a').issubset('abc')) - self.assert_(set('abc').issuperset('a')) - self.failIf(set('a').issubset('cbs')) - self.failIf(set('cbs').issuperset('a')) + self.assertTrue(p < q) + self.assertTrue(p <= q) + self.assertTrue(q <= q) + self.assertTrue(q > p) + self.assertTrue(q >= p) + self.assertFalse(q < r) + self.assertFalse(q <= r) + self.assertFalse(q > r) + self.assertFalse(q >= r) + self.assertTrue(set('a').issubset('abc')) + self.assertTrue(set('abc').issuperset('a')) + self.assertFalse(set('a').issubset('cbs')) + self.assertFalse(set('cbs').issuperset('a')) def test_pickling(self): for i in range(pickle.HIGHEST_PROTOCOL + 1): @@ -269,7 +269,7 @@ class TestJointOps(unittest.TestCase): s=H() f=set() f.add(s) - self.assert_(s in f) + self.assertTrue(s in f) f.remove(s) f.add(s) f.discard(s) @@ -338,7 +338,7 @@ class TestJointOps(unittest.TestCase): obj.x = iter(container) del obj, container gc.collect() - self.assert_(ref() is None, "Cycle was not collected") + self.assertTrue(ref() is None, "Cycle was not collected") class TestSet(TestJointOps): thetype = set @@ -379,7 +379,7 @@ class TestSet(TestJointOps): def test_add(self): self.s.add('Q') - self.assert_('Q' in self.s) + self.assertTrue('Q' in self.s) dup = self.s.copy() self.s.add('Q') self.assertEqual(self.s, dup) @@ -387,13 +387,13 @@ class TestSet(TestJointOps): def test_remove(self): self.s.remove('a') - self.assert_('a' not in self.s) + self.assertTrue('a' not in self.s) self.assertRaises(KeyError, self.s.remove, 'Q') self.assertRaises(TypeError, self.s.remove, []) s = self.thetype([frozenset(self.word)]) - self.assert_(self.thetype(self.word) in s) + self.assertTrue(self.thetype(self.word) in s) s.remove(self.thetype(self.word)) - self.assert_(self.thetype(self.word) not in s) + self.assertTrue(self.thetype(self.word) not in s) self.assertRaises(KeyError, self.s.remove, self.thetype(self.word)) def test_remove_keyerror_unpacking(self): @@ -412,7 +412,7 @@ class TestSet(TestJointOps): try: self.s.remove(key) except KeyError as e: - self.assert_(e.args[0] is key, + self.assertTrue(e.args[0] is key, "KeyError should be {0}, not {1}".format(key, e.args[0])) else: @@ -420,26 +420,26 @@ class TestSet(TestJointOps): def test_discard(self): self.s.discard('a') - self.assert_('a' not in self.s) + self.assertTrue('a' not in self.s) self.s.discard('Q') self.assertRaises(TypeError, self.s.discard, []) s = self.thetype([frozenset(self.word)]) - self.assert_(self.thetype(self.word) in s) + self.assertTrue(self.thetype(self.word) in s) s.discard(self.thetype(self.word)) - self.assert_(self.thetype(self.word) not in s) + self.assertTrue(self.thetype(self.word) not in s) s.discard(self.thetype(self.word)) def test_pop(self): for i in range(len(self.s)): elem = self.s.pop() - self.assert_(elem not in self.s) + self.assertTrue(elem not in self.s) self.assertRaises(KeyError, self.s.pop) def test_update(self): retval = self.s.update(self.otherword) self.assertEqual(retval, None) for c in (self.word + self.otherword): - self.assert_(c in self.s) + self.assertTrue(c in self.s) self.assertRaises(PassThru, self.s.update, check_pass_thru()) self.assertRaises(TypeError, self.s.update, [[]]) for p, q in (('cdc', 'abcd'), ('efgfe', 'abcefg'), ('ccb', 'abc'), ('ef', 'abcef')): @@ -457,16 +457,16 @@ class TestSet(TestJointOps): def test_ior(self): self.s |= set(self.otherword) for c in (self.word + self.otherword): - self.assert_(c in self.s) + self.assertTrue(c in self.s) def test_intersection_update(self): retval = self.s.intersection_update(self.otherword) self.assertEqual(retval, None) for c in (self.word + self.otherword): if c in self.otherword and c in self.word: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) self.assertRaises(PassThru, self.s.intersection_update, check_pass_thru()) self.assertRaises(TypeError, self.s.intersection_update, [[]]) for p, q in (('cdc', 'c'), ('efgfe', ''), ('ccb', 'bc'), ('ef', '')): @@ -484,18 +484,18 @@ class TestSet(TestJointOps): self.s &= set(self.otherword) for c in (self.word + self.otherword): if c in self.otherword and c in self.word: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) def test_difference_update(self): retval = self.s.difference_update(self.otherword) self.assertEqual(retval, None) for c in (self.word + self.otherword): if c in self.word and c not in self.otherword: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) self.assertRaises(PassThru, self.s.difference_update, check_pass_thru()) self.assertRaises(TypeError, self.s.difference_update, [[]]) self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) @@ -521,18 +521,18 @@ class TestSet(TestJointOps): self.s -= set(self.otherword) for c in (self.word + self.otherword): if c in self.word and c not in self.otherword: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) def test_symmetric_difference_update(self): retval = self.s.symmetric_difference_update(self.otherword) self.assertEqual(retval, None) for c in (self.word + self.otherword): if (c in self.word) ^ (c in self.otherword): - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) self.assertRaises(PassThru, self.s.symmetric_difference_update, check_pass_thru()) self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) for p, q in (('cdc', 'abd'), ('efgfe', 'abcefg'), ('ccb', 'a'), ('ef', 'abcef')): @@ -545,9 +545,9 @@ class TestSet(TestJointOps): self.s ^= set(self.otherword) for c in (self.word + self.otherword): if (c in self.word) ^ (c in self.otherword): - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) def test_inplace_on_self(self): t = self.s.copy() @@ -590,19 +590,19 @@ class TestSet(TestJointOps): myobj = TestRichSetCompare() myset < myobj - self.assert_(myobj.gt_called) + self.assertTrue(myobj.gt_called) myobj = TestRichSetCompare() myset > myobj - self.assert_(myobj.lt_called) + self.assertTrue(myobj.lt_called) myobj = TestRichSetCompare() myset <= myobj - self.assert_(myobj.ge_called) + self.assertTrue(myobj.ge_called) myobj = TestRichSetCompare() myset >= myobj - self.assert_(myobj.le_called) + self.assertTrue(myobj.le_called) # C API test only available in a debug build if hasattr(set, "test_c_api"): @@ -814,7 +814,7 @@ class TestBasicOps(unittest.TestCase): def test_iteration(self): for v in self.set: - self.assert_(v in self.values) + self.assertTrue(v in self.values) setiter = iter(self.set) # note: __length_hint__ is an internal undocumented API, # don't rely on it in your own programs @@ -849,10 +849,10 @@ class TestBasicOpsSingleton(TestBasicOps): self.repr = "{3}" def test_in(self): - self.failUnless(3 in self.set) + self.assertTrue(3 in self.set) def test_not_in(self): - self.failUnless(2 not in self.set) + self.assertTrue(2 not in self.set) #------------------------------------------------------------------------------ @@ -866,10 +866,10 @@ class TestBasicOpsTuple(TestBasicOps): self.repr = "{(0, 'zero')}" def test_in(self): - self.failUnless((0, "zero") in self.set) + self.assertTrue((0, "zero") in self.set) def test_not_in(self): - self.failUnless(9 not in self.set) + self.assertTrue(9 not in self.set) #------------------------------------------------------------------------------ @@ -1186,7 +1186,7 @@ class TestMutate(unittest.TestCase): popped[self.set.pop()] = None self.assertEqual(len(popped), len(self.values)) for v in self.values: - self.failUnless(v in popped) + self.assertTrue(v in popped) def test_update_empty_tuple(self): self.set.update(()) @@ -1455,7 +1455,7 @@ class TestCopying(unittest.TestCase): set_list = sorted(self.set, key=repr) self.assertEqual(len(dup_list), len(set_list)) for i in range(len(dup_list)): - self.failUnless(dup_list[i] is set_list[i]) + self.assertTrue(dup_list[i] is set_list[i]) def test_deep_copy(self): dup = copy.deepcopy(self.set) @@ -1505,13 +1505,13 @@ class TestIdentities(unittest.TestCase): def test_binopsVsSubsets(self): a, b = self.a, self.b - self.assert_(a - b < a) - self.assert_(b - a < b) - self.assert_(a & b < a) - self.assert_(a & b < b) - self.assert_(a | b > a) - self.assert_(a | b > b) - self.assert_(a ^ b < a | b) + self.assertTrue(a - b < a) + self.assertTrue(b - a < b) + self.assertTrue(a & b < a) + self.assertTrue(a & b < b) + self.assertTrue(a | b > a) + self.assertTrue(a | b > b) + self.assertTrue(a ^ b < a | b) def test_commutativity(self): a, b = self.a, self.b @@ -1760,7 +1760,7 @@ class TestGraphs(unittest.TestCase): edge = vertex # Cuboctahedron vertices are edges in Cube self.assertEqual(len(edge), 2) # Two cube vertices define an edge for cubevert in edge: - self.assert_(cubevert in g) + self.assertTrue(cubevert in g) #============================================================================== diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index 5a546ec..60352a2 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -63,12 +63,12 @@ class TestShutil(unittest.TestCase): self.assertIs(func, os.listdir, "func must be either os.remove or os.listdir") self.assertEqual(arg, TESTFN) - self.failUnless(issubclass(exc[0], OSError)) + self.assertTrue(issubclass(exc[0], OSError)) self.errorState = 1 else: self.assertEqual(func, os.rmdir) self.assertEqual(arg, TESTFN) - self.failUnless(issubclass(exc[0], OSError)) + self.assertTrue(issubclass(exc[0], OSError)) self.errorState = 2 def test_rmtree_dont_delete_file(self): @@ -158,9 +158,9 @@ class TestShutil(unittest.TestCase): patterns = shutil.ignore_patterns('*.tmp', 'test_dir2') shutil.copytree(src_dir, dst_dir, ignore=patterns) # checking the result: some elements should not be copied - self.assert_(exists(join(dst_dir, 'test.txt'))) - self.assert_(not exists(join(dst_dir, 'test.tmp'))) - self.assert_(not exists(join(dst_dir, 'test_dir2'))) + self.assertTrue(exists(join(dst_dir, 'test.txt'))) + self.assertTrue(not exists(join(dst_dir, 'test.tmp'))) + self.assertTrue(not exists(join(dst_dir, 'test_dir2'))) finally: if os.path.exists(dst_dir): shutil.rmtree(dst_dir) @@ -168,9 +168,9 @@ class TestShutil(unittest.TestCase): patterns = shutil.ignore_patterns('*.tmp', 'subdir*') shutil.copytree(src_dir, dst_dir, ignore=patterns) # checking the result: some elements should not be copied - self.assert_(not exists(join(dst_dir, 'test.tmp'))) - self.assert_(not exists(join(dst_dir, 'test_dir2', 'subdir2'))) - self.assert_(not exists(join(dst_dir, 'test_dir2', 'subdir'))) + self.assertTrue(not exists(join(dst_dir, 'test.tmp'))) + self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir2'))) + self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir'))) finally: if os.path.exists(dst_dir): shutil.rmtree(dst_dir) @@ -192,9 +192,9 @@ class TestShutil(unittest.TestCase): shutil.copytree(src_dir, dst_dir, ignore=_filter) # checking the result: some elements should not be copied - self.assert_(not exists(join(dst_dir, 'test_dir2', 'subdir2', + self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir2', 'test.py'))) - self.assert_(not exists(join(dst_dir, 'test_dir2', 'subdir'))) + self.assertTrue(not exists(join(dst_dir, 'test_dir2', 'subdir'))) finally: if os.path.exists(dst_dir): @@ -393,7 +393,7 @@ class TestMove(unittest.TestCase): for src, dst in [('srcdir', 'srcdir/dest')]: src = os.path.join(TESTFN, src) dst = os.path.join(TESTFN, dst) - self.assert_(shutil._destinsrc(src, dst), + self.assertTrue(shutil._destinsrc(src, dst), msg='_destinsrc() wrongly concluded that ' 'dst (%s) is not in src (%s)' % (dst, src)) finally: @@ -405,7 +405,7 @@ class TestMove(unittest.TestCase): for src, dst in [('srcdir', 'src/dest'), ('srcdir', 'srcdir.new')]: src = os.path.join(TESTFN, src) dst = os.path.join(TESTFN, dst) - self.failIf(shutil._destinsrc(src, dst), + self.assertFalse(shutil._destinsrc(src, dst), msg='_destinsrc() wrongly concluded that ' 'dst (%s) is in src (%s)' % (dst, src)) finally: diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index ef19641..5fc4220 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -217,10 +217,10 @@ class WakeupSignalTests(unittest.TestCase): # before select is called time.sleep(self.TIMEOUT_FULL) mid_time = time.time() - self.assert_(mid_time - before_time < self.TIMEOUT_HALF) + self.assertTrue(mid_time - before_time < self.TIMEOUT_HALF) select.select([self.read], [], [], self.TIMEOUT_FULL) after_time = time.time() - self.assert_(after_time - mid_time < self.TIMEOUT_HALF) + self.assertTrue(after_time - mid_time < self.TIMEOUT_HALF) def test_wakeup_fd_during(self): import select @@ -231,7 +231,7 @@ class WakeupSignalTests(unittest.TestCase): self.assertRaises(select.error, select.select, [self.read], [], [], self.TIMEOUT_FULL) after_time = time.time() - self.assert_(after_time - before_time < self.TIMEOUT_HALF) + self.assertTrue(after_time - before_time < self.TIMEOUT_HALF) def setUp(self): import fcntl diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 8d101b3..7ed0ee2 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -47,26 +47,26 @@ class HelperFunctionsTests(unittest.TestCase): path_parts = ("Beginning", "End") original_dir = os.path.join(*path_parts) abs_dir, norm_dir = site.makepath(*path_parts) - self.failUnlessEqual(os.path.abspath(original_dir), abs_dir) + self.assertEqual(os.path.abspath(original_dir), abs_dir) if original_dir == os.path.normcase(original_dir): - self.failUnlessEqual(abs_dir, norm_dir) + self.assertEqual(abs_dir, norm_dir) else: - self.failUnlessEqual(os.path.normcase(abs_dir), norm_dir) + self.assertEqual(os.path.normcase(abs_dir), norm_dir) def test_init_pathinfo(self): dir_set = site._init_pathinfo() for entry in [site.makepath(path)[1] for path in sys.path if path and os.path.isdir(path)]: - self.failUnless(entry in dir_set, + self.assertTrue(entry in dir_set, "%s from sys.path not found in set returned " "by _init_pathinfo(): %s" % (entry, dir_set)) def pth_file_tests(self, pth_file): """Contain common code for testing results of reading a .pth file""" - self.failUnless(pth_file.imported in sys.modules, + self.assertTrue(pth_file.imported in sys.modules, "%s not in sys.path" % pth_file.imported) - self.failUnless(site.makepath(pth_file.good_dir_path)[0] in sys.path) - self.failUnless(not os.path.exists(pth_file.bad_dir_path)) + self.assertTrue(site.makepath(pth_file.good_dir_path)[0] in sys.path) + self.assertTrue(not os.path.exists(pth_file.bad_dir_path)) def test_addpackage(self): # Make sure addpackage() imports if the line starts with 'import', @@ -98,7 +98,7 @@ class HelperFunctionsTests(unittest.TestCase): def test_s_option(self): usersite = site.USER_SITE - self.assert_(usersite in sys.path) + self.assertTrue(usersite in sys.path) rc = subprocess.call([sys.executable, '-c', 'import sys; sys.exit(%r in sys.path)' % usersite]) @@ -196,7 +196,7 @@ class ImportSideEffectTests(unittest.TestCase): site.abs__file__() for module in (sys, os, builtins): try: - self.failUnless(os.path.isabs(module.__file__), repr(module)) + self.assertTrue(os.path.isabs(module.__file__), repr(module)) except AttributeError: continue # We could try everything in sys.modules; however, when regrtest.py @@ -209,7 +209,7 @@ class ImportSideEffectTests(unittest.TestCase): site.removeduppaths() seen_paths = set() for path in sys.path: - self.failUnless(path not in seen_paths) + self.assertTrue(path not in seen_paths) seen_paths.add(path) def test_add_build_dir(self): @@ -220,17 +220,17 @@ class ImportSideEffectTests(unittest.TestCase): def test_setting_quit(self): # 'quit' and 'exit' should be injected into builtins - self.failUnless(hasattr(builtins, "quit")) - self.failUnless(hasattr(builtins, "exit")) + self.assertTrue(hasattr(builtins, "quit")) + self.assertTrue(hasattr(builtins, "exit")) def test_setting_copyright(self): # 'copyright' and 'credits' should be in builtins - self.failUnless(hasattr(builtins, "copyright")) - self.failUnless(hasattr(builtins, "credits")) + self.assertTrue(hasattr(builtins, "copyright")) + self.assertTrue(hasattr(builtins, "credits")) def test_setting_help(self): # 'help' should be set in builtins - self.failUnless(hasattr(builtins, "help")) + self.assertTrue(hasattr(builtins, "help")) def test_aliasing_mbcs(self): if sys.platform == "win32": @@ -244,7 +244,7 @@ class ImportSideEffectTests(unittest.TestCase): def test_setdefaultencoding_removed(self): # Make sure sys.setdefaultencoding is gone - self.failUnless(not hasattr(sys, "setdefaultencoding")) + self.assertTrue(not hasattr(sys, "setdefaultencoding")) def test_sitecustomize_executed(self): # If sitecustomize is available, it should have been imported. diff --git a/Lib/test/test_slice.py b/Lib/test/test_slice.py index 640c8c0..2ecb59a 100644 --- a/Lib/test/test_slice.py +++ b/Lib/test/test_slice.py @@ -73,7 +73,7 @@ class SliceTest(unittest.TestCase): obj = AnyClass() s = slice(obj) - self.assert_(s.stop is obj) + self.assertTrue(s.stop is obj) def test_indices(self): self.assertEqual(slice(None ).indices(10), (0, 10, 1)) diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index e8a9fc4..8313006 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -224,7 +224,7 @@ class GeneralModuleTests(unittest.TestCase): def test_repr(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.assert_(repr(s).startswith("= 0, "Error resolving host to ip.") + self.assertTrue(ip.find('.') >= 0, "Error resolving host to ip.") try: hname, aliases, ipaddrs = socket.gethostbyaddr(ip) except socket.error: @@ -501,7 +501,7 @@ class GeneralModuleTests(unittest.TestCase): # it reasonable to get the host's addr in addition to 0.0.0.0. # At least for eCos. This is required for the S/390 to pass. my_ip_addr = socket.gethostbyname(socket.gethostname()) - self.assert_(name[0] in ("0.0.0.0", my_ip_addr), '%s invalid' % name[0]) + self.assertTrue(name[0] in ("0.0.0.0", my_ip_addr), '%s invalid' % name[0]) self.assertEqual(name[1], port) def testGetSockOpt(self): @@ -509,14 +509,14 @@ class GeneralModuleTests(unittest.TestCase): # We know a socket should start without reuse==0 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) - self.failIf(reuse != 0, "initial mode is reuse") + self.assertFalse(reuse != 0, "initial mode is reuse") def testSetSockOpt(self): # Testing setsockopt() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) - self.failIf(reuse == 0, "failed to set reuse mode") + self.assertFalse(reuse == 0, "failed to set reuse mode") def testSendAfterClose(self): # testing send() after close() with timeout @@ -549,10 +549,10 @@ class GeneralModuleTests(unittest.TestCase): def test_sock_ioctl(self): if os.name != "nt": return - self.assert_(hasattr(socket.socket, 'ioctl')) - self.assert_(hasattr(socket, 'SIO_RCVALL')) - self.assert_(hasattr(socket, 'RCVALL_ON')) - self.assert_(hasattr(socket, 'RCVALL_OFF')) + self.assertTrue(hasattr(socket.socket, 'ioctl')) + self.assertTrue(hasattr(socket, 'SIO_RCVALL')) + self.assertTrue(hasattr(socket, 'RCVALL_ON')) + self.assertTrue(hasattr(socket, 'RCVALL_OFF')) class BasicTCPTest(SocketConnectedTest): @@ -724,7 +724,7 @@ class NonBlockingTCPTests(ThreadedTCPSocketTest): except socket.error: pass end = time.time() - self.assert_((end - start) < 1.0, "Error setting non-blocking mode.") + self.assertTrue((end - start) < 1.0, "Error setting non-blocking mode.") def _testSetBlocking(self): pass @@ -801,7 +801,7 @@ class FileObjectClassTestCase(SocketConnectedTest): def tearDown(self): self.serv_file.close() - self.assert_(self.serv_file.closed) + self.assertTrue(self.serv_file.closed) self.serv_file = None SocketConnectedTest.tearDown(self) @@ -811,7 +811,7 @@ class FileObjectClassTestCase(SocketConnectedTest): def clientTearDown(self): self.cli_file.close() - self.assert_(self.cli_file.closed) + self.assertTrue(self.cli_file.closed) self.cli_file = None SocketConnectedTest.clientTearDown(self) @@ -879,10 +879,10 @@ class FileObjectClassTestCase(SocketConnectedTest): self.cli_file.flush() def testClosedAttr(self): - self.assert_(not self.serv_file.closed) + self.assertTrue(not self.serv_file.closed) def _testClosedAttr(self): - self.assert_(not self.cli_file.closed) + self.assertTrue(not self.cli_file.closed) def testAttributes(self): self.assertEqual(self.serv_file.mode, 'rb') @@ -977,7 +977,7 @@ class NetworkConnectionNoServer(unittest.TestCase): def testWithoutServer(self): port = support.find_unused_port() - self.failUnlessRaises( + self.assertRaises( socket.error, lambda: socket.create_connection((HOST, port)) ) @@ -1007,7 +1007,7 @@ class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest): testTimeoutDefault = _justAccept def _testTimeoutDefault(self): # passing no explicit timeout uses socket's global default - self.assert_(socket.getdefaulttimeout() is None) + self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(42) try: self.cli = socket.create_connection((HOST, self.port)) @@ -1018,7 +1018,7 @@ class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest): testTimeoutNone = _justAccept def _testTimeoutNone(self): # None timeout means the same as sock.settimeout(None) - self.assert_(socket.getdefaulttimeout() is None) + self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: self.cli = socket.create_connection((HOST, self.port), timeout=None) @@ -1063,7 +1063,7 @@ class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest): def _testOutsideTimeout(self): self.cli = sock = socket.create_connection((HOST, self.port), timeout=1) - self.failUnlessRaises(socket.timeout, lambda: sock.recv(5)) + self.assertRaises(socket.timeout, lambda: sock.recv(5)) class TCPTimeoutTest(SocketTCPTest): @@ -1072,7 +1072,7 @@ class TCPTimeoutTest(SocketTCPTest): def raise_timeout(*args, **kwargs): self.serv.settimeout(1.0) self.serv.accept() - self.failUnlessRaises(socket.timeout, raise_timeout, + self.assertRaises(socket.timeout, raise_timeout, "Error generating a timeout exception (TCP)") def testTimeoutZero(self): @@ -1129,7 +1129,7 @@ class UDPTimeoutTest(SocketTCPTest): def raise_timeout(*args, **kwargs): self.serv.settimeout(1.0) self.serv.recv(1024) - self.failUnlessRaises(socket.timeout, raise_timeout, + self.assertRaises(socket.timeout, raise_timeout, "Error generating a timeout exception (UDP)") def testTimeoutZero(self): @@ -1149,10 +1149,10 @@ class UDPTimeoutTest(SocketTCPTest): class TestExceptions(unittest.TestCase): def testExceptionTree(self): - self.assert_(issubclass(socket.error, Exception)) - self.assert_(issubclass(socket.herror, socket.error)) - self.assert_(issubclass(socket.gaierror, socket.error)) - self.assert_(issubclass(socket.timeout, socket.error)) + self.assertTrue(issubclass(socket.error, Exception)) + self.assertTrue(issubclass(socket.herror, socket.error)) + self.assertTrue(issubclass(socket.gaierror, socket.error)) + self.assertTrue(issubclass(socket.timeout, socket.error)) class TestLinuxAbstractNamespace(unittest.TestCase): diff --git a/Lib/test/test_stringprep.py b/Lib/test/test_stringprep.py index f3d3327..aa71221 100644 --- a/Lib/test/test_stringprep.py +++ b/Lib/test/test_stringprep.py @@ -8,66 +8,66 @@ from stringprep import * class StringprepTests(unittest.TestCase): def test(self): - self.failUnless(in_table_a1("\u0221")) - self.failIf(in_table_a1("\u0222")) + self.assertTrue(in_table_a1("\u0221")) + self.assertFalse(in_table_a1("\u0222")) - self.failUnless(in_table_b1("\u00ad")) - self.failIf(in_table_b1("\u00ae")) + self.assertTrue(in_table_b1("\u00ad")) + self.assertFalse(in_table_b1("\u00ae")) - self.failUnless(map_table_b2("\u0041"), "\u0061") - self.failUnless(map_table_b2("\u0061"), "\u0061") + self.assertTrue(map_table_b2("\u0041"), "\u0061") + self.assertTrue(map_table_b2("\u0061"), "\u0061") - self.failUnless(map_table_b3("\u0041"), "\u0061") - self.failUnless(map_table_b3("\u0061"), "\u0061") + self.assertTrue(map_table_b3("\u0041"), "\u0061") + self.assertTrue(map_table_b3("\u0061"), "\u0061") - self.failUnless(in_table_c11("\u0020")) - self.failIf(in_table_c11("\u0021")) + self.assertTrue(in_table_c11("\u0020")) + self.assertFalse(in_table_c11("\u0021")) - self.failUnless(in_table_c12("\u00a0")) - self.failIf(in_table_c12("\u00a1")) + self.assertTrue(in_table_c12("\u00a0")) + self.assertFalse(in_table_c12("\u00a1")) - self.failUnless(in_table_c12("\u00a0")) - self.failIf(in_table_c12("\u00a1")) + self.assertTrue(in_table_c12("\u00a0")) + self.assertFalse(in_table_c12("\u00a1")) - self.failUnless(in_table_c11_c12("\u00a0")) - self.failIf(in_table_c11_c12("\u00a1")) + self.assertTrue(in_table_c11_c12("\u00a0")) + self.assertFalse(in_table_c11_c12("\u00a1")) - self.failUnless(in_table_c21("\u001f")) - self.failIf(in_table_c21("\u0020")) + self.assertTrue(in_table_c21("\u001f")) + self.assertFalse(in_table_c21("\u0020")) - self.failUnless(in_table_c22("\u009f")) - self.failIf(in_table_c22("\u00a0")) + self.assertTrue(in_table_c22("\u009f")) + self.assertFalse(in_table_c22("\u00a0")) - self.failUnless(in_table_c21_c22("\u009f")) - self.failIf(in_table_c21_c22("\u00a0")) + self.assertTrue(in_table_c21_c22("\u009f")) + self.assertFalse(in_table_c21_c22("\u00a0")) - self.failUnless(in_table_c3("\ue000")) - self.failIf(in_table_c3("\uf900")) + self.assertTrue(in_table_c3("\ue000")) + self.assertFalse(in_table_c3("\uf900")) - self.failUnless(in_table_c4("\uffff")) - self.failIf(in_table_c4("\u0000")) + self.assertTrue(in_table_c4("\uffff")) + self.assertFalse(in_table_c4("\u0000")) - self.failUnless(in_table_c5("\ud800")) - self.failIf(in_table_c5("\ud7ff")) + self.assertTrue(in_table_c5("\ud800")) + self.assertFalse(in_table_c5("\ud7ff")) - self.failUnless(in_table_c6("\ufff9")) - self.failIf(in_table_c6("\ufffe")) + self.assertTrue(in_table_c6("\ufff9")) + self.assertFalse(in_table_c6("\ufffe")) - self.failUnless(in_table_c7("\u2ff0")) - self.failIf(in_table_c7("\u2ffc")) + self.assertTrue(in_table_c7("\u2ff0")) + self.assertFalse(in_table_c7("\u2ffc")) - self.failUnless(in_table_c8("\u0340")) - self.failIf(in_table_c8("\u0342")) + self.assertTrue(in_table_c8("\u0340")) + self.assertFalse(in_table_c8("\u0342")) # C.9 is not in the bmp - # self.failUnless(in_table_c9(u"\U000E0001")) - # self.failIf(in_table_c8(u"\U000E0002")) + # self.assertTrue(in_table_c9(u"\U000E0001")) + # self.assertFalse(in_table_c8(u"\U000E0002")) - self.failUnless(in_table_d1("\u05be")) - self.failIf(in_table_d1("\u05bf")) + self.assertTrue(in_table_d1("\u05be")) + self.assertFalse(in_table_d1("\u05bf")) - self.failUnless(in_table_d2("\u0041")) - self.failIf(in_table_d2("\u0040")) + self.assertTrue(in_table_d2("\u0041")) + self.assertFalse(in_table_d2("\u0040")) # This would generate a hash of all predicates. However, running # it is quite expensive, and only serves to detect changes in the diff --git a/Lib/test/test_strptime.py b/Lib/test/test_strptime.py index 436a487..fb60ee4 100644 --- a/Lib/test/test_strptime.py +++ b/Lib/test/test_strptime.py @@ -13,7 +13,7 @@ import _strptime class getlang_Tests(unittest.TestCase): """Test _getlang""" def test_basic(self): - self.failUnlessEqual(_strptime._getlang(), locale.getlocale(locale.LC_TIME)) + self.assertEqual(_strptime._getlang(), locale.getlocale(locale.LC_TIME)) class LocaleTime_Tests(unittest.TestCase): """Tests for _strptime.LocaleTime. @@ -36,9 +36,9 @@ class LocaleTime_Tests(unittest.TestCase): """ strftime_output = time.strftime(directive, self.time_tuple).lower() comparison = testing[self.time_tuple[tuple_position]] - self.failUnless(strftime_output in testing, "%s: not found in tuple" % + self.assertTrue(strftime_output in testing, "%s: not found in tuple" % error_msg) - self.failUnless(comparison == strftime_output, + self.assertTrue(comparison == strftime_output, "%s: position within tuple incorrect; %s != %s" % (error_msg, comparison, strftime_output)) @@ -61,18 +61,18 @@ class LocaleTime_Tests(unittest.TestCase): def test_am_pm(self): # Make sure AM/PM representation done properly strftime_output = time.strftime("%p", self.time_tuple).lower() - self.failUnless(strftime_output in self.LT_ins.am_pm, + self.assertTrue(strftime_output in self.LT_ins.am_pm, "AM/PM representation not in tuple") if self.time_tuple[3] < 12: position = 0 else: position = 1 - self.failUnless(strftime_output == self.LT_ins.am_pm[position], + self.assertTrue(strftime_output == self.LT_ins.am_pm[position], "AM/PM representation in the wrong position within the tuple") def test_timezone(self): # Make sure timezone is correct timezone = time.strftime("%Z", self.time_tuple).lower() if timezone: - self.failUnless(timezone in self.LT_ins.timezone[0] or \ + self.assertTrue(timezone in self.LT_ins.timezone[0] or \ timezone in self.LT_ins.timezone[1], "timezone %s not found in %s" % (timezone, self.LT_ins.timezone)) @@ -86,26 +86,26 @@ class LocaleTime_Tests(unittest.TestCase): # output. magic_date = (1999, 3, 17, 22, 44, 55, 2, 76, 0) strftime_output = time.strftime("%c", magic_date) - self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_date_time, + self.assertTrue(strftime_output == time.strftime(self.LT_ins.LC_date_time, magic_date), "LC_date_time incorrect") strftime_output = time.strftime("%x", magic_date) - self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_date, + self.assertTrue(strftime_output == time.strftime(self.LT_ins.LC_date, magic_date), "LC_date incorrect") strftime_output = time.strftime("%X", magic_date) - self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_time, + self.assertTrue(strftime_output == time.strftime(self.LT_ins.LC_time, magic_date), "LC_time incorrect") LT = _strptime.LocaleTime() LT.am_pm = ('', '') - self.failUnless(LT.LC_time, "LocaleTime's LC directives cannot handle " + self.assertTrue(LT.LC_time, "LocaleTime's LC directives cannot handle " "empty strings") def test_lang(self): # Make sure lang is set to what _getlang() returns # Assuming locale has not changed between now and when self.LT_ins was created - self.failUnlessEqual(self.LT_ins.lang, _strptime._getlang()) + self.assertEqual(self.LT_ins.lang, _strptime._getlang()) class TimeRETests(unittest.TestCase): @@ -119,13 +119,13 @@ class TimeRETests(unittest.TestCase): def test_pattern(self): # Test TimeRE.pattern pattern_string = self.time_re.pattern(r"%a %A %d") - self.failUnless(pattern_string.find(self.locale_time.a_weekday[2]) != -1, + self.assertTrue(pattern_string.find(self.locale_time.a_weekday[2]) != -1, "did not find abbreviated weekday in pattern string '%s'" % pattern_string) - self.failUnless(pattern_string.find(self.locale_time.f_weekday[4]) != -1, + self.assertTrue(pattern_string.find(self.locale_time.f_weekday[4]) != -1, "did not find full weekday in pattern string '%s'" % pattern_string) - self.failUnless(pattern_string.find(self.time_re['d']) != -1, + self.assertTrue(pattern_string.find(self.time_re['d']) != -1, "did not find 'd' directive pattern string '%s'" % pattern_string) @@ -133,23 +133,23 @@ class TimeRETests(unittest.TestCase): # Make sure any characters in the format string that might be taken as # regex syntax is escaped. pattern_string = self.time_re.pattern("\d+") - self.failUnless(r"\\d\+" in pattern_string, + self.assertTrue(r"\\d\+" in pattern_string, "%s does not have re characters escaped properly" % pattern_string) def test_compile(self): # Check that compiled regex is correct found = self.time_re.compile(r"%A").match(self.locale_time.f_weekday[6]) - self.failUnless(found and found.group('A') == self.locale_time.f_weekday[6], + self.assertTrue(found and found.group('A') == self.locale_time.f_weekday[6], "re object for '%A' failed") compiled = self.time_re.compile(r"%a %b") found = compiled.match("%s %s" % (self.locale_time.a_weekday[4], self.locale_time.a_month[4])) - self.failUnless(found, + self.assertTrue(found, "Match failed with '%s' regex and '%s' string" % (compiled.pattern, "%s %s" % (self.locale_time.a_weekday[4], self.locale_time.a_month[4]))) - self.failUnless(found.group('a') == self.locale_time.a_weekday[4] and + self.assertTrue(found.group('a') == self.locale_time.a_weekday[4] and found.group('b') == self.locale_time.a_month[4], "re object couldn't find the abbreviated weekday month in " "'%s' using '%s'; group 'a' = '%s', group 'b' = %s'" % @@ -159,7 +159,7 @@ class TimeRETests(unittest.TestCase): 'U','w','W','x','X','y','Y','Z','%'): compiled = self.time_re.compile("%" + directive) found = compiled.match(time.strftime("%" + directive)) - self.failUnless(found, "Matching failed on '%s' using '%s' regex" % + self.assertTrue(found, "Matching failed on '%s' using '%s' regex" % (time.strftime("%" + directive), compiled.pattern)) @@ -168,14 +168,14 @@ class TimeRETests(unittest.TestCase): # Fixes bug #661354 test_locale = _strptime.LocaleTime() test_locale.timezone = (frozenset(), frozenset()) - self.failUnless(_strptime.TimeRE(test_locale).pattern("%Z") == '', + self.assertTrue(_strptime.TimeRE(test_locale).pattern("%Z") == '', "with timezone == ('',''), TimeRE().pattern('%Z') != ''") def test_matching_with_escapes(self): # Make sure a format that requires escaping of characters works compiled_re = self.time_re.compile("\w+ %m") found = compiled_re.match("\w+ 10") - self.failUnless(found, "Escaping failed of format '\w+ 10'") + self.assertTrue(found, "Escaping failed of format '\w+ 10'") def test_locale_data_w_regex_metacharacters(self): # Check that if locale data contains regex metacharacters they are @@ -186,7 +186,7 @@ class TimeRETests(unittest.TestCase): "Tokyo (standard time)")), frozenset("Tokyo (daylight time)")) time_re = _strptime.TimeRE(locale_time) - self.failUnless(time_re.compile("%Z").match("Tokyo (standard time)"), + self.assertTrue(time_re.compile("%Z").match("Tokyo (standard time)"), "locale data that contains regex metacharacters is not" " properly escaped") @@ -195,8 +195,8 @@ class TimeRETests(unittest.TestCase): # so as to not allow to subpatterns to end up next to each other and # "steal" characters from each other. pattern = self.time_re.pattern('%j %H') - self.failUnless(not re.match(pattern, "180")) - self.failUnless(re.match(pattern, "18 0")) + self.assertTrue(not re.match(pattern, "180")) + self.assertTrue(re.match(pattern, "18 0")) class StrptimeTests(unittest.TestCase): @@ -229,7 +229,7 @@ class StrptimeTests(unittest.TestCase): """Helper fxn in testing.""" strf_output = time.strftime("%" + directive, self.time_tuple) strp_output = _strptime._strptime_time(strf_output, "%" + directive) - self.failUnless(strp_output[position] == self.time_tuple[position], + self.assertTrue(strp_output[position] == self.time_tuple[position], "testing of '%s' directive failed; '%s' -> %s != %s" % (directive, strf_output, strp_output[position], self.time_tuple[position])) @@ -243,7 +243,7 @@ class StrptimeTests(unittest.TestCase): for bound in bounds: strp_output = _strptime._strptime_time(bound, '%y') expected_result = century + int(bound) - self.failUnless(strp_output[0] == expected_result, + self.assertTrue(strp_output[0] == expected_result, "'y' test failed; passed in '%s' " "and returned '%s'" % (bound, strp_output[0])) @@ -261,7 +261,7 @@ class StrptimeTests(unittest.TestCase): self.helper('H', 3) strf_output = time.strftime("%I %p", self.time_tuple) strp_output = _strptime._strptime_time(strf_output, "%I %p") - self.failUnless(strp_output[3] == self.time_tuple[3], + self.assertTrue(strp_output[3] == self.time_tuple[3], "testing of '%%I %%p' directive failed; '%s' -> %s != %s" % (strf_output, strp_output[3], self.time_tuple[3])) @@ -294,9 +294,9 @@ class StrptimeTests(unittest.TestCase): # Check for equal timezone names deals with bad locale info when this # occurs; first found in FreeBSD 4.4. strp_output = _strptime._strptime_time("UTC", "%Z") - self.failUnlessEqual(strp_output.tm_isdst, 0) + self.assertEqual(strp_output.tm_isdst, 0) strp_output = _strptime._strptime_time("GMT", "%Z") - self.failUnlessEqual(strp_output.tm_isdst, 0) + self.assertEqual(strp_output.tm_isdst, 0) if sys.platform == "mac": # Timezones don't really work on MacOS9 return @@ -305,11 +305,11 @@ class StrptimeTests(unittest.TestCase): strp_output = _strptime._strptime_time(strf_output, "%Z") locale_time = _strptime.LocaleTime() if time.tzname[0] != time.tzname[1] or not time.daylight: - self.failUnless(strp_output[8] == time_tuple[8], + self.assertTrue(strp_output[8] == time_tuple[8], "timezone check failed; '%s' -> %s != %s" % (strf_output, strp_output[8], time_tuple[8])) else: - self.failUnless(strp_output[8] == -1, + self.assertTrue(strp_output[8] == -1, "LocaleTime().timezone has duplicate values and " "time.daylight but timezone value not set to -1") @@ -327,7 +327,7 @@ class StrptimeTests(unittest.TestCase): time.tzname = (tz_name, tz_name) time.daylight = 1 tz_value = _strptime._strptime_time(tz_name, "%Z")[8] - self.failUnlessEqual(tz_value, -1, + self.assertEqual(tz_value, -1, "%s lead to a timezone value of %s instead of -1 when " "time.daylight set to %s and passing in %s" % (time.tzname, tz_value, time.daylight, tz_name)) @@ -354,25 +354,25 @@ class StrptimeTests(unittest.TestCase): # Make sure % signs are handled properly strf_output = time.strftime("%m %% %Y", self.time_tuple) strp_output = _strptime._strptime_time(strf_output, "%m %% %Y") - self.failUnless(strp_output[0] == self.time_tuple[0] and + self.assertTrue(strp_output[0] == self.time_tuple[0] and strp_output[1] == self.time_tuple[1], "handling of percent sign failed") def test_caseinsensitive(self): # Should handle names case-insensitively. strf_output = time.strftime("%B", self.time_tuple) - self.failUnless(_strptime._strptime_time(strf_output.upper(), "%B"), + self.assertTrue(_strptime._strptime_time(strf_output.upper(), "%B"), "strptime does not handle ALL-CAPS names properly") - self.failUnless(_strptime._strptime_time(strf_output.lower(), "%B"), + self.assertTrue(_strptime._strptime_time(strf_output.lower(), "%B"), "strptime does not handle lowercase names properly") - self.failUnless(_strptime._strptime_time(strf_output.capitalize(), "%B"), + self.assertTrue(_strptime._strptime_time(strf_output.capitalize(), "%B"), "strptime does not handle capword names properly") def test_defaults(self): # Default return value should be (1900, 1, 1, 0, 0, 0, 0, 1, 0) defaults = (1900, 1, 1, 0, 0, 0, 0, 1, -1) strp_output = _strptime._strptime_time('1', '%m') - self.failUnless(strp_output == defaults, + self.assertTrue(strp_output == defaults, "Default values for strptime() are incorrect;" " %s != %s" % (strp_output, defaults)) @@ -383,7 +383,7 @@ class StrptimeTests(unittest.TestCase): # escaped. # Test instigated by bug #796149 . need_escaping = ".^$*+?{}\[]|)(" - self.failUnless(_strptime._strptime_time(need_escaping, need_escaping)) + self.assertTrue(_strptime._strptime_time(need_escaping, need_escaping)) class Strptime12AMPMTests(unittest.TestCase): """Test a _strptime regression in '%I %p' at 12 noon (12 PM)""" @@ -416,7 +416,7 @@ class CalculationTests(unittest.TestCase): format_string = "%Y %m %d %H %M %S %w %Z" result = _strptime._strptime_time(time.strftime(format_string, self.time_tuple), format_string) - self.failUnless(result.tm_yday == self.time_tuple.tm_yday, + self.assertTrue(result.tm_yday == self.time_tuple.tm_yday, "Calculation of tm_yday failed; %s != %s" % (result.tm_yday, self.time_tuple.tm_yday)) @@ -425,7 +425,7 @@ class CalculationTests(unittest.TestCase): format_string = "%Y %H %M %S %w %j %Z" result = _strptime._strptime_time(time.strftime(format_string, self.time_tuple), format_string) - self.failUnless(result.tm_year == self.time_tuple.tm_year and + self.assertTrue(result.tm_year == self.time_tuple.tm_year and result.tm_mon == self.time_tuple.tm_mon and result.tm_mday == self.time_tuple.tm_mday, "Calculation of Gregorian date failed;" @@ -439,7 +439,7 @@ class CalculationTests(unittest.TestCase): format_string = "%Y %m %d %H %S %j %Z" result = _strptime._strptime_time(time.strftime(format_string, self.time_tuple), format_string) - self.failUnless(result.tm_wday == self.time_tuple.tm_wday, + self.assertTrue(result.tm_wday == self.time_tuple.tm_wday, "Calculation of day of the week failed;" "%s != %s" % (result.tm_wday, self.time_tuple.tm_wday)) @@ -452,7 +452,7 @@ class CalculationTests(unittest.TestCase): dt_date = datetime_date(*ymd_tuple) strp_input = dt_date.strftime(format_string) strp_output = _strptime._strptime_time(strp_input, format_string) - self.failUnless(strp_output[:3] == ymd_tuple, + self.assertTrue(strp_output[:3] == ymd_tuple, "%s(%s) test failed w/ '%s': %s != %s (%s != %s)" % (test_reason, directive, strp_input, strp_output[:3], ymd_tuple, @@ -495,8 +495,8 @@ class CacheTests(unittest.TestCase): _strptime._TimeRE_cache.locale_time.lang = "Ni" original_time_re = id(_strptime._TimeRE_cache) _strptime._strptime_time("10", "%d") - self.failIfEqual(original_time_re, id(_strptime._TimeRE_cache)) - self.failUnlessEqual(len(_strptime._regex_cache), 1) + self.assertNotEqual(original_time_re, id(_strptime._TimeRE_cache)) + self.assertEqual(len(_strptime._regex_cache), 1) def test_regex_cleanup(self): # Make sure cached regexes are discarded when cache becomes "full". @@ -509,7 +509,7 @@ class CacheTests(unittest.TestCase): _strptime._regex_cache[bogus_key] = None bogus_key += 1 _strptime._strptime_time("10", "%d") - self.failUnlessEqual(len(_strptime._regex_cache), 1) + self.assertEqual(len(_strptime._regex_cache), 1) def test_new_localetime(self): # A new LocaleTime instance should be created when a new TimeRE object @@ -517,7 +517,7 @@ class CacheTests(unittest.TestCase): locale_time_id = id(_strptime._TimeRE_cache.locale_time) _strptime._TimeRE_cache.locale_time.lang = "Ni" _strptime._strptime_time("10", "%d") - self.failIfEqual(locale_time_id, + self.assertNotEqual(locale_time_id, id(_strptime._TimeRE_cache.locale_time)) def test_TimeRE_recreation(self): @@ -538,7 +538,7 @@ class CacheTests(unittest.TestCase): # Get the new cache object's id. second_time_re_id = id(_strptime._TimeRE_cache) # They should not be equal. - self.failIfEqual(first_time_re_id, second_time_re_id) + self.assertNotEqual(first_time_re_id, second_time_re_id) # Possible test locale is not supported while initial locale is. # If this is the case just suppress the exception and fall-through # to the reseting to the original locale. diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py index 46e777b..39f6daf 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -126,7 +126,7 @@ class StructTest(unittest.TestCase): # encoding of the string when packed. arg = bytes(arg, 'latin1') if rev != arg: - self.assert_(asy) + self.assertTrue(asy) def test_native_qQ(self): # can't pack -1 as unsigned regardless @@ -192,7 +192,7 @@ class StructTest(unittest.TestCase): expected = x if x < 0: expected += 1 << self.bitsize - self.assert_(expected > 0) + self.assertTrue(expected > 0) expected = hex(expected)[2:] # chop "0x" if len(expected) & 1: expected = "0" + expected diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py index 124acff..7adca53 100644 --- a/Lib/test/test_structseq.py +++ b/Lib/test/test_structseq.py @@ -28,7 +28,7 @@ class StructSeqTest(unittest.TestCase): def test_repr(self): t = time.gmtime() - self.assert_(repr(t)) + self.assertTrue(repr(t)) t = time.gmtime(0) self.assertEqual(repr(t), "time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, " @@ -50,8 +50,8 @@ class StructSeqTest(unittest.TestCase): def test_contains(self): t1 = time.gmtime() for item in t1: - self.assert_(item in t1) - self.assert_(-42 not in t1) + self.assertTrue(item in t1) + self.assertTrue(-42 not in t1) def test_hash(self): t1 = time.gmtime() @@ -61,11 +61,11 @@ class StructSeqTest(unittest.TestCase): t1 = time.gmtime() t2 = type(t1)(t1) self.assertEqual(t1, t2) - self.assert_(not (t1 < t2)) - self.assert_(t1 <= t2) - self.assert_(not (t1 > t2)) - self.assert_(t1 >= t2) - self.assert_(not (t1 != t2)) + self.assertTrue(not (t1 < t2)) + self.assertTrue(t1 <= t2) + self.assertTrue(not (t1 > t2)) + self.assertTrue(t1 >= t2) + self.assertTrue(not (t1 != t2)) def test_fields(self): t = time.gmtime() diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 66aebfc..326c996 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -491,7 +491,7 @@ class ProcessTestCase(unittest.TestCase): # but, based on system scheduling we can't control, it's possible # poll() never returned None. It "should be" very rare that it # didn't go around at least twice. - self.assert_(count >= 2) + self.assertTrue(count >= 2) # Subsequent invocations should just return the returncode self.assertEqual(p.poll(), 0) @@ -657,7 +657,7 @@ class ProcessTestCase(unittest.TestCase): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assert_(p.poll() is None, p.poll()) + self.assertTrue(p.poll() is None, p.poll()) p.send_signal(signal.SIGINT) self.assertNotEqual(p.wait(), 0) @@ -665,7 +665,7 @@ class ProcessTestCase(unittest.TestCase): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assert_(p.poll() is None, p.poll()) + self.assertTrue(p.poll() is None, p.poll()) p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) @@ -673,7 +673,7 @@ class ProcessTestCase(unittest.TestCase): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assert_(p.poll() is None, p.poll()) + self.assertTrue(p.poll() is None, p.poll()) p.terminate() self.assertEqual(p.wait(), -signal.SIGTERM) @@ -751,7 +751,7 @@ class ProcessTestCase(unittest.TestCase): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assert_(p.poll() is None, p.poll()) + self.assertTrue(p.poll() is None, p.poll()) p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) @@ -759,7 +759,7 @@ class ProcessTestCase(unittest.TestCase): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assert_(p.poll() is None, p.poll()) + self.assertTrue(p.poll() is None, p.poll()) p.kill() self.assertNotEqual(p.wait(), 0) @@ -767,7 +767,7 @@ class ProcessTestCase(unittest.TestCase): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assert_(p.poll() is None, p.poll()) + self.assertTrue(p.poll() is None, p.poll()) p.terminate() self.assertNotEqual(p.wait(), 0) diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index 45b7be8..3e62d96 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -122,7 +122,7 @@ class SymtableTest(unittest.TestCase): self.assertTrue(self.top.lookup("namespace_test").is_namespace()) self.assertFalse(self.spam.lookup("x").is_namespace()) - self.assert_(self.top.lookup("spam").get_namespace() is self.spam) + self.assertTrue(self.top.lookup("spam").get_namespace() is self.spam) ns_test = self.top.lookup("namespace_test") self.assertEqual(len(ns_test.get_namespaces()), 2) self.assertRaises(ValueError, ns_test.get_namespace) diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 8f68cf7..cac90f4 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -30,7 +30,7 @@ class SysModuleTest(unittest.TestCase): dh(None) self.assertEqual(out.getvalue(), "") - self.assert_(not hasattr(builtins, "_")) + self.assertTrue(not hasattr(builtins, "_")) dh(42) self.assertEqual(out.getvalue(), "42\n") self.assertEqual(builtins._, 42) @@ -62,12 +62,12 @@ class SysModuleTest(unittest.TestCase): except ValueError as exc: eh(*sys.exc_info()) - self.assert_(err.getvalue().endswith("ValueError: 42\n")) + self.assertTrue(err.getvalue().endswith("ValueError: 42\n")) def test_excepthook(self): with test.support.captured_output("stderr") as stderr: sys.excepthook(1, '1', 1) - self.assert_("TypeError: print_exception(): Exception expected for " \ + self.assertTrue("TypeError: print_exception(): Exception expected for " \ "value, str found" in stderr.getvalue()) # FIXME: testing the code for a lost or replaced excepthook in @@ -136,7 +136,7 @@ class SysModuleTest(unittest.TestCase): def test_getdefaultencoding(self): self.assertRaises(TypeError, sys.getdefaultencoding, 42) # can't check more than the type, as the user might have changed it - self.assert_(isinstance(sys.getdefaultencoding(), str)) + self.assertTrue(isinstance(sys.getdefaultencoding(), str)) # testing sys.settrace() is done in test_trace.py # testing sys.setprofile() is done in test_profile.py @@ -203,20 +203,20 @@ class SysModuleTest(unittest.TestCase): def test_getwindowsversion(self): if hasattr(sys, "getwindowsversion"): v = sys.getwindowsversion() - self.assert_(isinstance(v, tuple)) + self.assertTrue(isinstance(v, tuple)) self.assertEqual(len(v), 5) - self.assert_(isinstance(v[0], int)) - self.assert_(isinstance(v[1], int)) - self.assert_(isinstance(v[2], int)) - self.assert_(isinstance(v[3], int)) - self.assert_(isinstance(v[4], str)) + self.assertTrue(isinstance(v[0], int)) + self.assertTrue(isinstance(v[1], int)) + self.assertTrue(isinstance(v[2], int)) + self.assertTrue(isinstance(v[3], int)) + self.assertTrue(isinstance(v[4], str)) def test_call_tracing(self): self.assertRaises(TypeError, sys.call_tracing, type, 2) def test_dlopenflags(self): if hasattr(sys, "setdlopenflags"): - self.assert_(hasattr(sys, "getdlopenflags")) + self.assertTrue(hasattr(sys, "getdlopenflags")) self.assertRaises(TypeError, sys.getdlopenflags, 42) oldflags = sys.getdlopenflags() self.assertRaises(TypeError, sys.setdlopenflags) @@ -237,12 +237,12 @@ class SysModuleTest(unittest.TestCase): del n self.assertEqual(sys.getrefcount(None), c) if hasattr(sys, "gettotalrefcount"): - self.assert_(isinstance(sys.gettotalrefcount(), int)) + self.assertTrue(isinstance(sys.gettotalrefcount(), int)) def test_getframe(self): self.assertRaises(TypeError, sys._getframe, 42, 42) self.assertRaises(ValueError, sys._getframe, 2000000000) - self.assert_( + self.assertTrue( SysModuleTest.test_getframe.__code__ \ is sys._getframe().f_code ) @@ -293,12 +293,12 @@ class SysModuleTest(unittest.TestCase): d = sys._current_frames() main_id = _thread.get_ident() - self.assert_(main_id in d) - self.assert_(thread_id in d) + self.assertTrue(main_id in d) + self.assertTrue(thread_id in d) # Verify that the captured main-thread frame is _this_ frame. frame = d.pop(main_id) - self.assert_(frame is sys._getframe()) + self.assertTrue(frame is sys._getframe()) # Verify that the captured thread frame is blocked in g456, called # from f123. This is a litte tricky, since various bits of @@ -316,7 +316,7 @@ class SysModuleTest(unittest.TestCase): # And the next record must be for g456(). filename, lineno, funcname, sourceline = stack[i+1] self.assertEqual(funcname, "g456") - self.assert_(sourceline in ["leave_g.wait()", "entered_g.set()"]) + self.assertTrue(sourceline in ["leave_g.wait()", "entered_g.set()"]) # Reap the spawned thread. leave_g.set() @@ -328,50 +328,50 @@ class SysModuleTest(unittest.TestCase): # "thread id" 0. d = sys._current_frames() self.assertEqual(len(d), 1) - self.assert_(0 in d) - self.assert_(d[0] is sys._getframe()) + self.assertTrue(0 in d) + self.assertTrue(d[0] is sys._getframe()) def test_attributes(self): - self.assert_(isinstance(sys.api_version, int)) - self.assert_(isinstance(sys.argv, list)) - self.assert_(sys.byteorder in ("little", "big")) - self.assert_(isinstance(sys.builtin_module_names, tuple)) - self.assert_(isinstance(sys.copyright, str)) - self.assert_(isinstance(sys.exec_prefix, str)) - self.assert_(isinstance(sys.executable, str)) + self.assertTrue(isinstance(sys.api_version, int)) + self.assertTrue(isinstance(sys.argv, list)) + self.assertTrue(sys.byteorder in ("little", "big")) + self.assertTrue(isinstance(sys.builtin_module_names, tuple)) + self.assertTrue(isinstance(sys.copyright, str)) + self.assertTrue(isinstance(sys.exec_prefix, str)) + self.assertTrue(isinstance(sys.executable, str)) self.assertEqual(len(sys.float_info), 11) self.assertEqual(sys.float_info.radix, 2) self.assertEqual(len(sys.int_info), 2) - self.assert_(sys.int_info.bits_per_digit % 5 == 0) - self.assert_(sys.int_info.sizeof_digit >= 1) + self.assertTrue(sys.int_info.bits_per_digit % 5 == 0) + self.assertTrue(sys.int_info.sizeof_digit >= 1) self.assertEqual(type(sys.int_info.bits_per_digit), int) self.assertEqual(type(sys.int_info.sizeof_digit), int) - self.assert_(isinstance(sys.hexversion, int)) - self.assert_(isinstance(sys.maxsize, int)) - self.assert_(isinstance(sys.maxunicode, int)) - self.assert_(isinstance(sys.platform, str)) - self.assert_(isinstance(sys.prefix, str)) - self.assert_(isinstance(sys.version, str)) + self.assertTrue(isinstance(sys.hexversion, int)) + self.assertTrue(isinstance(sys.maxsize, int)) + self.assertTrue(isinstance(sys.maxunicode, int)) + self.assertTrue(isinstance(sys.platform, str)) + self.assertTrue(isinstance(sys.prefix, str)) + self.assertTrue(isinstance(sys.version, str)) vi = sys.version_info - self.assert_(isinstance(vi[:], tuple)) + self.assertTrue(isinstance(vi[:], tuple)) self.assertEqual(len(vi), 5) - self.assert_(isinstance(vi[0], int)) - self.assert_(isinstance(vi[1], int)) - self.assert_(isinstance(vi[2], int)) - self.assert_(vi[3] in ("alpha", "beta", "candidate", "final")) - self.assert_(isinstance(vi[4], int)) - self.assert_(isinstance(vi.major, int)) - self.assert_(isinstance(vi.minor, int)) - self.assert_(isinstance(vi.micro, int)) - self.assert_(vi.releaselevel in + self.assertTrue(isinstance(vi[0], int)) + self.assertTrue(isinstance(vi[1], int)) + self.assertTrue(isinstance(vi[2], int)) + self.assertTrue(vi[3] in ("alpha", "beta", "candidate", "final")) + self.assertTrue(isinstance(vi[4], int)) + self.assertTrue(isinstance(vi.major, int)) + self.assertTrue(isinstance(vi.minor, int)) + self.assertTrue(isinstance(vi.micro, int)) + self.assertTrue(vi.releaselevel in ("alpha", "beta", "candidate", "final")) - self.assert_(isinstance(vi.serial, int)) + self.assertTrue(isinstance(vi.serial, int)) self.assertEqual(vi[0], vi.major) self.assertEqual(vi[1], vi.minor) self.assertEqual(vi[2], vi.micro) self.assertEqual(vi[3], vi.releaselevel) self.assertEqual(vi[4], vi.serial) - self.assert_(vi > (1,0,0)) + self.assertTrue(vi > (1,0,0)) def test_43581(self): # Can't use sys.stdout, as this is a StringIO object when @@ -381,9 +381,9 @@ class SysModuleTest(unittest.TestCase): def test_intern(self): self.assertRaises(TypeError, sys.intern) s = "never interned before" - self.assert_(sys.intern(s) is s) + self.assertTrue(sys.intern(s) is s) s2 = s.swapcase().swapcase() - self.assert_(sys.intern(s2) is s) + self.assertTrue(sys.intern(s2) is s) # Subclasses of string can't be interned, because they # provide too much opportunity for insane things to happen. @@ -398,15 +398,15 @@ class SysModuleTest(unittest.TestCase): def test_sys_flags(self): - self.failUnless(sys.flags) + self.assertTrue(sys.flags) attrs = ("debug", "division_warning", "inspect", "interactive", "optimize", "dont_write_bytecode", "no_user_site", "no_site", "ignore_environment", "verbose", "bytes_warning") for attr in attrs: - self.assert_(hasattr(sys.flags, attr), attr) + self.assertTrue(hasattr(sys.flags, attr), attr) self.assertEqual(type(getattr(sys.flags, attr)), int, attr) - self.assert_(repr(sys.flags)) + self.assertTrue(repr(sys.flags)) self.assertEqual(len(sys.flags), len(attrs)) def test_clear_type_cache(self): diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index f4c0035..76390c7 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -57,7 +57,7 @@ class UstarReadTest(ReadTest): tarinfo = self.tar.getmember("ustar/regtype") fobj = self.tar.extractfile(tarinfo) data = fobj.read() - self.assert_((len(data), md5sum(data)) == (tarinfo.size, md5_regtype), + self.assertTrue((len(data), md5sum(data)) == (tarinfo.size, md5_regtype), "regular file extraction failed") def test_fileobj_readlines(self): @@ -68,11 +68,11 @@ class UstarReadTest(ReadTest): lines1 = fobj1.readlines() lines2 = fobj2.readlines() - self.assert_(lines1 == lines2, + self.assertTrue(lines1 == lines2, "fileobj.readlines() failed") - self.assert_(len(lines2) == 114, + self.assertTrue(len(lines2) == 114, "fileobj.readlines() failed") - self.assert_(lines2[83] == \ + self.assertTrue(lines2[83] == \ "I will gladly admit that Python is not the fastest running scripting language.\n", "fileobj.readlines() failed") @@ -83,7 +83,7 @@ class UstarReadTest(ReadTest): fobj2 = self.tar.extractfile(tarinfo) lines1 = fobj1.readlines() lines2 = list(io.TextIOWrapper(fobj2)) - self.assert_(lines1 == lines2, + self.assertTrue(lines1 == lines2, "fileobj.__iter__() failed") def test_fileobj_seek(self): @@ -109,12 +109,12 @@ class UstarReadTest(ReadTest): self.assertEqual(2048, fobj.tell(), "seek() to positive relative position failed") s = fobj.read(10) - self.assert_(s == data[2048:2058], + self.assertTrue(s == data[2048:2058], "read() after seek failed") fobj.seek(0, 2) self.assertEqual(tarinfo.size, fobj.tell(), "seek() to file's end failed") - self.assert_(fobj.read() == b"", + self.assertTrue(fobj.read() == b"", "read() at file's end did not return empty string") fobj.seek(-tarinfo.size, 2) self.assertEqual(0, fobj.tell(), @@ -123,13 +123,13 @@ class UstarReadTest(ReadTest): s1 = fobj.readlines() fobj.seek(512) s2 = fobj.readlines() - self.assert_(s1 == s2, + self.assertTrue(s1 == s2, "readlines() after seek failed") fobj.seek(0) self.assertEqual(len(fobj.readline()), fobj.tell(), "tell() after readline() failed") fobj.seek(512) - self.assert_(len(fobj.readline()) + 512 == fobj.tell(), + self.assertTrue(len(fobj.readline()) + 512 == fobj.tell(), "tell() after seek() and readline() failed") fobj.seek(0) line = fobj.readline() @@ -204,7 +204,7 @@ class MiscReadTest(ReadTest): # Old V7 tars create directory members using an AREGTYPE # header with a "/" appended to the filename field. tarinfo = self.tar.getmember("misc/dirtype-old-v7") - self.assert_(tarinfo.type == tarfile.DIRTYPE, + self.assertTrue(tarinfo.type == tarfile.DIRTYPE, "v7 dirtype failed") def test_xstar_type(self): @@ -218,15 +218,15 @@ class MiscReadTest(ReadTest): def test_check_members(self): for tarinfo in self.tar: - self.assert_(int(tarinfo.mtime) == 0o7606136617, + self.assertTrue(int(tarinfo.mtime) == 0o7606136617, "wrong mtime for %s" % tarinfo.name) if not tarinfo.name.startswith("ustar/"): continue - self.assert_(tarinfo.uname == "tarfile", + self.assertTrue(tarinfo.uname == "tarfile", "wrong uname for %s" % tarinfo.name) def test_find_members(self): - self.assert_(self.tar.getmembers()[-1].name == "misc/eof", + self.assertTrue(self.tar.getmembers()[-1].name == "misc/eof", "could not find all members") def test_extract_hardlink(self): @@ -275,7 +275,7 @@ class StreamReadTest(ReadTest): tarinfo = self.tar.next() # get "regtype" (can't use getmember) fobj = self.tar.extractfile(tarinfo) data = fobj.read() - self.assert_((len(data), md5sum(data)) == (tarinfo.size, md5_regtype), + self.assertTrue((len(data), md5sum(data)) == (tarinfo.size, md5_regtype), "regular file extraction failed") def test_provoke_stream_error(self): @@ -292,7 +292,7 @@ class StreamReadTest(ReadTest): t2 = tar2.next() if t1 is None: break - self.assert_(t2 is not None, "stream.next() failed.") + self.assertTrue(t2 is not None, "stream.next() failed.") if t2.islnk() or t2.issym(): self.assertRaises(tarfile.StreamError, tar2.extractfile, t2) @@ -302,7 +302,7 @@ class StreamReadTest(ReadTest): v2 = tar2.extractfile(t2) if v1 is None: continue - self.assert_(v2 is not None, "stream.extractfile() failed") + self.assertTrue(v2 is not None, "stream.extractfile() failed") self.assertEqual(v1.read(), v2.read(), "stream extraction failed") tar1.close() @@ -364,7 +364,7 @@ class MemberReadTest(ReadTest): def _test_member(self, tarinfo, chksum=None, **kwargs): if chksum is not None: - self.assert_(md5sum(self.tar.extractfile(tarinfo).read()) == chksum, + self.assertTrue(md5sum(self.tar.extractfile(tarinfo).read()) == chksum, "wrong md5sum for %s" % tarinfo.name) kwargs["mtime"] = 0o7606136617 @@ -375,7 +375,7 @@ class MemberReadTest(ReadTest): kwargs["uname"] = "tarfile" kwargs["gname"] = "tarfile" for k, v in kwargs.items(): - self.assert_(getattr(tarinfo, k) == v, + self.assertTrue(getattr(tarinfo, k) == v, "wrong value in %s field of %s" % (k, tarinfo.name)) def test_find_regtype(self): @@ -424,7 +424,7 @@ class MemberReadTest(ReadTest): def test_find_ustar_longname(self): name = "ustar/" + "12345/" * 39 + "1234567/longname" - self.assert_(name in self.tar.getnames()) + self.assertTrue(name in self.tar.getnames()) def test_find_regtype_oldv7(self): tarinfo = self.tar.getmember("misc/regtype-old-v7") @@ -445,7 +445,7 @@ class LongnameTest(ReadTest): tarinfo = self.tar.getmember(longname) except KeyError: self.fail("longname not found") - self.assert_(tarinfo.type != tarfile.DIRTYPE, "read longname as dirtype") + self.assertTrue(tarinfo.type != tarfile.DIRTYPE, "read longname as dirtype") def test_read_longlink(self): longname = self.subdir + "/" + "123/" * 125 + "longname" @@ -454,7 +454,7 @@ class LongnameTest(ReadTest): tarinfo = self.tar.getmember(longlink) except KeyError: self.fail("longlink not found") - self.assert_(tarinfo.linkname == longname, "linkname wrong") + self.assertTrue(tarinfo.linkname == longname, "linkname wrong") def test_truncated_longname(self): longname = self.subdir + "/" + "123/" * 125 + "longname" @@ -534,7 +534,7 @@ class WriteTestBase(unittest.TestCase): tar = tarfile.open(fileobj=fobj, mode=self.mode) tar.addfile(tarfile.TarInfo("foo")) tar.close() - self.assert_(fobj.closed is False, "external fileobjs must never closed") + self.assertTrue(fobj.closed is False, "external fileobjs must never closed") class WriteTest(WriteTestBase): @@ -553,7 +553,7 @@ class WriteTest(WriteTestBase): tar.close() tar = tarfile.open(tmpname) - self.assert_(tar.getnames()[0] == name, + self.assertTrue(tar.getnames()[0] == name, "failed to store 100 char filename") tar.close() @@ -566,7 +566,7 @@ class WriteTest(WriteTestBase): fobj.close() tar.add(path) tar.close() - self.assert_(os.path.getsize(tmpname) > 0, + self.assertTrue(os.path.getsize(tmpname) > 0, "tarfile is empty") # The test_*_size tests test for bug #1167128. @@ -627,16 +627,16 @@ class WriteTest(WriteTestBase): dstname = os.path.abspath(tmpname) tar = tarfile.open(tmpname, self.mode) - self.assert_(tar.name == dstname, "archive name must be absolute") + self.assertTrue(tar.name == dstname, "archive name must be absolute") tar.add(dstname) - self.assert_(tar.getnames() == [], "added the archive to itself") + self.assertTrue(tar.getnames() == [], "added the archive to itself") cwd = os.getcwd() os.chdir(TEMPDIR) tar.add(dstname) os.chdir(cwd) - self.assert_(tar.getnames() == [], "added the archive to itself") + self.assertTrue(tar.getnames() == [], "added the archive to itself") def test_exclude(self): tempdir = os.path.join(TEMPDIR, "exclude") @@ -677,14 +677,14 @@ class StreamWriteTest(WriteTestBase): dec = bz2.BZ2Decompressor() data = open(tmpname, "rb").read() data = dec.decompress(data) - self.assert_(len(dec.unused_data) == 0, + self.assertTrue(len(dec.unused_data) == 0, "found trailing data") else: fobj = open(tmpname, "rb") data = fobj.read() fobj.close() - self.assert_(data.count(b"\0") == tarfile.RECORDSIZE, + self.assertTrue(data.count(b"\0") == tarfile.RECORDSIZE, "incorrect zero padding") @@ -724,14 +724,14 @@ class GNUWriteTest(unittest.TestCase): v1 = self._calc_size(name, link) v2 = tar.offset - self.assert_(v1 == v2, "GNU longname/longlink creation failed") + self.assertTrue(v1 == v2, "GNU longname/longlink creation failed") tar.close() tar = tarfile.open(tmpname) member = tar.next() - self.failIf(member is None, "unable to read longname member") - self.assert_(tarinfo.name == member.name and \ + self.assertFalse(member is None, "unable to read longname member") + self.assertTrue(tarinfo.name == member.name and \ tarinfo.linkname == member.linkname, \ "unable to read longname member") @@ -791,18 +791,18 @@ class HardlinkTest(unittest.TestCase): # The same name will be added as a REGTYPE every # time regardless of st_nlink. tarinfo = self.tar.gettarinfo(self.foo) - self.assert_(tarinfo.type == tarfile.REGTYPE, + self.assertTrue(tarinfo.type == tarfile.REGTYPE, "add file as regular failed") def test_add_hardlink(self): tarinfo = self.tar.gettarinfo(self.bar) - self.assert_(tarinfo.type == tarfile.LNKTYPE, + self.assertTrue(tarinfo.type == tarfile.LNKTYPE, "add file as hardlink failed") def test_dereference_hardlink(self): self.tar.dereference = True tarinfo = self.tar.gettarinfo(self.bar) - self.assert_(tarinfo.type == tarfile.REGTYPE, + self.assertTrue(tarinfo.type == tarfile.REGTYPE, "dereferencing hardlink failed") @@ -822,10 +822,10 @@ class PaxWriteTest(GNUWriteTest): tar = tarfile.open(tmpname) if link: l = tar.getmembers()[0].linkname - self.assert_(link == l, "PAX longlink creation failed") + self.assertTrue(link == l, "PAX longlink creation failed") else: n = tar.getmembers()[0].name - self.assert_(name == n, "PAX longname creation failed") + self.assertTrue(name == n, "PAX longname creation failed") def test_pax_global_header(self): pax_headers = { @@ -847,8 +847,8 @@ class PaxWriteTest(GNUWriteTest): # Test if all the fields are strings. for key, val in tar.pax_headers.items(): - self.assert_(type(key) is not bytes) - self.assert_(type(val) is not bytes) + self.assertTrue(type(key) is not bytes) + self.assertTrue(type(val) is not bytes) if key in tarfile.PAX_NUMBER_FIELDS: try: tarfile.PAX_NUMBER_FIELDS[key](val) @@ -916,10 +916,10 @@ class UstarUnicodeTest(unittest.TestCase): def test_unicode_argument(self): tar = tarfile.open(tarname, "r", encoding="iso8859-1", errors="strict") for t in tar: - self.assert_(type(t.name) is str) - self.assert_(type(t.linkname) is str) - self.assert_(type(t.uname) is str) - self.assert_(type(t.gname) is str) + self.assertTrue(type(t.name) is str) + self.assertTrue(type(t.linkname) is str) + self.assertTrue(type(t.uname) is str) + self.assertTrue(type(t.gname) is str) tar.close() def test_uname_unicode(self): diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index 69b2e6c..a1bafc2 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -59,7 +59,7 @@ class TC(unittest.TestCase): "file '%s' does not end with '%s'" % (nbase, suf)) nbase = nbase[len(pre):len(nbase)-len(suf)] - self.assert_(self.str_check.match(nbase), + self.assertTrue(self.str_check.match(nbase), "random string '%s' does not match /^[a-zA-Z0-9_-]{6}$/" % nbase) @@ -88,7 +88,7 @@ class test_exports(TC): for key in dict: if key[0] != '_' and key not in expected: unexp.append(key) - self.failUnless(len(unexp) == 0, + self.assertTrue(len(unexp) == 0, "unexpected keys: %s" % unexp) test_classes.append(test_exports) @@ -113,7 +113,7 @@ class test__RandomNameSequence(TC): for i in range(TEST_FILES): s = next(r) self.nameCheck(s, '', '', '') - self.failIf(s in dict) + self.assertFalse(s in dict) dict[s] = 1 def supports_iter(self): @@ -140,9 +140,9 @@ class test__candidate_tempdir_list(TC): cand = tempfile._candidate_tempdir_list() - self.failIf(len(cand) == 0) + self.assertFalse(len(cand) == 0) for c in cand: - self.assert_(isinstance(c, str), + self.assertTrue(isinstance(c, str), "%s is not a string" % c) def test_wanted_dirs(self): @@ -160,14 +160,14 @@ class test__candidate_tempdir_list(TC): for envname in 'TMPDIR', 'TEMP', 'TMP': dirname = os.getenv(envname) if not dirname: raise ValueError - self.assert_(dirname in cand) + self.assertTrue(dirname in cand) try: dirname = os.getcwd() except (AttributeError, os.error): dirname = os.curdir - self.assert_(dirname in cand) + self.assertTrue(dirname in cand) # Not practical to try to verify the presence of OS-specific # paths in this list. @@ -184,14 +184,14 @@ class test__get_candidate_names(TC): def test_retval(self): # _get_candidate_names returns a _RandomNameSequence object obj = tempfile._get_candidate_names() - self.assert_(isinstance(obj, tempfile._RandomNameSequence)) + self.assertTrue(isinstance(obj, tempfile._RandomNameSequence)) def test_same_thing(self): # _get_candidate_names always returns the same object a = tempfile._get_candidate_names() b = tempfile._get_candidate_names() - self.assert_(a is b) + self.assertTrue(a is b) test_classes.append(test__get_candidate_names) @@ -300,9 +300,9 @@ class test__mkstemp_inner(TC): decorated = sys.executable retval = os.spawnl(os.P_WAIT, sys.executable, decorated, tester, v, fd) - self.failIf(retval < 0, + self.assertFalse(retval < 0, "child process caught fatal signal %d" % -retval) - self.failIf(retval > 0, "child process reports failure %d"%retval) + self.assertFalse(retval > 0, "child process reports failure %d"%retval) def test_textmode(self): # _mkstemp_inner can create files in text mode @@ -322,8 +322,8 @@ class test_gettempprefix(TC): # gettempprefix returns a nonempty prefix string p = tempfile.gettempprefix() - self.assert_(isinstance(p, str)) - self.assert_(len(p) > 0) + self.assertTrue(isinstance(p, str)) + self.assertTrue(len(p) > 0) def test_usable_template(self): # gettempprefix returns a usable prefix string @@ -354,9 +354,9 @@ class test_gettempdir(TC): # gettempdir returns a directory which exists dir = tempfile.gettempdir() - self.assert_(os.path.isabs(dir) or dir == os.curdir, + self.assertTrue(os.path.isabs(dir) or dir == os.curdir, "%s is not an absolute path" % dir) - self.assert_(os.path.isdir(dir), + self.assertTrue(os.path.isdir(dir), "%s is not a directory" % dir) def test_directory_writable(self): @@ -377,7 +377,7 @@ class test_gettempdir(TC): a = tempfile.gettempdir() b = tempfile.gettempdir() - self.assert_(a is b) + self.assertTrue(a is b) test_classes.append(test_gettempdir) @@ -580,7 +580,7 @@ class test_NamedTemporaryFile(TC): def test_creates_named(self): # NamedTemporaryFile creates files with names f = tempfile.NamedTemporaryFile() - self.failUnless(os.path.exists(f.name), + self.assertTrue(os.path.exists(f.name), "NamedTemporaryFile %s does not exist" % f.name) def test_del_on_close(self): @@ -590,7 +590,7 @@ class test_NamedTemporaryFile(TC): f = tempfile.NamedTemporaryFile(dir=dir) f.write(b'blat') f.close() - self.failIf(os.path.exists(f.name), + self.assertFalse(os.path.exists(f.name), "NamedTemporaryFile %s exists after close" % f.name) finally: os.rmdir(dir) @@ -604,7 +604,7 @@ class test_NamedTemporaryFile(TC): tmp = f.name f.write(b'blat') f.close() - self.failUnless(os.path.exists(f.name), + self.assertTrue(os.path.exists(f.name), "NamedTemporaryFile %s missing after close" % f.name) finally: if tmp is not None: @@ -625,12 +625,12 @@ class test_NamedTemporaryFile(TC): def test_context_manager(self): # A NamedTemporaryFile can be used as a context manager with tempfile.NamedTemporaryFile() as f: - self.failUnless(os.path.exists(f.name)) - self.failIf(os.path.exists(f.name)) + self.assertTrue(os.path.exists(f.name)) + self.assertFalse(os.path.exists(f.name)) def use_closed(): with f: pass - self.failUnlessRaises(ValueError, use_closed) + self.assertRaises(ValueError, use_closed) # How to test the mode and bufsize parameters? @@ -653,21 +653,21 @@ class test_SpooledTemporaryFile(TC): def test_basic(self): # SpooledTemporaryFile can create files f = self.do_create() - self.failIf(f._rolled) + self.assertFalse(f._rolled) f = self.do_create(max_size=100, pre="a", suf=".txt") - self.failIf(f._rolled) + self.assertFalse(f._rolled) def test_del_on_close(self): # A SpooledTemporaryFile is deleted when closed dir = tempfile.mkdtemp() try: f = tempfile.SpooledTemporaryFile(max_size=10, dir=dir) - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write(b'blat ' * 5) - self.failUnless(f._rolled) + self.assertTrue(f._rolled) filename = f.name f.close() - self.failIf(isinstance(filename, str) and os.path.exists(filename), + self.assertFalse(isinstance(filename, str) and os.path.exists(filename), "SpooledTemporaryFile %s exists after close" % filename) finally: os.rmdir(dir) @@ -675,46 +675,46 @@ class test_SpooledTemporaryFile(TC): def test_rewrite_small(self): # A SpooledTemporaryFile can be written to multiple within the max_size f = self.do_create(max_size=30) - self.failIf(f._rolled) + self.assertFalse(f._rolled) for i in range(5): f.seek(0, 0) f.write(b'x' * 20) - self.failIf(f._rolled) + self.assertFalse(f._rolled) def test_write_sequential(self): # A SpooledTemporaryFile should hold exactly max_size bytes, and roll # over afterward f = self.do_create(max_size=30) - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write(b'x' * 20) - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write(b'x' * 10) - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write(b'x') - self.failUnless(f._rolled) + self.assertTrue(f._rolled) def test_sparse(self): # A SpooledTemporaryFile that is written late in the file will extend # when that occurs f = self.do_create(max_size=30) - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.seek(100, 0) - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write(b'x') - self.failUnless(f._rolled) + self.assertTrue(f._rolled) def test_fileno(self): # A SpooledTemporaryFile should roll over to a real file on fileno() f = self.do_create(max_size=30) - self.failIf(f._rolled) - self.failUnless(f.fileno() > 0) - self.failUnless(f._rolled) + self.assertFalse(f._rolled) + self.assertTrue(f.fileno() > 0) + self.assertTrue(f._rolled) def test_multiple_close_before_rollover(self): # A SpooledTemporaryFile can be closed many times without error f = tempfile.SpooledTemporaryFile() f.write(b'abc\n') - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.close() try: f.close() @@ -726,7 +726,7 @@ class test_SpooledTemporaryFile(TC): # A SpooledTemporaryFile can be closed many times without error f = tempfile.SpooledTemporaryFile(max_size=1) f.write(b'abc\n') - self.failUnless(f._rolled) + self.assertTrue(f._rolled) f.close() try: f.close() @@ -768,51 +768,51 @@ class test_SpooledTemporaryFile(TC): f.write("\u039B\r\n") f.seek(0) self.assertEqual(f.read(), "\u039B\r\n") - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write("\u039B" * 20 + "\r\n") f.seek(0) self.assertEqual(f.read(), "\u039B\r\n" + ("\u039B" * 20) + "\r\n") - self.failUnless(f._rolled) + self.assertTrue(f._rolled) def test_context_manager_before_rollover(self): # A SpooledTemporaryFile can be used as a context manager with tempfile.SpooledTemporaryFile(max_size=1) as f: - self.failIf(f._rolled) - self.failIf(f.closed) - self.failUnless(f.closed) + self.assertFalse(f._rolled) + self.assertFalse(f.closed) + self.assertTrue(f.closed) def use_closed(): with f: pass - self.failUnlessRaises(ValueError, use_closed) + self.assertRaises(ValueError, use_closed) def test_context_manager_during_rollover(self): # A SpooledTemporaryFile can be used as a context manager with tempfile.SpooledTemporaryFile(max_size=1) as f: - self.failIf(f._rolled) + self.assertFalse(f._rolled) f.write(b'abc\n') f.flush() - self.failUnless(f._rolled) - self.failIf(f.closed) - self.failUnless(f.closed) + self.assertTrue(f._rolled) + self.assertFalse(f.closed) + self.assertTrue(f.closed) def use_closed(): with f: pass - self.failUnlessRaises(ValueError, use_closed) + self.assertRaises(ValueError, use_closed) def test_context_manager_after_rollover(self): # A SpooledTemporaryFile can be used as a context manager f = tempfile.SpooledTemporaryFile(max_size=1) f.write(b'abc\n') f.flush() - self.failUnless(f._rolled) + self.assertTrue(f._rolled) with f: - self.failIf(f.closed) - self.failUnless(f.closed) + self.assertFalse(f.closed) + self.assertTrue(f.closed) def use_closed(): with f: pass - self.failUnlessRaises(ValueError, use_closed) + self.assertRaises(ValueError, use_closed) test_classes.append(test_SpooledTemporaryFile) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index eabd7f4..c7a2213 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -41,7 +41,7 @@ class TestThread(threading.Thread): self.nrunning.inc() if verbose: print(self.nrunning.get(), 'tasks are running') - self.testcase.assert_(self.nrunning.get() <= 3) + self.testcase.assertTrue(self.nrunning.get() <= 3) time.sleep(delay) if verbose: @@ -49,7 +49,7 @@ class TestThread(threading.Thread): with self.mutex: self.nrunning.dec() - self.testcase.assert_(self.nrunning.get() >= 0) + self.testcase.assertTrue(self.nrunning.get() >= 0) if verbose: print('%s is finished. %d tasks are running' % (self.name, self.nrunning.get())) @@ -74,18 +74,18 @@ class ThreadTests(unittest.TestCase): for i in range(NUMTASKS): t = TestThread(""%i, self, sema, mutex, numrunning) threads.append(t) - self.failUnlessEqual(t.ident, None) - self.assert_(re.match('', repr(t))) + self.assertEqual(t.ident, None) + self.assertTrue(re.match('', repr(t))) t.start() if verbose: print('waiting for all tasks to complete') for t in threads: t.join(NUMTASKS) - self.assert_(not t.is_alive()) - self.failIfEqual(t.ident, 0) + self.assertTrue(not t.is_alive()) + self.assertNotEqual(t.ident, 0) self.assertFalse(t.ident is None) - self.assert_(re.match('', repr(t))) + self.assertTrue(re.match('', repr(t))) if verbose: print('all tasks done') self.assertEqual(numrunning.get(), 0) @@ -143,8 +143,8 @@ class ThreadTests(unittest.TestCase): tid = _thread.start_new_thread(f, (mutex,)) # Wait for the thread to finish. mutex.acquire() - self.assert_(tid in threading._active) - self.assert_(isinstance(threading._active[tid], + self.assertTrue(tid in threading._active) + self.assertTrue(isinstance(threading._active[tid], threading._DummyThread)) del threading._active[tid] @@ -204,7 +204,7 @@ class ThreadTests(unittest.TestCase): self.assertTrue(ret) if verbose: print(" verifying worker hasn't exited") - self.assert_(not t.finished) + self.assertTrue(not t.finished) if verbose: print(" attempting to raise asynch exception in worker") result = set_async_exc(ctypes.c_long(t.id), exception) @@ -212,7 +212,7 @@ class ThreadTests(unittest.TestCase): if verbose: print(" waiting for worker to say it caught the exception") worker_saw_exception.wait(timeout=10) - self.assert_(t.finished) + self.assertTrue(t.finished) if verbose: print(" all OK -- joining worker") if t.finished: @@ -283,8 +283,8 @@ class ThreadTests(unittest.TestCase): sys.settrace(func) """]) - self.failIf(rc == 2, "interpreted was blocked") - self.failUnless(rc == 0, "Unexpected error") + self.assertFalse(rc == 2, "interpreted was blocked") + self.assertTrue(rc == 0, "Unexpected error") def test_enumerate_after_join(self): @@ -371,8 +371,8 @@ class ThreadJoinOnShutdown(unittest.TestCase): rc = p.wait() data = p.stdout.read().decode().replace('\r', '') self.assertEqual(data, "end of main\nend of thread\n") - self.failIf(rc == 2, "interpreter was blocked") - self.failUnless(rc == 0, "Unexpected error") + self.assertFalse(rc == 2, "interpreter was blocked") + self.assertTrue(rc == 0, "Unexpected error") def test_1_join_on_shutdown(self): # The usual case: on exit, wait for a non-daemon thread diff --git a/Lib/test/test_threading_local.py b/Lib/test/test_threading_local.py index 977a38a..7f58e04 100644 --- a/Lib/test/test_threading_local.py +++ b/Lib/test/test_threading_local.py @@ -40,7 +40,7 @@ class ThreadingLocalTest(unittest.TestCase): local.someothervar = None gc.collect() deadlist = [weak for weak in weaklist if weak() is None] - self.assert_(len(deadlist) in (n-1, n), (n, len(deadlist))) + self.assertTrue(len(deadlist) in (n-1, n), (n, len(deadlist))) def test_derived(self): # Issue 3088: if there is a threads switch inside the __init__ diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py index 93d4d36..49a9d17 100644 --- a/Lib/test/test_time.py +++ b/Lib/test/test_time.py @@ -18,9 +18,9 @@ class TimeTestCase(unittest.TestCase): time.clock() def test_conversions(self): - self.assert_(time.ctime(self.t) + self.assertTrue(time.ctime(self.t) == time.asctime(time.localtime(self.t))) - self.assert_(int(time.mktime(time.localtime(self.t))) + self.assertTrue(int(time.mktime(time.localtime(self.t))) == int(self.t)) def test_sleep(self): @@ -153,36 +153,36 @@ class TimeTestCase(unittest.TestCase): time.tzset() environ['TZ'] = utc time.tzset() - self.failUnlessEqual( + self.assertEqual( time.gmtime(xmas2002), time.localtime(xmas2002) ) - self.failUnlessEqual(time.daylight, 0) - self.failUnlessEqual(time.timezone, 0) - self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 0) + self.assertEqual(time.daylight, 0) + self.assertEqual(time.timezone, 0) + self.assertEqual(time.localtime(xmas2002).tm_isdst, 0) # Make sure we can switch to US/Eastern environ['TZ'] = eastern time.tzset() - self.failIfEqual(time.gmtime(xmas2002), time.localtime(xmas2002)) - self.failUnlessEqual(time.tzname, ('EST', 'EDT')) - self.failUnlessEqual(len(time.tzname), 2) - self.failUnlessEqual(time.daylight, 1) - self.failUnlessEqual(time.timezone, 18000) - self.failUnlessEqual(time.altzone, 14400) - self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 0) - self.failUnlessEqual(len(time.tzname), 2) + self.assertNotEqual(time.gmtime(xmas2002), time.localtime(xmas2002)) + self.assertEqual(time.tzname, ('EST', 'EDT')) + self.assertEqual(len(time.tzname), 2) + self.assertEqual(time.daylight, 1) + self.assertEqual(time.timezone, 18000) + self.assertEqual(time.altzone, 14400) + self.assertEqual(time.localtime(xmas2002).tm_isdst, 0) + self.assertEqual(len(time.tzname), 2) # Now go to the southern hemisphere. environ['TZ'] = victoria time.tzset() - self.failIfEqual(time.gmtime(xmas2002), time.localtime(xmas2002)) - self.failUnless(time.tzname[0] == 'AEST', str(time.tzname[0])) - self.failUnless(time.tzname[1] == 'AEDT', str(time.tzname[1])) - self.failUnlessEqual(len(time.tzname), 2) - self.failUnlessEqual(time.daylight, 1) - self.failUnlessEqual(time.timezone, -36000) - self.failUnlessEqual(time.altzone, -39600) - self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 1) + self.assertNotEqual(time.gmtime(xmas2002), time.localtime(xmas2002)) + self.assertTrue(time.tzname[0] == 'AEST', str(time.tzname[0])) + self.assertTrue(time.tzname[1] == 'AEDT', str(time.tzname[1])) + self.assertEqual(len(time.tzname), 2) + self.assertEqual(time.daylight, 1) + self.assertEqual(time.timezone, -36000) + self.assertEqual(time.altzone, -39600) + self.assertEqual(time.localtime(xmas2002).tm_isdst, 1) finally: # Repair TZ environment variable in case any other tests @@ -214,14 +214,14 @@ class TimeTestCase(unittest.TestCase): gt1 = time.gmtime(None) t0 = time.mktime(gt0) t1 = time.mktime(gt1) - self.assert_(0 <= (t1-t0) < 0.2) + self.assertTrue(0 <= (t1-t0) < 0.2) def test_localtime_without_arg(self): lt0 = time.localtime() lt1 = time.localtime(None) t0 = time.mktime(lt0) t1 = time.mktime(lt1) - self.assert_(0 <= (t1-t0) < 0.2) + self.assertTrue(0 <= (t1-t0) < 0.2) class TestLocale(unittest.TestCase): def setUp(self): diff --git a/Lib/test/test_timeout.py b/Lib/test/test_timeout.py index 264704e..e8e2a6f 100644 --- a/Lib/test/test_timeout.py +++ b/Lib/test/test_timeout.py @@ -119,11 +119,11 @@ class TimeoutTestCase(unittest.TestCase): self.sock.settimeout(_timeout) _t1 = time.time() - self.failUnlessRaises(socket.error, self.sock.connect, addr) + self.assertRaises(socket.error, self.sock.connect, addr) _t2 = time.time() _delta = abs(_t1 - _t2) - self.assert_(_delta < _timeout + self.fuzz, + self.assertTrue(_delta < _timeout + self.fuzz, "timeout (%g) is more than %g seconds more than expected (%g)" %(_delta, self.fuzz, _timeout)) @@ -134,11 +134,11 @@ class TimeoutTestCase(unittest.TestCase): self.sock.settimeout(_timeout) _t1 = time.time() - self.failUnlessRaises(socket.error, self.sock.recv, 1024) + self.assertRaises(socket.error, self.sock.recv, 1024) _t2 = time.time() _delta = abs(_t1 - _t2) - self.assert_(_delta < _timeout + self.fuzz, + self.assertTrue(_delta < _timeout + self.fuzz, "timeout (%g) is %g seconds more than expected (%g)" %(_delta, self.fuzz, _timeout)) @@ -150,11 +150,11 @@ class TimeoutTestCase(unittest.TestCase): self.sock.listen(5) _t1 = time.time() - self.failUnlessRaises(socket.error, self.sock.accept) + self.assertRaises(socket.error, self.sock.accept) _t2 = time.time() _delta = abs(_t1 - _t2) - self.assert_(_delta < _timeout + self.fuzz, + self.assertTrue(_delta < _timeout + self.fuzz, "timeout (%g) is %g seconds more than expected (%g)" %(_delta, self.fuzz, _timeout)) @@ -166,11 +166,11 @@ class TimeoutTestCase(unittest.TestCase): self.sock.bind(self.addr_local) _t1 = time.time() - self.failUnlessRaises(socket.error, self.sock.recvfrom, 8192) + self.assertRaises(socket.error, self.sock.recvfrom, 8192) _t2 = time.time() _delta = abs(_t1 - _t2) - self.assert_(_delta < _timeout + self.fuzz, + self.assertTrue(_delta < _timeout + self.fuzz, "timeout (%g) is %g seconds more than expected (%g)" %(_delta, self.fuzz, _timeout)) diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py index 75a7a80..f395ed4 100644 --- a/Lib/test/test_tokenize.py +++ b/Lib/test/test_tokenize.py @@ -629,7 +629,7 @@ class TestTokenizerAdheresToPep0263(TestCase): behaviour of the interpreter when it encounters a similar condition. """ f = 'tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt' - self.failUnlessRaises(SyntaxError, self._testFile, f) + self.assertRaises(SyntaxError, self._testFile, f) def test_no_coding_cookie_and_utf8_bom(self): f = 'tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt' diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index 9033238..2145710 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -40,15 +40,15 @@ class SyntaxTracebackCases(unittest.TestCase): err = self.get_exception_format(self.syntax_error_with_caret, SyntaxError) self.assertEqual(len(err), 4) - self.assert_(err[1].strip() == "return x!") - self.assert_("^" in err[2]) # third line has caret + self.assertTrue(err[1].strip() == "return x!") + self.assertTrue("^" in err[2]) # third line has caret self.assertEqual(err[1].find("!"), err[2].find("^")) # in the right place err = self.get_exception_format(self.syntax_error_with_caret_2, SyntaxError) - self.assert_("^" in err[2]) # third line has caret - self.assert_(err[2].count('\n') == 1) # and no additional newline - self.assert_(err[1].find("+") == err[2].find("^")) # in the right place + self.assertTrue("^" in err[2]) # third line has caret + self.assertTrue(err[2].count('\n') == 1) # and no additional newline + self.assertTrue(err[1].find("+") == err[2].find("^")) # in the right place def test_nocaret(self): if is_jython: @@ -57,14 +57,14 @@ class SyntaxTracebackCases(unittest.TestCase): err = self.get_exception_format(self.syntax_error_without_caret, SyntaxError) self.assertEqual(len(err), 3) - self.assert_(err[1].strip() == "[x for x in x] = x") + self.assertTrue(err[1].strip() == "[x for x in x] = x") def test_bad_indentation(self): err = self.get_exception_format(self.syntax_error_bad_indentation, IndentationError) self.assertEqual(len(err), 4) self.assertEqual(err[1].strip(), "print(2)") - self.assert_("^" in err[2]) + self.assertTrue("^" in err[2]) self.assertEqual(err[1].find(")"), err[2].find("^")) def test_base_exception(self): @@ -131,13 +131,13 @@ class SyntaxTracebackCases(unittest.TestCase): err_line = "raise RuntimeError('{0}')".format(message_ascii) err_msg = "RuntimeError: {0}".format(message_ascii) - self.assert_(("line %s" % lineno) in stdout[1], + self.assertTrue(("line %s" % lineno) in stdout[1], "Invalid line number: {0!r} instead of {1}".format( stdout[1], lineno)) - self.assert_(stdout[2].endswith(err_line), + self.assertTrue(stdout[2].endswith(err_line), "Invalid traceback line: {0!r} instead of {1!r}".format( stdout[2], err_line)) - self.assert_(stdout[3] == err_msg, + self.assertTrue(stdout[3] == err_msg, "Invalid error message: {0!r} instead of {1!r}".format( stdout[3], err_msg)) @@ -177,9 +177,9 @@ class TracebackFormatTests(unittest.TestCase): tb_lines = python_fmt.splitlines() self.assertEquals(len(tb_lines), 3) banner, location, source_line = tb_lines - self.assert_(banner.startswith('Traceback')) - self.assert_(location.startswith(' File')) - self.assert_(source_line.startswith(' raise')) + self.assertTrue(banner.startswith('Traceback')) + self.assertTrue(location.startswith(' File')) + self.assertTrue(source_line.startswith(' raise')) cause_message = ( @@ -209,9 +209,9 @@ class BaseExceptionReportingTests: def check_zero_div(self, msg): lines = msg.splitlines() - self.assert_(lines[-3].startswith(' File')) - self.assert_('1/0 # In zero_div' in lines[-2], lines[-2]) - self.assert_(lines[-1].startswith('ZeroDivisionError'), lines[-1]) + self.assertTrue(lines[-3].startswith(' File')) + self.assertTrue('1/0 # In zero_div' in lines[-2], lines[-2]) + self.assertTrue(lines[-1].startswith('ZeroDivisionError'), lines[-1]) def test_simple(self): try: @@ -220,10 +220,10 @@ class BaseExceptionReportingTests: e = _ lines = self.get_report(e).splitlines() self.assertEquals(len(lines), 4) - self.assert_(lines[0].startswith('Traceback')) - self.assert_(lines[1].startswith(' File')) - self.assert_('1/0 # Marker' in lines[2]) - self.assert_(lines[3].startswith('ZeroDivisionError')) + self.assertTrue(lines[0].startswith('Traceback')) + self.assertTrue(lines[1].startswith(' File')) + self.assertTrue('1/0 # Marker' in lines[2]) + self.assertTrue(lines[3].startswith('ZeroDivisionError')) def test_cause(self): def inner_raise(): @@ -237,7 +237,7 @@ class BaseExceptionReportingTests: self.assertEquals(len(blocks), 3) self.assertEquals(blocks[1], cause_message) self.check_zero_div(blocks[0]) - self.assert_('inner_raise() # Marker' in blocks[2]) + self.assertTrue('inner_raise() # Marker' in blocks[2]) def test_context(self): def inner_raise(): @@ -251,7 +251,7 @@ class BaseExceptionReportingTests: self.assertEquals(len(blocks), 3) self.assertEquals(blocks[1], context_message) self.check_zero_div(blocks[0]) - self.assert_('inner_raise() # Marker' in blocks[2]) + self.assertTrue('inner_raise() # Marker' in blocks[2]) def test_cause_recursive(self): def inner_raise(): @@ -269,11 +269,11 @@ class BaseExceptionReportingTests: self.assertEquals(len(blocks), 3) self.assertEquals(blocks[1], cause_message) # The first block is the KeyError raised from the ZeroDivisionError - self.assert_('raise KeyError from e' in blocks[0]) - self.assert_('1/0' not in blocks[0]) + self.assertTrue('raise KeyError from e' in blocks[0]) + self.assertTrue('1/0' not in blocks[0]) # The second block (apart from the boundary) is the ZeroDivisionError # re-raised from the KeyError - self.assert_('inner_raise() # Marker' in blocks[2]) + self.assertTrue('inner_raise() # Marker' in blocks[2]) self.check_zero_div(blocks[2]) diff --git a/Lib/test/test_tuple.py b/Lib/test/test_tuple.py index f82af31..c37adc2 100644 --- a/Lib/test/test_tuple.py +++ b/Lib/test/test_tuple.py @@ -11,7 +11,7 @@ class TupleTest(seq_tests.CommonTest): self.assertEqual(tuple(), ()) t0_3 = (0, 1, 2, 3) t0_3_bis = tuple(t0_3) - self.assert_(t0_3 is t0_3_bis) + self.assertTrue(t0_3 is t0_3_bis) self.assertEqual(tuple([]), ()) self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3)) self.assertEqual(tuple(''), ()) @@ -19,8 +19,8 @@ class TupleTest(seq_tests.CommonTest): def test_truth(self): super().test_truth() - self.assert_(not ()) - self.assert_((42, )) + self.assertTrue(not ()) + self.assertTrue((42, )) def test_len(self): super().test_len() @@ -33,14 +33,14 @@ class TupleTest(seq_tests.CommonTest): u = (0, 1) u2 = u u += (2, 3) - self.assert_(u is not u2) + self.assertTrue(u is not u2) def test_imul(self): super().test_imul() u = (0, 1) u2 = u u *= 3 - self.assert_(u is not u2) + self.assertTrue(u is not u2) def test_tupleresizebug(self): # Check that a specific bug in _PyTuple_Resize() is squashed. @@ -71,7 +71,7 @@ class TupleTest(seq_tests.CommonTest): inps = base + [(i, j) for i in base for j in xp] + \ [(i, j) for i in xp for j in base] + xp + list(zip(base)) collisions = len(inps) - len(set(map(hash, inps))) - self.assert_(collisions <= 15) + self.assertTrue(collisions <= 15) def test_repr(self): l0 = tuple() diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index b85d337..5f5a952 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -549,13 +549,13 @@ class TypesTests(unittest.TestCase): result = f.__format__(fmt) self.assertEqual(len(result), 98) self.assertEqual(result[-7], '.') - self.assert_(result[:12] in ('112340000000', '112339999999')) + self.assertTrue(result[:12] in ('112340000000', '112339999999')) f = 1.1234e200 for fmt in 'f', 'F': result = f.__format__(fmt) self.assertEqual(len(result), 208) self.assertEqual(result[-7], '.') - self.assert_(result[:12] in ('112340000000', '112339999999')) + self.assertTrue(result[:12] in ('112340000000', '112339999999')) test( 1.0, 'e', '1.000000e+00') diff --git a/Lib/test/test_unary.py b/Lib/test/test_unary.py index 7dd651e..b835564 100644 --- a/Lib/test/test_unary.py +++ b/Lib/test/test_unary.py @@ -6,12 +6,12 @@ from test.support import run_unittest class UnaryOpTestCase(unittest.TestCase): def test_negative(self): - self.assert_(-2 == 0 - 2) + self.assertTrue(-2 == 0 - 2) self.assertEqual(-0, 0) self.assertEqual(--2, 2) - self.assert_(-2 == 0 - 2) - self.assert_(-2.0 == 0 - 2.0) - self.assert_(-2j == 0 - 2j) + self.assertTrue(-2 == 0 - 2) + self.assertTrue(-2.0 == 0 - 2.0) + self.assertTrue(-2j == 0 - 2j) def test_positive(self): self.assertEqual(+2, 2) @@ -22,16 +22,16 @@ class UnaryOpTestCase(unittest.TestCase): self.assertEqual(+2j, 2j) def test_invert(self): - self.assert_(-2 == 0 - 2) + self.assertTrue(-2 == 0 - 2) self.assertEqual(-0, 0) self.assertEqual(--2, 2) - self.assert_(-2 == 0 - 2) + self.assertTrue(-2 == 0 - 2) def test_no_overflow(self): nines = "9" * 32 - self.assert_(eval("+" + nines) == 10**32-1) - self.assert_(eval("-" + nines) == -(10**32-1)) - self.assert_(eval("~" + nines) == ~(10**32-1)) + self.assertTrue(eval("+" + nines) == 10**32-1) + self.assertTrue(eval("-" + nines) == -(10**32-1)) + self.assertTrue(eval("~" + nines) == ~(10**32-1)) def test_negation_of_exponentiation(self): # Make sure '**' does the right thing; these form a diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 1ff7ee3..7f87b43 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -48,7 +48,7 @@ class UnicodeTest( method = getattr(object, methodname) realresult = method(*args) self.assertEqual(realresult, result) - self.assert_(type(realresult) is type(result)) + self.assertTrue(type(realresult) is type(result)) # if the original is returned make sure that # this doesn't happen with subclasses @@ -60,7 +60,7 @@ class UnicodeTest( method = getattr(object, methodname) realresult = method(*args) self.assertEqual(realresult, result) - self.assert_(object is not realresult) + self.assertTrue(object is not realresult) def test_literals(self): self.assertEqual('\xff', '\u00ff') @@ -294,25 +294,25 @@ class UnicodeTest( self.assertEqual('abc', 'abc') self.assertEqual('abc', 'abc') self.assertEqual('abc', 'abc') - self.assert_('abcd' > 'abc') - self.assert_('abcd' > 'abc') - self.assert_('abcd' > 'abc') - self.assert_('abc' < 'abcd') - self.assert_('abc' < 'abcd') - self.assert_('abc' < 'abcd') + self.assertTrue('abcd' > 'abc') + self.assertTrue('abcd' > 'abc') + self.assertTrue('abcd' > 'abc') + self.assertTrue('abc' < 'abcd') + self.assertTrue('abc' < 'abcd') + self.assertTrue('abc' < 'abcd') if 0: # Move these tests to a Unicode collation module test... # Testing UTF-16 code point order comparisons... # No surrogates, no fixup required. - self.assert_('\u0061' < '\u20ac') + self.assertTrue('\u0061' < '\u20ac') # Non surrogate below surrogate value, no fixup required - self.assert_('\u0061' < '\ud800\udc02') + self.assertTrue('\u0061' < '\ud800\udc02') # Non surrogate above surrogate value, fixup required def test_lecmp(s, s2): - self.assert_(s < s2) + self.assertTrue(s < s2) def test_fixup(s): s2 = '\ud800\udc01' @@ -352,7 +352,7 @@ class UnicodeTest( test_fixup('\uff61') # Surrogates on both sides, no fixup required - self.assert_('\ud800\udc02' < '\ud84d\udc56') + self.assertTrue('\ud800\udc02' < '\ud84d\udc56') def test_islower(self): string_tests.MixinStrUnicodeUserStringTest.test_islower(self) @@ -436,32 +436,32 @@ class UnicodeTest( def test_contains(self): # Testing Unicode contains method - self.assert_('a' in 'abdb') - self.assert_('a' in 'bdab') - self.assert_('a' in 'bdaba') - self.assert_('a' in 'bdba') - self.assert_('a' not in 'bdb') - self.assert_('a' in 'bdba') - self.assert_('a' in ('a',1,None)) - self.assert_('a' in (1,None,'a')) - self.assert_('a' in ('a',1,None)) - self.assert_('a' in (1,None,'a')) - self.assert_('a' not in ('x',1,'y')) - self.assert_('a' not in ('x',1,None)) - self.assert_('abcd' not in 'abcxxxx') - self.assert_('ab' in 'abcd') - self.assert_('ab' in 'abc') - self.assert_('ab' in (1,None,'ab')) - self.assert_('' in 'abc') - self.assert_('' in '') - self.assert_('' in 'abc') - self.assert_('\0' not in 'abc') - self.assert_('\0' in '\0abc') - self.assert_('\0' in 'abc\0') - self.assert_('a' in '\0abc') - self.assert_('asdf' in 'asdf') - self.assert_('asdf' not in 'asd') - self.assert_('asdf' not in '') + self.assertTrue('a' in 'abdb') + self.assertTrue('a' in 'bdab') + self.assertTrue('a' in 'bdaba') + self.assertTrue('a' in 'bdba') + self.assertTrue('a' not in 'bdb') + self.assertTrue('a' in 'bdba') + self.assertTrue('a' in ('a',1,None)) + self.assertTrue('a' in (1,None,'a')) + self.assertTrue('a' in ('a',1,None)) + self.assertTrue('a' in (1,None,'a')) + self.assertTrue('a' not in ('x',1,'y')) + self.assertTrue('a' not in ('x',1,None)) + self.assertTrue('abcd' not in 'abcxxxx') + self.assertTrue('ab' in 'abcd') + self.assertTrue('ab' in 'abc') + self.assertTrue('ab' in (1,None,'ab')) + self.assertTrue('' in 'abc') + self.assertTrue('' in '') + self.assertTrue('' in 'abc') + self.assertTrue('\0' not in 'abc') + self.assertTrue('\0' in '\0abc') + self.assertTrue('\0' in 'abc\0') + self.assertTrue('a' in '\0abc') + self.assertTrue('asdf' in 'asdf') + self.assertTrue('asdf' not in 'asd') + self.assertTrue('asdf' not in '') self.assertRaises(TypeError, "abc".__contains__) diff --git a/Lib/test/test_unicode_file.py b/Lib/test/test_unicode_file.py index fd561f1..367715a 100644 --- a/Lib/test/test_unicode_file.py +++ b/Lib/test/test_unicode_file.py @@ -25,19 +25,19 @@ class TestUnicodeFiles(unittest.TestCase): # Do all the tests we can given only a single filename. The file should # exist. def _do_single(self, filename): - self.failUnless(os.path.exists(filename)) - self.failUnless(os.path.isfile(filename)) - self.failUnless(os.access(filename, os.R_OK)) - self.failUnless(os.path.exists(os.path.abspath(filename))) - self.failUnless(os.path.isfile(os.path.abspath(filename))) - self.failUnless(os.access(os.path.abspath(filename), os.R_OK)) + self.assertTrue(os.path.exists(filename)) + self.assertTrue(os.path.isfile(filename)) + self.assertTrue(os.access(filename, os.R_OK)) + self.assertTrue(os.path.exists(os.path.abspath(filename))) + self.assertTrue(os.path.isfile(os.path.abspath(filename))) + self.assertTrue(os.access(os.path.abspath(filename), os.R_OK)) os.chmod(filename, 0o777) os.utime(filename, None) os.utime(filename, (time.time(), time.time())) # Copy/rename etc tests using the same filename self._do_copyish(filename, filename) # Filename should appear in glob output - self.failUnless( + self.assertTrue( os.path.abspath(filename)==os.path.abspath(glob.glob(filename)[0])) # basename should appear in listdir. path, base = os.path.split(os.path.abspath(filename)) @@ -47,7 +47,7 @@ class TestUnicodeFiles(unittest.TestCase): base = unicodedata.normalize("NFD", base) file_list = [unicodedata.normalize("NFD", f) for f in file_list] - self.failUnless(base in file_list) + self.assertTrue(base in file_list) # Do as many "equivalancy' tests as we can - ie, check that although we # have different types for the filename, they refer to the same file. @@ -55,12 +55,12 @@ class TestUnicodeFiles(unittest.TestCase): # Note we only check "filename1 against filename2" - we don't bother # checking "filename2 against 1", as we assume we are called again with # the args reversed. - self.failUnless(type(filename1)!=type(filename2), + self.assertTrue(type(filename1)!=type(filename2), "No point checking equivalent filenames of the same type") # stat and lstat should return the same results. - self.failUnlessEqual(os.stat(filename1), + self.assertEqual(os.stat(filename1), os.stat(filename2)) - self.failUnlessEqual(os.lstat(filename1), + self.assertEqual(os.lstat(filename1), os.lstat(filename2)) # Copy/rename etc tests using equivalent filename self._do_copyish(filename1, filename2) @@ -68,19 +68,19 @@ class TestUnicodeFiles(unittest.TestCase): # Tests that copy, move, etc one file to another. def _do_copyish(self, filename1, filename2): # Should be able to rename the file using either name. - self.failUnless(os.path.isfile(filename1)) # must exist. + self.assertTrue(os.path.isfile(filename1)) # must exist. os.rename(filename1, filename2 + ".new") - self.failUnless(os.path.isfile(filename1+".new")) + self.assertTrue(os.path.isfile(filename1+".new")) os.rename(filename1 + ".new", filename2) - self.failUnless(os.path.isfile(filename2)) + self.assertTrue(os.path.isfile(filename2)) shutil.copy(filename1, filename2 + ".new") os.unlink(filename1 + ".new") # remove using equiv name. # And a couple of moves, one using each name. shutil.move(filename1, filename2 + ".new") - self.failUnless(not os.path.exists(filename2)) + self.assertTrue(not os.path.exists(filename2)) shutil.move(filename1 + ".new", filename2) - self.failUnless(os.path.exists(filename1)) + self.assertTrue(os.path.exists(filename1)) # Note - due to the implementation of shutil.move, # it tries a rename first. This only fails on Windows when on # different file systems - and this test can't ensure that. @@ -107,7 +107,7 @@ class TestUnicodeFiles(unittest.TestCase): cwd_result = unicodedata.normalize("NFD", cwd_result) name_result = unicodedata.normalize("NFD", name_result) - self.failUnlessEqual(os.path.basename(cwd_result),name_result) + self.assertEqual(os.path.basename(cwd_result),name_result) finally: os.chdir(cwd) finally: @@ -123,7 +123,7 @@ class TestUnicodeFiles(unittest.TestCase): self._do_single(filename) finally: os.unlink(filename) - self.failUnless(not os.path.exists(filename)) + self.assertTrue(not os.path.exists(filename)) # and again with os.open. f = os.open(filename, os.O_CREAT) os.close(f) @@ -134,7 +134,7 @@ class TestUnicodeFiles(unittest.TestCase): def _test_equivalent(self, filename1, filename2): remove_if_exists(filename1) - self.failUnless(not os.path.exists(filename2)) + self.assertTrue(not os.path.exists(filename2)) f = file(filename1, "w") f.close() try: diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index 285a352..a658d7b 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -232,7 +232,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest): if dec != -1: self.assertEqual(dec, self.db.numeric(c)) count += 1 - self.assert_(count >= 10) # should have tested at least the ASCII digits + self.assertTrue(count >= 10) # should have tested at least the ASCII digits def test_digit_numeric_consistent(self): # Test that digit and numeric are consistent, @@ -245,7 +245,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest): if dec != -1: self.assertEqual(dec, self.db.numeric(c)) count += 1 - self.assert_(count >= 10) # should have tested at least the ASCII digits + self.assertTrue(count >= 10) # should have tested at least the ASCII digits def test_bug_1704793(self): self.assertEquals(self.db.lookup("GOTHIC LETTER FAIHU"), '\U00010346') @@ -253,13 +253,13 @@ class UnicodeMiscTest(UnicodeDatabaseTest): def test_ucd_510(self): import unicodedata # In UCD 5.1.0, a mirrored property changed wrt. UCD 3.2.0 - self.assert_(unicodedata.mirrored("\u0f3a")) - self.assert_(not unicodedata.ucd_3_2_0.mirrored("\u0f3a")) + self.assertTrue(unicodedata.mirrored("\u0f3a")) + self.assertTrue(not unicodedata.ucd_3_2_0.mirrored("\u0f3a")) # Also, we now have two ways of representing # the upper-case mapping: as delta, or as absolute value - self.assert_("a".upper()=='A') - self.assert_("\u1d79".upper()=='\ua77d') - self.assert_(".".upper()=='.') + self.assertTrue("a".upper()=='A') + self.assertTrue("\u1d79".upper()=='\ua77d') + self.assertTrue(".".upper()=='.') def test_bug_5828(self): self.assertEqual("\u1d79".lower(), "\u1d79") diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index ba742af..cae3619 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -63,7 +63,7 @@ class urlopen_FileTests(unittest.TestCase): # Make sure object returned by urlopen() has the specified methods for attr in ("read", "readline", "readlines", "fileno", "close", "info", "geturl", "getcode", "__iter__"): - self.assert_(hasattr(self.returned_obj, attr), + self.assertTrue(hasattr(self.returned_obj, attr), "object returned by urlopen() lacks %s attribute" % attr) @@ -85,7 +85,7 @@ class urlopen_FileTests(unittest.TestCase): def test_fileno(self): file_num = self.returned_obj.fileno() - self.assert_(isinstance(file_num, int), + self.assertTrue(isinstance(file_num, int), "fileno() did not return an int") self.assertEqual(os.read(file_num, len(self.text)), self.text, "Reading on the file descriptor returned by fileno() " @@ -97,7 +97,7 @@ class urlopen_FileTests(unittest.TestCase): self.returned_obj.close() def test_info(self): - self.assert_(isinstance(self.returned_obj.info(), email.message.Message)) + self.assertTrue(isinstance(self.returned_obj.info(), email.message.Message)) def test_geturl(self): self.assertEqual(self.returned_obj.geturl(), self.pathname) @@ -246,7 +246,7 @@ class urlretrieve_FileTests(unittest.TestCase): # a headers value is returned. result = urllib.request.urlretrieve("file:%s" % support.TESTFN) self.assertEqual(result[0], support.TESTFN) - self.assert_(isinstance(result[1], email.message.Message), + self.assertTrue(isinstance(result[1], email.message.Message), "did not get a email.message.Message instance as second " "returned value") @@ -257,7 +257,7 @@ class urlretrieve_FileTests(unittest.TestCase): result = urllib.request.urlretrieve(self.constructLocalFileUrl( support.TESTFN), second_temp) self.assertEqual(second_temp, result[0]) - self.assert_(os.path.exists(second_temp), "copy of the file was not " + self.assertTrue(os.path.exists(second_temp), "copy of the file was not " "made") FILE = open(second_temp, 'rb') try: @@ -271,9 +271,9 @@ class urlretrieve_FileTests(unittest.TestCase): def test_reporthook(self): # Make sure that the reporthook works. def hooktester(count, block_size, total_size, count_holder=[0]): - self.assert_(isinstance(count, int)) - self.assert_(isinstance(block_size, int)) - self.assert_(isinstance(total_size, int)) + self.assertTrue(isinstance(count, int)) + self.assertTrue(isinstance(block_size, int)) + self.assertTrue(isinstance(total_size, int)) self.assertEqual(count, count_holder[0]) count_holder[0] = count_holder[0] + 1 second_temp = "%s.2" % support.TESTFN @@ -727,7 +727,7 @@ class urlencode_Tests(unittest.TestCase): expect_somewhere = ["1st=1", "2nd=2", "3rd=3"] result = urllib.parse.urlencode(given) for expected in expect_somewhere: - self.assert_(expected in result, + self.assertTrue(expected in result, "testing %s: %s not found in %s" % (test_type, expected, result)) self.assertEqual(result.count('&'), 2, @@ -736,7 +736,7 @@ class urlencode_Tests(unittest.TestCase): amp_location = result.index('&') on_amp_left = result[amp_location - 1] on_amp_right = result[amp_location + 1] - self.assert_(on_amp_left.isdigit() and on_amp_right.isdigit(), + self.assertTrue(on_amp_left.isdigit() and on_amp_right.isdigit(), "testing %s: '&' not located in proper place in %s" % (test_type, result)) self.assertEqual(len(result), (5 * 3) + 2, #5 chars per thing and amps @@ -774,7 +774,7 @@ class urlencode_Tests(unittest.TestCase): result = urllib.parse.urlencode(given, True) for value in given["sequence"]: expect = "sequence=%s" % value - self.assert_(expect in result, + self.assertTrue(expect in result, "%s not found in %s" % (expect, result)) self.assertEqual(result.count('&'), 2, "Expected 2 '&'s, got %s" % result.count('&')) @@ -915,7 +915,7 @@ class URLopener_Tests(unittest.TestCase): # def testTimeoutNone(self): # # global default timeout is ignored # import socket -# self.assert_(socket.getdefaulttimeout() is None) +# self.assertTrue(socket.getdefaulttimeout() is None) # socket.setdefaulttimeout(30) # try: # ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, []) @@ -927,7 +927,7 @@ class URLopener_Tests(unittest.TestCase): # def testTimeoutDefault(self): # # global default timeout is used # import socket -# self.assert_(socket.getdefaulttimeout() is None) +# self.assertTrue(socket.getdefaulttimeout() is None) # socket.setdefaulttimeout(30) # try: # ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, []) diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 87d0116..8093f0e 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -519,15 +519,15 @@ class OpenerDirectorTests(unittest.TestCase): # *_request self.assertEqual((handler, name), calls[i]) self.assertEqual(len(args), 1) - self.assert_(isinstance(args[0], Request)) + self.assertTrue(isinstance(args[0], Request)) else: # *_response self.assertEqual((handler, name), calls[i]) self.assertEqual(len(args), 2) - self.assert_(isinstance(args[0], Request)) + self.assertTrue(isinstance(args[0], Request)) # response from opener.open is None, because there's no # handler that defines http_open to handle it - self.assert_(args[1] is None or + self.assertTrue(args[1] is None or isinstance(args[1], MockResponse)) @@ -577,7 +577,7 @@ class HandlerTests(unittest.TestCase): req.timeout = None r = h.ftp_open(req) # ftp authentication not yet implemented by FTPHandler - self.assert_(h.user == h.passwd == "") + self.assertTrue(h.user == h.passwd == "") self.assertEqual(h.host, socket.gethostbyname(host)) self.assertEqual(h.port, port) self.assertEqual(h.dirs, dirs) @@ -671,9 +671,9 @@ class HandlerTests(unittest.TestCase): h.file_open(req) # XXXX remove OSError when bug fixed except (urllib.error.URLError, OSError): - self.assert_(not ftp) + self.assertTrue(not ftp) else: - self.assert_(o.req is req) + self.assertTrue(o.req is req) self.assertEqual(req.type, "ftp") def test_http(self): @@ -754,8 +754,8 @@ class HandlerTests(unittest.TestCase): r = MockResponse(200, "OK", {}, "") newreq = h.do_request_(req) if data is None: # GET - self.assert_("Content-length" not in req.unredirected_hdrs) - self.assert_("Content-type" not in req.unredirected_hdrs) + self.assertTrue("Content-length" not in req.unredirected_hdrs) + self.assertTrue("Content-type" not in req.unredirected_hdrs) else: # POST self.assertEqual(req.unredirected_hdrs["Content-length"], "0") self.assertEqual(req.unredirected_hdrs["Content-type"], @@ -812,19 +812,19 @@ class HandlerTests(unittest.TestCase): # all 2xx are passed through r = MockResponse(200, "OK", {}, "", url) newr = h.http_response(req, r) - self.assert_(r is newr) - self.assert_(not hasattr(o, "proto")) # o.error not called + self.assertTrue(r is newr) + self.assertTrue(not hasattr(o, "proto")) # o.error not called r = MockResponse(202, "Accepted", {}, "", url) newr = h.http_response(req, r) - self.assert_(r is newr) - self.assert_(not hasattr(o, "proto")) # o.error not called + self.assertTrue(r is newr) + self.assertTrue(not hasattr(o, "proto")) # o.error not called r = MockResponse(206, "Partial content", {}, "", url) newr = h.http_response(req, r) - self.assert_(r is newr) - self.assert_(not hasattr(o, "proto")) # o.error not called + self.assertTrue(r is newr) + self.assertTrue(not hasattr(o, "proto")) # o.error not called # anything else calls o.error (and MockOpener returns None, here) r = MockResponse(502, "Bad gateway", {}, "", url) - self.assert_(h.http_response(req, r) is None) + self.assertTrue(h.http_response(req, r) is None) self.assertEqual(o.proto, "http") # o.error called self.assertEqual(o.args, (req, r, 502, "Bad gateway", {})) @@ -836,12 +836,12 @@ class HandlerTests(unittest.TestCase): req = Request("http://example.com/") r = MockResponse(200, "OK", {}, "") newreq = h.http_request(req) - self.assert_(cj.ach_req is req is newreq) + self.assertTrue(cj.ach_req is req is newreq) self.assertEquals(req.get_origin_req_host(), "example.com") - self.assert_(not req.is_unverifiable()) + self.assertTrue(not req.is_unverifiable()) newr = h.http_response(req, r) - self.assert_(cj.ec_req is req) - self.assert_(cj.ec_r is r is newr) + self.assertTrue(cj.ec_req is req) + self.assertTrue(cj.ec_r is r is newr) def test_redirect(self): from_url = "http://example.com/a.html" @@ -864,12 +864,12 @@ class HandlerTests(unittest.TestCase): MockHeaders({"location": to_url})) except urllib.error.HTTPError: # 307 in response to POST requires user OK - self.assert_(code == 307 and data is not None) + self.assertTrue(code == 307 and data is not None) self.assertEqual(o.req.get_full_url(), to_url) try: self.assertEqual(o.req.get_method(), "GET") except AttributeError: - self.assert_(not o.req.has_data()) + self.assertTrue(not o.req.has_data()) # now it's a GET, there should not be headers regarding content # (possibly dragged from before being a POST) @@ -879,8 +879,8 @@ class HandlerTests(unittest.TestCase): self.assertEqual(o.req.headers["Nonsense"], "viking=withhold") - self.assert_("Spam" not in o.req.headers) - self.assert_("Spam" not in o.req.unredirected_hdrs) + self.assertTrue("Spam" not in o.req.headers) + self.assertTrue("Spam" not in o.req.unredirected_hdrs) # loop detection req = Request(from_url) @@ -928,7 +928,7 @@ class HandlerTests(unittest.TestCase): cp = urllib.request.HTTPCookieProcessor(cj) o = build_test_opener(hh, hdeh, hrh, cp) o.open("http://www.example.com/") - self.assert_(not hh.req.has_header("Cookie")) + self.assertTrue(not hh.req.has_header("Cookie")) def test_proxy(self): o = OpenerDirector() @@ -1128,7 +1128,7 @@ class MiscTests(unittest.TestCase): if h.__class__ == handler_class: break else: - self.assert_(False) + self.assertTrue(False) class RequestTests(unittest.TestCase): @@ -1143,10 +1143,10 @@ class RequestTests(unittest.TestCase): self.assertEqual("GET", self.get.get_method()) def test_add_data(self): - self.assert_(not self.get.has_data()) + self.assertTrue(not self.get.has_data()) self.assertEqual("GET", self.get.get_method()) self.get.add_data("spam") - self.assert_(self.get.has_data()) + self.assertTrue(self.get.has_data()) self.assertEqual("POST", self.get.get_method()) def test_get_full_url(self): @@ -1169,9 +1169,9 @@ class RequestTests(unittest.TestCase): self.assertEqual("www.python.org", req.get_host()) def test_proxy(self): - self.assert_(not self.get.has_proxy()) + self.assertTrue(not self.get.has_proxy()) self.get.set_proxy("www.perl.org", "http") - self.assert_(self.get.has_proxy()) + self.assertTrue(self.get.has_proxy()) self.assertEqual("www.python.org", self.get.get_origin_req_host()) self.assertEqual("www.perl.org", self.get.get_host()) diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py index 8641c4b..43485c2 100644 --- a/Lib/test/test_urllib2_localnet.py +++ b/Lib/test/test_urllib2_localnet.py @@ -438,10 +438,10 @@ class TestUrlopen(unittest.TestCase): handler = self.start_server() open_url = urllib.request.urlopen("http://localhost:%s" % handler.port) for attr in ("read", "close", "info", "geturl"): - self.assert_(hasattr(open_url, attr), "object returned from " + self.assertTrue(hasattr(open_url, attr), "object returned from " "urlopen lacks the %s attribute" % attr) try: - self.assert_(open_url.read(), "calling 'read' failed") + self.assertTrue(open_url.read(), "calling 'read' failed") finally: open_url.close() @@ -451,7 +451,7 @@ class TestUrlopen(unittest.TestCase): open_url = urllib.request.urlopen( "http://localhost:%s" % handler.port) info_obj = open_url.info() - self.assert_(isinstance(info_obj, email.message.Message), + self.assertTrue(isinstance(info_obj, email.message.Message), "object returned by 'info' is not an instance of " "email.message.Message") self.assertEqual(info_obj.get_content_subtype(), "plain") diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py index dc2d99d..59a73c9 100644 --- a/Lib/test/test_urllib2net.py +++ b/Lib/test/test_urllib2net.py @@ -82,9 +82,9 @@ class CloseSocketTest(unittest.TestCase): response = _urlopen_with_retry("http://www.python.org/") sock = response.fp - self.assert_(not sock.closed) + self.assertTrue(not sock.closed) response.close() - self.assert_(sock.closed) + self.assertTrue(sock.closed) class OtherNetworkTests(unittest.TestCase): def setUp(self): @@ -172,7 +172,7 @@ class OtherNetworkTests(unittest.TestCase): if expected_err: msg = ("Didn't get expected error(s) %s for %s %s, got %s: %s" % (expected_err, url, req, type(err), err)) - self.assert_(isinstance(err, expected_err), msg) + self.assertTrue(isinstance(err, expected_err), msg) else: with support.time_out, \ support.socket_peer_reset, \ diff --git a/Lib/test/test_urllibnet.py b/Lib/test/test_urllibnet.py index e2c8af3..63e061a 100644 --- a/Lib/test/test_urllibnet.py +++ b/Lib/test/test_urllibnet.py @@ -62,10 +62,10 @@ class urlopenNetworkTests(unittest.TestCase): open_url = self.urlopen("http://www.python.org/") for attr in ("read", "readline", "readlines", "fileno", "close", "info", "geturl"): - self.assert_(hasattr(open_url, attr), "object returned from " + self.assertTrue(hasattr(open_url, attr), "object returned from " "urlopen lacks the %s attribute" % attr) try: - self.assert_(open_url.read(), "calling 'read' failed") + self.assertTrue(open_url.read(), "calling 'read' failed") finally: open_url.close() @@ -73,9 +73,9 @@ class urlopenNetworkTests(unittest.TestCase): # Test both readline and readlines. open_url = self.urlopen("http://www.python.org/") try: - self.assert_(isinstance(open_url.readline(), bytes), + self.assertTrue(isinstance(open_url.readline(), bytes), "readline did not return bytes") - self.assert_(isinstance(open_url.readlines(), list), + self.assertTrue(isinstance(open_url.readlines(), list), "readlines did not return a list") finally: open_url.close() @@ -87,7 +87,7 @@ class urlopenNetworkTests(unittest.TestCase): info_obj = open_url.info() finally: open_url.close() - self.assert_(isinstance(info_obj, email.message.Message), + self.assertTrue(isinstance(info_obj, email.message.Message), "object returned by 'info' is not an instance of " "email.message.Message") self.assertEqual(info_obj.get_content_subtype(), "html") @@ -122,7 +122,7 @@ class urlopenNetworkTests(unittest.TestCase): fd = open_url.fileno() FILE = os.fdopen(fd, encoding='utf-8') try: - self.assert_(FILE.read(), "reading from file created using fd " + self.assertTrue(FILE.read(), "reading from file created using fd " "returned by fileno failed") finally: FILE.close() @@ -150,11 +150,11 @@ class urlretrieveNetworkTests(unittest.TestCase): def test_basic(self): # Test basic functionality. file_location,info = self.urlretrieve("http://www.python.org/") - self.assert_(os.path.exists(file_location), "file location returned by" + self.assertTrue(os.path.exists(file_location), "file location returned by" " urlretrieve is not a valid path") FILE = open(file_location, encoding='utf-8') try: - self.assert_(FILE.read(), "reading from the file location returned" + self.assertTrue(FILE.read(), "reading from the file location returned" " by urlretrieve failed") finally: FILE.close() @@ -165,10 +165,10 @@ class urlretrieveNetworkTests(unittest.TestCase): file_location,info = self.urlretrieve("http://www.python.org/", support.TESTFN) self.assertEqual(file_location, support.TESTFN) - self.assert_(os.path.exists(file_location)) + self.assertTrue(os.path.exists(file_location)) FILE = open(file_location, encoding='utf-8') try: - self.assert_(FILE.read(), "reading from temporary file failed") + self.assertTrue(FILE.read(), "reading from temporary file failed") finally: FILE.close() os.unlink(file_location) @@ -177,7 +177,7 @@ class urlretrieveNetworkTests(unittest.TestCase): # Make sure header returned as 2nd value from urlretrieve is good. file_location, header = self.urlretrieve("http://www.python.org/") os.unlink(file_location) - self.assert_(isinstance(header, email.message.Message), + self.assertTrue(isinstance(header, email.message.Message), "header is not an instance of email.message.Message") diff --git a/Lib/test/test_userdict.py b/Lib/test/test_userdict.py index 5d4a0ff..9d0a8b1 100644 --- a/Lib/test/test_userdict.py +++ b/Lib/test/test_userdict.py @@ -38,9 +38,9 @@ class UserDictTest(mapping_tests.TestHashMappingProtocol): self.assertEqual(collections.UserDict().fromkeys('one two'.split()), d4) self.assertEqual(collections.UserDict.fromkeys('one two'.split(), 1), d5) self.assertEqual(collections.UserDict().fromkeys('one two'.split(), 1), d5) - self.assert_(u1.fromkeys('one two'.split()) is not u1) - self.assert_(isinstance(u1.fromkeys('one two'.split()), collections.UserDict)) - self.assert_(isinstance(u2.fromkeys('one two'.split()), collections.UserDict)) + self.assertTrue(u1.fromkeys('one two'.split()) is not u1) + self.assertTrue(isinstance(u1.fromkeys('one two'.split()), collections.UserDict)) + self.assertTrue(isinstance(u2.fromkeys('one two'.split()), collections.UserDict)) # Test __repr__ self.assertEqual(str(u0), str(d0)) @@ -95,7 +95,7 @@ class UserDictTest(mapping_tests.TestHashMappingProtocol): # Test "in". for i in u2.keys(): - self.assert_(i in u2) + self.assertTrue(i in u2) self.assertEqual(i in u1, i in d1) self.assertEqual(i in u0, i in d0) @@ -122,7 +122,7 @@ class UserDictTest(mapping_tests.TestHashMappingProtocol): # Test setdefault t = collections.UserDict() self.assertEqual(t.setdefault("x", 42), 42) - self.assert_("x" in t) + self.assertTrue("x" in t) self.assertEqual(t.setdefault("x", 23), 42) # Test pop @@ -152,8 +152,8 @@ class UserDictTest(mapping_tests.TestHashMappingProtocol): d = D({1: 2, 3: 4}) self.assertEqual(d[1], 2) self.assertEqual(d[3], 4) - self.assert_(2 not in d) - self.assert_(2 not in d.keys()) + self.assertTrue(2 not in d) + self.assertTrue(2 not in d.keys()) self.assertEqual(d[2], 42) class E(collections.UserDict): def __missing__(self, key): diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index cf9ea84..b749abc 100644 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -293,8 +293,8 @@ class TestUUID(TestCase): self.assertEqual(universal_local_bit, 0, message) self.assertNotEqual(node, 0, message) self.assertNotEqual(node, 0xffffffffffff, message) - self.assert_(0 <= node, message) - self.assert_(node < (1 << 48), message) + self.assertTrue(0 <= node, message) + self.assertTrue(node < (1 << 48), message) TestUUID.source2node[source] = node if TestUUID.last_node: @@ -335,8 +335,8 @@ class TestUUID(TestCase): def test_random_getnode(self): node = uuid._random_getnode() - self.assert_(0 <= node) - self.assert_(node < (1 <<48)) + self.assertTrue(0 <= node) + self.assertTrue(node < (1 <<48)) def test_unixdll_getnode(self): import sys diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py index 292c018..7393d25 100644 --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -83,9 +83,9 @@ class FilterTests(object): self.module.filterwarnings("always", category=UserWarning) message = "FilterTests.test_always" self.module.warn(message, UserWarning) - self.assert_(message, w[-1].message) + self.assertTrue(message, w[-1].message) self.module.warn(message, UserWarning) - self.assert_(w[-1].message, message) + self.assertTrue(w[-1].message, message) def test_default(self): with original_warnings.catch_warnings(record=True, @@ -165,7 +165,7 @@ class FilterTests(object): text = 'handle normally' self.module.warn(text) self.assertEqual(str(w[-1].message), text) - self.assert_(w[-1].category is UserWarning) + self.assertTrue(w[-1].category is UserWarning) self.module.filterwarnings("ignore", "", Warning, "", 0) text = 'filtered out' @@ -178,7 +178,7 @@ class FilterTests(object): text = 'nonmatching text' self.module.warn(text) self.assertEqual(str(w[-1].message), text) - self.assert_(w[-1].category is UserWarning) + self.assertTrue(w[-1].category is UserWarning) class CFilterTests(BaseTest, FilterTests): module = c_warnings @@ -198,7 +198,7 @@ class WarnTests(unittest.TestCase): text = 'multi %d' %i # Different text on each call. self.module.warn(text) self.assertEqual(str(w[-1].message), text) - self.assert_(w[-1].category is UserWarning) + self.assertTrue(w[-1].category is UserWarning) # Issue 3639 def test_warn_nonstandard_types(self): @@ -421,7 +421,7 @@ class _WarningsTests(BaseTest): self.module.resetwarnings() self.module.filterwarnings("once", category=UserWarning) self.module.warn_explicit(message, UserWarning, "file", 42) - self.failUnlessEqual(w[-1].message, message) + self.assertEqual(w[-1].message, message) del w[:] self.module.warn_explicit(message, UserWarning, "file", 42) self.assertEquals(len(w), 0) @@ -429,7 +429,7 @@ class _WarningsTests(BaseTest): self.module.onceregistry = {} __warningregistry__ = {} self.module.warn('onceregistry test') - self.failUnlessEqual(w[-1].message.args, message.args) + self.assertEqual(w[-1].message.args, message.args) # Removal of onceregistry is okay. del w[:] del self.module.onceregistry @@ -483,7 +483,7 @@ class _WarningsTests(BaseTest): with support.captured_output('stderr') as stream: self.module.warn(text) result = stream.getvalue() - self.failUnless(text in result) + self.assertTrue(text in result) def test_showwarning_not_callable(self): with original_warnings.catch_warnings(module=self.module): @@ -504,19 +504,19 @@ class _WarningsTests(BaseTest): with support.captured_output('stderr') as stream: warning_tests.inner(text) result = stream.getvalue() - self.failUnlessEqual(result.count('\n'), 2, + self.assertEqual(result.count('\n'), 2, "Too many newlines in %r" % result) first_line, second_line = result.split('\n', 1) expected_file = os.path.splitext(warning_tests.__file__)[0] + '.py' first_line_parts = first_line.rsplit(':', 3) path, line, warning_class, message = first_line_parts line = int(line) - self.failUnlessEqual(expected_file, path) - self.failUnlessEqual(warning_class, ' ' + UserWarning.__name__) - self.failUnlessEqual(message, ' ' + text) + self.assertEqual(expected_file, path) + self.assertEqual(warning_class, ' ' + UserWarning.__name__) + self.assertEqual(message, ' ' + text) expected_line = ' ' + linecache.getline(path, line).strip() + '\n' assert expected_line - self.failUnlessEqual(second_line, expected_line) + self.assertEqual(second_line, expected_line) class WarningsDisplayTests(unittest.TestCase): @@ -533,13 +533,13 @@ class WarningsDisplayTests(unittest.TestCase): format = "%s:%s: %s: %s\n %s\n" expect = format % (file_name, line_num, category.__name__, message, file_line) - self.failUnlessEqual(expect, self.module.formatwarning(message, + self.assertEqual(expect, self.module.formatwarning(message, category, file_name, line_num)) # Test the 'line' argument. file_line += " for the win!" expect = format % (file_name, line_num, category.__name__, message, file_line) - self.failUnlessEqual(expect, self.module.formatwarning(message, + self.assertEqual(expect, self.module.formatwarning(message, category, file_name, line_num, file_line)) def test_showwarning(self): @@ -553,7 +553,7 @@ class WarningsDisplayTests(unittest.TestCase): line_num) self.module.showwarning(message, category, file_name, line_num, file_object) - self.failUnlessEqual(file_object.getvalue(), expect) + self.assertEqual(file_object.getvalue(), expect) # Test 'line' argument. expected_file_line += "for the win!" expect = self.module.formatwarning(message, category, file_name, @@ -561,7 +561,7 @@ class WarningsDisplayTests(unittest.TestCase): file_object = StringIO() self.module.showwarning(message, category, file_name, line_num, file_object, expected_file_line) - self.failUnlessEqual(expect, file_object.getvalue()) + self.assertEqual(expect, file_object.getvalue()) class CWarningsDisplayTests(BaseTest, WarningsDisplayTests): module = c_warnings @@ -581,20 +581,20 @@ class CatchWarningTests(BaseTest): # Ensure both showwarning and filters are restored when recording with wmod.catch_warnings(module=wmod, record=True): wmod.filters = wmod.showwarning = object() - self.assert_(wmod.filters is orig_filters) - self.assert_(wmod.showwarning is orig_showwarning) + self.assertTrue(wmod.filters is orig_filters) + self.assertTrue(wmod.showwarning is orig_showwarning) # Same test, but with recording disabled with wmod.catch_warnings(module=wmod, record=False): wmod.filters = wmod.showwarning = object() - self.assert_(wmod.filters is orig_filters) - self.assert_(wmod.showwarning is orig_showwarning) + self.assertTrue(wmod.filters is orig_filters) + self.assertTrue(wmod.showwarning is orig_showwarning) def test_catch_warnings_recording(self): wmod = self.module # Ensure warnings are recorded when requested with wmod.catch_warnings(module=wmod, record=True) as w: self.assertEqual(w, []) - self.assert_(type(w) is list) + self.assertTrue(type(w) is list) wmod.simplefilter("always") wmod.warn("foo") self.assertEqual(str(w[-1].message), "foo") @@ -607,8 +607,8 @@ class CatchWarningTests(BaseTest): # Ensure warnings are not recorded when not requested orig_showwarning = wmod.showwarning with wmod.catch_warnings(module=wmod, record=False) as w: - self.assert_(w is None) - self.assert_(wmod.showwarning is orig_showwarning) + self.assertTrue(w is None) + self.assertTrue(wmod.showwarning is orig_showwarning) def test_catch_warnings_reentry_guard(self): wmod = self.module @@ -629,17 +629,17 @@ class CatchWarningTests(BaseTest): orig_showwarning = wmod.showwarning # Ensure default behaviour is not to record warnings with wmod.catch_warnings(module=wmod) as w: - self.assert_(w is None) - self.assert_(wmod.showwarning is orig_showwarning) - self.assert_(wmod.filters is not orig_filters) - self.assert_(wmod.filters is orig_filters) + self.assertTrue(w is None) + self.assertTrue(wmod.showwarning is orig_showwarning) + self.assertTrue(wmod.filters is not orig_filters) + self.assertTrue(wmod.filters is orig_filters) if wmod is sys.modules['warnings']: # Ensure the default module is this one with wmod.catch_warnings() as w: - self.assert_(w is None) - self.assert_(wmod.showwarning is orig_showwarning) - self.assert_(wmod.filters is not orig_filters) - self.assert_(wmod.filters is orig_filters) + self.assertTrue(w is None) + self.assertTrue(wmod.showwarning is orig_showwarning) + self.assertTrue(wmod.filters is not orig_filters) + self.assertTrue(wmod.filters is orig_filters) def test_check_warnings(self): # Explicit tests for the test.support convenience wrapper diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py index 049dba2..ffa28a6 100644 --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -65,11 +65,11 @@ class ReferencesTestCase(TestBase): ref1 = weakref.ref(o, self.callback) ref2 = weakref.ref(o, self.callback) del o - self.assert_(ref1() is None, + self.assertTrue(ref1() is None, "expected reference to be invalidated") - self.assert_(ref2() is None, + self.assertTrue(ref2() is None, "expected reference to be invalidated") - self.assert_(self.cbcalled == 2, + self.assertTrue(self.cbcalled == 2, "callback not called the right number of times") def test_multiple_selfref_callbacks(self): @@ -108,10 +108,10 @@ class ReferencesTestCase(TestBase): def check_basic_ref(self, factory): o = factory() ref = weakref.ref(o) - self.assert_(ref() is not None, + self.assertTrue(ref() is not None, "weak reference to live object should be live") o2 = ref() - self.assert_(o is o2, + self.assertTrue(o is o2, "() should return original object if live") def check_basic_callback(self, factory): @@ -119,9 +119,9 @@ class ReferencesTestCase(TestBase): o = factory() ref = weakref.ref(o, self.callback) del o - self.assert_(self.cbcalled == 1, + self.assertTrue(self.cbcalled == 1, "callback did not properly set 'cbcalled'") - self.assert_(ref() is None, + self.assertTrue(ref() is None, "ref2 should be dead after deleting object reference") def test_ref_reuse(self): @@ -131,19 +131,19 @@ class ReferencesTestCase(TestBase): # between these two; it should make no difference proxy = weakref.proxy(o) ref2 = weakref.ref(o) - self.assert_(ref1 is ref2, + self.assertTrue(ref1 is ref2, "reference object w/out callback should be re-used") o = C() proxy = weakref.proxy(o) ref1 = weakref.ref(o) ref2 = weakref.ref(o) - self.assert_(ref1 is ref2, + self.assertTrue(ref1 is ref2, "reference object w/out callback should be re-used") - self.assert_(weakref.getweakrefcount(o) == 2, + self.assertTrue(weakref.getweakrefcount(o) == 2, "wrong weak ref count for object") del proxy - self.assert_(weakref.getweakrefcount(o) == 1, + self.assertTrue(weakref.getweakrefcount(o) == 1, "wrong weak ref count for object after deleting proxy") def test_proxy_reuse(self): @@ -151,7 +151,7 @@ class ReferencesTestCase(TestBase): proxy1 = weakref.proxy(o) ref = weakref.ref(o) proxy2 = weakref.proxy(o) - self.assert_(proxy1 is proxy2, + self.assertTrue(proxy1 is proxy2, "proxy object w/out callback should have been re-used") def test_basic_proxy(self): @@ -160,14 +160,14 @@ class ReferencesTestCase(TestBase): L = collections.UserList() p = weakref.proxy(L) - self.failIf(p, "proxy for empty UserList should be false") + self.assertFalse(p, "proxy for empty UserList should be false") p.append(12) self.assertEqual(len(L), 1) - self.failUnless(p, "proxy for non-empty UserList should be true") + self.assertTrue(p, "proxy for non-empty UserList should be true") p[:] = [2, 3] self.assertEqual(len(L), 2) self.assertEqual(len(p), 2) - self.failUnless(3 in p, + self.assertTrue(3 in p, "proxy didn't support __contains__() properly") p[1] = 5 self.assertEqual(L[1], 5) @@ -221,19 +221,19 @@ class ReferencesTestCase(TestBase): o = Object(1) p1 = makeref(o, None) p2 = makeref(o, None) - self.assert_(p1 is p2, "both callbacks were None in the C API") + self.assertTrue(p1 is p2, "both callbacks were None in the C API") del p1, p2 p1 = makeref(o) p2 = makeref(o, None) - self.assert_(p1 is p2, "callbacks were NULL, None in the C API") + self.assertTrue(p1 is p2, "callbacks were NULL, None in the C API") del p1, p2 p1 = makeref(o) p2 = makeref(o) - self.assert_(p1 is p2, "both callbacks were NULL in the C API") + self.assertTrue(p1 is p2, "both callbacks were NULL in the C API") del p1, p2 p1 = makeref(o, None) p2 = makeref(o) - self.assert_(p1 is p2, "callbacks were None, NULL in the C API") + self.assertTrue(p1 is p2, "callbacks were None, NULL in the C API") def test_callable_proxy(self): o = Callable() @@ -241,13 +241,13 @@ class ReferencesTestCase(TestBase): self.check_proxy(o, ref1) - self.assert_(type(ref1) is weakref.CallableProxyType, + self.assertTrue(type(ref1) is weakref.CallableProxyType, "proxy is not of callable type") ref1('twinkies!') - self.assert_(o.bar == 'twinkies!', + self.assertTrue(o.bar == 'twinkies!', "call through proxy not passed through to original") ref1(x='Splat.') - self.assert_(o.bar == 'Splat.', + self.assertTrue(o.bar == 'Splat.', "call through proxy not passed through to original") # expect due to too few args @@ -258,24 +258,24 @@ class ReferencesTestCase(TestBase): def check_proxy(self, o, proxy): o.foo = 1 - self.assert_(proxy.foo == 1, + self.assertTrue(proxy.foo == 1, "proxy does not reflect attribute addition") o.foo = 2 - self.assert_(proxy.foo == 2, + self.assertTrue(proxy.foo == 2, "proxy does not reflect attribute modification") del o.foo - self.assert_(not hasattr(proxy, 'foo'), + self.assertTrue(not hasattr(proxy, 'foo'), "proxy does not reflect attribute removal") proxy.foo = 1 - self.assert_(o.foo == 1, + self.assertTrue(o.foo == 1, "object does not reflect attribute addition via proxy") proxy.foo = 2 - self.assert_( + self.assertTrue( o.foo == 2, "object does not reflect attribute modification via proxy") del proxy.foo - self.assert_(not hasattr(o, 'foo'), + self.assertTrue(not hasattr(o, 'foo'), "object does not reflect attribute removal via proxy") def test_proxy_deletion(self): @@ -299,21 +299,21 @@ class ReferencesTestCase(TestBase): o = C() ref1 = weakref.ref(o) ref2 = weakref.ref(o, self.callback) - self.assert_(weakref.getweakrefcount(o) == 2, + self.assertTrue(weakref.getweakrefcount(o) == 2, "got wrong number of weak reference objects") proxy1 = weakref.proxy(o) proxy2 = weakref.proxy(o, self.callback) - self.assert_(weakref.getweakrefcount(o) == 4, + self.assertTrue(weakref.getweakrefcount(o) == 4, "got wrong number of weak reference objects") del ref1, ref2, proxy1, proxy2 - self.assert_(weakref.getweakrefcount(o) == 0, + self.assertTrue(weakref.getweakrefcount(o) == 0, "weak reference objects not unlinked from" " referent when discarded.") # assumes ints do not support weakrefs - self.assert_(weakref.getweakrefcount(1) == 0, + self.assertTrue(weakref.getweakrefcount(1) == 0, "got wrong number of weak reference objects for int") def test_getweakrefs(self): @@ -321,22 +321,22 @@ class ReferencesTestCase(TestBase): ref1 = weakref.ref(o, self.callback) ref2 = weakref.ref(o, self.callback) del ref1 - self.assert_(weakref.getweakrefs(o) == [ref2], + self.assertTrue(weakref.getweakrefs(o) == [ref2], "list of refs does not match") o = C() ref1 = weakref.ref(o, self.callback) ref2 = weakref.ref(o, self.callback) del ref2 - self.assert_(weakref.getweakrefs(o) == [ref1], + self.assertTrue(weakref.getweakrefs(o) == [ref1], "list of refs does not match") del ref1 - self.assert_(weakref.getweakrefs(o) == [], + self.assertTrue(weakref.getweakrefs(o) == [], "list of refs not cleared") # assumes ints do not support weakrefs - self.assert_(weakref.getweakrefs(1) == [], + self.assertTrue(weakref.getweakrefs(1) == [], "list of refs does not match for int") def test_newstyle_number_ops(self): @@ -344,8 +344,8 @@ class ReferencesTestCase(TestBase): pass f = F(2.0) p = weakref.proxy(f) - self.assert_(p + 1.0 == 3.0) - self.assert_(1.0 + p == 3.0) # this used to SEGV + self.assertTrue(p + 1.0 == 3.0) + self.assertTrue(1.0 + p == 3.0) # this used to SEGV def test_callbacks_protected(self): # Callbacks protected from already-set exceptions? @@ -598,7 +598,7 @@ class ReferencesTestCase(TestBase): c.wr = weakref.ref(d, callback) # this won't trigger d.wr = weakref.ref(callback, d.cb) # ditto external_wr = weakref.ref(callback, safe_callback) # but this will - self.assert_(external_wr() is callback) + self.assertTrue(external_wr() is callback) # The weakrefs attached to c and d should get cleared, so that # C.cb is never called. But external_wr isn't part of the cyclic @@ -681,12 +681,12 @@ class SubclassableWeakrefTestCase(TestBase): return super().__call__() o = Object("foo") mr = MyRef(o, value=24) - self.assert_(mr() is o) - self.assert_(mr.called) + self.assertTrue(mr() is o) + self.assertTrue(mr.called) self.assertEqual(mr.value, 24) del o - self.assert_(mr() is None) - self.assert_(mr.called) + self.assertTrue(mr() is None) + self.assertTrue(mr.called) def test_subclass_refs_dont_replace_standard_refs(self): class MyRef(weakref.ref): @@ -694,16 +694,16 @@ class SubclassableWeakrefTestCase(TestBase): o = Object(42) r1 = MyRef(o) r2 = weakref.ref(o) - self.assert_(r1 is not r2) + self.assertTrue(r1 is not r2) self.assertEqual(weakref.getweakrefs(o), [r2, r1]) self.assertEqual(weakref.getweakrefcount(o), 2) r3 = MyRef(o) self.assertEqual(weakref.getweakrefcount(o), 3) refs = weakref.getweakrefs(o) self.assertEqual(len(refs), 3) - self.assert_(r2 is refs[0]) - self.assert_(r1 in refs[1:]) - self.assert_(r3 in refs[1:]) + self.assertTrue(r2 is refs[0]) + self.assertTrue(r1 in refs[1:]) + self.assertTrue(r3 in refs[1:]) def test_subclass_refs_dont_conflate_callbacks(self): class MyRef(weakref.ref): @@ -711,10 +711,10 @@ class SubclassableWeakrefTestCase(TestBase): o = Object(42) r1 = MyRef(o, id) r2 = MyRef(o, str) - self.assert_(r1 is not r2) + self.assertTrue(r1 is not r2) refs = weakref.getweakrefs(o) - self.assert_(r1 in refs) - self.assert_(r2 in refs) + self.assertTrue(r1 in refs) + self.assertTrue(r2 in refs) def test_subclass_refs_with_slots(self): class MyRef(weakref.ref): @@ -731,7 +731,7 @@ class SubclassableWeakrefTestCase(TestBase): self.assertEqual(r.slot1, "abc") self.assertEqual(r.slot2, "def") self.assertEqual(r.meth(), "abcdef") - self.failIf(hasattr(r, "__dict__")) + self.assertFalse(hasattr(r, "__dict__")) def test_subclass_refs_with_cycle(self): # Bug #3110 @@ -796,7 +796,7 @@ class MappingTestCase(TestBase): dict, objects = self.make_weak_valued_dict() for o in objects: self.assertEqual(weakref.getweakrefcount(o), 1) - self.assert_(o is dict[o.arg], + self.assertTrue(o is dict[o.arg], "wrong object returned by weak dict!") items1 = list(dict.items()) items2 = list(dict.copy().items()) @@ -825,9 +825,9 @@ class MappingTestCase(TestBase): # dict, objects = self.make_weak_keyed_dict() for o in objects: - self.assert_(weakref.getweakrefcount(o) == 1, + self.assertTrue(weakref.getweakrefcount(o) == 1, "wrong number of weak references to %r!" % o) - self.assert_(o.arg is dict[o], + self.assertTrue(o.arg is dict[o], "wrong object returned by weak dict!") items1 = dict.items() items2 = dict.copy().items() @@ -836,15 +836,15 @@ class MappingTestCase(TestBase): del items1, items2 self.assertEqual(len(dict), self.COUNT) del objects[0] - self.assert_(len(dict) == (self.COUNT - 1), + self.assertTrue(len(dict) == (self.COUNT - 1), "deleting object did not cause dictionary update") del objects, o - self.assert_(len(dict) == 0, + self.assertTrue(len(dict) == 0, "deleting the keys did not clear the dictionary") o = Object(42) dict[o] = "What is the meaning of the universe?" - self.assert_(o in dict) - self.assert_(34 not in dict) + self.assertTrue(o in dict) + self.assertTrue(34 not in dict) def test_weak_keyed_iters(self): dict, objects = self.make_weak_keyed_dict() @@ -856,8 +856,8 @@ class MappingTestCase(TestBase): objects2 = list(objects) for wr in refs: ob = wr() - self.assert_(ob in dict) - self.assert_(ob in dict) + self.assertTrue(ob in dict) + self.assertTrue(ob in dict) self.assertEqual(ob.arg, dict[ob]) objects2.remove(ob) self.assertEqual(len(objects2), 0) @@ -867,8 +867,8 @@ class MappingTestCase(TestBase): self.assertEqual(len(list(dict.keyrefs())), len(objects)) for wr in dict.keyrefs(): ob = wr() - self.assert_(ob in dict) - self.assert_(ob in dict) + self.assertTrue(ob in dict) + self.assertTrue(ob in dict) self.assertEqual(ob.arg, dict[ob]) objects2.remove(ob) self.assertEqual(len(objects2), 0) @@ -968,15 +968,15 @@ class MappingTestCase(TestBase): k, v = weakdict.popitem() self.assertEqual(len(weakdict), 1) if k is key1: - self.assert_(v is value1) + self.assertTrue(v is value1) else: - self.assert_(v is value2) + self.assertTrue(v is value2) k, v = weakdict.popitem() self.assertEqual(len(weakdict), 0) if k is key1: - self.assert_(v is value1) + self.assertTrue(v is value1) else: - self.assert_(v is value2) + self.assertTrue(v is value2) def test_weak_valued_dict_popitem(self): self.check_popitem(weakref.WeakValueDictionary, @@ -987,21 +987,21 @@ class MappingTestCase(TestBase): C(), "value 1", C(), "value 2") def check_setdefault(self, klass, key, value1, value2): - self.assert_(value1 is not value2, + self.assertTrue(value1 is not value2, "invalid test" " -- value parameters must be distinct objects") weakdict = klass() o = weakdict.setdefault(key, value1) - self.assert_(o is value1) - self.assert_(key in weakdict) - self.assert_(weakdict.get(key) is value1) - self.assert_(weakdict[key] is value1) + self.assertTrue(o is value1) + self.assertTrue(key in weakdict) + self.assertTrue(weakdict.get(key) is value1) + self.assertTrue(weakdict[key] is value1) o = weakdict.setdefault(key, value2) - self.assert_(o is value1) - self.assert_(key in weakdict) - self.assert_(weakdict.get(key) is value1) - self.assert_(weakdict[key] is value1) + self.assertTrue(o is value1) + self.assertTrue(key in weakdict) + self.assertTrue(weakdict.get(key) is value1) + self.assertTrue(weakdict[key] is value1) def test_weak_valued_dict_setdefault(self): self.check_setdefault(weakref.WeakValueDictionary, @@ -1020,17 +1020,17 @@ class MappingTestCase(TestBase): weakdict.update(dict) self.assertEqual(len(weakdict), len(dict)) for k in weakdict.keys(): - self.assert_(k in dict, + self.assertTrue(k in dict, "mysterious new key appeared in weak dict") v = dict.get(k) - self.assert_(v is weakdict[k]) - self.assert_(v is weakdict.get(k)) + self.assertTrue(v is weakdict[k]) + self.assertTrue(v is weakdict.get(k)) for k in dict.keys(): - self.assert_(k in weakdict, + self.assertTrue(k in weakdict, "original key disappeared in weak dict") v = dict[k] - self.assert_(v is weakdict[k]) - self.assert_(v is weakdict.get(k)) + self.assertTrue(v is weakdict[k]) + self.assertTrue(v is weakdict.get(k)) def test_weak_valued_dict_update(self): self.check_update(weakref.WeakValueDictionary, @@ -1060,7 +1060,7 @@ class MappingTestCase(TestBase): self.assertEqual(len(d), 2) del d['something'] self.assertEqual(len(d), 1) - self.assert_(list(d.items()) == [('something else', o2)]) + self.assertTrue(list(d.items()) == [('something else', o2)]) def test_weak_keyed_bad_delitem(self): d = weakref.WeakKeyDictionary() diff --git a/Lib/test/test_weakset.py b/Lib/test/test_weakset.py index 4d54576..651efe2 100644 --- a/Lib/test/test_weakset.py +++ b/Lib/test/test_weakset.py @@ -33,7 +33,7 @@ class TestWeakSet(unittest.TestCase): for method in dir(set): if method == 'test_c_api' or method.startswith('_'): continue - self.assert_(method in weaksetmethods, + self.assertTrue(method in weaksetmethods, "WeakSet missing method " + method) def test_new_or_init(self): @@ -49,9 +49,9 @@ class TestWeakSet(unittest.TestCase): for c in self.letters: self.assertEqual(c in self.s, c in self.d) self.assertRaises(TypeError, self.s.__contains__, [[]]) - self.assert_(self.obj in self.fs) + self.assertTrue(self.obj in self.fs) del self.obj - self.assert_(ustr('F') not in self.fs) + self.assertTrue(ustr('F') not in self.fs) def test_union(self): u = self.s.union(self.items2) @@ -81,8 +81,8 @@ class TestWeakSet(unittest.TestCase): self.assertEqual(self.s.intersection(C(self.items2)), x) def test_isdisjoint(self): - self.assert_(self.s.isdisjoint(WeakSet(self.items2))) - self.assert_(not self.s.isdisjoint(WeakSet(self.letters))) + self.assertTrue(self.s.isdisjoint(WeakSet(self.items2))) + self.assertTrue(not self.s.isdisjoint(WeakSet(self.letters))) def test_and(self): i = self.s.intersection(self.items2) @@ -118,19 +118,19 @@ class TestWeakSet(unittest.TestCase): def test_sub_and_super(self): pl, ql, rl = map(lambda s: [ustr(c) for c in s], ['ab', 'abcde', 'def']) p, q, r = map(WeakSet, (pl, ql, rl)) - self.assert_(p < q) - self.assert_(p <= q) - self.assert_(q <= q) - self.assert_(q > p) - self.assert_(q >= p) - self.failIf(q < r) - self.failIf(q <= r) - self.failIf(q > r) - self.failIf(q >= r) - self.assert_(set('a').issubset('abc')) - self.assert_(set('abc').issuperset('a')) - self.failIf(set('a').issubset('cbs')) - self.failIf(set('cbs').issuperset('a')) + self.assertTrue(p < q) + self.assertTrue(p <= q) + self.assertTrue(q <= q) + self.assertTrue(q > p) + self.assertTrue(q >= p) + self.assertFalse(q < r) + self.assertFalse(q <= r) + self.assertFalse(q > r) + self.assertFalse(q >= r) + self.assertTrue(set('a').issubset('abc')) + self.assertTrue(set('abc').issuperset('a')) + self.assertFalse(set('a').issubset('cbs')) + self.assertFalse(set('cbs').issuperset('a')) def test_gc(self): # Create a nest of cycles to exercise overall ref count check @@ -148,7 +148,7 @@ class TestWeakSet(unittest.TestCase): s=H() f=set() f.add(s) - self.assert_(s in f) + self.assertTrue(s in f) f.remove(s) f.add(s) f.discard(s) @@ -183,79 +183,79 @@ class TestWeakSet(unittest.TestCase): def test_add(self): x = ustr('Q') self.s.add(x) - self.assert_(x in self.s) + self.assertTrue(x in self.s) dup = self.s.copy() self.s.add(x) self.assertEqual(self.s, dup) self.assertRaises(TypeError, self.s.add, []) self.fs.add(Foo()) - self.assert_(len(self.fs) == 1) + self.assertTrue(len(self.fs) == 1) self.fs.add(self.obj) - self.assert_(len(self.fs) == 1) + self.assertTrue(len(self.fs) == 1) def test_remove(self): x = ustr('a') self.s.remove(x) - self.assert_(x not in self.s) + self.assertTrue(x not in self.s) self.assertRaises(KeyError, self.s.remove, x) self.assertRaises(TypeError, self.s.remove, []) def test_discard(self): a, q = ustr('a'), ustr('Q') self.s.discard(a) - self.assert_(a not in self.s) + self.assertTrue(a not in self.s) self.s.discard(q) self.assertRaises(TypeError, self.s.discard, []) def test_pop(self): for i in range(len(self.s)): elem = self.s.pop() - self.assert_(elem not in self.s) + self.assertTrue(elem not in self.s) self.assertRaises(KeyError, self.s.pop) def test_update(self): retval = self.s.update(self.items2) self.assertEqual(retval, None) for c in (self.items + self.items2): - self.assert_(c in self.s) + self.assertTrue(c in self.s) self.assertRaises(TypeError, self.s.update, [[]]) def test_update_set(self): self.s.update(set(self.items2)) for c in (self.items + self.items2): - self.assert_(c in self.s) + self.assertTrue(c in self.s) def test_ior(self): self.s |= set(self.items2) for c in (self.items + self.items2): - self.assert_(c in self.s) + self.assertTrue(c in self.s) def test_intersection_update(self): retval = self.s.intersection_update(self.items2) self.assertEqual(retval, None) for c in (self.items + self.items2): if c in self.items2 and c in self.items: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) self.assertRaises(TypeError, self.s.intersection_update, [[]]) def test_iand(self): self.s &= set(self.items2) for c in (self.items + self.items2): if c in self.items2 and c in self.items: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) def test_difference_update(self): retval = self.s.difference_update(self.items2) self.assertEqual(retval, None) for c in (self.items + self.items2): if c in self.items and c not in self.items2: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) self.assertRaises(TypeError, self.s.difference_update, [[]]) self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) @@ -263,27 +263,27 @@ class TestWeakSet(unittest.TestCase): self.s -= set(self.items2) for c in (self.items + self.items2): if c in self.items and c not in self.items2: - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) def test_symmetric_difference_update(self): retval = self.s.symmetric_difference_update(self.items2) self.assertEqual(retval, None) for c in (self.items + self.items2): if (c in self.items) ^ (c in self.items2): - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) self.assertRaises(TypeError, self.s.symmetric_difference_update, [[]]) def test_ixor(self): self.s ^= set(self.items2) for c in (self.items + self.items2): if (c in self.items) ^ (c in self.items2): - self.assert_(c in self.s) + self.assertTrue(c in self.s) else: - self.assert_(c not in self.s) + self.assertTrue(c not in self.s) def test_inplace_on_self(self): t = self.s.copy() diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py index 3b314dd..fd28852 100644 --- a/Lib/test/test_winreg.py +++ b/Lib/test/test_winreg.py @@ -53,7 +53,7 @@ class WinregTests(unittest.TestCase): # Set the default value for this key. SetValue(root_key, test_key_name, REG_SZ, "Default value") key = CreateKey(root_key, test_key_name) - self.assert_(key.handle != 0) + self.assertTrue(key.handle != 0) # Create a sub-key sub_key = CreateKey(key, subkeystr) # Give the sub-key some named values diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py index cfadfbd..438d8ec 100755 --- a/Lib/test/test_wsgiref.py +++ b/Lib/test/test_wsgiref.py @@ -151,7 +151,7 @@ class IntegrationTests(TestCase): start_response("200 OK", ('Content-Type','text/plain')) return ["Hello, world!"] out, err = run_amock(validator(bad_app)) - self.failUnless(out.endswith( + self.assertTrue(out.endswith( b"A server error occurred. Please contact the administrator." )) self.assertEqual( @@ -166,7 +166,7 @@ class IntegrationTests(TestCase): s(b"200 OK", [(b"Content-Type", b"text/plain; charset=utf-8")]) return [b"data"] out, err = run_amock(validator(bad_app)) - self.failUnless(out.endswith( + self.assertTrue(out.endswith( b"A server error occurred. Please contact the administrator." )) self.assertEqual( @@ -181,7 +181,7 @@ class IntegrationTests(TestCase): ]) return [b"data"] out, err = run_amock(validator(app)) - self.failUnless(err.endswith('"GET / HTTP/1.0" 200 4\n')) + self.assertTrue(err.endswith('"GET / HTTP/1.0" 200 4\n')) ver = sys.version.split()[0].encode('ascii') self.assertEqual( b"HTTP/1.0 200 OK\r\n" @@ -210,16 +210,16 @@ class UtilityTests(TestCase): env = {} util.setup_testing_defaults(env) if isinstance(value,StringIO): - self.failUnless(isinstance(env[key],StringIO)) + self.assertTrue(isinstance(env[key],StringIO)) elif isinstance(value,BytesIO): - self.failUnless(isinstance(env[key],BytesIO)) + self.assertTrue(isinstance(env[key],BytesIO)) else: self.assertEqual(env[key],value) # Check existing value env = {key:alt} util.setup_testing_defaults(env) - self.failUnless(env[key] is alt) + self.assertTrue(env[key] is alt) def checkCrossDefault(self,key,value,**kw): util.setup_testing_defaults(kw) @@ -246,15 +246,15 @@ class UtilityTests(TestCase): compare_generic_iter(make_it,match) it = make_it() - self.failIf(it.filelike.closed) + self.assertFalse(it.filelike.closed) for item in it: pass - self.failIf(it.filelike.closed) + self.assertFalse(it.filelike.closed) it.close() - self.failUnless(it.filelike.closed) + self.assertTrue(it.filelike.closed) def testSimpleShifts(self): @@ -354,14 +354,14 @@ class UtilityTests(TestCase): "TE Trailers Transfer-Encoding Upgrade" ).split(): for alt in hop, hop.title(), hop.upper(), hop.lower(): - self.failUnless(util.is_hop_by_hop(alt)) + self.assertTrue(util.is_hop_by_hop(alt)) # Not comprehensive, just a few random header names for hop in ( "Accept Cache-Control Date Pragma Trailer Via Warning" ).split(): for alt in hop, hop.title(), hop.upper(), hop.lower(): - self.failIf(util.is_hop_by_hop(alt)) + self.assertFalse(util.is_hop_by_hop(alt)) class HeaderTests(TestCase): @@ -372,17 +372,17 @@ class HeaderTests(TestCase): self.assertEqual(Headers(test[:]).keys(), ['x']) self.assertEqual(Headers(test[:]).values(), ['y']) self.assertEqual(Headers(test[:]).items(), test) - self.failIf(Headers(test).items() is test) # must be copy! + self.assertFalse(Headers(test).items() is test) # must be copy! h=Headers([]) del h['foo'] # should not raise an error h['Foo'] = 'bar' for m in h.__contains__, h.get, h.get_all, h.__getitem__: - self.failUnless(m('foo')) - self.failUnless(m('Foo')) - self.failUnless(m('FOO')) - self.failIf(m('bar')) + self.assertTrue(m('foo')) + self.assertTrue(m('Foo')) + self.assertTrue(m('FOO')) + self.assertFalse(m('bar')) self.assertEqual(h['foo'],'bar') h['foo'] = 'baz' @@ -438,7 +438,7 @@ class HeaderTests(TestCase): h.get("content-disposition")) del h['content-disposition'] - self.assert_(b'content-disposition' not in h) + self.assertTrue(b'content-disposition' not in h) class ErrorHandler(BaseCGIHandler): @@ -486,7 +486,7 @@ class HandlerTests(TestCase): if k not in empty: self.assertEqual(env[k],v) for k,v in empty.items(): - self.failUnless(k in env) + self.assertTrue(k in env) def testEnviron(self): h = TestHandler(X="Y") @@ -499,7 +499,7 @@ class HandlerTests(TestCase): h = BaseCGIHandler(None,None,None,{}) h.setup_environ() for key in 'wsgi.url_scheme', 'wsgi.input', 'wsgi.errors': - self.assert_(key in h.environ) + self.assertTrue(key in h.environ) def testScheme(self): h=TestHandler(HTTPS="on"); h.setup_environ() @@ -586,7 +586,7 @@ class HandlerTests(TestCase): "\r\n%s" % (h.error_status,len(h.error_body),h.error_body) ).encode("iso-8859-1")) - self.failUnless("AssertionError" in h.stderr.getvalue()) + self.assertTrue("AssertionError" in h.stderr.getvalue()) def testErrorAfterOutput(self): MSG = "Some output has been sent" @@ -599,7 +599,7 @@ class HandlerTests(TestCase): self.assertEqual(h.stdout.getvalue(), ("Status: 200 OK\r\n" "\r\n"+MSG).encode("iso-8859-1")) - self.failUnless("AssertionError" in h.stderr.getvalue()) + self.assertTrue("AssertionError" in h.stderr.getvalue()) def testHeaderFormats(self): @@ -638,7 +638,7 @@ class HandlerTests(TestCase): if proto=="HTTP/0.9": self.assertEqual(h.stdout.getvalue(),b"") else: - self.failUnless( + self.assertTrue( re.match((stdpat%(version,sw)).encode("iso-8859-1"), h.stdout.getvalue()), ((stdpat%(version,sw)).encode("iso-8859-1"), diff --git a/Lib/test/test_xdrlib.py b/Lib/test/test_xdrlib.py index 11a44ff..073448c 100644 --- a/Lib/test/test_xdrlib.py +++ b/Lib/test/test_xdrlib.py @@ -30,15 +30,15 @@ class XDRTest(unittest.TestCase): self.assertEqual(up.unpack_int(), 42) self.assertEqual(up.unpack_uint(), 9) - self.assert_(up.unpack_bool() is True) + self.assertTrue(up.unpack_bool() is True) # remember position pos = up.get_position() - self.assert_(up.unpack_bool() is False) + self.assertTrue(up.unpack_bool() is False) # rewind and unpack again up.set_position(pos) - self.assert_(up.unpack_bool() is False) + self.assertTrue(up.unpack_bool() is False) self.assertEqual(up.unpack_uhyper(), 45) self.assertAlmostEqual(up.unpack_float(), 1.9) diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index d4e8122..7bcb6ba 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -63,21 +63,21 @@ class XMLRPCTestCase(unittest.TestCase): def test_cmp_datetime_DateTime(self): now = datetime.datetime.now() dt = xmlrpclib.DateTime(now.timetuple()) - self.assert_(dt == now) - self.assert_(now == dt) + self.assertTrue(dt == now) + self.assertTrue(now == dt) then = now + datetime.timedelta(seconds=4) - self.assert_(then >= dt) - self.assert_(dt < then) + self.assertTrue(then >= dt) + self.assertTrue(dt < then) def test_bug_1164912 (self): d = xmlrpclib.DateTime() ((new_d,), dummy) = xmlrpclib.loads(xmlrpclib.dumps((d,), methodresponse=True)) - self.assert_(isinstance(new_d.value, str)) + self.assertTrue(isinstance(new_d.value, str)) # Check that the output of dumps() is still an 8-bit string s = xmlrpclib.dumps((new_d,), methodresponse=True) - self.assert_(isinstance(s, str)) + self.assertTrue(isinstance(s, str)) def test_newstyle_class(self): class T(object): @@ -171,7 +171,7 @@ class FaultTestCase(unittest.TestCase): # private methods self.assertRaises(AttributeError, xmlrpc.server.resolve_dotted_attribute, str, '__add') - self.assert_(xmlrpc.server.resolve_dotted_attribute(str, 'title')) + self.assertTrue(xmlrpc.server.resolve_dotted_attribute(str, 'title')) class DateTimeTestCase(unittest.TestCase): def test_default(self): @@ -473,7 +473,7 @@ class SimpleServerTestCase(unittest.TestCase): self.assertRaises(AttributeError, xmlrpc.server.resolve_dotted_attribute, str, '__add') - self.assert_(xmlrpc.server.resolve_dotted_attribute(str, 'title')) + self.assertTrue(xmlrpc.server.resolve_dotted_attribute(str, 'title')) # Get the test to run faster by sending a request with test_simple1. # This avoids waiting for the socket timeout. self.test_simple1() diff --git a/Lib/test/test_xmlrpc_net.py b/Lib/test/test_xmlrpc_net.py index f6ebbf0..56b74b2 100644 --- a/Lib/test/test_xmlrpc_net.py +++ b/Lib/test/test_xmlrpc_net.py @@ -33,7 +33,7 @@ class CurrentTimeTest(unittest.TestCase): delta = dt1 - dt0 # The difference between the system time here and the system # time on the server should not be too big. - self.assert_(delta.days <= 1) + self.assertTrue(delta.days <= 1) def test_main(): diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 4b6d825..82602c1 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -57,9 +57,9 @@ class TestsWithSourceFile(unittest.TestCase): lines = directory.splitlines() self.assertEquals(len(lines), 4) # Number of files + header - self.assert_('File Name' in lines[0]) - self.assert_('Modified' in lines[0]) - self.assert_('Size' in lines[0]) + self.assertTrue('File Name' in lines[0]) + self.assertTrue('Modified' in lines[0]) + self.assertTrue('Size' in lines[0]) fn, date, time, size = lines[1].split() self.assertEquals(fn, 'another.name') @@ -69,17 +69,17 @@ class TestsWithSourceFile(unittest.TestCase): # Check the namelist names = zipfp.namelist() self.assertEquals(len(names), 3) - self.assert_(TESTFN in names) - self.assert_("another.name" in names) - self.assert_("strfile" in names) + self.assertTrue(TESTFN in names) + self.assertTrue("another.name" in names) + self.assertTrue("strfile" in names) # Check infolist infos = zipfp.infolist() names = [ i.filename for i in infos ] self.assertEquals(len(names), 3) - self.assert_(TESTFN in names) - self.assert_("another.name" in names) - self.assert_("strfile" in names) + self.assertTrue(TESTFN in names) + self.assertTrue("another.name" in names) + self.assertTrue("strfile" in names) for i in infos: self.assertEquals(i.file_size, len(self.data)) @@ -138,11 +138,11 @@ class TestsWithSourceFile(unittest.TestCase): data = b"" for info in infos: data += zipfp.open(info).read() - self.assert_(data == b"foobar" or data == b"barfoo") + self.assertTrue(data == b"foobar" or data == b"barfoo") data = b"" for info in infos: data += zipfp.read(info) - self.assert_(data == b"foobar" or data == b"barfoo") + self.assertTrue(data == b"foobar" or data == b"barfoo") zipfp.close() def zipRandomOpenTest(self, f, compression): @@ -439,9 +439,9 @@ class TestZip64InSmallFiles(unittest.TestCase): lines = directory.splitlines() self.assertEquals(len(lines), 4) # Number of files + header - self.assert_('File Name' in lines[0]) - self.assert_('Modified' in lines[0]) - self.assert_('Size' in lines[0]) + self.assertTrue('File Name' in lines[0]) + self.assertTrue('Modified' in lines[0]) + self.assertTrue('Size' in lines[0]) fn, date, time, size = lines[1].split() self.assertEquals(fn, 'another.name') @@ -451,17 +451,17 @@ class TestZip64InSmallFiles(unittest.TestCase): # Check the namelist names = zipfp.namelist() self.assertEquals(len(names), 3) - self.assert_(TESTFN in names) - self.assert_("another.name" in names) - self.assert_("strfile" in names) + self.assertTrue(TESTFN in names) + self.assertTrue("another.name" in names) + self.assertTrue("strfile" in names) # Check infolist infos = zipfp.infolist() names = [ i.filename for i in infos ] self.assertEquals(len(names), 3) - self.assert_(TESTFN in names) - self.assert_("another.name" in names) - self.assert_("strfile" in names) + self.assertTrue(TESTFN in names) + self.assertTrue("another.name" in names) + self.assertTrue("strfile" in names) for i in infos: self.assertEquals(i.file_size, len(self.data)) @@ -511,8 +511,8 @@ class PyZipFileTests(unittest.TestCase): zipfp.writepy(fn) bn = os.path.basename(fn) - self.assert_(bn not in zipfp.namelist()) - self.assert_(bn + 'o' in zipfp.namelist() or bn + 'c' in zipfp.namelist()) + self.assertTrue(bn not in zipfp.namelist()) + self.assertTrue(bn + 'o' in zipfp.namelist() or bn + 'c' in zipfp.namelist()) zipfp.close() @@ -524,8 +524,8 @@ class PyZipFileTests(unittest.TestCase): zipfp.writepy(fn, "testpackage") bn = "%s/%s"%("testpackage", os.path.basename(fn)) - self.assert_(bn not in zipfp.namelist()) - self.assert_(bn + 'o' in zipfp.namelist() or bn + 'c' in zipfp.namelist()) + self.assertTrue(bn not in zipfp.namelist()) + self.assertTrue(bn + 'o' in zipfp.namelist() or bn + 'c' in zipfp.namelist()) zipfp.close() def testWritePythonPackage(self): @@ -537,8 +537,8 @@ class PyZipFileTests(unittest.TestCase): # Check for a couple of modules at different levels of the hieararchy names = zipfp.namelist() - self.assert_('email/__init__.pyo' in names or 'email/__init__.pyc' in names) - self.assert_('email/mime/text.pyo' in names or 'email/mime/text.pyc' in names) + self.assertTrue('email/__init__.pyo' in names or 'email/__init__.pyc' in names) + self.assertTrue('email/mime/text.pyo' in names or 'email/mime/text.pyc' in names) def testWritePythonDirectory(self): os.mkdir(TESTFN2) @@ -559,9 +559,9 @@ class PyZipFileTests(unittest.TestCase): zipfp.writepy(TESTFN2) names = zipfp.namelist() - self.assert_('mod1.pyc' in names or 'mod1.pyo' in names) - self.assert_('mod2.pyc' in names or 'mod2.pyo' in names) - self.assert_('mod2.txt' not in names) + self.assertTrue('mod1.pyc' in names or 'mod1.pyo' in names) + self.assertTrue('mod2.pyc' in names or 'mod2.pyo' in names) + self.assertTrue('mod2.txt' not in names) finally: shutil.rmtree(TESTFN2) @@ -598,7 +598,7 @@ class OtherTests(unittest.TestCase): except IOError: self.fail('Could not append data to a non-existent zip file.') - self.assert_(os.path.exists(TESTFN)) + self.assertTrue(os.path.exists(TESTFN)) zf = zipfile.ZipFile(TESTFN, 'r') self.assertEqual(zf.read(filename), content) @@ -627,19 +627,19 @@ class OtherTests(unittest.TestCase): with open(TESTFN, "w") as fp: fp.write("this is not a legal zip file\n") chk = zipfile.is_zipfile(TESTFN) - self.assert_(not chk) + self.assertTrue(not chk) # - passing a file object with open(TESTFN, "rb") as fp: chk = zipfile.is_zipfile(fp) - self.assert_(not chk) + self.assertTrue(not chk) # - passing a file-like object fp = io.BytesIO() fp.write(b"this is not a legal zip file\n") chk = zipfile.is_zipfile(fp) - self.assert_(not chk) + self.assertTrue(not chk) fp.seek(0,0) chk = zipfile.is_zipfile(fp) - self.assert_(not chk) + self.assertTrue(not chk) def testIsZipValidFile(self): # This test checks that the is_zipfile function correctly identifies @@ -650,21 +650,21 @@ class OtherTests(unittest.TestCase): zipf.writestr("foo.txt", b"O, for a Muse of Fire!") zipf.close() chk = zipfile.is_zipfile(TESTFN) - self.assert_(chk) + self.assertTrue(chk) # - passing a file object with open(TESTFN, "rb") as fp: chk = zipfile.is_zipfile(fp) - self.assert_(chk) + self.assertTrue(chk) fp.seek(0,0) zip_contents = fp.read() # - passing a file-like object fp = io.BytesIO() fp.write(zip_contents) chk = zipfile.is_zipfile(fp) - self.assert_(chk) + self.assertTrue(chk) fp.seek(0,0) chk = zipfile.is_zipfile(fp) - self.assert_(chk) + self.assertTrue(chk) def testNonExistentFileRaisesIOError(self): # make sure we don't raise an AttributeError when a partially-constructed diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py index f41deaf..5d163c7 100644 --- a/Lib/test/test_zipimport.py +++ b/Lib/test/test_zipimport.py @@ -287,7 +287,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): z.close() zi = zipimport.zipimporter(TEMP_ZIP) self.assertEquals(data, zi.get_data(name)) - self.assert_('zipimporter object' in repr(zi)) + self.assertTrue('zipimporter object' in repr(zi)) finally: z.close() os.remove(TEMP_ZIP) @@ -369,7 +369,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): s = io.StringIO() print_tb(tb, 1, s) - self.failUnless(s.getvalue().endswith(raise_src)) + self.assertTrue(s.getvalue().endswith(raise_src)) else: raise AssertionError("This ought to be impossible") diff --git a/Lib/test/test_zipimport_support.py b/Lib/test/test_zipimport_support.py index 3f4cd3f..94a65fc 100644 --- a/Lib/test/test_zipimport_support.py +++ b/Lib/test/test_zipimport_support.py @@ -187,7 +187,7 @@ class ZipSupportTests(ImportHooksBaseTestCase): print ("Expected line", expected) print ("Got stdout:") print (data) - self.assert_(expected in data) + self.assertTrue(expected in data) zip_name, run_name = _make_test_zip(d, "test_zip", script_name, '__main__.py') exit_code, data = _run_python(zip_name) @@ -196,7 +196,7 @@ class ZipSupportTests(ImportHooksBaseTestCase): print ("Expected line", expected) print ("Got stdout:") print (data) - self.assert_(expected in data) + self.assertTrue(expected in data) def test_pdb_issue4201(self): test_src = textwrap.dedent("""\ @@ -211,13 +211,13 @@ class ZipSupportTests(ImportHooksBaseTestCase): p = _spawn_python(script_name) p.stdin.write(b'l\n') data = _kill_python(p).decode() - self.assert_(script_name in data) + self.assertTrue(script_name in data) zip_name, run_name = _make_test_zip(d, "test_zip", script_name, '__main__.py') p = _spawn_python(zip_name) p.stdin.write(b'l\n') data = _kill_python(p).decode() - self.assert_(run_name in data) + self.assertTrue(run_name in data) def test_main(): diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index 71f5ecf..3718ca7 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -10,7 +10,7 @@ class ChecksumTestCase(unittest.TestCase): # checksum test cases def test_crc32start(self): self.assertEqual(zlib.crc32(b""), zlib.crc32(b"", 0)) - self.assert_(zlib.crc32(b"abc", 0xffffffff)) + self.assertTrue(zlib.crc32(b"abc", 0xffffffff)) def test_crc32empty(self): self.assertEqual(zlib.crc32(b"", 0), 0) @@ -19,7 +19,7 @@ class ChecksumTestCase(unittest.TestCase): def test_adler32start(self): self.assertEqual(zlib.adler32(b""), zlib.adler32(b"", 1)) - self.assert_(zlib.adler32(b"abc", 0xffffffff)) + self.assertTrue(zlib.adler32(b"abc", 0xffffffff)) def test_adler32empty(self): self.assertEqual(zlib.adler32(b"", 0), 0) @@ -111,8 +111,8 @@ class CompressObjectTestCase(unittest.TestCase): y1 = dco.decompress(x1 + x2) y2 = dco.flush() self.assertEqual(data, y1 + y2) - self.assert_(isinstance(dco.unconsumed_tail, bytes)) - self.assert_(isinstance(dco.unused_data, bytes)) + self.assertTrue(isinstance(dco.unconsumed_tail, bytes)) + self.assertTrue(isinstance(dco.unused_data, bytes)) def test_compressoptions(self): # specify lots of options to compressobj() @@ -157,7 +157,7 @@ class CompressObjectTestCase(unittest.TestCase): decombuf = zlib.decompress(combuf) # Test type of return value - self.assert_(isinstance(decombuf, bytes)) + self.assertTrue(isinstance(decombuf, bytes)) self.assertEqual(data, decombuf) @@ -208,7 +208,7 @@ class CompressObjectTestCase(unittest.TestCase): while cb: #max_length = 1 + len(cb)//10 chunk = dco.decompress(cb, dcx) - self.failIf(len(chunk) > dcx, + self.assertFalse(len(chunk) > dcx, 'chunk too big (%d>%d)' % (len(chunk), dcx)) bufs.append(chunk) cb = dco.unconsumed_tail @@ -233,7 +233,7 @@ class CompressObjectTestCase(unittest.TestCase): while cb: max_length = 1 + len(cb)//10 chunk = dco.decompress(cb, max_length) - self.failIf(len(chunk) > max_length, + self.assertFalse(len(chunk) > max_length, 'chunk too big (%d>%d)' % (len(chunk),max_length)) bufs.append(chunk) cb = dco.unconsumed_tail @@ -242,7 +242,7 @@ class CompressObjectTestCase(unittest.TestCase): else: while chunk: chunk = dco.decompress('', max_length) - self.failIf(len(chunk) > max_length, + self.assertFalse(len(chunk) > max_length, 'chunk too big (%d>%d)' % (len(chunk),max_length)) bufs.append(chunk) self.assertEqual(data, b''.join(bufs), 'Wrong data retrieved') @@ -316,7 +316,7 @@ class CompressObjectTestCase(unittest.TestCase): # caused a core dump.) co = zlib.compressobj(zlib.Z_BEST_COMPRESSION) - self.failUnless(co.flush()) # Returns a zlib header + self.assertTrue(co.flush()) # Returns a zlib header dco = zlib.decompressobj() self.assertEqual(dco.flush(), b"") # Returns nothing @@ -356,7 +356,7 @@ class CompressObjectTestCase(unittest.TestCase): data = HAMLET_SCENE comp = zlib.compress(data) # Test type of return value - self.assert_(isinstance(comp, bytes)) + self.assertTrue(isinstance(comp, bytes)) d0 = zlib.decompressobj() bufs0 = [] diff --git a/Lib/tkinter/test/test_tkinter/test_text.py b/Lib/tkinter/test/test_tkinter/test_text.py index fffd455..a93c4ce 100644 --- a/Lib/tkinter/test/test_tkinter/test_text.py +++ b/Lib/tkinter/test/test_tkinter/test_text.py @@ -19,18 +19,18 @@ class TextTest(unittest.TestCase): text = self.text # pattern and index are obligatory arguments. - self.failUnlessRaises(tkinter.TclError, text.search, None, '1.0') - self.failUnlessRaises(tkinter.TclError, text.search, 'a', None) - self.failUnlessRaises(tkinter.TclError, text.search, None, None) + self.assertRaises(tkinter.TclError, text.search, None, '1.0') + self.assertRaises(tkinter.TclError, text.search, 'a', None) + self.assertRaises(tkinter.TclError, text.search, None, None) # Invalid text index. - self.failUnlessRaises(tkinter.TclError, text.search, '', 0) + self.assertRaises(tkinter.TclError, text.search, '', 0) # Check if we are getting the indices as strings -- you are likely # to get Tcl_Obj under Tk 8.5 if Tkinter doesn't convert it. text.insert('1.0', 'hi-test') - self.failUnlessEqual(text.search('-test', '1.0', 'end'), '1.2') - self.failUnlessEqual(text.search('test', '1.0', 'end'), '1.3') + self.assertEqual(text.search('-test', '1.0', 'end'), '1.2') + self.assertEqual(text.search('test', '1.0', 'end'), '1.3') tests_gui = (TextTest, ) diff --git a/Lib/tkinter/test/test_ttk/test_extensions.py b/Lib/tkinter/test/test_ttk/test_extensions.py index 9e52fc6..5912af4 100644 --- a/Lib/tkinter/test/test_ttk/test_extensions.py +++ b/Lib/tkinter/test/test_ttk/test_extensions.py @@ -22,16 +22,16 @@ class LabeledScaleTest(unittest.TestCase): x = ttk.LabeledScale() var = x._variable._name x.destroy() - self.failUnlessRaises(tkinter.TclError, x.tk.globalgetvar, var) + self.assertRaises(tkinter.TclError, x.tk.globalgetvar, var) # manually created variable myvar = tkinter.DoubleVar() name = myvar._name x = ttk.LabeledScale(variable=myvar) x.destroy() - self.failUnlessEqual(x.tk.globalgetvar(name), myvar.get()) + self.assertEqual(x.tk.globalgetvar(name), myvar.get()) del myvar - self.failUnlessRaises(tkinter.TclError, x.tk.globalgetvar, name) + self.assertRaises(tkinter.TclError, x.tk.globalgetvar, name) # checking that the tracing callback is properly removed myvar = tkinter.IntVar() @@ -45,17 +45,17 @@ class LabeledScaleTest(unittest.TestCase): # it tries calling instance attributes not yet defined. ttk.LabeledScale(variable=myvar) if hasattr(sys, 'last_type'): - self.failIf(sys.last_type == tkinter.TclError) + self.assertFalse(sys.last_type == tkinter.TclError) def test_initialization(self): # master passing x = ttk.LabeledScale() - self.failUnlessEqual(x.master, tkinter._default_root) + self.assertEqual(x.master, tkinter._default_root) x.destroy() master = tkinter.Frame() x = ttk.LabeledScale(master) - self.failUnlessEqual(x.master, master) + self.assertEqual(x.master, master) x.destroy() # variable initialization/passing @@ -63,29 +63,29 @@ class LabeledScaleTest(unittest.TestCase): (-1, -1), (sys.maxsize + 1, sys.maxsize + 1)) for pair in passed_expected: x = ttk.LabeledScale(from_=pair[0]) - self.failUnlessEqual(x.value, pair[1]) + self.assertEqual(x.value, pair[1]) x.destroy() x = ttk.LabeledScale(from_='2.5') - self.failUnlessRaises(ValueError, x._variable.get) + self.assertRaises(ValueError, x._variable.get) x.destroy() x = ttk.LabeledScale(from_=None) - self.failUnlessRaises(ValueError, x._variable.get) + self.assertRaises(ValueError, x._variable.get) x.destroy() # variable should have its default value set to the from_ value myvar = tkinter.DoubleVar(value=20) x = ttk.LabeledScale(variable=myvar) - self.failUnlessEqual(x.value, 0) + self.assertEqual(x.value, 0) x.destroy() # check that it is really using a DoubleVar x = ttk.LabeledScale(variable=myvar, from_=0.5) - self.failUnlessEqual(x.value, 0.5) - self.failUnlessEqual(x._variable._name, myvar._name) + self.assertEqual(x.value, 0.5) + self.assertEqual(x._variable._name, myvar._name) x.destroy() # widget positionment def check_positions(scale, scale_pos, label, label_pos): - self.failUnlessEqual(scale.pack_info()['side'], scale_pos) - self.failUnlessEqual(label.place_info()['anchor'], label_pos) + self.assertEqual(scale.pack_info()['side'], scale_pos) + self.assertEqual(label.place_info()['anchor'], label_pos) x = ttk.LabeledScale(compound='top') check_positions(x.scale, 'bottom', x.label, 'n') x.destroy() @@ -100,7 +100,7 @@ class LabeledScaleTest(unittest.TestCase): x.destroy() # extra, and invalid, kwargs - self.failUnlessRaises(tkinter.TclError, ttk.LabeledScale, a='b') + self.assertRaises(tkinter.TclError, ttk.LabeledScale, a='b') def test_horizontal_range(self): @@ -111,7 +111,7 @@ class LabeledScaleTest(unittest.TestCase): linfo_1 = lscale.label.place_info() prev_xcoord = lscale.scale.coords()[0] - self.failUnlessEqual(prev_xcoord, int(linfo_1['x'])) + self.assertEqual(prev_xcoord, int(linfo_1['x'])) # change range to: from -5 to 5. This should change the x coord of # the scale widget, since 0 is at the middle of the new # range. @@ -120,15 +120,15 @@ class LabeledScaleTest(unittest.TestCase): # at the same time this shouldn't affect test outcome lscale.update() curr_xcoord = lscale.scale.coords()[0] - self.failUnless(prev_xcoord != curr_xcoord) + self.assertTrue(prev_xcoord != curr_xcoord) # the label widget should have been repositioned too linfo_2 = lscale.label.place_info() - self.failUnlessEqual(lscale.label['text'], 0) - self.failUnlessEqual(curr_xcoord, int(linfo_2['x'])) + self.assertEqual(lscale.label['text'], 0) + self.assertEqual(curr_xcoord, int(linfo_2['x'])) # change the range back lscale.scale.configure(from_=0, to=10) - self.failUnless(prev_xcoord != curr_xcoord) - self.failUnlessEqual(prev_xcoord, int(linfo_1['x'])) + self.assertTrue(prev_xcoord != curr_xcoord) + self.assertEqual(prev_xcoord, int(linfo_1['x'])) lscale.destroy() @@ -145,16 +145,16 @@ class LabeledScaleTest(unittest.TestCase): # The following update is needed since the test doesn't use mainloop, # at the same time this shouldn't affect test outcome x.update() - self.failUnlessEqual(x.label['text'], newval) - self.failUnless(x.scale.coords()[0] > curr_xcoord) - self.failUnlessEqual(x.scale.coords()[0], + self.assertEqual(x.label['text'], newval) + self.assertTrue(x.scale.coords()[0] > curr_xcoord) + self.assertEqual(x.scale.coords()[0], int(x.label.place_info()['x'])) # value outside range x.value = x.scale['to'] + 1 # no changes shouldn't happen x.update() - self.failUnlessEqual(x.label['text'], newval) - self.failUnlessEqual(x.scale.coords()[0], + self.assertEqual(x.label['text'], newval) + self.assertEqual(x.scale.coords()[0], int(x.label.place_info()['x'])) x.destroy() @@ -172,7 +172,7 @@ class LabeledScaleTest(unittest.TestCase): x.value = 3 x.update() x.master.wm_geometry("%dx%d" % (width_new, height_new)) - self.failUnlessEqual(int(x.label.place_info()['x']), + self.assertEqual(int(x.label.place_info()['x']), x.scale.coords()[0]) # Reset geometry @@ -197,20 +197,20 @@ class OptionMenuTest(unittest.TestCase): name = var._name optmenu.update_idletasks() optmenu.destroy() - self.failUnlessEqual(optmenu.tk.globalgetvar(name), var.get()) + self.assertEqual(optmenu.tk.globalgetvar(name), var.get()) del var - self.failUnlessRaises(tkinter.TclError, optmenu.tk.globalgetvar, name) + self.assertRaises(tkinter.TclError, optmenu.tk.globalgetvar, name) def test_initialization(self): - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, ttk.OptionMenu, None, self.textvar, invalid='thing') optmenu = ttk.OptionMenu(None, self.textvar, 'b', 'a', 'b') - self.failUnlessEqual(optmenu._variable.get(), 'b') + self.assertEqual(optmenu._variable.get(), 'b') - self.failUnless(optmenu['menu']) - self.failUnless(optmenu['textvariable']) + self.assertTrue(optmenu['menu']) + self.assertTrue(optmenu['textvariable']) optmenu.destroy() @@ -222,10 +222,10 @@ class OptionMenuTest(unittest.TestCase): found_default = False for i in range(len(items)): value = optmenu['menu'].entrycget(i, 'value') - self.failUnlessEqual(value, items[i]) + self.assertEqual(value, items[i]) if value == default: found_default = True - self.failUnless(found_default) + self.assertTrue(found_default) optmenu.destroy() # default shouldn't be in menu if it is not part of values @@ -238,26 +238,26 @@ class OptionMenuTest(unittest.TestCase): if last == curr: # no more menu entries break - self.failIf(curr == default) + self.assertFalse(curr == default) i += 1 - self.failUnlessEqual(i, len(items)) + self.assertEqual(i, len(items)) # check that variable is updated correctly optmenu.pack() optmenu.wait_visibility() optmenu['menu'].invoke(0) - self.failUnlessEqual(optmenu._variable.get(), items[0]) + self.assertEqual(optmenu._variable.get(), items[0]) # changing to an invalid index shouldn't change the variable - self.failUnlessRaises(tkinter.TclError, optmenu['menu'].invoke, -1) - self.failUnlessEqual(optmenu._variable.get(), items[0]) + self.assertRaises(tkinter.TclError, optmenu['menu'].invoke, -1) + self.assertEqual(optmenu._variable.get(), items[0]) optmenu.destroy() # specifying a callback success = [] def cb_test(item): - self.failUnlessEqual(item, items[1]) + self.assertEqual(item, items[1]) success.append(True) optmenu = ttk.OptionMenu(None, self.textvar, 'a', command=cb_test, *items) diff --git a/Lib/tkinter/test/test_ttk/test_functions.py b/Lib/tkinter/test/test_ttk/test_functions.py index c9f8d5d..f9b908e 100644 --- a/Lib/tkinter/test/test_ttk/test_functions.py +++ b/Lib/tkinter/test/test_ttk/test_functions.py @@ -27,12 +27,12 @@ class InternalFunctionsTest(unittest.TestCase): def test_format_optdict(self): def check_against(fmt_opts, result): for i in range(0, len(fmt_opts), 2): - self.failUnlessEqual(result.pop(fmt_opts[i]), fmt_opts[i + 1]) + self.assertEqual(result.pop(fmt_opts[i]), fmt_opts[i + 1]) if result: self.fail("result still got elements: %s" % result) # passing an empty dict should return an empty object (tuple here) - self.failIf(ttk._format_optdict({})) + self.assertFalse(ttk._format_optdict({})) # check list formatting check_against( @@ -62,7 +62,7 @@ class InternalFunctionsTest(unittest.TestCase): # check if giving unicode keys is fine check_against(ttk._format_optdict(opts), {'-αβγ': True, '-á': False}) # opts should remain unchanged - self.failUnlessEqual(opts, orig_opts) + self.assertEqual(opts, orig_opts) # passing values with spaces inside a tuple/list check_against( @@ -72,113 +72,113 @@ class InternalFunctionsTest(unittest.TestCase): # ignore an option amount_opts = len(ttk._format_optdict(opts, ignore=('á'))) / 2 - self.failUnlessEqual(amount_opts, len(opts) - 1) + self.assertEqual(amount_opts, len(opts) - 1) # ignore non-existing options amount_opts = len(ttk._format_optdict(opts, ignore=('á', 'b'))) / 2 - self.failUnlessEqual(amount_opts, len(opts) - 1) + self.assertEqual(amount_opts, len(opts) - 1) # ignore every option - self.failIf(ttk._format_optdict(opts, ignore=list(opts.keys()))) + self.assertFalse(ttk._format_optdict(opts, ignore=list(opts.keys()))) def test_format_mapdict(self): opts = {'a': [('b', 'c', 'val'), ('d', 'otherval'), ('', 'single')]} result = ttk._format_mapdict(opts) - self.failUnlessEqual(len(result), len(list(opts.keys())) * 2) - self.failUnlessEqual(result, ('-a', '{b c} val d otherval {} single')) - self.failUnlessEqual(ttk._format_mapdict(opts, script=True), + self.assertEqual(len(result), len(list(opts.keys())) * 2) + self.assertEqual(result, ('-a', '{b c} val d otherval {} single')) + self.assertEqual(ttk._format_mapdict(opts, script=True), ('-a', '{{b c} val d otherval {} single}')) - self.failUnlessEqual(ttk._format_mapdict({2: []}), ('-2', '')) + self.assertEqual(ttk._format_mapdict({2: []}), ('-2', '')) opts = {'üñíćódè': [('á', 'vãl')]} result = ttk._format_mapdict(opts) - self.failUnlessEqual(result, ('-üñíćódè', 'á vãl')) + self.assertEqual(result, ('-üñíćódè', 'á vãl')) # empty states valid = {'opt': [('', '', 'hi')]} - self.failUnlessEqual(ttk._format_mapdict(valid), ('-opt', '{ } hi')) + self.assertEqual(ttk._format_mapdict(valid), ('-opt', '{ } hi')) # when passing multiple states, they all must be strings invalid = {'opt': [(1, 2, 'valid val')]} - self.failUnlessRaises(TypeError, ttk._format_mapdict, invalid) + self.assertRaises(TypeError, ttk._format_mapdict, invalid) invalid = {'opt': [([1], '2', 'valid val')]} - self.failUnlessRaises(TypeError, ttk._format_mapdict, invalid) + self.assertRaises(TypeError, ttk._format_mapdict, invalid) # but when passing a single state, it can be anything valid = {'opt': [[1, 'value']]} - self.failUnlessEqual(ttk._format_mapdict(valid), ('-opt', '1 value')) + self.assertEqual(ttk._format_mapdict(valid), ('-opt', '1 value')) # special attention to single states which evalute to False for stateval in (None, 0, False, '', set()): # just some samples valid = {'opt': [(stateval, 'value')]} - self.failUnlessEqual(ttk._format_mapdict(valid), + self.assertEqual(ttk._format_mapdict(valid), ('-opt', '{} value')) # values must be iterable opts = {'a': None} - self.failUnlessRaises(TypeError, ttk._format_mapdict, opts) + self.assertRaises(TypeError, ttk._format_mapdict, opts) # items in the value must have size >= 2 - self.failUnlessRaises(IndexError, ttk._format_mapdict, + self.assertRaises(IndexError, ttk._format_mapdict, {'a': [('invalid', )]}) def test_format_elemcreate(self): - self.failUnless(ttk._format_elemcreate(None), (None, ())) + self.assertTrue(ttk._format_elemcreate(None), (None, ())) ## Testing type = image # image type expects at least an image name, so this should raise # IndexError since it tries to access the index 0 of an empty tuple - self.failUnlessRaises(IndexError, ttk._format_elemcreate, 'image') + self.assertRaises(IndexError, ttk._format_elemcreate, 'image') # don't format returned values as a tcl script # minimum acceptable for image type - self.failUnlessEqual(ttk._format_elemcreate('image', False, 'test'), + self.assertEqual(ttk._format_elemcreate('image', False, 'test'), ("test ", ())) # specifiyng a state spec - self.failUnlessEqual(ttk._format_elemcreate('image', False, 'test', + self.assertEqual(ttk._format_elemcreate('image', False, 'test', ('', 'a')), ("test {} a", ())) # state spec with multiple states - self.failUnlessEqual(ttk._format_elemcreate('image', False, 'test', + self.assertEqual(ttk._format_elemcreate('image', False, 'test', ('a', 'b', 'c')), ("test {a b} c", ())) # state spec and options - self.failUnlessEqual(ttk._format_elemcreate('image', False, 'test', + self.assertEqual(ttk._format_elemcreate('image', False, 'test', ('a', 'b'), a='x', b='y'), ("test a b", ("-a", "x", "-b", "y"))) # format returned values as a tcl script # state spec with multiple states and an option with a multivalue - self.failUnlessEqual(ttk._format_elemcreate('image', True, 'test', + self.assertEqual(ttk._format_elemcreate('image', True, 'test', ('a', 'b', 'c', 'd'), x=[2, 3]), ("{test {a b c} d}", "-x {2 3}")) ## Testing type = vsapi # vsapi type expects at least a class name and a part_id, so this # should raise an ValueError since it tries to get two elements from # an empty tuple - self.failUnlessRaises(ValueError, ttk._format_elemcreate, 'vsapi') + self.assertRaises(ValueError, ttk._format_elemcreate, 'vsapi') # don't format returned values as a tcl script # minimum acceptable for vsapi - self.failUnlessEqual(ttk._format_elemcreate('vsapi', False, 'a', 'b'), + self.assertEqual(ttk._format_elemcreate('vsapi', False, 'a', 'b'), ("a b ", ())) # now with a state spec with multiple states - self.failUnlessEqual(ttk._format_elemcreate('vsapi', False, 'a', 'b', + self.assertEqual(ttk._format_elemcreate('vsapi', False, 'a', 'b', ('a', 'b', 'c')), ("a b {a b} c", ())) # state spec and option - self.failUnlessEqual(ttk._format_elemcreate('vsapi', False, 'a', 'b', + self.assertEqual(ttk._format_elemcreate('vsapi', False, 'a', 'b', ('a', 'b'), opt='x'), ("a b a b", ("-opt", "x"))) # format returned values as a tcl script # state spec with a multivalue and an option - self.failUnlessEqual(ttk._format_elemcreate('vsapi', True, 'a', 'b', + self.assertEqual(ttk._format_elemcreate('vsapi', True, 'a', 'b', ('a', 'b', [1, 2]), opt='x'), ("{a b {a b} {1 2}}", "-opt x")) # Testing type = from # from type expects at least a type name - self.failUnlessRaises(IndexError, ttk._format_elemcreate, 'from') + self.assertRaises(IndexError, ttk._format_elemcreate, 'from') - self.failUnlessEqual(ttk._format_elemcreate('from', False, 'a'), + self.assertEqual(ttk._format_elemcreate('from', False, 'a'), ('a', ())) - self.failUnlessEqual(ttk._format_elemcreate('from', False, 'a', 'b'), + self.assertEqual(ttk._format_elemcreate('from', False, 'a', 'b'), ('a', ('b', ))) - self.failUnlessEqual(ttk._format_elemcreate('from', True, 'a', 'b'), + self.assertEqual(ttk._format_elemcreate('from', True, 'a', 'b'), ('{a}', 'b')) @@ -207,77 +207,77 @@ class InternalFunctionsTest(unittest.TestCase): spaces(2 * indent_size), spaces(indent_size), spaces())) # empty layout - self.failUnlessEqual(ttk._format_layoutlist([])[0], '') + self.assertEqual(ttk._format_layoutlist([])[0], '') # _format_layoutlist always expects the second item (in every item) # to act like a dict (except when the value evalutes to False). - self.failUnlessRaises(AttributeError, + self.assertRaises(AttributeError, ttk._format_layoutlist, [('a', 'b')]) smallest = ttk._format_layoutlist([('a', None)], indent=0) - self.failUnlessEqual(smallest, + self.assertEqual(smallest, ttk._format_layoutlist([('a', '')], indent=0)) - self.failUnlessEqual(smallest[0], 'a') + self.assertEqual(smallest[0], 'a') # testing indentation levels - self.failUnlessEqual(sample(), sample_expected()) + self.assertEqual(sample(), sample_expected()) for i in range(4): - self.failUnlessEqual(sample(i), sample_expected(i)) - self.failUnlessEqual(sample(i, i), sample_expected(i, i)) + self.assertEqual(sample(i), sample_expected(i)) + self.assertEqual(sample(i, i), sample_expected(i, i)) # invalid layout format, different kind of exceptions will be # raised by internal functions # plain wrong format - self.failUnlessRaises(ValueError, ttk._format_layoutlist, + self.assertRaises(ValueError, ttk._format_layoutlist, ['bad', 'format']) # will try to use iteritems in the 'bad' string - self.failUnlessRaises(AttributeError, ttk._format_layoutlist, + self.assertRaises(AttributeError, ttk._format_layoutlist, [('name', 'bad')]) # bad children formatting - self.failUnlessRaises(ValueError, ttk._format_layoutlist, + self.assertRaises(ValueError, ttk._format_layoutlist, [('name', {'children': {'a': None}})]) def test_script_from_settings(self): # empty options - self.failIf(ttk._script_from_settings({'name': + self.assertFalse(ttk._script_from_settings({'name': {'configure': None, 'map': None, 'element create': None}})) # empty layout - self.failUnlessEqual( + self.assertEqual( ttk._script_from_settings({'name': {'layout': None}}), "ttk::style layout name {\nnull\n}") configdict = {'αβγ': True, 'á': False} - self.failUnless( + self.assertTrue( ttk._script_from_settings({'name': {'configure': configdict}})) mapdict = {'üñíćódè': [('á', 'vãl')]} - self.failUnless( + self.assertTrue( ttk._script_from_settings({'name': {'map': mapdict}})) # invalid image element - self.failUnlessRaises(IndexError, + self.assertRaises(IndexError, ttk._script_from_settings, {'name': {'element create': ['image']}}) # minimal valid image - self.failUnless(ttk._script_from_settings({'name': + self.assertTrue(ttk._script_from_settings({'name': {'element create': ['image', 'name']}})) image = {'thing': {'element create': ['image', 'name', ('state1', 'state2', 'val')]}} - self.failUnlessEqual(ttk._script_from_settings(image), + self.assertEqual(ttk._script_from_settings(image), "ttk::style element create thing image {name {state1 state2} val} ") image['thing']['element create'].append({'opt': 30}) - self.failUnlessEqual(ttk._script_from_settings(image), + self.assertEqual(ttk._script_from_settings(image), "ttk::style element create thing image {name {state1 state2} val} " "-opt 30") image['thing']['element create'][-1]['opt'] = [MockTclObj(3), MockTclObj('2m')] - self.failUnlessEqual(ttk._script_from_settings(image), + self.assertEqual(ttk._script_from_settings(image), "ttk::style element create thing image {name {state1 state2} val} " "-opt {3 2m}") @@ -285,28 +285,28 @@ class InternalFunctionsTest(unittest.TestCase): def test_dict_from_tcltuple(self): fakettuple = ('-a', '{1 2 3}', '-something', 'foo') - self.failUnlessEqual(ttk._dict_from_tcltuple(fakettuple, False), + self.assertEqual(ttk._dict_from_tcltuple(fakettuple, False), {'-a': '{1 2 3}', '-something': 'foo'}) - self.failUnlessEqual(ttk._dict_from_tcltuple(fakettuple), + self.assertEqual(ttk._dict_from_tcltuple(fakettuple), {'a': '{1 2 3}', 'something': 'foo'}) # passing a tuple with a single item should return an empty dict, # since it tries to break the tuple by pairs. - self.failIf(ttk._dict_from_tcltuple(('single', ))) + self.assertFalse(ttk._dict_from_tcltuple(('single', ))) sspec = MockStateSpec('a', 'b') - self.failUnlessEqual(ttk._dict_from_tcltuple(('-a', (sspec, 'val'))), + self.assertEqual(ttk._dict_from_tcltuple(('-a', (sspec, 'val'))), {'a': [('a', 'b', 'val')]}) - self.failUnlessEqual(ttk._dict_from_tcltuple((MockTclObj('-padding'), + self.assertEqual(ttk._dict_from_tcltuple((MockTclObj('-padding'), [MockTclObj('1'), 2, MockTclObj('3m')])), {'padding': [1, 2, '3m']}) def test_list_from_statespec(self): def test_it(sspec, value, res_value, states): - self.failUnlessEqual(ttk._list_from_statespec( + self.assertEqual(ttk._list_from_statespec( (sspec, value)), [states + (res_value, )]) states_even = tuple('state%d' % i for i in range(6)) @@ -323,19 +323,19 @@ class InternalFunctionsTest(unittest.TestCase): def test_list_from_layouttuple(self): # empty layout tuple - self.failIf(ttk._list_from_layouttuple(())) + self.assertFalse(ttk._list_from_layouttuple(())) # shortest layout tuple - self.failUnlessEqual(ttk._list_from_layouttuple(('name', )), + self.assertEqual(ttk._list_from_layouttuple(('name', )), [('name', {})]) # not so interesting ltuple sample_ltuple = ('name', '-option', 'value') - self.failUnlessEqual(ttk._list_from_layouttuple(sample_ltuple), + self.assertEqual(ttk._list_from_layouttuple(sample_ltuple), [('name', {'option': 'value'})]) # empty children - self.failUnlessEqual(ttk._list_from_layouttuple( + self.assertEqual(ttk._list_from_layouttuple( ('something', '-children', ())), [('something', {'children': []})] ) @@ -348,7 +348,7 @@ class InternalFunctionsTest(unittest.TestCase): ) ) ) - self.failUnlessEqual(ttk._list_from_layouttuple(ltuple), + self.assertEqual(ttk._list_from_layouttuple(ltuple), [('name', {'option': 'niceone', 'children': [('otherone', {'otheropt': 'othervalue', 'children': [('child', {})] @@ -357,13 +357,13 @@ class InternalFunctionsTest(unittest.TestCase): ) # bad tuples - self.failUnlessRaises(ValueError, ttk._list_from_layouttuple, + self.assertRaises(ValueError, ttk._list_from_layouttuple, ('name', 'no_minus')) - self.failUnlessRaises(ValueError, ttk._list_from_layouttuple, + self.assertRaises(ValueError, ttk._list_from_layouttuple, ('name', 'no_minus', 'value')) - self.failUnlessRaises(ValueError, ttk._list_from_layouttuple, + self.assertRaises(ValueError, ttk._list_from_layouttuple, ('something', '-children')) # no children - self.failUnlessRaises(ValueError, ttk._list_from_layouttuple, + self.assertRaises(ValueError, ttk._list_from_layouttuple, ('something', '-children', 'value')) # invalid children @@ -374,10 +374,10 @@ class InternalFunctionsTest(unittest.TestCase): return (opt, val) options = {'test': None} - self.failUnlessEqual(ttk._val_or_dict(options, func), "test val") + self.assertEqual(ttk._val_or_dict(options, func), "test val") options = {'test': 3} - self.failUnlessEqual(ttk._val_or_dict(options, func), options) + self.assertEqual(ttk._val_or_dict(options, func), options) def test_convert_stringval(self): @@ -386,34 +386,34 @@ class InternalFunctionsTest(unittest.TestCase): (None, 'None') ) for orig, expected in tests: - self.failUnlessEqual(ttk._convert_stringval(orig), expected) + self.assertEqual(ttk._convert_stringval(orig), expected) class TclObjsToPyTest(unittest.TestCase): def test_unicode(self): adict = {'opt': 'välúè'} - self.failUnlessEqual(ttk.tclobjs_to_py(adict), {'opt': 'välúè'}) + self.assertEqual(ttk.tclobjs_to_py(adict), {'opt': 'välúè'}) adict['opt'] = MockTclObj(adict['opt']) - self.failUnlessEqual(ttk.tclobjs_to_py(adict), {'opt': 'välúè'}) + self.assertEqual(ttk.tclobjs_to_py(adict), {'opt': 'välúè'}) def test_multivalues(self): adict = {'opt': [1, 2, 3, 4]} - self.failUnlessEqual(ttk.tclobjs_to_py(adict), {'opt': [1, 2, 3, 4]}) + self.assertEqual(ttk.tclobjs_to_py(adict), {'opt': [1, 2, 3, 4]}) adict['opt'] = [1, 'xm', 3] - self.failUnlessEqual(ttk.tclobjs_to_py(adict), {'opt': [1, 'xm', 3]}) + self.assertEqual(ttk.tclobjs_to_py(adict), {'opt': [1, 'xm', 3]}) adict['opt'] = (MockStateSpec('a', 'b'), 'válũè') - self.failUnlessEqual(ttk.tclobjs_to_py(adict), + self.assertEqual(ttk.tclobjs_to_py(adict), {'opt': [('a', 'b', 'válũè')]}) - self.failUnlessEqual(ttk.tclobjs_to_py({'x': ['y z']}), + self.assertEqual(ttk.tclobjs_to_py({'x': ['y z']}), {'x': ['y z']}) def test_nosplit(self): - self.failUnlessEqual(ttk.tclobjs_to_py({'text': 'some text'}), + self.assertEqual(ttk.tclobjs_to_py({'text': 'some text'}), {'text': 'some text'}) tests_nogui = (InternalFunctionsTest, TclObjsToPyTest) diff --git a/Lib/tkinter/test/test_ttk/test_style.py b/Lib/tkinter/test/test_ttk/test_style.py index 3eebb64..e9a1eb4 100644 --- a/Lib/tkinter/test/test_ttk/test_style.py +++ b/Lib/tkinter/test/test_ttk/test_style.py @@ -16,17 +16,17 @@ class StyleTest(unittest.TestCase): def test_configure(self): style = self.style style.configure('TButton', background='yellow') - self.failUnlessEqual(style.configure('TButton', 'background'), + self.assertEqual(style.configure('TButton', 'background'), 'yellow') - self.failUnless(isinstance(style.configure('TButton'), dict)) + self.assertTrue(isinstance(style.configure('TButton'), dict)) def test_map(self): style = self.style style.map('TButton', background=[('active', 'background', 'blue')]) - self.failUnlessEqual(style.map('TButton', 'background'), + self.assertEqual(style.map('TButton', 'background'), [('active', 'background', 'blue')]) - self.failUnless(isinstance(style.map('TButton'), dict)) + self.assertTrue(isinstance(style.map('TButton'), dict)) def test_lookup(self): @@ -34,38 +34,38 @@ class StyleTest(unittest.TestCase): style.configure('TButton', background='yellow') style.map('TButton', background=[('active', 'background', 'blue')]) - self.failUnlessEqual(style.lookup('TButton', 'background'), 'yellow') - self.failUnlessEqual(style.lookup('TButton', 'background', + self.assertEqual(style.lookup('TButton', 'background'), 'yellow') + self.assertEqual(style.lookup('TButton', 'background', ['active', 'background']), 'blue') - self.failUnlessEqual(style.lookup('TButton', 'optionnotdefined', + self.assertEqual(style.lookup('TButton', 'optionnotdefined', default='iknewit'), 'iknewit') def test_layout(self): style = self.style - self.failUnlessRaises(tkinter.TclError, style.layout, 'NotALayout') + self.assertRaises(tkinter.TclError, style.layout, 'NotALayout') tv_style = style.layout('Treeview') # "erase" Treeview layout style.layout('Treeview', '') - self.failUnlessEqual(style.layout('Treeview'), + self.assertEqual(style.layout('Treeview'), [('null', {'sticky': 'nswe'})] ) # restore layout style.layout('Treeview', tv_style) - self.failUnlessEqual(style.layout('Treeview'), tv_style) + self.assertEqual(style.layout('Treeview'), tv_style) # should return a list - self.failUnless(isinstance(style.layout('TButton'), list)) + self.assertTrue(isinstance(style.layout('TButton'), list)) # correct layout, but "option" doesn't exist as option - self.failUnlessRaises(tkinter.TclError, style.layout, 'Treeview', + self.assertRaises(tkinter.TclError, style.layout, 'Treeview', [('name', {'option': 'inexistent'})]) def test_theme_use(self): - self.failUnlessRaises(tkinter.TclError, self.style.theme_use, + self.assertRaises(tkinter.TclError, self.style.theme_use, 'nonexistingname') curr_theme = self.style.theme_use() @@ -79,8 +79,8 @@ class StyleTest(unittest.TestCase): # just one theme available, can't go on with tests return - self.failIf(curr_theme == new_theme) - self.failIf(new_theme != self.style.theme_use()) + self.assertFalse(curr_theme == new_theme) + self.assertFalse(new_theme != self.style.theme_use()) self.style.theme_use(curr_theme) diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py index 29fdce0..48a5223 100644 --- a/Lib/tkinter/test/test_ttk/test_widgets.py +++ b/Lib/tkinter/test/test_ttk/test_widgets.py @@ -24,48 +24,48 @@ class WidgetTest(unittest.TestCase): def test_identify(self): self.widget.update_idletasks() - self.failUnlessEqual(self.widget.identify(5, 5), "label") - self.failUnlessEqual(self.widget.identify(-1, -1), "") + self.assertEqual(self.widget.identify(5, 5), "label") + self.assertEqual(self.widget.identify(-1, -1), "") - self.failUnlessRaises(tkinter.TclError, self.widget.identify, None, 5) - self.failUnlessRaises(tkinter.TclError, self.widget.identify, 5, None) - self.failUnlessRaises(tkinter.TclError, self.widget.identify, 5, '') + self.assertRaises(tkinter.TclError, self.widget.identify, None, 5) + self.assertRaises(tkinter.TclError, self.widget.identify, 5, None) + self.assertRaises(tkinter.TclError, self.widget.identify, 5, '') def test_widget_state(self): # XXX not sure about the portability of all these tests - self.failUnlessEqual(self.widget.state(), ()) - self.failUnlessEqual(self.widget.instate(['!disabled']), True) + self.assertEqual(self.widget.state(), ()) + self.assertEqual(self.widget.instate(['!disabled']), True) # changing from !disabled to disabled - self.failUnlessEqual(self.widget.state(['disabled']), ('!disabled', )) + self.assertEqual(self.widget.state(['disabled']), ('!disabled', )) # no state change - self.failUnlessEqual(self.widget.state(['disabled']), ()) + self.assertEqual(self.widget.state(['disabled']), ()) # change back to !disable but also active - self.failUnlessEqual(self.widget.state(['!disabled', 'active']), + self.assertEqual(self.widget.state(['!disabled', 'active']), ('!active', 'disabled')) # no state changes, again - self.failUnlessEqual(self.widget.state(['!disabled', 'active']), ()) - self.failUnlessEqual(self.widget.state(['active', '!disabled']), ()) + self.assertEqual(self.widget.state(['!disabled', 'active']), ()) + self.assertEqual(self.widget.state(['active', '!disabled']), ()) def test_cb(arg1, **kw): return arg1, kw - self.failUnlessEqual(self.widget.instate(['!disabled'], + self.assertEqual(self.widget.instate(['!disabled'], test_cb, "hi", **{"msg": "there"}), ('hi', {'msg': 'there'})) # attempt to set invalid statespec currstate = self.widget.state() - self.failUnlessRaises(tkinter.TclError, self.widget.instate, + self.assertRaises(tkinter.TclError, self.widget.instate, ['badstate']) - self.failUnlessRaises(tkinter.TclError, self.widget.instate, + self.assertRaises(tkinter.TclError, self.widget.instate, ['disabled', 'badstate']) # verify that widget didn't change its state - self.failUnlessEqual(currstate, self.widget.state()) + self.assertEqual(currstate, self.widget.state()) # ensuring that passing None as state doesn't modify current state self.widget.state(['active', '!disabled']) - self.failUnlessEqual(self.widget.state(), ('active', )) + self.assertEqual(self.widget.state(), ('active', )) class ButtonTest(unittest.TestCase): @@ -74,7 +74,7 @@ class ButtonTest(unittest.TestCase): success = [] btn = ttk.Button(command=lambda: success.append(1)) btn.invoke() - self.failUnless(success) + self.assertTrue(success) class CheckbuttonTest(unittest.TestCase): @@ -88,21 +88,21 @@ class CheckbuttonTest(unittest.TestCase): cbtn = ttk.Checkbutton(command=cb_test) # the variable automatically created by ttk.Checkbutton is actually # undefined till we invoke the Checkbutton - self.failUnlessEqual(cbtn.state(), ('alternate', )) - self.failUnlessRaises(tkinter.TclError, cbtn.tk.globalgetvar, + self.assertEqual(cbtn.state(), ('alternate', )) + self.assertRaises(tkinter.TclError, cbtn.tk.globalgetvar, cbtn['variable']) res = cbtn.invoke() - self.failUnlessEqual(res, "cb test called") - self.failUnlessEqual(cbtn['onvalue'], + self.assertEqual(res, "cb test called") + self.assertEqual(cbtn['onvalue'], cbtn.tk.globalgetvar(cbtn['variable'])) - self.failUnless(success) + self.assertTrue(success) cbtn['command'] = '' res = cbtn.invoke() - self.failUnlessEqual(res, '') - self.failIf(len(success) > 1) - self.failUnlessEqual(cbtn['offvalue'], + self.assertEqual(res, '') + self.assertFalse(len(success) > 1) + self.assertEqual(cbtn['offvalue'], cbtn.tk.globalgetvar(cbtn['variable'])) @@ -138,7 +138,7 @@ class ComboboxTest(unittest.TestCase): self.combo.event_generate('') self.combo.update() - self.failUnless(success) + self.assertTrue(success) def test_postcommand(self): @@ -149,18 +149,18 @@ class ComboboxTest(unittest.TestCase): self.combo.wait_visibility() self._show_drop_down_listbox() - self.failUnless(success) + self.assertTrue(success) # testing postcommand removal self.combo['postcommand'] = '' self._show_drop_down_listbox() - self.failUnlessEqual(len(success), 1) + self.assertEqual(len(success), 1) def test_values(self): def check_get_current(getval, currval): - self.failUnlessEqual(self.combo.get(), getval) - self.failUnlessEqual(self.combo.current(), currval) + self.assertEqual(self.combo.get(), getval) + self.assertEqual(self.combo.current(), currval) check_get_current('', -1) @@ -182,17 +182,17 @@ class ComboboxTest(unittest.TestCase): # testing values with empty string set through configure self.combo.configure(values=[1, '', 2]) - self.failUnlessEqual(self.combo['values'], ('1', '', '2')) + self.assertEqual(self.combo['values'], ('1', '', '2')) # out of range - self.failUnlessRaises(tkinter.TclError, self.combo.current, + self.assertRaises(tkinter.TclError, self.combo.current, len(self.combo['values'])) # it expects an integer (or something that can be converted to int) - self.failUnlessRaises(tkinter.TclError, self.combo.current, '') + self.assertRaises(tkinter.TclError, self.combo.current, '') # testing creating combobox with empty string in values combo2 = ttk.Combobox(values=[1, 2, '']) - self.failUnlessEqual(combo2['values'], ('1', '2', '')) + self.assertEqual(combo2['values'], ('1', '2', '')) combo2.destroy() @@ -208,12 +208,12 @@ class EntryTest(unittest.TestCase): def test_bbox(self): - self.failUnlessEqual(len(self.entry.bbox(0)), 4) + self.assertEqual(len(self.entry.bbox(0)), 4) for item in self.entry.bbox(0): - self.failUnless(isinstance(item, int)) + self.assertTrue(isinstance(item, int)) - self.failUnlessRaises(tkinter.TclError, self.entry.bbox, 'noindex') - self.failUnlessRaises(tkinter.TclError, self.entry.bbox, None) + self.assertRaises(tkinter.TclError, self.entry.bbox, 'noindex') + self.assertRaises(tkinter.TclError, self.entry.bbox, None) def test_identify(self): @@ -221,12 +221,12 @@ class EntryTest(unittest.TestCase): self.entry.wait_visibility() self.entry.update_idletasks() - self.failUnlessEqual(self.entry.identify(5, 5), "textarea") - self.failUnlessEqual(self.entry.identify(-1, -1), "") + self.assertEqual(self.entry.identify(5, 5), "textarea") + self.assertEqual(self.entry.identify(-1, -1), "") - self.failUnlessRaises(tkinter.TclError, self.entry.identify, None, 5) - self.failUnlessRaises(tkinter.TclError, self.entry.identify, 5, None) - self.failUnlessRaises(tkinter.TclError, self.entry.identify, 5, '') + self.assertRaises(tkinter.TclError, self.entry.identify, None, 5) + self.assertRaises(tkinter.TclError, self.entry.identify, 5, None) + self.assertRaises(tkinter.TclError, self.entry.identify, 5, '') def test_validation_options(self): @@ -238,23 +238,23 @@ class EntryTest(unittest.TestCase): self.entry['invalidcommand'] = test_invalid self.entry.validate() - self.failUnless(success) + self.assertTrue(success) self.entry['invalidcommand'] = '' self.entry.validate() - self.failUnlessEqual(len(success), 1) + self.assertEqual(len(success), 1) self.entry['invalidcommand'] = test_invalid self.entry['validatecommand'] = lambda: True self.entry.validate() - self.failUnlessEqual(len(success), 1) + self.assertEqual(len(success), 1) self.entry['validatecommand'] = '' self.entry.validate() - self.failUnlessEqual(len(success), 1) + self.assertEqual(len(success), 1) self.entry['validatecommand'] = True - self.failUnlessRaises(tkinter.TclError, self.entry.validate) + self.assertRaises(tkinter.TclError, self.entry.validate) def test_validation(self): @@ -271,8 +271,8 @@ class EntryTest(unittest.TestCase): self.entry.insert('end', 1) self.entry.insert('end', 'a') - self.failUnlessEqual(validation, [False, True]) - self.failUnlessEqual(self.entry.get(), 'a') + self.assertEqual(validation, [False, True]) + self.assertEqual(self.entry.get(), 'a') def test_revalidation(self): @@ -285,19 +285,19 @@ class EntryTest(unittest.TestCase): self.entry['validatecommand'] = self.entry.register(validate), '%P' self.entry.insert('end', 'avocado') - self.failUnlessEqual(self.entry.validate(), True) - self.failUnlessEqual(self.entry.state(), ()) + self.assertEqual(self.entry.validate(), True) + self.assertEqual(self.entry.state(), ()) self.entry.delete(0, 'end') - self.failUnlessEqual(self.entry.get(), '') + self.assertEqual(self.entry.get(), '') self.entry.insert('end', 'a1b') - self.failUnlessEqual(self.entry.validate(), False) - self.failUnlessEqual(self.entry.state(), ('invalid', )) + self.assertEqual(self.entry.validate(), False) + self.assertEqual(self.entry.state(), ('invalid', )) self.entry.delete(1) - self.failUnlessEqual(self.entry.validate(), True) - self.failUnlessEqual(self.entry.state(), ()) + self.assertEqual(self.entry.validate(), True) + self.assertEqual(self.entry.state(), ()) class PanedwindowTest(unittest.TestCase): @@ -315,108 +315,108 @@ class PanedwindowTest(unittest.TestCase): # attempt to add a child that is not a direct child of the paned window label = ttk.Label(self.paned) child = ttk.Label(label) - self.failUnlessRaises(tkinter.TclError, self.paned.add, child) + self.assertRaises(tkinter.TclError, self.paned.add, child) label.destroy() child.destroy() # another attempt label = ttk.Label() child = ttk.Label(label) - self.failUnlessRaises(tkinter.TclError, self.paned.add, child) + self.assertRaises(tkinter.TclError, self.paned.add, child) child.destroy() label.destroy() good_child = ttk.Label() self.paned.add(good_child) # re-adding a child is not accepted - self.failUnlessRaises(tkinter.TclError, self.paned.add, good_child) + self.assertRaises(tkinter.TclError, self.paned.add, good_child) other_child = ttk.Label(self.paned) self.paned.add(other_child) - self.failUnlessEqual(self.paned.pane(0), self.paned.pane(1)) - self.failUnlessRaises(tkinter.TclError, self.paned.pane, 2) + self.assertEqual(self.paned.pane(0), self.paned.pane(1)) + self.assertRaises(tkinter.TclError, self.paned.pane, 2) good_child.destroy() other_child.destroy() - self.failUnlessRaises(tkinter.TclError, self.paned.pane, 0) + self.assertRaises(tkinter.TclError, self.paned.pane, 0) def test_forget(self): - self.failUnlessRaises(tkinter.TclError, self.paned.forget, None) - self.failUnlessRaises(tkinter.TclError, self.paned.forget, 0) + self.assertRaises(tkinter.TclError, self.paned.forget, None) + self.assertRaises(tkinter.TclError, self.paned.forget, 0) self.paned.add(ttk.Label()) self.paned.forget(0) - self.failUnlessRaises(tkinter.TclError, self.paned.forget, 0) + self.assertRaises(tkinter.TclError, self.paned.forget, 0) def test_insert(self): - self.failUnlessRaises(tkinter.TclError, self.paned.insert, None, 0) - self.failUnlessRaises(tkinter.TclError, self.paned.insert, 0, None) - self.failUnlessRaises(tkinter.TclError, self.paned.insert, 0, 0) + self.assertRaises(tkinter.TclError, self.paned.insert, None, 0) + self.assertRaises(tkinter.TclError, self.paned.insert, 0, None) + self.assertRaises(tkinter.TclError, self.paned.insert, 0, 0) child = ttk.Label() child2 = ttk.Label() child3 = ttk.Label() - self.failUnlessRaises(tkinter.TclError, self.paned.insert, 0, child) + self.assertRaises(tkinter.TclError, self.paned.insert, 0, child) self.paned.insert('end', child2) self.paned.insert(0, child) - self.failUnlessEqual(self.paned.panes(), (str(child), str(child2))) + self.assertEqual(self.paned.panes(), (str(child), str(child2))) self.paned.insert(0, child2) - self.failUnlessEqual(self.paned.panes(), (str(child2), str(child))) + self.assertEqual(self.paned.panes(), (str(child2), str(child))) self.paned.insert('end', child3) - self.failUnlessEqual(self.paned.panes(), + self.assertEqual(self.paned.panes(), (str(child2), str(child), str(child3))) # reinserting a child should move it to its current position panes = self.paned.panes() self.paned.insert('end', child3) - self.failUnlessEqual(panes, self.paned.panes()) + self.assertEqual(panes, self.paned.panes()) # moving child3 to child2 position should result in child2 ending up # in previous child position and child ending up in previous child3 # position self.paned.insert(child2, child3) - self.failUnlessEqual(self.paned.panes(), + self.assertEqual(self.paned.panes(), (str(child3), str(child2), str(child))) def test_pane(self): - self.failUnlessRaises(tkinter.TclError, self.paned.pane, 0) + self.assertRaises(tkinter.TclError, self.paned.pane, 0) child = ttk.Label() self.paned.add(child) - self.failUnless(isinstance(self.paned.pane(0), dict)) - self.failUnlessEqual(self.paned.pane(0, weight=None), 0) + self.assertTrue(isinstance(self.paned.pane(0), dict)) + self.assertEqual(self.paned.pane(0, weight=None), 0) # newer form for querying a single option - self.failUnlessEqual(self.paned.pane(0, 'weight'), 0) - self.failUnlessEqual(self.paned.pane(0), self.paned.pane(str(child))) + self.assertEqual(self.paned.pane(0, 'weight'), 0) + self.assertEqual(self.paned.pane(0), self.paned.pane(str(child))) - self.failUnlessRaises(tkinter.TclError, self.paned.pane, 0, + self.assertRaises(tkinter.TclError, self.paned.pane, 0, badoption='somevalue') def test_sashpos(self): - self.failUnlessRaises(tkinter.TclError, self.paned.sashpos, None) - self.failUnlessRaises(tkinter.TclError, self.paned.sashpos, '') - self.failUnlessRaises(tkinter.TclError, self.paned.sashpos, 0) + self.assertRaises(tkinter.TclError, self.paned.sashpos, None) + self.assertRaises(tkinter.TclError, self.paned.sashpos, '') + self.assertRaises(tkinter.TclError, self.paned.sashpos, 0) child = ttk.Label(self.paned, text='a') self.paned.add(child, weight=1) - self.failUnlessRaises(tkinter.TclError, self.paned.sashpos, 0) + self.assertRaises(tkinter.TclError, self.paned.sashpos, 0) child2 = ttk.Label(self.paned, text='b') self.paned.add(child2) - self.failUnlessRaises(tkinter.TclError, self.paned.sashpos, 1) + self.assertRaises(tkinter.TclError, self.paned.sashpos, 1) self.paned.pack(expand=True, fill='both') self.paned.wait_visibility() curr_pos = self.paned.sashpos(0) self.paned.sashpos(0, 1000) - self.failUnless(curr_pos != self.paned.sashpos(0)) - self.failUnless(isinstance(self.paned.sashpos(0), int)) + self.assertTrue(curr_pos != self.paned.sashpos(0)) + self.assertTrue(isinstance(self.paned.sashpos(0), int)) class RadiobuttonTest(unittest.TestCase): @@ -432,21 +432,21 @@ class RadiobuttonTest(unittest.TestCase): cbtn2 = ttk.Radiobutton(command=cb_test, variable=myvar, value=1) res = cbtn.invoke() - self.failUnlessEqual(res, "cb test called") - self.failUnlessEqual(cbtn['value'], myvar.get()) - self.failUnlessEqual(myvar.get(), + self.assertEqual(res, "cb test called") + self.assertEqual(cbtn['value'], myvar.get()) + self.assertEqual(myvar.get(), cbtn.tk.globalgetvar(cbtn['variable'])) - self.failUnless(success) + self.assertTrue(success) cbtn2['command'] = '' res = cbtn2.invoke() - self.failUnlessEqual(res, '') - self.failIf(len(success) > 1) - self.failUnlessEqual(cbtn2['value'], myvar.get()) - self.failUnlessEqual(myvar.get(), + self.assertEqual(res, '') + self.assertFalse(len(success) > 1) + self.assertEqual(cbtn2['value'], myvar.get()) + self.assertEqual(myvar.get(), cbtn.tk.globalgetvar(cbtn['variable'])) - self.failUnlessEqual(str(cbtn['variable']), str(cbtn2['variable'])) + self.assertEqual(str(cbtn['variable']), str(cbtn2['variable'])) @@ -472,27 +472,27 @@ class ScaleTest(unittest.TestCase): self.scale['from_'] = 10 self.scale['to'] = 3 - self.failIf(failure) + self.assertFalse(failure) failure = [1, 1, 1] self.scale.configure(from_=2, to=5) self.scale.configure(from_=0, to=-2) self.scale.configure(to=10) - self.failIf(failure) + self.assertFalse(failure) def test_get(self): scale_width = self.scale.winfo_width() - self.failUnlessEqual(self.scale.get(scale_width, 0), self.scale['to']) + self.assertEqual(self.scale.get(scale_width, 0), self.scale['to']) - self.failUnlessEqual(self.scale.get(0, 0), self.scale['from']) - self.failUnlessEqual(self.scale.get(), self.scale['value']) + self.assertEqual(self.scale.get(0, 0), self.scale['from']) + self.assertEqual(self.scale.get(), self.scale['value']) self.scale['value'] = 30 - self.failUnlessEqual(self.scale.get(), self.scale['value']) + self.assertEqual(self.scale.get(), self.scale['value']) - self.failUnlessRaises(tkinter.TclError, self.scale.get, '', 0) - self.failUnlessRaises(tkinter.TclError, self.scale.get, 0, '') + self.assertRaises(tkinter.TclError, self.scale.get, '', 0) + self.assertRaises(tkinter.TclError, self.scale.get, 0, '') def test_set(self): @@ -500,30 +500,30 @@ class ScaleTest(unittest.TestCase): max = self.scale['to'] new_max = max + 10 self.scale.set(new_max) - self.failUnlessEqual(self.scale.get(), max) + self.assertEqual(self.scale.get(), max) min = self.scale['from'] self.scale.set(min - 1) - self.failUnlessEqual(self.scale.get(), min) + self.assertEqual(self.scale.get(), min) # changing directly the variable doesn't impose this limitation tho var = tkinter.DoubleVar() self.scale['variable'] = var var.set(max + 5) - self.failUnlessEqual(self.scale.get(), var.get()) - self.failUnlessEqual(self.scale.get(), max + 5) + self.assertEqual(self.scale.get(), var.get()) + self.assertEqual(self.scale.get(), max + 5) del var # the same happens with the value option self.scale['value'] = max + 10 - self.failUnlessEqual(self.scale.get(), max + 10) - self.failUnlessEqual(self.scale.get(), self.scale['value']) + self.assertEqual(self.scale.get(), max + 10) + self.assertEqual(self.scale.get(), self.scale['value']) # nevertheless, note that the max/min values we can get specifying # x, y coords are the ones according to the current range - self.failUnlessEqual(self.scale.get(0, 0), min) - self.failUnlessEqual(self.scale.get(self.scale.winfo_width(), 0), max) + self.assertEqual(self.scale.get(0, 0), min) + self.assertEqual(self.scale.get(self.scale.winfo_width(), 0), max) - self.failUnlessRaises(tkinter.TclError, self.scale.set, None) + self.assertRaises(tkinter.TclError, self.scale.set, None) class NotebookTest(unittest.TestCase): @@ -546,18 +546,18 @@ class NotebookTest(unittest.TestCase): def test_tab_identifiers(self): self.nb.forget(0) self.nb.hide(self.child2) - self.failUnlessRaises(tkinter.TclError, self.nb.tab, self.child1) - self.failUnlessEqual(self.nb.index('end'), 1) + self.assertRaises(tkinter.TclError, self.nb.tab, self.child1) + self.assertEqual(self.nb.index('end'), 1) self.nb.add(self.child2) - self.failUnlessEqual(self.nb.index('end'), 1) + self.assertEqual(self.nb.index('end'), 1) self.nb.select(self.child2) - self.failUnless(self.nb.tab('current')) + self.assertTrue(self.nb.tab('current')) self.nb.add(self.child1, text='a') self.nb.pack() self.nb.wait_visibility() - self.failUnlessEqual(self.nb.tab('@5,5'), self.nb.tab('current')) + self.assertEqual(self.nb.tab('@5,5'), self.nb.tab('current')) for i in range(5, 100, 5): if self.nb.tab('@%d, 5' % i, text=None) == 'a': @@ -567,17 +567,17 @@ class NotebookTest(unittest.TestCase): def test_add_and_hidden(self): - self.failUnlessRaises(tkinter.TclError, self.nb.hide, -1) - self.failUnlessRaises(tkinter.TclError, self.nb.hide, 'hi') - self.failUnlessRaises(tkinter.TclError, self.nb.hide, None) - self.failUnlessRaises(tkinter.TclError, self.nb.add, None) - self.failUnlessRaises(tkinter.TclError, self.nb.add, ttk.Label(), + self.assertRaises(tkinter.TclError, self.nb.hide, -1) + self.assertRaises(tkinter.TclError, self.nb.hide, 'hi') + self.assertRaises(tkinter.TclError, self.nb.hide, None) + self.assertRaises(tkinter.TclError, self.nb.add, None) + self.assertRaises(tkinter.TclError, self.nb.add, ttk.Label(), unknown='option') tabs = self.nb.tabs() self.nb.hide(self.child1) self.nb.add(self.child1) - self.failUnlessEqual(self.nb.tabs(), tabs) + self.assertEqual(self.nb.tabs(), tabs) child = ttk.Label() self.nb.add(child, text='c') @@ -588,70 +588,70 @@ class NotebookTest(unittest.TestCase): child2_index = self.nb.index(self.child2) self.nb.hide(self.child2) self.nb.add(self.child2) - self.failUnlessEqual(self.nb.tabs(), tabs) - self.failUnlessEqual(self.nb.index(self.child2), child2_index) - self.failUnless(str(self.child2) == self.nb.tabs()[child2_index]) + self.assertEqual(self.nb.tabs(), tabs) + self.assertEqual(self.nb.index(self.child2), child2_index) + self.assertTrue(str(self.child2) == self.nb.tabs()[child2_index]) # but the tab next to it (not hidden) is the one selected now - self.failUnlessEqual(self.nb.index('current'), curr + 1) + self.assertEqual(self.nb.index('current'), curr + 1) def test_forget(self): - self.failUnlessRaises(tkinter.TclError, self.nb.forget, -1) - self.failUnlessRaises(tkinter.TclError, self.nb.forget, 'hi') - self.failUnlessRaises(tkinter.TclError, self.nb.forget, None) + self.assertRaises(tkinter.TclError, self.nb.forget, -1) + self.assertRaises(tkinter.TclError, self.nb.forget, 'hi') + self.assertRaises(tkinter.TclError, self.nb.forget, None) tabs = self.nb.tabs() child1_index = self.nb.index(self.child1) self.nb.forget(self.child1) - self.failIf(str(self.child1) in self.nb.tabs()) - self.failUnlessEqual(len(tabs) - 1, len(self.nb.tabs())) + self.assertFalse(str(self.child1) in self.nb.tabs()) + self.assertEqual(len(tabs) - 1, len(self.nb.tabs())) self.nb.add(self.child1) - self.failUnlessEqual(self.nb.index(self.child1), 1) - self.failIf(child1_index == self.nb.index(self.child1)) + self.assertEqual(self.nb.index(self.child1), 1) + self.assertFalse(child1_index == self.nb.index(self.child1)) def test_index(self): - self.failUnlessRaises(tkinter.TclError, self.nb.index, -1) - self.failUnlessRaises(tkinter.TclError, self.nb.index, None) + self.assertRaises(tkinter.TclError, self.nb.index, -1) + self.assertRaises(tkinter.TclError, self.nb.index, None) - self.failUnless(isinstance(self.nb.index('end'), int)) - self.failUnlessEqual(self.nb.index(self.child1), 0) - self.failUnlessEqual(self.nb.index(self.child2), 1) - self.failUnlessEqual(self.nb.index('end'), 2) + self.assertTrue(isinstance(self.nb.index('end'), int)) + self.assertEqual(self.nb.index(self.child1), 0) + self.assertEqual(self.nb.index(self.child2), 1) + self.assertEqual(self.nb.index('end'), 2) def test_insert(self): # moving tabs tabs = self.nb.tabs() self.nb.insert(1, tabs[0]) - self.failUnlessEqual(self.nb.tabs(), (tabs[1], tabs[0])) + self.assertEqual(self.nb.tabs(), (tabs[1], tabs[0])) self.nb.insert(self.child1, self.child2) - self.failUnlessEqual(self.nb.tabs(), tabs) + self.assertEqual(self.nb.tabs(), tabs) self.nb.insert('end', self.child1) - self.failUnlessEqual(self.nb.tabs(), (tabs[1], tabs[0])) + self.assertEqual(self.nb.tabs(), (tabs[1], tabs[0])) self.nb.insert('end', 0) - self.failUnlessEqual(self.nb.tabs(), tabs) + self.assertEqual(self.nb.tabs(), tabs) # bad moves - self.failUnlessRaises(tkinter.TclError, self.nb.insert, 2, tabs[0]) - self.failUnlessRaises(tkinter.TclError, self.nb.insert, -1, tabs[0]) + self.assertRaises(tkinter.TclError, self.nb.insert, 2, tabs[0]) + self.assertRaises(tkinter.TclError, self.nb.insert, -1, tabs[0]) # new tab child3 = ttk.Label() self.nb.insert(1, child3) - self.failUnlessEqual(self.nb.tabs(), (tabs[0], str(child3), tabs[1])) + self.assertEqual(self.nb.tabs(), (tabs[0], str(child3), tabs[1])) self.nb.forget(child3) - self.failUnlessEqual(self.nb.tabs(), tabs) + self.assertEqual(self.nb.tabs(), tabs) self.nb.insert(self.child1, child3) - self.failUnlessEqual(self.nb.tabs(), (str(child3), ) + tabs) + self.assertEqual(self.nb.tabs(), (str(child3), ) + tabs) self.nb.forget(child3) - self.failUnlessRaises(tkinter.TclError, self.nb.insert, 2, child3) - self.failUnlessRaises(tkinter.TclError, self.nb.insert, -1, child3) + self.assertRaises(tkinter.TclError, self.nb.insert, 2, child3) + self.assertRaises(tkinter.TclError, self.nb.insert, -1, child3) # bad inserts - self.failUnlessRaises(tkinter.TclError, self.nb.insert, 'end', None) - self.failUnlessRaises(tkinter.TclError, self.nb.insert, None, 0) - self.failUnlessRaises(tkinter.TclError, self.nb.insert, None, None) + self.assertRaises(tkinter.TclError, self.nb.insert, 'end', None) + self.assertRaises(tkinter.TclError, self.nb.insert, None, 0) + self.assertRaises(tkinter.TclError, self.nb.insert, None, None) def test_select(self): @@ -665,36 +665,36 @@ class NotebookTest(unittest.TestCase): self.nb.bind('<>', lambda evt: tab_changed.append(True)) - self.failUnlessEqual(self.nb.select(), str(self.child1)) + self.assertEqual(self.nb.select(), str(self.child1)) self.nb.select(self.child2) - self.failUnless(success) - self.failUnlessEqual(self.nb.select(), str(self.child2)) + self.assertTrue(success) + self.assertEqual(self.nb.select(), str(self.child2)) self.nb.update() - self.failUnless(tab_changed) + self.assertTrue(tab_changed) def test_tab(self): - self.failUnlessRaises(tkinter.TclError, self.nb.tab, -1) - self.failUnlessRaises(tkinter.TclError, self.nb.tab, 'notab') - self.failUnlessRaises(tkinter.TclError, self.nb.tab, None) + self.assertRaises(tkinter.TclError, self.nb.tab, -1) + self.assertRaises(tkinter.TclError, self.nb.tab, 'notab') + self.assertRaises(tkinter.TclError, self.nb.tab, None) - self.failUnless(isinstance(self.nb.tab(self.child1), dict)) - self.failUnlessEqual(self.nb.tab(self.child1, text=None), 'a') + self.assertTrue(isinstance(self.nb.tab(self.child1), dict)) + self.assertEqual(self.nb.tab(self.child1, text=None), 'a') # newer form for querying a single option - self.failUnlessEqual(self.nb.tab(self.child1, 'text'), 'a') + self.assertEqual(self.nb.tab(self.child1, 'text'), 'a') self.nb.tab(self.child1, text='abc') - self.failUnlessEqual(self.nb.tab(self.child1, text=None), 'abc') - self.failUnlessEqual(self.nb.tab(self.child1, 'text'), 'abc') + self.assertEqual(self.nb.tab(self.child1, text=None), 'abc') + self.assertEqual(self.nb.tab(self.child1, 'text'), 'abc') def test_tabs(self): - self.failUnlessEqual(len(self.nb.tabs()), 2) + self.assertEqual(len(self.nb.tabs()), 2) self.nb.forget(self.child1) self.nb.forget(self.child2) - self.failUnlessEqual(self.nb.tabs(), ()) + self.assertEqual(self.nb.tabs(), ()) def test_traversal(self): @@ -705,16 +705,16 @@ class NotebookTest(unittest.TestCase): support.simulate_mouse_click(self.nb, 5, 5) self.nb.event_generate('') - self.failUnlessEqual(self.nb.select(), str(self.child2)) + self.assertEqual(self.nb.select(), str(self.child2)) self.nb.event_generate('') - self.failUnlessEqual(self.nb.select(), str(self.child1)) + self.assertEqual(self.nb.select(), str(self.child1)) self.nb.event_generate('') - self.failUnlessEqual(self.nb.select(), str(self.child2)) + self.assertEqual(self.nb.select(), str(self.child2)) self.nb.tab(self.child1, text='a', underline=0) self.nb.enable_traversal() self.nb.event_generate('') - self.failUnlessEqual(self.nb.select(), str(self.child1)) + self.assertEqual(self.nb.select(), str(self.child1)) class TreeviewTest(unittest.TestCase): @@ -730,17 +730,17 @@ class TreeviewTest(unittest.TestCase): def test_bbox(self): self.tv.pack() - self.failUnlessEqual(self.tv.bbox(''), '') + self.assertEqual(self.tv.bbox(''), '') self.tv.wait_visibility() self.tv.update() item_id = self.tv.insert('', 'end') children = self.tv.get_children() - self.failUnless(children) + self.assertTrue(children) bbox = self.tv.bbox(children[0]) - self.failUnlessEqual(len(bbox), 4) - self.failUnless(isinstance(bbox, tuple)) + self.assertEqual(len(bbox), 4) + self.assertTrue(isinstance(bbox, tuple)) for item in bbox: if not isinstance(item, int): self.fail("Invalid bounding box: %s" % bbox) @@ -751,86 +751,86 @@ class TreeviewTest(unittest.TestCase): self.tv.column('test', width=50) bbox_column0 = self.tv.bbox(children[0], 0) root_width = self.tv.column('#0', width=None) - self.failUnlessEqual(bbox_column0[0], bbox[0] + root_width) + self.assertEqual(bbox_column0[0], bbox[0] + root_width) # verify that bbox of a closed item is the empty string child1 = self.tv.insert(item_id, 'end') - self.failUnlessEqual(self.tv.bbox(child1), '') + self.assertEqual(self.tv.bbox(child1), '') def test_children(self): # no children yet, should get an empty tuple - self.failUnlessEqual(self.tv.get_children(), ()) + self.assertEqual(self.tv.get_children(), ()) item_id = self.tv.insert('', 'end') - self.failUnless(isinstance(self.tv.get_children(), tuple)) - self.failUnlessEqual(self.tv.get_children()[0], item_id) + self.assertTrue(isinstance(self.tv.get_children(), tuple)) + self.assertEqual(self.tv.get_children()[0], item_id) # add item_id and child3 as children of child2 child2 = self.tv.insert('', 'end') child3 = self.tv.insert('', 'end') self.tv.set_children(child2, item_id, child3) - self.failUnlessEqual(self.tv.get_children(child2), (item_id, child3)) + self.assertEqual(self.tv.get_children(child2), (item_id, child3)) # child3 has child2 as parent, thus trying to set child2 as a children # of child3 should result in an error - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, self.tv.set_children, child3, child2) # remove child2 children self.tv.set_children(child2) - self.failUnlessEqual(self.tv.get_children(child2), ()) + self.assertEqual(self.tv.get_children(child2), ()) # remove root's children self.tv.set_children('') - self.failUnlessEqual(self.tv.get_children(), ()) + self.assertEqual(self.tv.get_children(), ()) def test_column(self): # return a dict with all options/values - self.failUnless(isinstance(self.tv.column('#0'), dict)) + self.assertTrue(isinstance(self.tv.column('#0'), dict)) # return a single value of the given option - self.failUnless(isinstance(self.tv.column('#0', width=None), int)) + self.assertTrue(isinstance(self.tv.column('#0', width=None), int)) # set a new value for an option self.tv.column('#0', width=10) # testing new way to get option value - self.failUnlessEqual(self.tv.column('#0', 'width'), 10) - self.failUnlessEqual(self.tv.column('#0', width=None), 10) + self.assertEqual(self.tv.column('#0', 'width'), 10) + self.assertEqual(self.tv.column('#0', width=None), 10) # check read-only option - self.failUnlessRaises(tkinter.TclError, self.tv.column, '#0', id='X') + self.assertRaises(tkinter.TclError, self.tv.column, '#0', id='X') - self.failUnlessRaises(tkinter.TclError, self.tv.column, 'invalid') + self.assertRaises(tkinter.TclError, self.tv.column, 'invalid') invalid_kws = [ {'unknown_option': 'some value'}, {'stretch': 'wrong'}, {'anchor': 'wrong'}, {'width': 'wrong'}, {'minwidth': 'wrong'} ] for kw in invalid_kws: - self.failUnlessRaises(tkinter.TclError, self.tv.column, '#0', + self.assertRaises(tkinter.TclError, self.tv.column, '#0', **kw) def test_delete(self): - self.failUnlessRaises(tkinter.TclError, self.tv.delete, '#0') + self.assertRaises(tkinter.TclError, self.tv.delete, '#0') item_id = self.tv.insert('', 'end') item2 = self.tv.insert(item_id, 'end') - self.failUnlessEqual(self.tv.get_children(), (item_id, )) - self.failUnlessEqual(self.tv.get_children(item_id), (item2, )) + self.assertEqual(self.tv.get_children(), (item_id, )) + self.assertEqual(self.tv.get_children(item_id), (item2, )) self.tv.delete(item_id) - self.failIf(self.tv.get_children()) + self.assertFalse(self.tv.get_children()) # reattach should fail - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, self.tv.reattach, item_id, '', 'end') # test multiple item delete item1 = self.tv.insert('', 'end') item2 = self.tv.insert('', 'end') - self.failUnlessEqual(self.tv.get_children(), (item1, item2)) + self.assertEqual(self.tv.get_children(), (item1, item2)) self.tv.delete(item1, item2) - self.failIf(self.tv.get_children()) + self.assertFalse(self.tv.get_children()) def test_detach_reattach(self): @@ -840,81 +840,81 @@ class TreeviewTest(unittest.TestCase): # calling detach without items is valid, although it does nothing prev = self.tv.get_children() self.tv.detach() # this should do nothing - self.failUnlessEqual(prev, self.tv.get_children()) + self.assertEqual(prev, self.tv.get_children()) - self.failUnlessEqual(self.tv.get_children(), (item_id, )) - self.failUnlessEqual(self.tv.get_children(item_id), (item2, )) + self.assertEqual(self.tv.get_children(), (item_id, )) + self.assertEqual(self.tv.get_children(item_id), (item2, )) # detach item with children self.tv.detach(item_id) - self.failIf(self.tv.get_children()) + self.assertFalse(self.tv.get_children()) # reattach item with children self.tv.reattach(item_id, '', 'end') - self.failUnlessEqual(self.tv.get_children(), (item_id, )) - self.failUnlessEqual(self.tv.get_children(item_id), (item2, )) + self.assertEqual(self.tv.get_children(), (item_id, )) + self.assertEqual(self.tv.get_children(item_id), (item2, )) # move a children to the root self.tv.move(item2, '', 'end') - self.failUnlessEqual(self.tv.get_children(), (item_id, item2)) - self.failUnlessEqual(self.tv.get_children(item_id), ()) + self.assertEqual(self.tv.get_children(), (item_id, item2)) + self.assertEqual(self.tv.get_children(item_id), ()) # bad values - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, self.tv.reattach, 'nonexistent', '', 'end') - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, self.tv.detach, 'nonexistent') - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, self.tv.reattach, item2, 'otherparent', 'end') - self.failUnlessRaises(tkinter.TclError, + self.assertRaises(tkinter.TclError, self.tv.reattach, item2, '', 'invalid') # multiple detach self.tv.detach(item_id, item2) - self.failUnlessEqual(self.tv.get_children(), ()) - self.failUnlessEqual(self.tv.get_children(item_id), ()) + self.assertEqual(self.tv.get_children(), ()) + self.assertEqual(self.tv.get_children(item_id), ()) def test_exists(self): - self.failUnlessEqual(self.tv.exists('something'), False) - self.failUnlessEqual(self.tv.exists(''), True) - self.failUnlessEqual(self.tv.exists({}), False) + self.assertEqual(self.tv.exists('something'), False) + self.assertEqual(self.tv.exists(''), True) + self.assertEqual(self.tv.exists({}), False) # the following will make a tk.call equivalent to # tk.call(treeview, "exists") which should result in an error # in the tcl interpreter since tk requires an item. - self.failUnlessRaises(tkinter.TclError, self.tv.exists, None) + self.assertRaises(tkinter.TclError, self.tv.exists, None) def test_focus(self): # nothing is focused right now - self.failUnlessEqual(self.tv.focus(), '') + self.assertEqual(self.tv.focus(), '') item1 = self.tv.insert('', 'end') self.tv.focus(item1) - self.failUnlessEqual(self.tv.focus(), item1) + self.assertEqual(self.tv.focus(), item1) self.tv.delete(item1) - self.failUnlessEqual(self.tv.focus(), '') + self.assertEqual(self.tv.focus(), '') # try focusing inexistent item - self.failUnlessRaises(tkinter.TclError, self.tv.focus, 'hi') + self.assertRaises(tkinter.TclError, self.tv.focus, 'hi') def test_heading(self): # check a dict is returned - self.failUnless(isinstance(self.tv.heading('#0'), dict)) + self.assertTrue(isinstance(self.tv.heading('#0'), dict)) # check a value is returned self.tv.heading('#0', text='hi') - self.failUnlessEqual(self.tv.heading('#0', 'text'), 'hi') - self.failUnlessEqual(self.tv.heading('#0', text=None), 'hi') + self.assertEqual(self.tv.heading('#0', 'text'), 'hi') + self.assertEqual(self.tv.heading('#0', text=None), 'hi') # invalid option - self.failUnlessRaises(tkinter.TclError, self.tv.heading, '#0', + self.assertRaises(tkinter.TclError, self.tv.heading, '#0', background=None) # invalid value - self.failUnlessRaises(tkinter.TclError, self.tv.heading, '#0', + self.assertRaises(tkinter.TclError, self.tv.heading, '#0', anchor=1) @@ -940,7 +940,7 @@ class TreeviewTest(unittest.TestCase): success = [] commands = self.tv.master._tclCommands self.tv.heading('#0', command=str(self.tv.heading('#0', command=None))) - self.failUnlessEqual(commands, self.tv.master._tclCommands) + self.assertEqual(commands, self.tv.master._tclCommands) simulate_heading_click(5, 5) if not success: self.fail("The command associated to the treeview heading wasn't " @@ -954,92 +954,92 @@ class TreeviewTest(unittest.TestCase): def test_index(self): # item 'what' doesn't exist - self.failUnlessRaises(tkinter.TclError, self.tv.index, 'what') + self.assertRaises(tkinter.TclError, self.tv.index, 'what') - self.failUnlessEqual(self.tv.index(''), 0) + self.assertEqual(self.tv.index(''), 0) item1 = self.tv.insert('', 'end') item2 = self.tv.insert('', 'end') c1 = self.tv.insert(item1, 'end') c2 = self.tv.insert(item1, 'end') - self.failUnlessEqual(self.tv.index(item1), 0) - self.failUnlessEqual(self.tv.index(c1), 0) - self.failUnlessEqual(self.tv.index(c2), 1) - self.failUnlessEqual(self.tv.index(item2), 1) + self.assertEqual(self.tv.index(item1), 0) + self.assertEqual(self.tv.index(c1), 0) + self.assertEqual(self.tv.index(c2), 1) + self.assertEqual(self.tv.index(item2), 1) self.tv.move(item2, '', 0) - self.failUnlessEqual(self.tv.index(item2), 0) - self.failUnlessEqual(self.tv.index(item1), 1) + self.assertEqual(self.tv.index(item2), 0) + self.assertEqual(self.tv.index(item1), 1) # check that index still works even after its parent and siblings # have been detached self.tv.detach(item1) - self.failUnlessEqual(self.tv.index(c2), 1) + self.assertEqual(self.tv.index(c2), 1) self.tv.detach(c1) - self.failUnlessEqual(self.tv.index(c2), 0) + self.assertEqual(self.tv.index(c2), 0) # but it fails after item has been deleted self.tv.delete(item1) - self.failUnlessRaises(tkinter.TclError, self.tv.index, c2) + self.assertRaises(tkinter.TclError, self.tv.index, c2) def test_insert_item(self): # parent 'none' doesn't exist - self.failUnlessRaises(tkinter.TclError, self.tv.insert, 'none', 'end') + self.assertRaises(tkinter.TclError, self.tv.insert, 'none', 'end') # open values - self.failUnlessRaises(tkinter.TclError, self.tv.insert, '', 'end', + self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', open='') - self.failUnlessRaises(tkinter.TclError, self.tv.insert, '', 'end', + self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', open='please') - self.failIf(self.tv.delete(self.tv.insert('', 'end', open=True))) - self.failIf(self.tv.delete(self.tv.insert('', 'end', open=False))) + self.assertFalse(self.tv.delete(self.tv.insert('', 'end', open=True))) + self.assertFalse(self.tv.delete(self.tv.insert('', 'end', open=False))) # invalid index - self.failUnlessRaises(tkinter.TclError, self.tv.insert, '', 'middle') + self.assertRaises(tkinter.TclError, self.tv.insert, '', 'middle') # trying to duplicate item id is invalid itemid = self.tv.insert('', 'end', 'first-item') - self.failUnlessEqual(itemid, 'first-item') - self.failUnlessRaises(tkinter.TclError, self.tv.insert, '', 'end', + self.assertEqual(itemid, 'first-item') + self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', 'first-item') - self.failUnlessRaises(tkinter.TclError, self.tv.insert, '', 'end', + self.assertRaises(tkinter.TclError, self.tv.insert, '', 'end', MockTclObj('first-item')) # unicode values value = '\xe1ba' item = self.tv.insert('', 'end', values=(value, )) - self.failUnlessEqual(self.tv.item(item, 'values'), (value, )) - self.failUnlessEqual(self.tv.item(item, values=None), (value, )) + self.assertEqual(self.tv.item(item, 'values'), (value, )) + self.assertEqual(self.tv.item(item, values=None), (value, )) self.tv.item(item, values=list(self.tv.item(item, values=None))) - self.failUnlessEqual(self.tv.item(item, values=None), (value, )) + self.assertEqual(self.tv.item(item, values=None), (value, )) - self.failUnless(isinstance(self.tv.item(item), dict)) + self.assertTrue(isinstance(self.tv.item(item), dict)) # erase item values self.tv.item(item, values='') - self.failIf(self.tv.item(item, values=None)) + self.assertFalse(self.tv.item(item, values=None)) # item tags item = self.tv.insert('', 'end', tags=[1, 2, value]) - self.failUnlessEqual(self.tv.item(item, tags=None), ('1', '2', value)) + self.assertEqual(self.tv.item(item, tags=None), ('1', '2', value)) self.tv.item(item, tags=[]) - self.failIf(self.tv.item(item, tags=None)) + self.assertFalse(self.tv.item(item, tags=None)) self.tv.item(item, tags=(1, 2)) - self.failUnlessEqual(self.tv.item(item, tags=None), ('1', '2')) + self.assertEqual(self.tv.item(item, tags=None), ('1', '2')) # values with spaces item = self.tv.insert('', 'end', values=('a b c', '%s %s' % (value, value))) - self.failUnlessEqual(self.tv.item(item, values=None), + self.assertEqual(self.tv.item(item, values=None), ('a b c', '%s %s' % (value, value))) # text - self.failUnlessEqual(self.tv.item( + self.assertEqual(self.tv.item( self.tv.insert('', 'end', text="Label here"), text=None), "Label here") - self.failUnlessEqual(self.tv.item( + self.assertEqual(self.tv.item( self.tv.insert('', 'end', text=value), text=None), value) @@ -1047,29 +1047,29 @@ class TreeviewTest(unittest.TestCase): def test_set(self): self.tv['columns'] = ['A', 'B'] item = self.tv.insert('', 'end', values=['a', 'b']) - self.failUnlessEqual(self.tv.set(item), {'A': 'a', 'B': 'b'}) + self.assertEqual(self.tv.set(item), {'A': 'a', 'B': 'b'}) self.tv.set(item, 'B', 'a') - self.failUnlessEqual(self.tv.item(item, values=None), ('a', 'a')) + self.assertEqual(self.tv.item(item, values=None), ('a', 'a')) self.tv['columns'] = ['B'] - self.failUnlessEqual(self.tv.set(item), {'B': 'a'}) + self.assertEqual(self.tv.set(item), {'B': 'a'}) self.tv.set(item, 'B', 'b') - self.failUnlessEqual(self.tv.set(item, column='B'), 'b') - self.failUnlessEqual(self.tv.item(item, values=None), ('b', 'a')) + self.assertEqual(self.tv.set(item, column='B'), 'b') + self.assertEqual(self.tv.item(item, values=None), ('b', 'a')) self.tv.set(item, 'B', 123) - self.failUnlessEqual(self.tv.set(item, 'B'), 123) - self.failUnlessEqual(self.tv.item(item, values=None), (123, 'a')) - self.failUnlessEqual(self.tv.set(item), {'B': 123}) + self.assertEqual(self.tv.set(item, 'B'), 123) + self.assertEqual(self.tv.item(item, values=None), (123, 'a')) + self.assertEqual(self.tv.set(item), {'B': 123}) # inexistent column - self.failUnlessRaises(tkinter.TclError, self.tv.set, item, 'A') - self.failUnlessRaises(tkinter.TclError, self.tv.set, item, 'A', 'b') + self.assertRaises(tkinter.TclError, self.tv.set, item, 'A') + self.assertRaises(tkinter.TclError, self.tv.set, item, 'A', 'b') # inexistent item - self.failUnlessRaises(tkinter.TclError, self.tv.set, 'notme') + self.assertRaises(tkinter.TclError, self.tv.set, 'notme') def test_tag_bind(self): @@ -1095,28 +1095,28 @@ class TreeviewTest(unittest.TestCase): pos_y.add(i) found.add(item_id) - self.failUnlessEqual(len(pos_y), 2) # item1 and item2 y pos + self.assertEqual(len(pos_y), 2) # item1 and item2 y pos for y in pos_y: support.simulate_mouse_click(self.tv, 0, y) # by now there should be 4 things in the events list, since each # item had a bind for two events that were simulated above - self.failUnlessEqual(len(events), 4) + self.assertEqual(len(events), 4) for evt in zip(events[::2], events[1::2]): - self.failUnlessEqual(evt, (1, 2)) + self.assertEqual(evt, (1, 2)) def test_tag_configure(self): # Just testing parameter passing for now - self.failUnlessRaises(TypeError, self.tv.tag_configure) - self.failUnlessRaises(tkinter.TclError, self.tv.tag_configure, + self.assertRaises(TypeError, self.tv.tag_configure) + self.assertRaises(tkinter.TclError, self.tv.tag_configure, 'test', sky='blue') self.tv.tag_configure('test', foreground='blue') - self.failUnlessEqual(self.tv.tag_configure('test', 'foreground'), + self.assertEqual(self.tv.tag_configure('test', 'foreground'), 'blue') - self.failUnlessEqual(self.tv.tag_configure('test', foreground=None), + self.assertEqual(self.tv.tag_configure('test', foreground=None), 'blue') - self.failUnless(isinstance(self.tv.tag_configure('test'), dict)) + self.assertTrue(isinstance(self.tv.tag_configure('test'), dict)) tests_gui = ( -- cgit v0.12 From fe5f11c684ff44f45dcc38a671efc17b30fca055 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:52:53 +0000 Subject: Merged revisions 73718,73721,73723 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r73718 | benjamin.peterson | 2009-07-01 01:35:19 +0200 (Mi, 01 Jul 2009) | 9 lines Merged revisions 73717 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73717 | benjamin.peterson | 2009-06-30 18:30:12 -0500 (Tue, 30 Jun 2009) | 1 line use assert* methods in test_unittest ........ ................ r73721 | benjamin.peterson | 2009-07-01 02:43:10 +0200 (Mi, 01 Jul 2009) | 11 lines Merged revisions 73720 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73720 | benjamin.peterson | 2009-06-30 19:36:41 -0500 (Tue, 30 Jun 2009) | 4 lines fix a few cases where automated fail -> assert translation messed up Thanks Joe Amenta ........ ................ r73723 | benjamin.peterson | 2009-07-01 02:45:43 +0200 (Mi, 01 Jul 2009) | 1 line remove use of failIf ................ --- Lib/ctypes/test/test_internals.py | 4 +- Lib/test/support.py | 2 +- Lib/test/test_logging.py | 46 ++++++++--------- Lib/test/test_unittest.py | 102 +++++++++++++++++++------------------- 4 files changed, 77 insertions(+), 77 deletions(-) diff --git a/Lib/ctypes/test/test_internals.py b/Lib/ctypes/test/test_internals.py index f7d9a1b..03d820e 100644 --- a/Lib/ctypes/test/test_internals.py +++ b/Lib/ctypes/test/test_internals.py @@ -18,7 +18,7 @@ What about pointers? """ class ObjectsTestCase(unittest.TestCase): - def assertTrueSame(self, a, b): + def assertSame(self, a, b): self.assertEqual(id(a), id(b)) def test_ints(self): @@ -33,7 +33,7 @@ class ObjectsTestCase(unittest.TestCase): rc = grc(s) cs = c_char_p(s) self.assertEqual(rc + 1, grc(s)) - self.assertTrueSame(cs._objects, s) + self.assertSame(cs._objects, s) def test_simple_struct(self): class X(Structure): diff --git a/Lib/test/support.py b/Lib/test/support.py index 337a33f..f916f4a 100644 --- a/Lib/test/support.py +++ b/Lib/test/support.py @@ -731,7 +731,7 @@ def bigmemtest(minsize, memuse, overhead=5*_1M): # to make sure they work. We still want to avoid using # too much memory, though, but we do that noisily. maxsize = 5147 - self.failIf(maxsize * memuse + overhead > 20 * _1M) + self.assertFalse(maxsize * memuse + overhead > 20 * _1M) else: maxsize = int((max_memuse - overhead) / memuse) if maxsize < minsize: diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 72b26bb..aff0ce3 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -99,7 +99,7 @@ class BaseTest(unittest.TestCase): finally: logging._releaseLock() - def assertTruelog_lines(self, expected_values, stream=None): + def assert_log_lines(self, expected_values, stream=None): """Match the collected log lines against the regular expression self.expected_log_pat, and compare the extracted group values to the expected_values list of tuples.""" @@ -165,7 +165,7 @@ class BuiltinLevelsTest(BaseTest): INF.debug(m()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('ERR', 'CRITICAL', '1'), ('ERR', 'ERROR', '2'), ('INF', 'CRITICAL', '3'), @@ -197,7 +197,7 @@ class BuiltinLevelsTest(BaseTest): INF_ERR.info(m()) INF_ERR.debug(m()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('INF.ERR', 'CRITICAL', '1'), ('INF.ERR', 'ERROR', '2'), ]) @@ -228,7 +228,7 @@ class BuiltinLevelsTest(BaseTest): INF_ERR_UNDEF.info(m()) INF_ERR_UNDEF.debug(m()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('INF.UNDEF', 'CRITICAL', '1'), ('INF.UNDEF', 'ERROR', '2'), ('INF.UNDEF', 'WARNING', '3'), @@ -256,7 +256,7 @@ class BuiltinLevelsTest(BaseTest): GRANDCHILD.debug(m()) CHILD.debug(m()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('INF.BADPARENT.UNDEF', 'CRITICAL', '1'), ('INF.BADPARENT.UNDEF', 'INFO', '2'), ('INF.BADPARENT', 'CRITICAL', '3'), @@ -285,7 +285,7 @@ class BasicFilterTest(BaseTest): spam_eggs_fish.info(self.next_message()) # Good. spam_bakedbeans.info(self.next_message()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('spam.eggs', 'INFO', '2'), ('spam.eggs.fish', 'INFO', '3'), ]) @@ -367,7 +367,7 @@ class CustomLevelsAndFiltersTest(BaseTest): self.root_logger.setLevel(VERBOSE) # Levels >= 'Verbose' are good. self.log_at_all_levels(self.root_logger) - self.assertTruelog_lines([ + self.assert_log_lines([ ('Verbose', '5'), ('Sociable', '6'), ('Effusive', '7'), @@ -382,7 +382,7 @@ class CustomLevelsAndFiltersTest(BaseTest): try: # Levels >= 'Sociable' are good. self.log_at_all_levels(self.root_logger) - self.assertTruelog_lines([ + self.assert_log_lines([ ('Sociable', '6'), ('Effusive', '7'), ('Terse', '8'), @@ -413,12 +413,12 @@ class CustomLevelsAndFiltersTest(BaseTest): ('Taciturn', '9'), ('Silent', '10'), ] - self.assertTruelog_lines(first_lines) + self.assert_log_lines(first_lines) specific_filter = VerySpecificFilter() self.root_logger.addFilter(specific_filter) self.log_at_all_levels(self.root_logger) - self.assertTruelog_lines(first_lines + [ + self.assert_log_lines(first_lines + [ # Not only 'Garrulous' is still missing, but also 'Sociable' # and 'Taciturn' ('Boring', '11'), @@ -458,9 +458,9 @@ class MemoryHandlerTest(BaseTest): # The memory handler flushes to its target handler based on specific # criteria (message count and message level). self.mem_logger.debug(self.next_message()) - self.assertTruelog_lines([]) + self.assert_log_lines([]) self.mem_logger.info(self.next_message()) - self.assertTruelog_lines([]) + self.assert_log_lines([]) # This will flush because the level is >= logging.WARNING self.mem_logger.warn(self.next_message()) lines = [ @@ -468,19 +468,19 @@ class MemoryHandlerTest(BaseTest): ('INFO', '2'), ('WARNING', '3'), ] - self.assertTruelog_lines(lines) + self.assert_log_lines(lines) for n in (4, 14): for i in range(9): self.mem_logger.debug(self.next_message()) - self.assertTruelog_lines(lines) + self.assert_log_lines(lines) # This will flush because it's the 10th message since the last # flush. self.mem_logger.debug(self.next_message()) lines = lines + [('DEBUG', str(i)) for i in range(n, n + 10)] - self.assertTruelog_lines(lines) + self.assert_log_lines(lines) self.mem_logger.debug(self.next_message()) - self.assertTruelog_lines(lines) + self.assert_log_lines(lines) class ExceptionFormatter(logging.Formatter): @@ -650,11 +650,11 @@ class ConfigFileTest(BaseTest): logger.info(self.next_message()) # Outputs a message logger.error(self.next_message()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('ERROR', '2'), ], stream=output) # Original logger output is empty. - self.assertTruelog_lines([]) + self.assert_log_lines([]) def test_config1_ok(self, config=config1): # A config file defining a sub-parser as well. @@ -664,12 +664,12 @@ class ConfigFileTest(BaseTest): # Both will output a message logger.info(self.next_message()) logger.error(self.next_message()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('INFO', '1'), ('ERROR', '2'), ], stream=output) # Original logger output is empty. - self.assertTruelog_lines([]) + self.assert_log_lines([]) def test_config2_failure(self): # A simple config file which overrides the default settings. @@ -692,7 +692,7 @@ class ConfigFileTest(BaseTest): self.assertEquals(output.getvalue(), "ERROR:root:just testing\nGot a [RuntimeError]\n") # Original logger output is empty - self.assertTruelog_lines([]) + self.assert_log_lines([]) def test_config5_ok(self): self.test_config1_ok(config=self.config5) @@ -847,7 +847,7 @@ class MemoryTest(BaseTest): foo.setLevel(logging.DEBUG) self.root_logger.debug(self.next_message()) foo.debug(self.next_message()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('foo', 'DEBUG', '2'), ]) del foo @@ -856,7 +856,7 @@ class MemoryTest(BaseTest): # foo has retained its settings. bar = logging.getLogger("foo") bar.debug(self.next_message()) - self.assertTruelog_lines([ + self.assert_log_lines([ ('foo', 'DEBUG', '2'), ('foo', 'DEBUG', '3'), ]) diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py index 858f24b..d59bf8a 100644 --- a/Lib/test/test_unittest.py +++ b/Lib/test/test_unittest.py @@ -75,8 +75,8 @@ class TestEquality(object): # Check for a valid __ne__ implementation def test_ne(self): for obj_1, obj_2 in self.ne_pairs: - self.failIfEqual(obj_1, obj_2) - self.failIfEqual(obj_2, obj_1) + self.assertNotEqual(obj_1, obj_2) + self.assertNotEqual(obj_2, obj_1) class TestHashing(object): """Used as a mixin for TestCase""" @@ -178,10 +178,10 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() # This has to be false for the test to succeed - self.failIf('runTest'.startswith(loader.testMethodPrefix)) + self.assertFalse('runTest'.startswith(loader.testMethodPrefix)) suite = loader.loadTestsFromTestCase(Foo) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [Foo('runTest')]) ################################################################ @@ -200,7 +200,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromModule(m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) expected = [loader.suiteClass([MyTestCase('test')])] self.assertEqual(list(suite), expected) @@ -213,7 +213,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromModule(m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), []) # "This method searches `module` for classes derived from TestCase" @@ -227,7 +227,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromModule(m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [loader.suiteClass()]) @@ -439,7 +439,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromName('testcase_1', m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [MyTestCase('test')]) # "The specifier name is a ``dotted name'' that may resolve either to @@ -455,7 +455,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromName('testsuite', m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [MyTestCase('test')]) @@ -470,7 +470,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromName('testcase_1.test', m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [MyTestCase('test')]) @@ -509,7 +509,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromName('return_TestSuite', m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [testcase_1, testcase_2]) # "The specifier name is a ``dotted name'' that may resolve ... to @@ -523,7 +523,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromName('return_TestCase', m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [testcase_1]) # "The specifier name is a ``dotted name'' that may resolve ... to @@ -562,11 +562,11 @@ class Test_TestLoader(TestCase): try: suite = loader.loadTestsFromName(module_name) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), []) # audioop should now be loaded, thanks to loadTestsFromName() - self.failUnless(module_name in sys.modules) + self.assertTrue(module_name in sys.modules) finally: if module_name in sys.modules: del sys.modules[module_name] @@ -585,7 +585,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames([]) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), []) # "Similar to loadTestsFromName(), but takes a sequence of names rather @@ -600,7 +600,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames([], unittest) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), []) # "The specifier name is a ``dotted name'' that may resolve either to @@ -801,7 +801,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames(['testcase_1'], m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) expected = loader.suiteClass([MyTestCase('test')]) self.assertEqual(list(suite), [expected]) @@ -817,7 +817,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames(['testsuite'], m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [m.testsuite]) @@ -832,7 +832,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames(['testcase_1.test'], m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) ref_suite = unittest.TestSuite([MyTestCase('test')]) self.assertEqual(list(suite), [ref_suite]) @@ -869,7 +869,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames(['return_TestSuite'], m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) expected = unittest.TestSuite([testcase_1, testcase_2]) self.assertEqual(list(suite), [expected]) @@ -885,7 +885,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames(['return_TestCase'], m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) ref_suite = unittest.TestSuite([testcase_1]) self.assertEqual(list(suite), [ref_suite]) @@ -909,7 +909,7 @@ class Test_TestLoader(TestCase): loader = unittest.TestLoader() suite = loader.loadTestsFromNames(['Foo.foo'], m) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) ref_suite = unittest.TestSuite([testcase_1]) self.assertEqual(list(suite), [ref_suite]) @@ -950,11 +950,11 @@ class Test_TestLoader(TestCase): try: suite = loader.loadTestsFromNames([module_name]) - self.failUnless(isinstance(suite, loader.suiteClass)) + self.assertTrue(isinstance(suite, loader.suiteClass)) self.assertEqual(list(suite), [unittest.TestSuite()]) # audioop should now be loaded, thanks to loadTestsFromName() - self.failUnless(module_name in sys.modules) + self.assertTrue(module_name in sys.modules) finally: if module_name in sys.modules: del sys.modules[module_name] @@ -1325,7 +1325,7 @@ class Test_TestLoader(TestCase): # "The default value is the TestSuite class" def test_suiteClass__default_value(self): loader = unittest.TestLoader() - self.failUnless(loader.suiteClass is unittest.TestSuite) + self.assertTrue(loader.suiteClass is unittest.TestSuite) ################################################################ ### /Tests for TestLoader.suiteClass @@ -1738,7 +1738,7 @@ class Test_FunctionTestCase(TestCase): def test_id(self): test = unittest.FunctionTestCase(lambda: None) - self.failUnless(isinstance(test.id(), str)) + self.assertTrue(isinstance(test.id(), str)) # "Returns a one-line description of the test, or None if no description # has been provided. The default implementation of this method returns @@ -1770,7 +1770,7 @@ class Test_TestResult(TestCase): def test_init(self): result = unittest.TestResult() - self.failUnless(result.wasSuccessful()) + self.assertTrue(result.wasSuccessful()) self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.failures), 0) self.assertEqual(result.testsRun, 0) @@ -1799,7 +1799,7 @@ class Test_TestResult(TestCase): result.startTest(test) - self.failUnless(result.wasSuccessful()) + self.assertTrue(result.wasSuccessful()) self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.failures), 0) self.assertEqual(result.testsRun, 1) @@ -1820,7 +1820,7 @@ class Test_TestResult(TestCase): result.startTest(test) - self.failUnless(result.wasSuccessful()) + self.assertTrue(result.wasSuccessful()) self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.failures), 0) self.assertEqual(result.testsRun, 1) @@ -1829,7 +1829,7 @@ class Test_TestResult(TestCase): result.stopTest(test) # Same tests as above; make sure nothing has changed - self.failUnless(result.wasSuccessful()) + self.assertTrue(result.wasSuccessful()) self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.failures), 0) self.assertEqual(result.testsRun, 1) @@ -1873,7 +1873,7 @@ class Test_TestResult(TestCase): result.addSuccess(test) result.stopTest(test) - self.failUnless(result.wasSuccessful()) + self.assertTrue(result.wasSuccessful()) self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.failures), 0) self.assertEqual(result.testsRun, 1) @@ -1918,15 +1918,15 @@ class Test_TestResult(TestCase): result.addFailure(test, exc_info_tuple) result.stopTest(test) - self.failIf(result.wasSuccessful()) + self.assertFalse(result.wasSuccessful()) self.assertEqual(len(result.errors), 0) self.assertEqual(len(result.failures), 1) self.assertEqual(result.testsRun, 1) self.assertEqual(result.shouldStop, False) test_case, formatted_exc = result.failures[0] - self.failUnless(test_case is test) - self.failUnless(isinstance(formatted_exc, str)) + self.assertTrue(test_case is test) + self.assertTrue(isinstance(formatted_exc, str)) # "addError(test, err)" # ... @@ -1968,15 +1968,15 @@ class Test_TestResult(TestCase): result.addError(test, exc_info_tuple) result.stopTest(test) - self.failIf(result.wasSuccessful()) + self.assertFalse(result.wasSuccessful()) self.assertEqual(len(result.errors), 1) self.assertEqual(len(result.failures), 0) self.assertEqual(result.testsRun, 1) self.assertEqual(result.shouldStop, False) test_case, formatted_exc = result.errors[0] - self.failUnless(test_case is test) - self.failUnless(isinstance(formatted_exc, str)) + self.assertTrue(test_case is test) + self.assertTrue(isinstance(formatted_exc, str)) ### Support code for Test_TestCase ################################################################ @@ -2290,7 +2290,7 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): def test(self): pass - self.failUnless(Foo('test').failureException is AssertionError) + self.assertTrue(Foo('test').failureException is AssertionError) # "This class attribute gives the exception raised by the test() method. # If a test framework needs to use a specialized exception, possibly to @@ -2308,7 +2308,7 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): failureException = RuntimeError - self.failUnless(Foo('test').failureException is RuntimeError) + self.assertTrue(Foo('test').failureException is RuntimeError) Foo('test').run(result) @@ -2331,7 +2331,7 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): failureException = RuntimeError - self.failUnless(Foo('test').failureException is RuntimeError) + self.assertTrue(Foo('test').failureException is RuntimeError) Foo('test').run(result) @@ -2367,7 +2367,7 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): def runTest(self): pass - self.failUnless(isinstance(Foo().id(), str)) + self.assertTrue(isinstance(Foo().id(), str)) # "If result is omitted or None, a temporary result object is created # and used, but is not made available to the caller. As TestCase owns the @@ -2900,23 +2900,23 @@ class Test_TestSkipping(TestCase): class Test_Assertions(TestCase): def test_AlmostEqual(self): - self.failUnlessAlmostEqual(1.00000001, 1.0) - self.failIfAlmostEqual(1.0000001, 1.0) + self.assertAlmostEqual(1.00000001, 1.0) + self.assertNotAlmostEqual(1.0000001, 1.0) self.assertRaises(self.failureException, - self.failUnlessAlmostEqual, 1.0000001, 1.0) + self.assertAlmostEqual, 1.0000001, 1.0) self.assertRaises(self.failureException, - self.failIfAlmostEqual, 1.00000001, 1.0) + self.assertNotAlmostEqual, 1.00000001, 1.0) - self.failUnlessAlmostEqual(1.1, 1.0, places=0) + self.assertAlmostEqual(1.1, 1.0, places=0) self.assertRaises(self.failureException, - self.failUnlessAlmostEqual, 1.1, 1.0, places=1) + self.assertAlmostEqual, 1.1, 1.0, places=1) - self.failUnlessAlmostEqual(0, .1+.1j, places=0) - self.failIfAlmostEqual(0, .1+.1j, places=1) + self.assertAlmostEqual(0, .1+.1j, places=0) + self.assertNotAlmostEqual(0, .1+.1j, places=1) self.assertRaises(self.failureException, - self.failUnlessAlmostEqual, 0, .1+.1j, places=1) + self.assertAlmostEqual, 0, .1+.1j, places=1) self.assertRaises(self.failureException, - self.failIfAlmostEqual, 0, .1+.1j, places=0) + self.assertNotAlmostEqual, 0, .1+.1j, places=0) def test_assertRaises(self): def _raise(e): -- cgit v0.12 -- cgit v0.12 From 514c368c1f824c8a9c0740d33de53e48fa5bdcce Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:54:55 +0000 Subject: Merged revisions 73735-73736 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r73735 | benjamin.peterson | 2009-07-01 03:45:12 +0200 (Mi, 01 Jul 2009) | 1 line remove comment about PyNumber_Int ........ r73736 | hirokazu.yamamoto | 2009-07-01 04:24:13 +0200 (Mi, 01 Jul 2009) | 1 line Added svn:ignore. ........ --- Include/abstract.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Include/abstract.h b/Include/abstract.h index 017a841..6d40ef7 100644 --- a/Include/abstract.h +++ b/Include/abstract.h @@ -777,12 +777,6 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ is cleared and the value is clipped. */ - /* - PyNumber_Int used to be found here. It's now in Include/intobject.h, - where it is defined to be an alias for PyNumber_Long. New code - should use PyNumber_Long instead. - */ - PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o); /* -- cgit v0.12 -- cgit v0.12 From c8b3891d49b86df04de7be3e58c4f6c4eb081249 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:57:20 +0000 Subject: Merged revisions 73749 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r73749 | benjamin.peterson | 2009-07-01 17:47:07 +0200 (Mi, 01 Jul 2009) | 9 lines Merged revisions 73744 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73744 | benjamin.peterson | 2009-07-01 08:34:35 -0500 (Wed, 01 Jul 2009) | 1 line proxy the __exit__ call ........ ................ --- Lib/tempfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/tempfile.py b/Lib/tempfile.py index 8cdefaa..93405a8 100644 --- a/Lib/tempfile.py +++ b/Lib/tempfile.py @@ -410,7 +410,7 @@ class _TemporaryFileWrapper: return result else: def __exit__(self, exc, value, tb): - pass + self.file.__exit__(exc, value, tb) def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, -- cgit v0.12 -- cgit v0.12 From f78dd3452d99318195bf3dc7a4266ca5f12dfe11 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 08:58:24 +0000 Subject: Merged revisions 73592,73823 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r73592 | ezio.melotti | 2009-06-28 00:58:15 +0200 (So, 28 Jun 2009) | 1 line Updated the last example as requested in #6350 ........ r73823 | ezio.melotti | 2009-07-04 03:14:30 +0200 (Sa, 04 Jul 2009) | 1 line #6398 typo: versio. -> version. ........ --- Doc/library/html.parser.rst | 26 ++++++++++++++++++-------- README | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst index 78b7677..ef0ae83 100644 --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -163,13 +163,23 @@ Example HTML Parser Application As a basic example, below is a very basic HTML parser that uses the :class:`HTMLParser` class to print out tags as they are encountered:: - from html.parser import HTMLParser + >>> from html.parser import HTMLParser + >>> + >>> class MyHTMLParser(HTMLParser): + ... def handle_starttag(self, tag, attrs): + ... print("Encountered a {} start tag".format(tag)) + ... def handle_endtag(self, tag): + ... print("Encountered a {} end tag".format(tag)) + ... + >>> page = """

    Title

    I'm a paragraph!

    """ + >>> + >>> myparser = MyHTMLParser() + >>> myparser.feed(page) + Encountered a html start tag + Encountered a h1 start tag + Encountered a h1 end tag + Encountered a p start tag + Encountered a p end tag + Encountered a html end tag - class MyHTMLParser(HTMLParser): - - def handle_starttag(self, tag, attrs): - print "Encountered the beginning of a %s tag" % tag - - def handle_endtag(self, tag): - print "Encountered the end of a %s tag" % tag diff --git a/README b/README index 40d3f0a..5fc791c 100644 --- a/README +++ b/README @@ -127,7 +127,7 @@ Installing multiple versions On Unix and Mac systems if you intend to install multiple versions of Python using the same installation prefix (--prefix argument to the configure script) you must take care that your primary python executable is not -overwritten by the installation of a different versio. All files and +overwritten by the installation of a different version. All files and directories installed using "make altinstall" contain the major and minor version and can thus live side-by-side. "make install" also creates ${prefix}/bin/python3 which refers to ${prefix}/bin/pythonX.Y. If you intend -- cgit v0.12 -- cgit v0.12 From ae83d6ee371b5e6aeebe303fb853f5c45638414c Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 13 Aug 2009 09:04:31 +0000 Subject: Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r73833 | gregory.p.smith | 2009-07-04 04:46:54 +0200 (Sa, 04 Jul