ChangeSet ID: 20009 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/09/06 06:39:15 Modified files: dlls/msi/tests : Makefile.in .cvsignore Added files: dlls/msi/tests : package.c Log message: Mike McCormack Aric Stewart Test creating a package. Patch: http://cvs.winehq.org/patch.py?id=20009 Old revision New revision Changes Path 1.4 1.5 +1 -0 wine/dlls/msi/tests/Makefile.in 1.4 1.5 +1 -0 wine/dlls/msi/tests/.cvsignore Added 1.1 +0 -0 wine/dlls/msi/tests/package.c Index: wine/dlls/msi/tests/Makefile.in diff -u -p wine/dlls/msi/tests/Makefile.in:1.4 wine/dlls/msi/tests/Makefile.in:1.5 --- wine/dlls/msi/tests/Makefile.in:1.4 Fri May 24 21:04:32 2013 +++ wine/dlls/msi/tests/Makefile.in Fri May 24 21:04:32 2013 @@ -8,6 +8,7 @@ IMPORTS = msi kernel32 CTESTS = \ db.c \ format.c \ + package.c \ record.c \ suminfo.c Index: wine/dlls/msi/tests/.cvsignore diff -u -p wine/dlls/msi/tests/.cvsignore:1.4 wine/dlls/msi/tests/.cvsignore:1.5 --- wine/dlls/msi/tests/.cvsignore:1.4 Fri May 24 21:04:32 2013 +++ wine/dlls/msi/tests/.cvsignore Fri May 24 21:04:32 2013 @@ -1,6 +1,7 @@ Makefile db.ok format.ok +package.ok record.ok suminfo.ok testlist.c Index: wine/dlls/msi/tests/package.c diff -u -p /dev/null wine/dlls/msi/tests/package.c:1.1 --- /dev/null Fri May 24 21:04:32 2013 +++ wine/dlls/msi/tests/package.c Fri May 24 21:04:32 2013 @@ -0,0 +1,153 @@ +/* + * tests for Microsoft Installer functionality + * + * Copyright 2005 Mike McCormack for CodeWeavers + * Copyright 2005 Aric Stewart for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define COBJMACROS + +#include +#include +#include +#include + +#include "wine/test.h" + +static UINT run_query( MSIHANDLE hdb, const char *query ) +{ + MSIHANDLE hview = 0; + UINT r; + + r = MsiDatabaseOpenView(hdb, query, &hview); + if( r != ERROR_SUCCESS ) + return r; + + r = MsiViewExecute(hview, 0); + if( r == ERROR_SUCCESS ) + r = MsiViewClose(hview); + MsiCloseHandle(hview); + return r; +} + +static UINT set_summary_info(MSIHANDLE hdb) +{ + UINT res; + MSIHANDLE suminfo; + + /* build summmary info */ + res = MsiGetSummaryInformation(hdb, NULL, 7, &suminfo); + ok( res == ERROR_SUCCESS , "Failed to open summaryinfo\n" ); + + res = MsiSummaryInfoSetProperty(suminfo,2, VT_LPSTR, 0,NULL, + "Installation Database"); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoSetProperty(suminfo,3, VT_LPSTR, 0,NULL, + "Installation Database"); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoSetProperty(suminfo,4, VT_LPSTR, 0,NULL, + "Wine Hackers"); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoSetProperty(suminfo,7, VT_LPSTR, 0,NULL, + ";1033"); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoSetProperty(suminfo,9, VT_LPSTR, 0,NULL, + "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}"); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoSetProperty(suminfo, 14, VT_I4, 100, NULL, NULL); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoSetProperty(suminfo, 15, VT_I4, 0, NULL, NULL); + ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); + + res = MsiSummaryInfoPersist(suminfo); + ok( res == ERROR_SUCCESS , "Failed to make summary info persist\n" ); + + res = MsiCloseHandle( suminfo); + ok( res == ERROR_SUCCESS , "Failed to close suminfo\n" ); + + return res; +} + + +MSIHANDLE create_package_db(void) +{ + MSIHANDLE hdb = 0; + CHAR szName[] = "C:\\mytest.msi"; + UINT res; + + DeleteFile(szName); + + /* create an empty database */ + res = MsiOpenDatabase(szName, MSIDBOPEN_CREATE, &hdb ); + ok( res == ERROR_SUCCESS , "Failed to create database\n" ); + if( res != ERROR_SUCCESS ) + return hdb; + + res = MsiDatabaseCommit( hdb ); + ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); + + res = set_summary_info(hdb); + + res = run_query( hdb, + "CREATE TABLE `Directory` ( " + "`Directory` CHAR(255) NOT NULL, " + "`Directory_Parent` CHAR(255), " + "`DefaultDir` CHAR(255) NOT NULL " + "PRIMARY KEY `Directory`)" ); + ok( res == ERROR_SUCCESS , "Failed to create directory table\n" ); + + return hdb; +} + +MSIHANDLE package_from_db(MSIHANDLE hdb) +{ + UINT res; + CHAR szPackage[10]; + MSIHANDLE hPackage; + + sprintf(szPackage,"#%li",hdb); + res = MsiOpenPackage(szPackage,&hPackage); + ok( res == ERROR_SUCCESS , "Failed to open package\n" ); + + res = MsiCloseHandle(hdb); + ok( res == ERROR_SUCCESS , "Failed to close db handle\n" ); + + return hPackage; +} + +static void test_createpackage(void) +{ + MSIHANDLE hPackage = 0; + UINT res; + + hPackage = package_from_db(create_package_db()); + ok( hPackage != 0, " Failed to create package\n"); + + res = MsiCloseHandle( hPackage); + ok( res == ERROR_SUCCESS , "Failed to close package\n" ); +} + +START_TEST(package) +{ + test_createpackage(); +}