1996-12-18 15:56:22 -04:00
|
|
|
import operator
|
2001-08-11 00:21:35 -03:00
|
|
|
import unittest
|
|
|
|
|
2008-05-20 18:35:26 -03:00
|
|
|
from test import support
|
2001-08-11 00:21:35 -03:00
|
|
|
|
2005-12-29 11:59:19 -04:00
|
|
|
class Seq1:
|
|
|
|
def __init__(self, lst):
|
|
|
|
self.lst = lst
|
|
|
|
def __len__(self):
|
|
|
|
return len(self.lst)
|
|
|
|
def __getitem__(self, i):
|
|
|
|
return self.lst[i]
|
|
|
|
def __add__(self, other):
|
|
|
|
return self.lst + other.lst
|
|
|
|
def __mul__(self, other):
|
|
|
|
return self.lst * other
|
|
|
|
def __rmul__(self, other):
|
|
|
|
return other * self.lst
|
|
|
|
|
|
|
|
class Seq2(object):
|
|
|
|
def __init__(self, lst):
|
|
|
|
self.lst = lst
|
|
|
|
def __len__(self):
|
|
|
|
return len(self.lst)
|
|
|
|
def __getitem__(self, i):
|
|
|
|
return self.lst[i]
|
|
|
|
def __add__(self, other):
|
|
|
|
return self.lst + other.lst
|
|
|
|
def __mul__(self, other):
|
|
|
|
return self.lst * other
|
|
|
|
def __rmul__(self, other):
|
|
|
|
return other * self.lst
|
|
|
|
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
class OperatorTestCase(unittest.TestCase):
|
|
|
|
def test_lt(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.lt)
|
|
|
|
self.failUnlessRaises(TypeError, operator.lt, 1j, 2j)
|
2001-08-11 00:21:35 -03:00
|
|
|
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))
|
|
|
|
|
|
|
|
def test_le(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.le)
|
|
|
|
self.failUnlessRaises(TypeError, operator.le, 1j, 2j)
|
2001-08-11 00:21:35 -03:00
|
|
|
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))
|
|
|
|
|
|
|
|
def test_eq(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
class C(object):
|
|
|
|
def __eq__(self, other):
|
|
|
|
raise SyntaxError
|
|
|
|
self.failUnlessRaises(TypeError, operator.eq)
|
|
|
|
self.failUnlessRaises(SyntaxError, operator.eq, C(), C())
|
2001-08-11 00:21:35 -03:00
|
|
|
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))
|
|
|
|
|
|
|
|
def test_ne(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
class C(object):
|
|
|
|
def __ne__(self, other):
|
|
|
|
raise SyntaxError
|
|
|
|
self.failUnlessRaises(TypeError, operator.ne)
|
|
|
|
self.failUnlessRaises(SyntaxError, operator.ne, C(), C())
|
2001-08-11 00:21:35 -03:00
|
|
|
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))
|
|
|
|
|
|
|
|
def test_ge(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.ge)
|
|
|
|
self.failUnlessRaises(TypeError, operator.ge, 1j, 2j)
|
2001-08-11 00:21:35 -03:00
|
|
|
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))
|
|
|
|
|
|
|
|
def test_gt(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.gt)
|
|
|
|
self.failUnlessRaises(TypeError, operator.gt, 1j, 2j)
|
2001-08-11 00:21:35 -03:00
|
|
|
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))
|
|
|
|
|
|
|
|
def test_abs(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.abs)
|
|
|
|
self.failUnlessRaises(TypeError, operator.abs, None)
|
2007-07-11 09:20:59 -03:00
|
|
|
self.assertEqual(operator.abs(-1), 1)
|
|
|
|
self.assertEqual(operator.abs(1), 1)
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
def test_add(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.add)
|
|
|
|
self.failUnlessRaises(TypeError, operator.add, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.add(3, 4) == 7)
|
|
|
|
|
|
|
|
def test_bitwise_and(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.and_)
|
|
|
|
self.failUnlessRaises(TypeError, operator.and_, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.and_(0xf, 0xa) == 0xa)
|
|
|
|
|
|
|
|
def test_concat(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.concat)
|
|
|
|
self.failUnlessRaises(TypeError, operator.concat, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.concat('py', 'thon') == 'python')
|
|
|
|
self.failUnless(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
|
2005-12-29 11:59:19 -04:00
|
|
|
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)
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
def test_countOf(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.countOf)
|
|
|
|
self.failUnlessRaises(TypeError, operator.countOf, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1)
|
|
|
|
self.failUnless(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0)
|
|
|
|
|
|
|
|
def test_delitem(self):
|
|
|
|
a = [4, 3, 2, 1]
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.delitem, a)
|
|
|
|
self.failUnlessRaises(TypeError, operator.delitem, a, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.delitem(a, 1) is None)
|
|
|
|
self.assert_(a == [4, 2, 1])
|
|
|
|
|
|
|
|
def test_floordiv(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.floordiv, 5)
|
|
|
|
self.failUnlessRaises(TypeError, operator.floordiv, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.floordiv(5, 2) == 2)
|
|
|
|
|
|
|
|
def test_truediv(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.truediv, 5)
|
|
|
|
self.failUnlessRaises(TypeError, operator.truediv, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.truediv(5, 2) == 2.5)
|
|
|
|
|
|
|
|
def test_getitem(self):
|
|
|
|
a = range(10)
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.getitem)
|
|
|
|
self.failUnlessRaises(TypeError, operator.getitem, a, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.getitem(a, 2) == 2)
|
|
|
|
|
|
|
|
def test_indexOf(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.indexOf)
|
|
|
|
self.failUnlessRaises(TypeError, operator.indexOf, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.indexOf([4, 3, 2, 1], 3) == 1)
|
|
|
|
self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0)
|
|
|
|
|
|
|
|
def test_invert(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.invert)
|
|
|
|
self.failUnlessRaises(TypeError, operator.invert, None)
|
2007-07-11 09:20:59 -03:00
|
|
|
self.assertEqual(operator.inv(4), -5)
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
def test_isMappingType(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.isMappingType)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failIf(operator.isMappingType(1))
|
|
|
|
self.failIf(operator.isMappingType(operator.isMappingType))
|
|
|
|
self.failUnless(operator.isMappingType(operator.__dict__))
|
|
|
|
self.failUnless(operator.isMappingType({}))
|
|
|
|
|
|
|
|
def test_isNumberType(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.isNumberType)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.isNumberType(8))
|
|
|
|
self.failUnless(operator.isNumberType(8j))
|
2007-01-15 12:59:06 -04:00
|
|
|
self.failUnless(operator.isNumberType(8))
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.isNumberType(8.3))
|
|
|
|
self.failIf(operator.isNumberType(dir()))
|
|
|
|
|
|
|
|
def test_isSequenceType(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.isSequenceType)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.isSequenceType(dir()))
|
|
|
|
self.failUnless(operator.isSequenceType(()))
|
2007-05-07 19:24:25 -03:00
|
|
|
self.failUnless(operator.isSequenceType(range(10)))
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.isSequenceType('yeahbuddy'))
|
|
|
|
self.failIf(operator.isSequenceType(3))
|
Merged revisions 53623-53858 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r53624 | peter.astrand | 2007-02-02 20:06:36 +0100 (Fri, 02 Feb 2007) | 1 line
We had several if statements checking the value of a fd. This is unsafe, since valid fds might be zero. We should check for not None instead.
........
r53635 | kurt.kaiser | 2007-02-05 07:03:18 +0100 (Mon, 05 Feb 2007) | 2 lines
Add 'raw' support to configHandler. Patch 1650174 Tal Einat.
........
r53641 | kurt.kaiser | 2007-02-06 00:02:16 +0100 (Tue, 06 Feb 2007) | 5 lines
1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :)
Suggested solution by Christos Georgiou, Bug 791968.
2. Clean up tests, were not failing when they should have been.
4. Remove some camelcase and an unneeded try/except block.
........
r53644 | kurt.kaiser | 2007-02-06 04:21:40 +0100 (Tue, 06 Feb 2007) | 2 lines
Clean up ModifiedInterpreter.runcode() structure
........
r53646 | peter.astrand | 2007-02-06 16:37:50 +0100 (Tue, 06 Feb 2007) | 1 line
Applied patch 1124861.3.patch to solve bug #1124861: Automatically create pipes on Windows, if GetStdHandle fails. Will backport.
........
r53648 | lars.gustaebel | 2007-02-06 19:38:13 +0100 (Tue, 06 Feb 2007) | 4 lines
Patch #1652681: create nonexistent files in append mode and
allow appending to empty files.
........
r53649 | kurt.kaiser | 2007-02-06 20:09:43 +0100 (Tue, 06 Feb 2007) | 4 lines
Updated patch (CodeContext.061217.patch) to
[ 1362975 ] CodeContext - Improved text indentation
Tal Einat 16Dec06
........
r53650 | kurt.kaiser | 2007-02-06 20:21:19 +0100 (Tue, 06 Feb 2007) | 2 lines
narrow exception per [ 1540849 ] except too broad
........
r53653 | kurt.kaiser | 2007-02-07 04:39:41 +0100 (Wed, 07 Feb 2007) | 4 lines
[ 1621265 ] Auto-completion list placement
Move AC window below input line unless not enough space, then put it above.
Patch: Tal Einat
........
r53654 | kurt.kaiser | 2007-02-07 09:07:13 +0100 (Wed, 07 Feb 2007) | 2 lines
Handle AttributeError during calltip lookup
........
r53656 | raymond.hettinger | 2007-02-07 21:08:22 +0100 (Wed, 07 Feb 2007) | 3 lines
SF #1615701: make d.update(m) honor __getitem__() and keys() in dict subclasses
........
r53658 | raymond.hettinger | 2007-02-07 22:04:20 +0100 (Wed, 07 Feb 2007) | 1 line
SF: 1397711 Set docs conflated immutable and hashable
........
r53660 | raymond.hettinger | 2007-02-07 22:42:17 +0100 (Wed, 07 Feb 2007) | 1 line
Check for a common user error with defaultdict().
........
r53662 | raymond.hettinger | 2007-02-07 23:24:07 +0100 (Wed, 07 Feb 2007) | 1 line
Bug #1575169: operator.isSequenceType() now returns False for subclasses of dict.
........
r53664 | raymond.hettinger | 2007-02-08 00:49:03 +0100 (Thu, 08 Feb 2007) | 1 line
Silence compiler warning
........
r53666 | raymond.hettinger | 2007-02-08 01:07:32 +0100 (Thu, 08 Feb 2007) | 1 line
Do not let overflows in enumerate() and count() pass silently.
........
r53668 | raymond.hettinger | 2007-02-08 01:50:39 +0100 (Thu, 08 Feb 2007) | 1 line
Bypass set specific optimizations for set and frozenset subclasses.
........
r53670 | raymond.hettinger | 2007-02-08 02:42:35 +0100 (Thu, 08 Feb 2007) | 1 line
Fix docstring bug
........
r53671 | martin.v.loewis | 2007-02-08 10:13:36 +0100 (Thu, 08 Feb 2007) | 3 lines
Bug #1653736: Complain about keyword arguments to time.isoformat.
Will backport to 2.5.
........
r53679 | kurt.kaiser | 2007-02-08 23:58:18 +0100 (Thu, 08 Feb 2007) | 6 lines
Corrected some bugs in AutoComplete. Also, Page Up/Down in ACW implemented;
mouse and cursor selection in ACWindow implemented; double Tab inserts current
selection and closes ACW (similar to double-click and Return); scroll wheel now
works in ACW. Added AutoComplete instructions to IDLE Help.
........
r53689 | martin.v.loewis | 2007-02-09 13:19:32 +0100 (Fri, 09 Feb 2007) | 3 lines
Bug #1653736: Properly discard third argument to slot_nb_inplace_power.
Will backport.
........
r53691 | martin.v.loewis | 2007-02-09 13:36:48 +0100 (Fri, 09 Feb 2007) | 4 lines
Bug #1600860: Search for shared python library in LIBDIR, not
lib/python/config, on "linux" and "gnu" systems.
Will backport.
........
r53693 | martin.v.loewis | 2007-02-09 13:58:49 +0100 (Fri, 09 Feb 2007) | 2 lines
Update broken link. Will backport to 2.5.
........
r53697 | georg.brandl | 2007-02-09 19:48:41 +0100 (Fri, 09 Feb 2007) | 2 lines
Bug #1656078: typo in in profile docs.
........
r53731 | brett.cannon | 2007-02-11 06:36:00 +0100 (Sun, 11 Feb 2007) | 3 lines
Change a very minor inconsistency (that is purely cosmetic) in the AST
definition.
........
r53735 | skip.montanaro | 2007-02-11 19:24:37 +0100 (Sun, 11 Feb 2007) | 1 line
fix trace.py --ignore-dir
........
r53741 | brett.cannon | 2007-02-11 20:44:41 +0100 (Sun, 11 Feb 2007) | 3 lines
Check in changed Python-ast.c from a cosmetic change to Python.asdl (in
r53731).
........
r53751 | brett.cannon | 2007-02-12 04:51:02 +0100 (Mon, 12 Feb 2007) | 5 lines
Modify Parser/asdl_c.py so that the __version__ number for Python/Python-ast.c
is specified at the top of the file. Also add a note that Python/Python-ast.c
needs to be committed separately after a change to the AST grammar to capture
the revision number of the change (which is what __version__ is set to).
........
r53752 | lars.gustaebel | 2007-02-12 10:25:53 +0100 (Mon, 12 Feb 2007) | 3 lines
Bug #1656581: Point out that external file objects are supposed to be
at position 0.
........
r53754 | martin.v.loewis | 2007-02-12 13:21:10 +0100 (Mon, 12 Feb 2007) | 3 lines
Patch 1463026: Support default namespace in XMLGenerator.
Fixes #847665. Will backport.
........
r53757 | armin.rigo | 2007-02-12 17:23:24 +0100 (Mon, 12 Feb 2007) | 4 lines
Fix the line to what is my guess at the original author's meaning.
(The line has no effect anyway, but is present because it's
customary call the base class __init__).
........
r53763 | martin.v.loewis | 2007-02-13 09:34:45 +0100 (Tue, 13 Feb 2007) | 3 lines
Patch #685268: Consider a package's __path__ in imputil.
Will backport.
........
r53765 | martin.v.loewis | 2007-02-13 10:49:38 +0100 (Tue, 13 Feb 2007) | 2 lines
Patch #698833: Support file decryption in zipfile.
........
r53766 | martin.v.loewis | 2007-02-13 11:10:39 +0100 (Tue, 13 Feb 2007) | 3 lines
Patch #1517891: Make 'a' create the file if it doesn't exist.
Fixes #1514451.
........
r53767 | martin.v.loewis | 2007-02-13 13:08:24 +0100 (Tue, 13 Feb 2007) | 3 lines
Bug #1658794: Remove extraneous 'this'.
Will backport to 2.5.
........
r53769 | martin.v.loewis | 2007-02-13 13:14:19 +0100 (Tue, 13 Feb 2007) | 3 lines
Patch #1657276: Make NETLINK_DNRTMSG conditional.
Will backport.
........
r53771 | lars.gustaebel | 2007-02-13 17:09:24 +0100 (Tue, 13 Feb 2007) | 4 lines
Patch #1647484: Renamed GzipFile's filename attribute to name. The
filename attribute is still accessible as a property that emits a
DeprecationWarning.
........
r53772 | lars.gustaebel | 2007-02-13 17:24:00 +0100 (Tue, 13 Feb 2007) | 3 lines
Strip the '.gz' extension from the filename that is written to the
gzip header.
........
r53774 | martin.v.loewis | 2007-02-14 11:07:37 +0100 (Wed, 14 Feb 2007) | 2 lines
Patch #1432399: Add HCI sockets.
........
r53775 | martin.v.loewis | 2007-02-14 12:30:07 +0100 (Wed, 14 Feb 2007) | 2 lines
Update 1432399 to removal of _BT_SOCKADDR_MEMB.
........
r53776 | martin.v.loewis | 2007-02-14 12:30:56 +0100 (Wed, 14 Feb 2007) | 3 lines
Ignore directory time stamps when considering
whether to rerun libffi configure.
........
r53778 | lars.gustaebel | 2007-02-14 15:45:12 +0100 (Wed, 14 Feb 2007) | 4 lines
A missing binary mode in AppendTest caused failures in Windows
Buildbot.
........
r53782 | martin.v.loewis | 2007-02-15 10:51:35 +0100 (Thu, 15 Feb 2007) | 2 lines
Patch #1397848: add the reasoning behind no-resize-on-shrinkage.
........
r53783 | georg.brandl | 2007-02-15 11:37:59 +0100 (Thu, 15 Feb 2007) | 2 lines
Make functools.wraps() docs a bit clearer.
........
r53785 | georg.brandl | 2007-02-15 12:29:04 +0100 (Thu, 15 Feb 2007) | 2 lines
Patch #1494140: Add documentation for the new struct.Struct object.
........
r53787 | georg.brandl | 2007-02-15 12:29:55 +0100 (Thu, 15 Feb 2007) | 2 lines
Add missing \versionadded.
........
r53800 | brett.cannon | 2007-02-15 23:54:39 +0100 (Thu, 15 Feb 2007) | 11 lines
Update the encoding package's search function to use absolute imports when
calling __import__. This helps make the expected search locations for encoding
modules be more explicit.
One could use an explicit value for __path__ when making the call to __import__
to force the exact location searched for encodings. This would give the most
strict search path possible if one is worried about malicious code being
imported. The unfortunate side-effect of that is that if __path__ was modified
on 'encodings' on purpose in a safe way it would not be picked up in future
__import__ calls.
........
r53801 | brett.cannon | 2007-02-16 20:33:01 +0100 (Fri, 16 Feb 2007) | 2 lines
Make the __import__ call in encodings.__init__ absolute with a level 0 call.
........
r53809 | vinay.sajip | 2007-02-16 23:36:24 +0100 (Fri, 16 Feb 2007) | 1 line
Minor fix for currentframe (SF #1652788).
........
r53818 | raymond.hettinger | 2007-02-19 03:03:19 +0100 (Mon, 19 Feb 2007) | 3 lines
Extend work on revision 52962: Eliminate redundant calls to PyObject_Hash().
........
r53820 | raymond.hettinger | 2007-02-19 05:08:43 +0100 (Mon, 19 Feb 2007) | 1 line
Add merge() function to heapq.
........
r53821 | raymond.hettinger | 2007-02-19 06:28:28 +0100 (Mon, 19 Feb 2007) | 1 line
Add tie-breaker count to preserve sort stability.
........
r53822 | raymond.hettinger | 2007-02-19 07:59:32 +0100 (Mon, 19 Feb 2007) | 1 line
Use C heapreplace() instead of slower _siftup() in pure python.
........
r53823 | raymond.hettinger | 2007-02-19 08:30:21 +0100 (Mon, 19 Feb 2007) | 1 line
Add test for merge stability
........
r53824 | raymond.hettinger | 2007-02-19 10:14:10 +0100 (Mon, 19 Feb 2007) | 1 line
Provide an example of defaultdict with non-zero constant factory function.
........
r53825 | lars.gustaebel | 2007-02-19 10:54:47 +0100 (Mon, 19 Feb 2007) | 2 lines
Moved misplaced news item.
........
r53826 | martin.v.loewis | 2007-02-19 11:55:19 +0100 (Mon, 19 Feb 2007) | 3 lines
Patch #1490190: posixmodule now includes os.chflags() and os.lchflags()
functions on platforms where the underlying system calls are available.
........
r53827 | raymond.hettinger | 2007-02-19 19:15:04 +0100 (Mon, 19 Feb 2007) | 1 line
Fixup docstrings for merge().
........
r53829 | raymond.hettinger | 2007-02-19 21:44:04 +0100 (Mon, 19 Feb 2007) | 1 line
Fixup set/dict interoperability.
........
r53837 | raymond.hettinger | 2007-02-21 06:20:38 +0100 (Wed, 21 Feb 2007) | 1 line
Add itertools.izip_longest().
........
r53838 | raymond.hettinger | 2007-02-21 18:22:05 +0100 (Wed, 21 Feb 2007) | 1 line
Remove filler struct item and fix leak.
........
2007-02-23 11:07:44 -04:00
|
|
|
class Dict(dict): pass
|
|
|
|
self.failIf(operator.isSequenceType(Dict()))
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
def test_lshift(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.lshift)
|
|
|
|
self.failUnlessRaises(TypeError, operator.lshift, None, 42)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.lshift(5, 1) == 10)
|
|
|
|
self.failUnless(operator.lshift(5, 0) == 5)
|
|
|
|
self.assertRaises(ValueError, operator.lshift, 2, -1)
|
|
|
|
|
|
|
|
def test_mod(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.mod)
|
|
|
|
self.failUnlessRaises(TypeError, operator.mod, None, 42)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.mod(5, 2) == 1)
|
|
|
|
|
|
|
|
def test_mul(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.mul)
|
|
|
|
self.failUnlessRaises(TypeError, operator.mul, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.mul(5, 2) == 10)
|
|
|
|
|
|
|
|
def test_neg(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.neg)
|
|
|
|
self.failUnlessRaises(TypeError, operator.neg, None)
|
2007-07-11 09:20:59 -03:00
|
|
|
self.assertEqual(operator.neg(5), -5)
|
|
|
|
self.assertEqual(operator.neg(-5), 5)
|
|
|
|
self.assertEqual(operator.neg(0), 0)
|
|
|
|
self.assertEqual(operator.neg(-0), 0)
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
def test_bitwise_or(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.or_)
|
|
|
|
self.failUnlessRaises(TypeError, operator.or_, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.or_(0xa, 0x5) == 0xf)
|
|
|
|
|
|
|
|
def test_pos(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.pos)
|
|
|
|
self.failUnlessRaises(TypeError, operator.pos, None)
|
2007-07-11 09:20:59 -03:00
|
|
|
self.assertEqual(operator.pos(5), 5)
|
|
|
|
self.assertEqual(operator.pos(-5), -5)
|
|
|
|
self.assertEqual(operator.pos(0), 0)
|
|
|
|
self.assertEqual(operator.pos(-0), 0)
|
2001-08-11 00:21:35 -03:00
|
|
|
|
2002-08-19 00:19:09 -03:00
|
|
|
def test_pow(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.pow)
|
|
|
|
self.failUnlessRaises(TypeError, operator.pow, None, None)
|
2007-07-11 09:20:59 -03:00
|
|
|
self.assertEqual(operator.pow(3,5), 3**5)
|
|
|
|
self.assertEqual(operator.__pow__(3,5), 3**5)
|
2002-08-19 00:19:09 -03:00
|
|
|
self.assertRaises(TypeError, operator.pow, 1)
|
|
|
|
self.assertRaises(TypeError, operator.pow, 1, 2, 3)
|
|
|
|
|
2001-08-11 00:21:35 -03:00
|
|
|
def test_repeat(self):
|
2007-05-07 19:24:25 -03:00
|
|
|
a = list(range(3))
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.repeat)
|
|
|
|
self.failUnlessRaises(TypeError, operator.repeat, a, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.repeat(a, 2) == a+a)
|
|
|
|
self.failUnless(operator.repeat(a, 1) == a)
|
|
|
|
self.failUnless(operator.repeat(a, 0) == [])
|
|
|
|
a = (1, 2, 3)
|
|
|
|
self.failUnless(operator.repeat(a, 2) == a+a)
|
|
|
|
self.failUnless(operator.repeat(a, 1) == a)
|
|
|
|
self.failUnless(operator.repeat(a, 0) == ())
|
|
|
|
a = '123'
|
|
|
|
self.failUnless(operator.repeat(a, 2) == a+a)
|
|
|
|
self.failUnless(operator.repeat(a, 1) == a)
|
|
|
|
self.failUnless(operator.repeat(a, 0) == '')
|
2005-12-29 11:59:19 -04:00
|
|
|
a = Seq1([4, 5, 6])
|
|
|
|
self.failUnless(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
|
|
|
|
self.failUnless(operator.repeat(a, 1) == [4, 5, 6])
|
|
|
|
self.failUnless(operator.repeat(a, 0) == [])
|
|
|
|
a = Seq2([4, 5, 6])
|
|
|
|
self.failUnless(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
|
|
|
|
self.failUnless(operator.repeat(a, 1) == [4, 5, 6])
|
|
|
|
self.failUnless(operator.repeat(a, 0) == [])
|
|
|
|
self.failUnlessRaises(TypeError, operator.repeat, 6, 7)
|
2001-08-11 00:21:35 -03:00
|
|
|
|
|
|
|
def test_rshift(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.rshift)
|
|
|
|
self.failUnlessRaises(TypeError, operator.rshift, None, 42)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.rshift(5, 1) == 2)
|
|
|
|
self.failUnless(operator.rshift(5, 0) == 5)
|
|
|
|
self.assertRaises(ValueError, operator.rshift, 2, -1)
|
|
|
|
|
|
|
|
def test_contains(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.contains)
|
|
|
|
self.failUnlessRaises(TypeError, operator.contains, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.contains(range(4), 2))
|
|
|
|
self.failIf(operator.contains(range(4), 5))
|
|
|
|
|
|
|
|
def test_setitem(self):
|
2007-05-07 19:24:25 -03:00
|
|
|
a = list(range(3))
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.setitem, a)
|
|
|
|
self.failUnlessRaises(TypeError, operator.setitem, a, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.setitem(a, 0, 2) is None)
|
|
|
|
self.assert_(a == [2, 1, 2])
|
|
|
|
self.assertRaises(IndexError, operator.setitem, a, 4, 2)
|
|
|
|
|
|
|
|
def test_sub(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.sub)
|
|
|
|
self.failUnlessRaises(TypeError, operator.sub, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.sub(5, 2) == 3)
|
|
|
|
|
|
|
|
def test_truth(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
class C(object):
|
2006-11-28 15:15:13 -04:00
|
|
|
def __bool__(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
raise SyntaxError
|
|
|
|
self.failUnlessRaises(TypeError, operator.truth)
|
|
|
|
self.failUnlessRaises(SyntaxError, operator.truth, C())
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.truth(5))
|
|
|
|
self.failUnless(operator.truth([0]))
|
|
|
|
self.failIf(operator.truth(0))
|
|
|
|
self.failIf(operator.truth([]))
|
|
|
|
|
|
|
|
def test_bitwise_xor(self):
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.xor)
|
|
|
|
self.failUnlessRaises(TypeError, operator.xor, None, None)
|
2001-08-11 00:21:35 -03:00
|
|
|
self.failUnless(operator.xor(0xb, 0xc) == 0x7)
|
|
|
|
|
2003-01-18 19:22:20 -04:00
|
|
|
def test_is(self):
|
|
|
|
a = b = 'xyzpdq'
|
|
|
|
c = a[:3] + b[3:]
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.is_)
|
2003-01-18 19:22:20 -04:00
|
|
|
self.failUnless(operator.is_(a, b))
|
|
|
|
self.failIf(operator.is_(a,c))
|
|
|
|
|
|
|
|
def test_is_not(self):
|
|
|
|
a = b = 'xyzpdq'
|
|
|
|
c = a[:3] + b[3:]
|
2004-11-01 13:10:19 -04:00
|
|
|
self.failUnlessRaises(TypeError, operator.is_not)
|
2003-01-18 19:22:20 -04:00
|
|
|
self.failIf(operator.is_not(a, b))
|
|
|
|
self.failUnless(operator.is_not(a,c))
|
2001-08-11 00:21:35 -03:00
|
|
|
|
2003-12-01 09:18:39 -04:00
|
|
|
def test_attrgetter(self):
|
|
|
|
class A:
|
|
|
|
pass
|
|
|
|
a = A()
|
|
|
|
a.name = 'arthur'
|
|
|
|
f = operator.attrgetter('name')
|
|
|
|
self.assertEqual(f(a), 'arthur')
|
|
|
|
f = operator.attrgetter('rank')
|
|
|
|
self.assertRaises(AttributeError, f, a)
|
|
|
|
f = operator.attrgetter(2)
|
|
|
|
self.assertRaises(TypeError, f, a)
|
|
|
|
self.assertRaises(TypeError, operator.attrgetter)
|
2005-03-09 12:38:48 -04:00
|
|
|
|
|
|
|
# multiple gets
|
|
|
|
record = A()
|
|
|
|
record.x = 'X'
|
|
|
|
record.y = 'Y'
|
|
|
|
record.z = 'Z'
|
|
|
|
self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y'))
|
|
|
|
self.assertRaises(TypeError, operator.attrgetter('x', (), 'y'), record)
|
2003-12-01 09:18:39 -04:00
|
|
|
|
2004-11-01 13:10:19 -04:00
|
|
|
class C(object):
|
Merged revisions 60124-60142 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60131 | georg.brandl | 2008-01-20 12:13:29 +0100 (Sun, 20 Jan 2008) | 3 lines
#1351692: in pprint, always call format() for dict and list items to enable
custom formatting of contents via subclassing PrettyPrinter.
........
r60133 | georg.brandl | 2008-01-20 12:43:03 +0100 (Sun, 20 Jan 2008) | 2 lines
#1178141: add addinfourl.code to get http status code from urllib.
........
r60134 | georg.brandl | 2008-01-20 13:05:43 +0100 (Sun, 20 Jan 2008) | 4 lines
#856047: respect the ``no_proxy`` env var when checking for proxies
in urllib and using the other ``_proxy`` env vars.
Original patch by Donovan Baarda.
........
r60135 | georg.brandl | 2008-01-20 13:18:17 +0100 (Sun, 20 Jan 2008) | 4 lines
#1664522: in urllib, don't read non-existing directories in ftp mode,
returning a 0-byte file -- raise an IOError instead.
Original patch from Phil Knirsch.
........
r60136 | georg.brandl | 2008-01-20 13:57:47 +0100 (Sun, 20 Jan 2008) | 2 lines
#799369: document possible sys.platform values.
........
r60137 | georg.brandl | 2008-01-20 14:08:37 +0100 (Sun, 20 Jan 2008) | 2 lines
#652749: document the constants added to the builtins by site.py.
........
r60138 | georg.brandl | 2008-01-20 14:59:46 +0100 (Sun, 20 Jan 2008) | 2 lines
#1648: add sys.gettrace() and sys.getprofile().
........
r60139 | georg.brandl | 2008-01-20 15:17:42 +0100 (Sun, 20 Jan 2008) | 2 lines
#1669: don't allow shutil.rmtree() to be called on a symlink.
........
r60140 | georg.brandl | 2008-01-20 15:20:02 +0100 (Sun, 20 Jan 2008) | 2 lines
Fix test_pyclbr after urllib change.
........
r60141 | christian.heimes | 2008-01-20 15:28:28 +0100 (Sun, 20 Jan 2008) | 1 line
Fixed a wrong assumption in configure.in and Include/pyport.h. The is finite function is not called isfinite() but finite(). Sorry, my fault. :)
........
r60142 | georg.brandl | 2008-01-20 15:31:27 +0100 (Sun, 20 Jan 2008) | 2 lines
#1876: fix typos in test_operator.
........
2008-01-20 11:14:11 -04:00
|
|
|
def __getattr__(self, name):
|
2004-11-01 13:10:19 -04:00
|
|
|
raise SyntaxError
|
Merged revisions 60124-60142 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60131 | georg.brandl | 2008-01-20 12:13:29 +0100 (Sun, 20 Jan 2008) | 3 lines
#1351692: in pprint, always call format() for dict and list items to enable
custom formatting of contents via subclassing PrettyPrinter.
........
r60133 | georg.brandl | 2008-01-20 12:43:03 +0100 (Sun, 20 Jan 2008) | 2 lines
#1178141: add addinfourl.code to get http status code from urllib.
........
r60134 | georg.brandl | 2008-01-20 13:05:43 +0100 (Sun, 20 Jan 2008) | 4 lines
#856047: respect the ``no_proxy`` env var when checking for proxies
in urllib and using the other ``_proxy`` env vars.
Original patch by Donovan Baarda.
........
r60135 | georg.brandl | 2008-01-20 13:18:17 +0100 (Sun, 20 Jan 2008) | 4 lines
#1664522: in urllib, don't read non-existing directories in ftp mode,
returning a 0-byte file -- raise an IOError instead.
Original patch from Phil Knirsch.
........
r60136 | georg.brandl | 2008-01-20 13:57:47 +0100 (Sun, 20 Jan 2008) | 2 lines
#799369: document possible sys.platform values.
........
r60137 | georg.brandl | 2008-01-20 14:08:37 +0100 (Sun, 20 Jan 2008) | 2 lines
#652749: document the constants added to the builtins by site.py.
........
r60138 | georg.brandl | 2008-01-20 14:59:46 +0100 (Sun, 20 Jan 2008) | 2 lines
#1648: add sys.gettrace() and sys.getprofile().
........
r60139 | georg.brandl | 2008-01-20 15:17:42 +0100 (Sun, 20 Jan 2008) | 2 lines
#1669: don't allow shutil.rmtree() to be called on a symlink.
........
r60140 | georg.brandl | 2008-01-20 15:20:02 +0100 (Sun, 20 Jan 2008) | 2 lines
Fix test_pyclbr after urllib change.
........
r60141 | christian.heimes | 2008-01-20 15:28:28 +0100 (Sun, 20 Jan 2008) | 1 line
Fixed a wrong assumption in configure.in and Include/pyport.h. The is finite function is not called isfinite() but finite(). Sorry, my fault. :)
........
r60142 | georg.brandl | 2008-01-20 15:31:27 +0100 (Sun, 20 Jan 2008) | 2 lines
#1876: fix typos in test_operator.
........
2008-01-20 11:14:11 -04:00
|
|
|
self.failUnlessRaises(SyntaxError, operator.attrgetter('foo'), C())
|
2004-11-01 13:10:19 -04:00
|
|
|
|
Merged revisions 61003-61033 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r61004 | georg.brandl | 2008-02-23 19:47:04 +0100 (Sat, 23 Feb 2008) | 2 lines
Documentation coverage builder, part 1.
........
r61006 | andrew.kuchling | 2008-02-23 20:02:33 +0100 (Sat, 23 Feb 2008) | 1 line
#1389051: IMAP module tries to read entire message in one chunk. Patch by Fredrik Lundh.
........
r61008 | andrew.kuchling | 2008-02-23 20:28:58 +0100 (Sat, 23 Feb 2008) | 1 line
#1389051, #1092502: fix excessively large allocations when using read() on a socket
........
r61011 | jeffrey.yasskin | 2008-02-23 20:40:54 +0100 (Sat, 23 Feb 2008) | 13 lines
Prevent classes like:
class RunSelfFunction(object):
def __init__(self):
self.thread = threading.Thread(target=self._run)
self.thread.start()
def _run(self):
pass
from creating a permanent cycle between the object and the thread by having the
Thread delete its references to the object when it completes.
As an example of the effect of this bug, paramiko.Transport inherits from
Thread to avoid it.
........
r61013 | jeffrey.yasskin | 2008-02-23 21:40:35 +0100 (Sat, 23 Feb 2008) | 3 lines
Followup to r61011: Also avoid the reference cycle when the Thread's target
raises an exception.
........
r61017 | georg.brandl | 2008-02-23 22:59:11 +0100 (Sat, 23 Feb 2008) | 2 lines
#2101: fix removeAttribute docs.
........
r61018 | georg.brandl | 2008-02-23 23:05:38 +0100 (Sat, 23 Feb 2008) | 2 lines
Add examples to modulefinder docs. Written for GHOP by Josip Dzolonga.
........
r61019 | georg.brandl | 2008-02-23 23:09:24 +0100 (Sat, 23 Feb 2008) | 2 lines
Use os.closerange() in popen2.
........
r61020 | georg.brandl | 2008-02-23 23:14:02 +0100 (Sat, 23 Feb 2008) | 2 lines
Use os.closerange().
........
r61021 | georg.brandl | 2008-02-23 23:35:33 +0100 (Sat, 23 Feb 2008) | 3 lines
In test_heapq and test_bisect, test both the Python and the C implementation.
Originally written for GHOP by Josip Dzolonga, heavily patched by me.
........
r61024 | facundo.batista | 2008-02-23 23:54:12 +0100 (Sat, 23 Feb 2008) | 3 lines
Added simple test case. Thanks Benjamin Peterson.
........
r61025 | georg.brandl | 2008-02-23 23:55:18 +0100 (Sat, 23 Feb 2008) | 2 lines
#1825: correctly document msilib.add_data.
........
r61027 | georg.brandl | 2008-02-24 00:02:23 +0100 (Sun, 24 Feb 2008) | 2 lines
#1826: allow dotted attribute paths in operator.attrgetter.
........
r61028 | georg.brandl | 2008-02-24 00:04:35 +0100 (Sun, 24 Feb 2008) | 2 lines
#1506171: added operator.methodcaller().
........
r61029 | georg.brandl | 2008-02-24 00:25:26 +0100 (Sun, 24 Feb 2008) | 2 lines
Document import ./. threading issues. #1720705.
........
r61032 | georg.brandl | 2008-02-24 00:43:01 +0100 (Sun, 24 Feb 2008) | 2 lines
Specify what kind of warning -3 emits.
........
r61033 | christian.heimes | 2008-02-24 00:59:45 +0100 (Sun, 24 Feb 2008) | 1 line
MS Windows doesn't have mode_t but stat.st_mode is defined as unsigned short.
........
2008-02-23 20:38:49 -04:00
|
|
|
# recursive gets
|
|
|
|
a = A()
|
|
|
|
a.name = 'arthur'
|
|
|
|
a.child = A()
|
|
|
|
a.child.name = 'thomas'
|
|
|
|
f = operator.attrgetter('child.name')
|
|
|
|
self.assertEqual(f(a), 'thomas')
|
|
|
|
self.assertRaises(AttributeError, f, a.child)
|
|
|
|
f = operator.attrgetter('name', 'child.name')
|
|
|
|
self.assertEqual(f(a), ('arthur', 'thomas'))
|
|
|
|
f = operator.attrgetter('name', 'child.name', 'child.child.name')
|
|
|
|
self.assertRaises(AttributeError, f, a)
|
|
|
|
|
|
|
|
a.child.child = A()
|
|
|
|
a.child.child.name = 'johnson'
|
|
|
|
f = operator.attrgetter('child.child.name')
|
|
|
|
self.assertEqual(f(a), 'johnson')
|
|
|
|
f = operator.attrgetter('name', 'child.name', 'child.child.name')
|
|
|
|
self.assertEqual(f(a), ('arthur', 'thomas', 'johnson'))
|
|
|
|
|
2003-12-01 09:18:39 -04:00
|
|
|
def test_itemgetter(self):
|
|
|
|
a = 'ABCDE'
|
|
|
|
f = operator.itemgetter(2)
|
|
|
|
self.assertEqual(f(a), 'C')
|
|
|
|
f = operator.itemgetter(10)
|
|
|
|
self.assertRaises(IndexError, f, a)
|
|
|
|
|
2004-11-01 13:10:19 -04:00
|
|
|
class C(object):
|
Merged revisions 60124-60142 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60131 | georg.brandl | 2008-01-20 12:13:29 +0100 (Sun, 20 Jan 2008) | 3 lines
#1351692: in pprint, always call format() for dict and list items to enable
custom formatting of contents via subclassing PrettyPrinter.
........
r60133 | georg.brandl | 2008-01-20 12:43:03 +0100 (Sun, 20 Jan 2008) | 2 lines
#1178141: add addinfourl.code to get http status code from urllib.
........
r60134 | georg.brandl | 2008-01-20 13:05:43 +0100 (Sun, 20 Jan 2008) | 4 lines
#856047: respect the ``no_proxy`` env var when checking for proxies
in urllib and using the other ``_proxy`` env vars.
Original patch by Donovan Baarda.
........
r60135 | georg.brandl | 2008-01-20 13:18:17 +0100 (Sun, 20 Jan 2008) | 4 lines
#1664522: in urllib, don't read non-existing directories in ftp mode,
returning a 0-byte file -- raise an IOError instead.
Original patch from Phil Knirsch.
........
r60136 | georg.brandl | 2008-01-20 13:57:47 +0100 (Sun, 20 Jan 2008) | 2 lines
#799369: document possible sys.platform values.
........
r60137 | georg.brandl | 2008-01-20 14:08:37 +0100 (Sun, 20 Jan 2008) | 2 lines
#652749: document the constants added to the builtins by site.py.
........
r60138 | georg.brandl | 2008-01-20 14:59:46 +0100 (Sun, 20 Jan 2008) | 2 lines
#1648: add sys.gettrace() and sys.getprofile().
........
r60139 | georg.brandl | 2008-01-20 15:17:42 +0100 (Sun, 20 Jan 2008) | 2 lines
#1669: don't allow shutil.rmtree() to be called on a symlink.
........
r60140 | georg.brandl | 2008-01-20 15:20:02 +0100 (Sun, 20 Jan 2008) | 2 lines
Fix test_pyclbr after urllib change.
........
r60141 | christian.heimes | 2008-01-20 15:28:28 +0100 (Sun, 20 Jan 2008) | 1 line
Fixed a wrong assumption in configure.in and Include/pyport.h. The is finite function is not called isfinite() but finite(). Sorry, my fault. :)
........
r60142 | georg.brandl | 2008-01-20 15:31:27 +0100 (Sun, 20 Jan 2008) | 2 lines
#1876: fix typos in test_operator.
........
2008-01-20 11:14:11 -04:00
|
|
|
def __getitem__(self, name):
|
2004-11-01 13:10:19 -04:00
|
|
|
raise SyntaxError
|
Merged revisions 60124-60142 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60131 | georg.brandl | 2008-01-20 12:13:29 +0100 (Sun, 20 Jan 2008) | 3 lines
#1351692: in pprint, always call format() for dict and list items to enable
custom formatting of contents via subclassing PrettyPrinter.
........
r60133 | georg.brandl | 2008-01-20 12:43:03 +0100 (Sun, 20 Jan 2008) | 2 lines
#1178141: add addinfourl.code to get http status code from urllib.
........
r60134 | georg.brandl | 2008-01-20 13:05:43 +0100 (Sun, 20 Jan 2008) | 4 lines
#856047: respect the ``no_proxy`` env var when checking for proxies
in urllib and using the other ``_proxy`` env vars.
Original patch by Donovan Baarda.
........
r60135 | georg.brandl | 2008-01-20 13:18:17 +0100 (Sun, 20 Jan 2008) | 4 lines
#1664522: in urllib, don't read non-existing directories in ftp mode,
returning a 0-byte file -- raise an IOError instead.
Original patch from Phil Knirsch.
........
r60136 | georg.brandl | 2008-01-20 13:57:47 +0100 (Sun, 20 Jan 2008) | 2 lines
#799369: document possible sys.platform values.
........
r60137 | georg.brandl | 2008-01-20 14:08:37 +0100 (Sun, 20 Jan 2008) | 2 lines
#652749: document the constants added to the builtins by site.py.
........
r60138 | georg.brandl | 2008-01-20 14:59:46 +0100 (Sun, 20 Jan 2008) | 2 lines
#1648: add sys.gettrace() and sys.getprofile().
........
r60139 | georg.brandl | 2008-01-20 15:17:42 +0100 (Sun, 20 Jan 2008) | 2 lines
#1669: don't allow shutil.rmtree() to be called on a symlink.
........
r60140 | georg.brandl | 2008-01-20 15:20:02 +0100 (Sun, 20 Jan 2008) | 2 lines
Fix test_pyclbr after urllib change.
........
r60141 | christian.heimes | 2008-01-20 15:28:28 +0100 (Sun, 20 Jan 2008) | 1 line
Fixed a wrong assumption in configure.in and Include/pyport.h. The is finite function is not called isfinite() but finite(). Sorry, my fault. :)
........
r60142 | georg.brandl | 2008-01-20 15:31:27 +0100 (Sun, 20 Jan 2008) | 2 lines
#1876: fix typos in test_operator.
........
2008-01-20 11:14:11 -04:00
|
|
|
self.failUnlessRaises(SyntaxError, operator.itemgetter(42), C())
|
2004-11-01 13:10:19 -04:00
|
|
|
|
2003-12-01 09:18:39 -04:00
|
|
|
f = operator.itemgetter('name')
|
|
|
|
self.assertRaises(TypeError, f, a)
|
|
|
|
self.assertRaises(TypeError, operator.itemgetter)
|
|
|
|
|
|
|
|
d = dict(key='val')
|
|
|
|
f = operator.itemgetter('key')
|
|
|
|
self.assertEqual(f(d), 'val')
|
|
|
|
f = operator.itemgetter('nonkey')
|
|
|
|
self.assertRaises(KeyError, f, d)
|
|
|
|
|
|
|
|
# example used in the docs
|
|
|
|
inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
|
|
|
|
getcount = operator.itemgetter(1)
|
Merged revisions 56125-56153 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
........
r56127 | georg.brandl | 2007-06-30 09:32:49 +0200 (Sat, 30 Jun 2007) | 2 lines
Fix a place where floor division would be in order.
........
r56135 | guido.van.rossum | 2007-07-01 06:13:54 +0200 (Sun, 01 Jul 2007) | 28 lines
Make map() and filter() identical to itertools.imap() and .ifilter(),
respectively.
I fixed two bootstrap issues, due to the dynamic import of itertools:
1. Starting python requires that map() and filter() are not used until
site.py has added build/lib.<arch> to sys.path.
2. Building python requires that setup.py and distutils and everything
they use is free of map() and filter() calls.
Beyond this, I only fixed the tests in test_builtin.py.
Others, please help fixing the remaining tests that are now broken!
The fixes are usually simple:
a. map(None, X) -> list(X)
b. map(F, X) -> list(map(F, X))
c. map(lambda x: F(x), X) -> [F(x) for x in X]
d. filter(F, X) -> list(filter(F, X))
e. filter(lambda x: P(x), X) -> [x for x in X if P(x)]
Someone, please also contribute a fixer for 2to3 to do this.
It can leave map()/filter() calls alone that are already
inside a list() or sorted() call or for-loop.
Only in rare cases have I seen code that depends on map() of lists
of different lengths going to the end of the longest, or on filter()
of a string or tuple returning an object of the same type; these
will need more thought to fix.
........
r56136 | guido.van.rossum | 2007-07-01 06:22:01 +0200 (Sun, 01 Jul 2007) | 3 lines
Make it so that test_decimal fails instead of hangs, to help automated
test runners.
........
r56139 | georg.brandl | 2007-07-01 18:20:58 +0200 (Sun, 01 Jul 2007) | 2 lines
Fix a few test cases after the map->imap change.
........
r56142 | neal.norwitz | 2007-07-02 06:38:12 +0200 (Mon, 02 Jul 2007) | 1 line
Get a bunch more tests passing after converting map/filter to return iterators.
........
r56147 | guido.van.rossum | 2007-07-02 15:32:02 +0200 (Mon, 02 Jul 2007) | 4 lines
Fix the remaining failing unit tests (at least on OSX).
Also tweaked urllib2 so it doesn't raise socket.gaierror when
all network interfaces are turned off.
........
2007-07-03 05:25:58 -03:00
|
|
|
self.assertEqual(list(map(getcount, inventory)), [3, 2, 5, 1])
|
2003-12-17 16:43:33 -04:00
|
|
|
self.assertEqual(sorted(inventory, key=getcount),
|
2003-12-01 09:18:39 -04:00
|
|
|
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
|
|
|
|
|
2005-03-09 12:38:48 -04:00
|
|
|
# multiple gets
|
Merged revisions 56125-56153 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
........
r56127 | georg.brandl | 2007-06-30 09:32:49 +0200 (Sat, 30 Jun 2007) | 2 lines
Fix a place where floor division would be in order.
........
r56135 | guido.van.rossum | 2007-07-01 06:13:54 +0200 (Sun, 01 Jul 2007) | 28 lines
Make map() and filter() identical to itertools.imap() and .ifilter(),
respectively.
I fixed two bootstrap issues, due to the dynamic import of itertools:
1. Starting python requires that map() and filter() are not used until
site.py has added build/lib.<arch> to sys.path.
2. Building python requires that setup.py and distutils and everything
they use is free of map() and filter() calls.
Beyond this, I only fixed the tests in test_builtin.py.
Others, please help fixing the remaining tests that are now broken!
The fixes are usually simple:
a. map(None, X) -> list(X)
b. map(F, X) -> list(map(F, X))
c. map(lambda x: F(x), X) -> [F(x) for x in X]
d. filter(F, X) -> list(filter(F, X))
e. filter(lambda x: P(x), X) -> [x for x in X if P(x)]
Someone, please also contribute a fixer for 2to3 to do this.
It can leave map()/filter() calls alone that are already
inside a list() or sorted() call or for-loop.
Only in rare cases have I seen code that depends on map() of lists
of different lengths going to the end of the longest, or on filter()
of a string or tuple returning an object of the same type; these
will need more thought to fix.
........
r56136 | guido.van.rossum | 2007-07-01 06:22:01 +0200 (Sun, 01 Jul 2007) | 3 lines
Make it so that test_decimal fails instead of hangs, to help automated
test runners.
........
r56139 | georg.brandl | 2007-07-01 18:20:58 +0200 (Sun, 01 Jul 2007) | 2 lines
Fix a few test cases after the map->imap change.
........
r56142 | neal.norwitz | 2007-07-02 06:38:12 +0200 (Mon, 02 Jul 2007) | 1 line
Get a bunch more tests passing after converting map/filter to return iterators.
........
r56147 | guido.van.rossum | 2007-07-02 15:32:02 +0200 (Mon, 02 Jul 2007) | 4 lines
Fix the remaining failing unit tests (at least on OSX).
Also tweaked urllib2 so it doesn't raise socket.gaierror when
all network interfaces are turned off.
........
2007-07-03 05:25:58 -03:00
|
|
|
data = list(map(str, range(20)))
|
2005-03-09 12:38:48 -04:00
|
|
|
self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
|
|
|
|
self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
|
|
|
|
|
Merged revisions 61003-61033 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r61004 | georg.brandl | 2008-02-23 19:47:04 +0100 (Sat, 23 Feb 2008) | 2 lines
Documentation coverage builder, part 1.
........
r61006 | andrew.kuchling | 2008-02-23 20:02:33 +0100 (Sat, 23 Feb 2008) | 1 line
#1389051: IMAP module tries to read entire message in one chunk. Patch by Fredrik Lundh.
........
r61008 | andrew.kuchling | 2008-02-23 20:28:58 +0100 (Sat, 23 Feb 2008) | 1 line
#1389051, #1092502: fix excessively large allocations when using read() on a socket
........
r61011 | jeffrey.yasskin | 2008-02-23 20:40:54 +0100 (Sat, 23 Feb 2008) | 13 lines
Prevent classes like:
class RunSelfFunction(object):
def __init__(self):
self.thread = threading.Thread(target=self._run)
self.thread.start()
def _run(self):
pass
from creating a permanent cycle between the object and the thread by having the
Thread delete its references to the object when it completes.
As an example of the effect of this bug, paramiko.Transport inherits from
Thread to avoid it.
........
r61013 | jeffrey.yasskin | 2008-02-23 21:40:35 +0100 (Sat, 23 Feb 2008) | 3 lines
Followup to r61011: Also avoid the reference cycle when the Thread's target
raises an exception.
........
r61017 | georg.brandl | 2008-02-23 22:59:11 +0100 (Sat, 23 Feb 2008) | 2 lines
#2101: fix removeAttribute docs.
........
r61018 | georg.brandl | 2008-02-23 23:05:38 +0100 (Sat, 23 Feb 2008) | 2 lines
Add examples to modulefinder docs. Written for GHOP by Josip Dzolonga.
........
r61019 | georg.brandl | 2008-02-23 23:09:24 +0100 (Sat, 23 Feb 2008) | 2 lines
Use os.closerange() in popen2.
........
r61020 | georg.brandl | 2008-02-23 23:14:02 +0100 (Sat, 23 Feb 2008) | 2 lines
Use os.closerange().
........
r61021 | georg.brandl | 2008-02-23 23:35:33 +0100 (Sat, 23 Feb 2008) | 3 lines
In test_heapq and test_bisect, test both the Python and the C implementation.
Originally written for GHOP by Josip Dzolonga, heavily patched by me.
........
r61024 | facundo.batista | 2008-02-23 23:54:12 +0100 (Sat, 23 Feb 2008) | 3 lines
Added simple test case. Thanks Benjamin Peterson.
........
r61025 | georg.brandl | 2008-02-23 23:55:18 +0100 (Sat, 23 Feb 2008) | 2 lines
#1825: correctly document msilib.add_data.
........
r61027 | georg.brandl | 2008-02-24 00:02:23 +0100 (Sun, 24 Feb 2008) | 2 lines
#1826: allow dotted attribute paths in operator.attrgetter.
........
r61028 | georg.brandl | 2008-02-24 00:04:35 +0100 (Sun, 24 Feb 2008) | 2 lines
#1506171: added operator.methodcaller().
........
r61029 | georg.brandl | 2008-02-24 00:25:26 +0100 (Sun, 24 Feb 2008) | 2 lines
Document import ./. threading issues. #1720705.
........
r61032 | georg.brandl | 2008-02-24 00:43:01 +0100 (Sun, 24 Feb 2008) | 2 lines
Specify what kind of warning -3 emits.
........
r61033 | christian.heimes | 2008-02-24 00:59:45 +0100 (Sun, 24 Feb 2008) | 1 line
MS Windows doesn't have mode_t but stat.st_mode is defined as unsigned short.
........
2008-02-23 20:38:49 -04:00
|
|
|
def test_methodcaller(self):
|
|
|
|
self.assertRaises(TypeError, operator.methodcaller)
|
|
|
|
class A:
|
|
|
|
def foo(self, *args, **kwds):
|
|
|
|
return args[0] + args[1]
|
|
|
|
def bar(self, f=42):
|
|
|
|
return f
|
|
|
|
a = A()
|
|
|
|
f = operator.methodcaller('foo')
|
|
|
|
self.assertRaises(IndexError, f, a)
|
|
|
|
f = operator.methodcaller('foo', 1, 2)
|
|
|
|
self.assertEquals(f(a), 3)
|
|
|
|
f = operator.methodcaller('bar')
|
|
|
|
self.assertEquals(f(a), 42)
|
|
|
|
self.assertRaises(TypeError, f, a, a)
|
|
|
|
f = operator.methodcaller('bar', f=5)
|
|
|
|
self.assertEquals(f(a), 5)
|
|
|
|
|
2005-12-29 12:50:42 -04:00
|
|
|
def test_inplace(self):
|
|
|
|
class C(object):
|
|
|
|
def __iadd__ (self, other): return "iadd"
|
|
|
|
def __iand__ (self, other): return "iand"
|
|
|
|
def __ifloordiv__(self, other): return "ifloordiv"
|
|
|
|
def __ilshift__ (self, other): return "ilshift"
|
|
|
|
def __imod__ (self, other): return "imod"
|
|
|
|
def __imul__ (self, other): return "imul"
|
|
|
|
def __ior__ (self, other): return "ior"
|
|
|
|
def __ipow__ (self, other): return "ipow"
|
|
|
|
def __irshift__ (self, other): return "irshift"
|
|
|
|
def __isub__ (self, other): return "isub"
|
|
|
|
def __itruediv__ (self, other): return "itruediv"
|
|
|
|
def __ixor__ (self, other): return "ixor"
|
|
|
|
def __getitem__(self, other): return 5 # so that C is a sequence
|
|
|
|
c = C()
|
|
|
|
self.assertEqual(operator.iadd (c, 5), "iadd")
|
|
|
|
self.assertEqual(operator.iand (c, 5), "iand")
|
|
|
|
self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
|
|
|
|
self.assertEqual(operator.ilshift (c, 5), "ilshift")
|
|
|
|
self.assertEqual(operator.imod (c, 5), "imod")
|
|
|
|
self.assertEqual(operator.imul (c, 5), "imul")
|
|
|
|
self.assertEqual(operator.ior (c, 5), "ior")
|
|
|
|
self.assertEqual(operator.ipow (c, 5), "ipow")
|
|
|
|
self.assertEqual(operator.irshift (c, 5), "irshift")
|
|
|
|
self.assertEqual(operator.isub (c, 5), "isub")
|
|
|
|
self.assertEqual(operator.itruediv (c, 5), "itruediv")
|
|
|
|
self.assertEqual(operator.ixor (c, 5), "ixor")
|
|
|
|
self.assertEqual(operator.iconcat (c, c), "iadd")
|
|
|
|
self.assertEqual(operator.irepeat (c, 5), "imul")
|
|
|
|
self.assertEqual(operator.__iadd__ (c, 5), "iadd")
|
|
|
|
self.assertEqual(operator.__iand__ (c, 5), "iand")
|
|
|
|
self.assertEqual(operator.__ifloordiv__(c, 5), "ifloordiv")
|
|
|
|
self.assertEqual(operator.__ilshift__ (c, 5), "ilshift")
|
|
|
|
self.assertEqual(operator.__imod__ (c, 5), "imod")
|
|
|
|
self.assertEqual(operator.__imul__ (c, 5), "imul")
|
|
|
|
self.assertEqual(operator.__ior__ (c, 5), "ior")
|
|
|
|
self.assertEqual(operator.__ipow__ (c, 5), "ipow")
|
|
|
|
self.assertEqual(operator.__irshift__ (c, 5), "irshift")
|
|
|
|
self.assertEqual(operator.__isub__ (c, 5), "isub")
|
|
|
|
self.assertEqual(operator.__itruediv__ (c, 5), "itruediv")
|
|
|
|
self.assertEqual(operator.__ixor__ (c, 5), "ixor")
|
|
|
|
self.assertEqual(operator.__iconcat__ (c, c), "iadd")
|
|
|
|
self.assertEqual(operator.__irepeat__ (c, 5), "imul")
|
2005-03-09 12:38:48 -04:00
|
|
|
|
|
|
|
def test_main(verbose=None):
|
|
|
|
import sys
|
|
|
|
test_classes = (
|
|
|
|
OperatorTestCase,
|
|
|
|
)
|
|
|
|
|
2008-05-20 18:35:26 -03:00
|
|
|
support.run_unittest(*test_classes)
|
2001-09-20 18:33:42 -03:00
|
|
|
|
2005-03-09 12:38:48 -04:00
|
|
|
# verify reference counting
|
|
|
|
if verbose and hasattr(sys, "gettotalrefcount"):
|
|
|
|
import gc
|
|
|
|
counts = [None] * 5
|
2007-05-07 19:24:25 -03:00
|
|
|
for i in range(len(counts)):
|
2008-05-20 18:35:26 -03:00
|
|
|
support.run_unittest(*test_classes)
|
2005-03-09 12:38:48 -04:00
|
|
|
gc.collect()
|
|
|
|
counts[i] = sys.gettotalrefcount()
|
2007-02-09 01:37:30 -04:00
|
|
|
print(counts)
|
2001-09-20 18:33:42 -03:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2005-03-09 12:38:48 -04:00
|
|
|
test_main(verbose=True)
|