Commit graph

2918 commits

Author SHA1 Message Date
umherirrender
eeea90d2b1 Add unit tests for all LogFormatters
Test the LogFormatter by passing old and new database rows to it.
The text shown on Special:Log and the api result returned by
list=logevents is tested.

Change-Id: Icfcba506f4fa3010cdaf973aa2df23b6e92c25e4
2015-05-03 21:58:00 +00:00
umherirrender
4e34450dca Add test for IRC line for legacy type block/block
Follow-Up: I08aea8399ce766e98c1a76e237169f220c6cc751
Change-Id: I8626e8ce28104d20a6145d47e647ef0ad86b3523
2015-05-01 18:14:22 +00:00
Brad Jorsch
4bbd86a859 API: Also mangle indexed tag names in format=xml
I had thought no one would be silly enough to set invalid tag names for
ApiResult::setIndexedTagName(), since it's specifically *for* XML tag
names. Apparently I was wrong.

Bug: T97599
Change-Id: I62ad832b1d8c23a275e5c67160f0b1febe5f3454
2015-04-30 09:02:17 -04:00
Brad Jorsch
ce6e288ee8 API: ApiResult must validate even when using numeric auto-indexes
Bug: T97490
Change-Id: I5301a615a992b090000a59f86e13b9f78dcd5aec
2015-04-29 10:43:45 -04:00
Aaron Schulz
64f1411ed7 Avoid direct DatabaseSqlite constructor use in tests
Change-Id: Iedbc68347836204cc031db15dfb2453577beaf02
2015-04-27 13:38:28 -07:00
jenkins-bot
2c82424b47 Merge "Drop unused FormatMetadata::flattenArray method" 2015-04-24 22:42:19 +00:00
Chad Horohoe
013c859b99 Remove install-phpunit.sh
The default fetch location is PEAR, which is not where PHPUnit
is distributed from anymore. apt-get and yum tend to ship horribly
outdated versions of PHPUnit that we don't want. Macports? Lol.

Instead one should install PHPUnit via composer. If you use vagrant
for testing, this is done for you. Our composer.json also lists
PHPUnit if you want to do it yourself.

Bug: T96834
Change-Id: I84ae186a9be2595cd594b428a07f3af684c258fe
2015-04-24 10:36:19 -07:00
Aaron Schulz
3a1f8b1111 Added WANObjectCache class
This class handles caching across distance sites where purges
must reach both. It also aims to make purging more reliable in
the face of network glitches and node consistent hash ejection.

bug: T88492
Change-Id: I686811b3075bf22e2f4de45127e8461e54648ead
2015-04-23 21:36:42 +00:00
jenkins-bot
f34b83ef67 Merge "API: Add wfDeprecated() to deprecated ApiResult methods" 2015-04-21 20:39:15 +00:00
jenkins-bot
786a37c577 Merge "Added CAS logic to User::addAutopromoteOnceGroups" 2015-04-21 15:43:54 +00:00
Brad Jorsch
beab6b009e Change API result data structure to be cleaner in new formats
Nothing in this patch should result in changed output for format=json or
format=php except as noted in RELEASE-NOTES-1.25, and changed output for
format=xml should be similar or cosmetic. However, other code accessing
the result data directly may need to be updated.

Bug: T87053
Bug: T12887
Change-Id: I3500708965cb8869b5aed1543381aad208dadd13
2015-04-20 17:49:37 -04:00
Brad Jorsch
0c86649f4b API: Add wfDeprecated() to deprecated ApiResult methods
Bug: T96596
Change-Id: Ib0068b4cd3cc9c1765d82a8ade7b3d435c57f1d5
2015-04-20 16:20:24 -04:00
Thiemo Mättig
e90513c5cd Drop unused FormatMetadata::flattenArray method
This is a pure helper method, not closely related to this class, and
currently unused.

Change-Id: I278058677ad407aae8cd2ba8fe34c12b1e86033f
2015-04-20 15:41:28 +02:00
aude
2513086ec1 Add supportsDirectEditing methods to ContentHandler
This adds supportsDirectApiEditing and
supportsDirectEditing methods to ContentHandler. Both
return false by default for the ContentHandler base
class, and true for TextContentHandler and it's
derivatives. (everything in core)

Extension content types that directly extend
AbstractContent / ContentHandler, often / generally don't
support direct editing. EntityContent in Wikibase
and Flow boards are the two such content types currently
in gerrit-hosted extensions.

