| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | /** * @fileoverview Installs our custom equality matchers in Jasmine. */goog.module('protobuf.testing.jasmineProtoBuf');const BufferDecoder = goog.require('protobuf.binary.BufferDecoder');const ByteString = goog.require('protobuf.ByteString');const {arrayBufferEqual} = goog.require('protobuf.binary.typedArrays');/** * A function that ensures custom equality for ByteStrings. * Since Jasmine compare structure by default Bytestrings might be equal that * are not equal since ArrayBuffers still compare content in g3. * (Jasmine fix upstream: https://github.com/jasmine/jasmine/issues/1687) * Also ByteStrings that are equal might compare non equal in jasmine of the * base64 string has been initialized. * @param {*} first * @param {*} second * @return {boolean|undefined} */const byteStringEquality = (first, second) => {  if (second instanceof ByteString) {    return second.equals(first);  }  // Intentionally not returning anything, this signals to jasmine that we  // did not perform any equality on the given objects.};/** * A function that ensures custom equality for ArrayBuffers. * By default Jasmine does not compare the content of an ArrayBuffer and thus * will return true for buffers with the same length but different content. * @param {*} first * @param {*} second * @return {boolean|undefined} */const arrayBufferCustomEquality = (first, second) => {  if (first instanceof ArrayBuffer && second instanceof ArrayBuffer) {    return arrayBufferEqual(first, second);  }  // Intentionally not returning anything, this signals to jasmine that we  // did not perform any equality on the given objects.};/** * A function that ensures custom equality for ArrayBuffers. * By default Jasmine does not compare the content of an ArrayBuffer and thus * will return true for buffers with the same length but different content. * @param {*} first * @param {*} second * @return {boolean|undefined} */const bufferDecoderCustomEquality = (first, second) => {  if (first instanceof BufferDecoder && second instanceof BufferDecoder) {    return first.asByteString().equals(second.asByteString());  }  // Intentionally not returning anything, this signals to jasmine that we  // did not perform any equality on the given objects.};/** * Overrides the default ArrayBuffer toString method ([object ArrayBuffer]) with * a more readable representation. */function overrideArrayBufferToString() {  /**   * Returns the hex values of the underlying bytes of the ArrayBuffer.   *   * @override   * @return {string}   */  ArrayBuffer.prototype.toString = function() {    const arr = Array.from(new Uint8Array(this));    return 'ArrayBuffer[' +        arr.map((b) => '0x' + (b & 0xFF).toString(16).toUpperCase())            .join(', ') +        ']';  };}beforeEach(() => {  jasmine.addCustomEqualityTester(arrayBufferCustomEquality);  jasmine.addCustomEqualityTester(bufferDecoderCustomEquality);  jasmine.addCustomEqualityTester(byteStringEquality);  overrideArrayBufferToString();});
 |