Module: wine Branch: master Commit: 80740e72e7410a7560644fa83b8af3c20802441d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=80740e72e7410a7560644fa8...
Author: James Hawkins truiken@gmail.com Date: Mon Aug 21 17:33:49 2006 -0700
msi: Add tests for the AppSearch action.
---
dlls/msi/tests/package.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 133 insertions(+), 0 deletions(-)
diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c index 01e6eaa..7856a62 100644 --- a/dlls/msi/tests/package.c +++ b/dlls/msi/tests/package.c @@ -110,6 +110,43 @@ static UINT create_remove_file_table( MS "PRIMARY KEY `FileKey`)" ); }
+static UINT create_appsearch_table( MSIHANDLE hdb ) +{ + return run_query( hdb, + "CREATE TABLE `AppSearch` (" + "`Property` CHAR(72) NOT NULL, " + "`Signature_` CHAR(72) NOT NULL " + "PRIMARY KEY `Property`, `Signature_`)" ); +} + +static UINT create_reglocator_table( MSIHANDLE hdb ) +{ + return run_query( hdb, + "CREATE TABLE `RegLocator` (" + "`Signature_` CHAR(72) NOT NULL, " + "`Root` SHORT NOT NULL, " + "`Key` CHAR(255) NOT NULL, " + "`Name` CHAR(255), " + "`Type` SHORT " + "PRIMARY KEY `Signature_`)" ); +} + +static UINT create_signature_table( MSIHANDLE hdb ) +{ + return run_query( hdb, + "CREATE TABLE `Signature` (" + "`Signature` CHAR(72) NOT NULL, " + "`FileName` CHAR(255) NOT NULL, " + "`MinVersion` CHAR(20), " + "`MaxVersion` CHAR(20), " + "`MinSize` LONG, " + "`MaxSize` LONG, " + "`MinDate` LONG, " + "`MaxDate` LONG, " + "`Languages` CHAR(255) " + "PRIMARY KEY `Signature`)" ); +} + static UINT add_component_entry( MSIHANDLE hdb, const char *values ) { char insert[] = "INSERT INTO `Component` " @@ -173,6 +210,55 @@ static UINT add_file_entry( MSIHANDLE hd return r; }
+static UINT add_appsearch_entry( MSIHANDLE hdb, const char *values ) +{ + char insert[] = "INSERT INTO `AppSearch` " + "(`Property`, `Signature_`) " + "VALUES( %s )"; + char *query; + UINT sz, r; + + sz = strlen(values) + sizeof insert; + query = HeapAlloc(GetProcessHeap(),0,sz); + sprintf(query,insert,values); + r = run_query( hdb, query ); + HeapFree(GetProcessHeap(), 0, query); + return r; +} + +static UINT add_reglocator_entry( MSIHANDLE hdb, const char *values ) +{ + char insert[] = "INSERT INTO `RegLocator` " + "(`Signature_`, `Root`, `Key`, `Name`, `Type`) " + "VALUES( %s )"; + char *query; + UINT sz, r; + + sz = strlen(values) + sizeof insert; + query = HeapAlloc(GetProcessHeap(),0,sz); + sprintf(query,insert,values); + r = run_query( hdb, query ); + HeapFree(GetProcessHeap(), 0, query); + return r; +} + +static UINT add_signature_entry( MSIHANDLE hdb, const char *values ) +{ + char insert[] = "INSERT INTO `Signature` " + "(`Signature`, `FileName`, `MinVersion`, `MaxVersion`," + " `MinSize`, `MaxSize`, `MinDate`, `MaxDate`, `Languages`) " + "VALUES( %s )"; + char *query; + UINT sz, r; + + sz = strlen(values) + sizeof insert; + query = HeapAlloc(GetProcessHeap(),0,sz); + sprintf(query,insert,values); + r = run_query( hdb, query ); + HeapFree(GetProcessHeap(), 0, query); + return r; +} + static UINT set_summary_info(MSIHANDLE hdb) { UINT res; @@ -2178,6 +2264,52 @@ static void test_removefiles(void) DeleteFileA(msifile); }
+static void test_appsearch(void) +{ + MSIHANDLE hpkg; + UINT r; + MSIHANDLE hdb; + CHAR prop[MAX_PATH]; + DWORD size = MAX_PATH; + + hdb = create_package_db(); + ok ( hdb, "failed to create package database\n" ); + + r = create_appsearch_table( hdb ); + ok( r == ERROR_SUCCESS, "cannot create AppSearch table: %d\n", r ); + + r = add_appsearch_entry( hdb, "'WEBBROWSERPROG', 'NewSignature1'" ); + ok( r == ERROR_SUCCESS, "cannot add entry: %d\n", r ); + + r = create_reglocator_table( hdb ); + ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); + + r = add_reglocator_entry( hdb, "'NewSignature1', 0, 'htmlfile\shell\open\command', '', 1" ); + ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); + + r = create_signature_table( hdb ); + ok( r == ERROR_SUCCESS, "cannot create Signature table: %d\n", r ); + + r = add_signature_entry( hdb, "'NewSignature1', 'FileName', '', '', '', '', '', '', ''" ); + ok( r == ERROR_SUCCESS, "cannot create Signature table: %d\n", r ); + + hpkg = package_from_db( hdb ); + ok( hpkg, "failed to create package\n"); + + r = MsiDoAction( hpkg, "AppSearch" ); + ok( r == ERROR_SUCCESS, "AppSearch failed: %d\n", r); + + r = MsiGetPropertyA( hpkg, "WEBBROWSERPROG", prop, &size ); + ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); + todo_wine + { + ok( lstrlenA(prop) != 0, "Expected non-zero length\n"); + } + + MsiCloseHandle( hpkg ); + DeleteFileA(msifile); +} + START_TEST(package) { test_createpackage(); @@ -2193,4 +2325,5 @@ START_TEST(package) test_states(); test_getproperty(); test_removefiles(); + test_appsearch(); }