The use and direct settings of the allowNonTextContent
member variable is replaced by enableApiEditOverride and
a setter for that. The only place allowNonTextContent is
used in all of Wikimedia-hosted git repos is core itself
(EditPage and ApiEditPage), so should be safe to make
this change.

With this change, Wikibase can remove its ApiCheckCanExecute
hook handler that disallows editing there, and MobileFrontend
could check if direct editing is allowed before enabling it's
editing features, instead of Wikibase having to add
MobileFrontend hook handlers to disable the features.

Bug: T96382
Change-Id: I276cd6ecedf38108f1f2be16b38e699e8c5d2d0c
2015-04-17 15:55:20 +00:00
Brad Jorsch
61233fc847 API: Move parameter formatting into LogFormatter
This allows for extensions to format their log entry parameters, and
keeps the code for formatting API log entry parameters in the same place
as for other formatting.

This also takes the opportunity to rearrange the output format slightly
to avoid conflicts like what's happening in T73020.

Bug: T35235
Bug: T73020
Bug: T91466
Change-Id: I6846ce09322eb404c506b5a51780a44ce9279fe2
2015-04-17 04:59:41 +00:00
Aaron Schulz
8c5406a437 Added CAS logic to User::addAutopromoteOnceGroups
* This should avoid duplicate logging events on races or when
  the cache fails to update.
* Also added getDBTouched() method to get user_touched itself.

Bug: T48834
Change-Id: Ib2cd0a2c72629fa4e13dcff4d2d6fbac8e690b32
2015-04-16 13:31:40 -07:00
Timo Tijhof
9107fb5391 backupTextPassTest: Disable testCheckpointGzip test
Follows-up 3d4c0e93, 73c6f525.

Bug: T70653
Change-Id: I2fbb3e8a2ba14751dfc8942d6d1a379faa9c48bf
2015-04-16 04:04:07 +01:00
jenkins-bot
4fa0240228 Merge "API: Overhaul ApiResult, make format=xml not throw, and add json formatversion" 2015-04-16 01:05:51 +00:00
jenkins-bot
f7d5582aa2 Merge "ResourceLoaderImageModule: Implement cache invalidation" 2015-04-15 21:53:58 +00:00
This, that and the other
5c4681012e UI for adding and removing change tags on revisions and log entries
There is a new special page, Special:EditTags, which is very similar to
Special:RevisionDelete in a lot of ways. In fact, the SpecialEditTags class
started off as a copy-paste of SpecialRevisiondelete.

You invoke this special page by going to an article history page, checking
some revisions, and clicking "Edit tags of selected revisions". Then you
pick the modifications you want to make and click "Apply". Very much like
the revision deletion workflow.

I had to restructure some of the Action routing code, which was only
designed to handle revision deletion. Also removing some code from
SpecialRevisiondelete which didn't work as advertised in the first place,
and definitely doesn't work now.

Change-Id: I7d3ef927b5686f6211bc5817776286ead19d916b
2015-04-15 18:31:12 +00:00
Bartosz Dziewoński
807c08295a ResourceLoaderImageModule: Implement cache invalidation
Bug: T94733
Change-Id: I6ac2ef8d897813e560daa133b89a7932f8c1a362
2015-04-14 21:31:19 +02:00
jenkins-bot
dd7df34a22 Merge "Clean up handling of 'infinity'" 2015-04-14 18:57:16 +00:00
jenkins-bot
d7e93ff4e7 Merge "Fix most of IPTest to use data providers" 2015-04-11 23:50:34 +00:00
Brad Jorsch
1c57794e37 API: Overhaul ApiResult, make format=xml not throw, and add json formatversion
ApiResult was a mess: some methods could only be used with an array
reference instead of manipulating the stored data, methods that had both
array-ref and internal-data versions had names that didn't at all
correspond, some methods that worked on an array reference were
annoyingly non-static, and then the whole mess with setIndexedTagName.

ApiFormatXml is also entirely annoying to deal with, as it liked to
throw exceptions if certain metadata wasn't provided that no other
formatter required. Its legacy also means we have this silly convention
of using empty-string rather than boolean true, annoying restrictions on
keys (leading to things that should be hashes being arrays of key-value
object instead), '*' used as a key all over the place, and so on.

So, changes here:
* ApiResult is no longer an ApiBase or a ContextSource.
* Wherever sensible, ApiResult provides a static method working on an
  arrayref and a non-static method working on internal data.
* Metadata is now always added to ApiResult's internal data structure.
  Formatters are responsible for stripping it if necessary. "raw mode"
  is deprecated.
