From: Christoph von Wittich Date: Sun, 25 Oct 2009 11:06:38 +0000 (+0000) Subject: -sync msi_winetest with wine 1.1.32 X-Git-Tag: ReactOS-0.3.11~308 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=83e2004b734618d4d85769317320e651ed2d4cd1 -sync msi_winetest with wine 1.1.32 svn path=/trunk/; revision=43736 --- diff --git a/rostests/winetests/msi/db.c b/rostests/winetests/msi/db.c index 019ff5e8bb7..bfaba172945 100644 --- a/rostests/winetests/msi/db.c +++ b/rostests/winetests/msi/db.c @@ -4449,6 +4449,142 @@ static void test_tables_order(void) DeleteFile(msifile); } +static void test_rows_order(void) +{ + const char *query; + MSIHANDLE hdb = 0, hview = 0, hrec = 0; + UINT r; + char buffer[100]; + DWORD sz; + + r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); + ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); + + query = "CREATE TABLE `foo` ( " + "`bar` LONGCHAR NOT NULL PRIMARY KEY `bar`)"; + r = run_query(hdb, 0, query); + ok(r == ERROR_SUCCESS, "failed to create table\n"); + + r = run_query(hdb, 0, "INSERT INTO `foo` " + "( `bar` ) VALUES ( 'A' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `foo` " + "( `bar` ) VALUES ( 'B' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `foo` " + "( `bar` ) VALUES ( 'C' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `foo` " + "( `bar` ) VALUES ( 'D' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `foo` " + "( `bar` ) VALUES ( 'E' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `foo` " + "( `bar` ) VALUES ( 'F' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + query = "CREATE TABLE `bar` ( " + "`foo` LONGCHAR NOT NULL, " + "`baz` LONGCHAR NOT NULL " + "PRIMARY KEY `foo` )"; + r = run_query(hdb, 0, query); + ok(r == ERROR_SUCCESS, "failed to create table\n"); + + r = run_query(hdb, 0, "INSERT INTO `bar` " + "( `foo`, `baz` ) VALUES ( 'C', 'E' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `bar` " + "( `foo`, `baz` ) VALUES ( 'F', 'A' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `bar` " + "( `foo`, `baz` ) VALUES ( 'A', 'B' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + r = run_query(hdb, 0, "INSERT INTO `bar` " + "( `foo`, `baz` ) VALUES ( 'D', 'E' )"); + ok(r == ERROR_SUCCESS, "cannot add value to table\n"); + + /* The rows of the table must be ordered by the column values of + each row. For strings, the column value is the string id + in the string table. */ + + query = "SELECT * FROM `bar`"; + 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); + ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 1, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "A"), "Expected A, got %s\n", buffer); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 2, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "B"), "Expected B, got %s\n", buffer); + r = MsiCloseHandle(hrec); + ok(r == ERROR_SUCCESS, "failed to close record\n"); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 1, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "C"), "Expected E, got %s\n", buffer); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 2, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "E"), "Expected E, got %s\n", buffer); + r = MsiCloseHandle(hrec); + ok(r == ERROR_SUCCESS, "failed to close record\n"); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 1, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "D"), "Expected D, got %s\n", buffer); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 2, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "E"), "Expected E, got %s\n", buffer); + r = MsiCloseHandle(hrec); + ok(r == ERROR_SUCCESS, "failed to close record\n"); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 1, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "F"), "Expected F, got %s\n", buffer); + sz = sizeof(buffer); + r = MsiRecordGetString(hrec, 2, buffer, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmp(buffer, "A"), "Expected A, got %s\n", buffer); + r = MsiCloseHandle(hrec); + ok(r == ERROR_SUCCESS, "failed to close record\n"); + + r = MsiViewClose(hview); + ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); + r = MsiCloseHandle(hview); + ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); + + r = MsiCloseHandle(hdb); + ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); + + DeleteFile(msifile); +} + static void test_select_markers(void) { MSIHANDLE hdb = 0, rec, view, res; @@ -7109,6 +7245,51 @@ static void test_dbmerge(void) r = run_query(href, 0, query); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + query = "CREATE TABLE `One` ( " + "`A` CHAR(72), " + "`B` CHAR(56), " + "`C` CHAR(64) LOCALIZABLE, " + "`D` LONGCHAR, " + "`E` CHAR(72) NOT NULL, " + "`F` CHAR(56) NOT NULL, " + "`G` CHAR(64) NOT NULL LOCALIZABLE, " + "`H` LONGCHAR NOT NULL " + "PRIMARY KEY `A` )"; + r = run_query(hdb, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "CREATE TABLE `One` ( " + "`A` CHAR(64), " + "`B` CHAR(64), " + "`C` CHAR(64), " + "`D` CHAR(64), " + "`E` CHAR(64) NOT NULL, " + "`F` CHAR(64) NOT NULL, " + "`G` CHAR(64) NOT NULL, " + "`H` CHAR(64) NOT NULL " + "PRIMARY KEY `A` )"; + r = run_query(href, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + /* column sting types don't match exactly */ + r = MsiDatabaseMergeA(hdb, href, "MergeErrors"); + ok(r == ERROR_SUCCESS, + "Expected ERROR_SUCCESS, got %d\n", r); + + /* nothing in MergeErrors */ + query = "SELECT * FROM `MergeErrors`"; + r = do_query(hdb, query, &hrec); + ok(r == ERROR_BAD_QUERY_SYNTAX, + "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); + + query = "DROP TABLE `One`"; + r = run_query(hdb, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "DROP TABLE `One`"; + r = run_query(href, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + query = "CREATE TABLE `One` ( `A` INT, `B` INT PRIMARY KEY `A` )"; r = run_query(hdb, 0, query); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); @@ -7553,6 +7734,70 @@ static void test_dbmerge(void) ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); + query = "DROP TABLE `One`"; + r = run_query(hdb, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "DROP TABLE `One`"; + r = run_query(href, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "CREATE TABLE `One` ( `A` INT, `B` CHAR(72) PRIMARY KEY `A` )"; + r = run_query(hdb, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + r = run_query(href, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "INSERT INTO `One` ( `A`, `B` ) VALUES ( 1, 'foo' )"; + r = run_query(href, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "INSERT INTO `One` ( `A`, `B` ) VALUES ( 2, 'bar' )"; + r = run_query(href, 0, query); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + r = MsiDatabaseMergeA(hdb, href, "MergeErrors"); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + query = "SELECT * FROM `One`"; + r = MsiDatabaseOpenViewA(hdb, query, &hview); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + r = MsiViewExecute(hview, 0); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + r = MsiRecordGetInteger(hrec, 1); + ok(r == 1, "Expected 1, got %d\n", r); + + size = MAX_PATH; + r = MsiRecordGetStringA(hrec, 2, buf, &size); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmpA(buf, "foo"), "Expected \"foo\", got \"%s\"\n", buf); + + MsiCloseHandle(hrec); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + r = MsiRecordGetInteger(hrec, 1); + ok(r == 2, "Expected 2, got %d\n", r); + + size = MAX_PATH; + r = MsiRecordGetStringA(hrec, 2, buf, &size); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmpA(buf, "bar"), "Expected \"bar\", got \"%s\"\n", buf); + + MsiCloseHandle(hrec); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_NO_MORE_ITEMS, + "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); + + MsiViewClose(hview); + MsiCloseHandle(hview); + MsiCloseHandle(hdb); MsiCloseHandle(href); DeleteFileA(msifile); @@ -8218,6 +8463,7 @@ START_TEST(db) test_update(); test_special_tables(); test_tables_order(); + test_rows_order(); test_select_markers(); test_viewmodify_update(); test_viewmodify_assign(); diff --git a/rostests/winetests/msi/package.c b/rostests/winetests/msi/package.c index 55d9bb35b8f..903e2acc216 100644 --- a/rostests/winetests/msi/package.c +++ b/rostests/winetests/msi/package.c @@ -843,7 +843,10 @@ static void test_doaction( void ) static void test_gettargetpath_bad(void) { + static const WCHAR boo[] = {'b','o','o',0}; + static const WCHAR empty[] = {0}; char buffer[0x80]; + WCHAR bufferW[0x80]; MSIHANDLE hpkg; DWORD sz; UINT r; @@ -869,6 +872,32 @@ static void test_gettargetpath_bad(void) r = MsiGetTargetPath( hpkg, "boo", buffer, NULL ); ok( r == ERROR_DIRECTORY, "wrong return val\n"); + sz = 0; + r = MsiGetTargetPath( hpkg, "", buffer, &sz ); + ok( r == ERROR_DIRECTORY, "wrong return val\n"); + + r = MsiGetTargetPathW( 0, NULL, NULL, NULL ); + ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); + + r = MsiGetTargetPathW( 0, NULL, NULL, &sz ); + ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); + + r = MsiGetTargetPathW( 0, boo, NULL, NULL ); + ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); + + r = MsiGetTargetPathW( 0, boo, NULL, NULL ); + ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); + + r = MsiGetTargetPathW( hpkg, boo, NULL, NULL ); + ok( r == ERROR_DIRECTORY, "wrong return val\n"); + + r = MsiGetTargetPathW( hpkg, boo, bufferW, NULL ); + ok( r == ERROR_DIRECTORY, "wrong return val\n"); + + sz = 0; + r = MsiGetTargetPathW( hpkg, empty, bufferW, &sz ); + ok( r == ERROR_DIRECTORY, "wrong return val\n"); + MsiCloseHandle( hpkg ); DeleteFile(msifile); } @@ -7662,6 +7691,7 @@ static void test_appsearch_complocator(void) DeleteFileA("FileName10.dll"); MsiCloseHandle(hpkg); DeleteFileA(msifile); + LocalFree(usersid); } static void test_appsearch_reglocator(void) @@ -11362,6 +11392,7 @@ static void test_emptypackage(void) ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); } + buffer[0] = 0; size = MAX_PATH; r = MsiRecordGetString(hrec, 1, buffer, &size); todo_wine