Commit graph

217 commits

Author SHA1 Message Date
Kunal Mehta d433cae33a Add strict.lua to replace "Module:No globals"
This is being backported because many users copy lua modules from
Wikipedia, and thus benefit from forwards-compatibility.

For the most part, it is a good idea to avoid global variables and use
`local` variables instead. Quoting from the ScopeTutorial[1], "The
general rule is to always use local variables, unless it's necessary for
every part of your program to be able to access the variable (which is
very rare)."

Wikimedia module authors have written "Module:No globals", which errors
on the use of any global variable. On the English Wikipedia, this is
used on 32% of pages (18 million). Wikidata[2] indicates that it's been
copied to 334 other wikis.

Lua itself distributes an extra named "strict.lua"[3], which is what
this is based off of. Similar to bit32.lua, this is a pure-Lua library
that can be imported/enabled with `require( "strict" )` at the top of a
module.

The two changes I made from Lua's strict is to exempt the `arg` key,
which is used internally by Scribunto, and remove `what()`, since we
don't enable access to `debug.getinfo()` for security reasons.

[1] https://lua-users.org/wiki/ScopeTutorial
[2] https://www.wikidata.org/wiki/Q16748603
[3] http://www.lua.org/extras/5.1/strict.lua

(Cherry-picked from 829c53ef05)

Bug: T209310
Change-Id: I46ee6f630ac6b26c68c31becd1f3b9d961bcab29
2022-11-07 06:04:50 +00:00
Umherirrender 99ab75226b phpcs: Fix SuperfluousVariadicArgComment
Change-Id: Ib14f2aa18e43ef7ae621b6281fecd47e8bd3899c
2020-06-27 13:45:24 +02:00
libraryupgrader d10519de40 build: Updating mediawiki/mediawiki-codesniffer to 31.0.0
The following sniffs are failing and were disabled:
* MediaWiki.Commenting.VariadicArgument.SuperfluousVariadicArgComment

Additional changes:
* Replaced "jakub-onderka" packages with "php-parallel-lint".

Change-Id: I97d1101854d87f7d0d4c8f14b629bee75df6030d
2020-05-30 06:09:47 +00:00
Brad Jorsch 34fc672f6d Add tests and type checking for mw.addWarning()
Testing was overlooked when this was added in Ibdd2506f.

Change-Id: Ie17020e3082668180dfa1d6532946891ea7951ea
2020-05-08 17:05:11 +00:00
libraryupgrader 9facd741cc build: Updating dependencies
composer:
* mediawiki/mediawiki-codesniffer: 29.0.0 → 30.0.0

npm:
* eslint-config-wikimedia: 0.15.0 → 0.15.3
* grunt-stylelint: 0.14.0 → 0.15.0
* stylelint-config-wikimedia: 0.9.0 → 0.10.1

Change-Id: I684372efb0248862700184546a5172bfd6d81ae0
2020-04-22 19:07:11 +00:00
C. Scott Ananian a73ac7bd4e Don't invoke Parser::__construct directly
This has been deprecated since 1.34.  Modern code should use the Parser or
ParserFactory service.

Change-Id: I74efda708470efeb82f8f80346ec1ee7e9fd8f2b
2020-04-16 16:32:58 -04:00
James D. Forrester 4a9b2e61e7 tests: Mark non-LuaSandbox tests as @group Standalone
This means that these tests are only run for test runs on this repo,
and will not be run when this repo is included in CI as a dependency
of any other repos, or the Wikimedia-wide gate. Any changes to other
repos are implicitly assumed to be unable to break these tests.

Bug: T125050
Change-Id: I7b77c0627f3fbe9dfbbf3d63cbd57e943d328555
2020-04-09 12:59:56 -07:00
C. Scott Ananian 5565d3d3d2 Update parserTests to v2 (tidy by default)
Bug: T174199
Bug: T249194
Change-Id: I23ccb612c940b98ca9da46a2e0848ccfe70e695d
2020-04-02 13:50:52 -04:00
Umherirrender 92587641dc Use MediaWikiServices::getContentLanguage()
This required MediaWiki 1.32

Change-Id: Iff717eba8f4fad1e80229ebcf317ceec81667846
2020-03-16 17:58:26 +00:00
DannyS712 fb850e853c Don't fall back to global $wgUser when creating ParserOptions
Pass a user when relevant, or use ParserOptions::newFromAnon()

