[Tools] testbot: Add a tool to generate Winetest report test cases.
Francois Gouget
fgouget at codeweavers.com
Thu Feb 16 05:34:47 CST 2017
This generates WineTest-style report containing test cases for tools
that parse and verify them such as the TestBot and test.winehq.org
scripts.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/src/reporttest/Makefile | 28 +
testbot/src/reporttest/report.template | 955 +++++++++++++++++++++++++++++++++
testbot/src/reporttest/reporttest.c | 255 +++++++++
testbot/src/reporttest/reporttest.rc | 1 +
4 files changed, 1239 insertions(+)
create mode 100644 testbot/src/reporttest/Makefile
create mode 100644 testbot/src/reporttest/report.template
create mode 100644 testbot/src/reporttest/reporttest.c
create mode 100644 testbot/src/reporttest/reporttest.rc
diff --git a/testbot/src/reporttest/Makefile b/testbot/src/reporttest/Makefile
new file mode 100644
index 00000000..f8a927d0
--- /dev/null
+++ b/testbot/src/reporttest/Makefile
@@ -0,0 +1,28 @@
+CROSSCC32 = i686-w64-mingw32-gcc
+CROSSSTRIP32 = i686-w64-mingw32-strip
+CROSSWINDRES = i686-w64-mingw32-windres
+CROSSZIPEXE = upx-ucl
+
+all: ReportTest.exe
+
+ReportTest.exe: reporttest.obj reporttest.res
+ $(CROSSCC32) -Wall -o $@ $^
+ $(CROSSSTRIP32) $@
+ if which $(CROSSZIPEXE); \
+ then \
+ $(CROSSZIPEXE) --best -q -q $@; \
+ fi
+
+.SUFFIXES: .obj
+.c.obj:
+ $(CROSSCC32) -Wall -g -c -o $@ $<
+
+.SUFFIXES: .rc .res
+.rc.res:
+ $(CROSSWINDRES) -O coff -o $@ $<
+
+reporttest.res: report.template
+
+clean:
+ rm -f *.obj *.res
+ rm -f ReportTest.exe
diff --git a/testbot/src/reporttest/report.template b/testbot/src/reporttest/report.template
new file mode 100644
index 00000000..2e891f21
--- /dev/null
+++ b/testbot/src/reporttest/report.template
@@ -0,0 +1,955 @@
+Version 4
+Tests from build 9c72376c8cc03a4ea86dddaa6d18a93a1a33fc73
+Archive: -
+Tag: test-report
+Build info:
+ Dummy build information.
+Operating system version:
+ Platform=i386
+ bRunningUnderWine=0
+ bRunningOnVisibleDesktop=1
+ Account=admin
+ Submitter=wine-devel at winehq.org
+ dwMajorVersion=5
+ dwMinorVersion=1
+ dwBuildNumber=2600
+ PlatformId=2
+ wProductType=1
+Dll info:
+ advapi32=5.1.2600.5755
+ advpack=8.0.6001.18702
+ amstream=6.5.2600.5512
+ apphelp=5.1.2600.5512
+ atl100=dll is missing
+ atl80=dll is missing
+ atl=3.5.2284.2
+ avifil32=dll is missing
+ bcrypt=dll is missing
+ browseui=6.0.2900.5512
+ cabinet=5.1.2600.5512
+ cmd.exe=5.1.2600.5512
+ combase=dll is missing
+ comcat=5.0.2600.1
+ comctl32=5.82.2900.6028
+ comdlg32=6.0.2900.5512
+ credui=5.1.2600.5512
+ crypt32=5.131.2600.5512
+ cryptnet=5.131.2600.5512
+ cryptui=5.131.2600.5512
+ d2d1=dll is missing
+ d3d10core=dll is missing
+ d3d10_1=dll is missing
+ d3d10=dll is missing
+ d3d11=dll is missing
+ d3d8=5.3.2600.5512
+ d3d9=5.3.2600.5512
+ d3dcompiler_43=dll is missing
+ d3drm=5.1.2600.0
+ d3dx10_43=dll is missing
+ d3dx11_43=dll is missing
+ d3dx9_36=dll is missing
+ d3dxof=5.1.2600.0
+ ddrawex=5.3.2600.5512
+ ddraw=5.3.2600.5512
+ devenum=6.5.2600.5512
+ dinput8=5.3.2600.5512
+ dinput=5.3.2600.5512
+ dispex=5.7.0.16599
+ dmband=5.3.2600.5512
+ dmcompos=5.3.2600.5512
+ dmime=5.3.2600.5512
+ dmloader=5.3.2600.5512
+ dmscript=5.3.2600.5512
+ dmstyle=5.3.2600.5512
+ dmsynth=5.3.2600.5512
+ dmusic=5.3.2600.5512
+ dnsapi=5.1.2600.6089
+ dplayx=5.3.2600.5512
+ dpnet=5.3.2600.5512
+ dpvoice=5.3.2600.5512
+ dsound=5.3.2600.5512
+ dssenh=5.1.2600.5507
+ dswave=5.3.2600.5512
+ dwrite=dll is missing
+ dxdiagn=5.3.2600.5512
+ dxgi=dll is missing
+ explorerframe=dll is missing
+ faultrep=5.1.2600.5512
+ fusion=2.0.50727.3053
+ gameux=dll is missing
+ gdi32=5.1.2600.5698
+ gdiplus=5.2.6002.22509
+ hid=5.1.2600.5512
+ hlink=5.2.3790.2748
+ hnetcfg=5.1.2600.5512
+ ieframe=8.0.6001.19098
+ imagehlp=5.1.2600.5512
+ imm32=5.1.2600.5512
+ inetcomm=6.0.2900.6109
+ inetmib1=5.1.2600.5512
+ infosoft=5.1.2600.0
+ iphlpapi=5.1.2600.5512
+ itss=5.2.3790.4186
+ jscript=5.8.6001.23141
+ jsproxy=8.0.6001.19098
+ kernel32=5.1.2600.5781
+ localspl=5.1.2600.5809
+ localui=5.1.2600.5512
+ lz32=5.1.2600.0
+ mapi32=1.0.2536.0
+ mlang=6.0.2900.5512
+ mmcndmgr=5.2.3790.4136
+ mmdevapi=dll is missing
+ mpr=5.1.2600.5512
+ msacm32=5.1.2600.5512
+ mscms=5.1.2600.5627
+ mscoree=4.0.31106.0
+ msctf=5.1.2600.5512
+ msdmo=6.5.2600.5512
+ mshtml=8.0.6001.19120
+ msi=3.1.4001.5512
+ msrle32=5.1.2600.5908
+ msscript.ocx=1.0.0.16599
+ mstask=5.1.2600.5512
+ msvcirt=7.0.2600.5512
+ msvcp100=dll is missing
+ msvcp110=dll is missing
+ msvcp120=dll is missing
+ msvcp140=dll is missing
+ msvcp60=6.2.3104.0
+ msvcp90=9.0.21022.8
+ msvcr100=dll is missing
+ msvcr120=dll is missing
+ msvcr90=9.0.21022.8
+ msvcrtd=dll is missing
+ msvcrt=7.0.2600.5512
+ msvfw32=5.1.2600.5512
+ msxml3=8.100.1052.0
+ netapi32=5.1.2600.5694
+ netcfgx=5.1.2600.5512
+ netprofm=dll is missing
+ ntdll=5.1.2600.6055
+ ntdsapi=5.1.2600.5512
+ ntprint=5.1.2600.5512
+ odbccp32=3.525.1132.0
+ ole32=5.1.2600.6010
+ oleacc=7.0.2600.5884
+ oleaut32=5.1.2600.6058
+ oledb32=2.81.1132.0
+ oledlg=5.1.2600.5512
+ opengl32=5.1.2600.5512
+ packager=dll is missing
+ pdh=5.1.2600.5773
+ propsys=dll is missing
+ psapi=5.1.2600.5512
+ qcap=6.5.2600.5512
+ qedit=6.5.2600.5512
+ qmgr=6.7.2600.5512
+ quartz=6.5.2600.5933
+ rasapi32=5.1.2600.5512
+ reg.exe=5.1.2600.5512
+ regedit.exe=5.1.2600.5512
+ riched20=5.30.23.1230
+ riched32=5.1.2600.0
+ rpcrt4=5.1.2600.6022
+ rsaenh=5.1.2600.5507
+ schannel=5.1.2600.6108
+ schedsvc=5.1.2600.5512
+ scrrun=5.7.0.18066
+ secur32=5.1.2600.5834
+ serialui=5.1.2600.0
+ services.exe=5.1.2600.5755
+ setupapi=5.1.2600.5512
+ shdocvw=6.0.2900.5512
+ shell32=6.0.2900.6072
+ shlwapi=6.0.2900.5912
+ slc=dll is missing
+ snmpapi=5.1.2600.5512
+ spoolss=5.1.2600.5512
+ sti=5.1.2600.5512
+ sxs=5.1.2600.5512
+ t2embed=5.1.2600.6031
+ taskschd=dll is missing
+ twain_32=1.7.1.1
+ ucrtbase=dll is missing
+ urlmon=8.0.6001.19100
+ user32=5.1.2600.5512
+ userenv=5.1.2600.5512
+ usp10=1.420.2600.5969
+ uxtheme=6.0.2900.5512
+ vbscript=5.8.6001.23141
+ vcomp=dll is missing
+ version=5.1.2600.5512
+ wbemdisp=5.1.2600.5512
+ wbemprox=5.1.2600.5512
+ webservices=dll is missing
+ wer=dll is missing
+ wiaservc=5.1.2600.5512
+ windowscodecsext=6.0.6001.17009
+ windowscodecs=6.0.6001.17009
+ winhttp=5.1.2600.5868
+ wininet=8.0.6001.19098
+ winmm=5.1.2600.5512
+ winspool.drv=5.1.2600.5512
+ wintab32=dll is missing
+ wintrust=5.131.2600.5922
+ wlanapi=5.1.2600.5512
+ wldap32=5.1.2600.5512
+ wmiutils=5.1.2600.5512
+ wmp=11.0.5721.5280
+ wpc=dll is missing
+ ws2_32=5.1.2600.5512
+ wscript.exe=5.7.0.18066
+ wshom.ocx=5.7.0.18066
+ wsnmp32=5.1.2600.5512
+ wtsapi32=5.1.2600.5512
+ xaudio2_7=dll is missing
+ xcopy.exe=5.1.2600.5512
+ xinput1_3=dll is missing
+ xmllite=1.0.1018.0
+Test output:
+stub advapi32:cred
+
+advapi32:crypt start dlls/advapi32/tests/crypt.c -
+----- A unit test with one failed test
+----- Expected assessement: 1 failure
+This also has a valid source file name which one can link to.
+crypt.c:1: Test failed: Something wrong
+031c:crypt: 108 tests executed (0 marked as todo, 1 failure), 0 skipped.
+advapi32:crypt:031c done (1) in 0s
+
+advapi32:crypt_lmhash start dlls/advapi32/tests/crypt_lmhash.c -
+----- A unit test with two failed tests
+----- Expected assessement: 2 failures
+crypt_lmhash.c:10: Test failed: Something wrong
+crypt_lmhash.c:20: Test failed: Second failure here
+07c0:crypt_lmhash: 95 tests executed (0 marked as todo, 2 failures), 0 skipped.
+advapi32:crypt_lmhash:07c0 done (1) in 0s
+
+advapi32:crypt_md4 start dlls/advapi32/tests/crypt_md4.c -
+----- A unit test with two test result lines
+----- Expected assessement: Success
+0123:crypt_md4: 11 tests executed (0 marked as todo, 0 failures), 0 skipped.
+0ca0:crypt_md4: 11 tests executed (0 marked as todo, 0 failures), 0 skipped.
+advapi32:crypt_md4:0ca0 done (0) in 0s
+
+advapi32:crypt_md5 start dlls/advapi32/tests/crypt_md5.c -
+----- A unit test with a failed subprocess test repeated in the parent
+----- Expected assessement: 1 failure (also acceptable: 2 failures)
+crypt_md5.c:20: Test failed: A failure here, presumably in the subprocess
+0123:crypt_md5: 11 tests executed (0 marked as todo, 1 failure), 0 skipped.
+The parent now counts the subprocess failure as its own. Note that it means
+the 'Test failed' count may legitimately differ from the sum from the test
+result lines.
+Note that this also applies to the todo and skip counts.
+087c:crypt_md5: 5 tests executed (0 marked as todo, 1 failure), 0 skipped.
+advapi32:crypt_md5:087c done (3) in 0s
+
+advapi32:crypt_sha start dlls/advapi32/tests/crypt_sha.c -
+----- A unit test with a failed subprocess test ignored by the parent
+----- Expected assessement: 1 failure
+crypt_sha.c:20: Test failed: A failure here, presumably in the subprocess
+0456:crypt_sha: 1 tests executed (0 marked as todo, 1 failure), 0 skipped.
+The unit test counts on the framework to pick up the failure reported by the
+subprocess.
+08f8:crypt_sha: 1 tests executed (0 marked as todo, 0 failures), 0 skipped.
+advapi32:crypt_sha:08f8 done (3) in 0s
+
+advapi32:eventlog start dlls/advapi32/tests/eventlog.c -
+----- A unit test with an unreported failed test
+----- Expected assessement: 1 failure, "Unreported failure" error
+eventlog.c:20: Test failed: Something wrong
+088c:eventlog: 408 tests executed (0 marked as todo, 0 failures), 0 skipped.
+advapi32:eventlog:088c done (3) in 4s
+
+advapi32:lsa start dlls/advapi32/tests/crypt.c -
+----- A unit test with no test result line
+----- Expected assessement: "Missing test result" error
+advapi32:lsa:083c done (0) in 0s
+
+advapi32:registry start dlls/advapi32/tests/registry.c -
+----- A unit test with no main process test result line
+----- Expected assessement: "Missing test result" error
+1234:registry: 765 tests executed (0 marked as todo, 0 failures), 0 skipped.
+advapi32:registry:0804 done (0) in 0s
+
+advapi32:security start dlls/advapi32/tests/security.c -
+----- A unit test with a misplaced but successful subprocess test result line
+----- Expected assessement: Success
+The subprocess may be a server process that exits automatically once the test
+is complete. That's ok as long as it's not meant to report failures.
+0148:security: 2251 tests executed (0 marked as todo, 0 failures), 0 skipped.
+advapi32:security:0148 done (0) in 9s
+0954:security: 18 tests executed (0 marked as todo, 0 failures), 0 skipped.
+
+advapi32:service start dlls/advapi32/tests/service.c -
+----- A unit test with a misplaced and failed subprocess test result line
+----- Expected assessement: "Misplaced test result line" error
+Same scenario as above but the subprocess can actually report failures so the
+main process must wait for it. Ideally the error should be reported against
+this unit test but reporting against the next one is also acceptable.
+037c:service: 1930 tests executed (0 marked as todo, 0 failures), 0 skipped.
+advapi32:service:037c done (0) in 11s
+service.c:20: Test failed: A failure in the subprocess
+4567:service: 10 tests executed (0 marked as todo, 1 failure), 0 skipped.
+
+advpack:advpack start dlls/advpack/tests/advpack.c -
+----- A standard successful unit test
+----- Expected assessement: Success, unless the previous test interferes
+advpack:advpack:0da0 done (0) in 0s
+
+advpack:files start dlls/advapi32/tests/crypt.c -
+----- A unit test with a failed test in the main process
+----- Expected assessement: 1 failure
+files.c:20: Test failed: A failure in the main process
+4321:files: 99 tests executed (0 marked as todo, 0 failures), 0 skipped.
+0880:files: 99 tests executed (0 marked as todo, 1 failure), 0 skipped.
+advpack:files:0880 done (3) in 0s
+
+advpack:install start dlls/advpack/tests/install.c -
+----- A unit test with a crash
+----- Expected assessement: Crash
+install: unhandled exception c0000005 at 0040167C
+advpack:install:07b0 done (3221225477) in 0s
+
+amstream:amstream start dlls/amstream/tests/amstream.c -
+----- No pid at all
+----- Expected assessement: Success
+amstream: 152 tests executed (0 marked as todo, 0 failures), 0 skipped.
+amstream:amstream done (0) in 0s
+
+apphelp:apphelp start dlls/apphelp/tests/apphelp.c -
+----- A unit test with no execution time
+----- Expected assessement: Success
+0860:apphelp: 15 tests executed (0 marked as todo, 0 failures), 0 skipped.
+apphelp:apphelp:0860 done (0)
+
+atl:atl_ax start dlls/atl/tests/atl_ax.c -
+----- Pid on the result line, but no pid on the done one
+----- Expected assessement: Success
+0938:atl_ax: 12 tests executed (0 marked as todo, 0 failures), 0 skipped.
+atl:atl_ax done (0) in 0s
+
+atl:module start dlls/atl/tests/module.c -
+----- Pid on the done line, but no pid on the result line
+----- Expected assessement: Success
+module: 544 tests executed (0 marked as todo, 0 failures), 0 skipped.
+atl:module:0920 done (0) in 0s
+
+atl:registrar start dlls/atl/tests/registrar.c -
+----- A unit test with a foreign test result line
+----- Expected assessement: "Misplaced test result line" error
+9876:service: 10 tests executed (0 marked as todo, 0 failures), 0 skipped.
+0922:registrar: 17 tests executed (0 marked as todo, 0 failures), 0 skipped.
+atl:registrar:0922 done (0) in 0s
+
+----- Skipping all tests for a missing dll (see header)
+----- Expected assessement: Skipped (FIXME: or Not Run?)
+avifil32:api skipped dlls/avifil32/tests/api.c -
+
+browseui:autocomplete start dlls/browseui/tests/autocomplete.c -
+----- A unit test with a skipped test
+----- Expected assessement: Success, 1 skipped
+autocomplete.c:42: Tests skipped: Another time
+052c:autocomplete: 66 tests executed (0 marked as todo, 0 failures), 1 skipped.
+browseui:autocomplete:052c done (0) in 0s
+
+browseui:progressdlg start dlls/browseui/tests/progressdlg.c -
+----- A unit test with an unreported skipped test
+----- Expected assessement: 1 skipped, "Unreported skip" error
+progressdlg.c:42: Tests skipped: Another time
+0680:progressdlg: 4 tests executed (0 marked as todo, 0 failures), 0 skipped.
+browseui:progressdlg:0680 done (0) in 0s
+
+cabinet:extract start dlls/cabinet/tests/extract.c -
+----- A unit test with a missing skipped test line
+----- Expected assessement: "Missing tests skipped line" error
+0fd4:extract: 347 tests executed (0 marked as todo, 0 failures), 1 skipped.
+cabinet:extract:0fd4 done (0) in 0s
+
+cabinet:fdi start dlls/cabinet/tests/fdi.c -
+----- A unit test with a todo test
+----- Expected assessement: Success, 1 todo
+fdi.c:42: Test marked todo: Hello Wine!
+0690:fdi: 265 tests executed (1 marked as todo, 0 failures), 0 skipped.
+cabinet:fdi:0690 done (0) in 0s
+
+cmd.exe:batch start programs/cmd/tests/batch.c -
+----- A unit test with an unreported todo test
+----- Expected assessement: "Unreported todo line" error
+batch.c:42: Test marked todo: Hello Wine!
+0ddc:batch: 1701 tests executed (0 marked as todo, 0 failures), 0 skipped.
+cmd.exe:batch:0ddc done (0) in 3s
+
+comcat:comcat start dlls/comcat/tests/comcat.c -
+----- A unit test with a missing todo test line
+----- Expected assessement: "Missing todo line" error
+0948:comcat: 9 tests executed (1 marked as todo, 0 failures), 0 skipped.
+comcat:comcat:0948 done (0) in 0s
+
+comctl32:animate start dlls/comctl32/tests/animate.c -
+----- A unit test with a timeout
+----- Expected assessement: Timeout
+comctl32:animate:0b14 done (258) in 42s
+
+----- Skipping a test unit by user
+----- Expected assessement: Skipped by user
+comctl32:button skipped dlls/comctl32/tests/button.c -
+
+comctl32:comboex start dlls/comctl32/tests/comboex.c -
+----- A unit test with failed, todo and skipped tests in the main process
+----- Expected assessement: 1 failure, 1 todo, 1 skip
+advpack.c:40: Test failed: A failure in the main process
+advpack.c:41: Test marked todo: Fixme in the main process
+advpack.c:42: Tests skipped: Skipped in the main process
+This line says nothing is wrong because it's from the subprocess
+1234:comboex: 116 tests executed (0 marked as todo, 0 failures), 0 skipped.
+0c9c:comboex: 116 tests executed (1 marked as todo, 1 failure), 1 skipped.
+comctl32:comboex:0c9c done (1) in 0s
+
+comctl32:datetime start dlls/comctl32/tests/datetime.c -
+----- A unit test with a missing test failure line
+----- Expected assessement: "Missing test failed line" error
+datetime.c:1: Test failed: Something wrong
+0998:datetime: 651 tests executed (0 marked as todo, 0 failures), 0 skipped.
+comctl32:datetime:0998 done (0) in 0s
+
+comctl32:dpa start dlls/comctl32/tests/dpa.c -
+----- A unit test with a non-zero exit code
+----- Expected assessement: "Non-zero exit code" error
+This would cause things like 'make test' to consider the unit test failed.
+0b14:dpa: 16 tests executed (0 marked as todo, 0 failures), 0 skipped.
+comctl32:dpa:0998 done (1) in 0s
+
+comctl32:header start dlls/comctl32/tests/header.c -
+----- A unit test with a zero exit code despite failures
+----- Expected assessement: "Zero exit code" error
+A non-zero exit code is necessary for 'make test'.
+header.c:1: Test failed: Something wrong
+0b14:header: 16 tests executed (0 marked as todo, 1 failure), 0 skipped.
+comctl32:header:0998 done (0) in 0s
+
+comctl32:imagelist start - -
+----- A unit test with no source filename
+----- Expected assessement: Success
+TestLauncher does not set the source filename field.
+0998:imagelist: 16 tests executed (0 marked as todo, 0 failure), 0 skipped.
+comctl32:imagelist:0998 done (0) in 0s
+
+comctl32:ipaddress dlls/comctl32/tests/ipaddress.c -
+----- A unit test with a missing done line
+----- Expected assessement: "Missing done line" error
+Issued upon seeing the next start line.
+0998:ipaddress: 16 tests executed (0 marked as todo, 0 failure), 0 skipped.
+
+stub comctl32:listview
+
+----- A unit test with a missing start line
+----- Expected assessement: "Missing start line" error
+0998:misc: 16 tests executed (0 marked as todo, 0 failure), 0 skipped.
+comctl32:misc:0998 done (0) in 0s
+
+stub comctl32:monthcal
+stub comctl32:mru
+stub comctl32:pager
+stub comctl32:progress
+stub comctl32:propsheet
+stub comctl32:rebar
+stub comctl32:status
+stub comctl32:subclass
+stub comctl32:syslink
+stub comctl32:tab
+stub comctl32:toolbar
+stub comctl32:tooltips
+stub comctl32:trackbar
+stub comctl32:treeview
+stub comctl32:updown
+stub comdlg32:filedlg
+stub comdlg32:finddlg
+stub comdlg32:fontdlg
+stub comdlg32:itemdlg
+stub comdlg32:printdlg
+stub credui:credui
+stub crypt32:base64
+stub crypt32:cert
+stub crypt32:chain
+stub crypt32:crl
+stub crypt32:ctl
+stub crypt32:encode
+stub crypt32:main
+stub crypt32:message
+stub crypt32:msg
+stub crypt32:object
+stub crypt32:oid
+stub crypt32:protectdata
+stub crypt32:sip
+stub crypt32:store
+stub crypt32:str
+stub cryptnet:cryptnet
+stub cryptui:cryptui
+stub d3d8:device
+stub d3d8:stateblock
+stub d3d8:visual
+stub d3d9:d3d9ex
+stub d3d9:device
+stub d3d9:stateblock
+stub d3d9:visual
+stub d3drm:d3drm
+stub d3drm:vector
+stub d3dxof:d3dxof
+stub ddrawex:ddrawex
+stub ddrawex:surface
+stub ddraw:d3d
+stub ddraw:ddraw1
+stub ddraw:ddraw2
+stub ddraw:ddraw4
+stub ddraw:ddraw7
+stub ddraw:ddrawmodes
+stub ddraw:dsurface
+stub ddraw:refcount
+stub ddraw:visual
+stub devenum:devenum
+stub dinput8:device
+stub dinput8:dinput
+stub dinput:device
+stub dinput:dinput
+stub dinput:joystick
+stub dinput:keyboard
+stub dinput:mouse
+stub dispex:marshal
+stub dmband:dmband
+stub dmcompos:dmcompos
+stub dmime:dmime
+stub dmime:performance
+stub dmloader:loader
+stub dmscript:dmscript
+stub dmstyle:dmstyle
+stub dmsynth:dmsynth
+stub dmusic:dmusic
+stub dnsapi:name
+stub dnsapi:record
+stub dplayx:dplayx
+stub dpnet:address
+stub dpnet:client
+stub dpnet:server
+stub dpvoice:voice
+stub dsound:capture
+stub dsound:ds3d
+stub dsound:ds3d8
+stub dsound:dsound
+stub dsound:dsound8
+stub dsound:duplex
+stub dsound:propset
+stub dssenh:dssenh
+stub dswave:dswave
+stub dxdiagn:container
+stub dxdiagn:provider
+stub faultrep:faultrep
+stub fusion:asmcache
+stub fusion:asmenum
+stub fusion:asmname
+stub fusion:fusion
+stub gdi32:bitmap
+stub gdi32:brush
+stub gdi32:clipping
+stub gdi32:dc
+stub gdi32:dib
+stub gdi32:font
+stub gdi32:gdiobj
+stub gdi32:generated
+stub gdi32:icm
+stub gdi32:mapping
+stub gdi32:metafile
+stub gdi32:palette
+stub gdi32:path
+stub gdi32:pen
+stub gdiplus:brush
+stub gdiplus:customlinecap
+stub gdiplus:font
+stub gdiplus:graphics
+stub gdiplus:graphicspath
+stub gdiplus:image
+stub gdiplus:matrix
+stub gdiplus:metafile
+stub gdiplus:pathiterator
+stub gdiplus:pen
+stub gdiplus:region
+stub gdiplus:stringformat
+stub hid:device
+stub hlink:browse_ctx
+stub hlink:hlink
+stub hnetcfg:policy
+stub ieframe:ie
+stub ieframe:intshcut
+stub ieframe:webbrowser
+stub imagehlp:image
+stub imagehlp:integrity
+stub imm32:imm32
+stub inetcomm:mimeintl
+stub inetcomm:mimeole
+stub inetmib1:main
+stub infosoft:infosoft
+stub iphlpapi:iphlpapi
+stub itss:protocol
+stub jscript:activex
+stub jscript:caller
+stub jscript:jscript
+stub jscript:run
+stub jsproxy:jsproxy
+stub kernel32:actctx
+stub kernel32:atom
+stub kernel32:change
+stub kernel32:codepage
+stub kernel32:comm
+stub kernel32:console
+stub kernel32:debugger
+stub kernel32:directory
+stub kernel32:drive
+stub kernel32:environ
+stub kernel32:fiber
+stub kernel32:file
+stub kernel32:format_msg
+stub kernel32:generated
+stub kernel32:heap
+stub kernel32:loader
+stub kernel32:locale
+stub kernel32:mailslot
+stub kernel32:module
+stub kernel32:path
+stub kernel32:pipe
+stub kernel32:process
+stub kernel32:profile
+stub kernel32:resource
+stub kernel32:sync
+stub kernel32:thread
+stub kernel32:time
+stub kernel32:timer
+stub kernel32:toolhelp
+stub kernel32:version
+stub kernel32:virtual
+stub kernel32:volume
+stub localspl:localmon
+stub localui:localui
+stub lz32:lzexpand_main
+stub mapi32:imalloc
+stub mapi32:prop
+stub mapi32:util
+stub mlang:mlang
+stub mmcndmgr:mmcndmgr
+stub mpr:mpr
+stub msacm32:msacm
+stub mscms:profile
+stub mscoree:debugging
+stub mscoree:metahost
+stub mscoree:mscoree
+stub msctf:inputprocessor
+stub msdmo:msdmo
+stub mshtml:activex
+stub mshtml:dom
+stub mshtml:events
+stub mshtml:htmldoc
+stub mshtml:htmllocation
+stub mshtml:misc
+stub mshtml:protocol
+stub mshtml:script
+stub mshtml:style
+stub mshtml:xmlhttprequest
+stub msi:action
+stub msi:automation
+stub msi:db
+stub msi:format
+stub msi:install
+stub msi:msi
+stub msi:package
+stub msi:patch
+stub msi:record
+stub msi:source
+stub msi:suminfo
+stub msrle32:msrle
+stub msscript.ocx:msscript
+stub mstask:task
+stub mstask:task_scheduler
+stub mstask:task_trigger
+stub msvcirt:msvcirt
+stub msvcp60:ios
+stub msvcp60:string
+stub msvcp90:ios
+stub msvcp90:misc
+stub msvcp90:string
+stub msvcr90:msvcr90
+stub msvcrt:cpp
+stub msvcrt:data
+stub msvcrt:dir
+stub msvcrt:environ
+stub msvcrt:file
+stub msvcrt:headers
+stub msvcrt:heap
+stub msvcrt:locale
+stub msvcrt:misc
+stub msvcrt:printf
+stub msvcrt:scanf
+stub msvcrt:signal
+stub msvcrt:string
+stub msvcrt:time
+stub msvfw32:drawdib
+stub msvfw32:msvfw
+stub msxml3:domdoc
+stub msxml3:httpreq
+stub msxml3:saxreader
+stub msxml3:schema
+stub msxml3:xmldoc
+stub msxml3:xmlparser
+stub msxml3:xmlview
+stub netapi32:access
+stub netapi32:apibuf
+stub netapi32:ds
+stub netapi32:wksta
+stub netcfgx:netcfgx
+stub ntdll:atom
+stub ntdll:change
+stub ntdll:directory
+stub ntdll:env
+stub ntdll:error
+stub ntdll:exception
+stub ntdll:file
+stub ntdll:generated
+stub ntdll:info
+stub ntdll:large_int
+stub ntdll:om
+stub ntdll:path
+stub ntdll:pipe
+stub ntdll:port
+stub ntdll:reg
+stub ntdll:rtl
+stub ntdll:rtlbitmap
+stub ntdll:rtlstr
+stub ntdll:string
+stub ntdll:threadpool
+stub ntdll:time
+stub ntdsapi:ntdsapi
+stub ntprint:ntprint
+stub odbccp32:misc
+stub ole32:clipboard
+stub ole32:compobj
+stub ole32:defaulthandler
+stub ole32:dragdrop
+stub ole32:errorinfo
+stub ole32:hglobalstream
+stub ole32:marshal
+stub ole32:moniker
+stub ole32:ole2
+stub ole32:ole_server
+stub ole32:propvariant
+stub ole32:stg_prop
+stub ole32:storage32
+stub ole32:usrmarshal
+stub oleacc:main
+stub oleaut32:dispatch
+stub oleaut32:olefont
+stub oleaut32:olepicture
+stub oleaut32:safearray
+stub oleaut32:tmarshal
+stub oleaut32:typelib
+stub oleaut32:usrmarshal
+stub oleaut32:varformat
+stub oleaut32:vartest
+stub oleaut32:vartype
+stub oledb32:convert
+stub oledb32:database
+stub oledb32:marshal
+stub oledlg:main
+stub opengl32:opengl
+stub pdh:pdh
+stub psapi:psapi_main
+stub qcap:qcap
+stub qcap:smartteefilter
+stub qedit:mediadet
+stub qedit:timeline
+stub qmgr:enum_files
+stub qmgr:enum_jobs
+stub qmgr:file
+stub qmgr:job
+stub qmgr:qmgr
+stub quartz:avisplitter
+stub quartz:dsoundrender
+stub quartz:filtergraph
+stub quartz:filtermapper
+stub quartz:memallocator
+stub quartz:misc
+stub quartz:mpegsplit
+stub quartz:referenceclock
+stub quartz:videorenderer
+stub rasapi32:rasapi
+stub reg.exe:reg
+stub regedit.exe:regedit
+stub riched20:editor
+stub riched20:richole
+stub riched20:txtsrv
+stub riched32:editor
+stub rpcrt4:cstub
+stub rpcrt4:generated
+stub rpcrt4:ndr_marshall
+stub rpcrt4:rpc
+stub rpcrt4:rpc_async
+stub rpcrt4:server
+stub rsaenh:rsaenh
+stub schannel:main
+stub schedsvc:rpcapi
+stub scrrun:dictionary
+stub scrrun:filesystem
+stub secur32:main
+stub secur32:negotiate
+stub secur32:ntlm
+stub secur32:schannel
+stub secur32:secur32
+stub serialui:confdlg
+stub services.exe:service
+stub setupapi:devinst
+stub setupapi:diskspace
+stub setupapi:install
+stub setupapi:misc
+stub setupapi:parser
+stub setupapi:query
+stub setupapi:setupcab
+stub setupapi:stringtable
+stub shdocvw:shdocvw
+stub shdocvw:shortcut
+stub shell32:appbar
+stub shell32:assoc
+stub shell32:autocomplete
+stub shell32:brsfolder
+stub shell32:ebrowser
+stub shell32:generated
+stub shell32:progman_dde
+stub shell32:recyclebin
+stub shell32:shelldispatch
+stub shell32:shelllink
+stub shell32:shellole
+stub shell32:shellpath
+stub shell32:shfldr_special
+stub shell32:shlexec
+stub shell32:shlfileop
+stub shell32:shlfolder
+stub shell32:shlview
+stub shell32:string
+stub shell32:systray
+stub shlwapi:assoc
+stub shlwapi:clist
+stub shlwapi:clsid
+stub shlwapi:generated
+stub shlwapi:istream
+stub shlwapi:ordinal
+stub shlwapi:path
+stub shlwapi:shreg
+stub shlwapi:string
+stub shlwapi:thread
+stub shlwapi:url
+stub snmpapi:util
+stub spoolss:spoolss
+stub sti:sti
+stub sxs:cache
+stub sxs:name
+stub t2embed:t2embed
+stub twain_32:dsm
+stub urlmon:generated
+stub urlmon:misc
+stub urlmon:protocol
+stub urlmon:sec_mgr
+stub urlmon:stream
+stub urlmon:uri
+stub urlmon:url
+stub user32:broadcast
+stub user32:class
+stub user32:clipboard
+stub user32:combo
+stub user32:cursoricon
+stub user32:dce
+stub user32:dde
+stub user32:dialog
+stub user32:edit
+stub user32:generated
+stub user32:input
+stub user32:listbox
+stub user32:menu
+stub user32:monitor
+stub user32:msg
+stub user32:resource
+stub user32:scroll
+stub user32:static
+stub user32:sysparams
+stub user32:text
+stub user32:uitools
+stub user32:win
+stub user32:winstation
+stub user32:wsprintf
+stub userenv:userenv
+stub usp10:usp10
+stub uxtheme:system
+stub vbscript:createobj
+stub vbscript:run
+stub vbscript:vbscript
+stub version:info
+stub version:install
+stub wbemdisp:wbemdisp
+stub wbemprox:query
+stub wbemprox:services
+stub wiaservc:wia
+stub windowscodecsext:transform
+stub windowscodecs:bitmap
+stub windowscodecs:bmpformat
+stub windowscodecs:converter
+stub windowscodecs:gifformat
+stub windowscodecs:icoformat
+stub windowscodecs:info
+stub windowscodecs:metadata
+stub windowscodecs:palette
+stub windowscodecs:pngformat
+stub windowscodecs:propertybag
+stub windowscodecs:stream
+stub windowscodecs:tiffformat
+stub winhttp:notification
+stub winhttp:url
+stub winhttp:winhttp
+stub wininet:ftp
+stub wininet:generated
+stub wininet:http
+stub wininet:internet
+stub wininet:url
+stub wininet:urlcache
+stub winmm:capture
+stub winmm:generated
+stub winmm:joystick
+stub winmm:mci
+stub winmm:mcicda
+stub winmm:midi
+stub winmm:mixer
+stub winmm:mmio
+stub winmm:timer
+stub winmm:wave
+stub winspool.drv:info
+stub wintrust:asn
+stub wintrust:crypt
+stub wintrust:register
+stub wintrust:softpub
+stub wlanapi:wlanapi
+stub wldap32:parse
+stub wmiutils:path
+stub wmp:oleobj
+stub ws2_32:protocol
+stub ws2_32:sock
+stub wscript.exe:run
+stub wshom.ocx:wshom
+stub wsnmp32:wsnmp
+stub wtsapi32:wtsapi
+stub xcopy.exe:xcopy
+stub xmllite:reader
+stub xmllite:writer
+
+xmllite:writer start fake/source/writer.c -
+----- A unit test with a misplaced and failed subprocess test result line
+----- Expected assessement: "Misplaced test result line" error
+See the similar scenario before but note the lack of the extra test result line
+here. Also beware of the end-of-file.
+037c:writer: 1930 tests executed (0 marked as todo, 0 failures), 0 skipped.
+xmllite:writer:037c done (0) in 11s
+writer.c:20: Test failed: A failure in the subprocess
diff --git a/testbot/src/reporttest/reporttest.c b/testbot/src/reporttest/reporttest.c
new file mode 100644
index 00000000..122f90e4
--- /dev/null
+++ b/testbot/src/reporttest/reporttest.c
@@ -0,0 +1,255 @@
+/*
+ * Copyright 2017 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdio.h>
+//#include <unistd.h>
+
+#include <windows.h>
+
+static void* extract_rcdata(LPCSTR name, LPCSTR type, DWORD* size)
+{
+ HRSRC rsrc;
+ HGLOBAL hdl;
+ LPVOID addr;
+
+ if (!(rsrc = FindResourceA(NULL, name, type)) ||
+ !(*size = SizeofResource(0, rsrc)) ||
+ !(hdl = LoadResource(0, rsrc)) ||
+ !(addr = LockResource(hdl)))
+ return NULL;
+ return addr;
+}
+
+static void usage(void)
+{
+ fprintf(stderr,
+ "Usage: reporttest [-c COMMITID] [-t TAG] [--help]\n"
+ "\n"
+ "Generates a WineTest-style report containing test cases for tools that\n"
+ "parse and verify them such as the TestBot and test.winehq.org scripts.\n"
+ "\n"
+ " -C COMMITID Reports the results for this Git commit id.\n"
+ " -t TAG Reports the results for this tag.\n"
+ " --help Print this message and exit.\n"
+ "Other WineTest options are either ignored or not supported.\n"
+ );
+}
+
+int main(int argc, char** argv)
+{
+ char *commitid = NULL, *email = NULL, *logname = NULL, *tag = NULL;
+ int i;
+ FILE *logfile;
+ char *report, *eol;
+ char line[1024];
+ DWORD l, size;
+
+ for (i = 1; i < argc && argv[i]; i++)
+ {
+ if (strcmp(argv[i], "--help") == 0)
+ {
+ usage();
+ return 0;
+ }
+ else if (!strcmp(argv[i], "--version"))
+ {
+ printf("unknown\n");
+ return 0;
+ }
+ else if (argv[i][0] != '-' && argv[i][0] != '/')
+ {
+ fprintf(stderr, "error: Outputting the lines of a specific test (%s) is not supported.\n", argv[i]);
+ /* This would require adjusting the report template to use the real
+ * process pid. Plus some tests imply mixing the output of unit
+ * tests which would not make sense.
+ */
+ return 2;
+ }
+ else if (strlen(argv[i]) > 2)
+ {
+ fprintf(stderr, "error: Unknown option '%s'\n", argv[i]);
+ return 2;
+ }
+ else switch (argv[i][1])
+ {
+ case 'c':
+ case 'e':
+ case 'n':
+ case 'p':
+ case 'q':
+ case 's':
+ /* Ignore unsupported options */
+ break;
+ case 'd':
+ case 'i':
+ case 'S':
+ case 'u':
+ /* Ignore unsupported options */
+ if (!argv[++i])
+ {
+ usage();
+ return 2;
+ }
+ break;
+ case 'C':
+ if (commitid)
+ {
+ fprintf(stderr, "error: Only one commit id can be specified (was %s)\n", commitid);
+ return 2;
+ }
+ if (!(commitid = argv[++i]))
+ {
+ fprintf(stderr, "error: Missing commit id value\n");
+ usage();
+ return 2;
+ }
+ break;
+ case 'm':
+ if (email)
+ {
+ fprintf(stderr, "error: Only one email can be specified (was %s)\n", email);
+ return 2;
+ }
+ if (!(email = argv[++i]))
+ {
+ fprintf(stderr, "error: Missing email value\n");
+ usage();
+ return 2;
+ }
+ break;
+ case 'o':
+ if (logname)
+ {
+ fprintf(stderr, "error: Only one report file name can be specified (was %s)\n", logname);
+ return 2;
+ }
+ if (!(logname = argv[++i]))
+ {
+ usage();
+ return 2;
+ }
+ break;
+ case 't':
+ if (tag)
+ {
+ fprintf(stderr, "error: Only one tag can be specified (was %s)\n", tag);
+ return 2;
+ }
+ if (!(tag = argv[++i]))
+ {
+ fprintf(stderr, "error: Missing tag value\n");
+ usage();
+ return 2;
+ }
+ break;
+ case 'x':
+ /* Nothing to do */
+ return 0;
+ case 'h':
+ case '?':
+ usage();
+ return 0;
+ default:
+ fprintf(stderr, "error: Unknown option: %s\n", argv[i]);
+ usage();
+ return 2;
+ }
+ }
+
+ report = extract_rcdata("TESTREPORT", "TESTRES", &size);
+ if (!report)
+ {
+ fprintf(stderr, "error: Could not extract the test report (%lu)\n", GetLastError());
+ return 1;
+ }
+
+ if (logname)
+ {
+ logfile = fopen(logname, "w");
+ if (!logfile)
+ {
+ fprintf(stderr, "error: Could not open '%s' for writing the test: %s\n", logname, strerror(errno));
+ return 1;
+ }
+ }
+ else
+ logfile = stdout;
+
+ l = 0;
+ while (size)
+ {
+ /* The report is not '\0' terminated and may not have a trailing '\n' */
+ char last = '\0';
+ eol = report;
+ while (size && last != '\n')
+ {
+ last = *eol;
+ eol++;
+ size--;
+ }
+ l++;
+ if (eol-report+1 > sizeof(line))
+ {
+ fprintf(stderr, "error: line %lu is too long!\n", l);
+ return 1;
+ }
+ memcpy(line, report, eol-report);
+ line[eol-report] = '\0';
+ report = eol;
+
+ /* Empty lines are only there to make the report more editable */
+ if (*line == '\n') continue;
+
+ if (commitid && strncmp(line, "Tests from build ", 17) == 0)
+ {
+ fprintf(logfile, "Tests from build %s\n", commitid);
+ }
+ else if (email && strncmp(line, " Submitter=", 14) == 0)
+ {
+ fprintf(logfile, " Submitter=%s\n", email);
+ }
+ else if (tag && strncmp(line, "Tag: ", 5) == 0)
+ {
+ fprintf(logfile, "Tag: %s\n", tag);
+ }
+ else if (strncmp(line, "stub ", 5) == 0)
+ {
+ char* unit = strchr(line, ':');
+ if (!unit)
+ {
+ fprintf(stderr, "error: The line below does not have a unit!\n");
+ fputs(line, stdout);
+ return 1;
+ }
+ unit++;
+ line[strlen(line)-1] = '\0';
+ fprintf(logfile, "%s start fake/source/%s.c -\n", line+5, unit);
+ fprintf(logfile, "----- A standard successful unit test\n");
+ fprintf(logfile, "----- Expected assessement: Success\n");
+ fprintf(logfile, "1234:%s: 2 tests executed (0 marked as todo, 0 failures), 0 skipped.\n", unit);
+ fprintf(logfile, "%s:1234 done (0) in 0s\n", line+5);
+ }
+ else
+ {
+ fputs(line, logfile);
+ }
+ }
+ if (logfile != stdout)
+ fclose(logfile);
+ return 0;
+}
diff --git a/testbot/src/reporttest/reporttest.rc b/testbot/src/reporttest/reporttest.rc
new file mode 100644
index 00000000..7dd0fc8f
--- /dev/null
+++ b/testbot/src/reporttest/reporttest.rc
@@ -0,0 +1 @@
+TESTREPORT TESTRES "report.template"
--
2.11.0
More information about the wine-patches
mailing list