Files
code-server/test/unit/node/i18n.test.ts
T
2026-10-09 22:50:17 +00:00

159 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { promises as fs } from "fs"
import * as os from "os"
import * as path from "path"
import i18n, { loadCustomStrings } from "../../../src/node/i18n"
describe("i18n", () => {
it("includes Turkish translations", () => {
expect(i18n.getResource("tr", "translation", "WELCOME")).toBe("{{app}} uygulamasına hoş geldiniz")
})
let tempDir: string
let validJsonFile: string
let invalidJsonFile: string
let nonExistentFile: string
beforeEach(async () => {
// Create temporary directory for test files
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "code-server-i18n-test-"))
// Create test files
validJsonFile = path.join(tempDir, "valid.json")
invalidJsonFile = path.join(tempDir, "invalid.json")
nonExistentFile = path.join(tempDir, "does-not-exist.json")
// Write valid JSON file
await fs.writeFile(
validJsonFile,
JSON.stringify({
WELCOME: "Custom Welcome",
LOGIN_TITLE: "My Custom App",
LOGIN_BELOW: "Please log in to continue",
}),
)
// Write invalid JSON file
await fs.writeFile(invalidJsonFile, '{"WELCOME": "Missing closing quote}')
})
afterEach(async () => {
// Clean up temporary directory
await fs.rmdir(tempDir, { recursive: true })
})
describe("loadCustomStrings", () => {
it("should load valid JSON file successfully", async () => {
// Should not throw an error
await expect(loadCustomStrings(validJsonFile)).resolves.toBeUndefined()
})
it("should throw clear error for non-existent file", async () => {
await expect(loadCustomStrings(nonExistentFile)).rejects.toThrow(
`Custom strings file not found: ${nonExistentFile}\nPlease ensure the file exists and is readable.`,
)
})
it("should throw clear error for invalid JSON", async () => {
await expect(loadCustomStrings(invalidJsonFile)).rejects.toThrow(
`Invalid JSON in custom strings file: ${invalidJsonFile}`,
)
})
it("should handle empty JSON object", async () => {
const emptyJsonFile = path.join(tempDir, "empty.json")
await fs.writeFile(emptyJsonFile, "{}")
await expect(loadCustomStrings(emptyJsonFile)).resolves.toBeUndefined()
})
it("should handle nested JSON objects", async () => {
const nestedJsonFile = path.join(tempDir, "nested.json")
await fs.writeFile(
nestedJsonFile,
JSON.stringify({
WELCOME: "Hello World",
NESTED: {
KEY: "Value",
},
}),
)
await expect(loadCustomStrings(nestedJsonFile)).resolves.toBeUndefined()
})
it("should handle special characters and unicode", async () => {
const unicodeJsonFile = path.join(tempDir, "unicode.json")
await fs.writeFile(
unicodeJsonFile,
JSON.stringify({
WELCOME: "欢迎来到 code-server",
LOGIN_TITLE: "Willkommen bei {{app}}",
SPECIAL: "Special chars: àáâãäåæçèéêë 🚀 ♠️ ∆",
}),
"utf8",
)
await expect(loadCustomStrings(unicodeJsonFile)).resolves.toBeUndefined()
})
it("should handle generic errors that are not ENOENT or SyntaxError", async () => {
const testFile = path.join(tempDir, "test.json")
await fs.writeFile(testFile, "{}")
// Mock fs.readFile to throw a generic error
const originalReadFile = fs.readFile
const mockError = new Error("Permission denied")
fs.readFile = jest.fn().mockRejectedValue(mockError)
await expect(loadCustomStrings(testFile)).rejects.toThrow(
`Failed to load custom strings from ${testFile}: Permission denied`,
)
// Restore original function
fs.readFile = originalReadFile
})
it("should handle errors that are not Error instances", async () => {
const testFile = path.join(tempDir, "test.json")
await fs.writeFile(testFile, "{}")
// Mock fs.readFile to throw a non-Error object
const originalReadFile = fs.readFile
fs.readFile = jest.fn().mockRejectedValue("String error")
await expect(loadCustomStrings(testFile)).rejects.toThrow(
`Failed to load custom strings from ${testFile}: String error`,
)
// Restore original function
fs.readFile = originalReadFile
})
it("should handle null/undefined errors", async () => {
const testFile = path.join(tempDir, "test.json")
await fs.writeFile(testFile, "{}")
// Mock fs.readFile to throw null
const originalReadFile = fs.readFile
fs.readFile = jest.fn().mockRejectedValue(null)
await expect(loadCustomStrings(testFile)).rejects.toThrow(`Failed to load custom strings from ${testFile}: null`)
// Restore original function
fs.readFile = originalReadFile
})
it("should complete without errors for valid input", async () => {
const testFile = path.join(tempDir, "resource-test.json")
const customStrings = {
WELCOME: "Custom Welcome Message",
LOGIN_TITLE: "Custom Login Title",
}
await fs.writeFile(testFile, JSON.stringify(customStrings))
// Should not throw any errors
await expect(loadCustomStrings(testFile)).resolves.toBeUndefined()
})
})
})