augmenttoolkit / node_modules /@adobe /css-tools /src /utils /stringSearch.test.ts
Leon4gr45's picture
Include updated package-lock.json
a23aa7d verified
Raw
History Blame Contribute Delete
4.16 kB
import {
indexOfArrayNonEscaped,
indexOfArrayWithBracketAndQuoteSupport,
MAX_LOOP,
splitWithBracketAndQuoteSupport,
} from './stringSearch';
describe('indexOfArrayNonEscaped', () => {
it('should find first non-escaped occurrence', () => {
expect(indexOfArrayNonEscaped('abc def', ['d'])).toBe(4);
expect(indexOfArrayNonEscaped('abc \\def ghi def', ['d'])).toBe(13);
});
it('should handle multiple search strings', () => {
expect(indexOfArrayNonEscaped('abc def ghi', ['d', 'g'])).toBe(4);
expect(indexOfArrayNonEscaped('abc ghi def', ['d', 'g'])).toBe(4);
});
it('should return -1 when not found', () => {
expect(indexOfArrayNonEscaped('abc def', ['x'])).toBe(-1);
expect(indexOfArrayNonEscaped('abc \\xyz def', ['x'])).toBe(-1);
});
it('should respect start position', () => {
expect(indexOfArrayNonEscaped('abc def def', ['def'], 5)).toBe(8);
});
it('should throw error on too many escapes', () => {
const tooManyEscapes = '\\a\\b\\c\\d'.repeat(MAX_LOOP / 2);
expect(() => indexOfArrayNonEscaped(tooManyEscapes, ['x'])).toThrow(
'Too many escaping',
);
});
});
describe('indexOfArrayWithBracketAndQuoteSupport', () => {
it('should find first non-escaped occurrence', () => {
expect(indexOfArrayWithBracketAndQuoteSupport('abc def', ['d'])).toBe(4);
expect(
indexOfArrayWithBracketAndQuoteSupport('abc \\def ghi def', ['d']),
).toBe(13);
});
it('should handle brackets correctly', () => {
expect(indexOfArrayWithBracketAndQuoteSupport('abc (def) ghi', ['g'])).toBe(
10,
);
expect(
indexOfArrayWithBracketAndQuoteSupport('abc (d(e)f) ghi', ['g']),
).toBe(12);
expect(indexOfArrayWithBracketAndQuoteSupport('abc (def ghi', ['g'])).toBe(
-1,
);
});
it('should handle double quotes correctly', () => {
expect(indexOfArrayWithBracketAndQuoteSupport('abc "def" ghi', ['g'])).toBe(
10,
);
expect(
indexOfArrayWithBracketAndQuoteSupport('abc "d\\"ef" ghi', ['g']),
).toBe(12);
expect(indexOfArrayWithBracketAndQuoteSupport('abc "def ghi', ['g'])).toBe(
-1,
);
});
it('should handle single quotes correctly', () => {
expect(indexOfArrayWithBracketAndQuoteSupport("abc 'def' ghi", ['g'])).toBe(
10,
);
expect(
indexOfArrayWithBracketAndQuoteSupport("abc 'd\\'ef' ghi", ['g']),
).toBe(12);
expect(indexOfArrayWithBracketAndQuoteSupport("abc 'def ghi", ['g'])).toBe(
-1,
);
});
it('should handle multiple search strings', () => {
expect(
indexOfArrayWithBracketAndQuoteSupport('abc def ghi', ['d', 'g']),
).toBe(4);
expect(
indexOfArrayWithBracketAndQuoteSupport('abc (def) ghi', ['d', 'g']),
).toBe(10);
});
it('should throw error on too many escapes or nested structures', () => {
const tooManyEscapes = '\\a\\b\\c\\d'.repeat(MAX_LOOP / 2);
expect(() =>
indexOfArrayWithBracketAndQuoteSupport(tooManyEscapes, ['x']),
).toThrow('Too many escaping');
const tooManyBrackets = '()'.repeat(MAX_LOOP + 1);
expect(() =>
indexOfArrayWithBracketAndQuoteSupport(tooManyBrackets, [')']),
).toThrow('Too many escaping');
});
});
describe('splitWithBracketAndQuoteSupport', () => {
test('splits string by search tokens', () => {
expect(splitWithBracketAndQuoteSupport('a,b', [','])).toEqual(['a', 'b']);
});
test('respects brackets', () => {
expect(splitWithBracketAndQuoteSupport('a,(b,c)', [','])).toEqual([
'a',
'(b,c)',
]);
});
test('respects double quotes', () => {
expect(splitWithBracketAndQuoteSupport('a,"b,c"', [','])).toEqual([
'a',
'"b,c"',
]);
});
test('respects single quotes', () => {
expect(splitWithBracketAndQuoteSupport("a,'b,c'", [','])).toEqual([
'a',
"'b,c'",
]);
});
test('handles multiple search tokens', () => {
expect(splitWithBracketAndQuoteSupport('a;b,c', [';', ','])).toEqual([
'a',
'b',
'c',
]);
});
test('handles empty strings', () => {
expect(splitWithBracketAndQuoteSupport('', [','])).toEqual([]);
});
});