css_ast 0.0.23

CSS Abstract Syntax Trees with visitable nodes and style value types.
Documentation
#[cfg(test)]
mod tests {
	use super::super::*;
	use crate::CssAtomSet;
	use css_parse::{assert_parse, assert_parse_error};

	#[test]
	fn size_test() {
		assert_eq!(std::mem::size_of::<ClipRuleStyleValue>(), 16);
		assert_eq!(std::mem::size_of::<MaskBorderModeStyleValue>(), 16);
		assert_eq!(std::mem::size_of::<MaskBorderOutsetStyleValue>(), 64);
		assert_eq!(std::mem::size_of::<MaskBorderRepeatStyleValue>(), 32);
		assert_eq!(std::mem::size_of::<MaskBorderSourceStyleValue>(), 40);
		assert_eq!(std::mem::size_of::<MaskClipStyleValue>(), 32);
		assert_eq!(std::mem::size_of::<MaskOriginStyleValue>(), 32);
		assert_eq!(std::mem::size_of::<MaskPositionStyleValue>(), 32);
		assert_eq!(std::mem::size_of::<MaskRepeatStyleValue>(), 32);
		assert_eq!(std::mem::size_of::<MaskSizeStyleValue>(), 32);
		assert_eq!(std::mem::size_of::<MaskTypeStyleValue>(), 16);
	}

	#[test]
	fn test_writes() {
		assert_parse!(CssAtomSet::ATOMS, ClipRuleStyleValue, "nonzero");
		assert_parse!(CssAtomSet::ATOMS, ClipRuleStyleValue, "evenodd");

		assert_parse!(CssAtomSet::ATOMS, MaskBorderModeStyleValue, "luminance");
		assert_parse!(CssAtomSet::ATOMS, MaskBorderModeStyleValue, "alpha");

		assert_parse!(CssAtomSet::ATOMS, MaskTypeStyleValue, "luminance");
		assert_parse!(CssAtomSet::ATOMS, MaskTypeStyleValue, "alpha");

		assert_parse!(CssAtomSet::ATOMS, MaskRepeatStyleValue, "repeat-x");
		assert_parse!(CssAtomSet::ATOMS, MaskRepeatStyleValue, "repeat-y");
		assert_parse!(CssAtomSet::ATOMS, MaskRepeatStyleValue, "repeat");
		assert_parse!(CssAtomSet::ATOMS, MaskRepeatStyleValue, "no-repeat");

		assert_parse!(CssAtomSet::ATOMS, MaskSizeStyleValue, "1px auto");
		assert_parse!(CssAtomSet::ATOMS, MaskSizeStyleValue, "auto");
		assert_parse!(CssAtomSet::ATOMS, MaskSizeStyleValue, "contain");
		assert_parse!(CssAtomSet::ATOMS, MaskSizeStyleValue, "cover");

		assert_parse!(CssAtomSet::ATOMS, MaskPositionStyleValue, "-20% -30px");
		assert_parse!(CssAtomSet::ATOMS, MaskPositionStyleValue, "left center");
		assert_parse!(CssAtomSet::ATOMS, MaskPositionStyleValue, "center center");
	}

	#[test]
	fn test_errors() {
		assert_parse_error!(CssAtomSet::ATOMS, ClipRuleStyleValue, "auto");
		assert_parse_error!(CssAtomSet::ATOMS, ClipRuleStyleValue, "1");

		assert_parse_error!(CssAtomSet::ATOMS, MaskBorderModeStyleValue, "auto");
		assert_parse_error!(CssAtomSet::ATOMS, MaskBorderModeStyleValue, "luminance alpha");

		assert_parse_error!(CssAtomSet::ATOMS, MaskTypeStyleValue, "auto");
		assert_parse_error!(CssAtomSet::ATOMS, MaskTypeStyleValue, "luminance alpha");

		assert_parse_error!(CssAtomSet::ATOMS, MaskRepeatStyleValue, "auto");
		assert_parse_error!(CssAtomSet::ATOMS, MaskRepeatStyleValue, "repeat-z");

		assert_parse_error!(CssAtomSet::ATOMS, MaskSizeStyleValue, "-1px");
		assert_parse_error!(CssAtomSet::ATOMS, MaskSizeStyleValue, "1px 2px 3px");

		assert_parse_error!(CssAtomSet::ATOMS, MaskPositionStyleValue, "auto");
		assert_parse_error!(CssAtomSet::ATOMS, MaskPositionStyleValue, "1px 2px 3px");
		assert_parse_error!(CssAtomSet::ATOMS, MaskPositionStyleValue, "left right");
	}
}