whitaker-common 0.2.6

Internal common utilities for Whitaker lints
Documentation
use std::borrow::Cow;

use super::FluentValue;
use rstest::rstest;

use super::{Arguments, FALLBACK_LOCALE, Localizer, available_locales, supports_locale};

#[rstest]
#[case(None, FALLBACK_LOCALE, true)]
#[case(Some("en-GB"), "en-GB", false)]
#[case(Some("cy"), "cy", false)]
#[case(Some("gd"), "gd", false)]
#[case(Some("zz"), FALLBACK_LOCALE, true)]
fn resolves_locales(#[case] input: Option<&str>, #[case] expected: &str, #[case] fallback: bool) {
    let localizer = Localizer::new(input);
    assert_eq!(localizer.locale(), expected);
    assert_eq!(localizer.used_fallback(), fallback);
}

#[test]
fn enumerates_available_locales() {
    let locales = available_locales();
    assert!(locales.contains(&"en-GB".to_string()));
    assert!(locales.contains(&"cy".to_string()));
    assert!(locales.contains(&"gd".to_string()));
}

#[test]
fn supports_locale_reports_known_languages() {
    assert!(supports_locale("en-GB"));
    assert!(supports_locale("cy"));
    assert!(supports_locale("gd"));
    assert!(!supports_locale("zz"));
}

#[test]
fn message_lookup_with_arguments_interpolates_values() {
    let localizer = Localizer::new(Some("gd"));
    let mut args = Arguments::new();
    args.insert(
        Cow::Borrowed("lint"),
        FluentValue::from("function_attrs_follow_docs"),
    );
    let message = localizer
        .message_with_args("common-lint-count", &args)
        .expect("message should exist");
    assert!(message.contains("function_attrs_follow_docs"));
}