Skip to content

Commit 83e2004

Browse files
committed
-sync msi_winetest with wine 1.1.32
svn path=/trunk/; revision=43736
1 parent b7a13d7 commit 83e2004

File tree

2 files changed

+277
-0
lines changed

2 files changed

+277
-0
lines changed

rostests/winetests/msi/db.c

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4449,6 +4449,142 @@ static void test_tables_order(void)
44494449
DeleteFile(msifile);
44504450
}
44514451

4452+
static void test_rows_order(void)
4453+
{
4454+
const char *query;
4455+
MSIHANDLE hdb = 0, hview = 0, hrec = 0;
4456+
UINT r;
4457+
char buffer[100];
4458+
DWORD sz;
4459+
4460+
r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
4461+
ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n");
4462+
4463+
query = "CREATE TABLE `foo` ( "
4464+
"`bar` LONGCHAR NOT NULL PRIMARY KEY `bar`)";
4465+
r = run_query(hdb, 0, query);
4466+
ok(r == ERROR_SUCCESS, "failed to create table\n");
4467+
4468+
r = run_query(hdb, 0, "INSERT INTO `foo` "
4469+
"( `bar` ) VALUES ( 'A' )");
4470+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4471+
4472+
r = run_query(hdb, 0, "INSERT INTO `foo` "
4473+
"( `bar` ) VALUES ( 'B' )");
4474+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4475+
4476+
r = run_query(hdb, 0, "INSERT INTO `foo` "
4477+
"( `bar` ) VALUES ( 'C' )");
4478+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4479+
4480+
r = run_query(hdb, 0, "INSERT INTO `foo` "
4481+
"( `bar` ) VALUES ( 'D' )");
4482+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4483+
4484+
r = run_query(hdb, 0, "INSERT INTO `foo` "
4485+
"( `bar` ) VALUES ( 'E' )");
4486+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4487+
4488+
r = run_query(hdb, 0, "INSERT INTO `foo` "
4489+
"( `bar` ) VALUES ( 'F' )");
4490+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4491+
4492+
query = "CREATE TABLE `bar` ( "
4493+
"`foo` LONGCHAR NOT NULL, "
4494+
"`baz` LONGCHAR NOT NULL "
4495+
"PRIMARY KEY `foo` )";
4496+
r = run_query(hdb, 0, query);
4497+
ok(r == ERROR_SUCCESS, "failed to create table\n");
4498+
4499+
r = run_query(hdb, 0, "INSERT INTO `bar` "
4500+
"( `foo`, `baz` ) VALUES ( 'C', 'E' )");
4501+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4502+
4503+
r = run_query(hdb, 0, "INSERT INTO `bar` "
4504+
"( `foo`, `baz` ) VALUES ( 'F', 'A' )");
4505+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4506+
4507+
r = run_query(hdb, 0, "INSERT INTO `bar` "
4508+
"( `foo`, `baz` ) VALUES ( 'A', 'B' )");
4509+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4510+
4511+
r = run_query(hdb, 0, "INSERT INTO `bar` "
4512+
"( `foo`, `baz` ) VALUES ( 'D', 'E' )");
4513+
ok(r == ERROR_SUCCESS, "cannot add value to table\n");
4514+
4515+
/* The rows of the table must be ordered by the column values of
4516+
each row. For strings, the column value is the string id
4517+
in the string table. */
4518+
4519+
query = "SELECT * FROM `bar`";
4520+
r = MsiDatabaseOpenView(hdb, query, &hview);
4521+
ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
4522+
r = MsiViewExecute(hview, 0);
4523+
ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
4524+
4525+
r = MsiViewFetch(hview, &hrec);
4526+
ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
4527+
sz = sizeof(buffer);
4528+
r = MsiRecordGetString(hrec, 1, buffer, &sz);
4529+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4530+
ok(!lstrcmp(buffer, "A"), "Expected A, got %s\n", buffer);
4531+
sz = sizeof(buffer);
4532+
r = MsiRecordGetString(hrec, 2, buffer, &sz);
4533+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4534+
ok(!lstrcmp(buffer, "B"), "Expected B, got %s\n", buffer);
4535+
r = MsiCloseHandle(hrec);
4536+
ok(r == ERROR_SUCCESS, "failed to close record\n");
4537+
4538+
r = MsiViewFetch(hview, &hrec);
4539+
ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
4540+
sz = sizeof(buffer);
4541+
r = MsiRecordGetString(hrec, 1, buffer, &sz);
4542+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4543+
ok(!lstrcmp(buffer, "C"), "Expected E, got %s\n", buffer);
4544+
sz = sizeof(buffer);
4545+
r = MsiRecordGetString(hrec, 2, buffer, &sz);
4546+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4547+
ok(!lstrcmp(buffer, "E"), "Expected E, got %s\n", buffer);
4548+
r = MsiCloseHandle(hrec);
4549+
ok(r == ERROR_SUCCESS, "failed to close record\n");
4550+
4551+
r = MsiViewFetch(hview, &hrec);
4552+
ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
4553+
sz = sizeof(buffer);
4554+
r = MsiRecordGetString(hrec, 1, buffer, &sz);
4555+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4556+
ok(!lstrcmp(buffer, "D"), "Expected D, got %s\n", buffer);
4557+
sz = sizeof(buffer);
4558+
r = MsiRecordGetString(hrec, 2, buffer, &sz);
4559+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4560+
ok(!lstrcmp(buffer, "E"), "Expected E, got %s\n", buffer);
4561+
r = MsiCloseHandle(hrec);
4562+
ok(r == ERROR_SUCCESS, "failed to close record\n");
4563+
4564+
r = MsiViewFetch(hview, &hrec);
4565+
ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
4566+
sz = sizeof(buffer);
4567+
r = MsiRecordGetString(hrec, 1, buffer, &sz);
4568+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4569+
ok(!lstrcmp(buffer, "F"), "Expected F, got %s\n", buffer);
4570+
sz = sizeof(buffer);
4571+
r = MsiRecordGetString(hrec, 2, buffer, &sz);
4572+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
4573+
ok(!lstrcmp(buffer, "A"), "Expected A, got %s\n", buffer);
4574+
r = MsiCloseHandle(hrec);
4575+
ok(r == ERROR_SUCCESS, "failed to close record\n");
4576+
4577+
r = MsiViewClose(hview);
4578+
ok(r == ERROR_SUCCESS, "MsiViewClose failed\n");
4579+
r = MsiCloseHandle(hview);
4580+
ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
4581+
4582+
r = MsiCloseHandle(hdb);
4583+
ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
4584+
4585+
DeleteFile(msifile);
4586+
}
4587+
44524588
static void test_select_markers(void)
44534589
{
44544590
MSIHANDLE hdb = 0, rec, view, res;
@@ -7109,6 +7245,51 @@ static void test_dbmerge(void)
71097245
r = run_query(href, 0, query);
71107246
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
71117247

7248+
query = "CREATE TABLE `One` ( "
7249+
"`A` CHAR(72), "
7250+
"`B` CHAR(56), "
7251+
"`C` CHAR(64) LOCALIZABLE, "
7252+
"`D` LONGCHAR, "
7253+
"`E` CHAR(72) NOT NULL, "
7254+
"`F` CHAR(56) NOT NULL, "
7255+
"`G` CHAR(64) NOT NULL LOCALIZABLE, "
7256+
"`H` LONGCHAR NOT NULL "
7257+
"PRIMARY KEY `A` )";
7258+
r = run_query(hdb, 0, query);
7259+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7260+
7261+
query = "CREATE TABLE `One` ( "
7262+
"`A` CHAR(64), "
7263+
"`B` CHAR(64), "
7264+
"`C` CHAR(64), "
7265+
"`D` CHAR(64), "
7266+
"`E` CHAR(64) NOT NULL, "
7267+
"`F` CHAR(64) NOT NULL, "
7268+
"`G` CHAR(64) NOT NULL, "
7269+
"`H` CHAR(64) NOT NULL "
7270+
"PRIMARY KEY `A` )";
7271+
r = run_query(href, 0, query);
7272+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7273+
7274+
/* column sting types don't match exactly */
7275+
r = MsiDatabaseMergeA(hdb, href, "MergeErrors");
7276+
ok(r == ERROR_SUCCESS,
7277+
"Expected ERROR_SUCCESS, got %d\n", r);
7278+
7279+
/* nothing in MergeErrors */
7280+
query = "SELECT * FROM `MergeErrors`";
7281+
r = do_query(hdb, query, &hrec);
7282+
ok(r == ERROR_BAD_QUERY_SYNTAX,
7283+
"Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
7284+
7285+
query = "DROP TABLE `One`";
7286+
r = run_query(hdb, 0, query);
7287+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7288+
7289+
query = "DROP TABLE `One`";
7290+
r = run_query(href, 0, query);
7291+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7292+
71127293
query = "CREATE TABLE `One` ( `A` INT, `B` INT PRIMARY KEY `A` )";
71137294
r = run_query(hdb, 0, query);
71147295
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
@@ -7553,6 +7734,70 @@ static void test_dbmerge(void)
75537734
ok(r == ERROR_BAD_QUERY_SYNTAX,
75547735
"Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
75557736

7737+
query = "DROP TABLE `One`";
7738+
r = run_query(hdb, 0, query);
7739+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7740+
7741+
query = "DROP TABLE `One`";
7742+
r = run_query(href, 0, query);
7743+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7744+
7745+
query = "CREATE TABLE `One` ( `A` INT, `B` CHAR(72) PRIMARY KEY `A` )";
7746+
r = run_query(hdb, 0, query);
7747+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7748+
r = run_query(href, 0, query);
7749+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7750+
7751+
query = "INSERT INTO `One` ( `A`, `B` ) VALUES ( 1, 'foo' )";
7752+
r = run_query(href, 0, query);
7753+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7754+
7755+
query = "INSERT INTO `One` ( `A`, `B` ) VALUES ( 2, 'bar' )";
7756+
r = run_query(href, 0, query);
7757+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7758+
7759+
r = MsiDatabaseMergeA(hdb, href, "MergeErrors");
7760+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7761+
7762+
query = "SELECT * FROM `One`";
7763+
r = MsiDatabaseOpenViewA(hdb, query, &hview);
7764+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7765+
r = MsiViewExecute(hview, 0);
7766+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7767+
7768+
r = MsiViewFetch(hview, &hrec);
7769+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7770+
7771+
r = MsiRecordGetInteger(hrec, 1);
7772+
ok(r == 1, "Expected 1, got %d\n", r);
7773+
7774+
size = MAX_PATH;
7775+
r = MsiRecordGetStringA(hrec, 2, buf, &size);
7776+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7777+
ok(!lstrcmpA(buf, "foo"), "Expected \"foo\", got \"%s\"\n", buf);
7778+
7779+
MsiCloseHandle(hrec);
7780+
7781+
r = MsiViewFetch(hview, &hrec);
7782+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7783+
7784+
r = MsiRecordGetInteger(hrec, 1);
7785+
ok(r == 2, "Expected 2, got %d\n", r);
7786+
7787+
size = MAX_PATH;
7788+
r = MsiRecordGetStringA(hrec, 2, buf, &size);
7789+
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
7790+
ok(!lstrcmpA(buf, "bar"), "Expected \"bar\", got \"%s\"\n", buf);
7791+
7792+
MsiCloseHandle(hrec);
7793+
7794+
r = MsiViewFetch(hview, &hrec);
7795+
ok(r == ERROR_NO_MORE_ITEMS,
7796+
"Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
7797+
7798+
MsiViewClose(hview);
7799+
MsiCloseHandle(hview);
7800+
75567801
MsiCloseHandle(hdb);
75577802
MsiCloseHandle(href);
75587803
DeleteFileA(msifile);
@@ -8218,6 +8463,7 @@ START_TEST(db)
82188463
test_update();
82198464
test_special_tables();
82208465
test_tables_order();
8466+
test_rows_order();
82218467
test_select_markers();
82228468
test_viewmodify_update();
82238469
test_viewmodify_assign();

rostests/winetests/msi/package.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,10 @@ static void test_doaction( void )
843843

844844
static void test_gettargetpath_bad(void)
845845
{
846+
static const WCHAR boo[] = {'b','o','o',0};
847+
static const WCHAR empty[] = {0};
846848
char buffer[0x80];
849+
WCHAR bufferW[0x80];
847850
MSIHANDLE hpkg;
848851
DWORD sz;
849852
UINT r;
@@ -869,6 +872,32 @@ static void test_gettargetpath_bad(void)
869872
r = MsiGetTargetPath( hpkg, "boo", buffer, NULL );
870873
ok( r == ERROR_DIRECTORY, "wrong return val\n");
871874

875+
sz = 0;
876+
r = MsiGetTargetPath( hpkg, "", buffer, &sz );
877+
ok( r == ERROR_DIRECTORY, "wrong return val\n");
878+
879+
r = MsiGetTargetPathW( 0, NULL, NULL, NULL );
880+
ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n");
881+
882+
r = MsiGetTargetPathW( 0, NULL, NULL, &sz );
883+
ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n");
884+
885+
r = MsiGetTargetPathW( 0, boo, NULL, NULL );
886+
ok( r == ERROR_INVALID_HANDLE, "wrong return val\n");
887+
888+
r = MsiGetTargetPathW( 0, boo, NULL, NULL );
889+
ok( r == ERROR_INVALID_HANDLE, "wrong return val\n");
890+
891+
r = MsiGetTargetPathW( hpkg, boo, NULL, NULL );
892+
ok( r == ERROR_DIRECTORY, "wrong return val\n");
893+
894+
r = MsiGetTargetPathW( hpkg, boo, bufferW, NULL );
895+
ok( r == ERROR_DIRECTORY, "wrong return val\n");
896+
897+
sz = 0;
898+
r = MsiGetTargetPathW( hpkg, empty, bufferW, &sz );
899+
ok( r == ERROR_DIRECTORY, "wrong return val\n");
900+
872901
MsiCloseHandle( hpkg );
873902
DeleteFile(msifile);
874903
}
@@ -7662,6 +7691,7 @@ static void test_appsearch_complocator(void)
76627691
DeleteFileA("FileName10.dll");
76637692
MsiCloseHandle(hpkg);
76647693
DeleteFileA(msifile);
7694+
LocalFree(usersid);
76657695
}
76667696

76677697
static void test_appsearch_reglocator(void)
@@ -11362,6 +11392,7 @@ static void test_emptypackage(void)
1136211392
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
1136311393
}
1136411394

11395+
buffer[0] = 0;
1136511396
size = MAX_PATH;
1136611397
r = MsiRecordGetString(hrec, 1, buffer, &size);
1136711398
todo_wine

0 commit comments

Comments
 (0)