Skip to content

Commit

Permalink
rename GradientBuilderError enums
Browse files Browse the repository at this point in the history
  • Loading branch information
mazznoer committed Aug 4, 2024
1 parent 7041c9b commit 6c1ea9a
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 18 deletions.
22 changes: 11 additions & 11 deletions src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ use crate::{css_gradient, linspace, BlendMode, Color};

#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum GradientBuilderError {
InvalidHtmlColor(Vec<String>),
InvalidHtmlColors(Vec<String>),
InvalidCssGradient,
WrongDomainCount,
WrongDomain,
InvalidDomain,
InvalidStops,
}

impl fmt::Display for GradientBuilderError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
Self::InvalidHtmlColor(ref colors) => {
Self::InvalidHtmlColors(ref colors) => {
write!(
f,
"invalid html colors: {}",
Expand All @@ -26,8 +26,8 @@ impl fmt::Display for GradientBuilderError {
)
}
Self::InvalidCssGradient => f.write_str("invalid css gradient"),
Self::WrongDomainCount => f.write_str("wrong domain count"),
Self::WrongDomain => f.write_str("wrong domain"),
Self::InvalidDomain => f.write_str("invalid domain"),
Self::InvalidStops => f.write_str("invalid stops"),
}
}
}
Expand Down Expand Up @@ -196,7 +196,7 @@ impl GradientBuilder {
}

if !self.invalid_html_colors.is_empty() {
return Err(GradientBuilderError::InvalidHtmlColor(
return Err(GradientBuilderError::InvalidHtmlColors(
self.invalid_html_colors.clone(),
));
}
Expand All @@ -221,17 +221,17 @@ impl GradientBuilder {
} else if self.positions.len() == colors.len() {
for p in self.positions.windows(2) {
if p[0] > p[1] {
return Err(GradientBuilderError::WrongDomain);
return Err(GradientBuilderError::InvalidDomain);
}
}
self.positions.to_vec()
} else if self.positions.len() == 2 {
if self.positions[0] >= self.positions[1] {
return Err(GradientBuilderError::WrongDomain);
return Err(GradientBuilderError::InvalidDomain);
}
linspace(self.positions[0], self.positions[1], colors.len())
} else {
return Err(GradientBuilderError::WrongDomainCount);
return Err(GradientBuilderError::InvalidDomain);
};

self.colors.clear();
Expand All @@ -256,7 +256,7 @@ impl GradientBuilder {
}

if self.colors.len() < 2 {
return Err(GradientBuilderError::WrongDomain);
return Err(GradientBuilderError::InvalidStops);
}

self.clean = true;
Expand Down
40 changes: 33 additions & 7 deletions tests/builder.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
use colorgrad::{BlendMode, Color, Gradient, GradientBuilder, LinearGradient};
use colorgrad::{
BlendMode, Color, Gradient, GradientBuilder, GradientBuilderError, LinearGradient,
};

#[test]
fn builder() {
Expand Down Expand Up @@ -34,29 +36,53 @@ fn builder_error() {
let g = GradientBuilder::new()
.html_colors(&["#777", "bloodred", "#bbb", "#zzz"])
.build::<LinearGradient>();
assert_eq!(
g.as_ref().unwrap_err(),
&GradientBuilderError::InvalidHtmlColors(vec!["bloodred".to_string(), "#zzz".to_string()])
);
assert_eq!(
g.unwrap_err().to_string(),
"invalid html colors: 'bloodred', '#zzz'"
);

// Wrong domain #1
// Invalid domain
let g = GradientBuilder::new()
.html_colors(&["#777", "gold", "#bbb", "#f0f"])
.domain(&[0.0, 0.75, 1.0])
.build::<LinearGradient>();
assert_eq!(g.unwrap_err().to_string(), "wrong domain count");
assert_eq!(g.unwrap_err(), GradientBuilderError::InvalidDomain);

// Wrong domain #2
// Invalid domain
let g = GradientBuilder::new()
.html_colors(&["#777", "gold", "#bbb", "#f0f"])
.domain(&[0.0, 0.71, 0.7, 1.0])
.build::<LinearGradient>();
assert_eq!(g.unwrap_err().to_string(), "wrong domain");
assert_eq!(g.unwrap_err(), GradientBuilderError::InvalidDomain);

// Wrong domain #3
// Invalid domain
let g = GradientBuilder::new()
.html_colors(&["#777", "gold", "#bbb", "#f0f"])
.domain(&[1.0, 0.0])
.build::<LinearGradient>();
assert_eq!(g.unwrap_err().to_string(), "wrong domain");
assert_eq!(g.unwrap_err(), GradientBuilderError::InvalidDomain);

// Invalid domain
let g = GradientBuilder::new()
.html_colors(&["#777", "#bbb"])
.domain(&[2.0, 1.0])
.build::<LinearGradient>();
assert_eq!(g.unwrap_err(), GradientBuilderError::InvalidDomain);

// Invalid CSS gradient
let g = GradientBuilder::new()
.css("#f00, 30%, 55%, #00f")
.build::<LinearGradient>();
assert_eq!(g.unwrap_err(), GradientBuilderError::InvalidCssGradient);

// Invalid stops
let g = GradientBuilder::new()
.html_colors(&["#777", "#f0f", "#f00"])
.domain(&[0.0, 0.0, 0.0])
.build::<LinearGradient>();
assert_eq!(g.unwrap_err(), GradientBuilderError::InvalidStops);
}

0 comments on commit 6c1ea9a

Please sign in to comment.