Skip to main content

css_ast/types/
basic_shape.rs

1use super::prelude::*;
2use crate::{BasicShapeRect, CircleFunction, EllipseFunction, PathFunction, PolygonFunction, ShapeFunction};
3use css_parse::Box;
4
5/// <https://drafts.csswg.org/css-shapes-1/#typedef-basic-shape>
6///
7/// ```text,ignore
8/// <basic-shape> = <basic-shape-rect> | <circle()> | <ellipse()> |  <polygon()> | <path()> | <shape()>
9/// ```
10#[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}