Page MenuHomePhabricator

[SPIKE][Infra] Re-start Wikibase test coverage reporting
Closed, ResolvedPublic

Description

Currently (2024-12-19), the Wikibase extension does not appear on https://doc.wikimedia.org/cover-extensions/. Clicking https://doc.wikimedia.org/cover-extensions/Wikibase/ leads to a 404 HTTP error, as the folder containing coverage test results was removed due to the false positives described below in the original report.

Acceptance Criteria:

Notes:

-In the following comments and patches, a solution was discussed to re-enable the coverage reporting for Wikibase. However, this seems to have not been operational and was reverted in 1017888. The complexities behind this are not mentioned.

Original Report:

Following on from T287913: Enable extension-coverage on most WMF deployed and all MW bundled extensions

Wikibase shows on https://doc.wikimedia.org/cover-extensions/ at 19% coverage. But if you click in to https://doc.wikimedia.org/cover-extensions/Wikibase/ you get Empty directory!

Seems this might be worth fixing

Open Questions

  • Should we run coverage reporting per patch, as is done in most extensions? Or will it be more performant to enable coverage reporting on a periodic (daily/weekly) basis, if possible?

Timebox: 4 days

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

I don't know why mwext-phpunit-coverage is a shell script instead of being part of quibble. Maybe @hashar can explain why it was done that way. I couldn't find an explanation in T195918.

I think core's ExtensionsTestSuite should create one suite per extension, under a top-level extensions suite. Then CI could just run that suite, instead of trying to guess the path.

Alternatively, you can just specify extensions/Wikibase as the path. It seems to work.

T288396#8979619 is a very nice dig :)

If you omit the $ext/tests/phpunit argument, it runs 36438 tests (presumably all tests from all installed extensions).

Actually it's unclear to me how CI can ever run only the tests from a specific extension. It looks as if non-coverage test jobs will always run tests from extension dependencies.

When a patch is triggered for a MediaWiki extension, Quibble invokes composer run phpunit:entrypoint -- --testsuite extensions. The suite is defined in mediawiki/core tests/phpunit/suite.xml and finds tests extensions registered via the onUnitTestsList hook.

As a result, Quibble triggers PHPUnit tests for every single extensions that are dependencies. It is a brute force approach to run the cross extensions integration tests. There are a lot of issues: we run way too many tests and given the dependencies are not bi directional, some integration tests are not run when an extension is not defined as a dependency. But I digress.

The coverage is rendered with solely for tests of the triggering extension (and thus the coverage reports lacks any tests exercised by other repositories). It is probably not a big issue.


Alternatively, you can just specify extensions/Wikibase as the path. It seems to work.

That is the root cause I guess, congratulation. tests/phpunit suffix probably rely on the convention used for most extension but clashes with Wikibase (and possibly other extensions). The path suffix comes from 2018 patch Only run that extension's tests in coverage job https://gerrit.wikimedia.org/r/c/integration/config/+/405393

The scripts can be altered:

dockerfiles/quibble-buster-php74-coverage/mwext-phpunit-coverage.sh
- "$MW_INSTALL_PATH/extensions/$EXT_NAME/tests/phpunit" &
+ "$MW_INSTALL_PATH/extensions/$EXT_NAME" &
dockerfiles/quibble-buster-php74-coverage/mwskin-phpunit-coverage.sh
- "$MW_INSTALL_PATH/extensions/$SKIN_NAME/tests/phpunit" &
+ "$MW_INSTALL_PATH/extensions/$SKIN_NAME" &

If I fix the test path, I still get "Warning: Incorrect filter configuration, code coverage will not be processed". This is probably because src/, includes/ and maintenance/ are all non-existent, and so no files are included in the coverage filter. Perhaps CI could get the list of directories to cover from some configuration file in the extension, instead of guessing.

MediaWiki core has composer run phpunit:coverage-edit which invokes includes/composer/ComposerPhpunitXmlCoverageEdit.php which looks similar to the CI script phpunit-suite-edit.py uses the same wrong assumption. Looks like it can be replaced by the MediaWiki core equivalent code. I have found T235031: phpunit:coverage-edit - Add configuration flag so it can replace phpunit-suite-edit.py.

Change 935410 had a related patch set uploaded (by Hashar; author: Tim Starling):

[integration/config@master] dockerfiles: use extension base path for coverage report

https://gerrit.wikimedia.org/r/935410

