@pawells/typescript-common 1.1.0 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -118
- package/build/array/array-chunk.d.ts +10 -4
- package/build/array/array-chunk.d.ts.map +1 -1
- package/build/array/array-chunk.js +10 -4
- package/build/array/array-chunk.js.map +1 -1
- package/build/array/array-contains.d.ts +11 -3
- package/build/array/array-contains.d.ts.map +1 -1
- package/build/array/array-contains.js +11 -3
- package/build/array/array-contains.js.map +1 -1
- package/build/array/array-group-by.d.ts +14 -5
- package/build/array/array-group-by.d.ts.map +1 -1
- package/build/array/array-group-by.js +14 -5
- package/build/array/array-group-by.js.map +1 -1
- package/build/array/array-shuffle.d.ts +12 -3
- package/build/array/array-shuffle.d.ts.map +1 -1
- package/build/array/array-shuffle.js +12 -3
- package/build/array/array-shuffle.js.map +1 -1
- package/build/array/unique.d.ts +13 -3
- package/build/array/unique.d.ts.map +1 -1
- package/build/array/unique.js +13 -3
- package/build/array/unique.js.map +1 -1
- package/build/asserts/errors.d.ts +91 -7
- package/build/asserts/errors.d.ts.map +1 -1
- package/build/asserts/errors.js +91 -7
- package/build/asserts/errors.js.map +1 -1
- package/build/asserts/generic.d.ts +8 -4
- package/build/asserts/generic.d.ts.map +1 -1
- package/build/asserts/generic.js +8 -4
- package/build/asserts/generic.js.map +1 -1
- package/build/enum/enum-entries.d.ts +8 -3
- package/build/enum/enum-entries.d.ts.map +1 -1
- package/build/enum/enum-entries.js +8 -3
- package/build/enum/enum-entries.js.map +1 -1
- package/build/enum/enum-key-by-value.d.ts +10 -5
- package/build/enum/enum-key-by-value.d.ts.map +1 -1
- package/build/enum/enum-key-by-value.js +10 -5
- package/build/enum/enum-key-by-value.js.map +1 -1
- package/build/enum/enum-keys.d.ts +12 -3
- package/build/enum/enum-keys.d.ts.map +1 -1
- package/build/enum/enum-keys.js +12 -3
- package/build/enum/enum-keys.js.map +1 -1
- package/build/enum/enum-safe-value.d.ts +11 -6
- package/build/enum/enum-safe-value.d.ts.map +1 -1
- package/build/enum/enum-safe-value.js +11 -6
- package/build/enum/enum-safe-value.js.map +1 -1
- package/build/enum/validate-enum-value.d.ts +10 -5
- package/build/enum/validate-enum-value.d.ts.map +1 -1
- package/build/enum/validate-enum-value.js +10 -5
- package/build/enum/validate-enum-value.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/number/assert.d.ts +14 -14
- package/build/number/assert.d.ts.map +1 -1
- package/build/object/clone.d.ts +17 -6
- package/build/object/clone.d.ts.map +1 -1
- package/build/object/clone.js +17 -6
- package/build/object/clone.js.map +1 -1
- package/build/object/filter-cached.d.ts +15 -3
- package/build/object/filter-cached.d.ts.map +1 -1
- package/build/object/filter-cached.js +15 -3
- package/build/object/filter-cached.js.map +1 -1
- package/build/object/has-circular-reference.d.ts +12 -3
- package/build/object/has-circular-reference.d.ts.map +1 -1
- package/build/object/has-circular-reference.js +12 -3
- package/build/object/has-circular-reference.js.map +1 -1
- package/build/object/key-value-pairs.d.ts +11 -3
- package/build/object/key-value-pairs.d.ts.map +1 -1
- package/build/object/key-value-pairs.js +11 -3
- package/build/object/key-value-pairs.js.map +1 -1
- package/build/object/map-cached.d.ts +14 -3
- package/build/object/map-cached.d.ts.map +1 -1
- package/build/object/map-cached.js +14 -3
- package/build/object/map-cached.js.map +1 -1
- package/build/object/merge.d.ts +18 -7
- package/build/object/merge.d.ts.map +1 -1
- package/build/object/merge.js +18 -7
- package/build/object/merge.js.map +1 -1
- package/build/object/omit.d.ts +13 -4
- package/build/object/omit.d.ts.map +1 -1
- package/build/object/omit.js +13 -4
- package/build/object/omit.js.map +1 -1
- package/build/string/formatting.d.ts +10 -3
- package/build/string/formatting.d.ts.map +1 -1
- package/build/string/formatting.js +10 -3
- package/build/string/formatting.js.map +1 -1
- package/package.json +9 -5
- package/build/array/array.test.d.ts +0 -2
- package/build/array/array.test.d.ts.map +0 -1
- package/build/array/array.test.js +0 -347
- package/build/array/array.test.js.map +0 -1
- package/build/asserts/object.d.ts +0 -138
- package/build/asserts/object.d.ts.map +0 -1
- package/build/asserts/object.js +0 -204
- package/build/asserts/object.js.map +0 -1
- package/build/asserts/string.d.ts +0 -100
- package/build/asserts/string.d.ts.map +0 -1
- package/build/asserts/string.js +0 -185
- package/build/asserts/string.js.map +0 -1
- package/build/enum/enum.test.d.ts +0 -2
- package/build/enum/enum.test.d.ts.map +0 -1
- package/build/enum/enum.test.js +0 -122
- package/build/enum/enum.test.js.map +0 -1
- package/build/function/function.test.d.ts +0 -2
- package/build/function/function.test.d.ts.map +0 -1
- package/build/function/function.test.js +0 -158
- package/build/function/function.test.js.map +0 -1
- package/build/object/object.test.d.ts +0 -2
- package/build/object/object.test.d.ts.map +0 -1
- package/build/object/object.test.js +0 -432
- package/build/object/object.test.js.map +0 -1
- package/build/string/string.test.d.ts +0 -2
- package/build/string/string.test.d.ts.map +0 -1
- package/build/string/string.test.js +0 -321
- package/build/string/string.test.js.map +0 -1
- package/build/time/time.test.d.ts +0 -2
- package/build/time/time.test.d.ts.map +0 -1
- package/build/time/time.test.js +0 -211
- package/build/time/time.test.js.map +0 -1
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { CamelCase, CAPITALIZE, KEBAB_CASE, PASCAL_CASE, SNAKE_CASE, SCREAMING_SNAKE_CASE } from './case-conversion.js';
|
|
3
|
-
import { EscapeHTML, FormatString, TruncateString, PadString, StripHTML, Pluralize, WordCount, CountOccurrences } from './formatting.js';
|
|
4
|
-
import { REVERSE_STRING, SLUGIFY } from './transformation.js';
|
|
5
|
-
import { IS_BLANK_STRING, IS_HEX_STRING } from './validation.js';
|
|
6
|
-
describe('CamelCase', () => {
|
|
7
|
-
it('converts space-separated words', () => {
|
|
8
|
-
expect(CamelCase('hello world')).toBe('helloWorld');
|
|
9
|
-
});
|
|
10
|
-
it('converts kebab-case', () => {
|
|
11
|
-
expect(CamelCase('foo-bar-baz')).toBe('fooBarBaz');
|
|
12
|
-
});
|
|
13
|
-
it('converts snake_case', () => {
|
|
14
|
-
expect(CamelCase('hello_world')).toBe('helloWorld');
|
|
15
|
-
});
|
|
16
|
-
it('returns empty string for empty input', () => {
|
|
17
|
-
expect(CamelCase('')).toBe('');
|
|
18
|
-
});
|
|
19
|
-
it('returns empty string for null/falsy input', () => {
|
|
20
|
-
expect(CamelCase(null)).toBe('');
|
|
21
|
-
});
|
|
22
|
-
it('lowercases the first letter', () => {
|
|
23
|
-
expect(CamelCase('HelloWorld')[0]).toBe('h');
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe('CAPITALIZE', () => {
|
|
27
|
-
it('capitalizes the first letter', () => {
|
|
28
|
-
expect(CAPITALIZE('hello')).toBe('Hello');
|
|
29
|
-
});
|
|
30
|
-
it('does not alter rest of the string', () => {
|
|
31
|
-
expect(CAPITALIZE('hello world')).toBe('Hello world');
|
|
32
|
-
});
|
|
33
|
-
it('returns empty string for empty input', () => {
|
|
34
|
-
expect(CAPITALIZE('')).toBe('');
|
|
35
|
-
});
|
|
36
|
-
it('returns empty string for null input', () => {
|
|
37
|
-
expect(CAPITALIZE(null)).toBe('');
|
|
38
|
-
});
|
|
39
|
-
it('handles already-capitalized strings', () => {
|
|
40
|
-
expect(CAPITALIZE('Hello')).toBe('Hello');
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('KEBAB_CASE', () => {
|
|
44
|
-
it('converts camelCase to kebab-case', () => {
|
|
45
|
-
expect(KEBAB_CASE('helloWorld')).toBe('hello-world');
|
|
46
|
-
});
|
|
47
|
-
it('converts spaces to dashes', () => {
|
|
48
|
-
expect(KEBAB_CASE('hello world')).toBe('hello-world');
|
|
49
|
-
});
|
|
50
|
-
it('converts underscores to dashes', () => {
|
|
51
|
-
expect(KEBAB_CASE('hello_world')).toBe('hello-world');
|
|
52
|
-
});
|
|
53
|
-
it('lowercases everything', () => {
|
|
54
|
-
expect(KEBAB_CASE('HELLO')).toBe('hello');
|
|
55
|
-
});
|
|
56
|
-
it('returns empty string for empty/null input', () => {
|
|
57
|
-
expect(KEBAB_CASE('')).toBe('');
|
|
58
|
-
expect(KEBAB_CASE(null)).toBe('');
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('PASCAL_CASE', () => {
|
|
62
|
-
it('converts space-separated words', () => {
|
|
63
|
-
expect(PASCAL_CASE('hello world')).toBe('HelloWorld');
|
|
64
|
-
});
|
|
65
|
-
it('converts kebab-case', () => {
|
|
66
|
-
expect(PASCAL_CASE('foo-bar')).toBe('FooBar');
|
|
67
|
-
});
|
|
68
|
-
it('converts snake_case', () => {
|
|
69
|
-
expect(PASCAL_CASE('foo_bar')).toBe('FooBar');
|
|
70
|
-
});
|
|
71
|
-
it('capitalizes first letter', () => {
|
|
72
|
-
expect(PASCAL_CASE('hello')[0]).toBe('H');
|
|
73
|
-
});
|
|
74
|
-
it('returns empty string for empty/null input', () => {
|
|
75
|
-
expect(PASCAL_CASE('')).toBe('');
|
|
76
|
-
expect(PASCAL_CASE(null)).toBe('');
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe('EscapeHTML', () => {
|
|
80
|
-
it('escapes ampersands', () => {
|
|
81
|
-
expect(EscapeHTML('a & b')).toBe('a & b');
|
|
82
|
-
});
|
|
83
|
-
it('escapes angle brackets', () => {
|
|
84
|
-
expect(EscapeHTML('<div>')).toBe('<div>');
|
|
85
|
-
});
|
|
86
|
-
it('escapes double quotes', () => {
|
|
87
|
-
expect(EscapeHTML('"hello"')).toBe('"hello"');
|
|
88
|
-
});
|
|
89
|
-
it('escapes single quotes', () => {
|
|
90
|
-
expect(EscapeHTML('it\'s')).toBe('it's');
|
|
91
|
-
});
|
|
92
|
-
it('returns empty string for empty/null input', () => {
|
|
93
|
-
expect(EscapeHTML('')).toBe('');
|
|
94
|
-
expect(EscapeHTML(null)).toBe('');
|
|
95
|
-
});
|
|
96
|
-
it('does not alter a string with no special chars', () => {
|
|
97
|
-
expect(EscapeHTML('hello world')).toBe('hello world');
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
describe('FormatString', () => {
|
|
101
|
-
it('replaces named placeholders', () => {
|
|
102
|
-
expect(FormatString('Hello {name}!', { name: 'World' })).toBe('Hello World!');
|
|
103
|
-
});
|
|
104
|
-
it('replaces positional placeholders', () => {
|
|
105
|
-
expect(FormatString('Hello {0}!', ['World'])).toBe('Hello World!');
|
|
106
|
-
});
|
|
107
|
-
it('handles multiple named params', () => {
|
|
108
|
-
expect(FormatString('{greeting} {name}', { greeting: 'Hi', name: 'Alice' })).toBe('Hi Alice');
|
|
109
|
-
});
|
|
110
|
-
it('handles multiple positional params', () => {
|
|
111
|
-
expect(FormatString('{0} {1}', ['foo', 'bar'])).toBe('foo bar');
|
|
112
|
-
});
|
|
113
|
-
it('leaves unknown placeholders unchanged', () => {
|
|
114
|
-
expect(FormatString('Hello {unknown}!', {})).toBe('Hello {unknown}!');
|
|
115
|
-
});
|
|
116
|
-
it('converts boolean and number values to strings', () => {
|
|
117
|
-
expect(FormatString('Count: {count}, Active: {active}', { count: 42, active: true })).toBe('Count: 42, Active: true');
|
|
118
|
-
});
|
|
119
|
-
it('returns empty string for empty/null template', () => {
|
|
120
|
-
expect(FormatString('', { name: 'x' })).toBe('');
|
|
121
|
-
expect(FormatString(null, {})).toBe('');
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('TruncateString', () => {
|
|
125
|
-
it('truncates strings exceeding maxLength', () => {
|
|
126
|
-
expect(TruncateString('Hello World', 5)).toBe('Hello...');
|
|
127
|
-
});
|
|
128
|
-
it('returns the original string when within maxLength', () => {
|
|
129
|
-
expect(TruncateString('Hi', 10)).toBe('Hi');
|
|
130
|
-
});
|
|
131
|
-
it('uses a custom ellipsis', () => {
|
|
132
|
-
expect(TruncateString('Hello World', 5, '…')).toBe('Hello…');
|
|
133
|
-
});
|
|
134
|
-
it('returns empty string for empty/null input', () => {
|
|
135
|
-
expect(TruncateString('', 5)).toBe('');
|
|
136
|
-
expect(TruncateString(null, 5)).toBe('');
|
|
137
|
-
});
|
|
138
|
-
it('returns empty string when maxLength <= 0', () => {
|
|
139
|
-
expect(TruncateString('hello', 0)).toBe('');
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
describe('PadString', () => {
|
|
143
|
-
it('pads to the end by default', () => {
|
|
144
|
-
expect(PadString('hi', 5)).toBe('hi ');
|
|
145
|
-
});
|
|
146
|
-
it('pads to the start when padEnd is false', () => {
|
|
147
|
-
expect(PadString('hi', 5, ' ', false)).toBe(' hi');
|
|
148
|
-
});
|
|
149
|
-
it('uses a custom pad character', () => {
|
|
150
|
-
expect(PadString('hi', 5, '0')).toBe('hi000');
|
|
151
|
-
});
|
|
152
|
-
it('returns the original string when length is already met', () => {
|
|
153
|
-
expect(PadString('hello', 3)).toBe('hello');
|
|
154
|
-
});
|
|
155
|
-
it('returns empty string for null input', () => {
|
|
156
|
-
expect(PadString(null, 5)).toBe('');
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
describe('REVERSE_STRING', () => {
|
|
160
|
-
it('reverses a string', () => {
|
|
161
|
-
expect(REVERSE_STRING('hello')).toBe('olleh');
|
|
162
|
-
});
|
|
163
|
-
it('handles single characters', () => {
|
|
164
|
-
expect(REVERSE_STRING('a')).toBe('a');
|
|
165
|
-
});
|
|
166
|
-
it('handles empty strings', () => {
|
|
167
|
-
expect(REVERSE_STRING('')).toBe('');
|
|
168
|
-
});
|
|
169
|
-
it('returns empty string for null', () => {
|
|
170
|
-
expect(REVERSE_STRING(null)).toBe('');
|
|
171
|
-
});
|
|
172
|
-
it('handles palindromes', () => {
|
|
173
|
-
expect(REVERSE_STRING('racecar')).toBe('racecar');
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
describe('SLUGIFY', () => {
|
|
177
|
-
it('converts to lowercase and replaces spaces with dashes', () => {
|
|
178
|
-
expect(SLUGIFY('Hello World')).toBe('hello-world');
|
|
179
|
-
});
|
|
180
|
-
it('removes special characters', () => {
|
|
181
|
-
expect(SLUGIFY('Hello, World!')).toBe('hello-world');
|
|
182
|
-
});
|
|
183
|
-
it('collapses multiple spaces and dashes', () => {
|
|
184
|
-
expect(SLUGIFY('foo bar -- baz')).toBe('foo-bar-baz');
|
|
185
|
-
});
|
|
186
|
-
it('trims leading/trailing dashes', () => {
|
|
187
|
-
expect(SLUGIFY('--hello world--')).toBe('hello-world');
|
|
188
|
-
});
|
|
189
|
-
it('returns empty string for empty/null input', () => {
|
|
190
|
-
expect(SLUGIFY('')).toBe('');
|
|
191
|
-
expect(SLUGIFY(null)).toBe('');
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
describe('IS_BLANK_STRING', () => {
|
|
195
|
-
it('returns true for an empty string', () => {
|
|
196
|
-
expect(IS_BLANK_STRING('')).toBe(true);
|
|
197
|
-
});
|
|
198
|
-
it('returns true for whitespace-only strings', () => {
|
|
199
|
-
expect(IS_BLANK_STRING(' ')).toBe(true);
|
|
200
|
-
expect(IS_BLANK_STRING('\t\n')).toBe(true);
|
|
201
|
-
});
|
|
202
|
-
it('returns false for non-blank strings', () => {
|
|
203
|
-
expect(IS_BLANK_STRING('hello')).toBe(false);
|
|
204
|
-
expect(IS_BLANK_STRING(' hi ')).toBe(false);
|
|
205
|
-
});
|
|
206
|
-
it('returns true for null/undefined', () => {
|
|
207
|
-
expect(IS_BLANK_STRING(null)).toBe(true);
|
|
208
|
-
expect(IS_BLANK_STRING(undefined)).toBe(true);
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
describe('IS_HEX_STRING', () => {
|
|
212
|
-
it('returns true for plain hex digits', () => {
|
|
213
|
-
expect(IS_HEX_STRING('1a2b3c')).toBe(true);
|
|
214
|
-
expect(IS_HEX_STRING('DEADBEEF')).toBe(true);
|
|
215
|
-
});
|
|
216
|
-
it('returns true for # prefixed hex', () => {
|
|
217
|
-
expect(IS_HEX_STRING('#ff0000')).toBe(true);
|
|
218
|
-
});
|
|
219
|
-
it('returns true for 0x prefixed hex', () => {
|
|
220
|
-
expect(IS_HEX_STRING('0xff')).toBe(true);
|
|
221
|
-
});
|
|
222
|
-
it('returns false for non-hex strings', () => {
|
|
223
|
-
expect(IS_HEX_STRING('hello')).toBe(false);
|
|
224
|
-
expect(IS_HEX_STRING('xyz')).toBe(false);
|
|
225
|
-
});
|
|
226
|
-
it('returns false for empty string', () => {
|
|
227
|
-
expect(IS_HEX_STRING('')).toBe(false);
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
describe('SNAKE_CASE', () => {
|
|
231
|
-
it('converts camelCase to snake_case', () => {
|
|
232
|
-
expect(SNAKE_CASE('helloWorld')).toBe('hello_world');
|
|
233
|
-
});
|
|
234
|
-
it('converts spaces to underscores', () => {
|
|
235
|
-
expect(SNAKE_CASE('hello world')).toBe('hello_world');
|
|
236
|
-
});
|
|
237
|
-
it('converts kebab-case to snake_case', () => {
|
|
238
|
-
expect(SNAKE_CASE('hello-world')).toBe('hello_world');
|
|
239
|
-
});
|
|
240
|
-
it('lowercases everything', () => {
|
|
241
|
-
expect(SNAKE_CASE('HelloWorld')).toBe('hello_world');
|
|
242
|
-
});
|
|
243
|
-
it('returns empty string for empty/null input', () => {
|
|
244
|
-
expect(SNAKE_CASE('')).toBe('');
|
|
245
|
-
expect(SNAKE_CASE(null)).toBe('');
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
describe('SCREAMING_SNAKE_CASE', () => {
|
|
249
|
-
it('converts camelCase to SCREAMING_SNAKE_CASE', () => {
|
|
250
|
-
expect(SCREAMING_SNAKE_CASE('helloWorld')).toBe('HELLO_WORLD');
|
|
251
|
-
});
|
|
252
|
-
it('converts spaces', () => {
|
|
253
|
-
expect(SCREAMING_SNAKE_CASE('hello world')).toBe('HELLO_WORLD');
|
|
254
|
-
});
|
|
255
|
-
it('returns empty string for empty/null input', () => {
|
|
256
|
-
expect(SCREAMING_SNAKE_CASE('')).toBe('');
|
|
257
|
-
expect(SCREAMING_SNAKE_CASE(null)).toBe('');
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
describe('StripHTML', () => {
|
|
261
|
-
it('removes HTML tags', () => {
|
|
262
|
-
expect(StripHTML('<p>Hello <strong>World</strong></p>')).toBe('Hello World');
|
|
263
|
-
});
|
|
264
|
-
it('handles self-closing tags', () => {
|
|
265
|
-
expect(StripHTML('Line1<br/>Line2')).toBe('Line1Line2');
|
|
266
|
-
});
|
|
267
|
-
it('returns string unchanged when no tags', () => {
|
|
268
|
-
expect(StripHTML('plain text')).toBe('plain text');
|
|
269
|
-
});
|
|
270
|
-
it('returns empty string for empty/null input', () => {
|
|
271
|
-
expect(StripHTML('')).toBe('');
|
|
272
|
-
expect(StripHTML(null)).toBe('');
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
describe('Pluralize', () => {
|
|
276
|
-
it('returns singular when count is 1', () => {
|
|
277
|
-
expect(Pluralize('cat', 1)).toBe('cat');
|
|
278
|
-
});
|
|
279
|
-
it('returns plural form when count is not 1', () => {
|
|
280
|
-
expect(Pluralize('cat', 0)).toBe('cats');
|
|
281
|
-
expect(Pluralize('cat', 2)).toBe('cats');
|
|
282
|
-
});
|
|
283
|
-
it('uses custom plural when provided', () => {
|
|
284
|
-
expect(Pluralize('child', 3, 'children')).toBe('children');
|
|
285
|
-
});
|
|
286
|
-
it('returns empty string for empty/null input', () => {
|
|
287
|
-
expect(Pluralize('', 2)).toBe('');
|
|
288
|
-
expect(Pluralize(null, 2)).toBe('');
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
describe('WordCount', () => {
|
|
292
|
-
it('counts words', () => {
|
|
293
|
-
expect(WordCount('hello world')).toBe(2);
|
|
294
|
-
});
|
|
295
|
-
it('handles extra whitespace', () => {
|
|
296
|
-
expect(WordCount(' foo bar baz ')).toBe(3);
|
|
297
|
-
});
|
|
298
|
-
it('returns 0 for empty string', () => {
|
|
299
|
-
expect(WordCount('')).toBe(0);
|
|
300
|
-
expect(WordCount(' ')).toBe(0);
|
|
301
|
-
});
|
|
302
|
-
it('returns 0 for null input', () => {
|
|
303
|
-
expect(WordCount(null)).toBe(0);
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
describe('CountOccurrences', () => {
|
|
307
|
-
it('counts non-overlapping occurrences', () => {
|
|
308
|
-
expect(CountOccurrences('hello world hello', 'hello')).toBe(2);
|
|
309
|
-
});
|
|
310
|
-
it('returns 0 when substring is not found', () => {
|
|
311
|
-
expect(CountOccurrences('hello', 'xyz')).toBe(0);
|
|
312
|
-
});
|
|
313
|
-
it('counts non-overlapping matches', () => {
|
|
314
|
-
expect(CountOccurrences('aaa', 'aa')).toBe(1);
|
|
315
|
-
});
|
|
316
|
-
it('returns 0 for empty inputs', () => {
|
|
317
|
-
expect(CountOccurrences('', 'a')).toBe(0);
|
|
318
|
-
expect(CountOccurrences('hello', '')).toBe(0);
|
|
319
|
-
});
|
|
320
|
-
});
|
|
321
|
-
//# sourceMappingURL=string.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"string.test.js","sourceRoot":"","sources":["../../src/string/string.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time.test.d.ts","sourceRoot":"","sources":["../../src/time/time.test.ts"],"names":[],"mappings":""}
|
package/build/time/time.test.js
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { ElapsedTime } from './elapsed-time/elapsed-time.js';
|
|
3
|
-
import { Stopwatch } from './stopwatch/stopwatch.js';
|
|
4
|
-
// ----- ElapsedTime -----
|
|
5
|
-
describe('ElapsedTime', () => {
|
|
6
|
-
describe('constructor and basic properties', () => {
|
|
7
|
-
it('stores positive milliseconds', () => {
|
|
8
|
-
const et = new ElapsedTime(5000);
|
|
9
|
-
expect(et.TotalMilliseconds).toBe(5000);
|
|
10
|
-
expect(et.IsNegative).toBe(false);
|
|
11
|
-
});
|
|
12
|
-
it('stores the absolute value and sets negative flag', () => {
|
|
13
|
-
const et = new ElapsedTime(-5000);
|
|
14
|
-
expect(et.TotalMilliseconds).toBe(5000);
|
|
15
|
-
expect(et.IsNegative).toBe(true);
|
|
16
|
-
});
|
|
17
|
-
it('handles zero milliseconds', () => {
|
|
18
|
-
const et = new ElapsedTime(0);
|
|
19
|
-
expect(et.TotalMilliseconds).toBe(0);
|
|
20
|
-
expect(et.IsNegative).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
describe('From()', () => {
|
|
24
|
-
it('computes elapsed time between start and stop', () => {
|
|
25
|
-
const et = ElapsedTime.From(1000, 3500);
|
|
26
|
-
expect(et.TotalMilliseconds).toBe(2500);
|
|
27
|
-
});
|
|
28
|
-
it('produces a negative elapsed time when stop < start', () => {
|
|
29
|
-
const et = ElapsedTime.From(5000, 3000);
|
|
30
|
-
expect(et.IsNegative).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe('Format()', () => {
|
|
34
|
-
it('formats CONCISE correctly', () => {
|
|
35
|
-
const et = new ElapsedTime(3661000); // 1h 1m 1s
|
|
36
|
-
const result = et.Format('concise');
|
|
37
|
-
expect(result).toContain('h');
|
|
38
|
-
expect(result).toContain('m');
|
|
39
|
-
});
|
|
40
|
-
it('formats LONG correctly with pluralization', () => {
|
|
41
|
-
const et = new ElapsedTime(7322000); // 2h 2m 2s
|
|
42
|
-
const result = et.Format('long');
|
|
43
|
-
expect(result).toContain('hours');
|
|
44
|
-
expect(result).toContain('minutes');
|
|
45
|
-
expect(result).toContain('seconds');
|
|
46
|
-
});
|
|
47
|
-
it('formats LONG singly for 1 unit', () => {
|
|
48
|
-
const et = new ElapsedTime(3661000); // 1h 1m 1s
|
|
49
|
-
const result = et.Format('long');
|
|
50
|
-
expect(result).toContain('hour');
|
|
51
|
-
expect(result).toContain('minute');
|
|
52
|
-
expect(result).toContain('second');
|
|
53
|
-
});
|
|
54
|
-
it('formats TIME as hh:mm', () => {
|
|
55
|
-
const et = new ElapsedTime(3661000); // 1h 1m 1s
|
|
56
|
-
const result = et.Format('time');
|
|
57
|
-
expect(result).toMatch(/\d+:\d+/);
|
|
58
|
-
});
|
|
59
|
-
it('formats TIME_WITH_SECONDS as hh:mm:ss', () => {
|
|
60
|
-
const et = new ElapsedTime(3661000);
|
|
61
|
-
const result = et.Format('timeWithSeconds');
|
|
62
|
-
expect(result).toMatch(/\d+:\d+:\d+/);
|
|
63
|
-
});
|
|
64
|
-
it('produces "0 seconds" for zero duration in LONG format', () => {
|
|
65
|
-
const et = new ElapsedTime(0);
|
|
66
|
-
expect(et.Format('long')).toBe('0 seconds');
|
|
67
|
-
});
|
|
68
|
-
it('supports maxUnits option', () => {
|
|
69
|
-
const et = new ElapsedTime(3661500); // 1h 1m 1s 500ms
|
|
70
|
-
const result = et.Format('long', { maxUnits: 2 });
|
|
71
|
-
// Should only show 2 units
|
|
72
|
-
const parts = result.split(' ').filter((p) => /^(hour|minute|second|millisecond|day|week)/.test(p));
|
|
73
|
-
expect(parts.length).toBeLessThanOrEqual(2);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
describe('static Format()', () => {
|
|
77
|
-
it('formats milliseconds directly', () => {
|
|
78
|
-
const result = ElapsedTime.Format(3600000); // 1h
|
|
79
|
-
expect(result).toContain('h');
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
// ----- Stopwatch -----
|
|
84
|
-
describe('Stopwatch', () => {
|
|
85
|
-
let now;
|
|
86
|
-
beforeEach(() => {
|
|
87
|
-
now = 1000;
|
|
88
|
-
vi.spyOn(Date, 'now').mockImplementation(() => now);
|
|
89
|
-
});
|
|
90
|
-
afterEach(() => {
|
|
91
|
-
vi.restoreAllMocks();
|
|
92
|
-
});
|
|
93
|
-
describe('initial state', () => {
|
|
94
|
-
it('is not running when created without startImmediately', () => {
|
|
95
|
-
const sw = new Stopwatch();
|
|
96
|
-
expect(sw.Running).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
it('starts running when created with startImmediately=true', () => {
|
|
99
|
-
const sw = new Stopwatch(true);
|
|
100
|
-
expect(sw.Running).toBe(true);
|
|
101
|
-
});
|
|
102
|
-
it('has undefined First and Latest', () => {
|
|
103
|
-
const sw = new Stopwatch();
|
|
104
|
-
expect(sw.First).toBeUndefined();
|
|
105
|
-
expect(sw.Latest).toBeUndefined();
|
|
106
|
-
});
|
|
107
|
-
it('returns zero elapsed time before start', () => {
|
|
108
|
-
const sw = new Stopwatch();
|
|
109
|
-
expect(sw.Elapsed.TotalMilliseconds).toBe(0);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
describe('Start()', () => {
|
|
113
|
-
it('starts the stopwatch', () => {
|
|
114
|
-
const sw = new Stopwatch();
|
|
115
|
-
sw.Start();
|
|
116
|
-
expect(sw.Running).toBe(true);
|
|
117
|
-
});
|
|
118
|
-
it('returns the first entry', () => {
|
|
119
|
-
const sw = new Stopwatch();
|
|
120
|
-
const entry = sw.Start();
|
|
121
|
-
expect(entry).toBeDefined();
|
|
122
|
-
});
|
|
123
|
-
it('does not start again if already started', () => {
|
|
124
|
-
const sw = new Stopwatch();
|
|
125
|
-
const e1 = sw.Start();
|
|
126
|
-
const e2 = sw.Start();
|
|
127
|
-
expect(e1).toBe(e2);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
describe('Stop()', () => {
|
|
131
|
-
it('stops a running stopwatch', () => {
|
|
132
|
-
const sw = new Stopwatch();
|
|
133
|
-
sw.Start();
|
|
134
|
-
now = 2000;
|
|
135
|
-
sw.Stop();
|
|
136
|
-
expect(sw.Running).toBe(false);
|
|
137
|
-
});
|
|
138
|
-
it('returns undefined when not started', () => {
|
|
139
|
-
const sw = new Stopwatch();
|
|
140
|
-
expect(sw.Stop()).toBeUndefined();
|
|
141
|
-
});
|
|
142
|
-
it('records the correct elapsed time', () => {
|
|
143
|
-
const sw = new Stopwatch();
|
|
144
|
-
sw.Start();
|
|
145
|
-
now = 3000;
|
|
146
|
-
sw.Stop();
|
|
147
|
-
expect(sw.Elapsed.TotalMilliseconds).toBe(2000);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
describe('Pause() and Resume()', () => {
|
|
151
|
-
it('pauses a running stopwatch', () => {
|
|
152
|
-
const sw = new Stopwatch(true);
|
|
153
|
-
sw.Pause();
|
|
154
|
-
expect(sw.Running).toBe(false);
|
|
155
|
-
expect(sw.PausedAt).not.toBeNull();
|
|
156
|
-
});
|
|
157
|
-
it('resumes a paused stopwatch', () => {
|
|
158
|
-
const sw = new Stopwatch(true);
|
|
159
|
-
sw.Pause();
|
|
160
|
-
sw.Resume();
|
|
161
|
-
expect(sw.Running).toBe(true);
|
|
162
|
-
expect(sw.PausedAt).toBeNull();
|
|
163
|
-
});
|
|
164
|
-
it('returns null when Resume is called without Pause', () => {
|
|
165
|
-
const sw = new Stopwatch(true);
|
|
166
|
-
expect(sw.Resume()).toBeNull();
|
|
167
|
-
});
|
|
168
|
-
it('returns null when Pause is called on a not-started stopwatch', () => {
|
|
169
|
-
const sw = new Stopwatch();
|
|
170
|
-
expect(sw.Pause()).toBeNull();
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
describe('Lap()', () => {
|
|
174
|
-
it('returns elapsed time since last lap/click', () => {
|
|
175
|
-
const sw = new Stopwatch(true);
|
|
176
|
-
now = 1500;
|
|
177
|
-
const lap = sw.Lap();
|
|
178
|
-
expect(lap.TotalMilliseconds).toBe(500);
|
|
179
|
-
});
|
|
180
|
-
it('returns zero for first lap with no previous entry', () => {
|
|
181
|
-
const sw = new Stopwatch();
|
|
182
|
-
const lap = sw.Lap();
|
|
183
|
-
expect(lap.TotalMilliseconds).toBe(0);
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
describe('Reset()', () => {
|
|
187
|
-
it('resets times and running state', () => {
|
|
188
|
-
const sw = new Stopwatch(true);
|
|
189
|
-
sw.Stop();
|
|
190
|
-
sw.Reset();
|
|
191
|
-
expect(sw.Running).toBe(false);
|
|
192
|
-
expect(sw.Times).toHaveLength(0);
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
describe('Elapsed', () => {
|
|
196
|
-
it('is calculated relative to the first entry', () => {
|
|
197
|
-
const sw = new Stopwatch(true);
|
|
198
|
-
now = 5000;
|
|
199
|
-
expect(sw.Elapsed.TotalMilliseconds).toBe(4000);
|
|
200
|
-
});
|
|
201
|
-
it('is frozen at stop time after Stop()', () => {
|
|
202
|
-
const sw = new Stopwatch(true);
|
|
203
|
-
now = 3000;
|
|
204
|
-
sw.Stop();
|
|
205
|
-
// Advance time further - elapsed should not change
|
|
206
|
-
now = 9000;
|
|
207
|
-
expect(sw.Elapsed.TotalMilliseconds).toBe(2000);
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
//# sourceMappingURL=time.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time.test.js","sourceRoot":"","sources":["../../src/time/time.test.ts"],"names":[],"mappings":"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"}
|