Zebediah Figura : msi/tests: Separate and expand tests for MsiViewGetError ().

Alexandre Julliard julliard at winehq.org
Wed Mar 27 17:27:36 CDT 2019


Module: wine
Branch: master
Commit: fac04043d93b9e24f9f68954c6688310ab424954
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fac04043d93b9e24f9f68954c6688310ab424954

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Tue Mar 26 18:56:15 2019 -0500

msi/tests: Separate and expand tests for MsiViewGetError().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msi/tests/db.c | 176 +++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 132 insertions(+), 44 deletions(-)

diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 9fbf43e..16b20e5 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -879,45 +879,17 @@ static void test_viewmodify(void)
     r = run_query( hdb, 0, query );
     ok(r == ERROR_SUCCESS, "query failed\n");
 
-    /* check what the error function reports without doing anything */
-    sz = 0;
-    /* passing NULL as the 3rd param make function to crash on older platforms */
-    err = MsiViewGetErrorA( 0, NULL, &sz );
-    ok(err == MSIDBERROR_INVALIDARG, "MsiViewGetError return\n");
-
-    /* open a view */
     query = "SELECT * FROM `phone`";
     r = MsiDatabaseOpenViewA(hdb, query, &hview);
     ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
 
-    /* see what happens with a good hview and bad args */
-    err = MsiViewGetErrorA( hview, NULL, NULL );
-    ok(err == MSIDBERROR_INVALIDARG || err == MSIDBERROR_NOERROR,
-       "MsiViewGetError returns %u (expected -3)\n", err);
-    err = MsiViewGetErrorA( hview, buffer, NULL );
-    ok(err == MSIDBERROR_INVALIDARG, "MsiViewGetError return\n");
-
-    /* see what happens with a zero length buffer */
-    sz = 0;
-    buffer[0] = 'x';
-    err = MsiViewGetErrorA( hview, buffer, &sz );
-    ok(err == MSIDBERROR_MOREDATA, "MsiViewGetError return\n");
-    ok(buffer[0] == 'x', "buffer cleared\n");
-    ok(sz == 0, "size not zero\n");
-
-    /* ok this one is strange */
-    sz = 0;
-    err = MsiViewGetErrorA( hview, NULL, &sz );
-    ok(err == MSIDBERROR_NOERROR, "MsiViewGetError return\n");
-    ok(sz == 0, "size not zero\n");
-
-    /* see if it really has an error */
-    sz = sizeof buffer;
-    buffer[0] = 'x';
+    /* check what the error function reports without doing anything */
+    sz = sizeof(buffer);
+    strcpy(buffer, "x");
     err = MsiViewGetErrorA( hview, buffer, &sz );
-    ok(err == MSIDBERROR_NOERROR, "MsiViewGetError return\n");
-    ok(buffer[0] == 0, "buffer not cleared\n");
-    ok(sz == 0, "size not zero\n");
+    ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
+    ok(!buffer[0], "got \"%s\"\n", buffer);
+    ok(sz == 0, "got size %u\n", sz);
 
     r = MsiViewExecute(hview, 0);
     ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
@@ -933,12 +905,12 @@ static void test_viewmodify(void)
     r = MsiViewModify(hview, -1, hrec );
     ok(r == ERROR_INVALID_DATA, "MsiViewModify failed\n");
 
-    sz = sizeof buffer;
-    buffer[0] = 'x';
+    sz = sizeof(buffer);
+    strcpy(buffer, "x");
     err = MsiViewGetErrorA( hview, buffer, &sz );
-    ok(err == MSIDBERROR_NOERROR, "MsiViewGetError return\n");
-    ok(buffer[0] == 0, "buffer not cleared\n");
-    ok(sz == 0, "size not zero\n");
+    ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
+    ok(!buffer[0], "got \"%s\"\n", buffer);
+    ok(sz == 0, "got size %u\n", sz);
 
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -965,12 +937,12 @@ static void test_viewmodify(void)
     r = MsiViewModify(hview, MSIMODIFY_VALIDATE_NEW, hrec );
     ok(r == ERROR_INVALID_DATA, "MsiViewModify failed %u\n", r);
 
-    sz = sizeof buffer;
-    buffer[0] = 'x';
+    sz = sizeof(buffer);
+    strcpy(buffer, "x");
     err = MsiViewGetErrorA( hview, buffer, &sz );
-    ok(err == MSIDBERROR_DUPLICATEKEY, "MsiViewGetError returned %u\n", err);
-    ok(!strcmp(buffer, "id"), "expected \"id\" c, got \"%s\"\n", buffer);
-    ok(sz == 2, "size not 2\n");
+    ok(err == MSIDBERROR_DUPLICATEKEY, "got %d\n", err);
+    ok(!strcmp(buffer, "id"), "got \"%s\"\n", buffer);
+    ok(sz == 2, "got size %u\n", sz);
 
     /* insert the same thing again */
     r = MsiViewExecute(hview, 0);
@@ -9109,6 +9081,121 @@ static void test_viewmodify_insert(void)
     DeleteFileA(msifile);
 }
 
