<?php 
 
/* 
 * This file is part of Chevere. 
 * 
 * (c) Rodolfo Berrios <rodolfo@chevere.org> 
 * 
 * For the full copyright and license information, please view the LICENSE 
 * file that was distributed with this source code. 
 */ 
 
declare(strict_types=1); 
 
namespace Chevere\Xr\Tests; 
 
use function Chevere\Message\message; 
use Chevere\Throwable\Errors\TypeError; 
use Chevere\Xr\XrThrowableParser; 
use Exception; 
use PHPUnit\Framework\TestCase; 
 
final class XrThrowableParserTest extends TestCase 
{ 
    public function testTopLevel(): void 
    { 
        $throwable = new Exception('foo'); 
        $parser = new XrThrowableParser($throwable, ''); 
        $this->assertSame(Exception::class, $parser->topic()); 
        $this->assertSame( 
            Exception::class, 
            $parser->throwableRead()->className() 
        ); 
        $this->assertSame('??Throwable', $parser->emote()); 
        $this->assertStringContainsString(Exception::class, $parser->body()); 
    } 
     
    public function testNamespaced(): void 
    { 
        $throwable = new TypeError(message: message('foo')); 
        $parser = new XrThrowableParser($throwable, ''); 
        $this->assertSame('TypeError', $parser->topic()); 
        $this->assertSame( 
            TypeError::class, 
            $parser->throwableRead()->className() 
        ); 
        $this->assertStringContainsString( 
            '<div class="throwable-message">foo</div>', 
            $parser->body() 
        ); 
    } 
 
    public function testWithPrevious(): void 
    { 
        $throwable = new Exception('foo', previous: new Exception('bar')); 
        $parser = new XrThrowableParser($throwable, ''); 
        $this->assertStringContainsString( 
            '<div class="throwable-message">bar</div>', 
            $parser->body() 
        ); 
    } 
 
    public function testWithExtra(): void 
    { 
        $extra = 'EXTRA EXTRA! TODD SMELLS'; 
        $throwable = new Exception('foo'); 
        $parser = new XrThrowableParser($throwable, $extra); 
        $this->assertStringContainsString($extra, $parser->body()); 
    } 
} 
 
 |