diff --git a/tests/engines/LuaCommon/LuaEnvironmentComparisonTest.php b/tests/engines/LuaCommon/LuaEnvironmentComparisonTest.php new file mode 100644 index 00000000..7c18e1ee --- /dev/null +++ b/tests/engines/LuaCommon/LuaEnvironmentComparisonTest.php @@ -0,0 +1,103 @@ + 50000000, + 'cpuLimit' => 30, + 'allowEnvFuncs' => true, + ); + var $standaloneOpts = array( + 'errorFile' => null, + 'luaPath' => null, + 'memoryLimit' => 50000000, + 'cpuLimit' => 30, + 'allowEnvFuncs' => true, + ); + + protected $engines = array(); + + function setUp() { + parent::setUp(); + + $parser = new Parser; + $options = new ParserOptions; + $options->setTemplateCallback( array( $this, 'templateCallback' ) ); + $parser->startExternalParse( Title::newMainPage(), $options, Parser::OT_HTML, true ); + + try { + $engine = new Scribunto_LuaSandboxEngine( + array( 'parser' => $parser ) + $this->sandboxOpts + ); + $engine->getInterpreter(); + $this->engines['LuaSandbox'] = $engine; + } catch ( Scribunto_LuaInterpreterNotFoundError $e ) { + $this->markTestSkipped( "LuaSandbox interpreter not available" ); + return; + } + + try { + $engine = new Scribunto_LuaStandaloneEngine( + array( 'parser' => $parser ) + $this->standaloneOpts + ); + $engine->getInterpreter(); + $this->engines['LuaStandalone'] = $engine; + } catch ( Scribunto_LuaInterpreterNotFoundError $e ) { + $this->markTestSkipped( "LuaStandalone interpreter not available" ); + return; + } + } + + function tearDown() { + foreach ( $this->engines as $engine ) { + $engine->destroy(); + } + $this->engines = array(); + parent::tearDown(); + } + + private function getGlobalEnvironment( $engine ) { + static $script = <<getInterpreter()->loadString( $script, 'script' ); + return $engine->getInterpreter()->callFunction( $func ); + } + + function testGlobalEnvironment() { + // Grab the first engine as the "standard" + reset( $this->engines ); + list( $firstName, $firstEngine ) = each( $this->engines ); + $firstEnv = $this->getGlobalEnvironment( $firstEngine ); + + // Test all others against it + while ( list( $secondName, $secondEngine ) = each( $this->engines ) ) { + $secondEnv = $this->getGlobalEnvironment( $secondEngine ); + $this->assertEquals( $firstEnv, $secondEnv, + "Environments for $firstName and $secondName are not equivalent" ); + } + } +}