MediaWiki core has composer run phpunit:coverage-edit which invokes includes/composer/ComposerPhpunitXmlCoverageEdit.php which looks similar to the CI script phpunit-suite-edit.py uses the same wrong assumption. Looks like it can be replaced by the MediaWiki core equivalent code. I have found T235031: phpunit:coverage-edit - Add configuration flag so it can replace phpunit-suite-edit.py.

It's all very unsatisfying. I don't want to touch it because I don't like any part of it. I'd end up patching MediaWiki, PHPUnit, Quibble and integration/config/dockerfiles. A month later, my PHPUnit PRs would be rejected and we'd be back to square one. Maybe you can slip something like if args.cover_extension == 'Wikibase': into phpunit-suite-edit.py and I can pretend not to see it.

Change 935410 merged by jenkins-bot:

[integration/config@master] dockerfiles: use extension base path for coverage report

https://gerrit.wikimedia.org/r/935410

Change 936768 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Add experimental coverage job for Wikibase

https://gerrit.wikimedia.org/r/936768

Change 936768 merged by jenkins-bot:

[integration/config@master] Add experimental coverage job for Wikibase

https://gerrit.wikimedia.org/r/936768

Change 936770 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/Wikibase@master] (DO NOT SUBMIT) test coverage

https://gerrit.wikimedia.org/r/936770

I gave it a try with a new job mwext-phpunit-coverage-docker which has the new image version.

The new job does run Phpunit with just the extension:

php -d extension=pcov.so -d pcov.enabled=1 -d pcov.directory=/workspace/src/extensions/Wikibase \
  -d 'pcov.exclude=@(tests|vendor)@'
   --coverage-clover /workspace/log/clover.xml
   --coverage-html /workspace/cover
   --log-junit /workspace/log/junit.xml
      /workspace/src/extensions/Wikibase

I have send a dummy change https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Wikibase/+/936770 which removes repo/tests/phpunit/includes/ArrayValueCollectorTest.php and it fails a test https://integration.wikimedia.org/ci/job/mwext-phpunit-coverage-docker/4/console#console-section-11

00:07:57.819 1) Wikibase\Repo\Tests\Api\PermissionsTest::testCreateItem with data set "normal permissions, no error" (null, null)
00:07:57.819 API did not return expected error code. Got error message ApiUsageException: failed-save: The save has failed. in /workspace/src/includes/api/ApiBase.php:1543

Which looks unrelated. If I retry with a change which does not alter anything, the same issue occurs so something is off.

Change 936770 abandoned by Hashar:

[mediawiki/extensions/Wikibase@master] (DO NOT SUBMIT) test coverage

Reason:

https://gerrit.wikimedia.org/r/936770

Change 960553 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] jjb: rm Docker image override for mwext-phpunit-coverage-docker

https://gerrit.wikimedia.org/r/960553

Change 960553 merged by jenkins-bot:

[integration/config@master] jjb: rm Docker image override for mwext-phpunit-coverage-docker

https://gerrit.wikimedia.org/r/960553

ArthurTaylor renamed this task from Re-start Wikibase test coverage reporting to [REPO][CLIENT][SW] Re-start Wikibase test coverage reporting.Apr 2 2024, 2:34 PM
ArthurTaylor edited projects, added wmde-wikidata-tech; removed [DEPRECATED] wdwb-tech.
ArthurTaylor moved this task from Incoming to [DOT] By Project on the wmde-wikidata-tech board.

Change #1017888 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[integration/config@master] Revert "layout.yaml: Add extension-coverage to Wikibase extension"

https://gerrit.wikimedia.org/r/1017888

Change #1017888 merged by jenkins-bot:

[integration/config@master] Revert "layout.yaml: Add extension-coverage to Wikibase extension"

https://gerrit.wikimedia.org/r/1017888

ItamarWMDE subscribed.

Prio Notes:

Impact AreaAffected
production / end usersn
monitoringy
development effortsy
onboarding effortsn
additional stakeholdersn
ItamarWMDE renamed this task from [REPO][CLIENT][SW] Re-start Wikibase test coverage reporting to [SPIKE][Infra] Re-start Wikibase test coverage reporting.Dec 18 2024, 10:57 AM
ItamarWMDE updated the task description. (Show Details)

Change #1120532 had a related patch set uploaded (by Arthur taylor; author: Arthur taylor):

