assertNoReadValidator('ThriftTest\EmptyStruct'); $this->assertNoWriteValidator('ThriftTest\EmptyStruct'); } public function testBonkValidator() { $this->assertNoReadValidator('ThriftTest\Bonk'); $this->assertHasWriteValidator('ThriftTest\Bonk'); } public function testStructAValidator() { $this->assertHasReadValidator('ThriftTest\StructA'); $this->assertHasWriteValidator('ThriftTest\StructA'); } public function testUnionOfStringsValidator() { $this->assertNoWriteValidator('TestValidators\UnionOfStrings'); } public function testServiceResultValidator() { $this->assertNoReadValidator('TestValidators\TestService_test_result'); $this->assertNoWriteValidator('TestValidators\TestService_test_result'); } public function testReadEmpty() { $bonk = new \ThriftTest\Bonk(); $transport = new TMemoryBuffer("\000"); $protocol = new TBinaryProtocol($transport); $bonk->read($protocol); } public function testWriteEmpty() { $bonk = new \ThriftTest\Bonk(); $transport = new TMemoryBuffer(); $protocol = new TBinaryProtocol($transport); try { $bonk->write($protocol); $this->fail('Bonk was able to write an empty object'); } catch (TProtocolException $e) { } } public function testWriteWithMissingRequired() { // Check that we are not able to write StructA with a missing required field $structa = new \ThriftTest\StructA(); $transport = new TMemoryBuffer(); $protocol = new TBinaryProtocol($transport); try { $structa->write($protocol); $this->fail('StructA was able to write an empty object'); } catch (TProtocolException $e) { } } public function testReadStructA() { $transport = new TMemoryBuffer(base64_decode('CwABAAAAA2FiYwA=')); $protocol = new TBinaryProtocol($transport); $structa = new \ThriftTest\StructA(); $structa->read($protocol); $this->assertEquals("abc", $structa->s); } public function testWriteStructA() { $transport = new TMemoryBuffer(); $protocol = new TBinaryProtocol($transport); $structa = new \ThriftTest\StructA(); $structa->s = "abc"; $structa->write($protocol); $writeResult = base64_encode($transport->getBuffer()); $this->assertEquals('CwABAAAAA2FiYwA=', $writeResult); } protected static function assertHasReadValidator($class) { if (!static::hasReadValidator($class)) { static::fail($class . ' class should have a read validator'); } } protected static function assertNoReadValidator($class) { if (static::hasReadValidator($class)) { static::fail($class . ' class should not have a write validator'); } } protected static function assertHasWriteValidator($class) { if (!static::hasWriteValidator($class)) { static::fail($class . ' class should have a write validator'); } } protected static function assertNoWriteValidator($class) { if (static::hasWriteValidator($class)) { static::fail($class . ' class should not have a write validator'); } } private static function hasReadValidator($class) { $rc = new \ReflectionClass($class); return $rc->hasMethod('_validateForRead'); } private static function hasWriteValidator($class) { $rc = new \ReflectionClass($class); return $rc->hasMethod('_validateForWrite'); } }