overrideConfigValues( [
// Run with the default useBundled=true
'PygmentizePath' => false,
// Silence wfWarn for the expected Shellbox error
MainConfigNames::DevelopmentWarnings => false,
] );
}
private function stubShellbox( ?BoxedResult $result, ?Exception $e ) {
$factory = $this->createStub( CommandFactory::class );
$command = new class ( $result, $e ) extends BoxedCommand {
private $result;
private $e;
public function __construct( $result, $e ) {
$this->result = $result;
$this->e = $e;
}
public function execute(): BoxedResult {
if ( $this->e ) {
throw $this->e;
}
return $this->result;
}
};
$factory->method( 'createBoxed' )->willReturn( $command );
$this->setService( 'ShellCommandFactory', $factory );
}
public static function provideHighlight() {
yield 'basic' => [
( new BoxedResult )
->stdout( '
x
'
];
yield 'pre-fallback for non-zero exit' => [
( new BoxedResult )
->stdout( 'Boo' )
->exitCode( 42 ),
null,
''
];
yield 'pre-fallback for network error (T292663)' => [
null,
new ShellboxError( 'Wazaaaa', 0 ),
''
];
}
/**
* @dataProvider provideHighlight
*/
public function testHighlightBasic( ?BoxedResult $result, ?Exception $e, string $expect ) {
$this->stubShellbox( $result, $e );
$status = SyntaxHighlight::highlight( '"example"', 'json' );
$this->assertSame( $expect, $status->getValue() );
}
public function testFetchGeneratedCss() {
// Check that pygments.generated.css was generated by running the maintenance script
$file = __DIR__ . '/../../modules/pygments.generated.css';
$fileContent = file_get_contents( $file );
$generatedCss = "/* Stylesheet generated by updateCSS.php */\n" . Pygmentize::fetchGeneratedCSS();
$this->assertEquals( $generatedCss, $fileContent );
}
}