[integration/config@master] Fix `suite.xml` coverage configuration generation for Wikibase

https://gerrit.wikimedia.org/r/1120532

Had another look at this. By now, the Wikibase suite seems to pass when run under coverage, but the suite.xml changes still need to be made. Hopefully my patch is a bit more elegant than T288396#8989408, but I agree it's not the prettiest. This will need a bump of the dockerfiles / quibble images, and after that it should be fine to revert^^2 the layout.yaml changes again and the coverage should be restored. In my local testing, the quibble job runs successfully with the changed python script.

Change #1121372 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] jjb: update coverage jobs for Wikibase

https://gerrit.wikimedia.org/r/1121372

Change #1120532 merged by jenkins-bot:

[integration/config@master] Fix `suite.xml` coverage configuration generation for Wikibase

https://gerrit.wikimedia.org/r/1120532

Change #1121372 merged by jenkins-bot:

[integration/config@master] jjb: update coverage jobs for Wikibase

https://gerrit.wikimedia.org/r/1121372

Change #1121375 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] zuul: add back coverage job to Wikibase

https://gerrit.wikimedia.org/r/1121375

Change #1121375 merged by jenkins-bot:

[integration/config@master] zuul: add back coverage job to Wikibase

https://gerrit.wikimedia.org/r/1121375

The mwext-phpunit-coverage-patch job then fails with:

+ exec phpunit-patch-coverage check --command 'php -d extension=pcov.so -d pcov.enabled=1 -d pcov.directory=/workspace/src/extensions/Wikibase -d pcov.exclude='\''@(tests|vendor)@'\'' -d pcov.initial.files=3000 "$MW_INSTALL_PATH"/tests/phpunit/phpunit.php' --html /workspace/log/coverage.html
Finding coverage difference in 498b1dcb7287c90063ab7996a0beeadc98b3ba95

In Finder.php line 592:
                                                 
  The "tests/phpunit" directory does not exist.  
                                                 

check [--sha1 [SHA1]] [--test-dir TEST-DIR] [--html [HTML]] [--command COMMAND]

That is the job diffing the coverage of the parent and current patch.

After merge, the job mwext-phpunit-coverage-publish completed and a coverage report as been published at https://doc.wikimedia.org/cover-extensions/Wikibase/

There were 72 warnings due to invalid @covers annotations, I have pasted them in P73497:

