mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 16:49:18 -05:00
refactor: add cli/display.rs module (#13879)
This commit is contained in:
parent
a3d6be025c
commit
22dbbf75f3
3 changed files with 83 additions and 59 deletions
67
cli/display.rs
Normal file
67
cli/display.rs
Normal file
|
@ -0,0 +1,67 @@
|
|||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
/// A function that converts a float to a string the represents a human
|
||||
/// readable version of that number.
|
||||
pub fn human_size(size: f64) -> String {
|
||||
let negative = if size.is_sign_positive() { "" } else { "-" };
|
||||
let size = size.abs();
|
||||
let units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
||||
if size < 1_f64 {
|
||||
return format!("{}{}{}", negative, size, "B");
|
||||
}
|
||||
let delimiter = 1024_f64;
|
||||
let exponent = std::cmp::min(
|
||||
(size.ln() / delimiter.ln()).floor() as i32,
|
||||
(units.len() - 1) as i32,
|
||||
);
|
||||
let pretty_bytes = format!("{:.2}", size / delimiter.powi(exponent))
|
||||
.parse::<f64>()
|
||||
.unwrap()
|
||||
* 1_f64;
|
||||
let unit = units[exponent as usize];
|
||||
format!("{}{}{}", negative, pretty_bytes, unit)
|
||||
}
|
||||
|
||||
/// A function that converts a milisecond elapsed time to a string that
|
||||
/// represents a human readable version of that time.
|
||||
pub fn human_elapsed(elapsed: u128) -> String {
|
||||
if elapsed < 1_000 {
|
||||
return format!("{}ms", elapsed);
|
||||
}
|
||||
if elapsed < 1_000 * 60 {
|
||||
return format!("{}s", elapsed / 1000);
|
||||
}
|
||||
|
||||
let seconds = elapsed / 1_000;
|
||||
let minutes = seconds / 60;
|
||||
let seconds_remainder = seconds % 60;
|
||||
format!("{}m{}s", minutes, seconds_remainder)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_human_size() {
|
||||
assert_eq!(human_size(1_f64), "1B");
|
||||
assert_eq!(human_size((12 * 1024) as f64), "12KB");
|
||||
assert_eq!(human_size((24_i64 * 1024 * 1024) as f64), "24MB");
|
||||
assert_eq!(human_size((24_i64 * 1024 * 1024 * 1024) as f64), "24GB");
|
||||
assert_eq!(
|
||||
human_size((24_i64 * 1024 * 1024 * 1024 * 1024) as f64),
|
||||
"24TB"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_human_elapsed() {
|
||||
assert_eq!(human_elapsed(1), "1ms");
|
||||
assert_eq!(human_elapsed(256), "256ms");
|
||||
assert_eq!(human_elapsed(1000), "1s");
|
||||
assert_eq!(human_elapsed(1001), "1s");
|
||||
assert_eq!(human_elapsed(1020), "1s");
|
||||
assert_eq!(human_elapsed(70 * 1000), "1m10s");
|
||||
assert_eq!(human_elapsed(86 * 1000 + 100), "1m26s");
|
||||
}
|
||||
}
|
27
cli/main.rs
27
cli/main.rs
|
@ -10,6 +10,7 @@ mod deno_dir;
|
|||
mod diagnostics;
|
||||
mod diff;
|
||||
mod disk_cache;
|
||||
mod display;
|
||||
mod emit;
|
||||
mod errors;
|
||||
mod file_fetcher;
|
||||
|
@ -755,28 +756,6 @@ fn bundle_module_graph(
|
|||
)
|
||||
}
|
||||
|
||||
/// A function that converts a float to a string the represents a human
|
||||
/// readable version of that number.
|
||||
fn human_size(size: f64) -> String {
|
||||
let negative = if size.is_sign_positive() { "" } else { "-" };
|
||||
let size = size.abs();
|
||||
let units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
||||
if size < 1_f64 {
|
||||
return format!("{}{}{}", negative, size, "B");
|
||||
}
|
||||
let delimiter = 1024_f64;
|
||||
let exponent = std::cmp::min(
|
||||
(size.ln() / delimiter.ln()).floor() as i32,
|
||||
(units.len() - 1) as i32,
|
||||
);
|
||||
let pretty_bytes = format!("{:.2}", size / delimiter.powi(exponent))
|
||||
.parse::<f64>()
|
||||
.unwrap()
|
||||
* 1_f64;
|
||||
let unit = units[exponent as usize];
|
||||
format!("{}{}{}", negative, pretty_bytes, unit)
|
||||
}
|
||||
|
||||
async fn bundle_command(
|
||||
flags: Flags,
|
||||
bundle_flags: BundleFlags,
|
||||
|
@ -843,7 +822,7 @@ async fn bundle_command(
|
|||
"{} {:?} ({})",
|
||||
colors::green("Emit"),
|
||||
out_file,
|
||||
colors::gray(human_size(output_len as f64))
|
||||
colors::gray(display::human_size(output_len as f64))
|
||||
);
|
||||
if let Some(bundle_map) = maybe_bundle_map {
|
||||
let map_bytes = bundle_map.as_bytes();
|
||||
|
@ -859,7 +838,7 @@ async fn bundle_command(
|
|||
"{} {:?} ({})",
|
||||
colors::green("Emit"),
|
||||
map_out_file,
|
||||
colors::gray(human_size(map_len as f64))
|
||||
colors::gray(display::human_size(map_len as f64))
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -5,6 +5,7 @@ use crate::cache::CacherLoader;
|
|||
use crate::colors;
|
||||
use crate::compat;
|
||||
use crate::create_main_worker;
|
||||
use crate::display;
|
||||
use crate::emit;
|
||||
use crate::file_fetcher::File;
|
||||
use crate::file_watcher;
|
||||
|
@ -269,7 +270,11 @@ impl PrettyTestReporter {
|
|||
print!("{}", " ".repeat(description.level));
|
||||
}
|
||||
|
||||
println!("{} {}", status, colors::gray(human_elapsed(elapsed.into())));
|
||||
println!(
|
||||
"{} {}",
|
||||
status,
|
||||
colors::gray(format!("({})", display::human_elapsed(elapsed.into())))
|
||||
);
|
||||
|
||||
if let Some(error_text) = result.error() {
|
||||
for line in error_text.lines() {
|
||||
|
@ -279,22 +284,6 @@ impl PrettyTestReporter {
|
|||
}
|
||||
}
|
||||
|
||||
/// A function that converts a milisecond elapsed time to a string that
|
||||
/// represents a human readable version of that time.
|
||||
fn human_elapsed(elapsed: u128) -> String {
|
||||
if elapsed < 1_000 {
|
||||
return format!("({}ms)", elapsed);
|
||||
}
|
||||
if elapsed < 1_000 * 60 {
|
||||
return format!("({}s)", elapsed / 1000);
|
||||
}
|
||||
|
||||
let seconds = elapsed / 1_000;
|
||||
let minutes = seconds / 60;
|
||||
let seconds_remainder = seconds % 60;
|
||||
format!("({}m{}s)", minutes, seconds_remainder)
|
||||
}
|
||||
|
||||
impl TestReporter for PrettyTestReporter {
|
||||
fn report_plan(&mut self, plan: &TestPlan) {
|
||||
let inflection = if plan.total == 1 { "test" } else { "tests" };
|
||||
|
@ -355,7 +344,11 @@ impl TestReporter for PrettyTestReporter {
|
|||
print!(" ");
|
||||
}
|
||||
|
||||
println!("{} {}", status, colors::gray(human_elapsed(elapsed.into())));
|
||||
println!(
|
||||
"{} {}",
|
||||
status,
|
||||
colors::gray(format!("({})", display::human_elapsed(elapsed.into())))
|
||||
);
|
||||
}
|
||||
|
||||
fn report_step_wait(&mut self, description: &TestStepDescription) {
|
||||
|
@ -432,7 +425,8 @@ impl TestReporter for PrettyTestReporter {
|
|||
get_steps_text(summary.ignored_steps),
|
||||
summary.measured,
|
||||
summary.filtered_out,
|
||||
colors::gray(human_elapsed(elapsed.as_millis())),
|
||||
colors::gray(
|
||||
format!("({})", display::human_elapsed(elapsed.as_millis()))),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1303,19 +1297,3 @@ pub async fn run_tests_with_watch(
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_human_elapsed() {
|
||||
assert_eq!(human_elapsed(1), "(1ms)");
|
||||
assert_eq!(human_elapsed(256), "(256ms)");
|
||||
assert_eq!(human_elapsed(1000), "(1s)");
|
||||
assert_eq!(human_elapsed(1001), "(1s)");
|
||||
assert_eq!(human_elapsed(1020), "(1s)");
|
||||
assert_eq!(human_elapsed(70 * 1000), "(1m10s)");
|
||||
assert_eq!(human_elapsed(86 * 1000 + 100), "(1m26s)");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue