Commit graph

67 commits

Author SHA1 Message Date
Gergő Tisza
525bfbc8df Switch to librarized version of TestingAccessWrapper
Replaces \TestingAccessWrapper (defined in core) with
\Wikimedia\TestingAccessWrapper (defined in the composer package
wikimedia/testing-access-wrapper).

See https://gerrit.wikimedia.org/r/#/q/topic:librarize-testing-access-wrapper
for downstream patches.

The core version of the class is kept around for a while to avoid
circular dependency problems.

Bug: T163434
Change-Id: I52cc257e593da3d6c3b01a909e554a950225aec8
2017-04-20 14:15:57 +00:00
Timo Tijhof
516f2700e0 AutoloadGenerator: Add support for class_alias()
Blob, Field, DatabaseBase are now auto-detected.

Change-Id: Ib8fae2ec3fbb3f5e4aca7965f81631c5f0485ea1
2017-02-22 21:22:41 +00:00
Stanislav Malyshev
85fd9d4fb4 Check that empty content is valid only on handlers that allow direct editing.
Bug: T157626
Change-Id: I843f25172b70111f8219eec9a853ac3138c6aff3
2017-02-15 15:15:41 -08:00
Thiemo Mättig
3e83a50213 Remove unused imports from test classes
Validating this should be as simple as it can be: if the tests run,
this change should be fine. :-)

Change-Id: I8e4a3dfc83fdc9b8c8d7f5bbd067e088ebd2133d
2017-01-10 11:49:58 +01:00
Thiemo Mättig
00c3f09566 Remove empty lines from PHP and JavaScript comment blocks
This is a pure documentation change. It mostly removes empty lines from
comments (and entirely empty comments), as well as adds a few missing
documentation blocks and fixes a minor mistake. I hope it's ok to have
this in one patch. I can split it, please tell me.

Change-Id: I9668338602ac77b903ab6b02ff56bd52743c37c4
2016-12-09 09:01:06 +00:00
Kunal Mehta
da68c0ae82 registration: Refactor validation logic to avoid duplication
Previously, logic to validate extension.json files was in two places:
validateRegistrationFile.php maintenance script, and the
ExtensionJsonValidationTest.php structure test. This caused duplication
as validation became more complex (e.g. usage of spdx-licenses library).

A generic ExtensionJsonValidator class now handles most of the
validation work, while the maintenance script and test case just wrap
around it for their output formats.

Change-Id: I47062a4ae19c58ee1b1f2bb4877913259bf19c8b
2016-11-30 23:04:27 -08:00
Brad Jorsch
af1dfeead5 Validate getExamplesMessages() query strings
Assert that they don't begin with 'api.php?'.

Change-Id: Idf5e8e08863a379a37a427a11936e5f9ce567396
Depends-On: I8a82eecefbb0ba327d8e8bc24ec535bcf40e6429
Depends-On: I476aad09655a2822381a2c61690b4b0ad423151e
2016-11-10 10:17:04 -05:00
Leszek Manicki
d5a12f954b Remove not used variables in ResourcesTest
Change-Id: I45f531e66545175c689b8f6a62a5c3ed62ea5a9a
2016-11-05 20:28:32 +00:00
Sam Wilson
66e215baee Remove spaces after cast operators
This fixes the outstanding mis-spaced cast operators to bring them
into line with the coding standards on mediawiki.org (and with the
more common usage within this codebase).

Bug: T149545
Change-Id: Ib7bcf95bbee83d20c05f6d621ce7b4e1fb58a347
2016-10-31 13:57:39 +00:00
Kunal Mehta
f6644c07cb registration: Improve license-name validation
Our hardcoded enum list in the extension.json schema for license-name
values was incomplete and did not cover the full SPDX license identifier
specification, which includes things like "AND" for specifying multiple
licenses.

Composer already has solid code in a library to do this validation, so
let's use it! This updates both the validateRegistrationFile.php and
ExtensionJsonValidationTest.php to use the composer/spdx-licenses
library (a new development dependency) to ensure the license-name field
is a valid SPDX identifier.

Also fix a silly typo in the validateRegistrationFile script which
prevented it from running, and use ::class so it will be easier to
detect typos like that in the future.

