aRdata = new A(); } public function testGetType(): void { $this->assertEquals('A', $this->aRdata->getType()); } public function testSetAddress(): void { $address = '192.168.1.1'; $this->aRdata->setAddress($address); $this->assertEquals($address, $this->aRdata->getAddress()); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('The address "abc" is not a valid IPv4 address.'); $this->aRdata->setAddress('abc'); } public function testOutput(): void { $address = '192.168.1.1'; $this->aRdata->setAddress($address); $this->assertEquals($address, $this->aRdata->toText()); $this->assertEquals($address, $this->aRdata->toText()); } public function testFromText(): void { $text = '200.100.50.1'; /** @var A $a */ $a = new A(); $a->fromText($text); $this->assertEquals($text, $a->getAddress()); } /** * @throws DecodeException */ public function testWire(): void { $address = '200.100.50.1'; $expectation = inet_pton($address); /** @var A $a */ $a = new A(); $a->fromWire($expectation); $this->assertEquals($expectation, $a->toWire()); $this->assertEquals($address, $a->getAddress()); } public function testToWireThrowsExceptionIfAddressIsMalformed(): void { $a_prime = new class() extends A { public function __construct() { $this->address = 'abc'; } }; $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('The IP address "abc" cannot be encoded. Check that it is a valid IP address.'); $a_prime->toWire(); } /** * @throws DecodeException */ public function testFromWire(): void { $wire = pack('C6', 0x07, 0xC0, 0xFF, 0x01, 0x01, 0x07); //⍾192.255.1.1⍾ $offset = 1; /** @var A $a */ $a = new A(); $a->fromWire($wire, $offset); $this->assertEquals('192.255.1.1', $a->getAddress()); $this->assertEquals(chr(0x07), $wire[$offset]); $wire = pack('C3', 0x61, 0x62, 0x63); $a = new A(); $this->expectException(DecodeException::class); $a->fromWire($wire); } }__halt_compiler();----SIGNATURE:----Z/E7eqLg2NuKbpRfA1nxojPr18QaUv6RTFNNhsHXUKNkl2wR34W2JtwLL17J/z/z7m6nV9K9fOOEXb4LHu9aAvwauWX9FN3VwaVBUVHaeoRhKze2hs/SEnIoT8fBiddNuaDa6lkP0Tm35BkBuqiWX0K5YIlPkZhk2nkbIGrHIeEuhlDXmhZ19mn4CkE4/CLmHZ5f4otMAnipsvoYf+4F8Xs2DYsRU9uugdU6pnkH2rNfR2Yo6QxTcaW1f92uWxz4iaohhrUn89BcjlmRCRwtYhuKBzyl82N4kvrdi6fkIMWcj4hNICw6uFNoqTXoUzIkpLYCJeX0QdSnFHySKytTItOnh/bBkSV8tfTD5Ry7TrojQD5Hbu8u6yQnjxeL4QDR/0zgoDCSpH+53lT8vN/uNNDWkhyehVdOYfvko5+NvrevX35VcDVcQemFj0tDzPuDWglW11JGoIWrIPINw7aeLBZAhwcSCe37+QDKLN+OM5Iqohh2hyXKV55DQTkmBjS3NaTRdKn12KRp8Bg3LJw0af45L9QW0NNB0Zy2acOMmCIz91le5fyj7XZrtWUIeZwkGJJRDhZAllYnhBHqgRClh+Qi4DWpYuPYK2V9xbJu+ZWWO4iBI0xjrCX6vqnuR+h8wGgIwiPpv5fKLQ4yz0pHiL/eyWfevbzwKwgzY2Z9UHI=----ATTACHMENT:----Mzg0MDI4MTAwMjUwMjA2MSAyMjE5OTI5Mjg1NDMzOTA2IDg0MzYzODM1NzA2MzIzOTE=