// Copyright (C) 2019 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import {arrayEquals} from './array_utils'; import { base64Decode, base64Encode, binaryDecode, binaryEncode, cropText, sqliteString, utf8Decode, utf8Encode, } from './string_utils'; test('string_utils.stringToBase64', () => { const bytes = [...'Hello, world'].map((c) => c.charCodeAt(0)); const buffer = new Uint8Array(bytes); const b64Encoded = base64Encode(buffer); expect(b64Encoded).toEqual('SGVsbG8sIHdvcmxk'); expect(base64Decode(b64Encoded)).toEqual(buffer); }); test('string_utils.bufferToBase64', () => { const buffer = new Uint8Array([0xff, 0, 0, 0x81, 0x2a, 0xfe]); const b64Encoded = base64Encode(buffer); expect(b64Encoded).toEqual('/wAAgSr+'); expect(base64Decode(b64Encoded)).toEqual(buffer); }); test('string_utils.utf8EncodeAndDecode', () => { const testString = '¡HéllØ wörld!'; const buffer = utf8Encode(testString); const expectedUtf8 = [ 194, 161, 72, 195, 169, 108, 108, 195, 152, 32, 119, 195, 182, 114, 108, 100, 33, ]; expect(arrayEquals(buffer, expectedUtf8)).toBe(true); expect(utf8Decode(buffer)).toEqual(testString); }); test('string_utils.binaryEncodeAndDecode', () => { const buf = new Uint8Array(256 + 4); for (let i = 0; i < 256; i++) { buf[i] = i; } buf.set([0xf0, 0x28, 0x8c, 0xbc], 256); const encodedStr = binaryEncode(buf); expect(encodedStr.length).toEqual(buf.length); const encodedThroughJson = JSON.parse(JSON.stringify(encodedStr)); expect(binaryDecode(encodedStr)).toEqual(buf); expect(binaryDecode(encodedThroughJson)).toEqual(buf); }); test('string_utils.sqliteString', () => { expect(sqliteString("that's it")).toEqual("'that''s it'"); expect(sqliteString('no quotes')).toEqual("'no quotes'"); expect(sqliteString(`foo ' bar '`)).toEqual(`'foo '' bar '''`); }); test('cropHelper regular text', () => { const tripleDot = '\u2026'; const emoji = '\uD83D\uDE00'; expect( cropText( 'com.android.camera [4096]', /* charWidth=*/ 5, /* rectWidth=*/ 2 * 5, ), ).toBe('c'); expect(cropText('com.android.camera [4096]', 5, 4 * 5 + 2)).toBe( 'co' + tripleDot, ); expect(cropText('com.android.camera [4096]', 5, 5 * 5 + 2)).toBe( 'com' + tripleDot, ); expect(cropText('com.android.camera [4096]', 5, 13 * 5 + 2)).toBe( 'com.android' + tripleDot, ); expect(cropText('com.android.camera [4096]', 5, 26 * 5 + 2)).toBe( 'com.android.camera [4096]', ); expect(cropText(emoji + 'abc', 5, 2 * 5)).toBe(emoji); expect(cropText(emoji + 'abc', 5, 5 * 5)).toBe(emoji + 'a' + tripleDot); });