Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
February 2021
- 81 participants
- 1707 messages
[PATCH] dwrite: Fix vtable variables types.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/analyzer.c | 6 ++++--
dlls/dwrite/font.c | 6 +++---
dlls/dwrite/gdiinterop.c | 8 +++++---
dlls/dwrite/main.c | 6 +++---
4 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index 7446665674a..8d573ed530d 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -1815,7 +1815,8 @@ static HRESULT WINAPI dwritetextanalyzer2_CheckTypographicFeature(IDWriteTextAna
return hr;
}
-static const struct IDWriteTextAnalyzer2Vtbl textanalyzervtbl = {
+static const IDWriteTextAnalyzer2Vtbl textanalyzervtbl =
+{
dwritetextanalyzer_QueryInterface,
dwritetextanalyzer_AddRef,
dwritetextanalyzer_Release,
@@ -1891,7 +1892,8 @@ static ULONG WINAPI dwritenumbersubstitution_Release(IDWriteNumberSubstitution *
return ref;
}
-static const struct IDWriteNumberSubstitutionVtbl numbersubstitutionvtbl = {
+static const IDWriteNumberSubstitutionVtbl numbersubstitutionvtbl =
+{
dwritenumbersubstitution_QueryInterface,
dwritenumbersubstitution_AddRef,
dwritenumbersubstitution_Release
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 014240a1c8f..f1db6dd732b 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -4567,7 +4567,7 @@ err:
return hr;
}
-static const struct IDWriteFontFileEnumeratorVtbl systemfontfileenumeratorvtbl =
+static const IDWriteFontFileEnumeratorVtbl systemfontfileenumeratorvtbl =
{
systemfontfileenumerator_QueryInterface,
systemfontfileenumerator_AddRef,
@@ -5450,7 +5450,7 @@ static HRESULT WINAPI localfontfileloader_GetLastWriteTimeFromKey(IDWriteLocalFo
return S_OK;
}
-static const struct IDWriteLocalFontFileLoaderVtbl localfontfileloadervtbl =
+static const IDWriteLocalFontFileLoaderVtbl localfontfileloadervtbl =
{
localfontfileloader_QueryInterface,
localfontfileloader_AddRef,
@@ -5873,7 +5873,7 @@ static HRESULT WINAPI glyphrunanalysis_GetAlphaBlendParams(IDWriteGlyphRunAnalys
return S_OK;
}
-static const struct IDWriteGlyphRunAnalysisVtbl glyphrunanalysisvtbl =
+static const IDWriteGlyphRunAnalysisVtbl glyphrunanalysisvtbl =
{
glyphrunanalysis_QueryInterface,
glyphrunanalysis_AddRef,
diff --git a/dlls/dwrite/gdiinterop.c b/dlls/dwrite/gdiinterop.c
index ae421822a77..84d1f615f75 100644
--- a/dlls/dwrite/gdiinterop.c
+++ b/dlls/dwrite/gdiinterop.c
@@ -911,7 +911,8 @@ static HRESULT WINAPI gdiinterop1_GetMatchingFontsByLOGFONT(IDWriteGdiInterop1 *
return E_NOTIMPL;
}
-static const struct IDWriteGdiInterop1Vtbl gdiinteropvtbl = {
+static const IDWriteGdiInterop1Vtbl gdiinteropvtbl =
+{
gdiinterop_QueryInterface,
gdiinterop_AddRef,
gdiinterop_Release,
@@ -1022,7 +1023,7 @@ static HRESULT WINAPI memresourcestream_GetLastWriteTime(IDWriteFontFileStream *
return E_NOTIMPL;
}
-static const struct IDWriteFontFileStreamVtbl memresourcestreamvtbl =
+static const IDWriteFontFileStreamVtbl memresourcestreamvtbl =
{
memresourcestream_QueryInterface,
memresourcestream_AddRef,
@@ -1082,7 +1083,8 @@ static HRESULT WINAPI memresourceloader_CreateStreamFromKey(IDWriteFontFileLoade
return S_OK;
}
-static const struct IDWriteFontFileLoaderVtbl memresourceloadervtbl = {
+static const IDWriteFontFileLoaderVtbl memresourceloadervtbl =
+{
memresourceloader_QueryInterface,
memresourceloader_AddRef,
memresourceloader_Release,
diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c
index 0cc0edd1ffc..f550c204b6d 100644
--- a/dlls/dwrite/main.c
+++ b/dlls/dwrite/main.c
@@ -204,7 +204,7 @@ static DWRITE_RENDERING_MODE1 WINAPI renderingparams3_GetRenderingMode1(IDWriteR
return params->mode;
}
-static const struct IDWriteRenderingParams3Vtbl renderingparamsvtbl =
+static const IDWriteRenderingParams3Vtbl renderingparamsvtbl =
{
renderingparams_QueryInterface,
renderingparams_AddRef,
@@ -1756,7 +1756,7 @@ static HRESULT WINAPI dwritefactory7_GetSystemFontCollection(IDWriteFactory7 *if
return E_NOTIMPL;
}
-static const struct IDWriteFactory7Vtbl dwritefactoryvtbl =
+static const IDWriteFactory7Vtbl dwritefactoryvtbl =
{
dwritefactory_QueryInterface,
dwritefactory_AddRef,
@@ -1831,7 +1831,7 @@ static ULONG WINAPI shareddwritefactory_Release(IDWriteFactory7 *iface)
return 1;
}
-static const struct IDWriteFactory7Vtbl shareddwritefactoryvtbl =
+static const IDWriteFactory7Vtbl shareddwritefactoryvtbl =
{
dwritefactory_QueryInterface,
shareddwritefactory_AddRef,
--
2.30.0
Feb. 1, 2021
[PATCH] mfreadwrite: Fix vtable variables types.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/mfreadwrite/reader.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c
index 85aec9aaedc..0e0fe1ad9cd 100644
--- a/dlls/mfreadwrite/reader.c
+++ b/dlls/mfreadwrite/reader.c
@@ -2011,7 +2011,7 @@ static HRESULT WINAPI src_reader_GetPresentationAttribute(IMFSourceReader *iface
return hr;
}
-struct IMFSourceReaderVtbl srcreader_vtbl =
+static const IMFSourceReaderVtbl srcreader_vtbl =
{
src_reader_QueryInterface,
src_reader_AddRef,
@@ -2536,7 +2536,7 @@ static HRESULT WINAPI classfactory_LockServer(IClassFactory *iface, BOOL dolock)
return S_OK;
}
-static const struct IClassFactoryVtbl classfactoryvtbl =
+static const IClassFactoryVtbl classfactoryvtbl =
{
classfactory_QueryInterface,
classfactory_AddRef,
--
2.30.0
Feb. 1, 2021
Re: [PATCH 3/5] mf: Implement NotifyTopology() for the standard quality manager.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=84821
Your paranoid android.
=== wvistau64 (64 bit report) ===
mf:
mf: Timeout
Feb. 1, 2021
Re: [PATCH V3 1/2] msxml3/tests: Test mxwriter DOMDocument output.
by Jefferson Carpenter
On 2/1/2021 10:49 AM, Jefferson Carpenter wrote:
>
> All right, how about adding
>
> [
> local,
> object,
> uuid (0636a397-8b61-4180-8d09-90492e27c4fd)
> ]
> interface IWineXMLDOMDocumentLock : IUnknown
> {
> HRESULT lock();
> HRESULT unlock();
> }
>
> (Assuming lock() and unlock() will suffice for the implementation,
> otherwise whatever collection of methods does suffice).
>
> Is that what you're suggesting?
Or did you mean something else? Sorry, sometimes you say things at such
a high level I struggle to understand what you mean. However, I can
definitely make the changes you suggested to the test, and I would be
fine with implementing the above for the implementation.
Feb. 1, 2021
Re: [PATCH 2/5] mf: Subscribe standard quality manager to clock state change events.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=84820
Your paranoid android.
=== wvistau64 (64 bit report) ===
mf:
mf: Timeout
Feb. 1, 2021
Re: [PATCH 1/5] mf: Add shutdown state for the standard quality manager.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=84819
Your paranoid android.
=== wvistau64 (64 bit report) ===
mf:
mf: Timeout
Feb. 1, 2021
[tools] testbot/TestWTBS: Allow mission-specific directives, e.g. for test=module.
by Francois Gouget
A different set of tests are run depending on whether a VM's mission
is test=test (the default) or test=module. Being unable to distinguish
these two cases prevents checking that the right set of test units is
being run in many cases.
So add support for the wine:build, wine:test, wine:module categories to
allow providing specific checks for the test=build/test/module cases
respectively.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/tests/TestWTBS | 184 +++++++++++++++++++++++++++++------------
1 file changed, 131 insertions(+), 53 deletions(-)
diff --git a/testbot/tests/TestWTBS b/testbot/tests/TestWTBS
index bc4e0d9ba..f6ca54e84 100755
--- a/testbot/tests/TestWTBS
+++ b/testbot/tests/TestWTBS
@@ -48,6 +48,7 @@ use WineTestBot::Config; # For $PatchesMailingList
use WineTestBot::Jobs;
use WineTestBot::Log;
use WineTestBot::LogUtils;
+use WineTestBot::Missions;
use WineTestBot::Patches;
use WineTestBot::VMs;
@@ -190,13 +191,15 @@ Property names are of the form 'category.name' where the category is one of:
- build for checks to perform on the build task.
- win32, win64 for checks to perform on the Windows 32- or 64-bit test results
respectively.
-- win for the checks to perform on both the 32- and 64-bit test results; that
- is equivalent to duplicating the directive for the win32 and win64
- categories.
-- wine for the checks to perform on the Wine test results.
+- win for the checks to perform on both the 32- and 64-bit test results. This
+ is equivalent to duplicating the directive for win32 and win64.
+- wine:build, wine:test, wine:module for checks to perform on test results of
+ missions with test=build, test=test and test=module respectively.
+- wine for the checks to perform on the Wine test results. This is equivalent
+ to duplicating the directive for the wine:build, wine:test and wine:module.
- tests for checks to perform on all test results, that is equivalent to
- duplicating the directive for the win32, win64 and wine categories (but not
- build since it does not run the tests).
+ duplicating the directive for the win and wine categories (but not build
+ since it does not run the tests).
A corollary is that any property which is documented as being valid for a
category can also be specified for any of its subcategories. So for instance if
@@ -208,8 +211,9 @@ sub DumpTestInfo($)
{
my ($TestInfo) = @_;
- foreach my $Category ("webpatch", "patch", "job", "tasks", "tests", "win",
- "build", "win32", "win64", "wine")
+ foreach my $Category ("webpatch", "patch", "job", "tasks", "tests", "build",
+ "win", "win32", "win64",
+ "wine", "wine:build", "wine:test", "wine:module")
{
WineTestBot::LogUtils::_WriteLogErrorsToFh(*STDERR, $TestInfo->{$Category});
WineTestBot::LogUtils::_DumpErrors($Category, $TestInfo->{$Category});
@@ -293,14 +297,15 @@ sub LoadTestInfo($)
# Split up the information to jobs, tasks, etc.
my $TestInfo = {
webpatch => {}, patch => {}, job => {},
- tasks => {}, tests => {}, win => {},
- build => {}, win32 => {}, win64 => {}, wine => {},
+ tasks => {}, tests => {}, build => {},
+ win => {}, win32 => {}, win64 => {},
+ wine => {}, "wine:build" => {}, "wine:test" => {}, "wine:module" => {},
};
my $HasTestInfo;
foreach my $Entry (keys %{$RawInfo})
{
my $Field = lcfirst($Entry);
- if ($Field =~ s/^(webpatch|patch|job|tasks|tests|win|build|win32|win64|wine)\.//)
+ if ($Field =~ s/^(webpatch|patch|job|tasks|tests|build|win|win32|win64|wine|wine:build|wine:test|wine:module)\.//)
{
my $TaskType = $1;
$TestInfo->{$TaskType}->{$Field} = $RawInfo->{$Entry};
@@ -314,7 +319,7 @@ sub LoadTestInfo($)
foreach my $RawGroupName (@{$RawInfo->{ErrGroupNames}})
{
my $GroupName = lcfirst($RawGroupName);
- if ($GroupName =~ s/^(tasks|build|tests|win|win32|win64|wine)\.(report|log|testbot)\.//)
+ if ($GroupName =~ s/^(tasks|tests|build|win|win32|win64|wine|wine:build|wine:test|wine:module)\.(report|log|testbot)\.//)
{
my $ErrInfo = ($TestInfo->{$1}->{"$2.errors"} ||= {});
push @{$ErrInfo->{ErrGroupNames}}, $GroupName;
@@ -338,11 +343,16 @@ sub LoadTestInfo($)
SetDefault($TestInfo, "tasks", "Status", "completed");
SetDefault($TestInfo, "tasks", "HasTask", 1);
}
+ if (defined $TestInfo->{"wine:build"}->{TestUnits})
+ {
+ fail("wine:build.TestUnits should not be set");
+ }
# Then propagate the defaults
foreach my $Pair (["tasks", ["build", "tests"]],
["tests", ["win", "wine"]],
- ["win", ["win32", "win64"]])
+ ["win", ["win32", "win64"]],
+ ["wine", ["wine:test", "wine:module"]])
{
my ($Src, $TaskTypes) = @$Pair;
foreach my $Field (keys %{$TestInfo->{$Src}})
@@ -368,41 +378,51 @@ sub LoadTestInfo($)
}
}
}
+ # Reset the inherited wine:build.TestUnits since it makes no sense
+ delete $TestInfo->{"wine:build"}->{TestUnits};
# Automatically check the Task: lines in simple cases
- # Make sure no test is run for build tasks
- my $GrepV = ($TestInfo->{build}->{"report.GrepV"} ||= []);
- push @$GrepV, '.';
- $GrepV = ($TestInfo->{build}->{"log.GrepV"} ||= []);
- push @$GrepV, '^Task: tests$';
- if (($TestInfo->{build}->{Status} || "") =~ /^bad(?:build|patch)$/ or
- $TestInfo->{build}->{HasTimeout})
- {
- push @$GrepV, '^Task: ok$';
- }
- else
+ foreach my $Build ("build", "wine:build")
{
- my $Grep = ($TestInfo->{build}->{"log.Grep"} ||= []);
- push @$Grep, '^Task: ok$';
+ # Make sure no test is run for build tasks
+ my $GrepV = ($TestInfo->{$Build}->{"report.GrepV"} ||= []);
+ push @$GrepV, '.';
+ $GrepV = ($TestInfo->{$Build}->{"log.GrepV"} ||= []);
+ push @$GrepV, '^Task: tests$';
+
+ if (($TestInfo->{$Build}->{Status} || "") =~ /^bad(?:build|patch)$/ or
+ $TestInfo->{$Build}->{HasTimeout})
+ {
+ push @$GrepV, '^Task: ok$';
+ }
+ else
+ {
+ my $Grep = ($TestInfo->{$Build}->{"log.Grep"} ||= []);
+ push @$Grep, '^Task: ok$';
+ }
}
- # Note: Depending on where the timeout occurs, the wine task log may or
- # may not have a 'Task: ok' line.
- if (($TestInfo->{wine}->{Status} || "") eq "completed" and
- !$TestInfo->{wine}->{HasTimeout})
+ foreach my $Test ("test", "module")
{
- my $Grep = ($TestInfo->{wine}->{"log.Grep"} ||= []);
- if (CheckValue($TestInfo->{wine}->{TestUnits}))
+ # Note: Depending on where the timeout occurs, the wine task log may or
+ # may not have a 'Task: ok' line.
+ if (($TestInfo->{"wine:$Test"}->{Status} || "") eq "completed" and
+ !$TestInfo->{"wine:$Test"}->{HasTimeout})
{
- push @$Grep, '^Task: tests$';
+ my $Grep = ($TestInfo->{"wine:$Test"}->{"log.Grep"} ||= []);
+ if (CheckValue($TestInfo->{"wine:$Test"}->{TestUnits}))
+ {
+ push @$Grep, '^Task: tests$';
+ }
+ push @$Grep, '^Task: ok$';
}
- push @$Grep, '^Task: ok$';
}
# Validate and fix the Grep* fields
foreach my $GrepType ("Grep", "GrepV")
{
- foreach my $TaskType ("tasks", "tests", "build", "win", "win32", "win64", "wine")
+ foreach my $TaskType ("tasks", "tests", "build", "win", "win32", "win64",
+ "wine", "wine:build", "wine:test", "wine:module")
{
foreach my $LogType ("report", "log", "testbot")
{
@@ -426,15 +446,19 @@ sub LoadTestInfo($)
CheckValue($TestInfo->{job}->{Status}) and
!SkipCheck($TestInfo->{win32}->{TestFailures}) and
!SkipCheck($TestInfo->{win64}->{TestFailures}) and
- !SkipCheck($TestInfo->{wine}->{TestFailures}))
+ !SkipCheck($TestInfo->{"wine:test"}->{TestFailures}) and
+ !SkipCheck($TestInfo->{"wine:module"}->{TestFailures}))
{
my $Status = ($TestInfo->{job}->{Status} ne 'completed' or
$TestInfo->{win32}->{TestFailures} or
$TestInfo->{win64}->{TestFailures} or
- $TestInfo->{wine}->{TestFailures} or
+ $TestInfo->{"wine:test"}->{TestFailures} or
+ $TestInfo->{"wine:module"}->{TestFailures} or
$TestInfo->{win32}->{HasTimeout} or
$TestInfo->{win64}->{HasTimeout} or
- $TestInfo->{wine}->{HasTimeout}) ? "Failed" : "OK";
+ $TestInfo->{"wine:build"}->{HasTimeout} or
+ $TestInfo->{"wine:test"}->{HasTimeout} or
+ $TestInfo->{"wine:module"}->{HasTimeout}) ? "Failed" : "OK";
SetDefault($TestInfo, "webpatch", "Status", $Status);
}
@@ -828,9 +852,30 @@ sub CheckTask($$$$)
$TestUnits->{$TaskType}->{"*skipped*"} = 1;
}
+ # Assume the VM's Missions field has not changed since the tests were run
+ my ($ErrMessage, $Missions) = ParseMissionStatement($Task->Missions);
+ if (@$Missions != 1)
+ {
+ fail(TaskKeyStr($Task) ." has an invalid missions field: ". $Task->Missions);
+ return;
+ }
+
+ my %ReportTypes;
+ if ($TaskType =~ /^win/)
+ {
+ foreach my $Mission (@{$Missions->[0]->{Missions}})
+ {
+ my $ReportName = GetMissionBaseName($Mission) .".report";
+ my $MissionType = $TaskType;
+ $MissionType .= ":". ($Mission->{test} || "test") if ($TaskType eq "wine");
+ $ReportTypes{$ReportName} = $MissionType;
+ }
+ }
+
my $CheckTimeouts = ($Task->Status eq "completed" and
CheckValue($TaskInfo->{HasTimeout}));
+ my $ExpectedFailures;
my ($ReportCount, $TimeoutCount, $NewFailures) = (0, 0, 0);
foreach my $LogName (@{GetLogFileNames($Task->GetDir())})
{
@@ -838,15 +883,33 @@ sub CheckTask($$$$)
my $LogInfo = LoadLogErrors($LogPath);
$NewFailures += $LogInfo->{NewCount} || 0;
+ # Get the mission-specific "wine:xxx" report directives
+ my $MissionType = $ReportTypes{$LogName} || $TaskType;
+ my $MissionInfo = $TestInfo->{$MissionType};
my $LogType = "log";
if ($LogName =~ /\.report$/)
{
- $ReportCount++;
$LogType = "report";
+ $ReportCount++;
+
+ ok($ReportTypes{$LogName}, "Check that $LogName is expected");
+
if ($TaskType eq "wine")
{
my $ReportTestUnits = GetReportTestUnits($LogPath);
- map { $TestUnits->{wine}->{$_} = 1 } (keys %$ReportTestUnits);
+ map { $TestUnits->{$MissionType}->{$_} = 1 } (keys %$ReportTestUnits);
+ }
+
+ if (CheckValue($MissionInfo->{TestFailures}))
+ {
+ ok(($LogInfo->{ErrCount} || 0) <= $MissionInfo->{TestFailures},
+ "Check Failures of $LogName in task ". TaskKeyStr($Task))
+ or diag("report error count = ", ($LogInfo->{ErrCount} || 0), ", expected at most $MissionInfo->{TestFailures}");
+ $ExpectedFailures += $MissionInfo->{TestFailures};
+ }
+ else
+ {
+ $ExpectedFailures = undef;
}
}
elsif ($LogName =~ /^testbot\./)
@@ -854,24 +917,35 @@ sub CheckTask($$$$)
$LogType = "testbot";
}
- if ($TaskInfo->{"$LogType.errors"} or $CheckTimeouts)
+ if ($MissionInfo->{"$LogType.errors"} or $CheckTimeouts)
{
- my $HasTimeout = CheckLogErrors($LogInfo, $TaskInfo->{"$LogType.errors"},
+ my $HasTimeout = CheckLogErrors($LogInfo, $MissionInfo->{"$LogType.errors"},
TaskKeyStr($Task) ."/$LogName",
- $TaskInfo->{HasTimeout});
+ $MissionInfo->{HasTimeout});
$TimeoutCount++ if ($HasTimeout);
}
- GrepTaskLog($Task, $LogName, $TaskInfo, "$LogType.");
+ GrepTaskLog($Task, $LogName, $MissionInfo, "$LogType.");
}
if ($CheckTimeouts)
{
ok($TimeoutCount >= $ReportCount, "Expecting 1+ timeout per report: $TimeoutCount timeouts, $ReportCount reports");
}
- if ($Task->Status eq "completed" and CheckValue($TaskInfo->{TestFailures}))
+ if ($Task->Status eq "completed")
{
- # Scale the expected TestFailures count with the number of times the test
- # was run, i.e. $ReportCount, or take it as is if no report is available.
- is($Task->TestFailures, $TaskInfo->{TestFailures} * ($ReportCount || 1), "Check Failures of task ". TaskKeyStr($Task));
+ if (defined $ExpectedFailures)
+ {
+ is($Task->TestFailures, $ExpectedFailures, "Check Failures of task ". TaskKeyStr($Task));
+ }
+ elsif (CheckValue($TaskInfo->{TestFailures}) and !$ReportCount)
+ {
+ # Scale the expected TestFailures count with the number of times the test
+ # was run, i.e. $ReportCount, or take it as is if no report is available.
+ is($Task->TestFailures, $TaskInfo->{TestFailures}, "Check Failures of task ". TaskKeyStr($Task));
+ }
+ # else there are reports for which we cannot check the TestFailures count.
+ # In particular this can happen if the test failure count can be checked
+ # for test=test but not for test=module. Then whether TestFailures can be
+ # checked or not depends on the missions mix.
}
return $NewFailures;
}
@@ -973,7 +1047,7 @@ sub CheckJobTree($;$)
$CheckedJobs{$JobId} = 1;
my ($HasTask, $HasNewFailures);
- my $TestUnits = { wine => {} };
+ my $TestUnits = {};
my $Email = $Emails{$JobId};
my %FailedVMs;
@@ -1059,12 +1133,16 @@ sub CheckJobTree($;$)
}
next if ($TestUnits->{$Type}->{"*skipped*"});
- if (CheckValue($TypeInfo->{TestUnits}))
+ my @MissionTypes = $Type eq "wine" ? ("wine:test", "wine:module") : ($Type);
+ foreach my $MissionType (@MissionTypes)
{
- foreach my $TestUnit (split / +/, $TypeInfo->{TestUnits})
+ my $MissionInfo = $TestInfo->{$MissionType};
+ next if (!CheckValue($MissionInfo->{TestUnits}));
+
+ foreach my $TestUnit (split / +/, $MissionInfo->{TestUnits})
{
- ok($TestUnits->{$Type}->{$TestUnit}, "Check that $TestUnit was tested by $Type VMs for job $JobId")
- or diag("TestUnits=", join(" ", sort keys %{$TestUnits->{$Type}}));
+ ok($TestUnits->{$MissionType}->{$TestUnit}, "Check that $TestUnit was tested by $MissionType VMs for job $JobId")
+ or diag("TestUnits=", join(" ", sort keys %{$TestUnits->{$MissionType}}));
}
}
}
--
2.20.1
Feb. 1, 2021
[PATCH] d2d1/tests: Add return value test (Coverity).
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
Only for consistency with other tests.
dlls/d2d1/tests/d2d1.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 7c1ff9dc197..8d584605819 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -7701,7 +7701,8 @@ static void test_gdi_interop(BOOL d3d11)
todo_wine
ok(dc == NULL, "Expected NULL dc, got %p.\n", dc);
ID2D1GdiInteropRenderTarget_Release(interop);
- ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
+ hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
+ ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
ID2D1RenderTarget_Release(rt);
--
2.30.0
Feb. 1, 2021
Re: [PATCH V3 1/2] msxml3/tests: Test mxwriter DOMDocument output.
by Jefferson Carpenter
On 2/1/2021 10:17 AM, Nikolay Sivov wrote:
>
> No, I don't think you should do a full match of calls that are made. It
> would be enough to introduce some private interface for now, and reject
> external document implementations. It does not have to be a COM interface.
>
>
All right, how about adding
[
local,
object,
uuid (0636a397-8b61-4180-8d09-90492e27c4fd)
]
interface IWineXMLDOMDocumentLock : IUnknown
{
HRESULT lock();
HRESULT unlock();
}
(Assuming lock() and unlock() will suffice for the implementation,
otherwise whatever collection of methods does suffice).
Is that what you're suggesting?
I can take out the attributes too. If there's an application with
observable behavior that depends on them, I'll be able to make a bug report.
Feb. 1, 2021
[PATCH 5/5] mf/tests: Add some more tests for video processor transform.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/mf/tests/mf.c | 25 ++++++++---
include/mfidl.idl | 106 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+), 6 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 9bbf82c97e7..11eff78b645 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -3347,7 +3347,7 @@ static void test_video_processor(void)
IMFTransform *transform;
IMFMediaBuffer *buffer;
IMFMediaEvent *event;
- IUnknown *unk;
+ unsigned int value;
HRESULT hr;
GUID guid;
@@ -3362,15 +3362,28 @@ static void test_video_processor(void)
goto failed;
}
- hr = IMFTransform_QueryInterface(transform, &IID_IMFMediaEventGenerator, (void **)&unk);
- ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
-
- hr = IMFTransform_QueryInterface(transform, &IID_IMFShutdown, (void **)&unk);
- ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
+todo_wine
+ check_interface(transform, &IID_IMFVideoProcessorControl, TRUE);
+todo_wine
+ check_interface(transform, &IID_IMFRealTimeClientEx, TRUE);
+ check_interface(transform, &IID_IMFMediaEventGenerator, FALSE);
+ check_interface(transform, &IID_IMFShutdown, FALSE);
/* Transform global attributes. */
hr = IMFTransform_GetAttributes(transform, &attributes);
ok(hr == S_OK, "Failed to get attributes, hr %#x.\n", hr);
+
+ hr = IMFAttributes_GetCount(attributes, &count);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+todo_wine
+ ok(!!count, "Unexpected attribute count %u.\n", count);
+
+ value = 0;
+ hr = IMFAttributes_GetUINT32(attributes, &MF_SA_D3D11_AWARE, &value);
+todo_wine {
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(value == 1, "Unexpected attribute value %u.\n", value);
+}
hr = IMFTransform_GetAttributes(transform, &attributes2);
ok(hr == S_OK, "Failed to get attributes, hr %#x.\n", hr);
ok(attributes == attributes2, "Unexpected instance.\n");
diff --git a/include/mfidl.idl b/include/mfidl.idl
index dd5de8d0d2f..46c715a3752 100644
--- a/include/mfidl.idl
+++ b/include/mfidl.idl
@@ -1163,6 +1163,112 @@ interface IMFVideoSampleAllocatorEx : IMFVideoSampleAllocator
);
}
+typedef enum _MF_VIDEO_PROCESSOR_MIRROR
+{
+ MIRROR_NONE,
+ MIRROR_HORIZONTAL,
+ MIRROR_VERTICAL
+} MF_VIDEO_PROCESSOR_MIRROR;
+
+typedef enum _MF_VIDEO_PROCESSOR_ROTATION
+{
+ ROTATION_NONE,
+ ROTATION_NORMAL
+} MF_VIDEO_PROCESSOR_ROTATION;
+
+[
+ object,
+ uuid(a3f675d5-6119-4f7f-a100-1d8b280f0efb),
+ local,
+ pointer_default(unique)
+]
+interface IMFVideoProcessorControl : IUnknown
+{
+ HRESULT SetBorderColor(
+ [in] MFARGB *color
+ );
+
+ HRESULT SetSourceRectangle(
+ [in] RECT *rect
+ );
+
+ HRESULT SetDestinationRectangle(
+ [in] RECT *rect
+ );
+
+ HRESULT SetMirror(
+ [in] MF_VIDEO_PROCESSOR_MIRROR mirror
+ );
+
+ HRESULT SetRotation(
+ [in] MF_VIDEO_PROCESSOR_ROTATION rotation
+ );
+
+ HRESULT SetConstrictionSize(
+ [in] SIZE *size
+ );
+}
+
+[
+ object,
+ uuid(bde633d3-e1dc-4a7f-a693-bbae399c4a20),
+ local,
+ pointer_default(unique)
+]
+interface IMFVideoProcessorControl2 : IMFVideoProcessorControl
+{
+ HRESULT SetRotationOverride(
+ [in] UINT rotation
+ );
+
+ HRESULT EnableHardwareEffects(
+ [in] BOOL enabled
+ );
+
+ HRESULT GetSupportedHardwareEffects(
+ [out, retval] UINT *support
+ );
+}
+
+[
+ object,
+ uuid(2347d60b-3fb5-480c-8803-8df3adcd3ef0),
+ local
+]
+interface IMFRealTimeClient : IUnknown
+{
+ HRESULT RegisterThreads(
+ [in] DWORD task_index,
+ [in] LPCWSTR classname
+ );
+
+ HRESULT UnregisterThreads();
+
+ HRESULT SetWorkQueue(
+ [in] DWORD queue_id
+ );
+}
+
+[
+ object,
+ uuid(03910848-ab16-4611-b100-17b88ae2f248),
+]
+interface IMFRealTimeClientEx : IUnknown
+{
+ HRESULT RegisterThreadsEx(
+ [in, out] DWORD *task_index,
+ [in] LPCWSTR classname,
+ [in] LONG basepriority
+ );
+
+ HRESULT UnregisterThreads( );
+
+ HRESULT SetWorkQueueEx(
+ [in] DWORD mtqueue_id,
+ [in] LONG base_priority
+ );
+}
+
enum
{
MF_ACTIVATE_CUSTOM_MIXER_ALLOWFAIL = 0x00000001,
--
2.30.0
Feb. 1, 2021