use pagetop::prelude::*; #[pagetop::test] async fn offers_every_supported_language_and_marks_the_selected_one() { let mut field = form::SelectLanguage::new() .with_name("language") .with_selected("es-ES"); let html = field.render(&mut Context::default()).await.into_string(); for (langid, _) in Locale::supported_languages() { assert!(html.contains(&format!(r#"value="{langid}""#))); } assert!(html.contains(r#""#)); assert!(!html.contains("Use the site language")); } #[pagetop::test] async fn required_field_has_no_empty_option_when_a_language_is_selected() { let mut field = form::SelectLanguage::new() .with_required(true) .with_selected("es-ES"); let html = field.render(&mut Context::default()).await.into_string(); assert!(!html.contains(r#"value="""#)); } #[pagetop::test] async fn language_aliases_select_their_canonical_language() { for alias in ["es", "es-es", "ES-ES"] { let mut field = form::SelectLanguage::new().with_selected(alias); let html = field.render(&mut Context::default()).await.into_string(); assert!(html.contains(r#""#)); } // Languages are sorted by their own name, so the order is the same for every page language. #[pagetop::test] async fn languages_are_sorted_by_their_own_name() { let mut field = form::SelectLanguage::new(); for page in ["en-US", "es-ES"] { let mut cx = Context::default().with_langid(&Locale::resolve(page)); let html = field.render(&mut cx).await.into_string(); let english = html .find(">English (United States)") .expect("English name"); let spanish = html .find(">Español (España)") .expect("Spanish name"); assert!(english < spanish); } } // Each language is labelled in its own language, whatever the language of the page. #[pagetop::test] async fn languages_are_labelled_in_their_own_language() { for page in ["en-US", "es-ES"] { let mut field = form::SelectLanguage::new(); let mut cx = Context::default().with_langid(&Locale::resolve(page)); let html = field.render(&mut cx).await.into_string(); assert!(html.contains(r#""#)); assert!(html.contains(r#""#)); } }