assertEquals(CallbackType::HANDLER, $metadata->callbackType); $this->assertEquals('MyHandler', $metadata->class); $this->assertNull($metadata->method); $this->assertEquals(['arg1', 'arg2'], $metadata->args); } public function testFromCallableString(): void { $metadata = CallbackMetadata::fromCallable('MyClass::myMethod'); $this->assertEquals(CallbackType::STATIC_METHOD, $metadata->callbackType); $this->assertEquals('MyClass', $metadata->class); $this->assertEquals('myMethod', $metadata->method); $this->assertEquals([], $metadata->args); } public function testFromCallableArray(): void { $metadata = CallbackMetadata::fromCallable(['MyClass', 'myMethod']); $this->assertEquals(CallbackType::STATIC_METHOD, $metadata->callbackType); $this->assertEquals('MyClass', $metadata->class); $this->assertEquals('myMethod', $metadata->method); } public function testFromFactory(): void { $metadata = CallbackMetadata::fromFactory('MyFactory', 'create', ['param1']); $this->assertEquals(CallbackType::FACTORY, $metadata->callbackType); $this->assertEquals('MyFactory', $metadata->class); $this->assertEquals('create', $metadata->method); $this->assertEquals(['param1'], $metadata->args); } public function testToArrayAndFromArray(): void { $original = CallbackMetadata::fromHandler('MyHandler', ['arg1']); $array = $original->toArray(); $restored = CallbackMetadata::fromArray($array); $this->assertEquals($original->callbackType, $restored->callbackType); $this->assertEquals($original->class, $restored->class); $this->assertEquals($original->method, $restored->method); $this->assertEquals($original->args, $restored->args); } public function testIsCacheable(): void { $handler = CallbackMetadata::fromHandler('MyHandler'); $this->assertTrue($handler->isCacheable()); $callable = CallbackMetadata::fromCallable('MyClass::method'); $this->assertTrue($callable->isCacheable()); $factory = CallbackMetadata::fromFactory('MyFactory', 'create'); $this->assertTrue($factory->isCacheable()); $closure = new CallbackMetadata(CallbackType::CLOSURE, ''); $this->assertFalse($closure->isCacheable()); } }