require 'spec_helper'
describe Prawn::SVG::Elements::Gradient do
let(:document) { Prawn::SVG::Document.new(svg, [800, 600], {width: 800, height: 600}) }
let(:element) { Prawn::SVG::Elements::Gradient.new(document, document.root, [], fake_state) }
before do
allow(element).to receive(:assert_compatible_prawn_version)
element.process
end
describe "object bounding box with linear gradient" do
let(:svg) do
<<-SVG
SVG
end
it "is stored in the document gradients table" do
expect(document.gradients["flag"]).to eq element
end
it "returns correct gradient arguments for an element" do
arguments = element.gradient_arguments(double(bounding_box: [100, 100, 200, 0]))
expect(arguments).to eq(
from: [100.0, 100.0],
to: [120.0, 0.0],
stops: [[0, "ff0000"], [0.25, "ff0000"], [0.5, "ffffff"], [0.75, "0000ff"], [1, "0000ff"]],
apply_transformations: true,
)
end
it "returns nil if the element doesn't have a bounding box" do
arguments = element.gradient_arguments(double(bounding_box: nil))
expect(arguments).to be nil
end
end
describe "object bounding box with radial gradient" do
let(:svg) do
<<-SVG
SVG
end
it "is stored in the document gradients table" do
expect(document.gradients["flag"]).to eq element
end
it "returns correct gradient arguments for an element" do
arguments = element.gradient_arguments(double(bounding_box: [100, 100, 200, 0]))
expect(arguments).to eq(
from: [150, 80],
to: [100, 80],
r1: 0,
r2: Math.sqrt((0.8 * 100) ** 2 + (0.8 * 100) ** 2),
stops: [[0, "ff0000"], [0.25, "ff0000"], [0.5, "ffffff"], [0.75, "0000ff"], [1, "0000ff"]],
apply_transformations: true,
)
end
end
describe "user space on use with linear gradient" do
let(:svg) do
<<-SVG
SVG
end
it "returns correct gradient arguments for an element" do
arguments = element.gradient_arguments(double)
expect(arguments).to eq(
from: [100.0, 100.0],
to: [200.0, 0.0],
stops: [[0, "ff0000"], [1, "0000ff"]],
apply_transformations: true,
)
end
end
describe "user space on use with radial gradient" do
let(:svg) do
<<-SVG
SVG
end
it "returns correct gradient arguments for an element" do
arguments = element.gradient_arguments(double)
expect(arguments).to eq(
from: [100.0, 100.0],
to: [200.0, 0.0],
r1: 0,
r2: 150,
stops: [[0, "ff0000"], [1, "0000ff"]],
apply_transformations: true,
)
end
end
context "when gradientTransform is specified" do
let(:svg) do
<<-SVG
SVG
end
it "passes in the transform via the apply_transformations option" do
arguments = element.gradient_arguments(double(bounding_box: [0, 0, 10, 10]))
expect(arguments).to eq(
from: [0, 0],
to: [10, 10],
stops: [[0, "ff0000"], [1, "0000ff"]],
apply_transformations: [2, 0, 0, 2, 10, 0],
)
end
end
end