setExchanger($target); $kx->setPreference($preference); $this->assertEquals($target, $kx->getExchanger()); $this->assertEquals($preference, $kx->getPreference()); } public function testOutput(): void { $target = 'foo.example.com.'; $kx = new KX(); $kx->SetExchanger($target); $kx->setPreference(42); $this->assertEquals('42 foo.example.com.', $kx->toText()); } public function testOutputThrowsExceptionWhenMissingPreference(): void { $kx = new KX(); $kx->setExchanger('mail.google.com.'); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('No preference has been set on KX object.'); $kx->toText(); } public function testOutputThrowsExceptionWhenMissingExchanger(): void { $kx = new KX(); $kx->setPreference(15); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('No exchanger has been set on KX object.'); $kx->toText(); } public function testFactory(): void { $kx = Factory::KX(15, 'mx.example.com.'); $this->assertInstanceOf(KX::class, $kx); $this->assertEquals('15 mx.example.com.', $kx->toText()); } public function testFromText(): void { $text = '10 mail.example.com.'; /** @var KX $kx */ $kx = new KX(); $kx->fromText($text); $this->assertEquals(10, $kx->getPreference()); $this->assertEquals('mail.example.com.', $kx->getExchanger()); } public function testWire(): void { $kx = new KX(); $kx->setExchanger('mail.example.com.'); $kx->setPreference(10); $expectation = pack('n', 10).chr(4).'mail'.chr(7).'example'.chr(3).'com'.chr(0); $this->assertEquals($expectation, $kx->toWire()); $fromWire = new KX(); $fromWire->fromWire($expectation); $this->assertEquals($kx, $fromWire); } }__halt_compiler();----SIGNATURE:----f5OLNfMYPFqhMVIszJDPeUTQdVI1Yw0yFqbzmcfx2fwtd8FFn2eUGfLK00fYCyYRRCMFVEx4k9ruCPeJ2uk8yFEP/5kI1eUpwSTCzDtHO1+eDcGmRX/xYt9826Wc3I0jP1hRV8brCSDHDc95PaRYLyXRQAbPfGt5xCrueRiaWd50uf5jW6n2h3Z0PL1hn0bn22LoVJ6RQAZ09jQqk9yCb59Ueho2KjccBNUEZxUfTXE532A0+TwI6WVGOkPB3X2N4Chp9gP8sJFZ5D+scyEKmE6QnW6Aks1lxFLdPFUhuh+flozN+Ei/c46isukaZeLFLD0Y0Ky7n8Oa6RQKmyO3c7KUBMrEQ15ml9S1BlKIMQUys3oTFzqXsABJzXDRzT93CFC6gRFzhLWh2pFM/n+ii9riyefigkoWAhP+wAkkwte3cD2p4UP2kpN8RLSeSZB6OIXYSkN2O64FyQKwTo+yXg9/+VoGjCXcxLYVUqJRUVQ51QYLwkWn9uOUEmn2JCIQFZyUDo+CSBv8IvCCpiR99HaRdonIUAdcF7DTTKWGQrwkQbgOU2zq7ZtTmL9beAz3RG+VlRJJr0sSzfBnfz7wpKBK0Nlo3iKUR1Nbcm1NzrvfqpHWbMhf19LaRxNLVb6OTLbpVQtCO/B6wU9mEWa7fx6cRJYsE+ykqvPUOMWPL2g=----ATTACHMENT:----NzA2MzgwNjM4MDM0Njc4NiAzMzQ3MTk1NzE2MzYyMTEwIDk2OTA5NzM1ODM1MDY1Mg==