Commit graph

4755 commits

Author SHA1 Message Date
Matthias Mullie
d6bc1b2589 Remove test code that depends on extension
And allow extensions to add their own media handlers.

I'm not too happy with the introduction of another global,
but didn't like the alternatives either:
* Add some hook to MockMediaHandlerFactory that would allow
  extensions to add their own stuff in.
* Use another hook (like ParserTestTables or ParserTestGlobals)
  and then override the service with a new instance - seemed
  too hacky
The good thing about this is that it lets us kill off a class.
I'm other to other suggestions in case I missed something.

Bug: T169258
Depends-On: I5875621c58597426ad5242bf3d07714555c439b5
Change-Id: I1c2e903fb235395a8de8e0f7bf65ce07739d2930
2017-08-13 12:04:37 -04:00
Geoffrey Mon
700e49dddd Unwatch link for pages in Special:Watchlist
When the 'watchlistunwatchlinks' preference option is enabled, this
adds a '×' link to each entry of the watchlist that unwatches the page
of that entry. When clicked, it changes into a '+' which can be used to
re-watch the page (effectively undoing the earlier unwatch).
When a page is unwatched, its entries and the entries of its associated
talk page (or vice versa) become translucent and are struck through.

Without JS, '×'/'+' link to action=(un)watch for the relevant page.

In addition, ChangesList classes have been modified to allow a prefixer
that adds a prefix to each line (used in this case to put the unwatch
link) and to add HTML data attributes to reliably determine the target
page of each entry. Unit tests have been updated accordingly.

Bug: T2424
Change-Id: I450b2901413d7e75c11de2a446829fdbb22d31e1
2017-08-12 19:36:29 -04:00
jenkins-bot
84b6d5c2e5 Merge "Add missing type to @param documentation" 2017-08-11 21:31:51 +00:00
WMDE-Fisch
6df9ed1ad6 update mediawiki-codesniffer to 0.11.0 and fix issues
- mostly auto fixes
- some too long lines fixed
- ignore amp space in one case  passing by reference

Change-Id: I6472f83bc3cbf4bd629d83050cc3319b19ec465c
2017-08-11 22:27:51 +02:00
Umherirrender
5544cef16b Add missing type to @param documentation
Change-Id: I6b2c9c7af9a281fe457099cc3a336a60a25e74aa
2017-08-11 20:37:35 +02:00
Umherirrender
ace44e2064 Use correct variable name in @param documentation
For some varargs a variable name is added with suffix ,... as seen for
many other varargs

Some @param are swapped, because there are in the wrong order

Enable Sniff MediaWiki.Commenting.FunctionComment.ParamNameNoMatch

Change-Id: I60fec6025bce824d5c67563ab7b65ad6cd628ad8
2017-08-11 19:27:19 +02:00
Umherirrender
43e8cd0579 Make phpcs pass
Reenable MediaWiki.WhiteSpace.SpaceBeforeClassBrace.NoSpaceBeforeBrace,
because the mentioned bug is fixed

Bug: T172933
Change-Id: I1593bdba2295ebed401b921f2beabed69dba7638
2017-08-11 16:22:42 +02:00
Fomafix
55ecf3e215 Add new static function LanguageCode::replaceDeprecatedCodes
Refactor the deprecatedLanguageCodeMapping to a private variable.

Change-Id: I5f8e601e53de183e6268c9ef601eef8390b725cd
2017-08-10 15:21:59 -04:00
Margaret Epps
90108854ac Composer fix changes
Bug: T172933
Change-Id: I6e4688dcf08c4a98ebc71b2940772dfc20a5c139
2017-08-09 14:51:33 -04:00
jenkins-bot
3639515010 Merge "MimeAnalyzer: Add testcases for mp3 detection" 2017-08-09 16:36:23 +00:00
jenkins-bot
1d744e2899 Merge "resourceloader: Add support for modules sending preload headers" 2017-08-07 16:33:02 +00:00
Bartosz Dziewoński
8785e4a5b3 Replace remaining uses of deprecated DB_SLAVE with DB_REPLICA
Change 950cf6016c took care of the most,
but a few remain, either outside of includes/ and maintenance/
directories (which that change was limited to), or in code introduced
afterwards.

Change-Id: I9c363d0219ea7e71cde520faba39406949a36d27
2017-08-05 10:10:26 +00:00
Timo Tijhof
3d342d4deb resourceloader: Add support for modules sending preload headers
ResourceLoaderModule objects gain a new method getPreloadLinks() which
returns an array with the meta data required to build a Link rel=preload
header according to the current draft for W3C Preload.
<https://w3c.github.io/preload/>

Another implementation of this is already in use in OutputPage for
preloading the logo image.

