css_ast 0.0.31

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, assert_peek_false};

	#[test]
	fn test_writes() {
		assert_parse!(CssAtomSet::ATOMS, FontStyleStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontStyleStyleValue, "oblique 45deg");
		assert_parse!(CssAtomSet::ATOMS, FontSizeStyleValue, "45rem");
		assert_parse!(CssAtomSet::ATOMS, FontSizeStyleValue, "smaller");
		assert_parse!(CssAtomSet::ATOMS, FontSizeStyleValue, "80%");
	}

	#[test]
	fn test_font_synthesis() {
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "none");
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "weight");
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "style");
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "small-caps");
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "position");
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "weight style");
		assert_parse!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "weight style small-caps position");
		assert_peek_false!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "");
		assert_peek_false!(CssAtomSet::ATOMS, FontSynthesisStyleValue, "auto");
	}

	#[test]
	fn test_font_variant_alternates() {
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "historical-forms");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "stylistic(user-defined-ident)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "styleset(alt-a,alt-b)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "character-variant(alt-a,alt-b)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "swash(fancy)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "ornaments(bullets)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "annotation(circled)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "swash(fancy) historical-forms");
		assert_parse_error!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "normal historical-forms");
		assert_parse_error!(CssAtomSet::ATOMS, FontVariantAlternatesStyleValue, "swash(fancy) swash(fancy)");
	}

	#[test]
	fn test_font_variant() {
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "none");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "small-caps");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "sub");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "super");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "emoji");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "common-ligatures");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "swash(fancy)");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "all-small-caps super unicode");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "no-common-ligatures ruby slashed-zero");
		assert_parse!(CssAtomSet::ATOMS, FontVariantStyleValue, "titling-caps historical-forms ordinal sub text");
		assert_parse_error!(CssAtomSet::ATOMS, FontVariantStyleValue, "sub super");
		assert_parse_error!(CssAtomSet::ATOMS, FontVariantStyleValue, "small-caps petite-caps");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantStyleValue, "");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantStyleValue, "bold");
	}

	#[test]
	fn test_font_variant_numeric() {
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "lining-nums");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "oldstyle-nums");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "proportional-nums");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "tabular-nums");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "diagonal-fractions");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "stacked-fractions");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "ordinal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "slashed-zero");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "lining-nums ordinal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "tabular-nums slashed-zero diagonal-fractions");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantNumericStyleValue, "bold");
	}

	#[test]
	fn test_font_palette() {
		assert_parse!(CssAtomSet::ATOMS, FontPaletteStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontPaletteStyleValue, "light");
		assert_parse!(CssAtomSet::ATOMS, FontPaletteStyleValue, "dark");
		assert_parse!(CssAtomSet::ATOMS, FontPaletteStyleValue, "--blues");
		assert_parse!(CssAtomSet::ATOMS, FontPaletteStyleValue, "palette-mix(in lch,--blues 30%,--reds 70%)");
		assert_parse_error!(CssAtomSet::ATOMS, FontPaletteStyleValue, "palette-mix(in lch,--blues 30%)");
	}

	#[test]
	fn test_font_variant_ligatures() {
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "none");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "common-ligatures");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "no-common-ligatures");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "discretionary-ligatures");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "historical-ligatures");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "contextual");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "no-contextual");
		assert_parse!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "common-ligatures discretionary-ligatures");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantLigaturesStyleValue, "bold");
	}

	#[test]
	fn test_font_variant_east_asian() {
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "normal");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "jis78");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "jis83");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "jis90");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "jis04");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "simplified");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "traditional");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "full-width");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "proportional-width");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "ruby");
		assert_parse!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "jis78 full-width");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "");
		assert_peek_false!(CssAtomSet::ATOMS, FontVariantEastAsianStyleValue, "bold");
	}

	#[test]
	fn test_font() {
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "caption");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "status-bar");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "12px serif");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "medium sans-serif");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "12px/1.5 serif");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "bold 12px serif");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "italic small-caps bold condensed 12px/1.5 serif");
		assert_parse!(CssAtomSet::ATOMS, FontStyleValue, "12px \"Helvetica Neue\",serif");
		assert_parse_error!(CssAtomSet::ATOMS, FontStyleValue, "12px");
		assert_peek_false!(CssAtomSet::ATOMS, FontStyleValue, "serif");
		assert_parse_error!(CssAtomSet::ATOMS, FontStyleValue, "bold 12px");
		assert_peek_false!(CssAtomSet::ATOMS, FontStyleValue, "");
	}

	#[test]
	fn test_errors() {
		assert_parse_error!(CssAtomSet::ATOMS, FontStyleStyleValue, "oblique 45px");
		assert_parse_error!(CssAtomSet::ATOMS, FontStyleStyleValue, "oblique 91deg");
		assert_parse_error!(CssAtomSet::ATOMS, FontStyleStyleValue, "oblique -91deg");
		assert_parse_error!(CssAtomSet::ATOMS, FontStyleStyleValue, "oblique 1turn");
	}

	#[test]
	#[cfg(feature = "visitable")]
	fn test_visits() {
		use crate::assert_visits;
		assert_visits!("12px", FontSizeStyleValue, LengthPercentage, Length);
	}
}