use oxideav_core::time::TimeBase;
use oxideav_core::vector::{
FillRule, GradientStop, Group, LinearGradient, Node, Paint, Path, PathNode, Point, Rgba,
SpreadMethod, VectorFrame,
};
#[test]
fn linear_gradient_emits_pattern_type_2_function_type_2() {
let mut p = Path::new();
p.move_to(Point::new(0.0, 0.0))
.line_to(Point::new(100.0, 0.0))
.line_to(Point::new(100.0, 50.0))
.line_to(Point::new(0.0, 50.0))
.close();
let gradient = LinearGradient {
start: Point::new(0.0, 0.0),
end: Point::new(100.0, 0.0),
stops: vec![
GradientStop::new(0.0, Rgba::opaque(255, 0, 0)),
GradientStop::new(1.0, Rgba::opaque(0, 0, 255)),
],
spread: SpreadMethod::Pad,
};
let frame = VectorFrame {
width: 100.0,
height: 50.0,
view_box: None,
root: Group {
children: vec![Node::Path(PathNode {
path: p,
fill: Some(Paint::LinearGradient(gradient)),
stroke: None,
fill_rule: FillRule::NonZero,
})],
..Group::default()
},
pts: None,
time_base: TimeBase::new(1, 1),
};
let bytes = oxideav_pdf::write_pdf(&frame).unwrap();
let s = String::from_utf8_lossy(&bytes);
assert!(s.contains("/Pattern"), "expected /Pattern resource");
assert!(
s.contains("/PatternType 2"),
"expected PatternType 2 (shading pattern)"
);
assert!(s.contains("/ShadingType 2"));
assert!(s.contains("/FunctionType 2"));
assert!(s.contains("/FunctionType 3"));
assert!(s.contains("/Pattern cs"));
assert!(s.contains("/Pat0 scn"));
assert!(s.contains("\nf\n"));
}