mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
synced 2024-11-26 17:20:07 +00:00
c84d699e9b
The existing unit tests work, but the setup is really not amenable to the addition of additional tests in a modular fashion. This splits things out so there is a framework for tests in Lua, and all a module has to do on the Lua side is supply a list of functions to call and results to expect. And then on the php side, only one array entry and two short functions need to be added to LuaSandboxEngineTest to run the tests. Change-Id: Ib241b246aa0c7223c33887b38a5858582d7d31b0
50 lines
1 KiB
PHP
50 lines
1 KiB
PHP
<?php
|
|
|
|
class LuaDataProvider implements Iterator {
|
|
protected $engine = null;
|
|
protected $exports = null;
|
|
protected $key = 1;
|
|
|
|
public function __construct( $engine, $moduleName ) {
|
|
$this->engine = $engine;
|
|
$this->key = 1;
|
|
$module = $engine->fetchModuleFromParser(
|
|
Title::makeTitle( NS_MODULE, $moduleName )
|
|
);
|
|
if ( $module === null ) {
|
|
throw new Exception( "Failed to load module $moduleName" );
|
|
}
|
|
$this->exports = $module->execute();
|
|
}
|
|
|
|
public function destroy() {
|
|
$this->engine = null;
|
|
$this->exports = null;
|
|
}
|
|
|
|
public function rewind() {
|
|
$this->key = 1;
|
|
}
|
|
|
|
public function valid() {
|
|
return $this->key <= $this->exports['count'];
|
|
}
|
|
|
|
public function key() {
|
|
return $this->key;
|
|
}
|
|
|
|
public function next() {
|
|
$this->key++;
|
|
}
|
|
|
|
public function current() {
|
|
return $this->engine->getInterpreter()->callFunction( $this->exports['provide'], $this->key );
|
|
}
|
|
|
|
public function run( $key ) {
|
|
list( $ret ) = $this->engine->getInterpreter()->callFunction( $this->exports['run'], $key );
|
|
return $ret;
|
|
}
|
|
}
|