msi: Add many more MsiFormatRecord tests
James Hawkins
truiken at gmail.com
Wed Sep 6 17:31:31 CDT 2006
Hi,
Changelog:
* Add many more MsiFormatRecord tests.
dlls/msi/tests/format.c | 380 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 380 insertions(+), 0 deletions(-)
--
James Hawkins
-------------- next part --------------
diff --git a/dlls/msi/tests/format.c b/dlls/msi/tests/format.c
index 5655b91..ae82bfe 100644
--- a/dlls/msi/tests/format.c
+++ b/dlls/msi/tests/format.c
@@ -872,6 +872,34 @@ static void test_formatrecord(void)
ok( sz == 12, "size wrong\n");
ok( 0 == strcmp(buffer,"boo hoo [\\x]"), "wrong output\n");
+ MsiRecordSetString(hrec, 0, "[\\x]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 4, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"[\\x]"), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "{\\x}");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 4, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"{\\x}"), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "[abc\\x]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 7, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"[abc\\x]"), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "[\\[]Bracket Text[\\]]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 20, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"[\\[]Bracket Text[\\]]"), "wrong output: %s\n", buffer);
+
/* now try other formats without a package */
r = MsiRecordSetString(hrec, 0, "[1] [2] [property]");
r = MsiRecordSetString(hrec, 1, "boo");
@@ -1456,6 +1484,150 @@ static void test_formatrecord(void)
ok( 0 == strcmp(buffer,"{foo[-1]foo}"), "wrong output %s\n",buffer);
ok( r == ERROR_SUCCESS, "format failed\n");
+ /* nested braces */
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abcd}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 6, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{abcd}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{a[one]bc[two]de[one]f}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 23, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{a[one]bc[two]de[one]f}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{a[one]bc[bad]de[two]f}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 23, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{a[one]bc[bad]de[two]f}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{[bad]}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 7, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{[bad]}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abc{d[one]ef}"); /* missing final brace */
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 14, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{abc{d[one]ef}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abc{d[one]ef}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 15, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{abc{d[one]ef}}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abc}{{def}hi{j[one]k}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 5, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{abc}"), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{def}hi{j[one]k}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{def}hi{jk}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{{def}}hi{jk}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 7, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"hi{jk}}"), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{def}hi{{jk}}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 1, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"}"), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{def}{jk}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{def}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+ }
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{a{b}c}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 7, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{a{b}c}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{a{b}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 6, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{a{b}}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{b}c}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 6, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{{b}c}"), "wrong output (%s)\n",buffer);
+
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{{{}}}}");
+ r = MsiFormatRecord(0, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 2, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"}}"), "wrong output (%s)\n",buffer);
+ }
+
MsiCloseHandle( hrec );
}
@@ -1540,6 +1712,41 @@ static void test_formatrecord_package(vo
ok( sz == 9, "size wrong(%li)\n",sz);
ok( 0 == strcmp(buffer,"boo hoo x"), "wrong output (%s)\n",buffer);
+ MsiRecordSetString(hrec, 0, "[\\x]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 1, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"x"), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "{\\x}");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 4, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"{\\x}"), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "[abc\\x]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 0, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,""), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "[abc\\xdef]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 0, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,""), "wrong output: %s\n", buffer);
+
+ MsiRecordSetString(hrec, 0, "[\\[]Bracket Text[\\]]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 14, "size wrong: %ld\n", sz);
+ ok( 0 == strcmp(buffer,"[Bracket Text]"), "wrong output: %s\n", buffer);
+
/* null characters */
r = MsiRecordSetString(hrec, 0, "[1] [~] [2]");
r = MsiRecordSetString(hrec, 1, "boo");
@@ -1644,6 +1851,143 @@ static void test_formatrecord_package(vo
ok( sz == 9, "size wrong(%li)\n",sz);
ok( 0 == strcmp(buffer,"boo hoo h"), "wrong output (%s)\n",buffer);
+ /* nested properties */
+ MsiSetProperty(package, "PropA", "surprise");
+ MsiSetProperty(package, "PropB", "[PropA]");
+ MsiSetProperty(package, "PropC", "[PropB]");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "[PropC]");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 7, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"[PropB]"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "PropA", "surprise");
+ MsiSetProperty(package, "PropB", "PropA");
+ MsiSetProperty(package, "PropC", "PropB");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "[PropC]");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 5, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"PropB"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "PropA", "surprise");
+ MsiSetProperty(package, "PropB", "[PropA]");
+ MsiSetProperty(package, "PropC", "[PropB]");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "[[PropC]]");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "PropA", "surprise");
+ MsiSetProperty(package, "PropB", "[PropA]");
+ MsiSetProperty(package, "PropC", "PropB");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "[[PropC]]");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 7, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"[PropA]"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "PropA", "surprise");
+ MsiSetProperty(package, "PropB", "PropA");
+ MsiSetProperty(package, "PropC", "PropB");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "[[PropC]]");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 5, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"PropA"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "PropA", "surprise");
+ MsiSetProperty(package, "PropB", "PropA");
+ MsiSetProperty(package, "PropC", "PropB");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "[[[PropC]]]");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 8, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"surprise"), "wrong output (%s)\n",buffer);
+
+ /* properties inside braces */
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abcd}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 6, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{abcd}"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "one", "mercury");
+ MsiSetProperty(package, "two", "venus");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{a[one]bc[two]de[one]f}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 25, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"amercurybcvenusdemercuryf"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "one", "mercury");
+ MsiSetProperty(package, "two", "venus");
+ MsiSetProperty(package, "bad", "");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{a[one]bc[bad]de[two]f}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+ }
+
+ MsiSetProperty(package, "bad", "");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{[bad]}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "one", "mercury");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abc{d[one]ef}"); /* missing final brace */
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 14, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"abc{dmercuryef"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "one", "mercury");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abc{d[one]ef}}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ ok( sz == 15, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"abc{dmercuryef}"), "wrong output (%s)\n",buffer);
+
+ MsiSetProperty(package, "one", "mercury");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{abc}{{def}hi{j[one]k}}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 5, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,"{abc}"), "wrong output (%s)\n",buffer);
+ }
+
+ MsiSetProperty(package, "one", "mercury");
+ sz = sizeof buffer;
+ MsiRecordSetString(hrec, 0, "{{def}hi{j[one]k}}");
+ r = MsiFormatRecord(package, hrec, buffer, &sz);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+ todo_wine
+ {
+ ok( sz == 0, "size wrong(%li)\n",sz);
+ ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer);
+ }
+
MsiCloseHandle(hrec);
r = MsiCloseHandle(package);
@@ -1721,6 +2065,15 @@ static void test_formatrecord_tables(voi
r = add_custom_action_entry( hdb, "'MyCustom', 51, 'prop', '[!temporal_file]'" );
ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r);
+ r = add_custom_action_entry( hdb, "'EscapeIt1', 51, 'prop', '[\\[]Bracket Text[\\]]'" );
+ ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r);
+
+ r = add_custom_action_entry( hdb, "'EscapeIt2', 51, 'prop', '[\\xabcd]'" );
+ ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r);
+
+ r = add_custom_action_entry( hdb, "'EscapeIt3', 51, 'prop', '[abcd\\xefgh]'" );
+ ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r);
+
hpkg = package_from_db( hdb );
ok( hpkg, "failed to create package\n");
@@ -1833,6 +2186,33 @@ static void test_formatrecord_tables(voi
"Expected 'C:\\I am a really long directory\\temporal.txt', got %s\n", buf);
}
+ /* custom action 51, escaped text 1 */
+ r = MsiDoAction( hpkg, "EscapeIt1" );
+ ok( r == ERROR_SUCCESS, "EscapeIt failed: %d\n", r);
+
+ size = MAX_PATH;
+ r = MsiGetProperty( hpkg, "prop", buf, &size );
+ ok( r == ERROR_SUCCESS, "get property failed: %d\n", r);
+ ok( !lstrcmp( buf, "[Bracket Text]" ), "Expected '[Bracket Text]', got %s\n", buf);
+
+ /* custom action 51, escaped text 2 */
+ r = MsiDoAction( hpkg, "EscapeIt2" );
+ ok( r == ERROR_SUCCESS, "EscapeIt failed: %d\n", r);
+
+ size = MAX_PATH;
+ r = MsiGetProperty( hpkg, "prop", buf, &size );
+ ok( r == ERROR_SUCCESS, "get property failed: %d\n", r);
+ ok( !lstrcmp( buf, "x" ), "Expected 'x', got %s\n", buf);
+
+ /* custom action 51, escaped text 3 */
+ r = MsiDoAction( hpkg, "EscapeIt3" );
+ ok( r == ERROR_SUCCESS, "EscapeIt failed: %d\n", r);
+
+ size = MAX_PATH;
+ r = MsiGetProperty( hpkg, "prop", buf, &size );
+ ok( r == ERROR_SUCCESS, "get property failed: %d\n", r);
+ ok( !lstrcmp( buf, "" ), "Expected '', got %s\n", buf);
+
/* component with INSTALLSTATE_LOCAL */
size = MAX_PATH;
MsiRecordSetString( hrec, 1, "[$temporal]" );
--
1.4.2
More information about the wine-patches
mailing list