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:----uyP8rrqoNB98hBR7pPodMLipsBJxxPWXyKYXJPi9EAXhjsYubWX6MjC3CfqdaYpKAVD7GYh98THWQNWOhtKqVky14+8+f9BTi6XKUboALFE+6tUmLJ0hURuMToNFJGvGOyhfKdgTV9FK+Vcun5uCv0jjy6n1t1GeEFVsiTiRxyfLzS6lCRKldM86KCGx0avXQTJvo6KxBNvs+Xz7R+rQ9od4gu7c8OCX2PA1seKM9aa2mPZLTYn/Yaz8v8tyoBoWu+pHQI65GuhpaDbAvu997kpjVhKagaJQVVo4j4RNVqjWItTMBDm+a73HJITa6ITsqHGIsb3QpMB7pWbZkAjwMfxGuX7tdy3hOZhHnStqs/jPsXQbOxMRLt2zNBACsayirVCNXNBt9J0fSL9tahvt9Xxk0SAihhTZVGWCWUivL2tEM8J6eDkoG+ZtMAXuXxEV1ZI20IsXM/AIy5THZfCSxqePe2zG0GoQOUT5+8afsA+0f1HqEoKcvzjRaiWqbbKCzeCGA5ybAAEW8CByrh9VcSRS4vXMoeS0xvFZMYsQA2rgFJATjdEar7+DkbHlTh2rJDq96izjKr+3ADGidu1QKsFqTPStebzSUhuG6uSUqNJBm0gDKGS8rT2+p8LpIlXeVNJmWZfKQGlAWyEZFyv6V1AJCY6X0z+YeF3qK6OhJq8=----ATTACHMENT:----Njg0OTQzODU0MDA3NzUwNSA1ODQyMzQxODUzMzEzNjAyIDcyMzg1MDY1NzE5NDY0NDU=