This array is formatted by the ResourceLoaderModule::getHeaders method,
which is implemented as "final" at this time, thus restricting use to
the Link rel=preload header.

Headers are exposed and process-cached, like all other content
(scripts, styles, etc.), through ResourceLoaderModule::getModuleContent,
and aggregated by ResoureLoader::makeModuleResponse.

I had hoped for the getPreloadLinks to be stateless (not vary on $context).
Whether something should be preloaded and what, should not vary on the
skin or language. However, while that conceptually holds true, the exact
url for any given resource may still vary. Even the main use case for this
feature (T164299, preloading base modules request) require $context to pass
down skin and lang to the load.php url.

Add full test coverage and example documentation.

Bug: T164299
Change-Id: I2bfe0796ceaa0c82579c501f5b10e931f2175681
2017-08-03 03:57:00 +00:00
Max Semenik
fd6e9ef2d4 Human-readable section ID support
It adds the ability to replace the current section ID escaping
schema (.C0.DE) with a HTML5-compliant escaping schema that is
displayed as Unicode in many modern browsers.

See the linked bug for discussion of various options that were
considered before the implementation. A few remarks:
* Because Sanitizer::escapeId() is used in a bunch of places without
  escaping, I'm deprecating it without altering its behavior.
* The bug described in comments for Parser::guessLegacySectionNameFromWikiText()
  is still there in some Edge versions that display mojibake.

Bug: T152540
Change-Id: Id304010a0342efbb7ef2d56c5b8b244f2e4fb2c5
2017-08-01 20:32:20 -07:00
daniel
f284dffc21 Introduce Title::getTalkPageIfDefined.
This is part of the effort to remove the assumption that every page
can have a talk page. Before we can merge Icee208dc4 which makes
Title::getTalkPage() throw an exception of no corresponding talk
namespace is defined, all extensions that call getTalkPage() must
be changed to either check canHaveTalkPage() first, or to use
the conveniance function getTalkPageIfDefined() instead.

Bug: T165149
Bug: T172146
Change-Id: I6d2613d8f7105048022f8093186dc57f1f8173ab
2017-08-01 19:09:13 +02:00
jenkins-bot
8804850f44 Merge "Allow blacklisting certain namespaces in Special:ShortPages" 2017-08-01 14:20:30 +00:00
jdlrobson
115fe784b5 Allow blacklisting certain namespaces in Special:ShortPages
This new config variable ($wgShortPagesNamespaceBlacklist)
allows wikis to specify namespaces which should be excluded from
Special:ShortPages.

This will be used by Commons, for which NS_FILE is a content namespace
(accessible via Special:Random and Special:Nearby) but is not useful
to list on Special:ShortPages.

If the blacklist cancels out all namespace in wgContentNamespaces then
all namespaces will show up on the page.

Bug: T170687
Change-Id: I10b4849a5d7f3f8af75ccc6cfba230d03725c898
2017-08-01 00:21:12 +02:00
Stephane Bisson
e2bea6350c RCFilters: show new changes
When "live update" is off and new changes are detected,
show a link to load and prepend the changes to the list.

Also adding a line between old and new changes
when grouping by pages is off.

Bug: T163426
Change-Id: I6a111d23956bdc04caa4c71e9deede056779aafa
2017-07-31 08:50:09 -04:00
Timo Tijhof
3b9d758274 phpunit: Fix failing DeprecatedGlobalTest on HHVM at Travis CI
Follows-up 1d77070f19. On Travis CI, this test fails on HHVM:

> There was 1 failure:
> 1) DeprecatedGlobalTest::testWarning
> Failed asserting that exception of type "PHPUnit_Framework_Error" is thrown.

I've been unable to reproduce this locally, but within Travis CI
it happens on both Trusty containers and Trusty VMs, no matter the
version of HHVM. After some trial and error, I narrowed it down
to the error_reporting setting, which presumably has a different default
in the HHVM package Travis CI uses.

Change-Id: I588218103d6c72df5ad4fb6289df688b3740233e
2017-07-28 18:30:32 -07:00
Roan Kattouw
ed4210a567 Follow-up 0b3ea6e1ab: use more flexible regex for timestamp in ChangesListSpecialPageTest
Postgres uses timestamps like "2017-07-28 17:37:03" that aren't all numbers.

