summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--Makefile.am23
-rw-r--r--atlocal.in24
-rwxr-xr-xbuild-aux/move-if-change17
-rw-r--r--configure.ac8
-rw-r--r--tests/Makefile.am20
-rw-r--r--tests/data/button.txt7
-rw-r--r--tests/data/columns.txt194
-rw-r--r--tests/data/icon.txt4
-rw-r--r--tests/data/icon/firefox.16.0.2.0.ico.exebin0 -> 25214 bytes
-rw-r--r--tests/data/tables.txt41
-rw-r--r--tests/package.m4.in8
-rw-r--r--tests/runtest.in12
-rw-r--r--tests/testdatabase.ok1916
-rw-r--r--tests/testrecord.ok200
-rw-r--r--tests/testsuite.at209
-rw-r--r--tests/testsuminfo.ok91
17 files changed, 537 insertions, 2241 deletions
diff --git a/.gitignore b/.gitignore
index 9a61dc1..911a29f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,8 @@
/config.h.in
/config.h.in~
/configure
+/tests/package.m4
+/tests/testsuite
+/tests/testsuite.dir
+/tests/testsuite.log
Makefile.in
diff --git a/Makefile.am b/Makefile.am
index a3da959..bb2516e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = libmsi . tests
+SUBDIRS = libmsi tests .
noinst_HEADERS = include/debug.h
dist_include_HEADERS = include/libmsi.h
@@ -17,3 +17,24 @@ msibuild_DEPENDENCIES = libmsi/libmsi.la
msiinfo_SOURCES = tools/msiinfo.c
msiinfo_LDADD = -lmsi $(GLIB_LIBS) $(GSF_LIBS)
msiinfo_DEPENDENCIES = libmsi/libmsi.la
+
+# Autotest support
+
+dist_noinst_DATA = tests/testsuite.at tests/package.m4 tests/testsuite
+DISTCLEANFILES = atconfig atlocal
+CLEANFILES = testsuite.log
+
+check-local: $(srcdir)/tests/testsuite atconfig atlocal
+ $(SHELL) $(srcdir)/tests/testsuite AUTOTEST_PATH=. $(TESTSUITEFLAGS)
+
+installcheck-local: $(srcdir)/tests/testsuite atconfig atlocal
+ $(SHELL) $(srcdir)/tests/testsuite AUTOTEST_PATH=$(bindir) $(TESTSUITEFLAGS)
+
+clean-local:
+ -$(SHELL) tests/testsuite --clean
+
+$(srcdir)/tests/testsuite: tests/testsuite.at tests/package.m4
+ cd $(srcdir)/tests && \
+ $(AUTOM4TE) --language=autotest -o testsuite.tmp testsuite.at && \
+ mv testsuite.tmp testsuite
+
diff --git a/atlocal.in b/atlocal.in
new file mode 100644
index 0000000..bc84b6d
--- /dev/null
+++ b/atlocal.in
@@ -0,0 +1,24 @@
+EXEEXT=@EXEEXT@
+case "@UUID_LIBS@" in
+ '') have_uuid=no ;;
+ *) have_uuid=yes ;;
+esac
+
+dos2unix() {
+ # GNU sed required to build on mingw
+ sed 's/\r$//' "$@"
+}
+
+_msiinfo() {
+ WINEDEBUG=-all msiinfo$EXEEXT "$@" > stdout.tmp
+ rc=$?
+ case "$1" in
+ export|extract) cat stdout.tmp ;;
+ *) dos2unix stdout.tmp ;;
+ esac
+ return $rc
+}
+
+_msibuild() {
+ WINEDEBUG=-all msibuild$EXEEXT "$@"
+}
diff --git a/build-aux/move-if-change b/build-aux/move-if-change
new file mode 100755
index 0000000..03dd02e
--- /dev/null
+++ b/build-aux/move-if-change
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Like mv $1 $2, but if the files are the same, just delete $1.
+# Status is zero if successful, nonzero otherwise.
+#
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+# This is free software: you are free to change and redistribute it.
+# There is NO WARRANTY, to the extent permitted by law."
+
+if test -r "$2" && cmp -- "$1" "$2" >/dev/null; then
+ rm -f -- "$1"
+else
+ if mv -f -- "$1" "$2"; then :; else
+ # Ignore failure due to a concurrent move-if-change.
+ test -r "$2" && cmp -- "$1" "$2" >/dev/null && rm -f -- "$1"
+ fi
+fi
diff --git a/configure.ac b/configure.ac
index 19b8690..47c03cf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,6 +25,12 @@ AS_IF([test "$uuid" = yes],
LT_INIT([win32-dll disable-fast-install])
+AM_MISSING_PROG([AUTOM4TE], [autom4te])
+AC_CONFIG_TESTDIR([.])
+AC_CONFIG_FILES([atlocal])
+AC_CONFIG_FILES([tests/package.m4.tmp:tests/package.m4.in],
+ [$srcdir/build-aux/move-if-change tests/package.m4.tmp $srcdir/tests/package.m4
+ cp $srcdir/tests/package.m4 tests/package.m4.tmp])
+
AC_CONFIG_FILES([Makefile libmsi/Makefile tests/Makefile])
-AC_CONFIG_FILES([tests/runtest], [chmod +x tests/runtest])
AC_OUTPUT
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 9da07c5..b10049b 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -8,30 +8,10 @@ testrecord_LDADD = ../libmsi/libmsi.la
testdatabase_SOURCES = testdatabase.c
testdatabase_LDADD = ../libmsi/libmsi.la
-TESTS_ENVIRONMENT = srcdir=$(srcdir) ./runtest
-
if WIN32
noinst_PROGRAMS += testsuminfo
testdatabase_LDADD += -lole32
testsuminfo_SOURCES = testsuminfo.c
testsuminfo_LDADD = ../libmsi/libmsi.la -lole32
-
-TESTS = \
- testdatabase$(EXEEXT) \
- testrecord$(EXEEXT) \
- testsuminfo$(EXEEXT)
-
endif
-
-CLEANFILES = \
- testdatabase.log testdatabase.diff \
- testrecord.log testrecord.diff \
- testsuminfo.log testsuminfo.diff
-
-EXTRA_DIST = runtest \
- testdatabase.ok \
- testrecord.ok \
- testsuminfo.ok
-
-.NOTPARALLEL:
diff --git a/tests/data/button.txt b/tests/data/button.txt
new file mode 100644
index 0000000..6412fe0
--- /dev/null
+++ b/tests/data/button.txt
@@ -0,0 +1,7 @@
+Property Order Value X Y Width Height Text Help
+s72 i2 s64 i2 i2 i2 i2 L0 L50
+RadioButton Property Order
+IAgree 1 Yes 5 0 250 15 {\DlgFont8}I &accept the terms in the License Agreement
+IAgree 2 No 5 20 250 15 {\DlgFont8}I &do not accept the terms in the License Agreement
+AppsShutdownOption 1 All 5 5 320 15 Automatically &close applications and attempt to restart them after setup is complete.
+AppsShutdownOption 2 None 5 25 320 15 Do &not close applications. (A Reboot will be required.)
diff --git a/tests/data/columns.txt b/tests/data/columns.txt
new file mode 100644
index 0000000..8e03597
--- /dev/null
+++ b/tests/data/columns.txt
@@ -0,0 +1,194 @@
+Table Number Name Type
+s64 i2 s64 i2
+_Columns
+AdminExecuteSequence 1 Action 11592
+AdminExecuteSequence 2 Condition 7679
+AdminExecuteSequence 3 Sequence 5378
+AdminUISequence 1 Action 11592
+AdminUISequence 2 Condition 7679
+AdminUISequence 3 Sequence 5378
+AdvtExecuteSequence 1 Action 11592
+AdvtExecuteSequence 2 Condition 7679
+AdvtExecuteSequence 3 Sequence 5378
+BBControl 1 Billboard_ 11570
+BBControl 2 BBControl 11570
+BBControl 3 Type 3378
+BBControl 4 X 1282
+BBControl 5 Y 1282
+BBControl 6 Width 1282
+BBControl 7 Height 1282
+BBControl 8 Attributes 4356
+BBControl 9 Text 7986
+Binary 1 Name 11592
+Binary 2 Data 2304
+CheckBox 1 Property 11592
+CheckBox 2 Value 7488
+Property 1 Property 11592
+Property 2 Value 3840
+ComboBox 1 Property 11592
+ComboBox 2 Order 9474
+ComboBox 3 Value 3392
+ComboBox 4 Text 8000
+Control 1 Dialog_ 11592
+Control 2 Control 11570
+Control 3 Type 3348
+Control 4 X 1282
+Control 5 Y 1282
+Control 6 Width 1282
+Control 7 Height 1282
+Control 8 Attributes 4356
+Control 9 Property 7474
+Control 10 Text 7936
+Control 11 Control_Next 7474
+Control 12 Help 7986
+ActionText 1 Action 11592
+ActionText 2 Description 7936
+ActionText 3 Template 7936
+Icon 1 Name 11592
+Icon 2 Data 2304
+ListBox 1 Property 11592
+ListBox 2 Order 9474
+ListBox 3 Value 3392
+ListBox 4 Text 8000
+ControlCondition 1 Dialog_ 11592
+ControlCondition 2 Control_ 11570
+ControlCondition 3 Action 11570
+ControlCondition 4 Condition 11775
+ControlEvent 1 Dialog_ 11592
+ControlEvent 2 Control_ 11570
+ControlEvent 3 Event 11570
+ControlEvent 4 Argument 11775
+ControlEvent 5 Condition 15871
+ControlEvent 6 Ordering 5378
+Dialog 1 Dialog 11592
+Dialog 2 HCentering 1282
+Dialog 3 VCentering 1282
+Dialog 4 Width 1282
+Dialog 5 Height 1282
+Dialog 6 Attributes 4356
+Dialog 7 Title 8064
+Dialog 8 Control_First 3378
+Dialog 9 Control_Default 7474
+Dialog 10 Control_Cancel 7474
+EventMapping 1 Dialog_ 11592
+EventMapping 2 Control_ 11570
+EventMapping 3 Event 11570
+EventMapping 4 Attribute 3378
+InstallExecuteSequence 1 Action 11592
+InstallExecuteSequence 2 Condition 7679
+InstallExecuteSequence 3 Sequence 5378
+InstallUISequence 1 Action 11592
+InstallUISequence 2 Condition 7679
+InstallUISequence 3 Sequence 5378
+ListView 1 Property 11592
+ListView 2 Order 9474
+ListView 3 Value 3392
+ListView 4 Text 8000
+ListView 5 Binary_ 7496
+RadioButton 1 Property 11592
+RadioButton 2 Order 9474
+RadioButton 3 Value 3392
+RadioButton 4 X 1282
+RadioButton 5 Y 1282
+RadioButton 6 Width 1282
+RadioButton 7 Height 1282
+RadioButton 8 Text 7936
+RadioButton 9 Help 7986
+TextStyle 1 TextStyle 11592
+TextStyle 2 FaceName 3360
+TextStyle 3 Size 1282
+TextStyle 4 Color 4356
+TextStyle 5 StyleBits 5378
+UIText 1 Key 11592
+UIText 2 Text 8191
+_Validation 1 Table 11552
+_Validation 2 Column 11552
+_Validation 3 Nullable 3332
+_Validation 4 MinValue 4356
+_Validation 5 MaxValue 4356
+_Validation 6 KeyTable 7679
+_Validation 7 KeyColumn 5378
+_Validation 8 Category 7456
+_Validation 9 Set 7679
+_Validation 10 Description 7679
+Feature 1 Feature 11558
+Feature 2 Feature_Parent 7462
+Feature 3 Title 8000
+Feature 4 Description 8191
+Feature 5 Display 5378
+Feature 6 Level 1282
+Feature 7 Directory_ 7496
+Feature 8 Attributes 1282
+File 1 File 11592
+File 2 Component_ 3400
+File 3 FileName 4095
+File 4 FileSize 260
+File 5 Version 7496
+File 6 Language 7444
+File 7 Attributes 5378
+File 8 Sequence 1282
+Directory 1 Directory 11592
+Directory 2 Directory_Parent 7496
+Directory 3 DefaultDir 4095
+Component 1 Component 11592
+Component 2 ComponentId 7462
+Component 3 Directory_ 3400
+Component 4 Attributes 1282
+Component 5 Condition 7679
+Component 6 KeyPath 7496
+CustomAction 1 Action 11592
+CustomAction 2 Type 1282
+CustomAction 3 Source 7488
+CustomAction 4 Target 7679
+CustomAction 5 ExtendedType 4356
+Error 1 Error 9474
+Error 2 Message 7936
+FeatureComponents 1 Feature_ 11558
+FeatureComponents 2 Component_ 11592
+LaunchCondition 1 Condition 11775
+LaunchCondition 2 Description 4095
+Media 1 DiskId 9474
+Media 2 LastSequence 1282
+Media 3 DiskPrompt 8000
+Media 4 Cabinet 7679
+Media 5 VolumeLabel 7456
+Media 6 Source 7456
+MsiFileHash 1 File_ 11592
+MsiFileHash 2 Options 1282
+MsiFileHash 3 HashPart1 260
+MsiFileHash 4 HashPart2 260
+MsiFileHash 5 HashPart3 260
+MsiFileHash 6 HashPart4 260
+Registry 1 Registry 11592
+Registry 2 Root 1282
+Registry 3 Key 4095
+Registry 4 Name 8191
+Registry 5 Value 7936
+Registry 6 Component_ 3400
+SelfReg 1 File_ 11592
+SelfReg 2 Cost 5378
+Shortcut 1 Shortcut 11592
+Shortcut 2 Directory_ 3400
+Shortcut 3 Name 3968
+Shortcut 4 Component_ 3400
+Shortcut 5 Target 3400
+Shortcut 6 Arguments 7679
+Shortcut 7 Description 8191
+Shortcut 8 Hotkey 5378
+Shortcut 9 Icon_ 7496
+Shortcut 10 IconIndex 5378
+Shortcut 11 ShowCmd 5378
+Shortcut 12 WkDir 7496
+Shortcut 13 DisplayResourceDLL 7524
+Shortcut 14 DisplayResourceId 4356
+Shortcut 15 DescriptionResourceDLL 7524
+Shortcut 16 DescriptionResourceId 4356
+Upgrade 1 UpgradeCode 11558
+Upgrade 2 VersionMin 15636
+Upgrade 3 VersionMax 15636
+Upgrade 4 Language 15871
+Upgrade 5 Attributes 8452
+Upgrade 6 Remove 7679
+Upgrade 7 ActionProperty 3400
+_MAKEMSI_Cabs 1 Name 11568
+_MAKEMSI_Cabs 2 Data 6400
diff --git a/tests/data/icon.txt b/tests/data/icon.txt
new file mode 100644
index 0000000..83dcbc8
--- /dev/null
+++ b/tests/data/icon.txt
@@ -0,0 +1,4 @@
+Name Data
+s72 v0
+Icon Name
+firefox.16.0.2.0.ico.exe firefox.16.0.2.0.ico.exe
diff --git a/tests/data/icon/firefox.16.0.2.0.ico.exe b/tests/data/icon/firefox.16.0.2.0.ico.exe
new file mode 100644
index 0000000..ce218a0
--- /dev/null
+++ b/tests/data/icon/firefox.16.0.2.0.ico.exe
Binary files differ
diff --git a/tests/data/tables.txt b/tests/data/tables.txt
new file mode 100644
index 0000000..1cf9b77
--- /dev/null
+++ b/tests/data/tables.txt
@@ -0,0 +1,41 @@
+Name
+s64
+_Tables
+AdminExecuteSequence
+AdminUISequence
+AdvtExecuteSequence
+BBControl
+Binary
+CheckBox
+Property
+ComboBox
+Control
+ActionText
+Icon
+ListBox
+ControlCondition
+ControlEvent
+Dialog
+EventMapping
+InstallExecuteSequence
+InstallUISequence
+ListView
+RadioButton
+TextStyle
+UIText
+_Validation
+Feature
+File
+Directory
+Component
+CustomAction
+Error
+FeatureComponents
+LaunchCondition
+Media
+MsiFileHash
+Registry
+SelfReg
+Shortcut
+Upgrade
+_MAKEMSI_Cabs
diff --git a/tests/package.m4.in b/tests/package.m4.in
new file mode 100644
index 0000000..57ae927
--- /dev/null
+++ b/tests/package.m4.in
@@ -0,0 +1,8 @@
+# Signature of the current package.
+m4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])
+m4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])
+m4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])
+m4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])
+m4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])
+m4_define([AT_PACKAGE_URL], [@PACKAGE_URL@])
+
diff --git a/tests/runtest.in b/tests/runtest.in
deleted file mode 100644
index f8a3f4e..0000000
--- a/tests/runtest.in
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/bash
-
-: ${srcdir=$(basename $0)}
-: ${EXEEXT=@EXEEXT@}
-
-base=${1%${EXEEXT}}
-
-rm -f winetest-db.msi
-$1 > $base.log
-diff -u $srcdir/$base.ok $base.log | tee $base.diff
-test -s $base.diff && exit 1
-exit 0
diff --git a/tests/testdatabase.ok b/tests/testdatabase.ok
deleted file mode 100644
index 2141550..0000000
--- a/tests/testdatabase.ok
+++ /dev/null
@@ -1,1916 +0,0 @@
-ok: res == LIBMSI_RESULT_OPEN_FAILED
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 != access( msifile, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 != access( msifile2, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 == access( msifile2, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 != access( msifile2, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 != access( msifile, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 == access( msifile, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: -1 != access( msifile, F_OK )
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == 0
-ok: res == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 3
-ok: r == false
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf,"Abe")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf,"8675309")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: hrec == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r != LIBMSI_RESULT_SUCCESS
-ok: r != LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 0
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: rec
-ok: check_record( rec, 1, "S255")
-ok: check_record( rec, 2, "S1")
-ok: check_record( rec, 3, "I2")
-ok: check_record( rec, 4, "I2")
-ok: check_record( rec, 5, "I2")
-ok: check_record( rec, 6, "I4")
-ok: check_record( rec, 7, "S0")
-ok: 0x3dff == get_columns_table_type(hdb, "Properties", 1 )
-ok: 0x1d01 == get_columns_table_type(hdb, "Properties", 2 )
-ok: 0x1502 == get_columns_table_type(hdb, "Properties", 3 )
-ok: 0x1502 == get_columns_table_type(hdb, "Properties", 4 )
-ok: 0x1502 == get_columns_table_type(hdb, "Properties", 5 )
-ok: 0x1104 == get_columns_table_type(hdb, "Properties", 6 )
-ok: 0x1d00 == get_columns_table_type(hdb, "Properties", 7 )
-ok: rec
-ok: check_record( rec, 1, "Property")
-ok: check_record( rec, 2, "Value")
-ok: check_record( rec, 3, "Intvalue")
-ok: check_record( rec, 4, "Integervalue")
-ok: check_record( rec, 5, "Shortvalue")
-ok: check_record( rec, 6, "Longvalue")
-ok: check_record( rec, 7, "Longcharvalue")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: rec
-ok: check_record( rec, 1, "S255")
-ok: check_record( rec, 2, "V0")
-ok: 0x3dff == get_columns_table_type(hdb, "Binary", 1 )
-ok: 0x1900 == get_columns_table_type(hdb, "Binary", 2 )
-ok: rec
-ok: check_record( rec, 1, "Name")
-ok: check_record( rec, 2, "Data")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: 0x2d48 == get_columns_table_type(hdb, "UIText", 1 )
-ok: 0x1fff == get_columns_table_type(hdb, "UIText", 2 )
-ok: rec
-ok: check_record( rec, 1, "Key")
-ok: check_record( rec, 2, "Text")
-ok: rec
-ok: check_record( rec, 1, "s72")
-ok: check_record( rec, 2, "L255")
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer,"Name")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer,"s64")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: rec == 0
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: fd != -1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: length == strlen(expected)
-ok: !strcmp(buffer, expected)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: len == STRING_LENGTH
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: rec
-ok: check_record( rec, 1, "s62")
-ok: check_record( rec, 2, "V0")
-ok: rec
-ok: check_record( rec, 1, "Name")
-ok: check_record( rec, 2, "Data")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "data")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "test.txt\n")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "data1")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "test1.txt\n")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "data1")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "Binary.filename1.1")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "test.txt\n")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "filename1")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "test.txt\n")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record( rec, 1, "cond2")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record( rec, 1, "cond3")
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record( rec, 4, "zero.cab")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record( rec, 4, "one.cab")
-ok: 2 == r
-ok: 1 == r
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, "2" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, "3" )
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 9
-ok: check_record(rec, 1, "FirstPrimaryColumn")
-ok: check_record(rec, 2, "SecondPrimaryColumn")
-ok: check_record(rec, 3, "ShortInt")
-ok: check_record(rec, 4, "ShortIntNullable")
-ok: check_record(rec, 5, "LongInt")
-ok: check_record(rec, 6, "LongIntNullable")
-ok: check_record(rec, 7, "String")
-ok: check_record(rec, 8, "LocalizableString")
-ok: check_record(rec, 9, "LocalizableStringNullable")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 9
-ok: check_record(rec, 1, "s255")
-ok: check_record(rec, 2, "i2")
-ok: check_record(rec, 3, "i2")
-ok: check_record(rec, 4, "I2")
-ok: check_record(rec, 5, "i4")
-ok: check_record(rec, 6, "I4")
-ok: check_record(rec, 7, "S255")
-ok: check_record(rec, 8, "S0")
-ok: check_record(rec, 9, "s0")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record(rec, 1, "stringage")
-ok: check_record(rec, 7, "another string")
-ok: check_record(rec, 8, "localizable")
-ok: check_record(rec, 9, "duh")
-ok: i == 5
-ok: i == 2
-ok: i == MSI_NULL_INTEGER
-ok: i == 2147483640
-ok: i == -2147483640
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: check_record(rec, 1, "PrimaryOne")
-ok: check_record(rec, 2, "PrimaryTwo")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: check_record(rec, 1, "s255")
-ok: check_record(rec, 2, "s255")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record(rec, 1, "papaya")
-ok: check_record(rec, 2, "leaf")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record(rec, 1, "papaya")
-ok: check_record(rec, 2, "flower")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 6
-ok: check_record(rec, 1, "A")
-ok: check_record(rec, 2, "B")
-ok: check_record(rec, 3, "C")
-ok: check_record(rec, 4, "D")
-ok: check_record(rec, 5, "E")
-ok: check_record(rec, 6, "F")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 6
-ok: check_record(rec, 1, "s72")
-ok: check_record(rec, 2, "s72")
-ok: check_record(rec, 3, "s72")
-ok: check_record(rec, 4, "s72")
-ok: check_record(rec, 5, "s72")
-ok: check_record(rec, 6, "s72")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record(rec, 1, "a")
-ok: check_record(rec, 2, "b")
-ok: check_record(rec, 3, "c")
-ok: check_record(rec, 4, "d")
-ok: check_record(rec, 5, "e")
-ok: check_record(rec, 6, "f")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: check_record(rec, 1, "g")
-ok: check_record(rec, 2, "h")
-ok: check_record(rec, 3, "i")
-ok: check_record(rec, 4, "j")
-ok: check_record(rec, 5, "k")
-ok: check_record(rec, 6, "l")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "filename1")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "just some words")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: i == MY_NQUERIES
-ok: i == MY_NQUERIES
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == S_OK
-ok: r == S_OK
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !memcmp(buffer, "naengmyon", 9)
-ok: sz == 9
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "c")
-ok: r == 0x80000000
-ok: r == 5
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "b")
-ok: r == 0x80000000
-ok: r == 0x80000000
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].one )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].two )
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].one )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].two )
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].one )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].two )
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].one )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].two )
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].one )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, join_res_first[i].two )
-ok: i == 5
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: i == 24
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 2
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 2
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 1
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 1
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 6
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 3
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 6
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: data_correct
-ok: i == 6
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 6
-ok: count == 6
-ok: count == 6
-ok: count == 6
-ok: count == 6
-ok: count == 6
-ok: data_correct
-ok: i == 6
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: cond == LIBMSI_CONDITION_ERROR
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: cond == LIBMSI_CONDITION_ERROR
-ok: cond == LIBMSI_CONDITION_NONE
-ok: cond == LIBMSI_CONDITION_NONE
-ok: cond == LIBMSI_CONDITION_NONE
-ok: cond == LIBMSI_CONDITION_NONE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: cond == LIBMSI_CONDITION_TRUE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: cond == LIBMSI_CONDITION_TRUE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: cond == LIBMSI_CONDITION_FALSE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: cond == LIBMSI_CONDITION_NONE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: cond == LIBMSI_CONDITION_TRUE
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: cond == LIBMSI_CONDITION_NONE
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: 0 == strcmp("G255", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: 0 == strcmp("j2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: cond == LIBMSI_CONDITION_FALSE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 8
-ok: check_record(rec, 1, "one")
-ok: check_record(rec, 2, "two")
-ok: check_record(rec, 3, "three")
-ok: check_record(rec, 4, "four")
-ok: check_record(rec, 5, "five")
-ok: check_record(rec, 6, "six")
-ok: check_record(rec, 7, "seven")
-ok: check_record(rec, 8, "eight")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 8
-ok: check_record(rec, 1, "I2")
-ok: check_record(rec, 2, "I2")
-ok: check_record(rec, 3, "I2")
-ok: check_record(rec, 4, "I4")
-ok: check_record(rec, 5, "i2")
-ok: check_record(rec, 6, "i2")
-ok: check_record(rec, 7, "i2")
-ok: check_record(rec, 8, "i4")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == -1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 8
-ok: i == MSI_NULL_INTEGER
-ok: i == MSI_NULL_INTEGER
-ok: i == 2
-ok: i == 4
-ok: i == 5
-ok: i == 6
-ok: i == 7
-ok: i == 8
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(result, "this is text")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strlen(result)
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(result, "this is text")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strlen(result)
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(result, "this is text")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(result, "this is text")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(result, "this is text")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 8
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 8
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 5
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "foo")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "baz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "bar")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "foo")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "baz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "baz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "bar")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "baz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "baz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "baz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "foo")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "bar")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "foo")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "A")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "B")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "C")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "E")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "D")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "E")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "F")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "A")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "apple")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "two")
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "apple")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "two")
-ok: r == 2
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "apple")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "two")
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "banana")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "three")
-ok: r == 3
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "one")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "two")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == 5
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "five")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hr == S_OK
-ok: stg != NULL
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: read == 4
-ok: hr == S_OK
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: read == 8
-ok: hr == S_OK
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: read == 24
-ok: !memcmp(buffer, data12, read)
-ok: hr == S_OK
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: hr == S_OK
-ok: hr == S_OK
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hr == S_OK
-ok: stg != NULL
-ok: hr == S_OK
-ok: !lstrcmpW(stat.pwcsName, database_table_data[n].name)
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: count == database_table_data[n].size
-ok: !memcmp(data, check, MAX_PATH)
-ok: !lstrcmpW(stat.pwcsName, database_table_data[n].name)
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: count == database_table_data[n].size
-ok: !memcmp(data, check, MAX_PATH)
-ok: !lstrcmpW(stat.pwcsName, database_table_data[n].name)
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: count == database_table_data[n].size
-ok: !memcmp(data, database_table_data[n].data, database_table_data[n].size)
-ok: n == 3
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 3
-ok: val == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 5
-ok: val == 6
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 1
-ok: val == 2
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 1
-ok: val == 12
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 3
-ok: val == 12
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 5
-ok: val == 12
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 1
-ok: val == 14
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 3
-ok: val == 14
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 5
-ok: val == 14
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 1
-ok: val == 10
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 3
-ok: val == 10
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 5
-ok: val == 10
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "dos")
-ok: r == 3
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "two")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "This is a \"string\" ok")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "This is a new 'string' ok")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "\rOne")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Tw\ro")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Three\r")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Table")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Table2")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Table3")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Table")
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "A")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Table2")
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "A")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "Table3")
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "A")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "hi")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: fd != -1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "\r\n\r\n0\t_ForceCodepage\r\n")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: fd != -1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "\r\n\r\n850\t_ForceCodepage\r\n")
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hrec
-ok: check_record(hrec, 1, "s62")
-ok: check_record(hrec, 2, "V0")
-ok: hrec
-ok: check_record(hrec, 1, "Name")
-ok: check_record(hrec, 2, "Data")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(file, "stgname")
-ok: r == LIBMSI_RESULT_INVALID_DATA
-ok: !strcmp(buf, "apple")
-ok: size == 0
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: hr == S_OK
-ok: stg != NULL
-ok: hr == S_OK
-ok: inner != NULL
-ok: hr == S_OK
-ok: stm != NULL
-ok: hr == S_OK
-ok: size == 8
-ok: !strcmp(buf, "stgdata")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "One")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "One")
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "A")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "One")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "One")
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "B")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "One")
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "C")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == vals[i][0]
-ok: r == vals[i][1]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == vals[i][0]
-ok: r == vals[i][1]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == vals[i][0]
-ok: r == vals[i][1]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == vals[i][0]
-ok: r == vals[i][1]
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == ordervals[i][0]
-ok: r == ordervals[i][1]
-ok: r == ordervals[i][2]
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("s255", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("I2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("S255", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("i2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("i2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("D", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("E", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("A", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("C", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("B", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("bc", buf)
-ok: r == 3
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("a", buf)
-ok: r == 2
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("D", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("E", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 3
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("A", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("C", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 5
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("B", buf)
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("i2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("S255", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("s255", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("I2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("i2", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("C", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("A", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("D", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("E", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("B", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("a", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("bc", buf)
-ok: r == 3
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("D", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("E", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 3
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("A", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("C", buf)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("T", buf)
-ok: r == 5
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp("B", buf)
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 14
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_INT
-ok: int_value == 1252
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: size == 18
-ok: !strcmp(str_value, "Installer Database")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "Installer description")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "WineHQ")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "Installer")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "Installer comments")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "Intel;1033,2057")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "{12345678-1234-1234-1234-123456789012}")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_FILETIME
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_FILETIME
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_INT
-ok: int_value == 200
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_INT
-ok: int_value == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_INT
-ok: int_value == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(str_value, "Vim")
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: hdb
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer,"b")
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer,"b")
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: res == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "\2")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "A")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "\1")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "B")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !memcmp(buffer, letter_a_ring, sizeof(letter_a_ring))
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "C")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !memcmp(buffer, letter_a_with_ring, sizeof(letter_a_with_ring))
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "D")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !memcmp(buffer, letter_a_with_ring, sizeof(letter_a_with_ring))
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "D")
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !memcmp( "text\r\ntext\ntext", buffer, sizeof("text\r\ntext\ntext") - 1 )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "f0" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "1" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "1" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "3" )
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 3
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "1" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "2" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "3" )
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !buffer[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buffer, "4" )
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
diff --git a/tests/testrecord.ok b/tests/testrecord.ok
deleted file mode 100644
index 28c2439..0000000
--- a/tests/testrecord.ok
+++ /dev/null
@@ -1,200 +0,0 @@
-ok: r==-1
-ok: r==0
-ok: r == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: h==0
-ok: h==0
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: r == 0
-ok: h!=0
-ok: r==0
-ok: r
-ok: r
-ok: r
-ok: r==0
-ok: r==LIBMSI_RESULT_SUCCESS
-ok: sz==0
-ok: buf[0]==0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r==0
-ok: r==sizeof(unsigned)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r==0
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == true
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: buf[0] == 0
-ok: sz == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == true
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: buf[0] == 0
-ok: sz == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == MSI_NULL_INTEGER
-ok: r==sizeof str-1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: 0==strcmp(buf,str)
-ok: sz == sizeof str-1
-ok: r == LIBMSI_RESULT_MORE_DATA
-ok: sz == sizeof str-1
-ok: 0==strncmp(buf,str,sizeof str-3)
-ok: buf[sizeof str - 3]==0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz == sizeof str-1
-ok: 0==strcmp(buf,str)
-ok: r == LIBMSI_RESULT_MORE_DATA
-ok: sz == 5
-ok: 0==memcmp(buf,str,4)
-ok: r == LIBMSI_RESULT_MORE_DATA
-ok: sz == 5
-ok: 'x'==buf[0]
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == 42
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == -42
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == -1530494976
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == 2147483647
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == -2147483647
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == 1
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: i == LIBMSI_RESULT_SUCCESS
-ok: i == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: 0==strcmp(buf,"32")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz == 3
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: 0==strcmp(buf,"-32")
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_INVALID_DATATYPE
-ok: sz == sizeof buf
-ok: r == 0
-ok: r == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: h
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==26
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==sizeof buf
-ok: !strncmp(buf,"abcdefghij",10)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==sizeof buf
-ok: !strncmp(buf,"klmnopqrst",10)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==6
-ok: !strcmp(buf,"uvwxyz")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==0
-ok: buf[0]==0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz==26
-ok: r == 26
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: rec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "")
-ok: sz == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "")
-ok: sz == 0
-ok: rec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: sz == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "5")
-ok: sz == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "-5")
-ok: sz == 2
-ok: rec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == 5
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == -5
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: val == MSI_NULL_INTEGER
-ok: rec != 0
-ok: r == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "")
-ok: sz == 0
-ok: r == true
-ok: r == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "")
-ok: sz == 0
-ok: r == true
-ok: r == 42
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "")
-ok: sz == 0
-ok: r == true
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "bologna")
-ok: sz == 7
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == MSI_NULL_INTEGER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buf, "drone")
-ok: sz == 5
-ok: r == false
-ok: r == LIBMSI_RESULT_INVALID_TABLE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r != MSI_NULL_INTEGER && r != 0
-ok: r == false
-ok: r == LIBMSI_RESULT_SUCCESS
diff --git a/tests/testsuite.at b/tests/testsuite.at
new file mode 100644
index 0000000..e222d62
--- /dev/null
+++ b/tests/testsuite.at
@@ -0,0 +1,209 @@
+## Autotest testsuite for msitools.
+
+# Copyright (C) 2012 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+m4_include([package.m4])
+
+AT_INIT
+
+# AT_MSIDATA - copy data file from source tree
+
+m4_define([AT_MSIDATA], [
+dir=`dirname $1`
+AS_MKDIR_P([$dir])
+AT_CHECK([cp $abs_srcdir/tests/data/$1 $1])])
+
+# AT_DATA_UNQUOTED - define data file while allowing shell variables
+
+m4_define([AT_DATA_UNQUOTED],
+[cat >$1 <<_ATEOF
+$2[]_ATEOF
+])
+
+# AT_CR - literal carriage return
+
+m4_define([AT_CR], [`echo X | tr X '\015'`])
+
+# AT_CHECK_MSIBUILD/AT_CHECK_MSIINFO - add exeext automatically
+m4_define([AT_CHECK_MSIBUILD], [
+AT_CHECK([_msibuild ]$@)])
+
+m4_define([AT_CHECK_MSIINFO], [
+AT_CHECK([_msiinfo ]$@)])
+
+# Cannot use AT_TESTED because of $EXEEXT (Autotest bug)
+
+AT_BANNER([libmsi tests])
+
+AT_SETUP([testdatabase])
+AT_KEYWORDS([testdatabase])
+AT_SKIP_IF([! test -f $abs_builddir/tests/testdatabase$EXEEXT])
+AT_CHECK([tests/testdatabase$EXEEXT], [ignore], [stdout], [ignore])
+AT_CHECK([grep ^FAIL stdout], [1], [], [])
+AT_CLEANUP
+
+AT_SETUP([testrecord])
+AT_KEYWORDS([testrecord])
+AT_SKIP_IF([! test -f $abs_builddir/tests/testrecord$EXEEXT])
+AT_CHECK([tests/testrecord$EXEEXT], [ignore], [stdout], [ignore])
+AT_CHECK([grep ^FAIL stdout], [1], [], [])
+AT_CLEANUP
+
+AT_SETUP([testsuminfo])
+AT_KEYWORDS([testsuminfo])
+AT_SKIP_IF([! test -f $abs_builddir/tests/testsuminfo$EXEEXT])
+AT_CHECK([tests/testsuminfo$EXEEXT], [ignore], [stdout], [ignore])
+AT_CHECK([grep ^FAIL stdout], [1], [], [])
+AT_CLEANUP
+
+AT_BANNER([msibuild])
+
+AT_SETUP([Invalid command line])
+AT_CHECK_MSIBUILD([], [1], [ignore], [ignore])
+AT_CHECK_MSIBUILD([out.msi], [1], [ignore], [ignore])
+AT_CHECK([test -f out.msi], [1])
+AT_CLEANUP
+
+AT_SETUP([Empty MSI])
+AT_CHECK_MSIBUILD([out.msi -s 'Project name'])
+AT_CHECK_MSIINFO([suminfo out.msi], [ignore], [stdout])
+AT_CHECK([grep ^Subject stdout], [0],
+[Subject: Project name
+])
+AT_CHECK([grep ^Template stdout], [0],
+[Template: ;1033
+])
+AT_CHECK([grep ^Version stdout], [0],
+[Version: 200 (c8)
+])
+AT_CLEANUP
+
+AT_SETUP([Valid UUID])
+AT_SKIP_IF([test $have_uuid = no])
+AT_CHECK_MSIBUILD([out.msi -s 'Project name'])
+AT_CHECK_MSIINFO([suminfo out.msi], [ignore], [stdout])
+AT_CHECK([[
+ UUID='\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}'
+ grep -E "^Revision number: $UUID\$" stdout]], [0],
+[ignore])
+AT_CLEANUP
+
+AT_SETUP([UUID does not change])
+AT_SKIP_IF([test $have_uuid = no])
+AT_CHECK_MSIBUILD([out.msi -s 'Project name'])
+AT_CHECK_MSIINFO([suminfo out.msi | grep ^Revision > expout], [0])
+AT_CHECK_MSIBUILD([out.msi -s 'Project name2'])
+AT_CHECK_MSIINFO([suminfo out.msi], [ignore], [stdout])
+AT_CHECK([grep ^Subject stdout], [0],
+[Subject: Project name2
+])
+AT_CHECK_MSIINFO([suminfo out.msi | grep ^Revision], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([Add stream])
+AT_DATA([test.txt], [This is test.txt
+])
+AT_CHECK_MSIBUILD([out.msi -a Binary.testtxt test.txt])
+AT_CHECK_MSIINFO([streams out.msi | grep -v SummaryInformation], [0],
+[Binary.testtxt
+])
+cp test.txt expout
+AT_CHECK_MSIINFO([extract out.msi Binary.testtxt], [0], [expout])
+AT_CLEANUP
+
+dnl AT_SETUP([Invalid import table])
+dnl AT_XFAIL_IF(:)
+dnl AT_DATA([tables.txt],
+dnl [Name
+dnl s64
+dnl Binary
+dnl ])
+dnl AT_CHECK_MSIBUILD([out.msi -i tables.txt])
+dnl AT_CLEANUP
+
+AT_SETUP([Add tables])
+AT_DATA([tables.txt],
+[Name
+s64
+_Tables
+Binary
+])
+AT_CHECK_MSIBUILD([out.msi -i tables.txt])
+AT_CHECK_MSIINFO([tables out.msi], [0],
+[Binary
+])
+AT_CLEANUP
+
+AT_SETUP([Add tables and definitions])
+AT_MSIDATA([tables.txt])
+AT_MSIDATA([columns.txt])
+AT_CHECK_MSIBUILD([out.msi -i tables.txt columns.txt])
+AT_DATA_UNQUOTED([expout],
+[Name Data[]AT_CR
+s72 v0[]AT_CR
+Icon Name[]AT_CR
+])
+AT_CHECK_MSIINFO([export out.msi Icon], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([Separate invocations])
+AT_MSIDATA([tables.txt])
+AT_MSIDATA([columns.txt])
+AT_CHECK_MSIBUILD([out.msi -i tables.txt])
+AT_CHECK_MSIINFO([tables out.msi > expout])
+AT_CHECK_MSIBUILD([out.msi -i columns.txt])
+AT_CHECK_MSIINFO([tables out.msi], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([Add table with data])
+AT_MSIDATA([tables.txt])
+AT_MSIDATA([columns.txt])
+AT_MSIDATA([button.txt])
+AT_CHECK_MSIBUILD([out.msi -i tables.txt columns.txt button.txt])
+cp button.txt expout
+AT_CHECK_MSIINFO([export out.msi RadioButton], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([Add table with streams])
+AT_MSIDATA([tables.txt])
+AT_MSIDATA([columns.txt])
+AT_MSIDATA([icon.txt])
+AT_MSIDATA([icon/firefox.16.0.2.0.ico.exe])
+AT_CHECK_MSIBUILD([out.msi -i tables.txt columns.txt icon.txt])
+cp icon.txt expout
+AT_CHECK_MSIINFO([streams out.msi | grep -v SummaryInformation], [0],
+[Icon.firefox.16.0.2.0.ico.exe
+])
+cp icon/firefox.16.0.2.0.ico.exe expout
+AT_CHECK_MSIINFO([extract out.msi Icon.firefox.16.0.2.0.ico.exe > stdout], [0])
+AT_CHECK([cmp stdout expout])
+AT_CLEANUP
+
+AT_SETUP([Add tables])
+AT_DATA([tables.txt],
+[Name
+s64
+_Tables
+Binary
+])
+AT_CHECK_MSIBUILD([-i out.msi tables.txt])
+AT_CHECK_MSIINFO([tables out.msi], [0],
+[Binary
+])
+AT_CLEANUP
+
diff --git a/tests/testsuminfo.ok b/tests/testsuminfo.ok
deleted file mode 100644
index 7ba7199..0000000
--- a/tests/testsuminfo.ok
+++ /dev/null
@@ -1,91 +0,0 @@
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_UNKNOWN_PROPERTY
-ok: r == LIBMSI_RESULT_UNKNOWN_PROPERTY
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: type == 0
-ok: val == 1234
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: buf[0]=='x'
-ok: sz == 0x10
-ok: type == LIBMSI_PROPERTY_TYPE_EMPTY
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_INVALID_PARAMETER
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_MORE_DATA
-ok: sz == 4
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(buf,"M")
-ok: r == LIBMSI_RESULT_MORE_DATA
-ok: sz == 4
-ok: type == LIBMSI_PROPERTY_TYPE_STRING
-ok: !strcmp(buf,"Mik")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_DATATYPE_MISMATCH
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: r == S_OK
-ok: INVALID_FILE_ATTRIBUTES != GetFileAttributes(msifile)
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(sval, "") || !strcmp(sval, "7")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED