| /** @fileoverview Utilities for testing binary protobuf code. */ |
| goog.module('jspb.binary.test_utils'); |
| goog.module.declareLegacyNamespace(); |
| |
| |
| const {BinaryReader} = goog.require('jspb.binary.reader'); |
| const {assertNumber} = goog.require('goog.asserts'); |
| |
| /** |
| * Converts a Uint8Array into a string of hex with two characters per byte. |
| * @param {!Uint8Array} u8array |
| * @return {string} |
| */ |
| function toHexString(u8array) { |
| return Array |
| .from( |
| u8array, (b) => (assertNumber(b) < 0x10 ? '0' : '') + b.toString(16)) |
| .join(''); |
| } |
| exports.toHexString = toHexString; |
| |
| /** |
| * Splits an encoded protocol buffer message into separate hex strings for each |
| * field number. |
| * |
| * Allows comparison of serialized protos without regard to field number |
| * ordering, which is not guaranteed to be stable. |
| * See https://developers.google.com/protocol-buffers/docs/encoding#order |
| * |
| * Contains all bytes relevant to the field, including the header with field |
| * number and type. Repeated fields are one long string including all headers. |
| * |
| * @param {!Uint8Array} u8array |
| * @return {!Object<number, string>} |
| */ |
| function toHexFields(u8array) { |
| const /** !Object<number, string> */ fields = {}; |
| const reader = new BinaryReader(u8array); |
| let startCursor = 0; |
| while (reader.nextField()) { |
| const fieldNumber = reader.getFieldNumber(); |
| const existingString = fields[fieldNumber] || ''; |
| reader.skipField(); |
| const endCursor = reader.getCursor(); |
| fields[fieldNumber] = |
| existingString + toHexString(u8array.subarray(startCursor, endCursor)); |
| startCursor = endCursor; |
| } |
| return fields; |
| } |
| exports.toHexFields = toHexFields; |