|  | @@ -33,6 +33,7 @@
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  var conformance = require('conformance_pb');
 | 
	
		
			
				|  |  | +var test_messages_proto3 = require('google/protobuf/test_messages_proto3_pb');
 | 
	
		
			
				|  |  |  var fs = require('fs');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  var testCount = 0;
 | 
	
	
		
			
				|  | @@ -42,10 +43,15 @@ function doTest(request) {
 | 
	
		
			
				|  |  |    var response = new conformance.ConformanceResponse();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    try {
 | 
	
		
			
				|  |  | +    if (request.getRequestedOutputFormat() === conformance.WireFormat.JSON) {
 | 
	
		
			
				|  |  | +      response.setSkipped("JSON not supported.");
 | 
	
		
			
				|  |  | +      return response;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      switch (request.getPayloadCase()) {
 | 
	
		
			
				|  |  |        case conformance.ConformanceRequest.PayloadCase.PROTOBUF_PAYLOAD:
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  | -          testMessage = conformance.TestAllTypes.deserializeBinary(
 | 
	
		
			
				|  |  | +          testMessage = test_messages_proto3.TestAllTypes.deserializeBinary(
 | 
	
		
			
				|  |  |                request.getProtobufPayload());
 | 
	
		
			
				|  |  |          } catch (err) {
 | 
	
		
			
				|  |  |            response.setParseError(err.toString());
 | 
	
	
		
			
				|  | @@ -62,14 +68,14 @@ function doTest(request) {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      switch (request.getRequestedOutputFormat()) {
 | 
	
		
			
				|  |  | -      case conformance.UNSPECIFIED:
 | 
	
		
			
				|  |  | +      case conformance.WireFormat.UNSPECIFIED:
 | 
	
		
			
				|  |  |          response.setRuntimeError("Unspecified output format");
 | 
	
		
			
				|  |  |          return response;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      case conformance.PROTOBUF:
 | 
	
		
			
				|  |  | +      case conformance.WireFormat.PROTOBUF:
 | 
	
		
			
				|  |  |          response.setProtobufPayload(testMessage.serializeBinary());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      case conformance.JSON:
 | 
	
		
			
				|  |  | +      case conformance.WireFormat.JSON:
 | 
	
		
			
				|  |  |          response.setSkipped("JSON not supported.");
 | 
	
		
			
				|  |  |          return response;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -80,7 +86,7 @@ function doTest(request) {
 | 
	
		
			
				|  |  |      response.setRuntimeError(err.toString());
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  return response
 | 
	
		
			
				|  |  | +  return response;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function onEof(totalRead) {
 | 
	
	
		
			
				|  | @@ -95,21 +101,22 @@ function onEof(totalRead) {
 | 
	
		
			
				|  |  |  function readBuffer(bytes) {
 | 
	
		
			
				|  |  |    var buf = new Buffer(bytes);
 | 
	
		
			
				|  |  |    var totalRead = 0;
 | 
	
		
			
				|  |  | +  //console.warn("Want to read: " + bytes);
 | 
	
		
			
				|  |  |    while (totalRead < bytes) {
 | 
	
		
			
				|  |  | -    var read;
 | 
	
		
			
				|  |  | +    var read = 0;
 | 
	
		
			
				|  |  |      try {
 | 
	
		
			
				|  |  | +      //console.warn("Trying to read: " + (bytes - totalRead));
 | 
	
		
			
				|  |  |        read = fs.readSync(process.stdin.fd, buf, totalRead, bytes - totalRead);
 | 
	
		
			
				|  |  |      } catch (e) {
 | 
	
		
			
				|  |  |        if (e.code == 'EOF') {
 | 
	
		
			
				|  |  |          return onEof(totalRead)
 | 
	
		
			
				|  |  | +      } else if (e.code == 'EAGAIN') {
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  | -        throw "conformance_nodejs: Error reading from stdin.";
 | 
	
		
			
				|  |  | +        throw "conformance_nodejs: Error reading from stdin." + e;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (read === 0) {
 | 
	
		
			
				|  |  | -      return onEof(totalRead);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    //console.warn("Read: " + read);
 | 
	
		
			
				|  |  |      totalRead += read;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -124,14 +131,6 @@ function writeBuffer(buffer) {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function uint8ArrayToBuffer(arr) {
 | 
	
		
			
				|  |  | -  var buffer = new Buffer(arr.length);
 | 
	
		
			
				|  |  | -  for (var i = 0; i < arr.length; i++) {
 | 
	
		
			
				|  |  | -    buffer[i] = arr[i];
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return buffer;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  // Returns true if the test ran successfully, false on legitimate EOF.
 | 
	
		
			
				|  |  |  // If EOF is encountered in an unexpected place, raises IOError.
 | 
	
		
			
				|  |  |  function doTestIo() {
 | 
	
	
		
			
				|  | @@ -146,6 +145,7 @@ function doTestIo() {
 | 
	
		
			
				|  |  |      throw "conformance_nodejs: Failed to read request.";
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  serializedRequest = new Uint8Array(serializedRequest);
 | 
	
		
			
				|  |  |    var request =
 | 
	
		
			
				|  |  |        conformance.ConformanceRequest.deserializeBinary(serializedRequest);
 | 
	
		
			
				|  |  |    var response = doTest(request);
 | 
	
	
		
			
				|  | @@ -155,7 +155,7 @@ function doTestIo() {
 | 
	
		
			
				|  |  |    lengthBuf = new Buffer(4);
 | 
	
		
			
				|  |  |    lengthBuf.writeInt32LE(serializedResponse.length, 0);
 | 
	
		
			
				|  |  |    writeBuffer(lengthBuf);
 | 
	
		
			
				|  |  | -  writeBuffer(uint8ArrayToBuffer(serializedResponse));
 | 
	
		
			
				|  |  | +  writeBuffer(new Buffer(serializedResponse));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    testCount += 1
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -164,7 +164,7 @@ function doTestIo() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  while (true) {
 | 
	
		
			
				|  |  |    if (!doTestIo()) {
 | 
	
		
			
				|  |  | -    console.error('conformance_ruby: received EOF from test runner ' +
 | 
	
		
			
				|  |  | +    console.error('conformance_nodejs: received EOF from test runner ' +
 | 
	
		
			
				|  |  |                    "after " + testCount + " tests, exiting")
 | 
	
		
			
				|  |  |      break;
 | 
	
		
			
				|  |  |    }
 |