+static void test_view_get_error(void)
+{
+    MSIHANDLE view, rec, db = create_db();
+    MSIDBERROR err;
+    char buffer[5];
+    DWORD sz;
+    UINT r;
+
+    r = run_query(db, 0, "CREATE TABLE `T` (`A` SHORT, `B` SHORT NOT NULL PRIMARY KEY `A`)");
+    ok(!r, "got %u\n", r);
+    r = run_query(db, 0, "INSERT INTO `T` (`A`, `B`) VALUES (1, 2)");
+    r = run_query(db, 0, "CREATE TABLE `_Validation` ("
+            "`Table` CHAR(32) NOT NULL, `Column` CHAR(32) NOT NULL, "
+            "`Nullable` CHAR(4) NOT NULL, `MinValue` INT, `MaxValue` INT, "
+            "`KeyTable` CHAR(255), `KeyColumn` SHORT, `Category` CHAR(32), "
+            "`Set` CHAR(255), `Description` CHAR(255) PRIMARY KEY `Table`, `Column`)");
+    ok(!r, "got %u\n", r);
+    r = run_query(db, 0, "INSERT INTO `_Validation` (`Table`, `Column`, `Nullable`) VALUES ('T', 'A', 'N')");
+    ok(!r, "got %u\n", r);
+    r = run_query(db, 0, "INSERT INTO `_Validation` (`Table`, `Column`, `Nullable`) VALUES ('T', 'B', 'N')");
+    ok(!r, "got %u\n", r);
+
+    r = MsiDatabaseOpenViewA(db, "SELECT * FROM `T`", &view);
+    ok(!r, "got %u\n", r);
+
+    r = MsiViewExecute(view, 0);
+    ok(!r, "got %u\n", r);
+
+    sz = 0;
+    err = MsiViewGetErrorA(0, NULL, &sz);
+    ok(err == MSIDBERROR_INVALIDARG, "got %d\n", err);
+    ok(sz == 0, "got size %u\n", sz);
+
+    err = MsiViewGetErrorA(view, NULL, NULL);
+    ok(err == MSIDBERROR_INVALIDARG, "got %d\n", err);
+
+    sz = 0;
+    err = MsiViewGetErrorA(view, NULL, &sz);
+    ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
+    ok(sz == 0, "got size %u\n", sz);
+
+    sz = 0;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    ok(err == MSIDBERROR_MOREDATA, "got %d\n", err);
+    ok(!strcmp(buffer, "x"), "got \"%s\"\n", buffer);
+    ok(sz == 0, "got size %u\n", sz);
+
+    sz = 1;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
+    ok(!buffer[0], "got \"%s\"\n", buffer);
+    ok(sz == 0, "got size %u\n", sz);
+
+    rec = MsiCreateRecord(2);
+    MsiRecordSetInteger(rec, 1, 1);
+    MsiRecordSetInteger(rec, 2, 2);
+    r = MsiViewModify(view, MSIMODIFY_VALIDATE_NEW, rec);
+    ok(r == ERROR_INVALID_DATA, "got %u\n", r);
+
+    sz = 2;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    ok(err == MSIDBERROR_DUPLICATEKEY, "got %d\n", err);
+    ok(!strcmp(buffer, "A"), "got \"%s\"\n", buffer);
+    ok(sz == 1, "got size %u\n", sz);
+
+    sz = 2;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    todo_wine ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
+    todo_wine ok(!buffer[0], "got \"%s\"\n", buffer);
+    todo_wine ok(sz == 0, "got size %u\n", sz);
+
+    r = MsiViewModify(view, MSIMODIFY_VALIDATE_NEW, rec);
+    ok(r == ERROR_INVALID_DATA, "got %u\n", r);
+
+    sz = 1;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    ok(err == MSIDBERROR_MOREDATA, "got %d\n", err);
+    todo_wine ok(!buffer[0], "got \"%s\"\n", buffer);
+    ok(sz == 1, "got size %u\n", sz);
+
+    sz = 1;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    todo_wine ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
+    todo_wine ok(!buffer[0], "got \"%s\"\n", buffer);
+    todo_wine ok(sz == 0, "got size %u\n", sz);
+
+    r = MsiViewModify(view, MSIMODIFY_VALIDATE_NEW, rec);
+    ok(r == ERROR_INVALID_DATA, "got %u\n", r);
+
+    sz = 0;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    ok(err == MSIDBERROR_MOREDATA, "got %d\n", err);
+    ok(!strcmp(buffer, "x"), "got \"%s\"\n", buffer);
+    ok(sz == 1, "got size %u\n", sz);
+
+    sz = 0;
+    strcpy(buffer, "x");
+    err = MsiViewGetErrorA(view, buffer, &sz);
+    ok(err == MSIDBERROR_MOREDATA, "got %d\n", err);
+    ok(!strcmp(buffer, "x"), "got \"%s\"\n", buffer);
+    todo_wine ok(sz == 0, "got size %u\n", sz);
+
+    MsiCloseHandle(rec);
+    MsiCloseHandle(view);
+    MsiCloseHandle(db);
+    DeleteFileA(msifile);
+}
+
 START_TEST(db)
 {
     test_msidatabase();
@@ -9167,4 +9254,5 @@ START_TEST(db)
     test_primary_keys();
     test_viewmodify_merge();
     test_viewmodify_insert();
+    test_view_get_error();
 }




More information about the wine-cvs mailing list