if let Some(index) = index.checked_sub(1)
&& let Some(arg) = args.get(index)
{
- args_consumed = args_consumed.max(index);
+ args_consumed = args_consumed.max(index + 1);
write!(f, "{}", arg.display(display.options))?;
}
}
use std::str::FromStr;
use crate::output::pivot::{
- Color, Display26Adic, MetadataEntry, MetadataValue, Value, tests::assert_rendering,
+ Color, Display26Adic, MetadataEntry, MetadataValue, TemplateValue, Value, ValueInner,
+ tests::assert_rendering,
};
#[test]
}
}
+ #[test]
+ fn template() {
+ for (template, expected) in [
+ (
+ "1: [:^1,:]1; [:^1,:]2",
+ "1: First,1.00,Second,2,; Third,3.00,Fourth,4,",
+ ),
+ (r#"2: [:^1\n:]1"#, "2: First\n1.00\nSecond\n2\n"),
+ (r#"3: [:^1 = ^2\n:]1"#, "3: First = 1.00\nSecond = 2\n"),
+ ("4: [%1:, ^1:]1", "4: First, 1.00, Second, 2"),
+ ("5: [%1 = %2:, ^1 = ^2:]1", "5: First = 1.00, Second = 2"),
+ ("6: [%1:, ^1:]1", "6: First, 1.00, Second, 2"),
+ ] {
+ let value = Value::new(ValueInner::Template(TemplateValue {
+ args: vec![
+ vec![
+ Value::new_user_text("First"),
+ Value::new_number(Some(1.0)),
+ Value::new_user_text("Second"),
+ Value::new_integer(Some(2.0)),
+ ],
+ vec![
+ Value::new_user_text("Third"),
+ Value::new_number(Some(3.0)),
+ Value::new_user_text("Fourth"),
+ Value::new_integer(Some(4.0)),
+ ],
+ ],
+ localized: String::from(template),
+ id: None,
+ }));
+ assert_eq!(value.display(()).to_string(), expected);
+ }
+ }
+
#[test]
fn metadata_entry() {
let tree = MetadataEntry {