home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_391 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  19.2 KB  |  537 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import unittest
  5. from ctypes import *
  6. from struct import calcsize
  7.  
  8. class SubclassesTest(unittest.TestCase):
  9.     
  10.     def test_subclass(self):
  11.         
  12.         class X(Structure):
  13.             _fields_ = [
  14.                 ('a', c_int)]
  15.  
  16.         
  17.         class Y(X):
  18.             _fields_ = [
  19.                 ('b', c_int)]
  20.  
  21.         
  22.         class Z(X):
  23.             pass
  24.  
  25.         self.failUnlessEqual(sizeof(X), sizeof(c_int))
  26.         self.failUnlessEqual(sizeof(Y), sizeof(c_int) * 2)
  27.         self.failUnlessEqual(sizeof(Z), sizeof(c_int))
  28.         self.failUnlessEqual(X._fields_, [
  29.             ('a', c_int)])
  30.         self.failUnlessEqual(Y._fields_, [
  31.             ('b', c_int)])
  32.         self.failUnlessEqual(Z._fields_, [
  33.             ('a', c_int)])
  34.  
  35.     
  36.     def test_subclass_delayed(self):
  37.         
  38.         class X(Structure):
  39.             pass
  40.  
  41.         self.failUnlessEqual(sizeof(X), 0)
  42.         X._fields_ = [
  43.             ('a', c_int)]
  44.         
  45.         class Y(X):
  46.             pass
  47.  
  48.         self.failUnlessEqual(sizeof(Y), sizeof(X))
  49.         Y._fields_ = [
  50.             ('b', c_int)]
  51.         
  52.         class Z(X):
  53.             pass
  54.  
  55.         self.failUnlessEqual(sizeof(X), sizeof(c_int))
  56.         self.failUnlessEqual(sizeof(Y), sizeof(c_int) * 2)
  57.         self.failUnlessEqual(sizeof(Z), sizeof(c_int))
  58.         self.failUnlessEqual(X._fields_, [
  59.             ('a', c_int)])
  60.         self.failUnlessEqual(Y._fields_, [
  61.             ('b', c_int)])
  62.         self.failUnlessEqual(Z._fields_, [
  63.             ('a', c_int)])
  64.  
  65.  
  66.  
  67. class StructureTestCase(unittest.TestCase):
  68.     formats = {
  69.         'c': c_char,
  70.         'b': c_byte,
  71.         'B': c_ubyte,
  72.         'h': c_short,
  73.         'H': c_ushort,
  74.         'i': c_int,
  75.         'I': c_uint,
  76.         'l': c_long,
  77.         'L': c_ulong,
  78.         'q': c_longlong,
  79.         'Q': c_ulonglong,
  80.         'f': c_float,
  81.         'd': c_double }
  82.     
  83.     def test_simple_structs(self):
  84.         for X in self.formats.items():
  85.             (code, tp) = None
  86.             self.failUnlessEqual((sizeof(X), code), (calcsize('c%c0%c' % (code, code)), code))
  87.         
  88.  
  89.     
  90.     def test_unions(self):
  91.         for X in self.formats.items():
  92.             (code, tp) = None
  93.             self.failUnlessEqual((sizeof(X), code), (calcsize('%c' % code), code))
  94.         
  95.  
  96.     
  97.     def test_struct_alignment(self):
  98.         
  99.         class X(Structure):
  100.             _fields_ = [
  101.                 ('x', c_char * 3)]
  102.  
  103.         self.failUnlessEqual(alignment(X), calcsize('s'))
  104.         self.failUnlessEqual(sizeof(X), calcsize('3s'))
  105.         
  106.         class Y(Structure):
  107.             _fields_ = [
  108.                 ('x', c_char * 3),
  109.                 ('y', c_int)]
  110.  
  111.         self.failUnlessEqual(alignment(Y), calcsize('i'))
  112.         self.failUnlessEqual(sizeof(Y), calcsize('3si'))
  113.         
  114.         class SI('SI', (Structure,)):
  115.             _fields_ = [
  116.                 ('a', X),
  117.                 ('b', Y)]
  118.  
  119.         self.failUnlessEqual(alignment(SI), max(alignment(Y), alignment(X)))
  120.         self.failUnlessEqual(sizeof(SI), calcsize('3s0i 3si 0i'))
  121.         
  122.         class IS('IS', (Structure,)):
  123.             _fields_ = [
  124.                 ('b', Y),
  125.                 ('a', X)]
  126.  
  127.         self.failUnlessEqual(alignment(SI), max(alignment(X), alignment(Y)))
  128.         self.failUnlessEqual(sizeof(IS), calcsize('3si 3s 0i'))
  129.         
  130.         class XX((Structure,)):
  131.             _fields_ = [
  132.                 ('a', X),
  133.                 ('b', X)]
  134.  
  135.         self.failUnlessEqual(alignment(XX), alignment(X))
  136.         self.failUnlessEqual(sizeof(XX), calcsize('3s 3s 0s'))
  137.  
  138.     
  139.     def test_emtpy(self):
  140.         
  141.         class X(Structure):
  142.             _fields_ = []
  143.  
  144.         
  145.         class Y(Union):
  146.             _fields_ = []
  147.  
  148.         None(self.failUnless if alignment(Y) == alignment(Y) else alignment(Y) == 1)
  149.         None(self.failUnless if sizeof(Y) == sizeof(Y) else sizeof(Y) == 0)
  150.         
  151.         class XX((Structure,)):
  152.             _fields_ = [
  153.                 ('a', X),
  154.                 ('b', X)]
  155.  
  156.         self.failUnlessEqual(alignment(XX), 1)
  157.         self.failUnlessEqual(sizeof(XX), 0)
  158.  
  159.     
  160.     def test_fields(self):
  161.         
  162.         class X(Structure):
  163.             _fields_ = [
  164.                 ('x', c_int),
  165.                 ('y', c_char)]
  166.  
  167.         self.failUnlessEqual(X.x.offset, 0)
  168.         self.failUnlessEqual(X.x.size, sizeof(c_int))
  169.         self.failUnlessEqual(X.y.offset, sizeof(c_int))
  170.         self.failUnlessEqual(X.y.size, sizeof(c_char))
  171.         self.assertRaises((TypeError, AttributeError), setattr, X.x, 'offset', 92)
  172.         self.assertRaises((TypeError, AttributeError), setattr, X.x, 'size', 92)
  173.         
  174.         class X(Union):
  175.             _fields_ = [
  176.                 ('x', c_int),
  177.                 ('y', c_char)]
  178.  
  179.         self.failUnlessEqual(X.x.offset, 0)
  180.         self.failUnlessEqual(X.x.size, sizeof(c_int))
  181.         self.failUnlessEqual(X.y.offset, 0)
  182.         self.failUnlessEqual(X.y.size, sizeof(c_char))
  183.         self.assertRaises((TypeError, AttributeError), setattr, X.x, 'offset', 92)
  184.         self.assertRaises((TypeError, AttributeError), setattr, X.x, 'size', 92)
  185.  
  186.     
  187.     def test_packed(self):
  188.         
  189.         class X(Structure):
  190.             _fields_ = [
  191.                 ('a', c_byte),
  192.                 ('b', c_longlong)]
  193.             _pack_ = 1
  194.  
  195.         self.failUnlessEqual(sizeof(X), 9)
  196.         self.failUnlessEqual(X.b.offset, 1)
  197.         
  198.         class X(Structure):
  199.             _fields_ = [
  200.                 ('a', c_byte),
  201.                 ('b', c_longlong)]
  202.             _pack_ = 2
  203.  
  204.         self.failUnlessEqual(sizeof(X), 10)
  205.         self.failUnlessEqual(X.b.offset, 2)
  206.         
  207.         class X(Structure):
  208.             _fields_ = [
  209.                 ('a', c_byte),
  210.                 ('b', c_longlong)]
  211.             _pack_ = 4
  212.  
  213.         self.failUnlessEqual(sizeof(X), 12)
  214.         self.failUnlessEqual(X.b.offset, 4)
  215.         import struct
  216.         longlong_size = struct.calcsize('q')
  217.         longlong_align = struct.calcsize('bq') - longlong_size
  218.         
  219.         class X(Structure):
  220.             _fields_ = [
  221.                 ('a', c_byte),
  222.                 ('b', c_longlong)]
  223.             _pack_ = 8
  224.  
  225.         self.failUnlessEqual(sizeof(X), longlong_align + longlong_size)
  226.         self.failUnlessEqual(X.b.offset, min(8, longlong_align))
  227.         d = {
  228.             '_fields_': [
  229.                 ('a', 'b'),
  230.                 ('b', 'q')],
  231.             '_pack_': -1 }
  232.         self.assertRaises(ValueError, type(Structure), 'X', (Structure,), d)
  233.  
  234.     
  235.     def test_initializers(self):
  236.         
  237.         class Person(Structure):
  238.             _fields_ = [
  239.                 ('name', c_char * 6),
  240.                 ('age', c_int)]
  241.  
  242.         self.assertRaises(TypeError, Person, 42)
  243.         self.assertRaises(ValueError, Person, 'asldkjaslkdjaslkdj')
  244.         self.assertRaises(TypeError, Person, 'Name', 'HI')
  245.         self.failUnlessEqual(Person('12345', 5).name, '12345')
  246.         self.failUnlessEqual(Person('123456', 5).name, '123456')
  247.         self.assertRaises(ValueError, Person, '1234567', 5)
  248.  
  249.     
  250.     def test_conflicting_initializers(self):
  251.         
  252.         class POINT(Structure):
  253.             _fields_ = [
  254.                 ('x', c_int),
  255.                 ('y', c_int)]
  256.  
  257.         self.assertRaises(TypeError, POINT, 2, 3, x = 4)
  258.         self.assertRaises(TypeError, POINT, 2, 3, y = 4)
  259.         self.assertRaises(TypeError, POINT, 2, 3, 4)
  260.  
  261.     
  262.     def test_keyword_initializers(self):
  263.         
  264.         class POINT(Structure):
  265.             _fields_ = [
  266.                 ('x', c_int),
  267.                 ('y', c_int)]
  268.  
  269.         pt = POINT(1, 2)
  270.         self.failUnlessEqual((pt.x, pt.y), (1, 2))
  271.         pt = POINT(y = 2, x = 1)
  272.         self.failUnlessEqual((pt.x, pt.y), (1, 2))
  273.  
  274.     
  275.     def test_invalid_field_types(self):
  276.         
  277.         class POINT(Structure):
  278.             pass
  279.  
  280.         self.assertRaises(TypeError, setattr, POINT, '_fields_', [
  281.             ('x', 1),
  282.             ('y', 2)])
  283.  
  284.     
  285.     def test_intarray_fields(self):
  286.         
  287.         class SomeInts(Structure):
  288.             _fields_ = [
  289.                 ('a', c_int * 4)]
  290.  
  291.         self.failUnlessEqual(SomeInts((1, 2)).a[:], [
  292.             1,
  293.             2,
  294.             0,
  295.             0])
  296.         self.failUnlessEqual(SomeInts((1, 2)).a[::], [
  297.             1,
  298.             2,
  299.             0,
  300.             0])
  301.         self.failUnlessEqual(SomeInts((1, 2)).a[::-1], [
  302.             0,
  303.             0,
  304.             2,
  305.             1])
  306.         self.failUnlessEqual(SomeInts((1, 2)).a[::2], [
  307.             1,
  308.             0])
  309.         self.failUnlessEqual(SomeInts((1, 2)).a[1:5:6], [
  310.             2])
  311.         self.failUnlessEqual(SomeInts((1, 2)).a[6:4:-1], [])
  312.         self.failUnlessEqual(SomeInts((1, 2, 3, 4)).a[:], [
  313.             1,
  314.             2,
  315.             3,
  316.             4])
  317.         self.failUnlessEqual(SomeInts((1, 2, 3, 4)).a[::], [
  318.             1,
  319.             2,
  320.             3,
  321.             4])
  322.         self.assertRaises(RuntimeError, SomeInts, (1, 2, 3, 4, 5))
  323.  
  324.     
  325.     def test_nested_initializers(self):
  326.         
  327.         class Phone(Structure):
  328.             _fields_ = [
  329.                 ('areacode', c_char * 6),
  330.                 ('number', c_char * 12)]
  331.  
  332.         
  333.         class Person((Structure,)):
  334.             _fields_ = [
  335.                 ('name', c_char * 12),
  336.                 ('phone', Phone),
  337.                 ('age', c_int)]
  338.  
  339.         p = Person('Someone', ('1234', '5678'), 5)
  340.         self.failUnlessEqual(p.name, 'Someone')
  341.         self.failUnlessEqual(p.phone.areacode, '1234')
  342.         self.failUnlessEqual(p.phone.number, '5678')
  343.         self.failUnlessEqual(p.age, 5)
  344.  
  345.     
  346.     def test_structures_with_wchar(self):
  347.         
  348.         try:
  349.             c_wchar
  350.         except NameError:
  351.             return None
  352.  
  353.         
  354.         class PersonW(Structure):
  355.             _fields_ = [
  356.                 ('name', c_wchar * 12),
  357.                 ('age', c_int)]
  358.  
  359.         p = PersonW(u'Someone')
  360.         self.failUnlessEqual(p.name, 'Someone')
  361.         self.failUnlessEqual(PersonW(u'1234567890').name, u'1234567890')
  362.         self.failUnlessEqual(PersonW(u'12345678901').name, u'12345678901')
  363.         self.failUnlessEqual(PersonW(u'123456789012').name, u'123456789012')
  364.         self.assertRaises(ValueError, PersonW, u'1234567890123')
  365.  
  366.     
  367.     def test_init_errors(self):
  368.         
  369.         class Phone(Structure):
  370.             _fields_ = [
  371.                 ('areacode', c_char * 6),
  372.                 ('number', c_char * 12)]
  373.  
  374.         
  375.         class Person((Structure,)):
  376.             _fields_ = [
  377.                 ('name', c_char * 12),
  378.                 ('phone', Phone),
  379.                 ('age', c_int)]
  380.  
  381.         (cls, msg) = self.get_except(Person, 'Someone', (1, 2))
  382.         self.failUnlessEqual(cls, RuntimeError)
  383.         if issubclass(Exception, object):
  384.             self.failUnlessEqual(msg, "(Phone) <type 'exceptions.TypeError'>: expected string or Unicode object, int found")
  385.         else:
  386.             self.failUnlessEqual(msg, '(Phone) exceptions.TypeError: expected string or Unicode object, int found')
  387.         (cls, msg) = self.get_except(Person, 'Someone', ('a', 'b', 'c'))
  388.         self.failUnlessEqual(cls, RuntimeError)
  389.         if issubclass(Exception, object):
  390.             self.failUnlessEqual(msg, "(Phone) <type 'exceptions.TypeError'>: too many initializers")
  391.         else:
  392.             self.failUnlessEqual(msg, '(Phone) exceptions.TypeError: too many initializers')
  393.  
  394.     
  395.     def get_except(self, func, *args):
  396.         
  397.         try:
  398.             func(*args)
  399.         except Exception:
  400.             detail = None
  401.             return (detail.__class__, str(detail))
  402.  
  403.  
  404.     
  405.     def test_abstract_class(self):
  406.         
  407.         class X(Structure):
  408.             _abstract_ = 'something'
  409.  
  410.         (cls, msg) = self.get_except(eval, 'X()', locals())
  411.         self.failUnlessEqual((cls, msg), (TypeError, 'abstract class'))
  412.  
  413.     
  414.     def test_methods(self):
  415.         self.failUnless('in_dll' in dir(type(Structure)))
  416.         self.failUnless('from_address' in dir(type(Structure)))
  417.         self.failUnless('in_dll' in dir(type(Structure)))
  418.  
  419.     
  420.     def test_positional_args(self):
  421.         
  422.         class W(Structure):
  423.             _fields_ = [
  424.                 ('a', c_int),
  425.                 ('b', c_int)]
  426.  
  427.         
  428.         class X(W):
  429.             _fields_ = [
  430.                 ('c', c_int)]
  431.  
  432.         
  433.         class Y(X):
  434.             pass
  435.  
  436.         
  437.         class Z(Y):
  438.             _fields_ = [
  439.                 ('d', c_int),
  440.                 ('e', c_int),
  441.                 ('f', c_int)]
  442.  
  443.         z = Z(1, 2, 3, 4, 5, 6)
  444.         self.failUnlessEqual((z.a, z.b, z.c, z.d, z.e, z.f), (1, 2, 3, 4, 5, 6))
  445.         z = Z(1)
  446.         self.failUnlessEqual((z.a, z.b, z.c, z.d, z.e, z.f), (1, 0, 0, 0, 0, 0))
  447.         self.assertRaises((TypeError,), (lambda : Z(1, 2, 3, 4, 5, 6, 7)))
  448.  
  449.  
  450.  
  451. class PointerMemberTestCase(unittest.TestCase):
  452.     
  453.     def test(self):
  454.         
  455.         class S(Structure):
  456.             _fields_ = [
  457.                 ('array', POINTER(c_int))]
  458.  
  459.         s = S()
  460.         s.array = c_int * 3(1, 2, 3)
  461.         items = [ s.array[i] for i in range(3) ]
  462.         self.failUnlessEqual(items, [
  463.             1,
  464.             2,
  465.             3])
  466.         s.array[0] = 42
  467.         items = [ s.array[i] for i in range(3) ]
  468.         self.failUnlessEqual(items, [
  469.             42,
  470.             2,
  471.             3])
  472.         s.array[0] = 1
  473.         items = [ s.array[i] for i in range(3) ]
  474.         self.failUnlessEqual(items, [
  475.             1,
  476.             2,
  477.             3])
  478.  
  479.     
  480.     def test_none_to_pointer_fields(self):
  481.         
  482.         class S(Structure):
  483.             _fields_ = [
  484.                 ('x', c_int),
  485.                 ('p', POINTER(c_int))]
  486.  
  487.         s = S()
  488.         s.x = 12345678
  489.         s.p = None
  490.         self.failUnlessEqual(s.x, 12345678)
  491.  
  492.  
  493.  
  494. class TestRecursiveStructure(unittest.TestCase):
  495.     
  496.     def test_contains_itself(self):
  497.         
  498.         class Recursive(Structure):
  499.             pass
  500.  
  501.         
  502.         try:
  503.             Recursive._fields_ = [
  504.                 ('next', Recursive)]
  505.         except AttributeError:
  506.             details = None
  507.             self.failUnless('Structure or union cannot contain itself' in str(details))
  508.  
  509.         self.fail('Structure or union cannot contain itself')
  510.  
  511.     
  512.     def test_vice_versa(self):
  513.         
  514.         class First(Structure):
  515.             pass
  516.  
  517.         
  518.         class Second(Structure):
  519.             pass
  520.  
  521.         First._fields_ = [
  522.             ('second', Second)]
  523.         
  524.         try:
  525.             Second._fields_ = [
  526.                 ('first', First)]
  527.         except AttributeError:
  528.             details = None
  529.             self.failUnless('_fields_ is final' in str(details))
  530.  
  531.         self.fail('AttributeError not raised')
  532.  
  533.  
  534. if __name__ == '__main__':
  535.     unittest.main()
  536.  
  537.