Files
pnpm/object/property-path/test/token/tokenize.test.ts

52 lines
1.9 KiB
TypeScript

import { type Token, tokenize } from '../../src/index.js'
test('valid tokens', () => {
expect(Array.from(tokenize(''))).toStrictEqual([] as Token[])
expect(Array.from(tokenize(
'packageExtensions.react.dependencies["@types/node"]'
))).toStrictEqual([
{ type: 'identifier', content: 'packageExtensions' },
{ type: 'exact', content: '.' },
{ type: 'identifier', content: 'react' },
{ type: 'exact', content: '.' },
{ type: 'identifier', content: 'dependencies' },
{ type: 'exact', content: '[' },
{ type: 'string-literal', quote: '"', content: '@types/node' },
{ type: 'exact', content: ']' },
] as Token[])
expect(Array.from(tokenize(
'packageExtensions .react\n.dependencies[ "@types/node" ]'
))).toStrictEqual([
{ type: 'identifier', content: 'packageExtensions' },
{ type: 'whitespace' },
{ type: 'exact', content: '.' },
{ type: 'identifier', content: 'react' },
{ type: 'whitespace' },
{ type: 'exact', content: '.' },
{ type: 'identifier', content: 'dependencies' },
{ type: 'exact', content: '[' },
{ type: 'whitespace' },
{ type: 'string-literal', quote: '"', content: '@types/node' },
{ type: 'whitespace' },
{ type: 'exact', content: ']' },
] as Token[])
})
test('unexpected tokens', () => {
expect(Array.from(tokenize('@'))).toStrictEqual([{ type: 'unexpected', content: '@' }] as Token[])
expect(Array.from(tokenize(
'packageExtensions.react.@!dependencies["@types/node"]'
))).toStrictEqual([
{ type: 'identifier', content: 'packageExtensions' },
{ type: 'exact', content: '.' },
{ type: 'identifier', content: 'react' },
{ type: 'exact', content: '.' },
{ type: 'unexpected', content: '@' },
{ type: 'unexpected', content: '!' },
{ type: 'identifier', content: 'dependencies' },
{ type: 'exact', content: '[' },
{ type: 'string-literal', quote: '"', content: '@types/node' },
{ type: 'exact', content: ']' },
] as Token[])
})