Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4134044
BundleSizeTestBase.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
BundleSizeTestBase.php
View Options
<?php
namespace
MediaWiki\Tests\Structure
;
use
MediaWiki\MainConfigNames
;
use
MediaWiki\MediaWikiServices
;
use
MediaWiki\Request\FauxRequest
;
use
MediaWiki\ResourceLoader\Context
;
use
MediaWiki\ResourceLoader\DerivativeContext
;
use
MediaWiki\ResourceLoader\Module
;
use
MediaWikiIntegrationTestCase
;
use
Wikimedia\DependencyStore\KeyValueDependencyStore
;
use
Wikimedia\ObjectCache\HashBagOStuff
;
use
Wikimedia\Rdbms\IDatabase
;
use
Wikimedia\Rdbms\LBFactory
;
/**
* Compare bundle sizes from each skin/extension bundlesize.config.json with ResourceLoader output.
*
* Extensions and skins can subclass this and override getTestCases with just their own bundlesize
* file. This allows one to run that test suite by its own, for faster CLI feedback.
*/
abstract
class
BundleSizeTestBase
extends
MediaWikiIntegrationTestCase
{
protected
function
setUp
():
void
{
parent
::
setUp
();
$db
=
$this
->
createMock
(
IDatabase
::
class
);
$db
->
method
(
'getSessionLagStatus'
)->
willReturn
(
[
'lag'
=>
0
,
'since'
=>
0
]
);
$lbFactory
=
$this
->
createMock
(
LBFactory
::
class
);
$lbFactory
->
method
(
'getReplicaDatabase'
)->
willReturn
(
$db
);
$this
->
setService
(
'DBLoadBalancerFactory'
,
$lbFactory
);
}
/**
* Adjustments for bundle size increases caused by core, to avoid breaking
* previously introduced extension tests.
*/
private
const
CORE_SIZE_ADJUSTMENTS
=
[
'mw.loader.impl'
=>
17
];
public
function
provideBundleSize
()
{
foreach
(
json_decode
(
file_get_contents
(
$this
->
getBundleSizeConfig
()
),
true
)
as
$testCase
)
{
yield
$testCase
[
'resourceModule'
]
=>
[
$testCase
];
}
}
/**
* @dataProvider provideBundleSize
* @coversNothing
*/
public
function
testBundleSize
(
$testCase
)
{
$maxSize
=
$testCase
[
'maxSize'
];
$projectName
=
$testCase
[
'projectName'
]
??
''
;
$moduleName
=
$testCase
[
'resourceModule'
];
if
(
is_string
(
$maxSize
)
)
{
if
(
str_contains
(
$maxSize
,
'KB'
)
||
str_contains
(
$maxSize
,
'kB'
)
)
{
$maxSize
=
(
float
)
str_replace
(
[
'KB'
,
'kB'
,
' KB'
,
' kB'
],
''
,
$maxSize
);
$maxSize
=
$maxSize
*
1024
;
}
elseif
(
str_contains
(
$maxSize
,
'B'
)
)
{
$maxSize
=
(
float
)
str_replace
(
[
' B'
,
'B'
],
''
,
$maxSize
);
}
}
$resourceLoader
=
MediaWikiServices
::
getInstance
()->
getResourceLoader
();
$resourceLoader
->
setDependencyStore
(
new
KeyValueDependencyStore
(
new
HashBagOStuff
()
)
);
$request
=
new
FauxRequest
(
[
'lang'
=>
'en'
,
'modules'
=>
$moduleName
,
'skin'
=>
$this
->
getSkinName
(),
]
);
$context
=
new
Context
(
$resourceLoader
,
$request
);
$module
=
$resourceLoader
->
getModule
(
$moduleName
);
$contentContext
=
new
DerivativeContext
(
$context
);
$contentContext
->
setOnly
(
$module
->
getType
()
===
Module
::
LOAD_STYLES
?
Module
::
TYPE_STYLES
:
Module
::
TYPE_COMBINED
);
$content
=
$resourceLoader
->
makeModuleResponse
(
$context
,
[
$moduleName
=>
$module
]
);
$contentTransferSize
=
strlen
(
gzencode
(
$content
,
9
)
);
$contentTransferSize
-=
array_sum
(
self
::
CORE_SIZE_ADJUSTMENTS
);
$message
=
$projectName
?
"$projectName: $moduleName is less than $maxSize"
:
"$moduleName is less than $maxSize"
;
$this
->
assertLessThan
(
$maxSize
,
$contentTransferSize
,
$message
);
}
/**
* @return string Path to bundlesize.config.json
*/
abstract
public
function
getBundleSizeConfig
():
string
;
/**
* @return string Skin name
*/
public
function
getSkinName
():
string
{
return
$this
->
getConfVar
(
MainConfigNames
::
DefaultSkin
);
}
}
/** @deprecated class alias since 1.42 */
class_alias
(
BundleSizeTestBase
::
class
,
'MediaWiki
\\
Tests
\\
Structure
\\
BundleSizeTest'
);
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Aug 19, 12:26 (3 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
74/2d/4cebad77cd08e38663bcf0096227
Default Alt Text
BundleSizeTestBase.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment