예제 #1
0
    def test_BSTR(self):
        v = VARIANT()
        v.value = u"abc\x00123\x00"
        self.failUnlessEqual(v.value, "abc\x00123\x00")

        v.value = None
        # manually clear the variant
        v._.VT_I4 = 0

        # NULL pointer BSTR should be handled as empty string
        v.vt = VT_BSTR
        self.failUnless(v.value in ("", None))
예제 #2
0
    def test_BSTR(self):
        v = VARIANT()
        v.value = u"abc\x00123\x00"
        self.failUnlessEqual(v.value, "abc\x00123\x00")

        v.value = None
        # manually clear the variant
        v._.VT_I4 = 0

        # NULL pointer BSTR should be handled as empty string
        v.vt = VT_BSTR
        self.failUnless(v.value in ("", None))
예제 #3
0
    def test_integers(self):
        v = VARIANT()

        if (hasattr(sys, "maxint")):
            # this test doesn't work in Python 3000
            v.value = sys.maxint
            self.failUnlessEqual(v.value, sys.maxint)
            self.failUnlessEqual(type(v.value), int)

            v.value += 1
            self.failUnlessEqual(v.value, sys.maxint+1)
            self.failUnlessEqual(type(v.value), long)

        v.value = 1L
        self.failUnlessEqual(v.value, 1)
        self.failUnlessEqual(type(v.value), int)
예제 #4
0
 def test_int(self):
     import array
     for typecode in "bhiBHIlL":
         a = array.array(typecode, (1, 1, 1, 1))
         v = VARIANT()
         v.value = a
         self.failUnlessEqual(v.value, (1, 1, 1, 1))
예제 #5
0
    def test_decimal_as_currency(self):
        value = decimal.Decimal('3.14')

        v = VARIANT()
        v.value = value
        self.failUnlessEqual(v.vt, VT_CY)
        self.failUnlessEqual(v.value, value)
예제 #6
0
    def test_integers(self):
        v = VARIANT()

        if (hasattr(sys, "maxint")):
            # this test doesn't work in Python 3000
            v.value = sys.maxint
            self.failUnlessEqual(v.value, sys.maxint)
            self.failUnlessEqual(type(v.value), int)

            v.value += 1
            self.failUnlessEqual(v.value, sys.maxint+1)
            self.failUnlessEqual(type(v.value), long)

        v.value = 1L
        self.failUnlessEqual(v.value, 1)
        self.failUnlessEqual(type(v.value), int)
예제 #7
0
    def test_datetime(self):
        now = datetime.datetime.now()

        v = VARIANT()
        v.value = now
        self.failUnlessEqual(v.vt, VT_DATE)
        self.failUnlessEqual(v.value, now)
    def test_datetime(self):
        now = datetime.datetime.now()

        v = VARIANT()
        v.value = now
        self.failUnlessEqual(v.value, now)
        self.failUnlessEqual(v.vt, VT_DATE)
예제 #9
0
    def test_integers(self):
        v = VARIANT()

        if (hasattr(sys, "maxint")):
            # this test doesn't work in Python 3000
            v.value = sys.maxsize
            self.assertEqual(v.value, sys.maxsize)
            self.assertEqual(type(v.value), int)

            v.value += 1
            self.assertEqual(v.value, sys.maxsize+1)
            self.assertEqual(type(v.value), int)

        v.value = 1
        self.assertEqual(v.value, 1)
        self.assertEqual(type(v.value), int)
예제 #10
0
    def test_datetime(self):
        now = datetime.datetime.now()

        v = VARIANT()
        v.value = now
        self.assertEqual(v.vt, VT_DATE)
        self.assertEqual(v.value, now)
    def test_decimal(self):
        pi = Decimal("3.13")

        v = VARIANT()
        v.value = pi
        self.failUnlessEqual(v.vt, VT_CY)
        self.failUnlessEqual(v.value, pi)
예제 #12
0
 def test_int(self):
     import array
     for typecode in "bhiBHIlL":
         a = array.array(typecode, (1, 1, 1, 1))
         v = VARIANT()
         v.value = a
         self.failUnlessEqual(v.value, (1, 1, 1, 1))
예제 #13
0
    def test_decimal(self):
        pi = Decimal("3.13")

        v = VARIANT()
        v.value = pi
        self.failUnlessEqual(v.vt, VT_CY)
        self.failUnlessEqual(v.value, pi)
