msi: Add tests for the AppSearch action

James Hawkins truiken at gmail.com
Mon Aug 21 19:33:49 CDT 2006


Hi,

Changelog:
* Add tests for the AppSearch action.

 dlls/msi/tests/package.c |  133 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 133 insertions(+), 0 deletions(-)

-- 
James Hawkins
-------------- next part --------------
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();
 }
-- 
1.4.2


More information about the wine-patches mailing list