Skip to content

Commit 64ce76b

Browse files
committed
uucore/format: add docs and tests for resolve_astrick_ methods
1 parent 6061b67 commit 64ce76b

File tree

1 file changed

+111
-0
lines changed
  • src/uucore/src/lib/features/format

1 file changed

+111
-0
lines changed

src/uucore/src/lib/features/format/spec.rs

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,8 @@ impl Spec {
474474
}
475475
}
476476

477+
/// Determine the width, potentially getting a value from args
478+
/// Returns the non-negative width and whether the value should be left-aligned.
477479
fn resolve_asterisk_width<'a>(
478480
option: Option<CanAsterisk<usize>>,
479481
mut args: impl ArgumentIter<'a>,
@@ -492,6 +494,8 @@ fn resolve_asterisk_width<'a>(
492494
}
493495
}
494496

497+
/// Determines the precision, which should (if defined)
498+
/// be a non-negative number.
495499
fn resolve_asterisk_precision<'a>(
496500
option: Option<CanAsterisk<usize>>,
497501
mut args: impl ArgumentIter<'a>,
@@ -548,3 +552,110 @@ fn eat_number(rest: &mut &[u8], index: &mut usize) -> Option<usize> {
548552
}
549553
}
550554
}
555+
556+
#[cfg(test)]
557+
mod tests {
558+
use super::*;
559+
560+
mod resolve_asterisk_width {
561+
use super::*;
562+
use crate::format::FormatArgument;
563+
564+
#[test]
565+
fn no_width() {
566+
assert_eq!(None, resolve_asterisk_width(None, Vec::new().iter()));
567+
}
568+
569+
#[test]
570+
fn fixed_width() {
571+
assert_eq!(
572+
Some((42, false)),
573+
resolve_asterisk_width(Some(CanAsterisk::Fixed(42)), Vec::new().iter())
574+
);
575+
}
576+
577+
#[test]
578+
fn asterisks_with_numbers() {
579+
assert_eq!(
580+
Some((42, false)),
581+
resolve_asterisk_width(
582+
Some(CanAsterisk::Asterisk),
583+
vec![FormatArgument::SignedInt(42)].iter()
584+
)
585+
);
586+
assert_eq!(
587+
Some((42, false)),
588+
resolve_asterisk_width(
589+
Some(CanAsterisk::Asterisk),
590+
vec![FormatArgument::Unparsed("42".to_string())].iter()
591+
)
592+
);
593+
594+
assert_eq!(
595+
Some((42, true)),
596+
resolve_asterisk_width(
597+
Some(CanAsterisk::Asterisk),
598+
vec![FormatArgument::SignedInt(-42)].iter()
599+
)
600+
);
601+
assert_eq!(
602+
Some((42, true)),
603+
resolve_asterisk_width(
604+
Some(CanAsterisk::Asterisk),
605+
vec![FormatArgument::Unparsed("-42".to_string())].iter()
606+
)
607+
);
608+
}
609+
}
610+
611+
mod resolve_asterisk_precision {
612+
use super::*;
613+
use crate::format::FormatArgument;
614+
615+
#[test]
616+
fn no_width() {
617+
assert_eq!(None, resolve_asterisk_precision(None, Vec::new().iter()));
618+
}
619+
620+
#[test]
621+
fn fixed_width() {
622+
assert_eq!(
623+
Some(42),
624+
resolve_asterisk_precision(Some(CanAsterisk::Fixed(42)), Vec::new().iter())
625+
);
626+
}
627+
628+
#[test]
629+
fn asterisks_with_numbers() {
630+
assert_eq!(
631+
Some(42),
632+
resolve_asterisk_precision(
633+
Some(CanAsterisk::Asterisk),
634+
vec![FormatArgument::SignedInt(42)].iter()
635+
)
636+
);
637+
assert_eq!(
638+
Some(42),
639+
resolve_asterisk_precision(
640+
Some(CanAsterisk::Asterisk),
641+
vec![FormatArgument::Unparsed("42".to_string())].iter()
642+
)
643+
);
644+
645+
assert_eq!(
646+
Some(0),
647+
resolve_asterisk_precision(
648+
Some(CanAsterisk::Asterisk),
649+
vec![FormatArgument::SignedInt(-42)].iter()
650+
)
651+
);
652+
assert_eq!(
653+
Some(0),
654+
resolve_asterisk_precision(
655+
Some(CanAsterisk::Asterisk),
656+
vec![FormatArgument::Unparsed("-42".to_string())].iter()
657+
)
658+
);
659+
}
660+
}
661+
}

0 commit comments

Comments
 (0)