|
| 1 | +use fluent_bundle::{FluentArgs, FluentBundle, FluentResource}; |
| 2 | + |
| 3 | +#[test] |
| 4 | +fn test_optional_value() { |
| 5 | + let ftl_string = String::from( |
| 6 | + " |
| 7 | +hello = { $title -> |
| 8 | + [Miss] Hello, Miss. { $name }! |
| 9 | + [Mr] Hello, Mr. { $name }! |
| 10 | + [Mrs] Hello, Mrs. { $name }! |
| 11 | + [Ms] Hello, Ms. { $name }! |
| 12 | + *[Mx] Hello, Mx. { $name }! |
| 13 | + } |
| 14 | + ", |
| 15 | + ); |
| 16 | + |
| 17 | + let res = FluentResource::try_new(ftl_string).expect("Could not parse an FTL string."); |
| 18 | + let mut bundle = FluentBundle::default(); |
| 19 | + bundle.set_use_isolating(false); |
| 20 | + |
| 21 | + bundle |
| 22 | + .add_resource(res) |
| 23 | + .expect("Failed to add FTL resources to the bundle."); |
| 24 | + |
| 25 | + let msg = bundle.get_message("hello").expect("Message doesn't exist."); |
| 26 | + |
| 27 | + let pattern = msg.value().expect("Message has no value."); |
| 28 | + |
| 29 | + // Optional value that matches a non-default variant |
| 30 | + let mut args = FluentArgs::new(); |
| 31 | + let title = Some("Mr"); |
| 32 | + args.set("title", title); |
| 33 | + args.set("name", "John"); |
| 34 | + |
| 35 | + let mut errors = vec![]; |
| 36 | + let value = bundle.format_pattern(pattern, Some(&args), &mut errors); |
| 37 | + assert_eq!("Hello, Mr. John!", &value); |
| 38 | + |
| 39 | + // No value, use default variant |
| 40 | + let mut args = FluentArgs::new(); |
| 41 | + let title: Option<&str> = None; |
| 42 | + args.set("title", title); |
| 43 | + args.set("name", "John"); |
| 44 | + |
| 45 | + let mut errors = vec![]; |
| 46 | + let value = bundle.format_pattern(pattern, Some(&args), &mut errors); |
| 47 | + assert_eq!("Hello, Mx. John!", &value); |
| 48 | + |
| 49 | + // Optional value that does not match any variant and therefore reverts to the default variant |
| 50 | + let mut args = FluentArgs::new(); |
| 51 | + let title = Some(2); |
| 52 | + args.set("title", title); |
| 53 | + args.set("name", "John"); |
| 54 | + |
| 55 | + let mut errors = vec![]; |
| 56 | + let value = bundle.format_pattern(pattern, Some(&args), &mut errors); |
| 57 | + assert_eq!("Hello, Mx. John!", &value); |
| 58 | +} |
0 commit comments