package org.meshbay.client import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals import org.junit.Test import org.meshbay.client.shell.NativeText import java.io.File /** The application's own dialogs, worded from the real catalogues in every language. */ class NativeTextTest { private val locales = File("../../meshbay-hub/src/meshbay_hub/static/locales") private val text = NativeText { code -> File(locales, "$code.js").takeIf { it.exists() }?.readText() } @Test fun `every catalogue words the native dialogs`() { val codes = locales.listFiles()!!.map { it.nameWithoutExtension } assertEquals(10, codes.size) for (code in codes) for (key in listOf("native.browser_access_confirm", "native.declined", "dialog.ok", "dialog.cancel")) { assertNotEquals("$code $key", key, text.get(key, code)) } } @Test fun `escapes are read as the page reads them`() { assertEquals("Annulé — rien n'a été modifié.", text.get("native.declined", "fr")) } @Test fun `an unknown language falls back to English, an unknown key to itself`() { assertEquals("Cancel", text.get("dialog.cancel", "xx")) assertEquals("no.such.key", text.get("no.such.key", "fr")) } @Test fun `plural entries give their other form and parameters are filled`() { assertEquals("Use at least 12 characters", text.get("register.err_min_len", "en", mapOf("n" to "12"))) } }