1/*
2 * Copyright (C) 2023 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import {StringUtils} from './string_utils';
18
19describe('StringUtils', () => {
20  it('parses bigint', () => {
21    expect(StringUtils.parseBigIntStrippingUnit('-10')).toEqual(-10n);
22    expect(StringUtils.parseBigIntStrippingUnit('-10 unit')).toEqual(-10n);
23    expect(StringUtils.parseBigIntStrippingUnit('-10unit')).toEqual(-10n);
24    expect(StringUtils.parseBigIntStrippingUnit(' -10 unit ')).toEqual(-10n);
25
26    expect(StringUtils.parseBigIntStrippingUnit('0')).toEqual(0n);
27    expect(StringUtils.parseBigIntStrippingUnit('0 unit')).toEqual(0n);
28    expect(StringUtils.parseBigIntStrippingUnit('0unit')).toEqual(0n);
29    expect(StringUtils.parseBigIntStrippingUnit(' 0 unit ')).toEqual(0n);
30
31    expect(StringUtils.parseBigIntStrippingUnit('10')).toEqual(10n);
32    expect(StringUtils.parseBigIntStrippingUnit('10 unit')).toEqual(10n);
33    expect(StringUtils.parseBigIntStrippingUnit('10unit')).toEqual(10n);
34    expect(StringUtils.parseBigIntStrippingUnit(' 10 unit ')).toEqual(10n);
35
36    expect(() => StringUtils.parseBigIntStrippingUnit('invalid')).toThrow();
37    expect(() =>
38      StringUtils.parseBigIntStrippingUnit('invalid 10 unit'),
39    ).toThrow();
40  });
41
42  it('convertCamelToSnakeCase()', () => {
43    expect(StringUtils.convertCamelToSnakeCase('aaa')).toEqual('aaa');
44    expect(StringUtils.convertCamelToSnakeCase('Aaa')).toEqual('Aaa');
45    expect(StringUtils.convertCamelToSnakeCase('_aaa')).toEqual('_aaa');
46    expect(StringUtils.convertCamelToSnakeCase('_Aaa')).toEqual('_Aaa');
47
48    expect(StringUtils.convertCamelToSnakeCase('aaaBbb')).toEqual('aaa_bbb');
49    expect(StringUtils.convertCamelToSnakeCase('AaaBbb')).toEqual('Aaa_bbb');
50    expect(StringUtils.convertCamelToSnakeCase('aaa_bbb')).toEqual('aaa_bbb');
51    expect(StringUtils.convertCamelToSnakeCase('aaa_Bbb')).toEqual('aaa_Bbb');
52
53    expect(StringUtils.convertCamelToSnakeCase('aaaBbbCcc')).toEqual(
54      'aaa_bbb_ccc',
55    );
56    expect(StringUtils.convertCamelToSnakeCase('aaaBbb_ccc')).toEqual(
57      'aaa_bbb_ccc',
58    );
59    expect(StringUtils.convertCamelToSnakeCase('aaaBbb_Ccc')).toEqual(
60      'aaa_bbb_Ccc',
61    );
62
63    expect(StringUtils.convertCamelToSnakeCase('aaaBBBccc')).toEqual(
64      'aaa_bBBccc',
65    );
66    expect(StringUtils.convertCamelToSnakeCase('aaaBBBcccDDD')).toEqual(
67      'aaa_bBBccc_dDD',
68    );
69    expect(StringUtils.convertCamelToSnakeCase('aaaBBB_ccc')).toEqual(
70      'aaa_bBB_ccc',
71    );
72    expect(StringUtils.convertCamelToSnakeCase('aaaBbb_CCC')).toEqual(
73      'aaa_bbb_CCC',
74    );
75
76    expect(StringUtils.convertCamelToSnakeCase('_field_32')).toEqual(
77      '_field_32',
78    );
79    expect(StringUtils.convertCamelToSnakeCase('field_32')).toEqual('field_32');
80    expect(StringUtils.convertCamelToSnakeCase('field_32Bits')).toEqual(
81      'field_32_bits',
82    );
83    expect(StringUtils.convertCamelToSnakeCase('field_32BitsLsb')).toEqual(
84      'field_32_bits_lsb',
85    );
86    expect(StringUtils.convertCamelToSnakeCase('field_32bits')).toEqual(
87      'field_32bits',
88    );
89    expect(StringUtils.convertCamelToSnakeCase('field_32bitsLsb')).toEqual(
90      'field_32bits_lsb',
91    );
92
93    expect(StringUtils.convertCamelToSnakeCase('_aaaAaa.bbbBbb')).toEqual(
94      '_aaa_aaa.bbb_bbb',
95    );
96    expect(StringUtils.convertCamelToSnakeCase('aaaAaa.bbbBbb')).toEqual(
97      'aaa_aaa.bbb_bbb',
98    );
99    expect(
100      StringUtils.convertCamelToSnakeCase('aaaAaa.field_32bitsLsb.bbbBbb'),
101    ).toEqual('aaa_aaa.field_32bits_lsb.bbb_bbb');
102  });
103
104  it('convertSnakeToCamelCase()', () => {
105    expect(StringUtils.convertSnakeToCamelCase('_aaa')).toEqual('_aaa');
106    expect(StringUtils.convertSnakeToCamelCase('aaa')).toEqual('aaa');
107
108    expect(StringUtils.convertSnakeToCamelCase('aaa_bbb')).toEqual('aaaBbb');
109    expect(StringUtils.convertSnakeToCamelCase('_aaa_bbb')).toEqual('_aaaBbb');
110
111    expect(StringUtils.convertSnakeToCamelCase('aaa_bbb_ccc')).toEqual(
112      'aaaBbbCcc',
113    );
114    expect(StringUtils.convertSnakeToCamelCase('_aaa_bbb_ccc')).toEqual(
115      '_aaaBbbCcc',
116    );
117
118    expect(StringUtils.convertSnakeToCamelCase('_field_32')).toEqual(
119      '_field_32',
120    );
121    expect(StringUtils.convertSnakeToCamelCase('field_32')).toEqual('field_32');
122    expect(StringUtils.convertSnakeToCamelCase('field_32_bits')).toEqual(
123      'field_32Bits',
124    );
125    expect(StringUtils.convertSnakeToCamelCase('field_32_bits_lsb')).toEqual(
126      'field_32BitsLsb',
127    );
128    expect(StringUtils.convertSnakeToCamelCase('field_32bits')).toEqual(
129      'field_32bits',
130    );
131    expect(StringUtils.convertSnakeToCamelCase('field_32bits_lsb')).toEqual(
132      'field_32bitsLsb',
133    );
134
135    expect(StringUtils.convertSnakeToCamelCase('_aaa_aaa.bbb_bbb')).toEqual(
136      '_aaaAaa.bbbBbb',
137    );
138    expect(StringUtils.convertSnakeToCamelCase('aaa_aaa.bbb_bbb')).toEqual(
139      'aaaAaa.bbbBbb',
140    );
141    expect(
142      StringUtils.convertSnakeToCamelCase('aaa_aaa.field_32bits_lsb.bbb_bbb'),
143    ).toEqual('aaaAaa.field_32bitsLsb.bbbBbb');
144  });
145
146  it('isAlpha()', () => {
147    expect(StringUtils.isAlpha('a')).toBeTrue();
148    expect(StringUtils.isAlpha('A')).toBeTrue();
149    expect(StringUtils.isAlpha('_')).toBeFalse();
150    expect(StringUtils.isAlpha('0')).toBeFalse();
151    expect(StringUtils.isAlpha('9')).toBeFalse();
152  });
153
154  it('isDigit()', () => {
155    expect(StringUtils.isDigit('a')).toBeFalse();
156    expect(StringUtils.isDigit('A')).toBeFalse();
157    expect(StringUtils.isDigit('_')).toBeFalse();
158    expect(StringUtils.isDigit('0')).toBeTrue();
159    expect(StringUtils.isDigit('9')).toBeTrue();
160  });
161
162  it('isLowerCase()', () => {
163    expect(StringUtils.isLowerCase('a')).toBeTrue();
164    expect(StringUtils.isLowerCase('z')).toBeTrue();
165    expect(StringUtils.isLowerCase('A')).toBeFalse();
166    expect(StringUtils.isLowerCase('Z')).toBeFalse();
167    expect(StringUtils.isLowerCase('_')).toBeFalse();
168    expect(StringUtils.isLowerCase('0')).toBeFalse();
169    expect(StringUtils.isLowerCase('9')).toBeFalse();
170  });
171
172  it('isUpperCase()', () => {
173    expect(StringUtils.isUpperCase('A')).toBeTrue();
174    expect(StringUtils.isUpperCase('Z')).toBeTrue();
175    expect(StringUtils.isUpperCase('a')).toBeFalse();
176    expect(StringUtils.isUpperCase('z')).toBeFalse();
177    expect(StringUtils.isUpperCase('_')).toBeFalse();
178    expect(StringUtils.isUpperCase('0')).toBeFalse();
179    expect(StringUtils.isUpperCase('9')).toBeFalse();
180  });
181
182  it('isBlank()', () => {
183    expect(StringUtils.isBlank('')).toBeTrue();
184    expect(StringUtils.isBlank(' ')).toBeTrue();
185    expect(StringUtils.isBlank('  ')).toBeTrue();
186    expect(StringUtils.isBlank(' a')).toBeFalse();
187    expect(StringUtils.isBlank('a ')).toBeFalse();
188    expect(StringUtils.isBlank(' a ')).toBeFalse();
189    expect(StringUtils.isBlank('a  a')).toBeFalse();
190  });
191
192  it('isNumeric()', () => {
193    expect(StringUtils.isNumeric('0')).toBeTrue();
194    expect(StringUtils.isNumeric('1')).toBeTrue();
195    expect(StringUtils.isNumeric('0.1')).toBeTrue();
196    expect(StringUtils.isNumeric('')).toBeFalse();
197    expect(StringUtils.isNumeric('a')).toBeFalse();
198    expect(StringUtils.isNumeric('4n')).toBeFalse();
199  });
200});
201