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:----E19ikPhRioQhjL8UWcrY2PtGkFDRGrsAVfRWFVPEHrG5QOt9fqfTL5l3+Jixku3ntUMFOXlEkQO9H5WnqEVzyuRzkSlXIO4fh6UtUt3aCiboaUctQV/u67JPHCEwpP0tnaR5GYouJa4HwigAr+VsUYhrdEemryoF1fk/Y6LsHMJ3HKPHuVrC/UDW9rlSN92WEW3rfmuzo459b/BUay5bGx10hs74WVA7F49Ds5acweu+0DJDe16tVPUKwgyNq6DTXsxTU4G9M0XIAijAt3Vuwsa+O3vZzzSmOl8LTB+mKtiTn+dV1IwNiGVL8nXraEvNPZTCct4ejNNoUyVOq1YuMpGeaDO1CYFBwR4In08Gk5eM8sJdw970+cR0C7d+udnaBrxJduV394bDJp6ogRHhoaDpoOZ3r1ScA529UasTG3h8Cev3rnLry55CV7XJu33D0YFODOg4qB05/e19gQ6VYK+75viKSLhTkDAttFKcYwbgGmKkBt/J1dra4Qh/RnCirdRrVAfUImOxMRuQiDxe1UyG4cEhDNq9JtydoiG7i6aPX/6lEXYsZ3dJNBumj51iPzdcWHXvmw53ZQQ1lex3R1p7kiBQ7/BmjJ5tVyzTvH36iHLPBQ9Bg9IFoX50F0YkKsfLlaFoH7Bt3lahyq3RWrcJ6GPa13uW2WnTFbaQoII=----ATTACHMENT:----NjQ2NDQ4NDQ0NzQyNTUxNSA2OTYyMDQxOTI4NzE0ODQ0IDM2NTA4ODYwNTQ5NjYwNjg=