kielet/test/mo_test.gleam
2024-06-02 22:28:18 +03:00

117 lines
3.4 KiB
Gleam
Raw Permalink 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 gleam/dict
import gleeunit/should
import kielet/mo
import simplifile
pub fn header_test() {
let mo = open()
should.equal(mo.endianness, mo.LittleEndian)
should.equal(mo.header.revision, mo.Revision(0, 0))
should.equal(mo.header.string_count, 5)
}
pub fn translations_test() {
let mo = open()
should.equal(
mo.translations,
dict.from_list([
#(
"",
mo.Singular(
"",
"Project-Id-Version: Kielet 1.2.3\nReport-Msgid-Bugs-To: mikko@ahlroth.fi\nPO-Revision-Date: 2024-05-21 22:09+0300\nLast-Translator: \nLanguage-Team: \nLanguage: fi\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=(n != 1);\nX-Generator: Poedit 3.4.4\n",
),
),
#(
"%s person",
mo.Plural(
"",
dict.from_list([#(0, "%s henkilö"), #(1, "%s henkilöä")]),
),
),
#(
"Gleam is a friendly language for building type-safe systems that scale!",
mo.Singular(
"",
"Gleam on ystävällinen kieli skaalautuvien ja tyyppiturvallisten järjestelmien rakentamiseen!",
),
),
#("Hello, world!", mo.Singular("", "Morjens, maailma!")),
#(
"Oh look, it's a duck",
mo.Plural(
"",
dict.from_list([#(0, "Oho kato, ankka"), #(1, "Oho kato, %s ankkaa")]),
),
),
]),
)
}
pub fn metadata_test() {
let mo = open()
should.equal(
mo.metadata,
dict.from_list([
#("", ""),
#("Content-Transfer-Encoding", "8bit"),
#("Content-Type", "text/plain; charset=UTF-8"),
#("Language", "fi"),
#("Language-Team", ""),
#("Last-Translator", ""),
#("MIME-Version", "1.0"),
#("PO-Revision-Date", "2024-05-21 22:09+0300"),
#("Plural-Forms", "nplurals=2; plural=(n != 1);"),
#("Project-Id-Version", "Kielet 1.2.3"),
#("Report-Msgid-Bugs-To", "mikko@ahlroth.fi"),
#("X-Generator", "Poedit 3.4.4"),
]),
)
}
pub fn big_endian_test() {
let assert Ok(mo_data) =
simplifile.read_bits("./test/locale/big-endian/ru.mo")
let mo =
mo_data
|> mo.parse()
|> should.be_ok()
should.equal(mo.endianness, mo.BigEndian)
should.equal(
mo.translations,
dict.from_list([
#(
"",
mo.Singular(
context: "",
content: "Project-Id-Version: NGettext test translation file\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: 2012-09-06 01:37+0200\nPO-Revision-Date: 2012-09-06 17:18+0200\nLast-Translator: \nLanguage-Team: \nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n",
),
),
#("test2", mo.Singular(context: "", content: "тест2")),
#(
"test3",
mo.Singular(context: "", content: "тест3контекст2"),
),
#(
"{0} minute",
mo.Plural(
context: "",
content: dict.from_list([
#(0, "{0} минута"),
#(2, "{0} минут"),
#(1, "{0} минуты"),
]),
),
),
#("test", mo.Singular(context: "", content: "тест")),
]),
)
}
fn open() {
let assert Ok(mo_data) =
simplifile.read_bits("./test/locale/fi/LC_MESSAGES/fi.mo")
let mo = mo.parse(mo_data)
should.be_ok(mo)
}