Bug: T146862
Change-Id: Ibb8973ed7950ae81c90558f9630f73746b2aff2c
2016-09-28 20:50:48 +00:00
Kunal Mehta
f86d2a63e4 Add structure test for ContentHandler::makeEmptyContent()
This adds a structure test that verifies all registered ContentHandlers
will return a valid content object (as determined by
Content::isValid()), when makeEmptyContent() is called. Additionally, if
the handler extends TextContentHandler, it will verify it is an instance
of TextContentHandler::getContentClass().

This is a structure test so it is run for content handlers created by
extensions as well.

Change-Id: Idd67d824f2f7cc1819b1d8b186be058e63c4513d
2016-09-10 01:55:18 -07:00
jenkins-bot
2a26e0de27 Merge "Upgrade justinrainbow/json-schema to ~3.0" 2016-08-23 21:33:56 +00:00
Florian Schmidt
0cef9623c5 Upgrade justinrainbow/json-schema to ~3.0
The release between 1.6.1 and 3.0.0 has a huge amount of code
maintenance changes, as well as internal optimization and some
"visible" changes (as well as the one mentioned in the linked
task).

However, it's a version jump over 2 major versions, which is,
by it's definition a major change ;). Nonetheless, the (for us)
important api has changed marginally: Instead of using the
JsonSchema\Uri\UriRetriever class to retrieve the schema, we now use
the $ref keyword to reference the json schema file (which also is
an internal optimization). In this way, we let the json-schema library
decide, how to resolve a ref (and the schema) instead of relying
on the UriRetriever api to be public and stable.

