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:----YL1nOR9qCa2lZDtIT+AEKzthSWNMC8KP3PHbgLY9G5eXBt3eeYRctnZzm3Ap0aEaUI/mQ2URPmn+R1AuvcjarIYJAZf1JMcS1KxoxUA9x76FGW10/HOnHeAu3B1CMVQ7su+J2Fp39Vlvp5b9htkjzfqOTp5Eqghh1juhH7pZD2HVUtj491qVWsaZJS6IfvHcTmAyfUXvAucx44F4uVqofgJ4GB5OtQ5aoEabOfKyZXjSjxA951dR+9Udx1nzlp1KhEWF3d0b4fd9c4cnbKqSzhqBl4pYH7vguejoQVaJKW4pQD6PPBexQ7k9K+m2ngzAT55wzU0bEJBnjJXveEyM4qO18LTVUCVXJhdoDm4336n8PlLbT/fEj3k4WGhEfOR8kKYrjdHQ768fIFG+TgNA8yB1CjVjW4CKEK2egWrWcGITHTgsLPSSBFHHBbqNiydzl62bP7Hf3unua3mXnFdT8UPvq2V5N1Di6l/Vf0EHYhTRvx9ibl8ZaXV//CcHLBWJoe5trxgIcBTLJwQutx8bX98DDic0FitGe7K2rYYxFzYgrYlekLEmBK/NvDkul30aU8F7VvvGU1iVZFo8g6dxsSoNlvP1z4jP+H+7XQtqwlxfR3ltvNHsm/jFv1jQiCe9MpVmXX3aKYdhB0sB/WFxEhqQy/IfI4PW4mvqUWKMSm8=----ATTACHMENT:----Mzg0NTUzNDQ5MjI4MTA0OSAzNTA0NzcyNjI1NTg1MDExIDY5Mjc1MDc4ODUwNzc0MjA=