getProperty('booted'); $prop->setValue($plugin, false); $plugin->boot(); self::assertNotFalse( has_action('init', ['WPMultiCity\\Taxonomy', 'do_register']), 'boot() must register Taxonomy on init' ); self::assertNotFalse( has_action('init', ['WPMultiCity\\PostType', 'do_register']), 'boot() must register PostType on init' ); self::assertNotFalse( has_action('acf/init', ['WPMultiCity\\FieldGroup', 'do_register']), 'boot() must register FieldGroup on acf/init' ); self::assertNotFalse( has_action('init', ['WPMultiCity\\ShortcodeDmr', 'do_register']), 'boot() must register ShortcodeDmr on init' ); } public function test_boot_is_idempotent_when_called_multiple_times(): void { if (!class_exists('ACF', false)) { eval('class ACF {}'); } // Reset the singleton's boot flag so this test is independent of // whatever previous tests did to the static instance. (We will add // the flag in GREEN.) $plugin = Plugin::instance(); $reflection = new \ReflectionClass($plugin); if ($reflection->hasProperty('booted')) { $prop = $reflection->getProperty('booted'); $prop->setValue($plugin, false); } \Brain\Monkey\Actions\expectAdded('init') ->with([\WPMultiCity\Taxonomy::class, 'do_register']) ->once(); \Brain\Monkey\Actions\expectAdded('init') ->with([\WPMultiCity\PostType::class, 'do_register']) ->once(); \Brain\Monkey\Actions\expectAdded('acf/init') ->with([\WPMultiCity\FieldGroup::class, 'do_register']) ->once(); \Brain\Monkey\Actions\expectAdded('init') ->with([\WPMultiCity\ShortcodeDmr::class, 'do_register']) ->once(); \Brain\Monkey\Actions\expectAdded('acf/init') ->with([\WPMultiCity\OptionsPage::class, 'do_register']) ->once(); \Brain\Monkey\Actions\expectAdded('acf/init') ->with([\WPMultiCity\TermMeta::class, 'do_register']) ->once(); \Brain\Monkey\Actions\expectAdded('template_redirect') ->with([\WPMultiCity\Redirect::class, 'handle'], 1) ->once(); \Brain\Monkey\Actions\expectAdded('wp') ->with([\WPMultiCity\Router::class, 'route'], 9999) ->once(); // plugin-update-checker registers its text-domain loader on init \Brain\Monkey\Actions\expectAdded('init') ->once(); $plugin->boot(); $plugin->boot(); $plugin->boot(); // Mockery verifies ->once() in tearDown. self::assertTrue(true); } }