msi: Add a test for modifying a table containing binary data.

This commit is contained in:
Mike McCormack 2006-10-17 14:55:22 +09:00 committed by Alexandre Julliard
parent 194722d3a3
commit fbddd9060f
1 changed files with 51 additions and 2 deletions

View File

@ -1694,7 +1694,7 @@ static void test_handle_limit(void)
static void generate_transform(void)
{
MSIHANDLE hdb1, hdb2;
MSIHANDLE hdb1, hdb2, hrec;
LPCSTR query;
UINT r;
@ -1736,6 +1736,20 @@ static void generate_transform(void)
r = run_query(hdb1, 0, query);
ok(r == ERROR_SUCCESS, "failed to delete row\n");
hrec = MsiCreateRecord(2);
r = MsiRecordSetInteger(hrec, 1, 1);
ok(r == ERROR_SUCCESS, "failed to set integer\n");
write_file("testdata.bin", "naengmyon", 9);
r = MsiRecordSetStream(hrec, 2, "testdata.bin");
ok(r == ERROR_SUCCESS, "failed to set stream\n");
query = "INSERT INTO `BINARY` ( `ID`, `BLOB` ) VALUES ( ?, ? )";
r = run_query(hdb1, hrec, query);
ok(r == ERROR_SUCCESS, "failed to add row with blob\n");
MsiCloseHandle(hrec);
/* database needs to be committed */
MsiDatabaseCommit(hdb1);
@ -1744,6 +1758,8 @@ static void generate_transform(void)
MsiCloseHandle( hdb1 );
MsiCloseHandle( hdb2 );
DeleteFile("testdata.bin");
}
/* data for generating a transform */
@ -1755,6 +1771,8 @@ static const WCHAR name3[] = { 0x4840, 0x3f7f, 0x4164, 0x422f, 0x4836, 0 }; /* _
static const WCHAR name4[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0 }; /* _StringData */
static const WCHAR name5[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0 }; /* _StringPool */
static const WCHAR name6[] = { 0x4840, 0x3e16, 0x4818, 0}; /* MOO */
static const WCHAR name7[] = { 0x4840, 0x3c8b, 0x3a97, 0x409b, 0 }; /* BINARY */
static const WCHAR name8[] = { 0x3c8b, 0x3a97, 0x409b, 0x387e, 0 }; /* BINARY.1 */
/* data in each table */
static const WCHAR data1[] = { /* AAR */
@ -1786,6 +1804,13 @@ static const WCHAR data6[] = { /* MOO */
0x0000, 0x8003, /* delete row */
};
static const WCHAR data7[] = { /* BINARY */
0x0201, 0x8001, 0x0001,
};
static const char data8[] = /* stream data for the BINARY table */
"naengmyon";
static const struct {
LPCWSTR name;
const void *data;
@ -1798,6 +1823,8 @@ static const struct {
{ name4, data4, sizeof data4 - 1 },
{ name5, data5, sizeof data5 },
{ name6, data6, sizeof data6 },
{ name7, data7, sizeof data7 },
{ name8, data8, sizeof data8 - 1 },
};
#define NUM_TRANSFORM_TABLES (sizeof table_transform_data/sizeof table_transform_data[0])
@ -1829,7 +1856,7 @@ static void generate_transform_manual(void)
STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm );
if (FAILED(r))
{
ok(0, "failed to create stream\n");
ok(0, "failed to create stream %08x\n", r);
continue;
}
@ -1848,6 +1875,8 @@ static void test_try_transform(void)
MSIHANDLE hdb, hrec;
LPCSTR query;
UINT r;
DWORD sz;
char buffer[0x10];
DeleteFile(msifile);
DeleteFile(msifile2);
@ -1873,6 +1902,10 @@ static void test_try_transform(void)
r = run_query(hdb, 0, query);
ok(r == ERROR_SUCCESS, "failed to add row\n");
query = "CREATE TABLE `BINARY` ( `ID` SHORT NOT NULL, `BLOB` OBJECT PRIMARY KEY `ID`)";
r = run_query(hdb, 0, query);
ok(r == ERROR_SUCCESS, "failed to add table\n");
r = MsiDatabaseCommit( hdb );
ok( r == ERROR_SUCCESS , "Failed to commit database\n" );
@ -1930,6 +1963,22 @@ static void test_try_transform(void)
ok(r == ERROR_NO_MORE_ITEMS, "select query failed\n");
if (hrec) MsiCloseHandle(hrec);
/* check added stream */
hrec = 0;
query = "select `BLOB` from `BINARY` where `ID` = 1";
r = do_query(hdb, query, &hrec);
ok(r == ERROR_SUCCESS, "select query failed\n");
todo_wine {
/* check the contents of the stream */
sz = sizeof buffer;
r = MsiRecordReadStream( hrec, 1, buffer, &sz );
ok(r == ERROR_SUCCESS, "read stream failed\n");
ok(!memcmp(buffer, "naengmyon", 9), "stream data was wrong\n");
ok(sz == 9, "stream data was wrong size\n");
if (hrec) MsiCloseHandle(hrec);
}
MsiCloseHandle( hdb );
DeleteFile(msifile);