Commit graph

2916 commits

Author SHA1 Message Date
Adrian Heine
a600ea6705 Fix typo references in comments to ResourceLoaderStartUpModule
Change-Id: I73436f76d0b42f6f9c0b3277a1b07fb6c2d7eb81
2015-01-08 18:09:10 +00:00
aude
c4b44cdc72 Cleanup SiteListFileCache test files in tearDown
Also use tempnam instead of time().

Bug: T84970
Change-Id: I5eb4379671cde45f70bb03d4634f9f34495a6b29
2015-01-08 13:04:12 +00:00
Kunal Mehta
bfe4ddd810 Implement extension registration from an extension.json file
Introduces wfLoadExtension()/wfLoadSkin() which should be used in
LocalSettings.php rather than require-ing a PHP entry point.

Extensions and skins would add "extension.json" or "skin.json" files
in their root, which contains all the information typically
present in PHP entry point files (classes to autoload, special pages,
API modules, etc.) A full schema can be found at
docs/extension.schema.json, and a script to validate these to the
schema is provided. An additional script is provided to convert
typical PHP entry point files into their JSON equivalents.

The basic flow of loading an extension goes like:
 * Get the ExtensionRegistry singleton instance
 * ExtensionRegistry takes a filename, reads the file or tries
   to get the parsed JSON from APC if possible.
 * The JSON is run through a Processor instance,
   which registers things with the appropriate
   global settings.
 * The output of the processor is cached in APC if possible.
 * The extension/skin is marked as loaded in the
   ExtensionRegistry and a callback function is executed
   if one was specified.

For ideal performance, a batch loading method is also provided:
 * The absolute path name to the JSON file is queued
   in the ExtensionRegistry instance.
 * When loadFromQueue() is called, it constructs a hash
   unique to the members of the current queue, and sees
   if the queue has been cached in APC. If not, it processes
   each file individually, and combines the result of each
   Processor into one giant array, which is cached in APC.
 * The giant array then sets various global settings,
   defines constants, and calls callbacks.

To invalidate the cached processed info, by default the mtime
of each JSON file is checked. However that can be slow if you
have a large number of extensions, so you can set $wgExtensionInfoMTime
to the mtime of one file, and `touch` it whenever you update
your extensions.

Change-Id: I7074b65d07c5c7d4e3f1fb0755d74a0b07ed4596
2015-01-08 01:40:01 +00:00
Chad Horohoe
aa21e125a3 Remove obvious function-level profiling
Xhprof generates this data now. Custom profiling of various
sub-function units are kept.

Calls to profiler represented about 3% of page execution
time on Special:BlankPage (1.5% in/out); after this change
it's down to about 0.98% of page execution time.

Change-Id: Id9a1dc9d8f80bbd52e42226b724a1e1213d07af7
2015-01-07 11:14:24 -08:00
Kunal Mehta
7b127e9de2 CleanUpTest: Consolidate individual "@todo Document" comments into one
This avoids PHPUnit marking nearly every test as risky.

Change-Id: I7cb5fc3eca2e9496a61d223dcae7576e7ddb4cad
2015-01-07 10:22:48 -08:00
umherirrender
00624415be Use also $wgAutoloadClasses in tests for module names
Extensions using $wgAutoloadClasses where this test will fail

Follow-Up: If1125cd5fa4ed836fe15fc79480d78ebd899be4e
Change-Id: Ic2024605d7d59890c527cc0580a49da73f8516c8
2015-01-06 13:21:17 +00:00
jenkins-bot
9581677601 Merge "Proper namespace handling for WikiImporter" 2015-01-05 22:40:15 +00:00
Kunal Mehta
17ccfbb7b3 Don't display composer installed extensions/skins on Special:Version
Extensions and skins should already be adding their credits through
$wgExtensionCredits, meaning that they would be duplicated in the
"Installed libraries" section.

Anything that has a type that begins with "mediawiki-" will now
be skipped.

Release notes were added for this commit and 528297f8db.

Change-Id: Ie873b16c1a8a696c7de833ae69b263161d9e15a8
2015-01-05 15:58:43 +00:00
Sumit Asthana
26235c7337 Database::makeList() : Handle NULL when building 'IN' clause
Amends to Database::makeList() to check if 'NULL' is present in array while
building IN clause. Presently a NULL in array intended to build IN clause, is
treated as a usual value. This creates
problem:https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in
Therefore null is appended at the end of the IN clause as " $field IS NULL"
rather than within the IN clause.
DatabaseSQLTest.php: Some test cases added for the modified behaviour.

Bug: T50853
Change-Id: Ic255c37e9702fd44d8173027ab8036ddc48f9d2e
2015-01-03 22:20:35 +05:30
jenkins-bot
910dcbc317 Merge "Add SQL tests for Database::makeList" 2015-01-03 09:04:54 +00:00
Kunal Mehta
6739df6b7f Fix @covers tags for includes/libs/composer
Change-Id: I90a39bce22f304eb06dd595eb845bb953e6937c3
2015-01-02 15:03:43 +00:00
jenkins-bot
4ab52fb8ec Merge "Clarifies the meaning of the function which tests the bug T34712" 2015-01-02 09:52:58 +00:00
Robert Hoenig
43b88b11b3 Clarifies the meaning of the function which tests the bug T34712
Change-Id: I17922b9bc6ac2ce5fef7aebc27020874d349f507
2015-01-01 18:16:42 -06:00
Kunal Mehta
4316c8c48b Implement support for a minimum log level in $wgDebugLogGroups
For some log groups, we only want to log them if they meet a certain
level of severity. An example of this is the current 'memcached-serious'
log group, which can be merged with the normal 'memcached' group
in the future, and report at a severity of ERROR.

This adds a 'level' parameter to the $wgDebugLogGroups, for example:
    $wgDebugLogGroups['memcached'] = array(
        'destination' => '/var/log/mw/memcached.log',
        'level' => \Psr\Log\LogLevel::ERROR,
    );

Bug: T85073
Change-Id: Ic53bc4c8e318ed188fe6f4e838e6789b3c3fd574
2014-12-31 18:16:17 +00:00
jenkins-bot
0f520f5e1d Merge "Use PHPUnit_Framework_TestCase in a few utils/ tests" 2014-12-31 15:59:16 +00:00
Brad Jorsch
29951907f7 Format multiple autocomments in edit summaries
Before r39373, all autocomments in an edit summary were formatted. In
fixing a bug with page titles containing "/*" this was accidentally
broken.

To use a single preg_replace_callback call to replace multiple
autocomments, we need to make sure that the match of one autocomment
doesn't overlap the match of another, which means we can't have "(.*)"
before and after. But we do still need to detect whether there is
anything before or after. "(?=(.?))" and "(?<=(.?))" would do nicely,
except the latter isn't actually supported. "(?=(.))?" and "(?<=(.))?"
work too, but older versions of PCRE don't support that. They do,
however, support "(?:(?=(.)))?" and "(?:(?<=(.)))?", so that's what
we'll go with.

This change does change the values for $pre and $post passed to the
FormatAutocomments hook; extensions need to be updated to accept (and
not prepend/append) booleans for these parameters.

Bug: T18530
Bug: T70361
Change-Id: I36c3a9e548a4ef72f93974bb35f9add8c29e9287
2014-12-31 10:24:05 +11:00
jenkins-bot
1e541cacd3 Merge "Make TitleMethodsTest a LangTestCase" 2014-12-30 18:13:34 +00:00
umherirrender
a925980036 Make TitleMethodsTest a LangTestCase
With I40a51c14ce07c301c15c6c2128cc18bb12e71103 a compare of namespaces
was added which fails when content language is not en.

Change-Id: I21466231e10e6cd5969c8c9bfd4824bf9c47e6d8
2014-12-30 10:22:56 +01:00
Chad Horohoe
20ef448bc3 Use PHPUnit_Framework_TestCase in a few utils/ tests
IPTest, StringUtilsTest and ZipDirectoryReaderTest do not
need the extra overhead

Change-Id: Ic05afb1a3a094a57383d483f4e50bd1ed9a183e2
2014-12-29 20:56:47 -08:00
Chad Horohoe
59afd687ce Convert most libs/ tests to use PHPUnit_Framework_TestCase
They don't actually need any of the mess that MediaWikiTestCase provides

Change-Id: Ibd067480fc294096d1249132cb800e09889efb18
2014-12-29 20:53:24 -08:00
Kunal Mehta
ce49874d9f Add checkComposerLockUpToDate.php script
Checks whether your composer.lock file is up to date
with the current composer.json file.

Bug: T77388
Change-Id: I528d63172c238cf1ea9bc02e8eb39b93225865de
2014-12-29 23:20:30 +00:00
umherirrender
deb1fefcce Add SQL tests for Database::makeList
Change-Id: I5a5be6769c7d0e5f2a97d3fbefd62df3c59f0716
2014-12-29 21:33:29 +01:00
jenkins-bot
a300fabb68 Merge "Add and use Title::getOtherPage()" 2014-12-25 15:22:36 +00:00
Reedy
4d9143c7f5 Add lots of @throws
Change-Id: I09d0c13070f966fcf23d2638d8fc1328279a5995
2014-12-24 13:49:20 +00:00
Reedy
ec3a28c536 Change to unix eol style
Change-Id: I0a5f91ccdbeed28ce41614ba8721944de876056d
2014-12-24 12:33:26 +00:00
Brad Jorsch
39703e9318 Improve testing for ApiFormatBase subclasses
I7b37295e is going to be changing around how ApiResult works,
which is going to need corresponding changes in the formatters. So it
would probably be a good idea to have a decent starting point to catch
any breakage. The non-backwards-compatible changes to ApiFormatTestBase
shouldn't be a concern, as no extensions in Gerrit reference this class
or any /ApiFormat.*Test/ class.

This also fixes two small bugs in ApiFormatWddx (null handling and
spacing for non-fm slow path) discovered during testing, and works
around some HHVM wddx extension bugs.

Bug: T85236
Change-Id: I9cdf896e7070ed51e42625d61609ad9ef91cd567
2014-12-23 14:55:23 -05:00
Brad Jorsch
e27ff73b32 Reject out-of-range output when converting to TS_MW
TS_MW is a 14-character string "YYYYMMDDHHIISS", and thus cannot
represent timestamps earlier than 00000101000000 or later than
99991231235959.

MWTimestamp should throw an exception if asked to represent out-of-range
times in this format, rather than returning invalid values that are
likely to be truncated by the database.

Bug: T51580
Change-Id: I744e446356f3ed9193dfaaaec5dc81c611dab4a3
2014-12-19 17:06:38 -05:00
jenkins-bot
bafd3b2789 Merge "Don't create Language objects during ResourceLoader tests" 2014-12-19 18:25:04 +00:00
Kevin Israel
74faccfa26 Change case of class names to match declarations
Found by running tests under a version of PHP patched to report
case mismatches as E_STRICT errors.

User classes:
* MIMEsearchPage
* MostlinkedTemplatesPage
* SpecialBookSources
* UnwatchedpagesPage

Internal classes:
* DOMXPath
* stdClass
* XMLReader

