registerForType('hero', $renderer); expect($registry->hasRenderer('hero'))->toBeTrue(); expect($registry->getRenderer('hero'))->toBe($renderer); }); it('can register multiple renderers', function () { $registry = new BlockRendererRegistry(); $heroRenderer = new HeroBlockRenderer(); $textRenderer = new TextBlockRenderer(); $registry->registerForType('hero', $heroRenderer); $registry->registerForType('text', $textRenderer); expect($registry->getRenderer('hero'))->toBe($heroRenderer); expect($registry->getRenderer('text'))->toBe($textRenderer); }); it('returns null for unregistered block type', function () { $registry = new BlockRendererRegistry(); expect($registry->getRenderer('unknown'))->toBeNull(); expect($registry->hasRenderer('unknown'))->toBeFalse(); }); it('can find renderer by supports method', function () { $registry = new BlockRendererRegistry(); $heroRenderer = new HeroBlockRenderer(); $registry->register($heroRenderer); $found = $registry->getRenderer('hero'); expect($found)->toBe($heroRenderer); }); it('can get all registered renderers', function () { $registry = new BlockRendererRegistry(); $heroRenderer = new HeroBlockRenderer(); $textRenderer = new TextBlockRenderer(); $registry->registerForType('hero', $heroRenderer); $registry->registerForType('text', $textRenderer); $all = $registry->getAllRenderers(); expect($all)->toHaveCount(2); expect($all['hero'])->toBe($heroRenderer); expect($all['text'])->toBe($textRenderer); }); it('overwrites renderer when registering same type twice', function () { $registry = new BlockRendererRegistry(); $renderer1 = new HeroBlockRenderer(); $renderer2 = new HeroBlockRenderer(); $registry->registerForType('hero', $renderer1); $registry->registerForType('hero', $renderer2); expect($registry->getRenderer('hero'))->toBe($renderer2); }); });