On Thu, Nov 1, 2012 at 6:11 PM, Daniel Barrett <d...@vistaprint.com> wrote:
> I'm trying to test a parser tag extension with phpunit and have run into a
> strange problem. Whenever my extension calls $parser->recursiveTagParse(), 
> the unit
> test blows up in Parser.php, complaining that $parser->mOptions is a 
> non-object.
>
> The tag callback looks pretty normal:
>
> static function render($input, $argv, $parser, $frame) {
>   // ...
>   $parser->recursiveTagParse("something");
>   // ...
> }
>
> and I have unit tests that call render()directly:
>
> public function testMyTag() {
>   global $wgParser;
>   $this->assertEqual(MyTag::render("some text", array(), $wgParser, false));
> }
>
> (I don't like using $wgParser here, and maybe that's the root of my problems?)
> The tag works perfectly in the browser. Just not when unit-testing on the 
> command
> line.
>
> The blowup occurs in Parser.php::replaceVariables, when it calls
> $this->mOptions->getMaxIncludeSize().
>
> Any advice appreciated!!
> Thanks,
> DanB
>
>
>
> _______________________________________________
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l

You're calling the recursiveTagParse while the parser is not in a
"parsing" state.

The easiest way to do this is to have some text "yadda
yadda<mytag>foo</mytag>" and pass it to
$wgParser->parse, and have the parser being the thing calling your
callback. (If you're going to do that
approach you can even use older style parser tests text file with
$wgParserTestFiles if you wanted
as its basically doing the same thing)

You can also work around this (I believe anyhow) by doing something
complicated with
Parser->startExternalParse first and then doing what you are doing,
 but I've never really used that method and am not sure how it works.

Hope that helps,
-bawolff

_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to