Skip to content

Commit e2ef848

Browse files
committed
refactor: - Add escapeInvisibleCharacters() to make Variation Selectors visible in tests
1 parent f6b2f2b commit e2ef848

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

src/lib/StringHelpers.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
11
export function capitalizeFirstLetter(text: string): string {
22
return text.charAt(0).toUpperCase() + text.slice(1);
33
}
4+
5+
/**
6+
* Escape non-visible Variation Selectors characters in string.
7+
* Converts them into their Unicode escape sequences for explicit visibility.
8+
*/
9+
export function escapeInvisibleCharacters(input: string): string {
10+
return input.replace(
11+
/[\uFE00-\uFE0F]/g, // Matches Variation Selectors
12+
(char) => `\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}`,
13+
);
14+
}

tests/lib/StringHelpers.test.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { escapeInvisibleCharacters } from '../../src/lib/StringHelpers';
2+
3+
describe('StringHelpers', () => {
4+
it('escapeInvisibleCharacters', () => {
5+
const value = `
6+
// Variation Selectors
7+
⛔\uFE00 // VS1
8+
⛔\uFE01 // VS2
9+
⛔\uFE02 // VS3
10+
⛔\uFE03 // VS4
11+
⛔\uFE04 // VS5
12+
⛔\uFE05 // VS6
13+
⛔\uFE06 // VS7
14+
⛔\uFE07 // VS8
15+
⛔\uFE08 // VS9
16+
⛔\uFE09 // VS10
17+
⛔\uFE0A // VS11
18+
⛔\uFE0B // VS12
19+
⛔\uFE0C // VS13
20+
⛔\uFE0D // VS14
21+
⛔\uFE0E // VS15
22+
⛔\uFE0F // VS16
23+
`;
24+
expect(value).toMatchInlineSnapshot(`
25+
"
26+
// Variation Selectors
27+
⛔︀ // VS1
28+
⛔︁ // VS2
29+
⛔︂ // VS3
30+
⛔︃ // VS4
31+
⛔︄ // VS5
32+
⛔︅ // VS6
33+
⛔︆ // VS7
34+
⛔︇ // VS8
35+
⛔︈ // VS9
36+
⛔︉ // VS10
37+
⛔︊ // VS11
38+
⛔︋ // VS12
39+
⛔︌ // VS13
40+
⛔︍ // VS14
41+
⛔︎ // VS15
42+
⛔️ // VS16
43+
"
44+
`);
45+
46+
expect(escapeInvisibleCharacters(value)).toMatchInlineSnapshot(`
47+
"
48+
// Variation Selectors
49+
⛔\\ufe00 // VS1
50+
⛔\\ufe01 // VS2
51+
⛔\\ufe02 // VS3
52+
⛔\\ufe03 // VS4
53+
⛔\\ufe04 // VS5
54+
⛔\\ufe05 // VS6
55+
⛔\\ufe06 // VS7
56+
⛔\\ufe07 // VS8
57+
⛔\\ufe08 // VS9
58+
⛔\\ufe09 // VS10
59+
⛔\\ufe0a // VS11
60+
⛔\\ufe0b // VS12
61+
⛔\\ufe0c // VS13
62+
⛔\\ufe0d // VS14
63+
⛔\\ufe0e // VS15
64+
⛔\\ufe0f // VS16
65+
"
66+
`);
67+
});
68+
});

0 commit comments

Comments
 (0)