The versions also include various bug fixes (which, as far as I know,
doesn't apply to us).

I tested this change with various combinations of valid and invalid
extension.json schemas (version 2 as well as version 3). Given that
there were no major changes to the schema interpretation itself, and
the good test coverage of the library, there shouldn't be a high risk
because of this change.

The full list of changes can be found at:
https://github.com/justinrainbow/json-schema/compare/1.6.1...3.0.0

as well as the changelogs of the single versions:
https://github.com/justinrainbow/json-schema/releases

Bug: T141281
Depends-On: I5687286da9f7fa2bb2b84699fa43ab3c2547fe03
Change-Id: Ie37e2ebc48684783abf8d99d2f775ee6a5988da7
2016-08-23 21:22:21 +00:00
Timo Tijhof
39a00e2ea0 resourceloader: Add structure unit test to confirm messages exist
Bug: T129976
Change-Id: I5333523efe3e7b9191e871d67d9eb650002c7784
2016-08-17 20:07:43 +00:00
Florian
23c79b228c Structure test: Add autoload.php order check
If a class is added manually to the autoload.php another run of
the maintenance script will probably add unnecessary noise to
another change. The added structure test checks, if the output of
the maintenance script equals to the contents of the commited
autoload.php.

Bug: T121921
Change-Id: I3a426b92892f4c00cab33a13f6a717751120367c
2016-08-03 09:50:27 +00:00
Ori Livneh
dfd046412f resourceloader: Replace SHA1 with 32-bit FNV-1 as hash function
SHA-1 is not secure enough to be used as a cryptographic hash function, and its
implementation in JavaScript is too long and too slow for it to be a good
general-purpose hash function. And we currently throw away most of the work:
SHA-1 produces 160-bit hash values, of which we keep 48.

Although the JavaScript implementation is not exported, SHA-1 is a well-known
hash function, and I'm willing to bet that sooner or later someone will move to
make it accessible to other modules, at which point usage will start to spread.

For ResourceLoader, the qualities we're looking for in a hash function are:

* Already implemented in PHP
* Easy to implement in JavaScript
* Fast
* Collision-resistant

The requirement that hashes be cheap to compute in JavaScript narrows the field
to 32-bit hash functions, because in JavaScript bitwise operators treat their
operands as 32 bits, and arithmetic uses double-precision floats, which have a
total precision of 53 bits. It's possible to work around these limitations, but
it's a lot of extra work.

The best match I found is the 32-bit variant of FNV-1, which is available in
PHP as of version 5.4 (as 'fnv1a32'). The fnv132 JavaScript function is
around ten times faster and eight times shorter than sha1.

Change-Id: I1e4fb08d17948538d96f241b2464d594fdc14578
2016-07-05 21:14:03 +00:00
Reedy
1834ee3d8e Fix numerous class/function casing
Change-Id: I23982bfa0548c9ea3bdb432be7982f1563930715
2016-03-18 23:14:49 +00:00
Kunal Mehta
8aa43b4df9 Add a structure test to validate all extension.json files
Adds a structure test to validate that all loaded extension.json and
skin.json files validate against the schema at
docs/extension.schema.json.

Bug: T128307
Change-Id: I2fd1caaa50c288821ab6847dc29d60e6554d9df5
2016-03-14 12:54:58 -07:00
Siebrand Mazeland
5b119a0e44 Replace uses of join() by implode()
All of core uses implode() consistently now.

Change-Id: Iba50898c64c43f356d1caf8869f484e90d9ff651
2016-03-08 18:24:16 +00:00
Timo Tijhof
98911418c2 CSSMin: Remove file-existance filter in getLocalFileReferences()
Follows-up 8f5cd11d82.

The old getLocalFileReferences() method is no longer used anywhere.
Remove it and rename getAllLocalFileReferences back to it.

Change-Id: I864258aad128ba9b54464c7bc854543f2937f977
2016-03-03 00:16:13 +00:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
Per wikitech-l consensus:
 https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html

Notes:
* Disabled CallTimePassByReference due to false positives (T127163)

Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
2016-02-17 01:33:00 -08:00
Bryan Davis
db47c86bc5 Update AutoLoaderTest and ran maintenance/generateLocalAutoload.php
AutoLoaderTest didn't know about traits.

generateLocalAutoload found a  missing Trait from the autoloader and
a class map ordering issue.

Change-Id: I34bf2698ad838b6a977c9bf39f6e416330ff0e5d
2016-02-12 13:12:20 +00:00
Brad Jorsch
7d4d9016d4 Set title on context in ApiDocumentationTest
For some reason the unit testing infrastructure doesn't set one, and
that makes RequestContext warn.

Bug: T125491
Change-Id: I3e0ec0f567dd06231bca0d3d923e9d4e05ef5514
2016-02-03 12:16:54 +00:00
Anomie
f7eed53ff8 Revert "Revert "API: Add a unit test to check all modules' i18n""
This reverts commit 7076a79e86.

Change-Id: I21a606a810cecf2cf13a893dd92c15e5e026e2dc
Depends-On: Ieb790c466847dc06c9a73334ad020ab2c54b2976
Depends-On: I727458c5bf54cebd4bf684fc3f3c5ea31c1ebeeb
2016-01-21 08:09:28 +00:00
Krinkle
7076a79e86 Revert "API: Add a unit test to check all modules' i18n"
Reverting for now in the sake of productivity and restoration of
the passing unit test status of extensions' master branches.

Would recommend re-applying when the CI gate extensions are
passing and ideally some notification ahead of time to wikitech-l.

This reverts commit 0d3712dd60.

Change-Id: I9142e6161257459cd11db0ca4cdd57793cfee8fa
2015-12-22 00:10:38 +00:00
Brad Jorsch
0d3712dd60 API: Add a unit test to check all modules' i18n
It's not perfect since module i18n can vary on configuration, but it
should catch many cases of forgotten i18n.

Change-Id: Ida7e5720fe304c5168fe752b1b5485fe4cb2cb45
Depends-On: I4a0a6c47afdd62e1c9d0b29f066d2a6d1791b52d
Depends-On: I378d112a36c0981ac8d5366e3e1805ead71a85c8
Depends-On: If9e1ae5f1e360385e70bd68ec9847230bd274d9d
Depends-On: If2694de72a62e46cfdc29401c4d2d3756897c998
2015-12-19 14:18:48 +00:00
Timo Tijhof
a0809dfa5a resourceloader: Remove 'loaderScripts' option from FileModule
Not used in any of our public repositories.

Bug: T65240
Change-Id: I1e9f741c3ef0f922129ecd10039228b58565bf62
2015-10-28 02:53:16 +00:00
Amir E. Aharoni
9f5c3c1520 Make lines short to pass phpcs in ResourcesTest.php
Bug: T102614
Change-Id: I3c5df376dbfc6cbb114b59202ee9d68d4d850746
2015-09-30 15:40:39 +00:00
Ori Livneh
3f1e9fa268 resourceloader: Tidy up RL to simplify ResourceLoaderEditToolbarModule
* Remove ResourceLoaderFileModule::getLessCompiler(). There is no reason for a
  module to need to get a compiler in a different manner than
  ResourceLoader::getLessCompiler().
* Add ResourceLoaderModule::getLessVars(). This method provides a means for
  subclasses to easily inject custom LESS variables. The default implementation
  simply returns an empty array.
* Make the $context parameter for ResourceLoaderFileModule::readStyleFiles()
  non-optional (via graceful deprecation). The only callers I found were either
  already calling it with a ResourceLoader context, or had a perfectly usable
  ResourceLoaderContext in local scope.
* Make ResourceLoaderFileModule::{readStyleFile,getLessCompiler} require a
  context. These methods are protected, so I didn't bother with a deprecation.
* Call ksort() on the LESS variables array in the only place it matters -- when
  hashing its serialized representation to construct a cache lookup key. This
  relieves getLessVars() subclasses from having to remember to re-sort the
  variables array if they modify it.
* These changes make it possible to substantially simplify
  ResourceLoaderEditToolbarModule, because the only thing it needs to do now is
  implement its own getLessVars() method.
* This also allows it to be versioned like any other ResourceLoaderFileModule,
  rather than having to use enableModuleContentVersion().

Change-Id: Ic3eab71691e502bfe19bdf4eb6f82cc679a7782f
2015-09-28 12:18:12 -07:00
Elliott Eggleston
c737e48d7f Strip comments before gathering url(...) refs in CSS
Change I5a3cdeb7d53485f161ccf8133e76850cdf5b4579 introduced tests
for existence of all local files referenced in CSS.  It's currently
failing changes even when the referenced files have been commented
out.  This change ensures that commented-out files are not included
in the testing list.

Change-Id: I2ad74c13a9cf36e96a7d7451bf229856bcd18422
2015-09-19 16:10:53 -04:00
Bartosz Dziewoński
8f5cd11d82 ResourcesTest: Detect missing files in url(...) expressions
The way this is implemented is really dirty... but it found us
a few pre-existing bugs already (T111518, T111519, T111771).
I think it might be worth it.

* CSSMin: Add new method getAllLocalFileReferences() which skips the
  file_exists() check.
* ResourceLoaderModule: Make use of it to track missing files too.
* ResourcesTest: Verify that the missing files are missing.

Change-Id: I5a3cdeb7d53485f161ccf8133e76850cdf5b4579
2015-09-16 00:27:23 +00:00
Andrew Green
1dd6cfdf50 resourceloader: Pass $context to getDependencies() in PHPUnit tests
Send the ResourceLoaderContext param in calls to getDependencies() in
PHPUnit tests for ResourceLoader. (This so an RL module in CentralNotice
can emit a warning when that parameter is not provided, and still pass
tests. Sending the parameter here will also be necessary when the parameter
is made non-optional in the future.)

Change-Id: I6033e03e2d8a46b4bd7f7a04ae13fd9f387ebd10
2015-06-24 20:28:07 +00:00
umherirrender
d8821f2b0b Fixed spacing
- Removed space after casts
- Removed spaces in array index
- Added spaces around string concat
- Added space after words: switch, foreach
- else if -> elseif
- Removed parentheses around require_once, because it is not a function
- Added newline at end of file
- Removed double spaces
- Added spaces around operations
- Removed repeated newlines

Bug: T102609
Change-Id: Ib860222b24f8ad8e9062cd4dc42ec88dc63fb49e
2015-06-17 20:22:32 +00:00
Kunal Mehta
f6e5079a69 Use mediawiki/at-ease library for suppressing warnings
wfSuppressWarnings() and wfRestoreWarnings() were split out into a
separate library. All usages in core were replaced with the new
functions, and the wf* global functions are marked as deprecated.

Additionally, some uses of @ were replaced due to composer's autoloader
being loaded even earlier.

Ie1234f8c12693408de9b94bf6f84480a90bd4f8e adds the library to
mediawiki/vendor.

Bug: T100923
Change-Id: I5c35079a0a656180852be0ae6b1262d40f6534c4
2015-06-11 18:49:29 +00:00
Timo Tijhof
f37cee996e resourceloader: Replace timestamp system with version hashing
Modules now track their version via getVersionHash() instead of getModifiedTime().

== Background ==

While some resources have observeable timestamps (e.g. files stored on disk),
many other resources do not. E.g. config variables, and module definitions.

For static file modules, one can e.g. revert one of more files in a module to a
previous version and not affect the max timestamp.

Wiki modules include pages only if they exist. The user module supports common.js
and skin.js. By default neither exists. If a user has both, and then the
less-recently modified one is deleted, the max-timestamp remains unchanged.

For client-side caching, batch requests use "Math.max" on the relevant timestamps.
Again, if a module changes but another module is more recent (e.g. out-of-order
deployment, or out-of-order discovery), the change would not result in a cache miss.

More scenarios can be found in the associated Phabricator tasks.

== Version hash ==

Previously we virtually mapped these variables to a timestamp by storing the current
time alongside a hash of the value in ObjectCache. Considering the number of
possible request contexts (wikis * modules * users * skins * languages) this doesn't
work well. It results in needless cache invalidation when the first time observation
is purged due to LRU algorithms. It also has other minor bugs leading to fewer
cache hits.

All modules automatically get the benefits of version hashing with this change.
The old getDefinitionMtime() and getHashMtime() have been replaced with dummies
that return 1. These functions are often called from getModifiedTime() in subclasses.

For backward-compatibility, their respective values (definition summary and hash)
are now included in getVersionHash directly.

As examples, the following modules have been updated to use getVersionHash directly.
Other modules still work fine and can be updated later.

* ResourceLoaderFileModule
* ResourceLoaderEditToolbarModule
* ResourceLoaderStartUpModule
* ResourceLoaderWikiModule

The presence of hashes in place of timestamps increases the startup module size on
a default MediaWiki install from 4.4k to 5.8k (after gzip and minification).

== ETag ==

Since timestamps are no longer tracked, we need a different way to implement caching
for cache proxies (e.g. Varnish) and web browsers. Previously we used the
Last-Modified header (in combination with Cache-Control and Expires).

Instead of Last-Modified (and If-Modified-Since), we use ETag (and If-None-Match).

Entity tags (new in HTTP/1.1) are much stricter than Last-Modified by default.
They instruct browsers to allow usage of partial Range requests. Since our responses
are dynamically generated, we need to use the Weak version of ETag.

While this sounds bad, it's no different than Last-Modified. As reassured by
RFC 2616 <http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.3.3> the
specified behaviour behind Last-Modified follows the same "Weak" caching logic as
Entity tags. It's just that entity tags are capable of a stricter mode (whereas
Last-Modified is inherently weak).

