css_ast/types/
basic_shape.rs1use super::prelude::*;
2use crate::{BasicShapeRect, CircleFunction, EllipseFunction, PathFunction, PolygonFunction, ShapeFunction};
3use css_parse::Box;
4
5#[node]
11#[derive(Parse, Peek, SemanticEq, ToCursors, ToSpan, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
13#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
14#[derive(csskit_derives::NodeWithMetadata)]
15pub enum BasicShape<'a> {
16 Rect(Box<'a, BasicShapeRect<'a>>),
17 Circle(CircleFunction<'a>),
18 Ellipse(EllipseFunction<'a>),
19 Polygon(PolygonFunction<'a>),
20 Path(PathFunction<'a>),
21 Shape(Box<'a, ShapeFunction<'a>>),
22}
23
24#[cfg(test)]
25mod tests {
26 use super::*;
27 use crate::CssAtomSet;
28 use css_parse::{assert_parse, assert_parse_error, assert_peek_false};
29
30 #[test]
31 fn test_parses() {
32 assert_parse!(CssAtomSet::ATOMS, BasicShape, "inset(100%)");
33 assert_parse!(CssAtomSet::ATOMS, BasicShape, "circle(50% at center)");
34 assert_parse!(CssAtomSet::ATOMS, BasicShape, "ellipse(20px 50px)");
35 assert_parse!(CssAtomSet::ATOMS, BasicShape, "polygon(0px 0px,100% 0px,100% 100%)");
36 assert_parse!(CssAtomSet::ATOMS, BasicShape, "path('M 0 0 L 10 10')");
37 assert_parse!(CssAtomSet::ATOMS, BasicShape, "shape(from 5% 0%,hline to 95%,close)");
38 }
39
40 #[test]
41 fn test_errors() {
42 assert_peek_false!(CssAtomSet::ATOMS, BasicShape, "none");
43 assert_parse_error!(CssAtomSet::ATOMS, BasicShape, "inset()");
44 }
45}