예제 #14
0
 def test_double(self):
     import array
     for typecode in "df":
         # because of FLOAT rounding errors, whi will only work for
         # certain values!
         a = array.array(typecode, (1.0, 2.0, 3.0, 4.5))
         v = VARIANT()
         v.value = a
         self.failUnlessEqual(v.value, (1.0, 2.0, 3.0, 4.5))
예제 #15
0
 def test_double(self):
     import array
     for typecode in "df":
         # because of FLOAT rounding errors, whi will only work for
         # certain values!
         a = array.array(typecode, (1.0, 2.0, 3.0, 4.5))
         v = VARIANT()
         v.value = a
         self.failUnlessEqual(v.value, (1.0, 2.0, 3.0, 4.5))
예제 #16
0
def intToVariant(i):
    '''
    helper method, constructs Windows "VARIANT" object representing an integer
    '''
    v = VARIANT()
    v.vt = VT_I4
    v.value = i
    assert( isinstance(i, int) )
    return v
예제 #17
0
 def test_int(self):
     np = get_numpy()
     if np is None:
         return
     for dtype in ('int8', 'int16', 'int32', 'int64', 'uint8',
             'uint16', 'uint32', 'uint64'):
         a = np.array((1, 1, 1, 1), dtype=dtype)
         v = VARIANT()
         v.value = a
         self.failUnless((v.value == a).all())
예제 #18
0
    def test_VARIANT_array(self):
        v = VARIANT()
        v.value = ((1, 2, 3), ("foo", "bar", None))
        self.failUnlessEqual(v.vt, VT_ARRAY | VT_VARIANT)
        self.failUnlessEqual(v.value, ((1, 2, 3), ("foo", "bar", None)))

        def func():
            v = VARIANT((1, 2, 3), ("foo", "bar", None))

        bytes = find_memleak(func)
        self.failIf(bytes, "Leaks %d bytes" % bytes)
예제 #19
0
 def test_double(self):
     np = get_numpy()
     if np is None:
         return
     for dtype in ('float32', 'float64'):
         # because of FLOAT rounding errors, whi will only work for
         # certain values!
         a = np.array([1.0, 2.0, 3.0, 4.5], dtype=dtype)
         v = VARIANT()
         v.value = a
         self.failUnless((v.value == a).all())
예제 #20
0
    def test_mixed(self):
        np = get_numpy()
        if np is None:
            return

        now = datetime.datetime.now()
        a = np.array(
            [11, "22", None, True, now, decimal.Decimal("3.14")]).reshape(2,3)
        v = VARIANT()
        v.value = a
        self.failUnless((v.value == a).all())
    def test_VARIANT_array(self):
        v = VARIANT()
        v.value = ((1, 2, 3), ("foo", "bar", None))
        self.failUnlessEqual(v.vt, VT_ARRAY | VT_VARIANT)
        self.failUnlessEqual(v.value, ((1, 2, 3), ("foo", "bar", None)))

        def func():
            v = VARIANT((1, 2, 3), ("foo", "bar", None))

        bytes = find_memleak(func)
        self.failIf(bytes, "Leaks %d bytes" % bytes)
예제 #22
0
 def test_ctypes_in_variant(self):
     v = VARIANT()
     objs = [(c_ubyte(3), VT_UI1),
             (c_char("x"), VT_UI1),
             (c_byte(3), VT_I1),
             (c_ushort(3), VT_UI2),
             (c_short(3), VT_I2),
             (c_uint(3), VT_UI4),
             (c_int(3), VT_I4),
             (c_double(3.14), VT_R8),
             (c_float(3.14), VT_R4),
             ]
     for value, vt in objs:
         v.value = value
         self.failUnlessEqual(v.vt, vt)
예제 #23
0
 def test_ctypes_in_variant(self):
     v = VARIANT()
     objs = [(c_ubyte(3), VT_UI1),
             (c_char("x"), VT_UI1),
             (c_byte(3), VT_I1),
             (c_ushort(3), VT_UI2),
             (c_short(3), VT_I2),
             (c_uint(3), VT_UI4),
             (c_int(3), VT_I4),
             (c_double(3.14), VT_R8),
             (c_float(3.14), VT_R4),
             ]
     for value, vt in objs:
         v.value = value
         self.failUnlessEqual(v.vt, vt)
