Module: wine Branch: refs/heads/master Commit: bbbcc2a1be3ed3e3a498f07cfbd707186114007a URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=bbbcc2a1be3ed3e3a498f07c...
Author: Mike McCormack mike@codeweavers.com Date: Sun Jun 11 09:51:59 2006 +0900
msi: Add some test cases for "SELECT ... WHERE condition".
---
dlls/msi/tests/db.c | 76 ++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 63 insertions(+), 13 deletions(-)
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c index 2ae69a4..44eecb1 100644 --- a/dlls/msi/tests/db.c +++ b/dlls/msi/tests/db.c @@ -48,7 +48,29 @@ static void test_msidatabase(void) ok( res == TRUE, "Failed to delete database\n" ); }
-static void test_msiinsert(void) +static UINT do_query(MSIHANDLE hdb, const char *query, MSIHANDLE *phrec) +{ + MSIHANDLE hview = 0; + UINT r, ret; + + /* open a select query */ + r = MsiDatabaseOpenView(hdb, query, &hview); + if (r != ERROR_SUCCESS) + return r; + r = MsiViewExecute(hview, 0); + if (r != ERROR_SUCCESS) + return r; + ret = MsiViewFetch(hview, phrec); + r = MsiViewClose(hview); + if (r != ERROR_SUCCESS) + return r; + r = MsiCloseHandle(hview); + if (r != ERROR_SUCCESS) + return r; + return ret; +} + +void test_msiinsert(void) { MSIHANDLE hdb = 0, hview = 0, hrec = 0; UINT r; @@ -87,18 +109,21 @@ static void test_msiinsert(void) r = MsiCloseHandle(hview); ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
- query = "SELECT * FROM `phone`"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewFetch(hview, &hrec); + query = "SELECT * FROM `phone` WHERE `id` = 1"; + r = do_query(hdb, query, &hrec); ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
/* check the record contains what we put in it */ r = MsiRecordGetFieldCount(hrec); ok(r == 3, "record count wrong\n");
+ todo_wine { + r = MsiRecordIsNull(hrec, 0); + ok(r == FALSE, "field 0 not null\n"); + r = MsiRecordGetInteger(hrec, 0); + ok(r == 0x138080, "field 0 contents wrong\n"); + } + r = MsiRecordGetInteger(hrec, 1); ok(r == 1, "field 1 contents wrong\n"); sz = sizeof buf; @@ -109,14 +134,39 @@ static void test_msiinsert(void) r = MsiRecordGetString(hrec, 3, buf, &sz); ok(r == ERROR_SUCCESS, "field 3 content fetch failed\n"); ok(!strcmp(buf,"8675309"), "field 3 content incorrect\n"); - - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); + + r = MsiCloseHandle(hrec); ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); + + /* open a select query */ + hrec = 100; + query = "SELECT * FROM `phone` WHERE `id` >= 10"; + r = do_query(hdb, query, &hrec); + ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); + ok(hrec == 0, "hrec should be null\n"); + r = MsiCloseHandle(hrec); ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
+ query = "SELECT * FROM `phone` WHERE `id` < 0"; + r = do_query(hdb, query, &hrec); + ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); + + query = "SELECT * FROM `phone` WHERE `id` <= 0"; + r = do_query(hdb, query, &hrec); + ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); + + query = "SELECT * FROM `phone` WHERE `id` <> 1"; + r = do_query(hdb, query, &hrec); + ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); + + query = "SELECT * FROM `phone` WHERE `id` > 10"; + r = do_query(hdb, query, &hrec); + ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); + + r = MsiViewFetch(0, NULL); + ok(r == ERROR_INVALID_PARAMETER, "MsiViewFetch failed\n"); + r = MsiDatabaseCommit(hdb); ok(r == ERROR_SUCCESS, "MsiDatabaseCommit failed\n");
@@ -141,7 +191,7 @@ static void test_msidecomposedesc(void) hmod = GetModuleHandle("msi.dll"); if (!hmod) return; - pMsiDecomposeDescriptorA = (fnMsiDecomposeDescriptorA) + pMsiDecomposeDescriptorA = (fnMsiDecomposeDescriptorA) GetProcAddress(hmod, "MsiDecomposeDescriptorA"); if (!pMsiDecomposeDescriptorA) return; @@ -623,7 +673,7 @@ static UINT get_columns_table_type(MSIHA if (r == field) type = MsiRecordGetInteger( rec, 4 ); MsiCloseHandle( rec ); - } + }
MsiViewClose(hview); }