blob: 96f63dd505b8ffea082ea47302a78be7c62319ea [file] [log] [blame]
// 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);
});