Bug: T75174
Change-Id: I1b65578c955ccdce1060783b06c2ca577796e68f
2017-07-28 17:36:25 -07:00
jenkins-bot
225c233192 Merge "rdbms: Complete coverage for Database::selectSQLText()" 2017-07-28 21:02:54 +00:00
jenkins-bot
c1c91ac590 Merge "resourceloader: Fix @covers for CSSMin tests" 2017-07-28 14:08:43 +00:00
Timo Tijhof
da6235ce3a resourceloader: Fix @covers for CSSMin tests
Change-Id: Idb451d244fbdfbb218a56c2953298b7fe29ed3d4
2017-07-27 21:40:21 -07:00
Timo Tijhof
9491b74d00 rdbms: Complete coverage for Database::selectSQLText()
Only missing cases where 'USE INDEX' and 'IGNORE INDEX'.
The test doesn't do much since the underlying methods are no-ops
by default, but at least it ensures there are no PHP errors from
these branches.

We can later re-use some of these test cases in tests specific
to one backend.

Change-Id: Id004a2ae41efaa7a367f964013e25d98ecc591ff
2017-07-27 21:30:07 -07:00
Timo Tijhof
4927378874 phpunit: Exclude /languages/messages from coverage report
Indexing these files takes about 5-10% of the run time when generating
code coverage reports for core. It has no coverage at the moment and
probably won't any time soon given it's just variable declarations.

At least for now, exclude it to significantly speed up generating of
coverage reports.

Change-Id: I0357e004e96d4f4b19036474c8353ddb778e31f3
2017-07-27 21:03:18 -07:00
Timo Tijhof
3f10aa34e6 resourceloader: Include lessVars in FileModule definition summary
This already worked as expected for any module that uses the new
enableModuleContentVersion model, but for the majority of file modules
this is not yet the case for performance reasons. As such, make
sure lessVars are included in our manual tracking.

Include it conditionally to avoid changing the array for other modules,
which would needlessly invalidate their cache.

Bug: T171809
Change-Id: Ib250068e0ecfc29a09ca33c23bef901ee0482bf2
2017-07-27 03:02:09 +00:00
Aaron Schulz
f4e0c720a8 rdbms: Ensure onTransactionPreCommitOrIdle() callbacks don't lead transactions
If no writes started a transaction yet, the callback would run
but not commit (by design, joining the request round). Later
writes will then pile on top of it.

The point of this method is to avoid such cases, so this edge
case has been fixed.

Change-Id: I9b44b19261d679de4aff6e44a9cfeb4f684ce02e
2017-07-26 14:28:48 -07:00
jenkins-bot
fd98d9df75 Merge "Add unit tests for ChangeTags::modifyDisplayQuery()" 2017-07-26 00:14:51 +00:00
Fomafix
6499795f86 Add tests for Sanitizer::escapeId
The tests are transfered from mediawiki.util.test.js.

Change-Id: I3fccfab3a2cdf5ad115fc426b3d45ce905e2e609
2017-07-25 22:12:54 +02:00
jenkins-bot
313dde5d06 Merge "Add WAN Cache to SiteStats::jobs" 2017-07-25 18:30:58 +00:00
Antoine Musso
29aaac5c63 Add WAN Cache to SiteStats::jobs
The method hits the jobrunner backend to find out how many jobs are
enqueued in each of the JobQueue.  It is publicly available via the
MediaWiki API request:
    /w/api.php?action=query&meta=siteinfo&siprop=statistics

That is often used by bots when querying recent changes among other and
with fast bot cause useless queries toward the jobrunner backend.

Wrap SiteStats::jobs() with a WAN cache under key SiteStats:jobscount.
Drop SiteStats::$jobs private variable that was used for in process
cache. The WAN Cache does it for us via 'pcTTL'.

That is similar to SiteStats::numberingroup().
Set TTL to one minute, which should still give fresh enough results for
public uses.

Cover that behavior with a test.

When writing tests I noticed MediaWikiTestCase generates a few jobs due
to the creation of the UTPage page:

* HTMLCacheUpdateJob to refresh backlinks (eg: history)
* RecentChangesUpdateJob which happens randomly

Pass EDIT_SUPPRESS_RC to doEditContent to prevent the first and blindly
delete entries in the recentChangesUpdate jobqueue for the second.

Change-Id: I95a272d0691d779bfee9e7a671cbab66a113dfa1
2017-07-25 18:17:34 +00:00
jenkins-bot
3dce41fd3a Merge "SpecialRecentchanges: Handle ?days= parameter more sanely" 2017-07-25 13:22:40 +00:00
jenkins-bot
07917cd2dd Merge "rdbms: Increase coverage for Database::selectSQLText()" 2017-07-25 10:20:35 +00:00
jenkins-bot
8f75b093da Merge "rdbms: Add more @covers to DatabaseSQLTest" 2017-07-25 10:20:32 +00:00
Krinkle
b4627f73ea Merge "MultiWriteBagOStuff: Fix async writes of mutable objects" 2017-07-25 02:51:29 +00:00
Timo Tijhof
f357c5194c rdbms: Increase coverage for Database::selectSQLText()
* Add case for `$tables[0] == ' '`.
* Add case for `$tables == ''`.
* Add case for 'DISTINCT' option.
* Add case for 'FOR UPDATE' option.
* Add case for 'LOCK IN SHARE MODE' option.
* Add case for 'EXPLAIN' option.

