mediawiki-extensions-Scribunto/tests/engines/LuaSandbox/SandboxTest.php
Brad Jorsch db07787390 Cleanup backwards-compatibility code
https://www.mediawiki.org/wiki/Extension:Scribunto says that master
requires 1.25+, so let's remove checks for stuff that was added before
that.

* PPFrame::getTTL() was in 1.24.
* PPFrame::setTTL() was in 1.24.
* PPFrame::isVolatile() was in 1.24.
* Parser::fetchCurrentRevisionOfTitle() was in 1.24.
* ObjectCache::getLocalServerInstance() was added in 1.27, so restore the call to ObjectCache::newAccelerator() as BC.

This also removes BC with the php-luasandbox extension older than 1.6, which
was released before MediaWiki 1.22.

Bug: T148012
Change-Id: I36e37f3b65d0f167e1d28b00e0842d9721feee31
2016-10-13 11:07:44 -04:00

84 lines
2.2 KiB
PHP

<?php
// @codingStandardsIgnoreLine Squiz.Classes.ValidClassName.NotCamelCaps
class Scribunto_LuaSandboxTests extends Scribunto_LuaEngineTestBase {
protected static $moduleName = 'SandboxTests';
public static function suite( $className ) {
return self::makeSuite( $className, 'LuaSandbox' );
}
protected function getTestModules() {
return parent::getTestModules() + array(
'SandboxTests' => __DIR__ . '/SandboxTests.lua',
);
}
public function testArgumentParsingTime() {
if ( !wfGetRusage() ) {
$this->markTestSkipped( "getrusage is not available" );
}
$engine = $this->getEngine();
$parser = $engine->getParser();
$pp = $parser->getPreprocessor();
$frame = $pp->newFrame();
$parser->setHook( 'scribuntodelay', function () {
$ru = wfGetRusage();
$endTime = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6 + 0.5;
// Waste CPU cycles
do {
$ru = wfGetRusage();
$t = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
} while ( $t < $endTime );
return "ok";
} );
$this->extraModules['Module:TestArgumentParsingTime'] = '
return {
f = function ( frame )
return frame.args[1]
end,
f2 = function ( frame )
return frame:preprocess( "{{#invoke:TestArgumentParsingTime|f|}}" )
end,
f3 = function ( frame )
return frame:preprocess( "{{#invoke:TestArgumentParsingTime|f|<scribuntodelay/>}}" )
end,
}
';
$u0 = $engine->getInterpreter()->getCPUUsage();
$frame->expand(
$pp->preprocessToObj(
'{{#invoke:TestArgumentParsingTime|f|<scribuntodelay/>}}'
)
);
$this->assertLessThan( 0.25, $engine->getInterpreter()->getCPUUsage() - $u0,
'Argument access time was not counted'
);
$u0 = $engine->getInterpreter()->getCPUUsage();
$frame->expand(
$pp->preprocessToObj(
'{{#invoke:TestArgumentParsingTime|f2|<scribuntodelay/>}}'
)
);
$this->assertLessThan( 0.25, $engine->getInterpreter()->getCPUUsage() - $u0,
'Unused arguments not counted in preprocess'
);
$u0 = $engine->getInterpreter()->getCPUUsage();
$frame->expand(
$pp->preprocessToObj(
'{{#invoke:TestArgumentParsingTime|f3}}'
)
);
$this->assertGreaterThan( 0.25, $engine->getInterpreter()->getCPUUsage() - $u0,
'Recursive argument access time was counted'
);
}
}