From 27b1f2b477b3d6ea4d6ee1fd492880818603382d Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Thu, 12 May 2016 10:55:56 -0700 Subject: WIP. --- conformance/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conformance/Makefile.am b/conformance/Makefile.am index cf7eee3a..4e3a798e 100644 --- a/conformance/Makefile.am +++ b/conformance/Makefile.am @@ -234,8 +234,8 @@ if USE_EXTERNAL_PROTOC # Some implementations include pre-generated versions of well-known types. protoc_middleman: $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) - $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. $(conformance_protoc_inputs) - $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --php_out=. $(well_known_type_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(conformance_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(well_known_type_protoc_inputs) ## $(PROTOC) -I$(srcdir) -I$(top_srcdir) --java_out=lite:lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) touch protoc_middleman @@ -245,8 +245,8 @@ else # relative to srcdir, which may not be the same as the current directory when # building out-of-tree. protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) - oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd $(conformance_protoc_inputs) ) - oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd $(well_known_type_protoc_inputs) ) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_protoc_inputs) ) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(well_known_type_protoc_inputs) ) ## @mkdir -p lite ## oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --java_out=lite:$$oldpwd/lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) ) touch protoc_middleman -- cgit v1.2.3 From f873d3213c6be8e041cf4d9de201834110247750 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Wed, 8 Jun 2016 12:38:15 -0700 Subject: Added JavaScript conformance tests. All tests pass! --- conformance/Makefile.am | 3 + conformance/conformance_nodejs.js | 171 ++++++++++++++++++++++++++++++++++++++ js/binary/utils.js | 4 + js/message.js | 2 +- tests.sh | 1 + 5 files changed, 180 insertions(+), 1 deletion(-) create mode 100755 conformance/conformance_nodejs.js diff --git a/conformance/Makefile.am b/conformance/Makefile.am index 4e3a798e..4bcf8534 100644 --- a/conformance/Makefile.am +++ b/conformance/Makefile.am @@ -335,6 +335,9 @@ test_python: protoc_middleman conformance-test-runner test_python_cpp: protoc_middleman conformance-test-runner ./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py +test_nodejs: protoc_middleman conformance-test-runner + NODE_PATH=../js:. ./conformance-test-runner ./conformance_nodejs.js + if OBJC_CONFORMANCE_TEST test_objc: protoc_middleman conformance-test-runner conformance-objc diff --git a/conformance/conformance_nodejs.js b/conformance/conformance_nodejs.js new file mode 100755 index 00000000..626e3bba --- /dev/null +++ b/conformance/conformance_nodejs.js @@ -0,0 +1,171 @@ +#!/usr/bin/env node + +/* + * Protocol Buffers - Google's data interchange format + * Copyright 2008 Google Inc. All rights reserved. + * https://developers.google.com/protocol-buffers/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +var conformance = require('conformance_pb'); +var fs = require('fs'); + +var testCount = 0; + +function doTest(request) { + var testMessage; + var response = new conformance.ConformanceResponse(); + + try { + switch (request.getPayloadCase()) { + case conformance.ConformanceRequest.PayloadCase.PROTOBUF_PAYLOAD: + try { + testMessage = conformance.TestAllTypes.deserializeBinary( + request.getProtobufPayload()); + } catch (err) { + response.setParseError(err.toString()); + return response; + } + + case conformance.ConformanceRequest.PayloadCase.JSON_PAYLOAD: + response.setSkipped("JSON not supported."); + return response; + + case conformance.ConformanceRequest.PayloadCase.PAYLOAD_NOT_SET: + response.setRuntimeError("Request didn't have payload"); + return response; + } + + switch (request.getRequestedOutputFormat()) { + case conformance.UNSPECIFIED: + response.setRuntimeError("Unspecified output format"); + return response; + + case conformance.PROTOBUF: + response.setProtobufPayload(testMessage.serializeBinary()); + + case conformance.JSON: + response.setSkipped("JSON not supported."); + return response; + + default: + throw "Request didn't have requested output format"; + } + } catch (err) { + response.setRuntimeError(err.toString()); + } + + return response +} + +function onEof(totalRead) { + if (totalRead == 0) { + return undefined; + } else { + throw "conformance_nodejs: premature EOF on stdin."; + } +} + +// Utility function to read a buffer of N bytes. +function readBuffer(bytes) { + var buf = new Buffer(bytes); + var totalRead = 0; + while (totalRead < bytes) { + var read; + try { + read = fs.readSync(process.stdin.fd, buf, totalRead, bytes - totalRead); + } catch (e) { + if (e.code == 'EOF') { + return onEof(totalRead) + } else { + throw "conformance_nodejs: Error reading from stdin."; + } + } + + if (read === 0) { + return onEof(totalRead); + } + totalRead += read; + } + + return buf; +} + +function writeBuffer(buffer) { + var totalWritten = 0; + while (totalWritten < buffer.length) { + totalWritten += fs.writeSync( + process.stdout.fd, buffer, totalWritten, buffer.length - totalWritten); + } +} + +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() { + var lengthBuf = readBuffer(4); + if (!lengthBuf) { + return false; + } + + var length = lengthBuf.readInt32LE(0); + var serializedRequest = readBuffer(length); + if (!serializedRequest) { + throw "conformance_nodejs: Failed to read request."; + } + + var request = + conformance.ConformanceRequest.deserializeBinary(serializedRequest); + var response = doTest(request); + + var serializedResponse = response.serializeBinary(); + + lengthBuf = new Buffer(4); + lengthBuf.writeInt32LE(serializedResponse.length, 0); + writeBuffer(lengthBuf); + writeBuffer(uint8ArrayToBuffer(serializedResponse)); + + testCount += 1 + + return true; +} + +while (true) { + if (!doTestIo()) { + console.error('conformance_ruby: received EOF from test runner ' + + "after " + testCount + " tests, exiting") + break; + } +} diff --git a/js/binary/utils.js b/js/binary/utils.js index bbf99cdf..3ecd08e9 100644 --- a/js/binary/utils.js +++ b/js/binary/utils.js @@ -970,6 +970,10 @@ jspb.utils.byteSourceToUint8Array = function(data) { return /** @type {!Uint8Array} */(new Uint8Array(data)); } + if (data.constructor === Buffer) { + return /** @type {!Uint8Array} */(new Uint8Array(data)); + } + if (data.constructor === Array) { data = /** @type {!Array.} */(data); return /** @type {!Uint8Array} */(new Uint8Array(data)); diff --git a/js/message.js b/js/message.js index 05d34e9d..b769cc2d 100644 --- a/js/message.js +++ b/js/message.js @@ -202,7 +202,7 @@ goog.define('jspb.Message.MINIMIZE_MEMORY_ALLOCATIONS', COMPILED); /** - * Does this browser support Uint8Aray typed arrays? + * Does this JavaScript environment support Uint8Aray typed arrays? * @type {boolean} * @private */ diff --git a/tests.sh b/tests.sh index 981d20cc..a89f6dfc 100755 --- a/tests.sh +++ b/tests.sh @@ -350,6 +350,7 @@ build_ruby_all() { build_javascript() { internal_build_cpp cd js && npm install && npm test && cd .. + cd conformance && make test_nodejs && cd .. } generate_php_test_proto() { -- cgit v1.2.3 From 8df69f0894a3382a1011ed681b3ebebc7b1567b3 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Mon, 13 Mar 2017 15:10:53 -0700 Subject: Conformance test for JS now work, though 15 tests fail. --- conformance/Makefile.am | 21 +++++++++++++------- conformance/conformance_nodejs.js | 40 +++++++++++++++++++-------------------- conformance/failure_list_js.txt | 15 +++++++++++++++ 3 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 conformance/failure_list_js.txt diff --git a/conformance/Makefile.am b/conformance/Makefile.am index 4bcf8534..bce88c83 100644 --- a/conformance/Makefile.am +++ b/conformance/Makefile.am @@ -230,12 +230,19 @@ conformance_objc-conformance_objc.$(OBJEXT): Conformance.pbobjc.h google/protobu endif +# JavaScript well-known types are expected to be in a directory called +# google-protobuf, because they are usually in the google-protobuf npm +# package. But we want to use the sources from our tree, so we recreate +# that directory structure here. +google-protobuf: + mkdir google-protobuf + if USE_EXTERNAL_PROTOC # Some implementations include pre-generated versions of well-known types. -protoc_middleman: $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) - $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(conformance_protoc_inputs) - $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(well_known_type_protoc_inputs) +protoc_middleman: $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:google-protobuf $(conformance_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:google-protobuf $(well_known_type_protoc_inputs) ## $(PROTOC) -I$(srcdir) -I$(top_srcdir) --java_out=lite:lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) touch protoc_middleman @@ -244,9 +251,9 @@ else # We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is # relative to srcdir, which may not be the same as the current directory when # building out-of-tree. -protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) - oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_protoc_inputs) ) - oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(well_known_type_protoc_inputs) ) +protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(conformance_protoc_inputs) ) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(well_known_type_protoc_inputs) ) ## @mkdir -p lite ## oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --java_out=lite:$$oldpwd/lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) ) touch protoc_middleman @@ -336,7 +343,7 @@ test_python_cpp: protoc_middleman conformance-test-runner ./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py test_nodejs: protoc_middleman conformance-test-runner - NODE_PATH=../js:. ./conformance-test-runner ./conformance_nodejs.js + NODE_PATH=../js:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_js.txt ./conformance_nodejs.js if OBJC_CONFORMANCE_TEST diff --git a/conformance/conformance_nodejs.js b/conformance/conformance_nodejs.js index 626e3bba..21f516bc 100755 --- a/conformance/conformance_nodejs.js +++ b/conformance/conformance_nodejs.js @@ -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; } diff --git a/conformance/failure_list_js.txt b/conformance/failure_list_js.txt new file mode 100644 index 00000000..5414a2f9 --- /dev/null +++ b/conformance/failure_list_js.txt @@ -0,0 +1,15 @@ +Required.ProtobufInput.RepeatedScalarSelectsLast.INT32.ProtobufOutput +Required.ProtobufInput.RepeatedScalarSelectsLast.UINT32.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.BOOL.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.DOUBLE.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.FIXED32.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.FIXED64.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.FLOAT.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.INT32.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.INT64.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.SFIXED32.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.SFIXED64.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.SINT32.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.SINT64.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.UINT32.ProtobufOutput +Required.ProtobufInput.ValidDataRepeated.UINT64.ProtobufOutput -- cgit v1.2.3 From 95b4427d391c5e4040e5818ff5f0384873d99412 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Tue, 14 Mar 2017 12:45:57 -0700 Subject: Build system fixes for JS conformance tests. --- conformance/Makefile.am | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/conformance/Makefile.am b/conformance/Makefile.am index bce88c83..1a8b5748 100644 --- a/conformance/Makefile.am +++ b/conformance/Makefile.am @@ -21,6 +21,7 @@ other_language_protoc_outputs = \ conformance_pb2.py \ Conformance.pbobjc.h \ Conformance.pbobjc.m \ + conformance_pb.js \ conformance_pb.rb \ com/google/protobuf/Any.java \ com/google/protobuf/AnyOrBuilder.java \ @@ -183,6 +184,7 @@ EXTRA_DIST = \ failure_list_cpp.txt \ failure_list_csharp.txt \ failure_list_java.txt \ + failure_list_js.txt \ failure_list_objc.txt \ failure_list_python.txt \ failure_list_python_cpp.txt \ @@ -241,7 +243,7 @@ if USE_EXTERNAL_PROTOC # Some implementations include pre-generated versions of well-known types. protoc_middleman: $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf - $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:google-protobuf $(conformance_protoc_inputs) + $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(conformance_protoc_inputs) $(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:google-protobuf $(well_known_type_protoc_inputs) ## $(PROTOC) -I$(srcdir) -I$(top_srcdir) --java_out=lite:lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) touch protoc_middleman @@ -252,7 +254,7 @@ else # relative to srcdir, which may not be the same as the current directory when # building out-of-tree. protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf - oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(conformance_protoc_inputs) ) + oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_protoc_inputs) ) oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(well_known_type_protoc_inputs) ) ## @mkdir -p lite ## oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --java_out=lite:$$oldpwd/lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) ) @@ -342,7 +344,7 @@ test_python: protoc_middleman conformance-test-runner test_python_cpp: protoc_middleman conformance-test-runner ./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py -test_nodejs: protoc_middleman conformance-test-runner +test_nodejs: protoc_middleman conformance-test-runner $(other_language_protoc_outputs) NODE_PATH=../js:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_js.txt ./conformance_nodejs.js if OBJC_CONFORMANCE_TEST -- cgit v1.2.3 From 1b0db1cb83f09794632e8c24a1d0d1f0ca5b2365 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Thu, 16 Mar 2017 15:19:09 -0700 Subject: Removed obsolete comments and added docs. --- conformance/README.md | 32 ++++++++++++++++++++++++++++++-- conformance/conformance_nodejs.js | 3 --- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/conformance/README.md b/conformance/README.md index 9388055f..971fe8f6 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -19,11 +19,39 @@ directory to build `protoc`, since all the tests depend on it. $ make -Then to run the tests against the C++ implementation, run: +Running the tests for C++ +------------------------- + +To run the tests against the C++ implementation, run: $ cd conformance && make test_cpp -More tests and languages will be added soon! +Running the tests for JavaScript (Node.js) +------------------------------------------ + +To run the JavaScript tests against Node.js, make sure you have "node" +on your path and then run: + + $ cd conformance && make test_nodejs + +Running the tests for Ruby (MRI) +-------------------------------- + +To run the Ruby tests against MRI, first build the C extension: + + $ cd ruby && rake + +Then run the tests like so: + + $ cd conformance && make test_ruby + +Running the tests for other languages +------------------------------------- + +Most of the languages in the Protobuf source tree are set up to run +conformance tests. However some of them are more tricky to set up +properly. See `tests.sh` in the base of the repository to see how +Travis runs the tests. Testing other Protocol Buffer implementations --------------------------------------------- diff --git a/conformance/conformance_nodejs.js b/conformance/conformance_nodejs.js index 21f516bc..5ee37269 100755 --- a/conformance/conformance_nodejs.js +++ b/conformance/conformance_nodejs.js @@ -101,11 +101,9 @@ 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 = 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') { @@ -116,7 +114,6 @@ function readBuffer(bytes) { } } - //console.warn("Read: " + read); totalRead += read; } -- cgit v1.2.3