extern crate svgparser; use svgparser::{ xmlparser, }; use svgparser::transform::{ Tokenizer, Token, }; use xmlparser::{ FromSpan, }; macro_rules! test { ($name:ident, $text:expr, $($value:expr),*) => ( #[test] fn $name() { let mut ts = Tokenizer::from_str($text); $( assert_eq!(ts.next().unwrap().unwrap(), $value); )* assert_eq!(ts.next().is_none(), true); } ) } test!(matrix_1, "matrix(1 0 0 1 10 20)", Token::Matrix { a: 1.0, b: 0.0, c: 0.0, d: 1.0, e: 10.0, f: 20.0 } ); test!(matrix_2, "matrix(1, 0, 0, 1, 10, 20)", Token::Matrix { a: 1.0, b: 0.0, c: 0.0, d: 1.0, e: 10.0, f: 20.0 } ); test!(matrix_3, " matrix ( 1, 0, 0, 1, 10, 20 )", Token::Matrix { a: 1.0, b: 0.0, c: 0.0, d: 1.0, e: 10.0, f: 20.0 } ); test!(translate_1, "translate(10 20)", Token::Translate { tx: 10.0, ty: 20.0 } ); test!(translate_2, "translate(10)", Token::Translate { tx: 10.0, ty: 0.0 } ); test!(scale_1, "scale(2 3)", Token::Scale { sx: 2.0, sy: 3.0 } ); test!(scale_2, "scale(2)", Token::Scale { sx: 2.0, sy: 2.0 } ); test!(rotate_1, "rotate(30)", Token::Rotate { angle: 30.0 } ); test!(rotate_2, "rotate(30 10 20)", Token::Translate { tx: 10.0, ty: 20.0 }, Token::Rotate { angle: 30.0 }, Token::Translate { tx: -10.0, ty: -20.0 } ); test!(skew_y_1, "skewX(30)", Token::SkewX { angle: 30.0 } ); test!(skew_x_1, "skewY(30)", Token::SkewY { angle: 30.0 } ); test!(ts_list_1, "translate(-10,-20) scale(2) rotate(45) translate(5,10)", Token::Translate { tx: -10.0, ty: -20.0 }, Token::Scale { sx: 2.0, sy: 2.0 }, Token::Rotate { angle: 45.0 }, Token::Translate { tx: 5.0, ty: 10.0 } ); test!(ts_list_2, "translate(10,20), scale(2) , rotate(45),", Token::Translate { tx: 10.0, ty: 20.0 }, Token::Scale { sx: 2.0, sy: 2.0 }, Token::Rotate { angle: 45.0 } ); #[test] fn error_1() { let mut ts = Tokenizer::from_str("text"); assert_eq!(ts.next().unwrap().unwrap_err().to_string(), "unexpected end of stream"); } #[test] fn error_2() { let mut ts = Tokenizer::from_str("scale(2) text"); let _ = ts.next().unwrap(); assert_eq!(ts.next().unwrap().unwrap_err().to_string(), "unexpected end of stream"); } #[test] fn error_3() { let mut ts = Tokenizer::from_str(" "); assert_eq!(ts.next().is_none(), true); } #[test] fn error_4() { let mut ts = Tokenizer::from_str("???G"); assert_eq!(ts.next().unwrap().unwrap_err().to_string(), "invalid name token"); }