setAccessible(true); $prop->setValue(null, null); } private function makeMockRetrieverReturning(?CloudObject $object) : ObjectRetriever { $mock = $this->createMock(ObjectRetriever::class); $mock->method('getCloudObject')->willReturn($object); return $mock; } public function testAcceptsIRI(): void { $coid = new IRI('coid://cloudobjects.io'); $mockObject = $this->createMock(CloudObject::class); $mockRetriever = $this->createMock(ObjectRetriever::class); $mockRetriever->expects($this->once()) ->method('getCloudObject') ->with($coid) ->willReturn($mockObject); ObjectRetrieverFacade::setObjectRetriever($mockRetriever); $this->assertSame($mockObject, cloudobjects_get_object($coid)); } public function testConvertsStringToIRI(): void { $mockObject = $this->createMock(CloudObject::class); $mockRetriever = $this->createMock(ObjectRetriever::class); $mockRetriever->expects($this->once()) ->method('getCloudObject') ->with($this->callback(fn($arg) => $arg instanceof IRI && (string)$arg === 'coid://cloudobjects.io')) ->willReturn($mockObject); ObjectRetrieverFacade::setObjectRetriever($mockRetriever); $this->assertSame($mockObject, cloudobjects_get_object('coid://cloudobjects.io')); } public function testThrowsOnInvalidArgumentType(): void { ObjectRetrieverFacade::setObjectRetriever($this->makeMockRetrieverReturning(null)); $this->expectException(InvalidArgumentException::class); cloudobjects_get_object(42); } }