Bug: T246861
Change-Id: I44adb6d5c037de2fb05573cde3c7356cb73e8b42
2020-03-07 02:33:24 +00:00
Brad Jorsch 66f83331db Record vary-page-id when ID is accessed via mw.title
This triggers a needed reparse when a new page is created using a module
that accesses the page ID.

Bug: T237746
Change-Id: I5564c2e896dd2a025c5a886ca478c377fac83e74
2020-02-13 17:24:41 +00:00
Brad Jorsch 633ff1ff2d LuaStandaloneInterpreterTest: Use assertEqualsWithDelta
Using the $delta parameter to assertEquals was deprecated in PHPUnit 8.

Change-Id: Iab5ead5a075bf7481a972b3b9e94cc3e754f1cd3
2020-01-23 11:53:33 -05:00
Daimona Eaytoy 2e1306fa45 Kill hack for the PHPUnit migration
Bug: T192167
Change-Id: Ic86f6fc67555d2e678ce46f6ad34a25236b560af
2020-01-23 16:22:40 +00:00
Brad Jorsch 3a19bb8b0c Document a lot of methods
Clear up a bunch of phpcs ignores by documenting many methods.

Also remove Scribunto_LuaError::setLineMap(), which has apparently never
been used since it was added in Ia51f439e.

Change-Id: I763bcdbc7edbbb8e4600495a03acca3439fc0ec9
2020-01-17 23:03:03 +00:00
Max Semenik 0d6a4da3d5 Make tests pass on PHPUnit 8
Bug: T192167
Change-Id: Idf87f4c0f0d74848a0cc8f131a84c87e8eeb7809
2020-01-16 16:04:33 +03:00
libraryupgrader 6adb1c423b build: Updating mediawiki/mediawiki-codesniffer to 29.0.0
The following sniffs are failing and were disabled:
* MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate
* MediaWiki.Commenting.FunctionComment.MissingParamName
* MediaWiki.Commenting.FunctionComment.MissingParamTag
* MediaWiki.Commenting.FunctionComment.WrongStyle

Change-Id: Ifa2c7a7febc1e06c28318305cfef0b0103c6e8eb
2020-01-14 14:49:35 +00:00
Brad Jorsch 8a8e51d8c7 Set $wgFragmentMode for UriLibraryTest
It affects the behavior of mw.uri.anchorEncode()

Change-Id: I3a704507cda79a2a48ec58ce9b7500667ea0dda3
2020-01-02 14:51:11 -05:00
Umherirrender ef8aff71ec Use class name resolution to refer to class names
::class is validated by phan and avoids misspelled class names

Change-Id: I613d5df56fcee6099e4294f5c6df078aafad1210
2020-01-02 16:59:55 +00:00
Umherirrender 9c6f6f905a Split all classes in own files
Move autoload entries for test to TestAutoloadClasses key

Change-Id: Ie705db0e7225600b7b498cfa134733a65f1ae1c9
2019-12-21 10:20:18 +01:00
Florian b0103abfed Fix type after upgrading to phpunit 7
See I77ea560f4a5344bd1c356ecc3e7857968ad829b8

Change-Id: Ie9c83cf44e6555a9ae1f3182fdc3cc4269329fa7
2019-11-21 17:55:05 +01:00
Brad Jorsch 0ee41431c2 Don't error if someone returns a built-in function from their module
This is getting close to the point of "don't do that, just wrap the
built-in". But since it's a regression in a recent patch, let's restore
the old behavior here.

Bug: T236092
Change-Id: Ieddc23d942bc91fd0246ae14d8a4af7719e3834f
2019-10-23 08:41:40 +00:00
James D. Forrester de636b2bc6 Collapse uses of now-deprecated wfGetRusage()
It can no longer return false.

Depends-On: Ibab4825b53cd76053f1e4ce8986dfac8054a04f8
Change-Id: Ic70d0304e9cd04d4011671e498146e4b5994cbe9
2019-10-22 11:34:35 +01:00
Brad Jorsch 1617bb3deb Return correct frame from mw.getCurrentFrame in certain edge cases
When an #invoke is passed as an argument to another #invoke,
mw.getCurrentFrame() at module scope will return the wrong frame.

On the PHP side, we need to always reset the frame when processing
an #invoke, not just when there's no frame already. I don't remember why
I82dde43e wasn't done that way, but changing it doesn't make any tests
fail and Scribunto tends to have good tests.

On the Lua side, we need to do the same. The logic wih mw.getCurrentFrame()
using a global that gets stored, modified, and reset in several places
was getting confusing, so this patch reworks the logic to inject a
globalless mw.getCurrentFrame() into each #invoke's cloned environment
instead.

