54 lines
2.3 KiB
TypeScript
54 lines
2.3 KiB
TypeScript
import type { MenuItemConstructorOptions } from 'electron'
|
||
import { describe, expect, it, vi } from 'vitest'
|
||
|
||
import { localizeNativeMenu, resolveNativeMenuLocale } from './native-menu-locale'
|
||
|
||
describe('native menu language', () => {
|
||
it('translates nested labels without changing actions, roles or keyboard ownership', () => {
|
||
const openFolder = vi.fn()
|
||
const zoom = vi.fn()
|
||
|
||
const template: MenuItemConstructorOptions[] = [
|
||
{
|
||
label: 'File',
|
||
submenu: [{ label: 'Open Folder…', click: openFolder }, { type: 'separator' }, { role: 'quit' }]
|
||
},
|
||
{
|
||
label: 'View',
|
||
submenu: [{ label: 'Zoom In', accelerator: 'CommandOrControl+Plus', click: zoom }, { role: 'togglefullscreen' }]
|
||
},
|
||
{ label: 'My custom action', enabled: false }
|
||
]
|
||
|
||
const translated = localizeNativeMenu(template, 'tr', 'AITURK IDE')
|
||
const file = translated[0].submenu as MenuItemConstructorOptions[]
|
||
const view = translated[1].submenu as MenuItemConstructorOptions[]
|
||
expect(translated[0].label).toBe('Dosya')
|
||
expect(file[0]).toEqual({ label: 'Klasör aç…', click: openFolder })
|
||
expect(file[1]).toEqual({ type: 'separator' })
|
||
expect(file[2]).toEqual({ role: 'quit', label: 'AITURK IDE uygulamasından çık' })
|
||
expect(view[0]).toEqual({ label: 'Yakınlaştır', accelerator: 'CommandOrControl+Plus', click: zoom })
|
||
expect(view[1].role).toBe('togglefullscreen')
|
||
expect(translated[2]).toEqual(template[2])
|
||
expect(localizeNativeMenu(template, 'en', 'AITURK IDE')).toBe(template)
|
||
expect((template[0].submenu as MenuItemConstructorOptions[])[0].label).toBe('Open Folder…')
|
||
expect(openFolder).not.toHaveBeenCalled()
|
||
expect(zoom).not.toHaveBeenCalled()
|
||
})
|
||
|
||
it('accepts only supported language messages from the primary renderer', () => {
|
||
expect(resolveNativeMenuLocale('tr', 42, 42)).toBe('tr')
|
||
expect(resolveNativeMenuLocale('en', 42, 42)).toBe('en')
|
||
expect(resolveNativeMenuLocale('ja', 42, 42)).toBe('en')
|
||
|
||
for (const locale of ['tr', 'en']) {
|
||
expect(resolveNativeMenuLocale(locale, 43, 42)).toBeNull()
|
||
expect(resolveNativeMenuLocale(locale, 42, undefined)).toBeNull()
|
||
}
|
||
|
||
for (const value of [null, {}, ['tr'], 'unsupported', '__proto__']) {
|
||
expect(resolveNativeMenuLocale(value, 42, 42)).toBeNull()
|
||
}
|
||
})
|
||
})
|