diff options
| author | Daniel Jankowski <daniel.jankowski@rub.de> | 2023-09-02 17:23:06 +0200 |
|---|---|---|
| committer | Daniel Jankowski <daniel.jankowski@rub.de> | 2023-09-02 17:23:06 +0200 |
| commit | 55fd1a032c934fc0e7a6ceed35d77d8dd755d832 (patch) | |
| tree | c9cf1241f71076f65d5a8ee84edb33bed4953c13 | |
| parent | chore: update cargo dependencies (diff) | |
| download | sl0pstatus-55fd1a032c934fc0e7a6ceed35d77d8dd755d832.tar.gz sl0pstatus-55fd1a032c934fc0e7a6ceed35d77d8dd755d832.tar.xz sl0pstatus-55fd1a032c934fc0e7a6ceed35d77d8dd755d832.zip | |
chore: add tests for color parser
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | src/render.rs | 54 |
3 files changed, 53 insertions, 3 deletions
@@ -2857,6 +2857,7 @@ name = "zjstatus" version = "0.3.0" dependencies = [ "ansi_term", + "anyhow", "chrono", "chrono-tz", "regex", @@ -11,3 +11,4 @@ chrono = "0.4.0" regex = "1.9.4" strip-ansi-escapes = "0.2.0" chrono-tz = "0.8.3" +anyhow = "1.0.75" diff --git a/src/render.rs b/src/render.rs index 659c48d..8a116a0 100644 --- a/src/render.rs +++ b/src/render.rs @@ -1,6 +1,7 @@ -use std::{collections::BTreeMap, num::ParseIntError, sync::Arc}; +use std::{collections::BTreeMap, sync::Arc}; use ansi_term::{Colour, Colour::Fixed, Colour::RGB, Style}; +use zellij_tile::prelude::bail; use crate::{widgets::widget::Widget, ZellijState}; @@ -106,10 +107,14 @@ impl Default for FormattedPart { } } -fn hex_to_rgb(s: &str) -> Result<Vec<u8>, ParseIntError> { +fn hex_to_rgb(s: &str) -> anyhow::Result<Vec<u8>> { + if s.len() != 6 { + bail!("wrong hex color length"); + } + (0..s.len()) .step_by(2) - .map(|i| u8::from_str_radix(&s[i..i + 2], 16)) + .map(|i| u8::from_str_radix(&s[i..i + 2], 16).map_err(|e| anyhow::Error::from(e))) .collect() } @@ -138,3 +143,46 @@ fn parse_color(color: &str) -> Option<Colour> { None } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_hex_to_rgb() { + let result = hex_to_rgb("010203"); + let expected = Vec::from([1, 2, 3]); + assert!(result.is_ok()); + assert_eq!(result.unwrap(), expected); + } + + #[test] + fn test_hex_to_rgb_with_invalid_input() { + let result = hex_to_rgb("#010203"); + assert!(result.is_err()); + + let result = hex_to_rgb(" 010203"); + assert!(result.is_err()); + + let result = hex_to_rgb("010"); + assert!(result.is_err()); + } + + #[test] + fn test_parse_color() { + let result = parse_color("#010203"); + let expected = Colour::RGB(1, 2, 3); + assert_eq!(result, Some(expected)); + + let result = parse_color("255"); + let expected = Colour::Fixed(255); + assert_eq!(result, Some(expected)); + + let result = parse_color("365"); + assert_eq!(result, None); + + let result = parse_color("#365"); + assert_eq!(result, None); + } + +} |
