~ubuntu-branches/ubuntu/oneiric/python2.6/oneiric

« back to all changes in this revision

Viewing changes to Lib/test/test_struct.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2010-08-07 20:03:08 UTC
  • mfrom: (10.1.27 sid)
  • Revision ID: james.westby@ubuntu.com-20100807200308-bwsyymoc4donr9a9
Tags: 2.6.6~rc1-1ubuntu1
* Merge with Debian; remaining changes:
  - Regenerate the control file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import os
1
2
import array
2
3
import unittest
3
4
import struct
 
5
import inspect
4
6
import warnings
5
 
import inspect
6
 
warnings.filterwarnings("ignore", "struct integer overflow masking is deprecated",
7
 
                        DeprecationWarning)
 
7
from test.test_support import run_unittest, check_warnings, _check_py3k_warnings
 
8
 
8
9
 
9
10
from functools import wraps
10
11
from test.test_support import TestFailed, verbose, run_unittest
13
14
ISBIGENDIAN = sys.byteorder == "big"
14
15
IS32BIT = sys.maxsize == 0x7fffffff
15
16
 
 
17
testmod_filename = os.path.splitext(__file__)[0] + '.py'
16
18
try:
17
19
    import _struct
18
20
except ImportError:
66
68
        # SF bug 1530559. struct.pack raises TypeError where it used to convert.
67
69
        if PY_STRUCT_FLOAT_COERCE == 2:
68
70
            # Test for pre-2.5 struct module
69
 
            packed = struct.pack(format, number)
70
 
            floored = struct.unpack(format, packed)[0]
 
71
            with check_warnings((".*integer argument expected, got float",
 
72
                                DeprecationWarning)) as w:
 
73
                packed = struct.pack(format, number)
 
74
                floored = struct.unpack(format, packed)[0]
71
75
            self.assertEqual(floored, int(number),
72
76
                             "did not correcly coerce float to int")
73
77
            return
488
492
 
489
493
    def test_issue4228(self):
490
494
        # Packing a long may yield either 32 or 64 bits
491
 
        x = struct.pack('L', -1)[:4]
 
495
        with check_warnings(quiet=True):
 
496
            x = struct.pack('L', -1)[:4]
492
497
        self.assertEqual(x, '\xff'*4)
493
498
 
494
 
    def test_unpack_from(self):
495
 
        test_string = 'abcd01234'
 
499
    def test_unpack_from(self, cls=str):
 
500
        data = cls('abcd01234')
496
501
        fmt = '4s'
497
502
        s = struct.Struct(fmt)
498
 
        for cls in (str, buffer):
499
 
            data = cls(test_string)
500
 
            self.assertEqual(s.unpack_from(data), ('abcd',))
501
 
            self.assertEqual(s.unpack_from(data, 2), ('cd01',))
502
 
            self.assertEqual(s.unpack_from(data, 4), ('0123',))
503
 
            for i in xrange(6):
504
 
                self.assertEqual(s.unpack_from(data, i), (data[i:i+4],))
505
 
            for i in xrange(6, len(test_string) + 1):
506
 
                self.assertRaises(struct.error, s.unpack_from, data, i)
507
 
        for cls in (str, buffer):
508
 
            data = cls(test_string)
509
 
            self.assertEqual(struct.unpack_from(fmt, data), ('abcd',))
510
 
            self.assertEqual(struct.unpack_from(fmt, data, 2), ('cd01',))
511
 
            self.assertEqual(struct.unpack_from(fmt, data, 4), ('0123',))
512
 
            for i in xrange(6):
513
 
                self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],))
514
 
            for i in xrange(6, len(test_string) + 1):
515
 
                self.assertRaises(struct.error, struct.unpack_from, fmt, data, i)
 
503
 
 
504
        self.assertEqual(s.unpack_from(data), ('abcd',))
 
505
        self.assertEqual(struct.unpack_from(fmt, data), ('abcd',))
 
506
        for i in xrange(6):
 
507
            self.assertEqual(s.unpack_from(data, i), (data[i:i+4],))
 
508
            self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],))
 
509
        for i in xrange(6, len(data) + 1):
 
510
            self.assertRaises(struct.error, s.unpack_from, data, i)
 
511
            self.assertRaises(struct.error, struct.unpack_from, fmt, data, i)
516
512
 
517
513
    def test_pack_into(self):
518
514
        test_string = 'Reykjavik rocks, eow!'
561
557
        self.assertRaises(struct.error, pack_into, small_buf, 2, test_string)
562
558
 
563
559
    def test_unpack_with_buffer(self):
564
 
        # SF bug 1563759: struct.unpack doens't support buffer protocol objects
565
 
        data1 = array.array('B', '\x12\x34\x56\x78')
566
 
        data2 = buffer('......\x12\x34\x56\x78......', 6, 4)
567
 
        for data in [data1, data2]:
568
 
            value, = struct.unpack('>I', data)
569
 
            self.assertEqual(value, 0x12345678)
 
560
        with _check_py3k_warnings(("buffer.. not supported in 3.x",
 
561
                                  DeprecationWarning)):
 
562
            # SF bug 1563759: struct.unpack doesn't support buffer protocol objects
 
563
            data1 = array.array('B', '\x12\x34\x56\x78')
 
564
            data2 = buffer('......\x12\x34\x56\x78......', 6, 4)
 
565
            for data in [data1, data2]:
 
566
                value, = struct.unpack('>I', data)
 
567
                self.assertEqual(value, 0x12345678)
 
568
 
 
569
            self.test_unpack_from(cls=buffer)
570
570
 
571
571
    def test_bool(self):
572
572
        for prefix in tuple("<>!=")+('',):
573
573
            false = (), [], [], '', 0
574
 
            true = [1], 'test', 5, -1, 0xffffffffL+1, 0xffffffff/2
 
574
            true = [1], 'test', 5, -1, 0xffffffffL+1, 0xffffffff//2
575
575
 
576
576
            falseFormat = prefix + '?' * len(false)
577
577
            packedFalse = struct.pack(falseFormat, *false)