Change-Id: I4a5f4754bc30d31ec35a085f39321fd358b6aa49
2017-07-24 19:49:17 -07:00
jenkins-bot
d2d70c1724 Merge "config: Add more EtcdConfig::fetchAllFromEtcdServer tests" 2017-07-25 02:46:39 +00:00
Timo Tijhof
b70a3bb821 rdbms: Add more @covers to DatabaseSQLTest
Many of the main methods here have, over the years, been split up
into several protected/private methods.

Change-Id: I1b8489b1c61c0294288442a0a0cd28c9fa77f82e
2017-07-24 19:44:06 -07:00
jenkins-bot
9b38a467d3 Merge "config: Fix invalid EtcdConfig return value after JSON parse error" 2017-07-25 02:18:05 +00:00
Brad Jorsch
edf69e62d8 MultiWriteBagOStuff: Fix async writes of mutable objects
If someone writes an object into a BagOStuff, they typically expect that
later changes to the object will not affect the value stored.
MultiWriteBagOStuff's async write handling was violating this
expectation, which is potentially causing T168040.

Bug: T168040
Change-Id: Ie897b900befdc8998614af06f9339cd07665703e
2017-07-25 02:08:00 +00:00
Roan Kattouw
42383f8faf Add unit tests for ChangeTags::modifyDisplayQuery()
The rest of ChangeTags.php should have tests too, but this is a start.

Also fix up ChangeTags::modifyDisplayQuery() to work when strings
are passed for certain parameters, which its documentation claims
it supports but which leads to errors in practice. Normalize
these parameters to arrays.

Change-Id: I2fe61bcb716a369a14a45c2843817a6557d44f7c
2017-07-24 23:54:07 +00:00
Roan Kattouw
9db2cc13e0 SpecialRecentchanges: Handle ?days= parameter more sanely
Allow fractional values (e.g ?days=0.25). Previously, fractional values
were rounded down (truncated) to integers.

When computing the cutoff timestamp, don't round down to midnight UTC.
This caused a strange phenomenon where ?days=1 would display between
24 and 48 hours' worth of changes depending on when you used it:
if the current time was 2017-07-24 23:59 UTC, the cutoff would be
set at 2017-07-23 00:00 UTC so you would see almost 48 hours' worth,
but if you refreshed two minutes later, the cutoff would be set at
2017-07-24 00:00 UTC and you should see just over 24 hours' worth.
In addition to this strangeness, it also made fractional values
somewhat meaningless and made a feature like "show only the last 3 hours"
impossible to implement.

Bug: T162784
Change-Id: I75b71324e29a4da09939c4b00feeb4cb556f797c
2017-07-24 16:49:05 -07:00
Timo Tijhof
965d5ff5c6 config: Add more EtcdConfig::fetchAllFromEtcdServer tests
Bug: T156924
Change-Id: I88a1c97b6921b59cce93f22d473dd7cea6f4931c
2017-07-24 13:04:00 -07:00
Timo Tijhof
63a6926dfd config: Fix invalid EtcdConfig return value after JSON parse error
Follows-up 1f2daa9132, 9b459d29e0, 110a21ea18.

Bug: T156924
Change-Id: I79b7e11b32e5be46c8ebdfb5c937e38e46301c0e
2017-07-24 12:50:26 -07:00
jenkins-bot
4a5f646a7f Merge "CSSMin: Skip #default#behaviorName when detecting local files" 2017-07-24 19:49:32 +00:00
jenkins-bot
9e2133ee04 Merge "config: Add tests for EtcdConfig::fetchAllFromEtcdServer" 2017-07-23 02:21:04 +00:00
jenkins-bot
62ea31ad97 Merge "rdbms: Complete DatabaseDomain code coverage" 2017-07-23 02:16:50 +00:00
jenkins-bot
0c2d09e312 Merge "config: Complete coverage for Config class" 2017-07-23 02:07:14 +00:00
jenkins-bot
99a2b401ff Merge "phpunit: Remove skins/ from coverage index" 2017-07-23 02:07:11 +00:00
Timo Tijhof
1f2daa9132 config: Add tests for EtcdConfig::fetchAllFromEtcdServer
Follows-up 9b459d29e0, 110a21ea18.

Bug: T156924
Change-Id: Ib68c55ea3386a12e707f6d7d732da9fe727ccc2f
2017-07-23 01:42:49 +00:00