css_ast/rules/media/features/
resolution.rs1use super::prelude::*;
2use crate::units::Resolution;
3
4ranged_feature!(
5 #[node]
6 #[derive(ToCursors, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
7 #[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
8 #[derive(csskit_derives::FeatureMetadata)]
9 #[feature_metadata(CssAtomSet::Resolution)]
10 #[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
11 #[derive(csskit_derives::NodeWithMetadata)]
12 pub enum ResolutionMediaFeature{CssAtomSet::Resolution | CssAtomSet::MinResolution | CssAtomSet::MaxResolution, ResolutionMediaFeatureValue}
13);
14
15#[node]
21#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
23#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
24#[derive(csskit_derives::NodeWithMetadata)]
25pub enum ResolutionMediaFeatureValue {
26 #[atom(CssAtomSet::Infinite)]
27 Infinite(T![Ident]),
28 Resolution(Resolution),
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34 use crate::CssAtomSet;
35 use css_parse::{assert_parse, assert_parse_error};
36
37 #[test]
38 fn test_writes() {
39 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution:2dppx)");
40 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution:1x)");
41 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution:96dpi)");
42 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution:infinite)");
43 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(min-resolution:96dpi)");
44 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(max-resolution:300dpi)");
45 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution<=2dppx)");
46 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution>=96dpi)");
47 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution=1x)");
48 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(96dpi=resolution)");
49 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(1x<=resolution)");
50 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(1x<resolution<3x)");
51 assert_parse!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(1x>=resolution<=3x)");
52 }
53
54 #[test]
55 fn test_errors() {
56 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution:)");
57 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution: > 1x)");
58 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(max-resolution > 1x)");
59 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(min-resolution > 1x)");
60 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution: 1px)");
61 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(resolution: 10)");
62 assert_parse_error!(CssAtomSet::ATOMS, ResolutionMediaFeature, "(pointer: 1x)");
63 }
64}