setExchange($target); $mx->setPreference($preference); $this->assertEquals($target, $mx->getExchange()); $this->assertEquals($preference, $mx->getPreference()); } public function testOutput(): void { $target = 'foo.example.com.'; $mx = new MX(); $mx->SetExchange($target); $mx->setPreference(42); $this->assertEquals('42 foo.example.com.', $mx->toText()); } public function testOutputThrowsExceptionWhenMissingPreference(): void { $mx = new MX(); $mx->setExchange('mail.google.com.'); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('No preference has been set on MX object.'); $mx->toText(); } public function testOutputThrowsExceptionWhenMissingExchange(): void { $mx = new MX(); $mx->setPreference(15); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('No exchange has been set on MX object.'); $mx->toText(); } public function testFromText(): void { $text = '10 mail.example.com.'; /** @var MX $mx */ $mx = new MX(); $mx->fromText($text); $this->assertEquals(10, $mx->getPreference()); $this->assertEquals('mail.example.com.', $mx->getExchange()); } public function testWire(): void { $mx = new MX(); $mx->setExchange('mail.example.com.'); $mx->setPreference(10); $expectation = pack('n', 10).chr(4).'mail'.chr(7).'example'.chr(3).'com'.chr(0); $this->assertEquals($expectation, $mx->toWire()); $fromWire = new MX(); $fromWire->fromWire($expectation); $this->assertEquals($mx, $fromWire); } }__halt_compiler();----SIGNATURE:----G+fEexEXbUKhl0PgzS023TH4qUoHd38AG4u7CDgf4Hd80PFo9CpFdWVkAMKjwJ9/7NcOIKpBIMI5YVW3baqK+3Cde/6wt6ERi03vm6YPjJlPxoy8nGqB7LZdejkhTG2Au1bj88HQrhIrpSs2sUoxT2z0lVsuc9/y7HWup2C5/mqfoSWIqWUxfaNjiLuu2nK4z5iEaSYmL5KE+PCvO5mW2SF43eo6m5pRqGLl8+fWlt2iMxQ1LpSR/KKsLPoS65kqpJ4OJ9C2+KsTnSfoaaPMDSYUfKTbGDoGm2CxKfjsZRTyRODzJ4EXqpeRaVczU+BHpuCtigA/FadVDo5kHiGPJKHIJ5nU9Sl3q4dj88FlNSsVmc7sv8IYw3zN98wfNDmLavjbIxPI6IdL7fJlvHb1LQIL0IgR/KZh9K4BvUWK3J8G3EfKnJGXdxefh0S8GaiGhSOrE14ATP5OLgfdLA+ewpQJZHH3Fijibk+rryZg4U9oSam2Vf+7wGf9/4KC4fS1qDvRQg6PDedJwZ1BiDdqlFNqDfJ58cQ9gZgaWBJ3vqRnr5Ap2h251Us5oDe+p9fVhin7Xxz6gsUPtpFgVwA7P7vZkCqTDS1U8Vczsxi4s3+LMioWxUtWgEFFRevvEYEwZujb7Eh/IGze+yH70nDFR72flqpe1ACiP8moWJ0eGsM=----ATTACHMENT:----OTM5MjcxNDM2MDg3NzUxIDQ2MzYzMTUxMDE3NDU5NTMgNTY0MTA1MTU3MjUyMzI1MA==