'test']); $this->assertSame('', $output); } public function testBeginEnd(): void { ob_start(); ob_implicit_flush(false); $widget = TestWidget::begin(['id' => 'test']); $this->assertTrue($widget instanceof TestWidget); TestWidget::end(); $output = ob_get_clean(); $this->assertSame('', $output); } /** * @see https://github.com/yiisoft/yii2/issues/19030 */ public function testDependencyInjection(): void { Yii::$container = new Container(); Yii::$container->setDefinitions([ TestWidgetB::class => [ 'class' => TestWidget::class ] ]); ob_start(); ob_implicit_flush(false); $widget = TestWidgetB::begin(['id' => 'test']); $this->assertTrue($widget instanceof TestWidget); TestWidgetB::end(); $output = ob_get_clean(); $this->assertSame('', $output); } public function testDependencyInjectionWithCallableConfiguration() { Yii::$container = new Container(); Yii::$container->setDefinitions([ TestWidgetB::className() => function () { return new TestWidget(['id' => 'test']); } ]); ob_start(); ob_implicit_flush(false); $widget = TestWidgetB::begin(['id' => 'test']); $this->assertTrue($widget instanceof TestWidget); TestWidgetB::end(); $output = ob_get_clean(); $this->assertSame('', $output); } /** * @depends testBeginEnd */ public function testStackTracking(): void { $this->expectException('yii\base\InvalidCallException'); TestWidget::end(); } /** * @depends testBeginEnd */ public function testStackTrackingDisorder(): void { $this->expectException('yii\base\InvalidCallException'); TestWidgetA::begin(); TestWidgetB::begin(); TestWidgetA::end(); TestWidgetB::end(); } /** * @depends testWidget */ public function testEvents(): void { $output = TestWidget::widget([ 'id' => 'test', 'on init' => function ($event): void { echo ''; }, 'on beforeRun' => function (WidgetEvent $event): void { echo ''; }, 'on afterRun' => function (WidgetEvent $event): void { $event->result .= ''; }, ]); $this->assertSame('', $output); } /** * @depends testEvents */ public function testPreventRun(): void { $output = TestWidget::widget([ 'id' => 'test', 'on beforeRun' => function (WidgetEvent $event): void { $event->isValid = false; }, ]); $this->assertSame('', $output); } } class TestWidget extends Widget { /** * {@inheritdoc} */ public function run() { return 'id . '>'; } } class TestWidgetA extends Widget { public static $stack = []; } class TestWidgetB extends Widget { }