Bug: T234368
Change-Id: I8cb5bc4dc14c9b448c9f267e0539daa75e72af4c
2019-10-14 02:39:13 +00:00
James D. Forrester 4a93593abf build: Upgrade mediawiki-codesniffer to v28.0.0
Change-Id: Ie4cb4cbee163943cd159eb0ad1d7deaac10e68d8
2019-10-11 11:31:29 -07:00
Max Semenik ba2d2655c4 Remove HHVM check
Change-Id: I15f607a9558c73e92bf4187f56eaad9e15d86dae
2019-10-06 03:02:01 -07:00
Max Semenik 8d9e489778 Update to use PHPUnit 6 class names
Bug: T192167
Change-Id: Ia342080fb1935e54ac42c2b3a07ab9b2a23dde42
2019-10-05 20:17:05 -07:00
Amir Sarabadani 167e4cb60f Clean up most of b/c for phpunit4
We don't support phpunit4 anymore:
https://w.wiki/9UT

Change-Id: I13a4a09e21a13c8f1e29b9e0ca29f05d1eac997d
2019-10-06 00:11:37 +02:00
Amir Sarabadani 248dcae392 Split LuaEngineTestBase to LuaEngineUnitTestBase and LuaEngineTestBase
And use the unit test base on most of the tests, except the ones that need
database. This makes tests considerably faster.

Bug: T230701
Change-Id: Ifbede1e2610c672b4d8a83ce41f74200e0c97be9
2019-08-31 10:51:26 +02:00
Amir Sarabadani 013d57f98c Avoid using MediaWikiIntegrationTestCase on unit tests
MediaWikiIntegrationTestCase (formerlly know as MediaWikiTestCase)
is a very heavy class that resets the database, caches and services between
every test.

Bug: T229180
Change-Id: I3d328d6ba7009e87c0f432a4f8d84d774ea57e5f
2019-08-14 12:31:47 +00:00
Amir Sarabadani 2fd7287512 Add group database to TitleLibraryTest
This test writes to the database (like $page->doEditContent())
so it needs group database

Change-Id: I13316432048090e8d1fd5416eda1c7707f589270
2019-08-03 20:07:09 +02:00
Amir Sarabadani 5be8a76d0f Reduce CPU timeout time in testTimeLimit
This makes these tests the slowest ones to run

Change-Id: Ibfb021d63432f556d1eb5de31341a5bc64d76a85
2019-07-23 14:47:14 +00:00
Brad Jorsch 88be4ec461 LuaInterpreterTest: Limit the busy loop
The test currently runs a busy loop that does string operations 1
billion times, when really it just needs something that takes more than
2 seconds of CPU time. On the other hand, there's another test that uses
the same method to run only 100 string operations for a different test.

Add a second parameter to have it exit early if enough CPU time has been
used, and use it in the first test.

Bug: T220685
Change-Id: I32309f049bcfb2e1310651818ff8674f0a311f40
2019-06-20 12:11:40 -04:00
Brad Jorsch 2e79d0a719 mw.uri: Support IP-Literal syntax
RFC 3986 allows IPv6 literals (and future IP versions) by having the
"host" enclosed in brackets, like `http://[2001:db8::]`. mw.uri should
handle these appropriately.

Bug: T223267
Change-Id: I6f712b87bc376cf606c6c2ebbe80176037d6dddb
2019-05-19 07:55:29 +00:00
Kunal Mehta 8328acb9b1 Upgrade to newer phan
Bug: T216940
Change-Id: If8c2027f6bb7b91504fb51a3d2668b6d929b5da1
2019-03-20 21:19:37 -07:00
Arlo Breault cd9de940eb Update tests to match parser changes
Bug: T208070
Bug: T218702
Depends-On: I8b6a8c8241a8766fdccdcac45553298fa23a5046
Change-Id: I15c81a2c15311406b643fee5ec0ae597c1887b3f
2019-03-19 13:38:48 -04:00
MGChecker 4bc7abb0ac Set "TemplateSandboxEditNamespaces" in extension.json
If TemplateStyles installed, then enable it in the Module namespace
by default. This change is analogous to I96d9601ff80c2d3eb052c01.

Since both extensions use the ContentHandlerDefaultModelFor hook, Scribunto
will check if the sanitized-css model has already been set, and if so, not
override it. If the page is in NS_MODULE, it will set the content model to
Scribunto, but allow further hooks to override it, in which case it is
expected that TemplateStyles would set it to sanitized-css.