1There were 72 warnings:
2
31) Tests\Wikibase\DataModel\ReferenceSerializationRoundtripTest::testSnakSerializationRoundtrips with data set #0 (Wikibase\DataModel\Reference Object (...))
4"@covers Wikibase\DataModel\DeserializerFactory" is invalid
5
62) Tests\Wikibase\DataModel\ReferenceSerializationRoundtripTest::testSnakSerializationRoundtrips with data set #1 (Wikibase\DataModel\Reference Object (...))
7"@covers Wikibase\DataModel\DeserializerFactory" is invalid
8
93) Tests\Wikibase\DataModel\ReferenceSerializationRoundtripTest::testSnakSerializationRoundtrips with data set #2 (Wikibase\DataModel\Reference Object (...))
10"@covers Wikibase\DataModel\DeserializerFactory" is invalid
11
124) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewEntityDeserializer
13"@covers Wikibase\DataModel\DeserializerFactory" is invalid
14
155) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewItemDeserializer
16"@covers Wikibase\DataModel\DeserializerFactory" is invalid
17
186) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewPropertyDeserializer
19"@covers Wikibase\DataModel\DeserializerFactory" is invalid
20
217) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewSiteLinkDeserializer
22"@covers Wikibase\DataModel\DeserializerFactory" is invalid
23
248) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewStatementDeserializer
25"@covers Wikibase\DataModel\DeserializerFactory" is invalid
26
279) Tests\Wikibase\DataModel\DeserializerFactoryTest::testStatementListDeserializer
28"@covers Wikibase\DataModel\DeserializerFactory" is invalid
29
3010) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewReferencesDeserializer
31"@covers Wikibase\DataModel\DeserializerFactory" is invalid
32
3311) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewReferenceDeserializer
34"@covers Wikibase\DataModel\DeserializerFactory" is invalid
35
3612) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewSnakDeserializer
37"@covers Wikibase\DataModel\DeserializerFactory" is invalid
38
3913) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewEntityIdDeserializer
40"@covers Wikibase\DataModel\DeserializerFactory" is invalid
41
4214) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewTermDeserializer
43"@covers Wikibase\DataModel\DeserializerFactory" is invalid
44
4515) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewTermListDeserializer
46"@covers Wikibase\DataModel\DeserializerFactory" is invalid
47
4816) Tests\Wikibase\DataModel\DeserializerFactoryTest::testNewAliasGroupListDeserializer
49"@covers Wikibase\DataModel\DeserializerFactory" is invalid
50
5117) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewEntitySerializer
52"@covers Wikibase\DataModel\SerializerFactory" is invalid
53
5418) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewItemSerializer
55"@covers Wikibase\DataModel\SerializerFactory" is invalid
56
5719) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewPropertySerializer
58"@covers Wikibase\DataModel\SerializerFactory" is invalid
59
6020) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewSiteLinkSerializer
61"@covers Wikibase\DataModel\SerializerFactory" is invalid
62
6321) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewStatementSerializer
64"@covers Wikibase\DataModel\SerializerFactory" is invalid
65
6622) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewStatementListSerializer
67"@covers Wikibase\DataModel\SerializerFactory" is invalid
68
6923) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewReferencesSerializer
70"@covers Wikibase\DataModel\SerializerFactory" is invalid
71
7224) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewReferenceSerializer
73"@covers Wikibase\DataModel\SerializerFactory" is invalid
74
7525) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewSnakListSerializer
76"@covers Wikibase\DataModel\SerializerFactory" is invalid
77
7826) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewSnakSerializer
79"@covers Wikibase\DataModel\SerializerFactory" is invalid
80
8127) Tests\Wikibase\DataModel\SerializerFactoryTest::testFactoryCreateWithUnexpectedValue
82"@covers Wikibase\DataModel\SerializerFactory" is invalid
83
8428) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewTypedSnakSerializer
85"@covers Wikibase\DataModel\SerializerFactory" is invalid
86
8729) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewTermSerializer
88"@covers Wikibase\DataModel\SerializerFactory" is invalid
89
9030) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewTermListSerializer
91"@covers Wikibase\DataModel\SerializerFactory" is invalid
92
9331) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewAliasGroupSerializer
94"@covers Wikibase\DataModel\SerializerFactory" is invalid
95
9632) Tests\Wikibase\DataModel\SerializerFactoryTest::testNewAliasGroupListSerializer
97"@covers Wikibase\DataModel\SerializerFactory" is invalid
98
9933) Tests\Wikibase\DataModel\SerializerFactoryTest::testSerializeSnaksWithoutHashConstant
100"@covers Wikibase\DataModel\SerializerFactory" is invalid
101
10234) Wikibase\Lib\Tests\Formatters\DispatchingEntityIdHtmlLinkFormatterTest::testGivenFormatterMissing_UseDefaultFormatter
103"@covers \Wikibase\Lib\DispatchingEntityIdHtmlLinkFormatter" is invalid
104
10535) Wikibase\Lib\Tests\Formatters\DispatchingEntityIdHtmlLinkFormatterTest::testGivenFormatterExists_FormatterUsed
106"@covers \Wikibase\Lib\DispatchingEntityIdHtmlLinkFormatter" is invalid
107
10836) Wikibase\Lib\Tests\Formatters\DispatchingEntityIdHtmlLinkFormatterTest::testGivenInvalidFormatter
109"@covers \Wikibase\Lib\DispatchingEntityIdHtmlLinkFormatter" is invalid
110
11137) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::testGetDataTypeFactory with data set #0 (Wikibase\Lib\Modules\DataTypesModule Object (...), array('foo', Closure Object (...)))
112"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
113
11438) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::testGetDataTypeFactory with data set #1 (Wikibase\Lib\Modules\DataTypesModule Object (...), array('bar123', Wikibase\Lib\DataTypeFactory Object (...)))
115"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
116
11739) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::testGetConfigVarName with data set #0 (Wikibase\Lib\Modules\DataTypesModule Object (...), array('foo', Closure Object (...)))
118"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
119
12040) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::testGetConfigVarName with data set #1 (Wikibase\Lib\Modules\DataTypesModule Object (...), array('bar123', Wikibase\Lib\DataTypeFactory Object (...)))
121"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
122
12341) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::Instantiation raises exception in case missing "datatypefactory" field with data set #0 (array('foo'), 'missing "datatypefactory" field')
124"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
125
12642) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::Instantiation raises exception in case missing "datatypesconfigvarname" field with data set #1 (array(Wikibase\Lib\DataTypeFactory Object (...)), 'missing "datatypesconfigvarname" field')
127"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
128
12943) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::Instantiation raises exception in case all fields missing with data set #2 (array(), 'all fields missing')
130"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
131
13244) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::Instantiation raises exception in case "datatypefactory" field has value of wrong type with data set #3 (array('foo', 123), '"datatypefactory" field has v...g type')
133"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
134
13545) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::Instantiation raises exception in case "datatypefactory" callback does not return a DataTypeFactory instance with data set #4 (array('foo', Closure Object (...)), '"datatypefactory" callback do...stance')
136"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
137
13846) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::testGetDefinitionSummary
139"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
140
14147) Wikibase\Lib\Tests\Modules\DataTypesModuleTest::testGetDefinitionSummary_notEqualForDifferentDataTypes
142"@covers \WikibaseRepo\Modules\DataTypesModule" is invalid
143
14448) Wikibase\Lib\Tests\Rdbms\ClientDomainDbFactoryTest::testNewClientDb
145"@covers \Wikibase\Lib\Rdbms\DomainDbFactory" is invalid
146
14749) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityExistenceCheckerTest::testExists with data set "title is null" (true, false, false)
148"@covers \Wikibase\Lib\Store\TitleBasedEntityExistenceChecker" is invalid
149
15050) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityExistenceCheckerTest::testExists with data set "title is not null and is known" (false, true, true)
151"@covers \Wikibase\Lib\Store\TitleBasedEntityExistenceChecker" is invalid
152
15351) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityExistenceCheckerTest::testExists with data set "title is not null and not known" (false, false, false)
154"@covers \Wikibase\Lib\Store\TitleBasedEntityExistenceChecker" is invalid
155
15652) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityExistenceCheckerTest::testExistsBatch
157"@covers \Wikibase\Lib\Store\TitleBasedEntityExistenceChecker" is invalid
158
15953) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityRedirectCheckerTest::testIsRedirect with data set "title not found" (Closure Object (...), false)
160"@covers \Wikibase\Lib\Store\TitleBasedEntityRedirectChecker" is invalid
161
16254) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityRedirectCheckerTest::testIsRedirect with data set "title is not local" (Closure Object (...), false)
163"@covers \Wikibase\Lib\Store\TitleBasedEntityRedirectChecker" is invalid
164
16555) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityRedirectCheckerTest::testIsRedirect with data set "local title is not a redirect" (Closure Object (...), false)
166"@covers \Wikibase\Lib\Store\TitleBasedEntityRedirectChecker" is invalid
167
16856) Wikibase\Lib\Tests\Store\TitleLookupBasedEntityRedirectCheckerTest::testIsRedirect with data set "title is a redirect" (Closure Object (...), true)
169"@covers \Wikibase\Lib\Store\TitleBasedEntityRedirectChecker" is invalid
170
17157) Wikibase\Repo\Tests\Domains\Crud\RouteHandlers\Middleware\MiddlewareHandlerTest::testConstructorErrorsForNoMiddlewares
172Trying to @cover interface "\Wikibase\Repo\Domains\Crud\RouteHandlers\Middleware\Middleware".
173
17458) Wikibase\Repo\Tests\Domains\Crud\RouteHandlers\Middleware\MiddlewareHandlerTest::testRun
175Trying to @cover interface "\Wikibase\Repo\Domains\Crud\RouteHandlers\Middleware\Middleware".
176
17759) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testGetEntityIdsSuccess
178"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
179
18060) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testGetEntityIdNormalized
181"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
182
18361) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testGetEntityIdsNotFound
184"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
185
18662) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testGetEntityIdsNormalizationNotAllowed
187"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
188
18963) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testNormalizeTitle with data set #0 ('foo_bar', 123, 1)
190"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
191
19264) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testNormalizeTitle with data set #1 ('Bar', false, 0)
193"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
194
19565) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testNotEnoughInput with data set #0 (array(), array('barfoo'), false)
196"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
197
19866) Wikibase\Repo\Tests\Api\EntityByTitleHelperTest::testNotEnoughInput with data set #1 (array('enwiki'), array(), false)
199"@covers \Wikibase\Repo\Api\ItemByTitleHelper" is invalid
200
20167) Wikibase\Repo\Tests\ChangeOp\ChangeOpResultTraversalTest::testMakeRecursiveTraversable_returnsTraversableRecrusivelyTraversingTree with data set "root node is not ChangeOpsResult" (Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...), array(Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...)))
202"@covers \Wikibase\Repo\ChangeOp\ChangeOpResultsTraverser" is invalid
203
20468) Wikibase\Repo\Tests\ChangeOp\ChangeOpResultTraversalTest::testMakeRecursiveTraversable_returnsTraversableRecrusivelyTraversingTree with data set "root node is ChangeOpsResult - child is not ChangeOpsResult" (Wikibase\Repo\ChangeOp\ChangeOpsResult Object (...), array(Wikibase\Repo\ChangeOp\ChangeOpsResult Object (...), Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...)))
205"@covers \Wikibase\Repo\ChangeOp\ChangeOpResultsTraverser" is invalid
206
20769) Wikibase\Repo\Tests\ChangeOp\ChangeOpResultTraversalTest::testMakeRecursiveTraversable_returnsTraversableRecrusivelyTraversingTree with data set "the full tree" (Wikibase\Repo\ChangeOp\ChangeOpsResult Object (...), array(Wikibase\Repo\ChangeOp\ChangeOpsResult Object (...), Wikibase\Repo\ChangeOp\ChangeOpsResult Object (...), Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...), Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...), Wikibase\Repo\ChangeOp\ChangeOpsResult Object (...), Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...), Wikibase\Repo\Tests\ChangeOp\ChangeOpResultStub Object (...)))
208"@covers \Wikibase\Repo\ChangeOp\ChangeOpResultsTraverser" is invalid
209
21070) Wikibase\Repo\Tests\ParserOutput\EntityParserOutputDataUpdaterCollectionTest::testUpdateParserOutput
211Trying to @cover interface "\Wikibase\Repo\ParserOutput\EntityParserOutputUpdater".
212
21371) Wikibase\Repo\Tests\ParserOutput\EntityParserOutputDataUpdaterCollectionTest::testGivenInvalidDataUpdater_constructorThrowsException with data set #0 (array(null))
214Trying to @cover interface "\Wikibase\Repo\ParserOutput\EntityParserOutputUpdater".
215
21672) Wikibase\Repo\Tests\ParserOutput\EntityParserOutputDataUpdaterCollectionTest::testGivenInvalidDataUpdater_constructorThrowsException with data set #1 (array('notAnObject'))
217Trying to @cover interface "\Wikibase\Repo\ParserOutput\EntityParserOutputUpdater".