* New metadata to replace the '*' key, solve the array() => '[]' vs '{}'
  question, and so on.
* New class for formatting warnings and errors using i18n messages, and
  support for multiple errors and a more machine-readable format for
  warnings. For the moment, though, the actual output will not be changing
  yet (see T47843 for future plans).
* New formatversion parameter for format=json and format=php, to select
  between BC mode and the modern output.
* In BC mode, booleans will be converted to empty-string presence style;
  modules currently returning booleans will need to use
  ApiResult::META_BC_BOOLS to preserve their current output.

Actual changes to the API modules' output (e.g. actually returning
booleans for the new formatversion) beyond the use of
ApiResult::setContentValue() are left for a future change.

Bug: T76728
Bug: T57371
Bug: T33629
Change-Id: I7b37295e8862b188d1f3b0cd07f66ac34629678f
2015-04-10 16:57:15 -04:00
Kunal Mehta
dda1696b7f Remove unused "swap" global function
Deprecated in 26e1e083e8, unused since r12411.

Change-Id: If328f09114ac5a5d23a300d9b0bbcd7d67e051c8
2015-04-10 18:07:38 +01:00
Chad Horohoe
d7c0a15cb5 Fix most of IPTest to use data providers
Change-Id: I7a41af445549f6688c559adbc5f16bdb428dae60
2015-04-10 09:03:58 -07:00
jenkins-bot
a7d2dcadd2 Merge "Replace use of assertType with assertInternalType and assertInstanceOf" 2015-04-10 14:51:14 +00:00
jenkins-bot
d3073583f1 Merge "Add @group Database tags to tests that need it" 2015-04-09 15:28:23 +00:00
Marius Hoch
85acf8afba Have phpunit.php exit with 1 in case it couldn't run the tests
Just makes more sense not to claim we could complete everything
if we actually couldn't.

Change-Id: I4ec3a2da8913ca546782919813eb18a05a5cca0a
2015-04-09 10:32:59 +02:00
aude
851552a5c4 Replace use of assertType with assertInternalType and assertInstanceOf
These are available in phpunit since 3.5.0, which I think
is reasonable to expect people to have at this point,
especially when we actually require 3.7.0 or higher in phpunit.php:

Use assertSame instead of assertArrayEquals in UIDGeneratorTest.
assertSame (and assertEqual) care about sortorder of the array,
and is perfectly sufficient in this case to check they array is correct.

if ( $puVersion !== '@package_version@' && version_compare( $puVersion, '3.7.0', '<' ) ) {
        die( "PHPUnit 3.7.0 or later required; you have {$puVersion}.\n" );
}

Change-Id: Ic32ab45110e4c4304ef046ae8d0e98c741255559
2015-04-09 01:15:44 -04:00
umherirrender
302dcdf19f Add test for IRC line for type protect/move_prot
All other log types already have a test, just move_prot is missing.

Change-Id: I97fdb21d3cb58847a883917b06294bc92dac9410
2015-04-08 12:12:15 +02:00
jenkins-bot
895987c4fc Merge "LocalFileTest does not require database access" 2015-04-07 16:14:02 +00:00
jenkins-bot
bab1f09f9c Merge "SearchUpdateTest does not require database access" 2015-04-07 16:13:56 +00:00
Kunal Mehta
77a813f21f registration: Support ResourceModuleSkinStyles
Structurally, it's set up exactly the same as ResourceModules, so we can
re-use the same code.

Bug: T91566
Change-Id: I7cd1330edc3e97b4658c81aac67071a90ac61fb6
2015-04-07 08:43:16 -07:00
jenkins-bot
755214a556 Merge "ResourceLoaderImage: Allow shorthand syntax" 2015-04-06 06:22:49 +00:00
jenkins-bot
5d7a5925a4 Merge "resourceloader: Omit empty parameters from mw.loader.implement calls" 2015-04-06 06:22:45 +00:00
Timo Tijhof
5754e1a9f9 objectcache: Add @covers for BagOStuffTest
Change-Id: I93a8074ba79b5ea66a984edabe009cc828e6fc4d
2015-04-05 16:02:53 +01:00
Ori Livneh
6333fa6191 Html::srcSet: allow density to be specified either with or without trailing 'x'
$wgLogoHD is meant to contain high-density alternatives for $wgLogo, but its
keys include the trailing 'x' (e.g., '1.5x'), making it unusable with
Html::srcSet(). Fix that by normalizing all density values to have a
single trailing 'x'.

