diff -r 7794f1e8576e Lib/test/test_msilib.py --- a/Lib/test/test_msilib.py Sat May 28 20:02:44 2011 +0800 +++ b/Lib/test/test_msilib.py Sat May 28 22:21:54 2011 +0800 @@ -1,8 +1,25 @@ """ Test suite for the code in msilib """ import unittest -import os -from test.support import run_unittest, import_module -msilib = import_module('msilib') +from test import support +import datetime + +msilib = support.import_module('msilib') +import msilib.schema + + +LAST_PRINTED_DATE = datetime.datetime(2011, 5, 30, 10, 55, 56) + +def create_temp_db(): + "Create a very simple database to open" + path = support.TESTFN + ".msi" + db = msilib.init_database( + path, msilib.schema, "Python Tests", "product_code", "1.0", "PSF") + db.Commit() + db = None + return path + +TEST_DB_PATH = create_temp_db() + class Test_make_id(unittest.TestCase): #http://msdn.microsoft.com/en-us/library/aa369212(v=vs.85).aspx @@ -39,8 +56,39 @@ msilib.make_id(".s\x82o?*+rt"), "_.s_o___rt") +class TestSummaryInformation(unittest.TestCase): + + def tearDown(self): + self.db = None + + def test_get_property_count(self): + self.db = msilib.OpenDatabase(TEST_DB_PATH, msilib.MSIDBOPEN_READONLY) + si = self.db.GetSummaryInformation(0) + self.assertEqual(si.GetPropertyCount(), 8) + + def test_get_property(self): + self.db = msilib.OpenDatabase(TEST_DB_PATH, msilib.MSIDBOPEN_READONLY) + si = self.db.GetSummaryInformation(0) + self.assertEqual(si.GetProperty(msilib.PID_AUTHOR), b'PSF') + self.assertEqual(si.GetProperty(msilib.PID_WORDCOUNT), 2) + #self.assertEqual( + # si.GetProperty(msilib.PID_LASTPRINTED), LAST_PRINTED_DATE) + + def test_set_property(self): + self.db = msilib.OpenDatabase(TEST_DB_PATH, msilib.MSIDBOPEN_TRANSACT) + si = self.db.GetSummaryInformation(20) + si.SetProperty(msilib.PID_AUTHOR, 'PS2') + si.SetProperty(msilib.PID_WORDCOUNT, 1) + si.Persist() + si = None + self.db.Commit() + si = self.db.GetSummaryInformation(0) + self.assertEqual(si.GetProperty(msilib.PID_AUTHOR), b'PS2') + self.assertEqual(si.GetProperty(msilib.PID_WORDCOUNT), 1) + + def test_main(): - run_unittest(__name__) + support.run_unittest(__name__) if __name__ == '__main__': test_main() diff -r 7794f1e8576e PC/_msi.c --- a/PC/_msi.c Sat May 28 20:02:44 2011 +0800 +++ b/PC/_msi.c Sat May 28 22:21:54 2011 +0800 @@ -547,7 +547,11 @@ &fval, sval, &ssize); } - switch(type) { + if (status != ERROR_SUCCESS){ + return msierror(status); + } + + switch(type) { case VT_I2: case VT_I4: return PyLong_FromLong(ival); case VT_FILETIME: