float-pigment-css 0.8.2

The CSS parser for the float-pigment project.
Documentation
use std::rc::Rc;

use float_pigment_css::{
    sheet::{FontDisplay, FontFace, FontSrc, FontUrl},
    typing::*,
    StyleSheet,
};

#[test]
fn font_face() {
    let s = r#"
      @font-face {
        font-family: sans-serif;
        src: local(sans-serif), url("../path/to/font.svg") format("svg"), url(https://sss.vss);
        font-weight: 200;
        font-style: normal;
        font-display: optional;
        hello: 123;
      }
    "#;
    let ss = StyleSheet::from_str_with_path("/absolute/mod/hello.css", s);
    let ssv = ss.sheets();
    let ss = ssv.first().unwrap().borrow();
    let ff = ss.font_face().first().unwrap();
    let mut font_face = FontFace::new();
    font_face
        .with_font_family(FontFamilyName::SansSerif)
        .with_src(vec![
            FontSrc::Local(FontFamilyName::SansSerif),
            FontSrc::Url(FontUrl {
                url: "absolute/path/to/font.svg".into(),
                format: Some(vec!["svg".into()]),
            }),
            FontSrc::Url(FontUrl {
                url: "https://sss.vss".into(),
                format: None,
            }),
        ])
        .with_font_style(Some(FontStyleType::Normal))
        .with_font_weight(Some(FontWeightType::Num(Number::F32(200.))))
        .with_font_display(Some(FontDisplay::Optional));
    assert_eq!(&Rc::new(font_face), ff);
}

#[test]
fn font_face_1() {
    let s = r#"
    @font-face {
        font-family: 'iconfont6';
        src: url('https://m.elongstatic.com/hotel/h5/wechat-xcx/20180913zhllx/iconfont/iconfont6.ttf?t=20181010') format('truetype'), url('https://m.elongstatic.com/hotel/h5/wechat-xcx/20180913zhllx/iconfont/iconfont6.woff?t=20181010') format('woff');
    }
    .iconfont {
        /*  font-size: 14px;*/
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }
    @font-face {
        font-family: 'iconfont3';
        src: url('https://m.elongstatic.com/hotel/h5/wechat-xcx/20220811/iconfont/iconfont3.ttf') format('truetype'),
        url('https://m.elongstatic.com/hotel/h5/wechat-xcx/20220811/iconfont/iconfont3.ttf') format('woff');
    }"#;
    let ss = StyleSheet::from_str_with_path("/absolute/mod/hello.css", s);
    let ssv = ss.sheets();
    let ss = ssv.first().unwrap().borrow();
    let _ff = ss.font_face().first().unwrap();
}

#[test]
fn font_face_url_without_schema() {
    let s = r#"
    @font-face {
        font-family: 'iconfont6';
        src: url("//qq.com");
    }
    "#;

    let ss = StyleSheet::from_str_with_path("/absolute/mod/hello.css", s);
    let ssv = ss.sheets();
    let ss = ssv.first().unwrap().borrow();
    let ff = ss.font_face().first().unwrap();
    assert_eq!(
        ff.src.first(),
        Some(&FontSrc::Url(FontUrl {
            url: "//qq.com".into(),
            format: None,
        }))
    )
}