tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 12.6 kB
Source Map (JSON)
{"version":3,"file":"locale.test.mjs","sources":["../../../../../src/_common/test/unit/locale/locale.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from 'vitest';\nimport { t } from '../../../js/global-config/t';\n\ndescribe('国际化函数 t', () => {\n describe('基本变量替换', () => {\n it('应该正确替换单个变量', () => {\n expect(t('Hello {name}', { name: 'World' })).toBe('Hello World');\n });\n\n it('应该正确替换多个变量', () => {\n expect(t('User {id}: {username}', { id: 123, username: 'alice' })).toBe('User 123: alice');\n });\n\n it('应该正确处理变量名包含连字符', () => {\n expect(t('Hello {user-name}', { 'user-name': 'John' })).toBe('Hello John');\n });\n\n it('应该正确处理变量周围有空格', () => {\n expect(t('Hello { name }', { name: 'World' })).toBe('Hello World');\n });\n\n it('当变量不存在时应该保留原始占位符', () => {\n expect(t('text with {missing} variable', {})).toBe('text with {missing} variable');\n });\n\n it('当没有传入数据时应该保留原始占位符', () => {\n expect(t('Hello {name}')).toBe('Hello {name}');\n });\n\n it('应该将变量值转换为字符串', () => {\n expect(t('Number: {num}', { num: 42 })).toBe('Number: 42');\n expect(t('Boolean: {flag}', { flag: true })).toBe('Boolean: true');\n });\n });\n\n describe('复数处理', () => {\n it('当 count = 0 时应该使用第一个选项', () => {\n expect(t('no apples | one apple | {count} apples', 0)).toBe('no apples');\n });\n\n it('当 count = 1 时应该使用第二个选项', () => {\n expect(t('no apples | one apple | {count} apples', 1)).toBe('one apple');\n });\n\n it('当 count > 1 时应该使用第三个选项', () => {\n expect(t('no apples | one apple | {count} apples', 5)).toBe('5 apples');\n expect(t('no apples | one apple | {count} apples', 100)).toBe('100 apples');\n });\n\n it('当没有 count 字段时应该使用第一个选项', () => {\n expect(t('no data | one item | many items')).toBe('no data');\n expect(t('no data | one item | many items', {})).toBe('no data');\n });\n\n it('当复数选项数量不足时应该使用最后一个选项', () => {\n expect(t('zero | many', 0)).toBe('zero');\n expect(t('zero | many', 1)).toBe('many');\n expect(t('zero | many', 5)).toBe('many');\n });\n\n it('应该正确处理复数选项前后的空格', () => {\n expect(t(' no items | one item | many items ', 0)).toBe('no items');\n expect(t(' no items | one item | many items ', 1)).toBe('one item');\n expect(t(' no items | one item | many items ', 5)).toBe('many items');\n });\n });\n\n describe('复合使用(复数 + 变量替换)', () => {\n it('应该正确处理复数选择和变量替换的组合', () => {\n expect(t('no items found | found {count} item | found {count} items', 0)).toBe('no items found');\n expect(t('no items found | found {count} item | found {count} items', 1, { count: 1 })).toBe('found 1 item');\n expect(t('no items found | found {count} item | found {count} items', 3, { count: 3 })).toBe('found 3 items');\n });\n\n it('应该正确处理只传入 count 的情况', () => {\n expect(t('no items | one item | {count} items', 0)).toBe('no items');\n expect(t('no items | one item | {count} items', 1)).toBe('one item');\n expect(t('no items | one item | {count} items', 5)).toBe('5 items');\n expect(t('no items | one item | items', 5)).toBe('items');\n });\n\n it('应该正确处理包含其他变量的复数文本', () => {\n expect(t('no {type} | one {type} ({count}) | {count} {type}s', 0, { type: 'file' })).toBe('no file');\n expect(t('no {type} | one {type} ({count}) | {count} {type}s', 1, { count: 1, type: 'file' })).toBe(\n 'one file (1)'\n );\n expect(t('no {type} | one {type} ({count}) | {count} {type}s', 5, { count: 5, type: 'file' })).toBe('5 files');\n });\n });\n\n describe('纯文本处理', () => {\n it('应该直接返回纯文本', () => {\n expect(t('simple text')).toBe('simple text');\n expect(t('Hello World')).toBe('Hello World');\n });\n\n it('应该处理空字符串', () => {\n expect(t('')).toBe('');\n });\n });\n\n describe('边界情况和错误处理', () => {\n it('应该处理 null 和 undefined', () => {\n expect(t(null as any)).toBe('');\n expect(t(undefined as any)).toBe('');\n });\n\n it('应该处理数字类型', () => {\n expect(t(123 as any)).toBe('');\n });\n\n it('应该处理布尔类型', () => {\n expect(t(true as any)).toBe('');\n expect(t(false as any)).toBe('');\n });\n\n it('应该处理对象类型', () => {\n expect(t({} as any)).toBe('');\n expect(t({ key: 'value' } as any)).toBe('');\n });\n\n it('应该处理数组类型', () => {\n expect(t([] as any)).toBe('');\n expect(t(['item'] as any)).toBe('');\n });\n\n it('应该处理复杂的变量名', () => {\n expect(t('Hello {user_name}', { user_name: 'John' })).toBe('Hello John'); // 下划线支持\n expect(t('Hello {user-name}', { 'user-name': 'John' })).toBe('Hello John'); // 连字符支持\n expect(t('Hello {userName}', { userName: 'John' })).toBe('Hello John'); // 驼峰支持\n });\n });\n\n describe('实际应用场景', () => {\n it('搜索结果场景', () => {\n const pattern =\n 'Search \"{result}\". Found no items. | Search \"{result}\". Found 1 item. | Search \"{result}\". Found {count} items.';\n const getSearchResultText = (count: number, result: string) => t(pattern, count, { count, result });\n\n expect(getSearchResultText(0, 'apple')).toBe('Search \"apple\". Found no items.');\n expect(getSearchResultText(1, 'apple')).toBe('Search \"apple\". Found 1 item.');\n expect(getSearchResultText(5, 'apple')).toBe('Search \"apple\". Found 5 items.');\n });\n });\n});\n"],"names":["describe","it","expect","t","name","toBe","id","username","num","flag","count","type","key","user_name","userName","pattern","getSearchResultText","result"],"mappings":"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"}