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();
- });
|