== File cache ==

If $wgUseFileCache is enabled, ResourceLoader uses ResourceFileCache to cache
load.php responses. While the blind TTL handling (during the allowed expiry period)
is still maxage/timestamp based, tryRespondNotModified() now requires the caller to
know the expected ETag.

For this to work, the FileCache handling had to be moved from the top of
ResoureLoader::respond() to after the expected ETag is computed.

This also allows us to remove the duplicate tryRespondNotModified() handling since
that's is already handled by ResourceLoader::respond() meanwhile.

== Misc ==

* Remove redundant modifiedTime cache in ResourceLoaderFileModule.

* Change bugzilla references to Phabricator.

* Centralised inclusion of wgCacheEpoch using getDefinitionSummary. Previously this
  logic was duplicated in each place the modified timestamp was used.

* It's easy to forget calling the parent class in getDefinitionSummary().
  Previously this method only tracked 'class' by default. As such, various
  extensions hardcoded that one value instead of calling the parent and extending
  the array. To better prevent this in the future, getVersionHash() now asserts
  that the '_cacheEpoch' property made it through.

* tests: Don't use getDefinitionSummary() as an API.
  Fix ResourceLoaderWikiModuleTest to call getPages properly.

* In tests, the default timestamp used to be 1388534400000 (which is the unix time
  of 20140101000000; the unit tests' CacheEpoch). The new version hash of these
  modules is "XyCC+PSK", which is the base64 encoded prefix of the SHA1 digest of:
  '{"_class":"ResourceLoaderTestModule","_cacheEpoch":"20140101000000"}'

* Add sha1.js library for client-side hash generation.
  Compared various different implementations for code size (after minfication/gzip),
  and speed (when used for short hexidecimal strings).
  https://jsperf.com/sha1-implementations
  - CryptoJS <https://code.google.com/p/crypto-js/#SHA-1> (min+gzip: 2.5k)
    http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js
    Chrome: 45k, Firefox: 89k, Safari: 92k
  - jsSHA <https://github.com/Caligatio/jsSHA>
    https://github.com/Caligatio/jsSHA/blob/3c1d4f2e/src/sha1.js (min+gzip: 1.8k)
    Chrome: 65k, Firefox: 53k, Safari: 69k
  - phpjs-sha1 <https://github.com/kvz/phpjs> (RL min+gzip: 0.8k)
    https://github.com/kvz/phpjs/blob/1eaab15d/functions/strings/sha1.js
    Chrome: 200k, Firefox: 280k, Safari: 78k

  Modern browsers implement the HTML5 Crypto API. However, this API is asynchronous,
  only enabled when on HTTPS in Chromium, and is quite low-level. It requires boilerplate
  code to actually use with TextEncoder, ArrayBuffer and Uint32Array. Due this being
  needed in the module loader, we'd have to load the fallback regardless. Considering
  this is not used in a critical path for performance, it's not worth shipping two
  implementations for this optimisation.

May also resolve:
* T44094
* T90411
* T94810

Bug: T94074
Change-Id: Ibb292d2416839327d1807a66c78fd96dac0637d0
2015-05-19 22:28:17 +00:00
Timo Tijhof
b4bac102b6 tests: Clean up file headers
* Remove redundant @licence/@license from test suite files.
  They already have full licence headers. And @licence raises a
  warning in Doxygen.

* Fix weird messes of comments inside comments and other things.

Change-Id: I38da8ca76330f72b8dc22b0ecf1ea69d5ea55ede
2015-04-01 00:17:12 +01:00
umherirrender
ff69e22a57 Set wgAutoloadAttemptLowercase = true for some AutoLoaderTests
Avoids:
1) AutoLoaderTest::testWrongCaseClass
Failed asserting that false is true.

