parseOptions( $test['options'] ); // XXX FIXME PRIVATE // Skip tests targetting features Parsoid doesn't (yet?) support if ( isset( $opts['pst'] ) || isset( $opts['msg'] ) || isset( $opts['section'] ) || isset( $opts['replace'] ) || isset( $opts['comment'] ) || isset( $opts['preload'] ) ) { return false; } $teardownGuard = $this->perTestSetup( $test ); $context = RequestContext::getMain(); $user = $context->getUser(); $options = ParserOptions::newFromContext( $context ); $options->setTimestamp( $this->getFakeTimestamp() ); $revId = 1337; // see Parser::getRevisionId() $title = isset( $opts['title'] ) ? Title::newFromText( $opts['title'] ) : $this->defaultTitle; if ( isset( $opts['lastsavedrevision'] ) ) { $content = new WikitextContent( $test['input'] ); $title = Title::newFromRow( (object)[ 'page_id' => 187, 'page_len' => $content->getSize(), 'page_latest' => 1337, 'page_namespace' => $title->getNamespace(), 'page_title' => $title->getDBkey(), 'page_is_redirect' => 0 ] ); $revRecord = new MutableRevisionRecord( $title ); $revRecord->setContent( SlotRecord::MAIN, $content ); $revRecord->setUser( $user ); $revRecord->setTimestamp( strval( $this->getFakeTimestamp() ) ); $revRecord->setPageId( $title->getArticleID() ); $revRecord->setId( $title->getLatestRevID() ); $oldCallback = $options->getCurrentRevisionRecordCallback(); $options->setCurrentRevisionRecordCallback( function ( Title $t, $parser ) use ( $title, $revRecord, $oldCallback ) { if ( $t->equals( $title ) ) { return $revRecord; } else { return $oldCallback( $t, $parser ); } } ); } if ( isset( $opts['maxincludesize'] ) ) { $options->setMaxIncludeSize( $opts['maxincludesize'] ); } if ( isset( $opts['maxtemplatedepth'] ) ) { $options->setMaxTemplateDepth( $opts['maxtemplatedepth'] ); } $local = isset( $opts['local'] ); $parser = $this->getParser(); if ( isset( $opts['styletag'] ) ) { // For testing the behavior of