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:----DJCIwvkmwI3xkhpBmv3N7N4Mp3/i4j/7nrVUSDsihx3tVmY28nNsAqKZeM+qwlVcVtezpU6JfBEFSg6LmWbp5+XS46g7tWzFioQL1WIh2vrG2pTxH/26F+wWjvMXb14FvSA/UJ8EuNO30uXLvlflTYcxQ1CqHKG1eEA5fVMc0VZ0dR7M/GtQiMfGGLQOj/Uqz9BMv9EhRU7ZOMUNSIw6MoDZiuyyiD7sK5tGyOAoqe51+JLIhHhBJAW+EHiSu4MOtmQBYUwI1zCFUi2asSFHekIuWh27Wjz/h+B3PDQMfVmq8ZWAVH6qg4JelJp+HAYa7QoRMQkE2t6plaXvqRcTGZgpPTpATjxvSRDVEdr9Lx0W+J6ncBEbePRFELDsd36sT76xS895tsM8/psiyatylZtFd50Z/4VE4aQCTJVaV+5QqPeJZ8z55HhjcA0VVlSUpl0Vh7Fuz1S/eEaWpLSubw+mc8gL+2l7oElaYYi2nl/kjZWwrg4S6nZWQRkcu6bVmQ68fWMDxvUpj44K8Z5DSkso6uXgZSKZWaCfdQrtkNK5BChuupTDREXZTGGWRD2Mb0ZPSa4XlBV1BLwRteiqtS5SUll+OEfS0cBl///txWYpMVB3eyGhbglkcLEYbhvBH7nMSVWY5M7/MmqVBGoYGKcN2blVYno447lS0CsNPS0=----ATTACHMENT:----NjU1Mzc4MjA0NTk3NTExIDgxNjU5NjAwMjY3NjQzMDkgMzY3MjA1NTc4Nzc3NjgxOQ==