Change-Id: I62cc3a9e4aeff3a7cb102de2965b8b40fd106c37
2015-04-05 05:22:47 +00:00
jenkins-bot
5bc573f770 Merge "Verify parameter for MapCacheLRU::has() can be passed to array_key_exists()" 2015-04-04 04:25:23 +00:00
Bryan Davis
1195e11a8a Move MWLogger classes to MediaWiki\Logger namespace
Move the MWLogger PSR-3 logging related classes into the
MediaWiki\Logger namespace. Create shim classes to ease migration of
existing MWLoggerFactory usage to the namespaced classes.

Bug: T93406
Change-Id: I359cc81fbd2dcf8937742311dcc7d3dee08747b0
2015-04-03 11:32:24 -07:00
Aaron Schulz
4bdbfe6c1b Removed BloomFilter classes
* This ends up being more complex than its worth
  and even more so for multi-DC support

Bug: T93006
Change-Id: Iaa774fe69061e42955b11dc82d30dba93208e606
2015-04-03 09:10:04 +00:00
Timo Tijhof
3cf2f18bb8 resourceloader: Omit empty parameters from mw.loader.implement calls
Follows-up ebeb29723, 1f393b6da, 0e719ce23.

Also:
* Add tests for ResourceLoader::makeLoaderImplementScript().
* Apply ResourceLoader::trimArray to makeLoaderImplementScript (new in c0c221bf).

This commit changes the load.php response to omit empty parameters.

These parameters were required until recently. The client has been
updated (1f393b6da and 0e719ce23) to make these optional, thus supporting
both the old server format and the change this commit makes

Clients with a tab open from before 0e719ce23 are naturally not
compatible with load.php responses from after this commit. Ensure
this is deployed several days after 0e719ce23 to reduce race
conditions of this nature.

(This is a re-submitted version of 4ce0c0da4)

Bug: T88879
Change-Id: I9e998261ee9b0b745e3339bc3493755c0cb04b6a
2015-04-03 07:20:51 +01:00
jenkins-bot
c864eab820 Merge "Don't trigger MessageBlobStore during tests" 2015-04-02 21:16:37 +00:00
Bartosz Dziewoński
a3e6df1690 ResourceLoaderImage: Allow shorthand syntax
array( "en,de,fr" => "foo.svg" ) now means the same as
array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" ).

Bug: T76539
Change-Id: I0bf82e06be3c5f94b6ac88bbc0437b5229ceb284
2015-04-02 21:27:06 +02:00
Max Semenik
08762b02de Minor cleanups
* Declare undeclared variables
* Kill unused variables
* Fix comments including PHPDoc

Change-Id: I60015f6b6740aa9088bda3745f4dc4e65e29fcb1
2015-04-02 16:22:42 +00:00
Kunal Mehta
5be95186d7 Don't require database access in ApiMainTest
It's still slow though because ApiTestCase does expensive things in
setUp(), but nothing in these tests need database access anymore.

Change-Id: Iaf431cc62fe23154c42967e6391c533fe1c5346e
2015-04-02 15:32:06 +00:00
jenkins-bot
13894d19fb Merge "Message: Clean up unit tests and improve code coverage" 2015-04-02 13:25:28 +00:00
Timo Tijhof
86a771beff Message: Clean up unit tests and improve code coverage
* Remove unnecessary use of ReflectionClass. It was testing
  internal properties that aren't part of the API. Using the
  getters instead.

* Remove need for func_get_args that was making the test more
  complex and the data provider hard to read. Simply maintain
  it as array of expected params and array of variadic arguments.

* Rename tests to more closely match tested methods.

* Rename data providers to provide*, and make them static.

* Reorder tests to more closely match logical order of the class.

* Improve line coverage from 31% to 67%.

Also:
* Remove testParams (dupes testConstructorParams).
* Add tests for RawMessage class.
* Add tests for transformation and parsing.
* Add tests for wfMessage().
* Add tests for Message::newFrom*.
* Add tests for "$*" replacement.
* Add tests for __toString.

Change-Id: I2b183a66f9e9f51bd800088e174b1ae4d3284d8d
2015-04-02 08:36:19 +01:00
Timo Tijhof
8b1d94082d User: Add unit tests for getId, isAnon and isLoggedIn
Change-Id: Ie007d9da47df871f99ca19c4d7364f46f71c255b
2015-04-02 07:13:54 +00:00
jenkins-bot
e36a953cc2 Merge "tests: Clean up file headers" 2015-04-01 22:27:33 +00:00