mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
synced 2024-11-24 16:25:00 +00:00
337abb295f
Rework the LuaEngine tests to be entirely modular, so that every library need not add itself to one monolithic file. This also allows other extensions that add Lua modules to make unit tests without having to somehow inject them into a test class owned by Scribunto. The approach taken is similar to that used for Selenium for running tests against multiple browsers. Change-Id: I294b2a8195759c0e4fa211f879305a8eb66d9c9a
50 lines
1 KiB
PHP
50 lines
1 KiB
PHP
<?php
|
|
|
|
class Scribunto_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;
|
|
}
|
|
}
|