diff options
Diffstat (limited to 'www/wiki/extensions/Scribunto/tests/phpunit/engines/LuaCommon/LuaDataProvider.php')
-rw-r--r-- | www/wiki/extensions/Scribunto/tests/phpunit/engines/LuaCommon/LuaDataProvider.php | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/www/wiki/extensions/Scribunto/tests/phpunit/engines/LuaCommon/LuaDataProvider.php b/www/wiki/extensions/Scribunto/tests/phpunit/engines/LuaCommon/LuaDataProvider.php new file mode 100644 index 00000000..c679557b --- /dev/null +++ b/www/wiki/extensions/Scribunto/tests/phpunit/engines/LuaCommon/LuaDataProvider.php @@ -0,0 +1,53 @@ +<?php + +// @codingStandardsIgnoreLine Squiz.Classes.ValidClassName.NotCamelCaps +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" ); + } + // Calling executeModule with null isn't the best idea, since it brings + // the whole export table into PHP and throws away metatables and such, + // but for this use case, we don't have anything like that to worry about + $this->exports = $engine->executeModule( $module->getInitChunk(), null, null ); + } + + 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; + } +} |