toBe(''); expect(BbcodeFormatter::format(''))->toBe(''); }); it('formats bbcode content', function (): void { $parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser'); $parserProp->setAccessible(true); $parserProp->setValue( \Mockery::mock(\s9e\TextFormatter\Parser::class) ->shouldReceive('parse') ->andReturn('') ->getMock() ); $rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer'); $rendererProp->setAccessible(true); $rendererProp->setValue( \Mockery::mock(\s9e\TextFormatter\Renderer::class) ->shouldReceive('render') ->andReturn('Bold') ->getMock() ); $html = BbcodeFormatter::format('[b]Bold[/b]'); expect($html)->toContain(''); }); it('initializes parser and renderer when not set', function (): void { $parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser'); $parserProp->setAccessible(true); $parserProp->setValue(null); $rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer'); $rendererProp->setAccessible(true); $rendererProp->setValue(null); $html = BbcodeFormatter::format('[b]Bold[/b]'); expect($html)->toBeString(); expect($parserProp->getValue())->not->toBeNull(); expect($rendererProp->getValue())->not->toBeNull(); }); it('build returns parser and renderer', function (): void { putenv('BBCODE_FORCE_FAIL'); unset($_ENV['BBCODE_FORCE_FAIL'], $_SERVER['BBCODE_FORCE_FAIL']); $ref = new ReflectionMethod(BbcodeFormatter::class, 'build'); $ref->setAccessible(true); $result = $ref->invoke(null); expect($result)->toBeArray(); expect($result)->toHaveCount(2); expect($result[0])->toBeInstanceOf(\s9e\TextFormatter\Parser::class); expect($result[1])->toBeInstanceOf(\s9e\TextFormatter\Renderer::class); }); it('formats with real build when parser is reset', function (): void { putenv('BBCODE_FORCE_FAIL'); unset($_ENV['BBCODE_FORCE_FAIL'], $_SERVER['BBCODE_FORCE_FAIL']); $parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser'); $parserProp->setAccessible(true); $parserProp->setValue(null); $rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer'); $rendererProp->setAccessible(true); $rendererProp->setValue(null); $html = BbcodeFormatter::format('[b]Bold[/b]'); expect($html)->toBeString(); expect($parserProp->getValue())->not->toBeNull(); expect($rendererProp->getValue())->not->toBeNull(); }); it('throws when bbcode formatter cannot initialize', function (): void { putenv('BBCODE_FORCE_FAIL=1'); $_ENV['BBCODE_FORCE_FAIL'] = '1'; $_SERVER['BBCODE_FORCE_FAIL'] = '1'; $parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser'); $parserProp->setAccessible(true); $parserProp->setValue(null); $rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer'); $rendererProp->setAccessible(true); $rendererProp->setValue(null); try { BbcodeFormatter::format('test'); $this->fail('Expected exception not thrown.'); } catch (Throwable $e) { expect($e)->toBeInstanceOf(RuntimeException::class); } finally { putenv('BBCODE_FORCE_FAIL'); unset($_ENV['BBCODE_FORCE_FAIL'], $_SERVER['BBCODE_FORCE_FAIL']); } }); afterEach(function (): void { \Mockery::close(); });