| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | /** * @fileoverview Tests for textdecoder.js. */goog.module('protobuf.binary.TextDecoderTest');goog.setTestOnly();const {decode, encode} = goog.require('protobuf.binary.textencoding');describe('Decode does', () => {  it('return empty string for empty array', () => {    expect(decode(new DataView(new ArrayBuffer(0)))).toEqual('');  });  it('throw on null being passed', () => {    expect(() => decode(/** @type {!DataView} */ (/** @type {*} */ (null))))        .toThrow();  });});describe('Encode does', () => {  it('return empty array for empty string', () => {    expect(encode('')).toEqual(new Uint8Array(0));  });  it('throw on null being passed', () => {    expect(() => encode(/** @type {string} */ (/** @type {*} */ (null))))        .toThrow();  });});/** @const {!TextEncoder} */const textEncoder = new TextEncoder('utf-8');/** * A Pair of string and Uint8Array representing the same data. * Each pair has the string value and its utf-8 bytes. */class Pair {  /**   * Constructs a pair from a given string.   * @param {string} s   * @return {!Pair}   */  static fromString(s) {    return new Pair(s, textEncoder.encode(s).buffer);  }  /**   * Constructs a pair from a given charCode.   * @param {number} charCode   * @return {!Pair}   */  static fromCharCode(charCode) {    return Pair.fromString(String.fromCharCode(charCode));  }  /**   * @param {string} stringValue   * @param {!ArrayBuffer} bytes   * @private   */  constructor(stringValue, bytes) {    /** @const @private {string} */    this.stringValue_ = stringValue;    /** @const @private {!ArrayBuffer} */    this.bytes_ = bytes;  }  /** Ensures that a given pair encodes and decodes round trip*/  expectPairToMatch() {    expect(decode(new DataView(this.bytes_))).toEqual(this.stringValue_);    expect(encode(this.stringValue_)).toEqual(new Uint8Array(this.bytes_));  }}describe('textencoding does', () => {  it('works for empty string', () => {    Pair.fromString('').expectPairToMatch();  });  it('decode and encode random strings', () => {    // 1 byte strings    Pair.fromString('hello').expectPairToMatch();    Pair.fromString('HELLO1!');    // 2 byte String    Pair.fromString('©').expectPairToMatch();    // 3 byte string    Pair.fromString('❄').expectPairToMatch();    // 4 byte string    Pair.fromString('😁').expectPairToMatch();  });  it('decode and encode 1 byte strings', () => {    for (let i = 0; i < 0x80; i++) {      Pair.fromCharCode(i).expectPairToMatch();    }  });  it('decode and encode 2 byte strings', () => {    for (let i = 0xC0; i < 0x7FF; i++) {      Pair.fromCharCode(i).expectPairToMatch();    }  });  it('decode and encode 3 byte strings', () => {    for (let i = 0x7FF; i < 0x8FFF; i++) {      Pair.fromCharCode(i).expectPairToMatch();    }  });});
 |