static void test_load_save_bmp(void) { IPicture *pic; PICTDESC desc; short type; OLE_HANDLE handle; HGLOBAL hmem; DWORD *mem; IPersistStream *src_stream; IStream *dst_stream; HRESULT hr; desc.cbSizeofstruct = sizeof(desc); desc.picType = PICTYPE_BITMAP; desc.u.bmp.hpal = 0; desc.u.bmp.hbitmap = CreateBitmap(1, 1, 1, 1, NULL); hr = OleCreatePictureIndirect(&desc, &IID_IPicture, FALSE, (void**)&pic); ok(hr == S_OK, "OleCreatePictureIndirect error %#x\n", hr); type = -1; hr = IPicture_get_Type(pic, &type); ok(hr == S_OK,"get_Type error %#8x\n", hr); ok(type == PICTYPE_BITMAP,"expected picture type PICTYPE_BITMAP, got %d\n", type); hr = IPicture_get_Handle(pic, &handle); ok(hr == S_OK,"get_Handle error %#8x\n", hr); ok(IntToPtr(handle) == desc.u.bmp.hbitmap, "get_Handle returned wrong handle %#x\n", handle); hmem = GlobalAlloc(GMEM_ZEROINIT, 4096); hr = CreateStreamOnHGlobal(hmem, FALSE, &dst_stream); ok(hr == S_OK, "createstreamonhglobal error %#x\n", hr); hr = IPicture_QueryInterface(pic, &IID_IPersistStream, (void **)&src_stream); ok(hr == S_OK, "QueryInterface error %#x\n", hr); hr = IPersistStream_Save(src_stream, dst_stream, TRUE); ok(hr == S_OK, "Save error %#x\n", hr); IPersistStream_Release(src_stream); IStream_Release(dst_stream); mem = GlobalLock(hmem); ok(!memcmp(mem, "lt\0\0", 4), "got wrong stream header %04x\n", mem[0]); ok(mem[1] == 66, "expected stream size 66, got %u\n", mem[1]); ok(!memcmp(&mem[2], "BM", 2), "got wrong bmp header %04x\n", mem[2]); GlobalUnlock(hmem); GlobalFree(hmem); DeleteObject(desc.u.bmp.hbitmap); IPicture_Release(pic); }
static void test_load_save_icon(void) { IPicture *pic; PICTDESC desc; short type; OLE_HANDLE handle; HGLOBAL hmem; DWORD *mem; IPersistStream *src_stream; IStream *dst_stream; HRESULT hr; desc.cbSizeofstruct = sizeof(desc); desc.picType = PICTYPE_ICON; desc.u.icon.hicon = LoadIcon(0, IDI_APPLICATION); hr = OleCreatePictureIndirect(&desc, &IID_IPicture, FALSE, (void**)&pic); ok(hr == S_OK, "OleCreatePictureIndirect error %#x\n", hr); type = -1; hr = IPicture_get_Type(pic, &type); ok(hr == S_OK,"get_Type error %#8x\n", hr); ok(type == PICTYPE_ICON,"expected picture type PICTYPE_ICON, got %d\n", type); hr = IPicture_get_Handle(pic, &handle); ok(hr == S_OK,"get_Handle error %#8x\n", hr); ok(IntToPtr(handle) == desc.u.icon.hicon, "get_Handle returned wrong handle %#x\n", handle); hmem = GlobalAlloc(GMEM_ZEROINIT, 8192); hr = CreateStreamOnHGlobal(hmem, FALSE, &dst_stream); ok(hr == S_OK, "CreateStreamOnHGlobal error %#x\n", hr); hr = IPicture_QueryInterface(pic, &IID_IPersistStream, (void **)&src_stream); ok(hr == S_OK, "QueryInterface error %#x\n", hr); hr = IPersistStream_Save(src_stream, dst_stream, TRUE); ok(hr == S_OK, "Saveerror %#x\n", hr); IPersistStream_Release(src_stream); IStream_Release(dst_stream); mem = GlobalLock(hmem); ok(!memcmp(mem, "lt\0\0", 4), "got wrong stream header %04x\n", mem[0]); todo_wine ok(mem[1] == 766, "expected stream size 766, got %u\n", mem[1]); ok(mem[2] == 0x00010000, "got wrong icon header %04x\n", mem[2]); GlobalUnlock(hmem); GlobalFree(hmem); DestroyIcon(desc.u.icon.hicon); IPicture_Release(pic); }
static void test_dswave(void) { IDirectMusicObject *dmo; IPersistStream *ps; CLSID class = { 0 }; ULARGE_INTEGER size; HRESULT hr; hr = CoCreateInstance(&CLSID_DirectSoundWave, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (void**)&dmo); ok(hr == S_OK, "DirectSoundWave create failed: %08x, expected S_OK\n", hr); /* IPersistStream */ hr = IDirectMusicObject_QueryInterface(dmo, &IID_IPersistStream, (void**)&ps); ok(hr == S_OK, "QueryInterface for IID_IPersistStream failed: %08x\n", hr); hr = IPersistStream_GetClassID(ps, &class); ok(hr == S_OK, "IPersistStream_GetClassID failed: %08x\n", hr); ok(IsEqualGUID(&class, &CLSID_DirectSoundWave), "Expected class CLSID_DirectSoundWave got %s\n", wine_dbgstr_guid(&class)); /* Unimplemented IPersistStream methods */ hr = IPersistStream_IsDirty(ps); ok(hr == S_FALSE, "IPersistStream_IsDirty failed: %08x\n", hr); hr = IPersistStream_GetSizeMax(ps, &size); ok(hr == E_NOTIMPL, "IPersistStream_GetSizeMax failed: %08x\n", hr); hr = IPersistStream_Save(ps, NULL, TRUE); ok(hr == E_NOTIMPL, "IPersistStream_Save failed: %08x\n", hr); while (IDirectMusicObject_Release(dmo)); } START_TEST(dswave) { CoInitialize(NULL); if (missing_dswave()) { skip("dswave not available\n"); CoUninitialize(); return; } test_COM(); test_dswave(); CoUninitialize(); }
static void test_persist_save_data(const char *testname, IHlink *lnk, const unsigned char *expected_data, unsigned int expected_data_size, const unsigned char *expected_data_alt, unsigned int expected_data_alt_size) { HRESULT hr; IStream *stream; IPersistStream *ps; HGLOBAL hglobal; DWORD data_size; const unsigned char *data; DWORD i; BOOL same; unsigned int expected_data_win9x_size = 0; hr = IHlink_QueryInterface(lnk, &IID_IPersistStream, (void **)&ps); ok(hr == S_OK, "IHlink_QueryInterface failed with error 0x%08x\n", hr); hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); ok(hr == S_OK, "CreateStreamOnHGlobal failed with error 0x%08x\n", hr); hr = IPersistStream_Save(ps, stream, TRUE); ok(hr == S_OK, "IPersistStream_Save failed with error 0x%08x\n", hr); hr = GetHGlobalFromStream(stream, &hglobal); ok(hr == S_OK, "GetHGlobalFromStream failed with error 0x%08x\n", hr); data_size = GlobalSize(hglobal); data = GlobalLock(hglobal); if (expected_data_size % 4) expected_data_win9x_size = 4 * ((expected_data_size / 4) + 1); /* first check we have the right amount of data */ ok((data_size == expected_data_size) || (data_size == expected_data_alt_size) || broken(data_size == expected_data_win9x_size), /* Win9x and WinMe */ "%s: Size of saved data differs (expected %d or %d, actual %d)\n", testname, expected_data_size, expected_data_alt_size, data_size); same = TRUE; /* then do a byte-by-byte comparison */ for (i = 0; i < min(data_size, expected_data_size); i++) { if ((expected_data[i] != data[i]) && (((expected_data != expected_hlink_data2) && (expected_data != expected_hlink_data3)) || ((i < 52 || i >= 56) && (i < 80 || i >= 84)))) { same = FALSE; break; } } if (!same && (expected_data_alt != expected_data)) { /* then try the alternate data */ same = TRUE; for (i = 0; i < min(data_size, expected_data_alt_size); i++) { if ((expected_data_alt[i] != data[i]) && (((expected_data_alt != expected_hlink_data2) && (expected_data_alt != expected_hlink_data3)) || ((i < 52 || i >= 56) && (i < 80 || i >= 84)))) { same = FALSE; break; } } } ok(same, "%s: Saved data differs\n", testname); if (!same) { for (i = 0; i < data_size; i++) { if (i % 8 == 0) printf(" "); printf("0x%02x,", data[i]); if (i % 8 == 7) printf("\n"); } printf("\n"); } GlobalUnlock(hglobal); IStream_Release(stream); IPersistStream_Release(ps); }