getPayload() == "protobuf_payload") { if ($request->getMessageType() == "conformance.FailureSet") { $response->setProtobufPayload(""); return $response; } elseif ($request->getMessageType() == "protobuf_test_messages.proto3.TestAllTypesProto3") { try { $test_message->mergeFromString($request->getProtobufPayload()); } catch (Exception $e) { $response->setParseError($e->getMessage()); return $response; } } elseif ($request->getMessageType() == "protobuf_test_messages.proto2.TestAllTypesProto2") { $response->setSkipped("PHP doesn't support proto2"); return $response; } else { trigger_error("Protobuf request doesn't have specific payload type", E_USER_ERROR); } } elseif ($request->getPayload() == "json_payload") { $ignore_json_unknown = ($request->getTestCategory() == TestCategory::JSON_IGNORE_UNKNOWN_PARSING_TEST); try { $test_message->mergeFromJsonString($request->getJsonPayload(), $ignore_json_unknown); } catch (Exception $e) { $response->setParseError($e->getMessage()); return $response; } } elseif ($request->getPayload() == "text_payload") { $response->setSkipped("PHP doesn't support text format yet"); return $response; } else { trigger_error("Request didn't have payload.", E_USER_ERROR); } if ($request->getRequestedOutputFormat() == WireFormat::UNSPECIFIED) { trigger_error("Unspecified output format.", E_USER_ERROR); } elseif ($request->getRequestedOutputFormat() == WireFormat::PROTOBUF) { $response->setProtobufPayload($test_message->serializeToString()); } elseif ($request->getRequestedOutputFormat() == WireFormat::JSON) { try { $response->setJsonPayload($test_message->serializeToJsonString()); } catch (Exception $e) { $response->setSerializeError($e->getMessage()); return $response; } } return $response; } function doTestIO() { $length_bytes = fread(STDIN, 4); if (strlen($length_bytes) == 0) { return false; # EOF } elseif (strlen($length_bytes) != 4) { fwrite(STDERR, "I/O error\n"); return false; } $length = unpack("V", $length_bytes)[1]; $serialized_request = fread(STDIN, $length); if (strlen($serialized_request) != $length) { trigger_error("I/O error", E_USER_ERROR); } $request = new \Conformance\ConformanceRequest(); $request->mergeFromString($serialized_request); $response = doTest($request); $serialized_response = $response->serializeToString(); fwrite(STDOUT, pack("V", strlen($serialized_response))); fwrite(STDOUT, $serialized_response); $GLOBALS['test_count'] += 1; return true; } while(true){ if (!doTestIO()) { fprintf(STDERR, "conformance_php: received EOF from test runner " . "after %d tests, exiting\n", $test_count); exit; } }