2) AutoLoaderTest::testWrongCaseSerializedClass
unserialize() can load classes case-insensitively.
Failed asserting that true is false.

Change-Id: Ic5c271906fb9b2e27639aa8ecfc04ffe6788d3eb
2015-03-21 09:42:23 +01:00
jenkins-bot
b15cd2ee45 Merge "Re-introduce AvailableRightsTest for User::getAllRights completeness" 2015-03-16 18:00:02 +00:00
Hoo man
cd5790efff Re-introduce AvailableRightsTest for User::getAllRights completeness
Because extensions often don't add their rights to $wgAvailableRights
or via the 'UserGetAllRights' hook, thus User::getAllRights is incomplete.

As announced on https://lists.wikimedia.org/pipermail/wikitech-l/2015-February/080953.html

This reverts commit 9a16d3a37e.

Change-Id: Ic394145d123cd74bdd5b912559f56c393f1d5919
2015-03-01 17:38:15 +00:00
umherirrender
0be527177f Skip missed dependencies in ResourcesTest::testUnsatisfiableDependencies
When a dependency is missing the test
ResourcesTest::testUnsatisfiableDependencies gives a error because of
Undefined index and stops further checks. Skip this situation because
the existing test ResourcesTest::testMissingDependencies already gives a
failure with a better explanation in this situation.