Bug: T200914
Depends-On: I2fa9b822ee39bcc5f95a293c8c4aad4d53ede30a
Change-Id: I7a9b445accde35e4a5e7d13100c646f211d21afe
2019-01-15 09:39:30 -08:00
Kunal Mehta 3b0082e6b2 Add test for ScribuntoHooks::contentHandlerDefaultModelFor()
Change-Id: Ibce964bb308aa88b14a179310436db9c48640f76
2019-01-14 17:36:52 +00:00
Brad Jorsch ec103b6966 Scribunto_LuaError: Make ->getMessage() return UTF-8 text
It's easily possible for Lua to raise errors where the string is not
valid UTF-8. When we turn that into a Scribunto_LuaError, we should
normalize it so other things don't break.

Bug: T208689
Change-Id: Idc5514261e99d64222b86877dd0500d425a26988
2018-12-11 14:46:56 -05:00
Marius Hoch ab15dfe4ff Make sure interface functions with the same name don't clash
Test case (greatly simplified) by Anomie.

Bug: T211203
Change-Id: Id05c226b80343b1c333ae622d7390a96ff88ea99
2018-12-06 08:15:43 +01:00
Lucas Werkmeister (WMDE) a55cfc2078 Revert "Adding a unit test for CVE-2014-5461 in Scribunto."
This test causes spurious CI failures in other projects; to unblock them
for now, remove the test again until we can figure out how to make it
work better.

This reverts commit 7a7f522676.

Bug: T209232
Change-Id: Id2eeeb781b7a8a6298ba06d78bab238b37dac9ca
2018-11-30 14:14:40 +00:00
Mogmog123 7a7f522676 Adding a unit test for CVE-2014-5461 in Scribunto.
Bug: T209232
Change-Id: I84a4ec014875764bcba4d603b0e27d210d4a9308
2018-11-26 20:36:45 +00:00
Umherirrender 55bd9d22bb Add method scope visibility
Change-Id: I2efe0f71266d70e9a41e044406d82ef7daa31296
2018-11-19 21:18:12 +00:00
Brad Jorsch 18c08c23fc ustring: Match undocumented string.gsub behavior
As documented, string.gub( 'foo', '%a', '%1' ) should raise an invalid
capture index error because there is no capture with index 1 in the
pattern. But in fact it treats %1 as %0 in this situation. The ustring
library should match this behavior.

This patch also adds some tests for the behavior of gsub with table and
function replacements when the pattern does have captures.

Bug: T207623
Change-Id: Ie3e6c2eafa4a05989815c62c7037167642581751
2018-11-01 03:59:35 +00:00
libraryupgrader 8b489ca160 build: Updating mediawiki/mediawiki-codesniffer to 22.0.0
And updating CoC link to use Special:MyLanguage (T202047).

Change-Id: I091003f69b82c7cacc4cda320a38b1b07f3cdb6b
2018-09-03 21:33:35 +00:00
Max Semenik eb8ccf03db Get rid of call_user_func_array()
Yay PHP7!

Change-Id: I777ed78d22efbddacaab22c4614a0defa6ad3f94
2018-07-03 19:40:19 -07:00
Kunal Mehta d91a8cf8a0 Add @covers tags to all tests
Bug: T195160
Change-Id: I77ce544e9c166fef6c6fb02f67d1de6ddf0c2465
2018-05-29 11:37:27 -07:00
Kunal Mehta f76ba3c465 Disable Squiz.Classes.ValidClassName.NotCamelCaps globally
Instead of per-file. This happens to also fix a false positive with the
PhpunitAnnotations sniff.

Change-Id: I22621c37217ed2db9d8b3591df1a1421c25fa7f6
2018-05-24 22:26:11 -07:00
Brad Jorsch 32718af677 ustring: Handle invalid types in gsub
If the replacement table or function results in a value that isn't a
string or number (or nil), string.gsub raises an error. Have ustring
raise the same error.

Bug: T195326
Change-Id: Ic36f9f5d7adc0c14e7a4a94d3747335107acd8b6
2018-05-22 18:55:49 -04:00
Kunal Mehta d245edbb94 Add phan configuration
Manually import LuaSandbox's git repository as a composer dependency to
provide the PHP stubs for phan.

Change-Id: I6226b9211f31d829da5a2775c6f5cf3599dd8ebc
2018-05-14 18:41:59 -07:00
Jayprakash12345 7da38c8e10 Update extensions to take advantage of parser test autodiscovery
Bug: T170037
Change-Id: Ifeffbf7a27dfd4915998159617d37d4d9b9a1c17
2018-04-13 15:07:17 +00:00