| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
							
- import com.google.protobuf.conformance.Conformance;
 
- import com.google.protobuf.InvalidProtocolBufferException;
 
- class ConformanceJava {
 
-   private int testCount = 0;
 
-   private boolean readFromStdin(byte[] buf, int len) throws Exception {
 
-     int ofs = 0;
 
-     while (len > 0) {
 
-       int read = System.in.read(buf, ofs, len);
 
-       if (read == -1) {
 
-         return false;  // EOF
 
-       }
 
-       ofs += read;
 
-       len -= read;
 
-     }
 
-     return true;
 
-   }
 
-   private void writeToStdout(byte[] buf) throws Exception {
 
-     System.out.write(buf);
 
-   }
 
-   // Returns -1 on EOF (the actual values will always be positive).
 
-   private int readLittleEndianIntFromStdin() throws Exception {
 
-     byte[] buf = new byte[4];
 
-     if (!readFromStdin(buf, 4)) {
 
-       return -1;
 
-     }
 
-     return buf[0] | (buf[1] << 1) | (buf[2] << 2) | (buf[3] << 3);
 
-   }
 
-   private void writeLittleEndianIntToStdout(int val) throws Exception {
 
-     byte[] buf = new byte[4];
 
-     buf[0] = (byte)val;
 
-     buf[1] = (byte)(val >> 8);
 
-     buf[2] = (byte)(val >> 16);
 
-     buf[3] = (byte)(val >> 24);
 
-     writeToStdout(buf);
 
-   }
 
-   private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) {
 
-     Conformance.TestAllTypes testMessage;
 
-     switch (request.getPayloadCase()) {
 
-       case PROTOBUF_PAYLOAD: {
 
-         try {
 
-           testMessage = Conformance.TestAllTypes.parseFrom(request.getProtobufPayload());
 
-         } catch (InvalidProtocolBufferException e) {
 
-           return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build();
 
-         }
 
-         break;
 
-       }
 
-       case JSON_PAYLOAD: {
 
-         return Conformance.ConformanceResponse.newBuilder().setRuntimeError("JSON not yet supported.").build();
 
-       }
 
-       case PAYLOAD_NOT_SET: {
 
-         throw new RuntimeException("Request didn't have payload.");
 
-       }
 
-       default: {
 
-         throw new RuntimeException("Unexpected payload case.");
 
-       }
 
-     }
 
-     switch (request.getRequestedOutput()) {
 
-       case UNSPECIFIED:
 
-         throw new RuntimeException("Unspecified output format.");
 
-       case PROTOBUF:
 
-         return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(testMessage.toByteString()).build();
 
-       case JSON:
 
-         return Conformance.ConformanceResponse.newBuilder().setRuntimeError("JSON not yet supported.").build();
 
-       default: {
 
-         throw new RuntimeException("Unexpected request output.");
 
-       }
 
-     }
 
-   }
 
-   private boolean doTestIo() throws Exception {
 
-     int bytes = readLittleEndianIntFromStdin();
 
-     if (bytes == -1) {
 
-       return false;  // EOF
 
-     }
 
-     byte[] serializedInput = new byte[bytes];
 
-     if (!readFromStdin(serializedInput, bytes)) {
 
-       throw new RuntimeException("Unexpected EOF from test program.");
 
-     }
 
-     Conformance.ConformanceRequest request =
 
-         Conformance.ConformanceRequest.parseFrom(serializedInput);
 
-     Conformance.ConformanceResponse response = doTest(request);
 
-     byte[] serializedOutput = response.toByteArray();
 
-     writeLittleEndianIntToStdout(serializedOutput.length);
 
-     writeToStdout(serializedOutput);
 
-     return true;
 
-   }
 
-   public void run() throws Exception {
 
-     while (doTestIo()) {
 
-       // Empty.
 
-     }
 
-     System.err.println("ConformanceJava: received EOF from test runner after " +
 
-         this.testCount + " tests");
 
-   }
 
-   public static void main(String[] args) throws Exception {
 
-     new ConformanceJava().run();
 
-   }
 
- }
 
 
  |