Did not change:
* testautoLoadedcamlCLASS
* testautoloadedserializedclass

Change-Id: Idc8caa82cd6adb7bab44b142af2b02e15f0a89ee
2014-12-19 16:01:26 +00:00
Kunal Mehta
0e05ec5b31 Don't create Language objects during ResourceLoader tests
Mock calls to ResourceLoaderContext::getDirection(), which creates
Language objects to get the directionality of a language.

Change-Id: Ibe6da3013e658aa7cf596c1da2f8ca1314b7cdd3
2014-12-18 16:52:28 -08:00
Ori Livneh
d71ce5ab3a Set $wgInternalTidy to false in unit tests when running under HHVM
The Tidy extension for HHVM is nominally usable, but does not provide error
text returns. Tests should use TidySupport to determine whether they should use
the Tidy extension or not.

Change-Id: I0f842ddf8484206fc2a8b01289bc0a6750f34fed
2014-12-18 14:58:18 -08:00
jenkins-bot
a1c58aebc2 Merge "Make PHPCS pass on JsonContentTest" 2014-12-18 19:47:09 +00:00
Brad Jorsch
82fb734740 Skip ApiFormatWddxTest under HHVM
wddx_serialize_value() fails to escape the ampersand under HHVM. It has
been fixed upstream https://github.com/facebook/hhvm/issues/4283 but
has not been released yet.

When running under HHVM and detecting the ampersand is not escaped, skip
the test..

Bug: T75531
Change-Id: Ia58ec20b4daf78cd90da1bdf8af6cac86015c5d7
2014-12-18 16:57:49 +00:00
Christian Aistleitner
58e23da40f Make PHPCS pass on JsonContentTest
Change-Id: I1054d7d0e903e3be7cb815035dddb0f34bcd6334
2014-12-18 14:13:07 +01:00
jenkins-bot
a62baa2228 Merge "Run structure tests on extensions" 2014-12-18 09:14:14 +00:00
Timo Tijhof
e4f84af980 content: Refactor and fix various bugs in JsonContent
Follows-up d2a82fcb60. These issues weren't previously exposed
as nothing uses JsonContent by default in core, and the extensions
using it (e.g. EventLogging) lock it down very early. As are
most of these methods were never really put to use (they were
called after the extension does its superset of checking, or
too early and WikiPage ignores it).

Bug fixes

* Empty JSON object was converted to an array by PST conversion.
  The beautifyJSON method is intended for prettify purposes but
  actually modified the content stored in the database and made
  it no longer roundtrip ({} != []).

  We can't change getJsonData to return an object since it's
  a public method and people use it as an array. So we can't cast
  it to a PHP object as that would break back-compat.

  Turns out the class doesn't even support non-objects anyway (a
  primitive in JSON can trivially cause a fatal as it wasn't
  consistently considered invalid, though it didn't actually fatal
  due to some lucky spaghetti code in WikiPage).

* Fix beautifyJSON by checking for empty objects to prevent
  implicit {} to [] conversion.

* Add isValid() check to fillParserOutput() as it's called early
  on. Otherwise it throws a warning that 'foreach' (in objectTable)
  iterates over null. In practice it doesn't matter since the
  entire parser output is rejected when WikiPage eventually
  checks isValid (through Content::prepareSave).

* Consider all non- (PHP) array values invalid instead of just
  non-null values.

Enhancements

* Display message "Empty object" instead of a completely blank page
  for an empty object.

* Display message "Empty object" or "Empty array" instead of an
  empty table cell.

* Render arrays as a list of values (without indices).

* Remove italics from table cells for values. The monospace font
  should be enough. It also offsets it from the "Empty"
  placeholders (which are italicised).

Refactoring and clean up

* Use FormatJson::parse so that we can use Status to distinguish
  between null parse result and thus reliably cache it.

  Ideally we wouldn't need to cache it, but right now this code
  is pulled apart and called in so many strange ways that we end
  up calling this several times.

* Improve fairly meaningless test (testBeautifyJson) that was
  calling FormatJson in its data provider, exactly what the method
  being tested did. It also provided the test with data that could
  never end up in normal usage (a PHP-style associated array with
  implied numerical indices).

* Document that this class rejects non-array values.

* Document the problem with WikiPage assumming PST can run on any
  content. WikiPage fundamentally still assumes wikitext, in that
  there's no concept of invalid content.

* Fix incorrect documentation for getJsonData's return value
  (It may return null.)

* Fix incorrect documentation for beautifyJSON's return value.
  (It never returned boolean.)

Bug: T76553
Change-Id: Ifed379ba4674a8289b554a95953951886bf2cbfd
2014-12-17 23:04:24 +00:00
jenkins-bot
d34a6ca677 Merge "Fix some stuttering in comments and documentation" 2014-12-17 22:28:27 +00:00
Ricordisamoa
12dec5d85d Fix some stuttering in comments and documentation
Change-Id: I9c0088b9aab37335203cad45a1d6fa8ac3f43321
2014-12-17 19:44:10 +00:00
Antoine Musso
61a30753a6 Run structure tests on extensions
The tests in the structure PHPUnit testsuite are used to verify the
Autoloader, ResourceLoader definitions and some basic other tests.

They are not run by Jenkins for MediaWiki extensions since we invoke:

 phpunit.php --testsuite extensions

Add the structure directory to the 'extensions' testsuite.  That will
start enforcing them on all extensions, so need to be merged with care.

We will want to backport this patch on all release branches we support
and make sure they pass for all extensions/branches :-/

Bug: T78798
Change-Id: Icb88fb3f10d203cfcb61c36c9c92864b92d6739c
2014-12-17 16:18:42 +00:00
umherirrender
1d8b52fbfd Move Test files under same folder structure where class is (/includes/)
Change-Id: I95f1aa6f0ed2cc3306aa6e588a11f359854315c1
2014-12-16 21:56:44 +01:00
umherirrender
b52e1fe2f7 Destroy session after running api tests
ApiLogin and ApiCreateAccount calling wfSetupSession, which leaks a
session over the test.
The test RequestContextText needs a clear session to work, so the api
tests should avoid leaking the session.
Doing this in the ApiTestCase because some tests calling ApiLogin over
FauxRequest and that also starts a session.

Change-Id: Icf5cb4d4a2c24c96698cac5bf32147c0c9149ef3
2014-12-16 20:50:35 +00:00
umherirrender
cf5f6414ce Add better error message for files which exceeds $wgMaxImageArea
Added a TransformTooBigImageAreaError to allow setting an extra message.
Added also size-*pixel messages to show the value of $wgMaxImageArea
with some formatting.

This error is still throwing for all files, to fix bug T34387 this needs
a follow up with a proper check. I am not sure, if a File::isLocal() is
okay, because files from a DBForeignRepo maybe transformed on the same
server, so the check needs to be done also for this. For APIForeignRepo
the check is done on the foreign server.

Change-Id: Ieba12e424c8bddb1961a30d3f9ea5c8ff241abb5
2014-12-15 08:25:04 +00:00
Kunal Mehta
e27ae6b5ec Convert more wfRunHooks() --> Hooks::run()
Change-Id: I1b1e3cb6871721fc05dda881a8020c9a5d30a514
2014-12-12 14:47:31 -08:00
Ricordisamoa
fc5fd5c37a Typo fixes and non-code tweaks
Skipped replacements:
* prefered → preferred
* prolly → probably

Skipped files:
* resources/lib/jquery.ui/jquery.ui.mouse.js
* resources/lib/jquery/jquery.form.js

Change-Id: Ib7923f362ddfca1b892bf5d601785d6b5aa5d44c
2014-12-12 18:31:15 +00:00
umherirrender
be3f554c95 Fix check for function wddx_deserialize in tests for hhvm
The @requires just works for other tests, not for php functions.

This fixed a failure for the hhvm test server:
1) ApiFormatWddxTest::testValidSyntax
Failed asserting that null is of type "array".

Change-Id: Iadd8238ce62d4803cdf56508886ad016f8ac8f1d
2014-12-10 22:25:25 +00:00
This, that and the other
37b4cd5da2 Proper namespace handling for WikiImporter
Up until now, the import backend has tried to resolve titles in the XML
data using the regular Title class. This is a disastrous idea, as local
namespace names often do not match foreign namespace titles.

There is enough metadata present in XML dumps generated by modern MW
versions for the target namespace ID and name to be reliably determined.
This metadata is contained in the <siteinfo> and <ns> tags, which
(unbelievably enough) was totally ignored by WikiImporter until now.
Fallbacks are provided for older XML dump versions which may be missing
some or all of this metadata.

The ForeignTitle class is introduced. This is intended specifically for
the resolution of titles on foreign wikis. In the future, an
InterwikiTitle class could be added, which would inherit ForeignTitle
and add members for the interwiki prefix and fragment.

Factory classes to generate ForeignTitle objects from string data, and
Title objects from ForeignTitle objects, are also added.

The 'AfterImportPage' hook has been modified so the second argument is a
ForeignTitle object instead of a Title (the documentation was wrong,
it was never a string). LiquidThreads, SMW and FacetedSearch all use this
hook but none of them use the $origTitle parameter.

Bug: T32723
Bug: T42192
Change-Id: Iaa58e1b9fd7287cdf999cef6a6f3bb63cd2a4778
2014-12-10 22:24:47 +11:00
Timo Tijhof
c0c221bfe4 resourceloader: Refactor empty value trimming for mw.loader.register
We already did this, but it was rather convoluted with lots of
if/elseif sequences checking all the possible values.

Remove this logic from ResourceLoaderStartUpModule. Simplying it
simply create the array and pass it to ResourceLoader::makeLoaderRegisterScript.

In makeLoaderRegisterScript, we apply a filter to the array(s) that
trim empty values.

While at it:
* As with other registration properties' default values (like for dependencies,
  group, and skip) also use 'null' for the default value of 'source'.
  The mediawiki.js client was already compatible with this, and the server omitted
  it if it was the last value in the list. But in all other cases it explicitly
  outputs "local". Use null instead of simplicity sake. This also gains us a
  few characters in the output, and a relatively larger win after gzip since
  there's lots more re-using of "null".
