translit 0.6.0

Transliteration for cyrillic languages that uses officially approved rules.
Documentation
use crate::OrderN995;

use super::{
    BulgarianOfficial, FromLatin, Gost779B, Language, MacedonianOfficial, Passport2013, ToLatin,
};

// Russian
const SOURCE_RU: &'static str = "Везувий зев открыл — дым хлынул клубом — пламя \
                                 Широко развилось, как боевое знамя. \
                                 Земля волнуется — с шатнувшихся колонн \
                                 Кумиры падают! Народ, гонимый страхом, \
                                 Толпами, стар и млад, под воспаленным прахом, \
                                 Под каменным дождем бежит из града вон.";

const TRANSLIT_GOST779B_RU: &'static str = "Vezuvij zev otkry`l — dy`m xly`nul klubom — plamya \
                                            Shiroko razvilos`, kak boevoe znamya. \
                                            Zemlya volnuetsya — s shatnuvshixsya kolonn \
                                            Kumiry` padayut! Narod, gonimy`j straxom, \
                                            Tolpami, star i mlad, pod vospalenny`m praxom, \
                                            Pod kamenny`m dozhdem bezhit iz grada von.";

#[test]
fn test_russian_to_latin_translit_gost779b_ru_1() {
    assert_eq!(Gost779B::new(Language::Ru).to_latin("Терминал"), "Terminal");
}

#[test]
fn test_russian_to_latin_translit_gost779b_ru_2() {
    assert_eq!(
        Gost779B::new(Language::Ru).to_latin(SOURCE_RU),
        TRANSLIT_GOST779B_RU
    );
}

#[test]
fn test_latin_to_russian_translit_gost779b_ru_2() {
    assert_eq!(
        Gost779B::new(Language::Ru).from_latin(TRANSLIT_GOST779B_RU),
        SOURCE_RU
    );
}

const SOURCE_PASSPORT_2013_RU_1: &'static str = "Большое преимущество получает тот, \
     кто достаточно рано сделал ошибки на которых можно учиться.© Уинстон Черчилль";

const SOURCE_PASSPORT_2013_RU_2: &'static str = "Ёлка наряжается - \
                                                 Праздник приближается. \
                                                 Новый год у ворот, \
                                                 Ребятишек ёлка ждёт.";

const TRANSLIT_PASSPORT_2013_RU_1: &'static str = "Bolshoe preimushchestvo poluchaet tot, \
     kto dostatochno rano sdelal oshibki na kotorykh mozhno uchitsia.© Uinston Cherchill";

const TRANSLIT_PASSPORT_2013_RU_2: &'static str = "Elka nariazhaetsia - \
                                                   Prazdnik priblizhaetsia. \
                                                   Novyi god u vorot, \
                                                   Rebiatishek elka zhdet.";

#[test]
fn test_fn_to_latin_iternational_passport_2013_ru_1() {
    assert_eq!(
        Passport2013::new().to_latin(SOURCE_PASSPORT_2013_RU_1),
        TRANSLIT_PASSPORT_2013_RU_1
    );
}

#[test]
fn test_fn_to_latin_iternational_passport_2013_ru_2() {
    assert_eq!(
        Passport2013::new().to_latin(SOURCE_PASSPORT_2013_RU_2),
        TRANSLIT_PASSPORT_2013_RU_2
    );
}

// Belarusian
const SOURCE_BY: &'static str = "У рудога вераб'я ў сховішчы \
                                 пад фатэлем ляжаць нейкія гаючыя зёлкі.";

const TRANSLIT_BY: &'static str = "U rudoha verab'ya u` sxovishchy` \
                                   pad fate`lem lyazhac` nejkiya hayuchy`ya zyolki.";

#[test]
fn test_fn_to_latin_gost779b_by_1() {
    assert_eq!(Gost779B::new(Language::By).to_latin(SOURCE_BY), TRANSLIT_BY);
}

#[test]
fn test_fn_from_latin_gost779b_by_1() {
    assert_eq!(
        Gost779B::new(Language::By).from_latin(TRANSLIT_BY),
        SOURCE_BY
    );
}

// Ukrainian
const SOURCE_UA: &'static str = "Гей, хлопці, не вспію - на ґанку \
                                 ваша файна їжа знищується бурундучком.";

const TRANSLIT_UA: &'static str = "Gej, xlopci, ne vspiyu - na g`anku \
                                   vasha fajna yizha zny`shhuyet`sya burunduchkom.";

#[test]
fn test_fn_to_latin_gost779b_ua_1() {
    assert_eq!(Gost779B::new(Language::Ua).to_latin(SOURCE_UA), TRANSLIT_UA);
}

#[test]
fn test_fn_from_latin_gost779b_ua_1() {
    assert_eq!(
        Gost779B::new(Language::Ua).from_latin(TRANSLIT_UA),
        SOURCE_UA
    );
}

#[test]
fn check_fio_driver_license_01() {
    let test = "КОЗЛОВСКИЙ ДАНИЛА ВАЛЕРЬЕВИЧ";
    let expected = "KOZLOVSKII DANILA VALEREVICh";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_driver_license_02() {
    let test = "Иванов Иван Иванович";
    let expected = "Ivanov Ivan Ivanovich";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_driver_license_03() {
    let test = "Щавелевев Вартан Петрович";
    let expected = "Shchavelevev Vartan Petrovich";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_driver_license_04() {
    let test = "Явлинский, Григорий Алексеевич";
    let expected = "Iavlinskii, Grigorii Alekseevich";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_driver_license_05() {
    let test = "Александр Александрович Юрлов";
    let expected = "Aleksandr Aleksandrovich Iurlov";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_driver_license_06() {
    let test = "Чумаков, Алексей Георгиевич";
    let expected = "Chumakov, Aleksei Georgievich";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_driver_license_07() {
    let test = "Леонид Михайлович Рошаль";
    let expected = "Leonid Mikhailovich Roshal";

    assert_eq!(OrderN995::new().to_latin(test), expected);
}

#[test]
fn check_fio_upper_driver_license_03() {
    let test = "Щавелевев Вартан Петрович";
    let expected = "SHCHAVELEVEV VARTAN PETROVICH";

    assert_eq!(OrderN995::new().to_latin(test).to_uppercase(), expected);
}

const SOURCE_BG: &'static str = "Всички хора се раждат свободни и равни по достойнство и права. Те са надарени с разум и съвест и следва да се отнасят помежду си в дух на братство.";
const TRANSLIT_BG: &'static str = "Vsichki hora se razhdat svobodni i ravni po dostoynstvo i prava. Te sa nadareni s razum i savest i sledva da se otnasyat pomezhdu si v duh na bratstvo.";

#[test]
fn test_bulgarian_to_latin() {
    assert_eq!(BulgarianOfficial::new().to_latin(SOURCE_BG), TRANSLIT_BG);
}

//Macedonian
const SOURCE_MK: &'static str =
    "Природата ништо не прави бесцелно. Енергијата на умот е суштината на животот.";
const TRANSLIT_MK: &'static str =
    "Prirodata nishto ne pravi bescelno. Energijata na umot e sushtinata na zhivotot.";

#[test]
fn test_macedonian_to_latin() {
    assert_eq!(MacedonianOfficial::new().to_latin(SOURCE_MK), TRANSLIT_MK);
}