Change #1122594 had a related patch set uploaded (by Arthur taylor; author: Arthur taylor):

[integration/config@master] Fix patch coverage generation for Wikibase

https://gerrit.wikimedia.org/r/1122594

Change #1122594 merged by jenkins-bot:

[integration/config@master] Fix patch coverage generation for Wikibase

https://gerrit.wikimedia.org/r/1122594

Change #1122629 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] jjb: fix patch coverage generation for Wikibase

https://gerrit.wikimedia.org/r/1122629

Change #936770 restored by Hashar:

[mediawiki/extensions/Wikibase@master] (DO NOT SUBMIT) test coverage

https://gerrit.wikimedia.org/r/936770

Change #1122629 merged by jenkins-bot:

[integration/config@master] jjb: fix patch coverage generation for Wikibase

https://gerrit.wikimedia.org/r/1122629

Change #936770 abandoned by Hashar:

[mediawiki/extensions/Wikibase@master] (DO NOT SUBMIT) test coverage

https://gerrit.wikimedia.org/r/936770

Looks like the per patch coverage report is now working for Wikibase!

excellent - thanks for the review / deploy!

Change #1180908 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] quibble-coverage: pass --test-dir as a relative path

https://gerrit.wikimedia.org/r/1180908

Change #1180908 merged by jenkins-bot:

[integration/config@master] quibble-coverage: pass --test-dir as a relative path

https://gerrit.wikimedia.org/r/1180908

Change #1182759 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] jjb: quibble-coverage: use relative test-dir

https://gerrit.wikimedia.org/r/1182759

Change #1182759 merged by jenkins-bot:

[integration/config@master] jjb: quibble-coverage: use relative test-dir

https://gerrit.wikimedia.org/r/1182759