예제 #24
0
    def test_com_pointers(self):
        # Storing a COM interface pointer in a VARIANT increments the refcount,
        # changing the variant to contain something else decrements it
        tlb = LoadRegTypeLib(GUID("{00020430-0000-0000-C000-000000000046}"), 2, 0, 0)
        rc = get_refcnt(tlb)

        v = VARIANT(tlb)
        self.failUnlessEqual(get_refcnt(tlb), rc+1)

        p = v.value
        self.failUnlessEqual(get_refcnt(tlb), rc+2)
        del p
        self.failUnlessEqual(get_refcnt(tlb), rc+1)

        v.value = None
        self.failUnlessEqual(get_refcnt(tlb), rc)
예제 #25
0
    def test_com_pointers(self):
        # Storing a COM interface pointer in a VARIANT increments the refcount,
        # changing the variant to contain something else decrements it
        tlb = LoadRegTypeLib(GUID("{00020430-0000-0000-C000-000000000046}"), 2, 0, 0)
        rc = get_refcnt(tlb)

        v = VARIANT(tlb)
        self.failUnlessEqual(get_refcnt(tlb), rc+1)

        p = v.value
        self.failUnlessEqual(get_refcnt(tlb), rc+2)
        del p
        self.failUnlessEqual(get_refcnt(tlb), rc+1)

        v.value = None
        self.failUnlessEqual(get_refcnt(tlb), rc)
예제 #26
0
    def test_datetime64(self):
        np = get_numpy()
        if np is None:
            return
        try:
            np.datetime64
        except AttributeError:
            return

        dates = [
            np.datetime64("2000-01-01T05:30:00", "s"),
            np.datetime64("1800-01-01T05:30:00", "ms"),
            np.datetime64("2000-01-01T12:34:56", "us")
        ]

        for date in dates:
            v = VARIANT()
            v.value = date
            self.failUnlessEqual(v.vt, VT_DATE)
            self.failUnlessEqual(v.value, date.astype(datetime.datetime))
예제 #27
0
    def get_wia_files(self):
        device_mgr = CreateObject(progid='WiaDevMgr', interface=IWiaDevMgr)
        targets = [device_mgr.CreateDevice(self.id)]
        while targets:
            target = targets.pop()
            enum = target.EnumChildItems()
            NUM_OBJECTS_TO_REQUEST = 20
            num_fetched = NUM_OBJECTS_TO_REQUEST
            while num_fetched == NUM_OBJECTS_TO_REQUEST:
                items = (POINTER(IWiaItem) * NUM_OBJECTS_TO_REQUEST)()
                num_fetched = enum.Next(NUM_OBJECTS_TO_REQUEST, items)
                for i in xrange(num_fetched):
                    try:
                        item = items[i]
                        flags = item.GetItemType()
                        if flags & WIA_ITEM_TYPE_FOLDER:
                            targets.append(item)
                            continue
                        property_store = item.QueryInterface(IWiaPropertyStorage)
                        propspec = PROPSPEC()
                        propspec.ulKind = 1
                        propspec.u.propid = 4098
                        name = VARIANT()
                        property_store.ReadMultiple(1, byref(propspec), byref(name))
                        propspec.u.propid = 4123
                        ext = VARIANT()
                        property_store.ReadMultiple(1, byref(propspec), byref(ext))
                        try:
                            filename = name.value
                            if ext.value:
                                filename = filename + '.' + ext.value
                        except Exception:
                            unhandled_exc_handler()
                            continue

                        if not image_or_video(filename):
                            TRACE('Skipping %s, not photo or video', filename)
                            continue
                        try:
                            if ext.value and ext.value.lower() == 'bmp':
                                report_bad_assumption('Bitmap in a WIA device')
                                continue
                        except Exception:
                            unhandled_exc_handler()

                        propspec.u.propid = 4116
                        filesize = VARIANT()
                        property_store.ReadMultiple(1, byref(propspec), byref(filesize))
                        propspec.u.propid = 4100
                        filetime = PROPVARIANT()
                        property_store.ReadMultiple(1, byref(propspec), cast(byref(filetime), POINTER(VARIANT)))
                        spec_tymed = PROPSPEC()
                        spec_tymed.ulKind = 1
                        spec_tymed.u.propid = 4108
                        var_tymed = VARIANT()
                        var_tymed.value = 128
                        property_store.WriteMultiple(1, byref(spec_tymed), byref(var_tymed), 4098)
                        filetime = datetime_from_var_date(filetime)
                        yield WiaFile(id=filename, name=filename, size=filesize.value, mtime=filetime, wia_item=item)
                    except Exception as e:
                        self.handle_disconnect_exceptions(e)
                        unhandled_exc_handler()
예제 #28
0
 def test_empty_BSTR(self):
     v = VARIANT()
     v.value = ""
     self.assertEqual(v.vt, VT_BSTR)