use qubit_progress::{
ConfigurationError,
Metric,
NoopReporter,
Progress,
Stage,
StartError,
};
#[test]
fn test_progress_rejects_missing_metrics() {
let error = match Progress::builder(&NoopReporter).start() {
Ok(_) => panic!("a progress operation requires one metric"),
Err(error) => error,
};
assert!(matches!(
error,
StartError::InvalidConfiguration(ConfigurationError::NoMetrics)
));
}
#[test]
fn test_progress_rejects_blank_metric_metadata() {
let result = Progress::builder(&NoopReporter)
.metric(Metric::new(" ", "Tasks"))
.start();
let error = match result {
Ok(_) => panic!("a blank metric ID must be rejected"),
Err(error) => error,
};
assert!(matches!(
error,
StartError::InvalidConfiguration(
ConfigurationError::EmptyMetricId { .. }
)
));
}
#[test]
fn test_progress_rejects_invalid_fixed_metadata() {
let reporter = NoopReporter;
let cases = [
(
Progress::builder(&reporter)
.metric(Metric::new("tasks", " "))
.start(),
"empty metric name",
),
(
Progress::builder(&reporter)
.metric(Metric::new("tasks", "Tasks"))
.metric(Metric::new("tasks", "Other"))
.start(),
"duplicate metric ID",
),
(
Progress::builder(&reporter)
.stage(Stage::new(" ", "Copy"))
.metric(Metric::new("tasks", "Tasks"))
.start(),
"empty stage ID",
),
(
Progress::builder(&reporter)
.stage(Stage::new("copy", " "))
.metric(Metric::new("tasks", "Tasks"))
.start(),
"empty stage name",
),
(
Progress::builder(&reporter)
.stage(Stage::new("copy", "Copy").position(0, 1))
.metric(Metric::new("tasks", "Tasks"))
.start(),
"zero stage position",
),
(
Progress::builder(&reporter)
.stage(Stage::new("copy", "Copy").position(2, 1))
.metric(Metric::new("tasks", "Tasks"))
.start(),
"out of range stage position",
),
];
for (result, description) in cases {
assert!(result.is_err(), "{description} must be rejected");
}
}