* Remove stray casting of $version to int. This only happened in case of
  registering a single module (which don't do anywhere), and is redundant.

Change-Id: I1f321e7b8bd3b5cffc550b51169957a3da9b971d
2014-12-09 00:47:14 +00:00
jenkins-bot
25d794110e Merge "Index ResourceLoader dependency lists in startup" 2014-12-08 19:17:23 +00:00
Trevor Parscal
ecfdb88dfd Index ResourceLoader dependency lists in startup
By using the existing indexes of modules in the array being passed to
mw.loader.register we can reduce the size of the startup module by about
6% after gzip (nearly 20% before) on a wiki with very few modules (such
as my localhost). Comparing data from en.wikipedia.org shows about 9%
after gzip (nearly 30% before).

The technique adds a function to mediawiki.js which resolves the indexes
before registering the modules, which costs a little bit of data in that
payload, but it's negligible (118 bytes after gzip) in comparison to the
overall reduction.

Also, cleaned up lies in documentation and strange use of "m" as an
iterator variable.

Bonus: fix ISO8601 timestamp instead of UNIX timestamp being passed
to custom loader scripts.

Change-Id: If12991413fa6129cd20ceab0e59a3a30a4fdf5ce
2014-12-08 11:04:41 -08:00
jenkins-bot
4cabe55d0f Merge "Add tests for class names in the api main and query module manager" 2014-12-07 08:17:38 +00:00
jenkins-bot
93cc595bed Merge "resourceloader: Make timestamp handling more consistent" 2014-12-05 22:21:11 +00:00
Kunal Mehta
49d762c2f7 Remove unused global declaration
Change-Id: I4239cee1410c40d3ffd4a19f409a91a945a72d60
2014-12-05 21:39:48 +00:00
Timo Tijhof
6a1ec17e79 resourceloader: Make timestamp handling more consistent
* Use time() instead of:
  - wfTimestamp()
  - wfTimestamp( TS_UNIX )
  - wfTimestamp( TS_UNIX, 0 )
  - wfTimestamp( TS_UNIX, time() )
  - intval( wfTimestamp( TS_UNIX, time() ) )

* Consistently use 1 as default instead of 0. Previously the
  unwritten convention was that anything "final" max()'ed with 1,
  and any internal method would use 0, but this wasn't applied
  consistently made it fragile. There doesn't seem to be any
  value in returning 0 only to have it maxed up to 1 (because if
  the 0 would ever make it out alive, we'd be in trouble).

* wfTimestamp returns a string for TS_UNIX. In PHP this doesn't
  matter much. In fact, max() takes number-like integers so
  transparently, it even preserves it:
  > max( 1, 3, '2' );
  < 3
  > max( 1, '3', 2 );
  < "3"
  Just cast it in one place at the very end (StartupModule)
  instead of doing intval( wfTimestamp() ).

* Fix weird documentation claiming getModifiedTime can return
  an array, or mixed.

* Remove 'version > 1 ? version : 1' logic in
  ResourceLoader::makeLoaderRegisterScript. The client doesn't
  have "0 means now" behaviour so this isn't needed. And the method
  was only doing it for variadic argument calls.

Removal of quotes around timestamps reduced the size of the startup
module from 26.8KB to 25.9KB before gzip. After gzip the size was
and still is 5.7KB, though. (From 5456 bytes to 5415 bytes.)

Change-Id: If92ca3e7511e78fa779f2f2701e2ab24db78c8a8
2014-12-05 21:29:57 +00:00
umherirrender
489d793882 Fixed spacing
- Added/removed spaces around parenthesis
- Added newline in empty blocks
- Added space after switch/foreach/function
- Use tabs at begin of line
- Add newline at end of file

Change-Id: I244cdb2c333489e1020931bf4ac5266a87439f0d
2014-12-05 22:28:07 +01:00
Kunal Mehta
24c000ea80 Add and use Title::getOtherPage()
Change-Id: I40a51c14ce07c301c15c6c2128cc18bb12e71103
2014-12-04 17:45:05 -08:00
Kunal Mehta
27d21e3117 Move core message dirs from $wgMessagesDirs to LocalisationCache::getMessagesDirs()
If $wgMessagesDirs is initially empty, we can optimize when batch loading
extensions:

    if ( !$wgMessagesDirs ) {
        $wgMessagesDirs = $cache['MessagesDirs'];
    }

With APC, this should be O(1) CPU time.

This was suggested by Tim in the code review of I7074b65d07c5.

Change-Id: I66fa907cdaafe18b74b5b9afaa8b6b1db069bea3
2014-12-03 14:32:18 -08:00
Chad Horohoe
dbca12bf93 Stop using $wgProfileToDatabase
Was not completely removed and the remaining bits were mostly
broken. $wgProfiler['output'] = 'db' is the proper way.

Fixes T75917
Change-Id: I36565e2372db2ed49b219cf533ec433e8111c52f
2014-12-03 10:37:03 -08:00
Timo Tijhof
b7a0f77800 content: Re-arange tests to declare data provider first
For consistency with other test suites.

Change-Id: Ic4b4d8e228a9ce82a42a07d88d690a9c932960c3
2014-12-03 03:38:43 +00:00
Chad Horohoe
b702cb3b24 Support offsets in prefix searching
Fixes T75522
Change-Id: I7a27a64e295a1efcb1d9728d95cf254bb8bfbe92
2014-12-02 11:59:26 -08:00
jenkins-bot
7ceeaa2208 Merge "InstallDocFormatter: Hyperlink Phabricator task numbers" 2014-12-02 17:23:29 +00:00
jenkins-bot
aa04aab5cf Merge "Handle redirects during prefix search exact match" 2014-12-02 17:20:45 +00:00
jenkins-bot
ae9812e08f Merge "Set wgMetaNamespace on TitleTest.php" 2014-11-27 23:14:38 +00:00
aude
90f6efc360 Implement SiteListFileCache and rebuild script
Provides file-based cache of the SitesStore data,
using a static json file dump of the data from the
SiteSQLStore.

Includes a maintenance script to rebuild the sites cache.

Bug: 56602
Bug: 45532
Change-Id: Iaee4c1f9fb5d54efe01975f733ebd5c339ac106f
2014-11-27 22:32:25 +00:00
jenkins-bot
0b8f48c535 Merge "Use Parser::SFH_NO_HASH/SFH_OBJECT_ARGS class const" 2014-11-27 05:55:07 +00:00
jenkins-bot
239b0c772a Merge "Use mergeMwGlobalArrayValue in GenderCacheTest" 2014-11-27 05:35:20 +00:00
umherirrender
bae165bb9f Add tests for class names in the api main and query module manager
This found wrong class names for api modules

Change-Id: If1125cd5fa4ed836fe15fc79480d78ebd899be4e
2014-11-27 05:24:48 +00:00
umherirrender
6b2729ced9 Set wgMetaNamespace on TitleTest.php
Also added it to the MediaWikiTitleCodecTest.php (which seems not exists
at time of bug creation)

Bug: T67879
Change-Id: I8411d46320201b594ebaa56953dc355d863d0500
2014-11-26 18:05:30 +01:00
Timo Tijhof
ff6513f28b Remove '@section LICENSE'
This was used in 2 special classes, the logger classes and spread
to a few other random classes.

Afaik this has no meaning. Is for something we don't use, and
goes against the meaning of '@section' in Doxygen, which we do
use.

In Doxygen output, all LICENSE references became links to
ProfilerXhprof (the one Doxygen encoutered first).

Bug: T72328
Change-Id: Icc7c443245c70bc0f549bee7d105eef5691c864d
2014-11-26 02:20:55 +00:00
daniel
e596cac514 Apply exportTransform in backupTextPass.inc
This is intended to help us fix 72348: Wikidata uses exportTransform to 
convert old revision content to the new canonical JSON model. This patch
will make this work with the multi-pass dumping process employed to 
generate dumps for dumps.wikimedia.org.

Bug: 72361
Change-Id: Ie9046d1968efc40a02a0812a536f5ef7176af7d7
2014-11-23 16:42:13 +00:00
aude
b6d9e33508 Fix covers tag in ResourceLoaderStartupModuleTest
optimizeDependencies got renamed to compileUnresolvedDependencies
but the covers tag was not changed accordingly.

Change-Id: I63a3d5454dd69b545b63150b50430e65b3928192
2014-11-22 12:54:47 -05:00
Nik Everett
2ec9915816 Handle redirects during prefix search exact match
Prefix search attempts to find exact matches to the user's query that aren't
returned by plugins.  In some cases, like when the exact match is a redirect
and the target of the redirect is also in the search results, it would result
in multiple results in prefix search going the same place.  This looks really
silly when the top hit is "Barack obama" (a redirect) and the next one is
"Barack Obama" (the target of the redirect).

This handles a bunch of cases to do with redirects in the matches and when
the exact match is a redirect.

Bug: 736731
Change-Id: I49fe1ccec84bd5d1f44c6b91b260abf50f2cc3a1
2014-11-21 14:47:32 -05:00
Kevin Israel
6c247aa591 InstallDocFormatter: Hyperlink Phabricator task numbers
Also removed the callback functions for the existing regexes. Nothing
has to be or is encoded or escaped at this time, so preg_replace()
can be used instead of preg_replace_callback().

Change-Id: I8cdddd602dcf7b67b8f2b06149b6a0859c70342c
2014-11-21 03:05:44 -05:00
Tim Landscheidt
24b08513ef Fix errors in UIDGeneratorTest::testTimestampedUID
Currently, this test passes in Jenkins, but not with Travis
CI's hhvm where apparently code execution is slower so not
all UIDs are created within the same millisecond.  This also
previously masked that the test did not indeed test if the
host bits are identical as instead it tested the MSBs twice.

Bug: 73668
Change-Id: Ic68af599599ace5faa6a687d115d2d3802f6ba1b
2014-11-20 23:52:16 +00:00
jenkins-bot
1b4f6c04be Merge "FormatMetadata::fetchExtendedMetadata: Ignore multiple EXIF/XMP values" 2014-11-20 15:47:54 +00:00
Kunal Mehta
987d2e4c77 Use cdb library and provide a back-compat layer
The new cdb library is pulled in via composer. Since the
library uses namespaces, a backwards-compatability layer
is provided for the old class names:
* CdbReader
* CdbWriter
* CdbException

The PHP/DBA-specific classes should never have been used directly.

Depends on I98302bdf1 in mediawiki/vendor

Change-Id: I39549ac8540b262cf91f7d1830d36327afb3033d
2014-11-19 18:39:27 +00:00
Bryan Davis
2792ea9783 Add logging context to database logs
* Add optional $context parameter to wfDebug, wfDebugLog, wfLogDBError
  and wfErrorLog that will be passed to MWLogger.
* Add support for PSR-3 style log message parameter interpolation in
  MWLoggerLegacyLogger.
* Add context information to wfLogDBError calls made from DatabaseBase,
  DatabaseMysqlBase and LoadBalancer instances.
* Deprecate wfDebugTimer() which now appears to be unused.

Change-Id: Ic90d593d00a2b0b5b80ed205908cbe624042603c
2014-11-19 17:59:55 +00:00
umherirrender
91f26d50ee Use Parser::SFH_NO_HASH/SFH_OBJECT_ARGS class const
Instead of the global const
Add hint to Defines, that they should not be used.

Change-Id: I3e1dcf46fe18a97a05e3406c209815adb7e0e083
2014-11-18 21:19:22 +01:00
Chad Horohoe
9144673b5c Remove profiler support from debugging toolbar
It never worked and creates extra dependencies on the profiler

Change-Id: I584c9e94d144baf48a654e23dd9f47690d94f13b
2014-11-17 18:27:46 +00:00
Timo Tijhof
399ba2fecf MWException: Log stack traces for php errors (not exceptions)
* Remove use of 'error' where it's redundant.
* Remove call to logException from responsibility of MWException.
  Call from exception handler instead.

Change-Id: I8764cf5df87b226813c9b9cf99f9b4f3fa4b7c92
2014-11-16 14:37:15 +01:00
umherirrender
9060817873 Use setMwGlobals on execption tests
Simplify $wgOut handling by setting the global with setMwGlobals

Change-Id: I64bf23e657ea82316e1cd71df6491322e537d5d1
2014-11-13 21:11:18 +00:00
Bryan Davis
98a34a5224 Work around test provider running before setUp()
If the xhprof extension is not present we skip running the test, but
phpunit runs the test provider function before that check so we need to
guard against missing constants to avoid spurious warnings in the test
output.

Change-Id: I5541a062ff0c47ca8802315554b3f32dfd01dcd0
2014-11-13 13:18:08 -07:00
umherirrender
181d5f6fd6 Use mergeMwGlobalArrayValue in GenderCacheTest
Also move the global setting to addDBData to let the test work
correctly, because the global is used indirectly in User::saveSettings.

Change-Id: I986d3a28e4fcc82ed84886c2970571e9fa6128be
2014-11-13 17:56:22 +00:00
jenkins-bot
c008171213 Merge "Remove require_once from some tests by adding classes to TestsAutoLoader" 2014-11-13 13:03:55 +00:00
jenkins-bot
0e2a9baff3 Merge "Enable profiling via xhprof" 2014-11-12 22:00:30 +00:00
umherirrender
aa09312ac0 Remove require_once from some tests by adding classes to TestsAutoLoader
Change-Id: If6d0a72acb98e0971fcce2facb239b67cbe639a5
2014-11-12 20:24:08 +01:00
Gergő Tisza
b8d2ca8020 FormatMetadata::fetchExtendedMetadata: Ignore multiple EXIF/XMP values
Ignore all but the first value of multivalued metadata fields. Before
this, the function returned an array of values for such fields,
causing various errors.

Bug: 72652
Change-Id: I0fd22b78e4938eecc506d870e352b3b196ee3ace
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/973
2014-11-12 19:10:05 +00:00
Kunal Mehta
e774a8a779 Add @covers tags to ObjectFactoryTest
Change-Id: I0130b133ef8261e43082d90b08cf2b9abf64ffc9
2014-11-12 17:17:36 +00:00
Kunal Mehta
0136b75d1a Move CdbTest into includes/libs/cdb as well
Change-Id: If0ad645129692129d5674fd0e6651032b03a13c0
2014-11-10 11:02:46 -08:00
jenkins-bot
204e2eea51 Merge "hhvm: Detect json-c parser" 2014-11-10 17:14:50 +00:00
jenkins-bot
c71c7f84e0 Merge "Deprecate MWFunction::newObj() in favor of ObjectFactory" 2014-11-10 16:53:16 +00:00
Bryan Davis
15018c2447 hhvm: Detect json-c parser
Add detection for a json-c powered json_decode() implementation. Default
loose parsing behavior was previously attributed to HHVM, but additional
investigation has found that this is actually a "feature" of json-c.
HHVM optionally links with json-c for distributions that wish to avoid
being encumbered by the "shall be used for Good, not Evil" clause of the
JSON.org parser's license. The test case implementation stays the same,
but a feature flag style check is added to determine if the parser being
used is lenient or not.

Bug: 72778
Change-Id: Ieb8dddd2e324c90f45f2fc27ac13ab5fff733302
2014-11-08 15:45:46 -07:00
MZMcBride
627ccbcd7b Minor code comment tweaks for spelling and consistency
Change-Id: I51391f45d0f81e4245ccc0e435a71ccd5b0e3ca3
2014-11-08 14:07:19 -05:00
Bryan Davis
46c47e11bc Enable profiling via xhprof
Add a helper class to assist in collecting profiling information using
XHProf <https://github.com/phacility/xhprof> and a Profiler
implementation to hook it into the existing MediaWiki profiling system.

The Profiler includes support for generating tabular reports similar to
the traditional output of ProfilerSimpleText and ProfilerSimpleTrace or
sending data to a udpprofile daemon as supported by ProfilerSimpleUDP.
It also produces data compatible with the debugging toolbar.

Bug: T759
Change-Id: I16a75cb7636cb5dcef3830d738b2dcd2047d0aaa
2014-11-08 11:47:25 -07:00
Jeff Janes
0f9255555d Fix phpunit test tags
The "@group Database" is only effective when it is in the
comment immediately before the class definition.

Merge the two comments into one.

Bug: 69612
Change-Id: Icfc7c9587534115154d90e20d510c854359fa8f0
2014-11-07 20:11:08 +00:00
Kunal Mehta
d5563db924 Deprecate MWFunction::newObj() in favor of ObjectFactory
Change-Id: Iaa803311409cf7b649f64f69bafe2935a418d31c
2014-11-06 13:41:18 -07:00
jenkins-bot
a91b0c8606 Merge "Clear DeferredUpdates state via setUp()" 2014-11-04 08:39:12 +00:00
Erik Bernhardson
49cfcf3715 Clear DeferredUpdates state via setUp()
Best practices for phpunit say 'more setUp, less tearDown' which typically means
that tests are not responsible for cleaning up after themselves, rather tests
are in charge of setting the world up exactly as they expect it.  Part of this
expectation is that mediawiki does not maintain state between tests.

This patch clears DeferredUpdates from MediaWikiTestCase::setUp() because it has
internal global state.  This prevents state from leaking between test cases.

Bug: 72922
Change-Id: I57e6e89aa51c78bbf9d7f5151122b9e267d1a03e
2014-11-03 13:43:53 -08:00
aude
e78625dbcd Add test cases to SpecialPageFactoryTest for registration via callback
Change-Id: I9785e64d8daf27abca063f2bc584297db275c2db
2014-11-01 02:06:24 +01:00
jenkins-bot
29defd7f7d Merge "hhvm: fix FormatJsonTest::testParseTryFixing for lenient json parser" 2014-10-31 17:54:01 +00:00
Bryan Davis
5e23faa0f4 hhvm: fix FormatJsonTest::testParseTryFixing for lenient json parser
Bug: 72778
Change-Id: I147e0c2107c4d74d2d50ede91d329d524b1f0798
2014-10-31 11:25:25 -06:00
daniel
da3c19fb17 Change position of <model> and <format> tags in XML dumps.
Bug: 72417
Change-Id: I1d11ce8147cf0bf0018e3931202f533afd4ea93e
2014-10-31 16:49:58 +00:00
jenkins-bot
9682e3b137 Merge "Remove double semicolon" 2014-10-31 11:30:00 +00:00
umherirrender
ccf2eefc7b Fix doc of WikiPageTest::newPage
Change-Id: Id60db0ede2f2ead8a1cd524f26bcb87cfbd0b604
2014-10-31 11:44:16 +01:00
jenkins-bot
80eeea984a Merge "Import.php: Use Config instead of globals" 2014-10-30 22:42:00 +00:00
jenkins-bot
cc3b1d1e2c Merge "Fixed spacing" 2014-10-30 20:09:54 +00:00
jenkins-bot
a75e07ccf5 Merge "Fully replace Title::moveTo() with MovePage" 2014-10-30 20:06:27 +00:00
umherirrender
f92ebf8aab Remove double semicolon
Change-Id: I96b6210d24ee110327feef01907d81630c9fb330
2014-10-30 17:58:21 +01:00
umherirrender
2a7c95acda Fixed spacing
- Changed spaces to tabs for indentation
- space after 'function'/'if'
- Added/Removed space after parenthesis/brackets/end of line
- Removed space after cast

Change-Id: I0e8e6a19b84b5e1308b632a0266cb78f688494ee
2014-10-30 17:50:19 +01:00
jenkins-bot
3e8c0191a3 Merge "Fix creating non-parameterized hashes in ParameterizedPassword" 2014-10-30 00:17:07 +00:00
jenkins-bot
d47c1e9230 Merge "resourceloader: Add support for delivering templates" 2014-10-29 20:58:57 +00:00
jdlrobson
ebeb297236 resourceloader: Add support for delivering templates
A base ResourceLoaderModule::getTemplates() exists for subclasses
to override. An implementation is provided for ResourceLoaderFileModule.

For file modules, templates can be specified in the following manner:

'example' => array(
	'templates' => array(
		'bar' => 'templates/foo.html',
	),
	'scripts' => 'example.js',
),

The delivery system is template language agnostic, and currently
only supports "compiling" plain HTML templates.

This also adds template support to the following modules as a POC:
* mediawiki.feedback
* mediawiki.action.view.postEdit
* mediawiki.special.upload

Works with $wgResourceLoaderStorageEnabled

Change-Id: Ia0c5c8ec960aa6dff12c9626cee41ae9a3286b76
2014-10-29 19:31:16 +00:00
Bryan Davis
28a7ce420b Use MWLogger logging for legacy logging methods
Send wfDebug, wfDebugLog, wfLogDBError and wfLogDBError log messages to
the new MWLogger PSR-3 logger subsystem. Compatibility with the historic
logging operations of wfLogDBError are provided by MWLoggerLegacyLogger
and the MWLoggerLegacySpi logger factory.

Requires the MWLogger system introduced in I5c82299 and the Composer
managed libraries from Ie667944.

Change-Id: I1e5596d590144fbfdfd5f18bc42cf1ef0dbcac12
2014-10-29 11:55:08 -07:00
Kunal Mehta
ac53e45035 Fully replace Title::moveTo() with MovePage
* AbortMove hook is removed in favor of two more specificly focused
  hooks: MovePageCheckPermissions and MovePageIsValidMove.
** MovePageIsValidMove is for extensions to specify whether a page
   cannot be moved for technical reasons, and should not be
   overridden.
** MovePageCheckPermissions is for checking whether the given user
   is allowed to make the move.

* Title::moveNoAuth() deprecated
* Title::moveTo() deprecated
* Title::isValidMoveOperation() broken down into
  MovePage::isValidMove() and MovePage::checkPermissions().

* Title::getTitleProtection() is now public, and returns
  unprefixed fields

Change-Id: Ic5026384b92a0d68d628397ffe1de6e5b6183f02
2014-10-28 12:52:36 -07:00
Santhosh Thottingal
8dc3631093 Update plural data to CLDR 26
* The updates include incompatible changes for plural forms in Russian,
  Prussian, Tagalog, Manx and several languages that fall back to Russian.
  In addition there are minor changes for other languages.
* Test cases were updated to reflect these changes.

Bug: 62861
Change-Id: I7cce477925330fe5bbf51a8470060dc1223981d0
2014-10-27 08:30:34 +00:00
jenkins-bot
08aaea93e3 Merge "FormatJson::stripComments" 2014-10-24 18:47:29 +00:00
jenkins-bot
49d2aee5c7 Merge "Remove useless sleep() in JobQueueTest" 2014-10-24 16:46:08 +00:00
Antoine Musso
7fff25afc1 Remove useless sleep() in JobQueueTest
I noticed JobQueueTest::testRootDeduplication takes ~ 6.5 seconds, which
is due to the test method using sleep(1) and being passed the provider
provider_queueLists which yields six items.

The reason is to have the array returned by Job::newRootJobParams() to
have an incread value for 'rootJobTimestamp'.  Instead, just copy the
previous array of parameters and increment the UNIX timestamp and
converting back to TS_MW format.

Change-Id: I75066df73f9f92e56b89eb6d928c41e949a2d6a9
2014-10-24 14:31:00 +02:00
umherirrender
ef46373d70 Refactor hook handling in ResourceLoaderTest
No need to set a global $wgHooks, just set it for the current test.

Change-Id: Ic3e82608efa617a5a7f7c31365d748222bc6d6da
2014-10-23 19:19:18 +00:00
jenkins-bot
f0254f6ec7 Merge "Avoid running of hooks when running MWTimestampTest" 2014-10-23 19:18:20 +00:00
jenkins-bot
78e94e4e33 Merge "Fix bypassing hooks in TextContentTest" 2014-10-23 18:05:02 +00:00
jenkins-bot
509d2fa1b2 Merge "Fix setting hooks in ApiQueryTest" 2014-10-23 17:56:57 +00:00
jenkins-bot
9b31f5324f Merge "Use mergeMwGlobalArrayValue in AutoLoaderTest::setUp" 2014-10-23 17:56:02 +00:00
jenkins-bot
f2712f5c58 Merge "Use mergeMwGlobalArrayValue in LocalisationCacheTest" 2014-10-23 17:55:59 +00:00
jenkins-bot
83aee8bafe Merge "Use mergeMwGlobalArrayValue in ApiOptionsTest" 2014-10-23 17:55:51 +00:00
jenkins-bot
566635008a Merge "Use setMwGlobals in UserTest::testPasswordExpire" 2014-10-23 17:55:20 +00:00
jenkins-bot
a6120e1baa Merge "Use setMwGlobals in TitleTest::testGetPageViewLanguage" 2014-10-23 17:53:00 +00:00
umherirrender
7701eec0cc Avoid running of hooks when running MWTimestampTest
Bug: 55886
Change-Id: I91e1dfeb1cddb158318ac178264e5acaf0a16215
2014-10-23 17:50:36 +00:00
umherirrender
cb82a1d798 Fix bypassing hooks in TextContentTest
Save the whole global $wgHooks with the default way instead of just a
hook in a own variable.

Change-Id: Ie796f7a53ee38e0dc07f5b026134bbdcb8c9fd53
2014-10-23 17:46:55 +00:00
umherirrender
a51674e204 Use mergeMwGlobalArrayValue in LocalisationCacheTest
Change-Id: I8cfe494d159101306c699169dd224c3bea65c753
2014-10-23 17:42:36 +00:00
umherirrender
1c0235513e Use mergeMwGlobalArrayValue in ApiOptionsTest
Change-Id: Ic0a9ceab9e8fad7c408e32ba110a3543ef28b59e
2014-10-23 17:42:34 +00:00
Kunal Mehta
4a2ecaa046 Import.php: Use Config instead of globals
Change-Id: I4d1a8c443cfa360c5d388364c580d48fa7124099
2014-10-22 10:35:29 -07:00
Kunal Mehta
fe5170d32b Move tests into separate ResourceLoaderFileModuleTest
Change-Id: I2504867850b7e6bda2afb8c4fedbe6b8819bc15b
2014-10-22 17:16:47 +00:00
jenkins-bot
0909973197 Merge "API: Warn when neither rawcontinue nor continue are given to action=query" 2014-10-22 16:16:25 +00:00
jenkins-bot
5309ad3df1 Merge "Allow for time-limited tokens" 2014-10-22 13:13:20 +00:00
Brad Jorsch
af11268d05 API: Warn when neither rawcontinue nor continue are given to action=query
The default behavior for continuation for action=query will be changing.
Warn clients that they will need to update.

Change-Id: I52d048040e898a0c9630e2aed071b339ec12de42
2014-10-21 19:16:05 +00:00
umherirrender
52f5634ba0 Migrate merge log to new log system
This allows use of gender on Special:Log
Old message is kept for use in irc,
a test is added to ensure a unchanged irc message.

Change-Id: I0557a0d2751540cf0d7967333ffd767b934011c6
2014-10-21 16:49:06 +00:00
Adam Roses Wight
cf4654399b Extensions may add tests by directory
The UnitTestsList hook can now be used to add entire directories of
tests, à la phpunit.xml's <directory> tag.  The test suite is built by
recursively scanning the directory for any files ending in "Test.php".

TODO:
* Update online hook documentation.
* Generate and autoload a classmap for scanned directories.

Bug: 70630
Change-Id: I3089372f9d7c645e16ff0984a959f982a3bc639f
2014-10-21 09:37:10 +00:00
jenkins-bot
913b868aa4 Merge "Remove deprecated GlobalVarConfig::set()" 2014-10-20 22:40:39 +00:00
jenkins-bot
cf93d76c03 Merge "Remove hitcounters and associated code" 2014-10-20 21:12:54 +00:00
Marius Hoch
dd52464497 Fix creating non-parameterized hashes in ParameterizedPassword
I noticed MWOldPassword is broken while working on
I7024b287a7. When generating new passwords for it,
a superfluous : is being added to the serialized hash
within the database (and that breaks parsing so that
people can't ever log in).

As this is not really relevant in the real world (as
nobody is hopefully using plain MD5 passwords anymore),
this doesn't need any backward compatibility handling
for the broken hashes.

Change-Id: I753c135a6de39008488bd7462c2bfcda2cbac116
2014-10-20 22:58:17 +02:00
Chad Horohoe
90d90dad6e Remove hitcounters and associated code
The hitcounter implementation in MediaWiki is flawed
and needs removal. For proper metrics, it is suggested to use
something like Piwik or Google Analytics.

RFC: https://www.mediawiki.org/wiki/Requests_for_comment/Removing_hit_counters_from_MediaWiki_core
Change-Id: I0e5006a7e8a09c800f8fa4effa9399e8afdd7a57
2014-10-20 13:01:55 -07:00
Kunal Mehta
ebefa2fc50 Remove deprecated GlobalVarConfig::set()
Was deprecated in 1.24.

Change-Id: Iead2c8ba14c0524cba9585b5d4c29f2f806cfc15
2014-10-20 16:43:08 +00:00
jenkins-bot
45e4e5e54c Merge "Add $tablesUsed for ApiTestCase" 2014-10-20 15:02:21 +00:00
umherirrender
ac79e19024 Make PrefixSearchTest use MediaWikiLangTestCase
It uses namespaces which depends on the content language

Change-Id: I0a1ef4adea1e1ddff32e37cbbd8cf51a3398905b
2014-10-20 14:17:41 +00:00
Matthias Mullie
0f07cb138e Add $tablesUsed for ApiTestCase
This test creates 2 TestUser objects on setUp. Due to recent
changes in TestUser, this isn't even possible anymore if
MediaWikiTestCase hasn't setupTestDB() properly.

Change-Id: Idadfb94bd48270ad085cfece2bf17024ed9d97cd
2014-10-20 13:57:13 +02:00
jenkins-bot
1540bd29a9 Merge "Skip tests in PrefixSearchTest if not wikitext main namespace" 2014-10-20 10:18:53 +00:00
Marius Hoch
ee9166a10e Make TestUser way faster
By only updating the user row in the database, if needed
and by making use of md5 for passwords instead of slower
hashing.
This cut down run time of some Wikibase API tests to 20%
of the original value for me!
Also it reduces the run time of MediaWiki's test suite
by about 45s on jenkins.

Change-Id: I7024b287a71fe9b327dbcdc5427cd8edb5047606
2014-10-20 02:03:08 +02:00
Marius Hoch
dca998080d Sanitize TestUser
This also, as a side effect, makes sure we no longer
use hash_ functions here, which will reduce the impact of
https://github.com/facebook/hhvm/issues/3740 on us.

Change-Id: I6e0c776ef9aafe490b24b6869037bb5cb05cd151
2014-10-18 16:51:16 +02:00
aude
cb576ef0b0 Skip tests in PrefixSearchTest if not wikitext main namespace
Otherwise, running core tests with non-wikitext in the main
namespace fail with fatal error.

Change-Id: I895e7ee61ba80c0c345b6c05f05d05c368e52d59
2014-10-18 14:56:19 +02:00
Brad Jorsch
b1e4006b44 Allow for time-limited tokens
Tokens returned from User::getEditToken will now include an encoded
timestamp (and therefore will be up to 16 bytes longer).

User::matchEditToken and User::matchEditTokenNoSuffix are gaining a
"maxage" parameter: when specified, only tokens with an encoded timestamp
within $maxage seconds will be accepted.

Change-Id: Ic4cf148cc1fa9d0561aac0bd2d68a09c7851896d
2014-10-17 17:07:38 -07:00
jenkins-bot
0128cea149 Merge "Revert "Add RL template module with HTML markup language"" 2014-10-17 23:26:40 +00:00
Legoktm
de24e3099e Revert "Add RL template module with HTML markup language"
Not ready for merging, and Roan says that the +2 was
most likely accidental and meant to be a -1.

This reverts commit d146934f94.

Change-Id: I3926c9ae9e3c8026fceb3aeedd3b1f1d9b91667b
2014-10-17 23:19:21 +00:00
jenkins-bot
a88d198cbe Merge "Add RL template module with HTML markup language" 2014-10-17 22:46:32 +00:00
Marius Hoch
23ec64745c Also provide assertNotTag in MediaWikiTestCase
And mark that and assertTag as deprecated to avoid
new usages.

Bug: 69505
Change-Id: Ibfe78fd1914adfb08b29f61c59c43899bd8840d2
2014-10-17 20:14:35 +02:00
jdlrobson
d146934f94 Add RL template module with HTML markup language
Preparation work for templating in core.
RL should allow us to ship HTML / template markup from server to client.
Use in Special:Upload and mediawiki.feedback as a proof of concept.
Separation of concerns etc...

See Also:
Ia63d6b6868f23a773e4a41daa0036d4bf2cd6724

Change-Id: I6ff38c12897e3164969a1090449e626001926c3b
2014-10-17 09:23:04 -07:00
umherirrender
0731f52e9e Use setMwGlobals in TitleTest::testGetPageViewLanguage
Change-Id: I42cb31bf7c1fa1b77f2e8465e7e1e316972fec09
2014-10-16 19:44:39 +02:00
umherirrender
bb910388c7 Use setMwGlobals in UserTest::testPasswordExpire
Change-Id: Ida1a43629853abf648867f29e3bf15bdfd4291a6
2014-10-16 19:38:31 +02:00
saper
b5d809f59b Let BlockTest.php respect database constraints
This is an attempt to make BlockTest not to fail
with database referential constraints enabled
(from I326bb4a189bf881299b9fb678033a927b916efac)

Bug: 58191
Change-Id: I45c2d466f77d4d0aa25e880b5bb7d1120c39a561
2014-10-15 18:09:49 +00:00
umherirrender
675cc960a8 Use mergeMwGlobalArrayValue in AutoLoaderTest::setUp
Change-Id: Ieb7835855a28d1602ac357b51197cb66d9200209
2014-10-15 18:16:48 +02:00
umherirrender
d52b393592 Fix setting hooks in ApiQueryTest
Also fix the comment

Change-Id: I4245a5f515980c743965996aecc67b42b616b50c
2014-10-15 17:50:36 +02:00
Timo Tijhof
155c8de216 RequestContextTest: Distinguish initial test from restored test
Follows-up f31a046. In failure it's hard to see whether it's the
first or third group of assertions as they were carying the same
name.

Change-Id: I5891754342400155759e797337f8509d4eca39ec
2014-10-15 12:42:45 +00:00
umherirrender
ce08326cda Break long lines
Change-Id: I8d4e883058c21023273df88439cd145888833115
2014-10-14 19:30:43 +00:00
jenkins-bot
5c115a7789 Merge "Deprecate ORMTable::getFieldPrefix" 2014-10-14 18:28:57 +00:00
Thiemo Mättig
9bd9c31c73 Deprecate ORMTable::getFieldPrefix
Internal calls to this method show up in my XDebug profiling as
the second most called method (after array_key_exists). Called
10000 times. Sure, it's very cheap and clearly not a bottleneck.
But just not necesarry to have a method for that. The benefit of
having a method is to have a dynamic prefix that can change
depending on other things in an object. But I think this is not
a good idea for a prefix.

Since this is protected it is part of the contract of this class.
I already cleaned known subclasses. Should be @deprecated for
some time and can be removed later.

Change-Id: I46a0d7e072d0a69e9aef5f77e92044b62e3d0ce7
2014-10-14 16:14:17 +02:00
Brad Jorsch
d25cb99202 API: Clean up and internationalize pretty-printed output
The syntax highlighting applied to the XML format is not all that great,
and applying it to other formats is just wrong. Instead of doing it
ourselves, let's just add a hook and let Extension:SyntaxHighlight_GeSHi
do it for us.

But for that to work, we have to add RL support to the pretty-printed
output, which means OutputPage. At the same time, lets internationalize
the header.

Bug: 65403
Change-Id: I04b1a3842abdf1fb360c54aa7164fc7cd2e50f4b
2014-10-13 16:17:37 -07:00
Brad Jorsch
af0121f9c8 API: Add "batchcomplete" to simplified continuation result
With the query-continue style of continuation, it's easy for the client
to know when a batch of pages from the generator is complete. The
simplified continuation should support this too, and without requiring
the client to parse the "continue" result property.

Change-Id: Ie407e2e27c017e8813143859cc58674553bc641b
2014-10-13 15:26:45 -07:00
jenkins-bot
2e65d68c73 Merge "API: HTMLize and internationalize the help, add Special:ApiHelp" 2014-10-13 22:19:47 +00:00
physikerwelt (Moritz Schubotz)
eab45e37b6 Fix strict warning in FakeDatabasUpdater::setAppliedUpdates
Follows-up ccd051bc44.

To be consistent with DatabaseUpdater::setAppliedUpdates
the second arg $updates is now optional.

Change-Id: Ida2adfe30099ea4c65f0c16fafc4eae6603fc93a
2014-10-13 13:36:09 +00:00
Bryan Davis
8fea9c619d FormatJson::stripComments
Add stripComments method that can be used to remove single line and
multiline comments from an otherwise valid JSON string. Inspired by the
comment removal code in redisJobRunnerService and discussions on irc
about the Extension registration RFC.

Change-Id: Ie743957bfbb7b1fca8cb78ad48c1efd953362fde
2014-10-12 12:34:22 -06:00
jenkins-bot
4be623a6b3 Merge "Revert "Make an empty "?action=" parameter default to "view""" 2014-10-11 17:23:21 +00:00
Brion VIBBER
4587cd5c71 Revert "Make an empty "?action=" parameter default to "view""
Breaks all non-view actions on dev wikis, something's not right with the patch.

This reverts commit a90b7ea969.

Change-Id: Ib9a5eb07ef48716df193fbb62a86c13e5c80dafd
2014-10-11 17:15:49 +00:00
jenkins-bot
c9aa597028 Merge "Add test for canUseWikiPage special case to ActionTest" 2014-10-11 00:36:58 +00:00
jenkins-bot
45f041ac8d Merge "Make an empty "?action=" parameter default to "view"" 2014-10-11 00:36:10 +00:00
Thiemo Mättig
e1a4fe4be5 Add test for canUseWikiPage special case to ActionTest
Change-Id: I6b037d4aa9101a3a416cdf3bd1e26f14b056b4f7
2014-10-11 00:30:21 +00:00
jenkins-bot
79ea0edce2 Merge "PrefixSearch: Enforce including the exact match as first result" 2014-10-10 21:34:23 +00:00
Thiemo Mättig
a90b7ea969 Make an empty "?action=" parameter default to "view"
When no action is given, e.g. in
https://en.wikipedia.org/wiki/URL
the action defaults to "view". Just like you called
https://en.wikipedia.org/wiki/URL?action=view

But when the action is empty, e.g.
https://en.wikipedia.org/wiki/URL?action=
you get an error message telling you that "the action specified"
can not be "recognized". Wait. I did not "specified" an action.
That's why I left the parameter empty. It doesn't make much sense
to have an empty action name that's different from the "view"
default, right? From the users point of view I expect the empty
string to behave like null/undefined.

Change-Id: I331924d9223e597293bc8285f0c330edf08e429b
2014-10-10 21:52:07 +02:00
Timo Tijhof
8dd95a13e3 PrefixSearch: Enforce including the exact match as first result
The default search backend implements proper prefix search and
does this naturally. But extensions providing search backends
like Lucene and CirrusSearch actually fail to implement proper
prefix searching and instead use their search engine ranking for
prefix search as well. Thus often the exact match is not on top
or is not even in the first 10 results at all.

On en.wikipedia.org:

> Example
1. "Example (musician)"
2. "Example"
3. "Example.com"

> John ive
1. "John Ives"
2. "John Ivey"
3. "John Ive"

> Foo
1. "Football (soccer)"
2. "Football League Cup"
3. "Foot (length)"

"Foo" exists but is NOT among the returned results.

Bug: 70958
Change-Id: I78d419424baf43d38beeb6dabfc347f430fa45f6
2014-10-10 19:32:09 +00:00
Brad Jorsch
df457f3809 API: HTMLize and internationalize the help, add Special:ApiHelp
The existing API help, formatted as basically a plain-text document
embedded in XML and with a little bolding and a few links
syntax-highlighted in after the fact, works ok for experienced programmers
but isn't at all newbie-friendly. Further, all the help is hard-coded in
English, which isn't very friendly to non-English speakers.

So let's rewrite it. The help text is now obtained from i18n messages
and output in HTML, with the default display consisting of help for a
single module with links to help for other modules. This, of course,
necessitates deprecating many of the existing help-related methods and
hooks and replacing them with new ones, but backwards compatibility is
maintained for almost everything.

At the same time, action=paraminfo also needs to support the
'description' and other help-related fields being output in wikitext or
HTML, and I11cb063d (to access all modules via the 'modules' parameter
instead of having 'modules', 'formatmodules', 'querymodules', and so on)
is folded in.

And we also add Special:ApiHelp. When directly accessed, it simply
redirects to api.php with appropriate parameters. But it's also
transcludable to allow up-to-date API help text to be included within
the on-wiki documentation.

Note this patch doesn't actually add i18n messages for any API modules
besides ApiMain and ApiHelp. That will come in a followup patch, but for
the moment the backwards-compatibility code handles them nicely.

While we're messing with the documentation, we may as well add the
"internal" flag requested in bug 62905 (although the 'includeinternal'
parameter it also requests doesn't make much sense anymore) and a
"deprecated" flag that's needed by several modules now.

Bug: 30936
Bug: 38126
Bug: 42343
Bug: 45641
Bug: 62905
Bug: 63211
Change-Id: Ib14c00df06d85c2f6364d83b2b10ce34c7f513cc
2014-10-10 10:46:39 -04:00
physikerwelt (Moritz Schubotz)
ccd051bc44 Add counter to DatabaseUpdater::setAppliedUpdates
The key was constructed depending on the current time only.
This method fails, if multiple updates are performed
within one second.

Bug: 71087
Change-Id: Id7e30298729b3abb1501a34fcc1ba4e45d2172f0
2014-10-09 06:13:54 +00:00
dan-nl
1f607e1e17 HttpTest: Update cURL constants array
The mediawiki-core-regression-hhvm-master test for I21747063 found
failures for some constants provided by the provideCurlConstants()
array.

https://integration.wikimedia.org/ci/job/mediawiki-core-regression-hhvm-master/2072/console

I have commented out the failures that occur in the current mw
HHVM 3.3.0 environment in order for the test to pass. none of the
commented out constants appear in the mw core code.

PHP 5.6.0 removed several cURL constants http://php.net/manual/en/curl.constants.php.
I have commented out those constants and verified that they do not
exist in the mw core code.

Bug: 71729
Change-Id: I30c5e78eacf19071aaf44834ca188172f082e161
2014-10-07 22:21:16 +00:00
jenkins-bot
4ffe4ca50b Merge "PrefixSearch: Add unit tests for StringPrefixSearch" 2014-10-07 12:41:08 +00:00
jenkins-bot
59efe37730 Merge "UploadBaseTest: Use setMwGlobals() instead of juggling globals" 2014-10-07 06:46:11 +00:00
Timo Tijhof
0d5a0dbf06 MWCryptHKDFTest: Mock $wgSecretKey to ensure atomicity
Follows-up af66c04.

The tests depend indirectly on wgSecretKey (used by
MWCryptHKDF::generateHex). On test installs I tend to set this
to "example" or "***", which is less than 16 characters and thus
the unit tests failed with "MWCryptHKDF secret was too short".

Change-Id: I9a85fd9fbb345863e4837fed2910d60ebf1b0d83
2014-10-07 05:22:37 +02:00
Timo Tijhof
dabd389220 UploadBaseTest: Use setMwGlobals() instead of juggling globals
Abstracts the logic for restoration into the built-in teardown()
handler.

Also purify the test configuration by setting wgHooks and
wgFileExtensions to otherwise empty arrays instead of extending
existing ones.

Change-Id: Ied65ee62f658dd650c603a54e72cd19965867a8f
2014-10-07 05:13:32 +02:00
jenkins-bot
265a855085 Merge "Set content language for ContentHandlerTest::testGetAutosummary" 2014-10-02 08:39:45 +00:00
jenkins-bot
bd73b04259 Merge "Fix SpecialPageFactory list handling" 2014-10-01 21:55:30 +00:00
umherirrender
10e87016a4 Set content language for ContentHandlerTest::testGetAutosummary
This test depends on content language when comparing to a english
message text.

Change-Id: Ic50c0b6a821fb1d51d70119fbf712a18b73ce4c8
2014-10-01 19:38:32 +00:00
Kevin Israel
19473fa625 Special:BookSources: Correct validation of ISBNs containing X
PHP's "equal" (==) operator considers the integer 0 to be equal to
the string 'X', and when 'X' is converted to a number, it becomes 0.
Neither is desired here.

* Fail when an X is encountered while calculating the check digit.
  (X can only occur as the check digit of an ISBN-10.)
* Fixed the check digit comparisons by adding an explicit string cast.
* Used the "identical" operator to make it more obvious that no type
  juggling should take place during the comparisons.
* Added some test cases.
* Removed an outdated TODO.

Bug: 67021
Change-Id: I85f53c41f403a60340e9441757fe66b9764e623c
2014-10-01 19:14:39 +00:00
Brad Jorsch
e8419973ef Fix SpecialPageFactory list handling
* Since Ic917c7d8/I7420b9ec, SpecialPageFactory doesn't properly cache
  SpecialPageFactory::$list.
* SpecialPageFactory::resetList() has never really worked right, it
  loses all the core special pages.
* SpecialPageFactory::getAliasListObject() could be called recursively
  from a SpecialPage_initList hook. There's no particular reason to fail
  it, just allow the original call to override the result of the
  recursive one and hope it works.

Change-Id: I7adb346eab00d5849d087ddff75230a35be3ee8f
2014-10-01 13:58:08 -04:00
jenkins-bot
f330eea930 Merge "Skip MailAddressTest::testNewFromUser on windows" 2014-09-30 22:38:47 +00:00
jenkins-bot
9b1dad00d6 Merge "CSSMin: Don't generate double rules for IE < 8 when embedding SVG files" 2014-09-30 22:01:45 +00:00
jenkins-bot
45663444e7 Merge "CSSMin: Do not base64-encode non-binary files when embedding" 2014-09-30 21:49:27 +00:00
Bartosz Dziewoński
bf3b97791b CSSMin: Don't generate double rules for IE < 8 when embedding SVG files
Bug: 71003
Change-Id: Ic232e8d62b164940003afdfe7cce9f964d7e9cbc
2014-09-30 21:19:58 +00:00
Bartosz Dziewoński
fa223d65d6 CSSMin: Do not base64-encode non-binary files when embedding
Do not base64-encode non-binary files (containing only whitespace and
printable ASCII characters, which matches sane SVG files).

For SVG files the percent-encoded URIs are actually slightly longer
than the base64-encoded ones (~10%), but compress a lot better
resulting on 15-20% less data to transfer after gzip compression.

(The effect is best seen on the 'oojs-ui' module, which consists
mostly of SVG icons – especially after commenting out everything other
than 'oojs-ui.svg.css'.)

I tried this for binary files too, just in case; but as expected, they
suffer from a noticeable size increase even with compression (~15%).

Bug: 67341
Change-Id: Iddaf863b6be98570a2bb8e606f13946a96345f65
2014-09-30 23:13:42 +02:00
umherirrender
748721a334 Fix GitInfoTest::testValidJsonData on windows
GitInfo.php is replacing DIRECTORY_SEPARATOR by '-'.
On windows this is \, which was not set in the tests.

1) GitInfoTest::testValidJsonData
Failed asserting that false is true.

Change-Id: I1871c342b61a335b59a98755d8b824cc58c1543e
2014-09-30 20:44:45 +00:00
jenkins-bot
18a9e7c409 Merge "Introduce Message::plaintextParam" 2014-09-30 20:05:52 +00:00
Erik Bernhardson
d55fedfba8 Introduce Message::plaintextParam
I have run into numerous issues trying to utilize unsafe user
provided content as an argument to a Message instance.  Specific
cases are enumerated in MessageTest.php

Typically the solution to using user provided text is to use
Message::rawParam, but this pushes escaping of the parameter to
the caller.  This patch introduces Message::plaintextParams which
handles escaping of the string parameter to match the requested
output format.

The functionality is:
* plain and text: exactly like rawParams()
* escaped, parse and parseAsBlock: escape it but don't do brace expansion

Additionaly, similar to Message::rawParam, plaintext parameters are not
valid parser function arguments.

Change-Id: I320645cd23c98fea4bfc32ab22b7ef8d320957cb
2014-09-30 12:51:29 -07:00
Sergio Santoro
28ccec727f Add test cases for wfAppendQuery
Change-Id: I51e0e1764ad70d922466d62f1ddf3f8e3fb4568f
2014-09-29 22:56:21 +00:00
Brad Jorsch
4dc1f5a175 PasswordFactory::newFromPlaintext( null ) needs to work
Various code passes null around to mean "an invalid password". It
shouldn't all have to test for null and specially handle that.

This also fixes a codepath where User::$mNewpassword could get set to an
empty string rather than a password object, which would cause problems
later when anything else tries to use it.

Bug: 71421
Change-Id: Ib5f94b52c07e7dba89328b98fb43c86db95ee09f
2014-09-29 21:42:33 +00:00
umherirrender
df24b7209d Fixed spacing
- Added newline at end of file
- Removed double spaces/newlines
- Added space after if/function and parentheses/brackets
- Removed space before comma/cast
- Fixed indent of some lines

Change-Id: I29867ffdffdfb7d2b56997e9393497c7dc12f7d3
2014-09-29 20:46:19 +02:00
jenkins-bot
ba2d4e546c Merge "FormatJson::parse( TRY_FIXING ) - remove trailing commas" 2014-09-27 19:33:33 +00:00
Yuri Astrakhan
289d3e4f00 FormatJson::parse( TRY_FIXING ) - remove trailing commas
Removes trailing commas from json text when parsing
Solves very common cases like [1,2,3,]

Resulting status will be set to OK but not Good to warn caller

Change-Id: Ic0eb0a711da3ae578d6bb58d7474279d6845a4a7
2014-09-27 06:20:36 -04:00
umherirrender
4654a2e802 Skip MailAddressTest::testNewFromUser on windows
1) MailAddressTest::testNewFromUser
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Real name <foo@bar.baz>'
+'foo@bar.baz'

Change-Id: I0c9724130730c39a355c22d06b2c0f0629c1d0e3
2014-09-27 11:43:47 +02:00
umherirrender
a64e869377 Remove explict autoload from phpunit tests
The phpunit tests are loading all classes, so there is no need for an
explicit load.

Change-Id: Ifb26a5082e3366c44f6a1e65baf64c6ff9bf8449
2014-09-27 10:38:58 +02:00
Yuri Astrakhan
9a380626bc Added FormatJson::parse( $value, $options = 0 ) returning Status
* Returns Status object that will contain decoded value on success
* Adds i18n messages for all available PHP JSON errors

ATTN Translation team: please copy these messages:

gwtoolset-json-error-depth => json-error-depth
gwtoolset-json-error-state-mismatch => json-error-state-mismatch
gwtoolset-json-error-ctrl-char => json-error-ctrl-char
gwtoolset-json-error-syntax => json-error-syntax
gwtoolset-json-error-utf8 => json-error-utf8

Change-Id: I1c4f37aaabad369b75a1fbd223fad27ebcfe1c3c
2014-09-26 18:55:09 +00:00
Timo Tijhof
282847e6d3 Use CSSJanus from upstream (v1.1.0)
Remove the local copy and include upstream instead.

Remove local unit tests as it's now a proper upstream lib that
is tested by uptream.

Release:

  https://github.com/cssjanus/php-cssjanus/releases/tag/v1.1.0

Changes:

  Features
  * Support "/*!" syntax for @noflip.
  * Flip border-style.

  Bug fixes
  * Improve flipping of background-position.
  * Restrict four_notation_quantity to margin, padding and border-width.
  * Flip two values in border-radius rule (in addition to four values).

Change-Id: Ieb6e179d6163f99a9c98fd99c2277d25135871fe
2014-09-25 18:00:27 -07:00
Brad Jorsch
ad522beeea More sensible behavior when special page aliases conflict
Right now, SpecialPageFactory::getAliasListObject() just chooses the
last-seen alias and allows any alias to completely override the page's
"canonical" name (from SpecialPageFactory::$list or $wgSpecialPages).
Although the latter doesn't come up often since (almost?) all special pages
have their canonical name as one of their English-language aliases.

More sensible behavior is to always prefer the "canonical" name over any
conflicting aliases, and to prefer an alias that's the first alias for a
special page over one that is a fallback.

Also, when a special page's first alias winds up not actually referring
to that special page, we MUST NOT go redirecting other names for that
special page to that wrong alias.

Bug: 70686
Change-Id: I4b17ec0fdc87b4b0d7ae9d9eea7ffacb54dd6891
2014-09-25 07:57:01 +00:00
csteipp
6aa3befeb0 SECURITY: Enhance CSS filtering in SVG files
* Filter <style> elements
* Normalize style elements and attributes before filtering
* Add checks for attributes that contain css
* Add unit tests for html5sec and reported bugs

Bug:69008
Change-Id: I732eece710f1bfaaeea1e5de541fcd4cfb375de7
2014-09-24 21:06:54 +02:00
jenkins-bot
49230edd04 Merge "Add cURL constants test" 2014-09-24 15:35:33 +00:00
jenkins-bot
902f90a123 Merge "MediaWikiTestCase: Centralise insertPage() logic from SearchEngineTest" 2014-09-24 01:26:57 +00:00
jenkins-bot
33fc248ee7 Merge "Make "/*@noflip*/ /*@embed*/" annotation work without CSSJanus hacks" 2014-09-23 22:57:18 +00:00
jenkins-bot
dd77f5818a Merge "Move non-user specific things from Title::isValidMoveOperation() to MovePage" 2014-09-23 22:48:44 +00:00
Bartosz Dziewoński
4c01f8b2bc Make "/*@noflip*/ /*@embed*/" annotation work without CSSJanus hacks
This reverts most of commit 2d842f1425,
leaving only the test added in it, and reimplements the same
functionality better.

Instead of stripping /*@noflip*/ annotations in CSSJanus, which is
incompatible with other implementations that preserve it, extend
CSSMin to allow other CSS comments to be present before the
rule-global @embed annotation. (This required making the regex logic
in it even worse than it was, but it's actually slightly less terrible
than I expected it would be. Good thing we have tests!)

Bug: 69698
Change-Id: I58603ef64f7d7cdc6461b34721a4d6b15f15ad79
2014-09-23 22:47:54 +00:00
jenkins-bot
0ec17d739f Merge "Add tests for Job::toString" 2014-09-23 21:42:30 +00:00
Erik Bernhardson
c9a3ecef59 Message: Correct output of wfMessage( 'non-existent-msg' )->text()
The output of Message::text() should always be acceptable to pass into
external html escaping, such as when the response is returned over an
API request and escaped by the client side code. Calling ->text() on a
non-existent key was returning the entity encoded value which leads to
double encoding down the line, this patch fixes that oversight.

Bug: 66199
Change-Id: Ieec94d4e4c7e5c36e5e68bbf01792e96368e54e0
2014-09-23 21:06:22 +00:00
addshore
f960c2434b Add tests for Job::toString
Change-Id: I00f41808af42a198a1e45a93201dd7bb3e4d9c2c
2014-09-23 21:57:31 +01:00
Timo Tijhof
9e3e9e28d4 PrefixSearch: Add unit tests for StringPrefixSearch
Change-Id: If0fa66b212f70ea39d2e7feec117930fcd1b9642
2014-09-23 11:35:27 -07:00
Timo Tijhof
bfa6b4cab4 MediaWikiTestCase: Centralise insertPage() logic from SearchEngineTest
Make it re-usable for other tests and update SearchEngineTest to
use the addDBData (which is called automatically) instead of
manually keeping track of the state.

Change-Id: I75a6951545d9824e71e00f0f96936c53b400dce6
2014-09-22 14:56:32 -07:00
jenkins-bot
39f53db7e4 Merge "Add @covers tags to SpecialPageFactoryTest" 2014-09-22 16:48:21 +00:00
Kunal Mehta
3a34ae5731 Improve coverage of MailAddress::toString()
Change-Id: I8d5a1e8f293afa03d94167b722d3078f467cf59e
2014-09-21 18:17:38 -07:00
Kunal Mehta
e35e96515b Add @covers tags to SpecialPageFactoryTest
Change-Id: I997cd4296a60eb9950f7fee0caed7a2349e07bd2
2014-09-21 18:01:27 -07:00
jenkins-bot
65f8b65bd3 Merge "UserTest: Fix edit count test which incorrectly added user to db" 2014-09-20 22:30:52 +00:00
aude
9d95be4f90 UserTest: Fix edit count test which incorrectly added user to db
Although 'added' to the database, the user name was cleared
in User::loadDefaults() and not added correctly to the database.

Then if one has BetaFeatures extension, then the test fails.
Via a hook, BetaFeatures does "User::newFromName( $user->getName() );",
that produces a null object as name is '127.0.0.1' and then
$user->getOption() fails.

loadDefaults() is automatically called by addToDatabase() with correct
parameters, so we can just remove the call.

Bug: 68626
Change-Id: Ibb5c60192eb83b2608f72b59d7705854549a5dac
2014-09-20 23:57:35 +02:00
Bartosz Dziewoński
bf1168b8cd Fix CSSJanus flipping in LESS mixins and remove broken custom LESS functions
Custom LESS functions are problematic for us for a number of reasons,
as outlined by Timo on bug 67368. We should get rid of them.

The only use case was implementing CSSMin data: URI embedding in LESS,
which used to be impossible due to lessc not preserving comments (bug
54673). However, thanks to new syntax added in f3779e06 we can insert
the annotations in such a way that the compiler won't mess with them.
The same technique is used in OOjs UI since 584ed144.

The LESS-function-based embedding implementation also meant that we
were unable to flip images for RTL (bug 66091 and friends: bug 66773,
bug 68326). The annotation one doesn't have this limitation.

Bug: 67368
Bug: 66091
Bug: 66773
Bug: 68326
Change-Id: I3062346ed63272a1c22b5df27b4cc1de2a699d9a
2014-09-20 20:28:22 +00:00
jenkins-bot
2c9194d020 Merge "Strict standards: Static function PasswordTestCase::providePasswordTests() should not be abstract" 2014-09-20 17:25:41 +00:00
Bartosz Dziewoński
a917c50220 Strict standards: Static function PasswordTestCase::providePasswordTests() should not be abstract
Caused by 96771e3a65. No idea why that
change merged successfully.

Change-Id: I946f179699a5f249b032c4c8f90a9e6d2b033f55
2014-09-20 19:17:02 +02:00
jenkins-bot
8d516bc084 Merge "UserTest: Don't rely on the behavior of unknown user options" 2014-09-20 17:13:03 +00:00
Bartosz Dziewoński
03be8f40f5 UserTest: Don't rely on the behavior of unknown user options
They are not actually expected to be preserved, although they might be.

Change-Id: I34e15f3d1e5b9b825e6fc14814c8e9a6ac151ce9
2014-09-20 18:56:31 +02:00
Kunal Mehta
39fffcedb0 Move non-user specific things from Title::isValidMoveOperation() to MovePage
Change-Id: Ieffeb0c7a15b202dcbdaf2a9d0b9bcdc10e360d2
2014-09-19 20:11:59 +00:00
Kunal Mehta
b3dd0fb560 Improve test coverage of Title::isValidMoveOperation
Change-Id: Ifd81b0a894714ca94ab3e627ba83c881d96c3377
2014-09-19 19:23:19 +00:00
Timo Tijhof
96771e3a65 test: Clean up data providers that should be static
Follows-up b36d883.

By far most data providers are static (and PHPUnit expects them
to be static and calls them that way).

Most of these classes already had their data providers static
but additional commits sloppily introduced non-static ones.

* ResourceLoaderWikiModuleTest, 8968d8787f.
* TitleTest, 545f1d3a73.
  Odd unused method 'dataTestIsValidMoveOperation' was introduced
  in 550b878e63.
* GlobalVarConfigTest, a3e18c3670.

Change-Id: I5da99f7cd3da68c550ae507ffe1f725d31e7666f
2014-09-18 12:52:44 -07:00
jenkins-bot
2a44ed8140 Merge "Use qqx language for OldChangesListTest" 2014-09-18 16:07:28 +00:00
jenkins-bot
cdda40a453 Merge "Allow callback functions for creating SpecialPages." 2014-09-18 13:19:28 +00:00
jenkins-bot
c4ed6d1898 Merge "Add MultiConfig for fallback logic" 2014-09-18 13:13:39 +00:00
aude
3083146484 Use qqx language for OldChangesListTest
Change-Id: Icda9d541ea0fc929ab8b9274bbe870eb6278d2ed
2014-09-18 14:56:59 +02:00
daniel
4f0b2f4241 Allow callback functions for creating SpecialPages.
This enables factory functions to be registered for special
pages, as an alterative to giving a class name. This follows the
same rationale as Ieb85493a7765, which introduced factory functions
for API modules.

Change-Id: Ia2107dc5af7869187ba5dc02a1bef46d6801e138
2014-09-18 14:47:34 +02:00
Brad Jorsch
bba2bc6ca0 Record redirect target in ParserOptions
Since Id44d566a, the text passed to the parser when parsing a
&redirect=no page no longer contains the #REDIRECT directive. For the
benefit of extensions that want to know the redirect target from various
parser hooks, record the target on the ParserOptions object associated
with the parse.

Bug: 62856
Change-Id: Icd1da9911a43eabacbd9e9a369a8326f67f270ff
2014-09-18 06:19:31 +00:00
Kunal Mehta
412c4668f1 Add MultiConfig for fallback logic
This change adds MultiConfig and HashConfig classes,
but does not actually use them anywhere. In a future
change, we can convert DefaultSettings.php into
a HashConfig instance and use MultiConfig as the
'main' config instance.

Bug: 69418
Change-Id: I0ef2fbb86d5c27602d70240219ee08be31e2d09b
2014-09-17 15:55:04 -07:00
Jeff Janes
7e3fcc39ea PHPUnit: Add Database tags
Several unit tests access the database, but did not declare
themselves in the Database @group.  This causes
"make databaseless" to fail needlessly.  Add the
missing tags.

tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/specials/ImageListPagerTest.php
tests/phpunit/includes/specials/SpecialMIMESearchTest.php
tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php

Other than ActionTest.php, these also are problematic in 1.23

Change-Id: I7c1c957e2194c13e48b7ba68d7529e5d89901875
2014-09-16 18:42:27 -07:00
Brad Jorsch
e2c9d4dfa9 Improve/rename Parser::replaceUnusualEscapes
The previous implementation would unescape '&', '=', '+', and '%'. The
first three will break the URL when unescaped in the query string, and
the last will break when unescaped anywhere.

The code is now changed to treat the path, query, and fragment parts of
the URL separately when unescaping. We also escape any unsafe characters
and ensure all percent-encodings use uppercase hexits.

And since the old name is no longer accurate,
Parser::replaceUnusualEscapes is deprecated in favor of
Parser::normalizeLinkUrl.

Bug: 57909
Change-Id: I77dc308d0d016c395ad737c08cf10a7711e25bbd
2014-09-16 23:00:16 +00:00
Brian Wolff
1bb00307a8 Make generating Parser test class names more robust
This includes the extension name, and it also does much
more stringent validation. In the (now rather unlikely)
event of a duplicate name, it will append a number.

This is important, as it is very confusing when this bug strikes.
There exists extensions like CharRangeSpan which will trigger this bug.

Bug: 42174
Change-Id: Idf14b4cbdb8ec103340d48855e0361acf707b101
2014-09-16 20:38:04 +00:00
jenkins-bot
96efe0bc66 Merge "Revamp classic edit toolbar not to hardcode paths in HTML" 2014-09-16 12:51:21 +00:00
dan-nl
687920abf5 Add cURL constants test
Bug: 70570
Change-Id: I217470638adc1973ebe1227cc9fb65e1c3fab1b7
2014-09-16 13:43:30 +02:00
jenkins-bot
ed7ae208a4 Merge "Split BitmapHandler into two classes." 2014-09-16 08:27:49 +00:00
Yuri Astrakhan
3a28ee5acb CSS/JSON/JavaScript ContentHandler refactoring
* All content handlers that deal with code/data tend to have
English as their page language & pageview language, so moved common
code to the abstract CodeContentHandler class.

* Renamed JSONContent & JSONContentHandler into JsonContent*

Change-Id: I46819a0572ef5becc211d0d82471ff7102edaa3c
2014-09-15 08:24:15 +00:00
Brian Wolff
757a70ae0a Split BitmapHandler into two classes.
BitmapHandler has a lot of generic-ish functionality that could
be re-usable by extension classes (Such as how it organizes
$scalerParams array, or various image magick escaping methods).
However it's combined with a lot of very format specific things,
such as the shell-out call to image magick.

Try to separate out the more generic stuff into
TransformationalImageHandler. In order to do this, I also made
canRotate, autoRotateEnabled, and getScalerType non-static. No
extensions in our repo appeared to be using these methods, and they
don't really make sense to be static (imo).

In particular, I think code duplication can be reduced in
PagedTiffHandler by extending this new class. See comments
on I1b9a77a4a56eeb65.

Change-Id: Id3a8b25a598942572cb5791a95e86054d7784961
2014-09-14 22:10:37 +00:00
jenkins-bot
b82a8a080a Merge "MediaWikiTestCase: Enforce children call parent::tearDown" 2014-09-14 19:31:00 +00:00
Marius Hoch
3cbaac08cd MediaWikiTestCase: Enforce children call parent::tearDown
Can't be implemented as a test case because that's not being
run before MediaWikiTestCase::tearDown.
Also there's no parent destructor, so no need to call one.

Also fixed BagOStuffTest.

Change-Id: Ifd8659b6c8a748c6716099f8822e2c50ab51bda7
2014-09-14 21:21:40 +02:00
Kunal Mehta
eab5a7d6ef Add MailAddress::newFromUser()
And tests!

Change-Id: I5214c50855f6bc756f6d748e435ae2124b2264c1
2014-09-14 19:03:18 +00:00
Kunal Mehta
c1e9250124 Add tests for MailAddress
Change-Id: Ia192919322743854096aceb24be0fcf9b1aa32b4
2014-09-14 19:03:13 +00:00