on(CommandRegistry::EVENT_REGISTERED, function ($data) use (&$count){ $this->assertEquals('foo', $data); $count++; }); $reg->register('foo', function () {}); $reg->register('foo', function () {}); $this->assertEquals(1, $count); } public function testRemovingCommandEmitsEvent() { $count = 0; $reg = new CommandRegistry(); $reg->on(CommandRegistry::EVENT_UNREGISTERED, function ($data) use (&$count){ $this->assertEquals('foo', $data); $count++; }); $reg->register('foo', function () {}); $reg->unregister('foo'); $reg->unregister('foo'); $this->assertEquals(1, $count); } public function testFindingCommands() { $cmda = function () {}; $cmdb = function () {}; $reg = new CommandRegistry(); $reg->register('a', $cmda); $reg->register('b', $cmdb); $this->assertEquals('a', $reg->find('a')?->getName()); $this->assertEquals('b', $reg->find('b')?->getName()); } public function testGettingCommandNames() { $cmda = function () {}; $cmdb = function () {}; $reg = new CommandRegistry(); $reg->register('a', $cmda); $reg->register('b', $cmdb); $this->assertEquals(['a','b'], $reg->getNames()); } }