Change-Id: I71a88551df67d52ea96bf7283b5de892692f9336
2015-02-21 23:08:00 +00:00
Max Semenik
d0823139f3 More descriptive message for autoloader failures
Previously, it just failed with "No such file or directory" without explaining
what's wrong where why.

Change-Id: I776e8fe61f74fd21295da48a45c86ffed9489e23
2015-02-20 21:52:37 +00:00
Hashar
9a16d3a37e Revert "Add AvailableRightsTest for User::getAllRights completeness"
This change has not been advertised and cause random extensions
to start failing giving little clue to users.

Please have this change discussed on wikitech-l and announced
ahead of time to minimize disruptions. It brokes MathSearch at least:

https://gerrit.wikimedia.org/r/#/c/189442/

This reverts commit d333cd8f7b.

Change-Id: If9a28b1386fca946d8ba351c16134cdf7da8a148
2015-02-11 15:03:35 +00:00
Marius Hoch
d333cd8f7b Add AvailableRightsTest for User::getAllRights completeness
Because extensions often don't add their rights to $wgAvailableRights
or via the 'UserGetAllRights' hook, thus User::getAllRights is incomplete.

Change-Id: Id9ae9eff71e822ec5c038c1c1f990ac36f05cea8
2015-02-10 13:12:11 +01:00
umherirrender
675cc960a8 Use mergeMwGlobalArrayValue in AutoLoaderTest::setUp
Change-Id: Ieb7835855a28d1602ac357b51197cb66d9200209
2014-10-15 18:16:48 +02:00
umherirrender
b0cfcd0fcb Add missing @return and @param to doc blocks
Change-Id: I9d99ba1968ed8f97624d957754c8847dfe1b41da
2014-08-27 21:57:45 +02:00
Kunal Mehta
523ba0cf8b ResourcesTest: Add variable type annotations
Change-Id: I07ec986830dcec739b0553395b9a220b44bba77d
2014-08-22 00:32:09 +02:00
Bartosz Dziewoński
3971d0646c resourceloader: Allow skins to provide additional styles for any module
The newly introduced $wgResourceModuleSkinStyles global enables skins to
provide additional stylesheets to existing ResourceLoader module.

