Skip to content

Commit 48897f5

Browse files
committed
test(extract-define-i18n-route): add tests for extractDefineI18nRouteData function
1 parent 1cf03ea commit 48897f5

77 files changed

Lines changed: 2324 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

test/examples/array-methods.vue

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with array methods
9+
const allLocales = ['en', 'de', 'fr', 'es', 'it', 'pt']
10+
const supportedLocales = allLocales.filter(locale =>
11+
['en', 'de', 'fr'].includes(locale),
12+
)
13+
14+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
15+
// @ts-expect-error
16+
$defineI18nRoute({
17+
locales: supportedLocales,
18+
localeRoutes: supportedLocales.reduce((acc, locale) => {
19+
acc[locale] = `/${locale === 'en' ? 'welcome' : locale === 'de' ? 'willkommen' : 'bienvenue'}`
20+
return acc
21+
}, {} as Record<string, string>),
22+
})
23+
</script>

test/examples/array-of-objects.vue

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with arrays containing objects
9+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
10+
// @ts-expect-error
11+
$defineI18nRoute({
12+
locales: [
13+
{ code: 'en', name: 'English', flag: '🇺🇸' },
14+
{ code: 'de', name: 'German', flag: '🇩🇪' },
15+
{ code: 'fr', name: 'French', flag: '🇫🇷' },
16+
],
17+
localeRoutes: {
18+
en: '/welcome',
19+
de: '/willkommen',
20+
fr: '/bienvenue',
21+
},
22+
})
23+
</script>

test/examples/arrow-functions.vue

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with arrow functions and chaining
9+
const processLocales = (rawLocales: string[]) => {
10+
return rawLocales
11+
.filter(locale => locale.length === 2)
12+
.map(locale => locale.toLowerCase())
13+
.sort()
14+
.slice(0, 3)
15+
}
16+
17+
const processPaths = (locales: string[]) => {
18+
return locales.reduce((acc, locale) => {
19+
acc[locale] = `/${locale === 'en' ? 'welcome' : locale === 'de' ? 'willkommen' : 'bienvenue'}`
20+
return acc
21+
}, {} as Record<string, string>)
22+
}
23+
24+
const rawLocales = ['EN', 'de', 'fr', 'invalid', 'es']
25+
const processedLocales = processLocales(rawLocales)
26+
27+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
28+
// @ts-expect-error
29+
$defineI18nRoute({
30+
locales: processedLocales,
31+
localeRoutes: processPaths(processedLocales),
32+
})
33+
</script>

test/examples/async-await.vue

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with async/await
9+
const fetchLocales = async () => {
10+
return ['en', 'de', 'fr']
11+
}
12+
13+
const fetchPaths = async () => {
14+
return {
15+
en: '/welcome',
16+
de: '/willkommen',
17+
fr: '/bienvenue',
18+
}
19+
}
20+
21+
// Note: This won't work in real scenario, but tests parsing
22+
const locales = await fetchLocales()
23+
const paths = await fetchPaths()
24+
25+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
26+
// @ts-expect-error
27+
$defineI18nRoute({
28+
locales: locales,
29+
localeRoutes: paths,
30+
})
31+
</script>

test/examples/bigint-numbers.vue

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with BigInt and Number methods
9+
const localeCount = BigInt(3)
10+
const locales = ['en', 'de', 'fr'].slice(0, Number(localeCount))
11+
12+
const _pathCount = Number.parseInt('3', 10)
13+
const localeRoutes = {
14+
en: '/welcome',
15+
de: '/willkommen',
16+
fr: '/bienvenue',
17+
}
18+
19+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
20+
// @ts-expect-error
21+
$defineI18nRoute({
22+
locales: locales,
23+
localeRoutes: localeRoutes,
24+
})
25+
</script>

test/examples/class-methods.vue

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with class and methods
9+
class LocaleConfig {
10+
private locales: string[] = ['en', 'de', 'fr']
11+
12+
getLocales() {
13+
return this.locales
14+
}
15+
16+
getPaths() {
17+
return {
18+
en: '/welcome',
19+
de: '/willkommen',
20+
fr: '/bienvenue',
21+
}
22+
}
23+
}
24+
25+
const config = new LocaleConfig()
26+
27+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
28+
// @ts-expect-error
29+
$defineI18nRoute({
30+
locales: config.getLocales(),
31+
localeRoutes: config.getPaths(),
32+
})
33+
</script>

test/examples/complex-comments.vue

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
/*
9+
* Multi-line comment block
10+
* This is a complex configuration
11+
* with multiple locales and paths
12+
*/
13+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
14+
// @ts-expect-error
15+
$defineI18nRoute({
16+
// Single line comment for locales
17+
locales: [
18+
'en', // English
19+
'de', // German
20+
'fr', // French
21+
],
22+
/* Multi-line comment for localeRoutes */
23+
localeRoutes: {
24+
en: '/welcome', // Welcome page
25+
de: '/willkommen', // Willkommen page
26+
fr: '/bienvenue', // Bienvenue page
27+
},
28+
})
29+
</script>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with complex nested objects
9+
const config = {
10+
locales: {
11+
'en-us': {
12+
path: '/welcome',
13+
meta: {
14+
title: 'Welcome',
15+
description: 'Welcome to our site',
16+
keywords: ['welcome', 'home', 'main'],
17+
},
18+
},
19+
'de-de': {
20+
path: '/willkommen',
21+
meta: {
22+
title: 'Willkommen',
23+
description: 'Willkommen auf unserer Website',
24+
keywords: ['willkommen', 'startseite', 'hauptseite'],
25+
},
26+
},
27+
},
28+
}
29+
30+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
31+
// @ts-expect-error
32+
$defineI18nRoute(config)
33+
</script>

test/examples/complex-nested.vue

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Complex object with nested structure
9+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
10+
// @ts-expect-error
11+
$defineI18nRoute({
12+
locales: {
13+
'en-us': {
14+
path: '/welcome',
15+
meta: {
16+
title: 'Welcome',
17+
},
18+
},
19+
'de-de': {
20+
path: '/willkommen',
21+
meta: {
22+
title: 'Willkommen',
23+
},
24+
},
25+
'ru-ru': {
26+
path: '/dobro-pozhalovat',
27+
meta: {
28+
title: 'Добро пожаловать',
29+
},
30+
},
31+
},
32+
})
33+
</script>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<template>
2+
<div>
3+
<h1>{{ $t('welcome') }}</h1>
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// Test with computed property names
9+
const locale = 'en'
10+
const path = 'welcome'
11+
12+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
13+
// @ts-expect-error
14+
$defineI18nRoute({
15+
locales: [locale, 'de', 'fr'],
16+
localeRoutes: {
17+
[locale]: `/${path}`,
18+
de: '/willkommen',
19+
fr: '/bienvenue',
20+
},
21+
})
22+
</script>

0 commit comments

Comments
 (0)