This both makes it easier (or at all possible) to override default
styles and lowers the style footprint by making it possible not to
load styles unused on most pages.

----

Example:

Use the file 'foo-styles.css' for the 'mediawiki.foo' module when using
the MySkin skin:

  $wgResourceModuleSkinStyles['myskin'] = array(
    'mediawiki.foo' => 'foo-styles.css',
    'remoteSkinPath' => 'MySkin',
    'localBasePath' => __DIR__,
  );

For detailed documentation, see the doc comment in DefaultSettings.php.
For a practical usage example, see Vector.php.

----

Implementation notes:

* The values defined in $wgResourceModuleSkinStyles are embedded into
  the modules as late as possible (in ResourceLoader::register()).
* Only plain file modules are supported, setting module skin styles
  for other module types has no effect.
* ResourceLoader and ResourceLoaderFileModule now support loading
  files from arbitrary paths to make this possible, defined using
  ResourceLoaderFilePath objects.
  * This required some adjustments in seemingly unrelated places for
    code which didn't handle the paths fully correctly before.
* ResourceLoader and ResourceLoaderFileModule are now a bit more
  tightly coupled than before :(
* Included a tiny example change for the Vector skin, a lot more of
  similar cleanup is possible and planned for the future.
* Many of the non-essential mediawiki.* modules defined in
  Resources.php should be using `'skinStyles' => array( 'default' => … )`
  instead of `'styles' => …` to allow more customizations, this is
  also planned for the future after auditing which ones would actually
  benefit from this.

Change-Id: Ica4ff9696b490e35f60288d7ce1295766c427e87
2014-07-29 00:53:41 +02:00
jenkins-bot
66d3eb56af Merge "ResourceLoader: Test that all module dependencies are satisfiable" 2014-07-27 21:21:41 +00:00
umherirrender
4ee680a8b3 Fixed spacing
- Removed spaces after not operator (!)
- Removed spaces inside array index
- use tab as indent instead of spaces
- Add newline at end of file
- Removed spaces after casts

Change-Id: I9ba17c4385fcb43d38998d45f89cf42952bc791b
2014-07-24 11:53:04 +02:00
Chad Horohoe
f45e4de3b7 Make AutoLoaderTest handle namespaces
Bug: 67644
Change-Id: Ibeb0833742c574afac13bfebd278f9d2b8410de6
2014-07-16 17:32:21 +00:00