vectory 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +6 -0
- data/lib/vectory/datauri.rb +1 -1
- data/lib/vectory/emf.rb +15 -0
- data/lib/vectory/eps.rb +9 -0
- data/lib/vectory/ps.rb +9 -0
- data/lib/vectory/svg.rb +11 -0
- data/lib/vectory/vector.rb +4 -0
- data/lib/vectory/version.rb +1 -1
- data/vectory.gemspec +4 -1
- metadata +2 -54
- data/bin/vectory +0 -9
- data/spec/examples/emf2eps/img.emf +0 -0
- data/spec/examples/emf2eps/img.emf.datauri +0 -1
- data/spec/examples/emf2eps/ref.eps +0 -88
- data/spec/examples/emf2ps/img.emf +0 -0
- data/spec/examples/emf2ps/ref.ps +0 -125
- data/spec/examples/emf2svg/img.emf +0 -0
- data/spec/examples/emf2svg/ref.svg +0 -9
- data/spec/examples/eps2emf/img.eps +0 -199
- data/spec/examples/eps2emf/img.eps.datauri +0 -1
- data/spec/examples/eps2emf/ref.emf +0 -0
- data/spec/examples/eps2ps/img.eps +0 -199
- data/spec/examples/eps2ps/ref.ps +0 -549
- data/spec/examples/eps2svg/img.eps +0 -199
- data/spec/examples/eps2svg/ref.svg +0 -173
- data/spec/examples/eps_but_svg_extension.svg +0 -199
- data/spec/examples/img.jpg +0 -0
- data/spec/examples/ps2emf/img.ps +0 -549
- data/spec/examples/ps2emf/img.ps.datauri +0 -1
- data/spec/examples/ps2emf/ref.emf +0 -0
- data/spec/examples/ps2eps/img.ps +0 -549
- data/spec/examples/ps2eps/ref.eps +0 -844
- data/spec/examples/ps2svg/img.ps +0 -549
- data/spec/examples/ps2svg/ref.svg +0 -476
- data/spec/examples/svg/action_schemaexpg1.svg +0 -124
- data/spec/examples/svg/action_schemaexpg2.svg +0 -124
- data/spec/examples/svg/doc-ref.xml +0 -109
- data/spec/examples/svg/doc.xml +0 -51
- data/spec/examples/svg/doc2-ref.xml +0 -59
- data/spec/examples/svg/doc2.xml +0 -28
- data/spec/examples/svg2emf/img.svg +0 -1
- data/spec/examples/svg2emf/img.svg.datauri +0 -1
- data/spec/examples/svg2emf/ref.emf +0 -0
- data/spec/examples/svg2eps/img.svg +0 -1
- data/spec/examples/svg2eps/ref.eps +0 -88
- data/spec/examples/svg2ps/img.svg +0 -1
- data/spec/examples/svg2ps/ref.ps +0 -125
- data/spec/spec_helper.rb +0 -22
- data/spec/support/matchers.rb +0 -51
- data/spec/support/text_matcher.rb +0 -63
- data/spec/support/vectory_helper.rb +0 -30
- data/spec/vectory/cli_spec.rb +0 -215
- data/spec/vectory/datauri_spec.rb +0 -181
- data/spec/vectory/emf_spec.rb +0 -62
- data/spec/vectory/eps_spec.rb +0 -67
- data/spec/vectory/file_magic_spec.rb +0 -24
- data/spec/vectory/inkscape_converter_spec.rb +0 -43
- data/spec/vectory/ps_spec.rb +0 -58
- data/spec/vectory/svg_mapping_spec.rb +0 -42
- data/spec/vectory/svg_spec.rb +0 -73
- data/spec/vectory/vector_spec.rb +0 -97
- data/spec/vectory_spec.rb +0 -7
data/spec/spec_helper.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "vectory"
|
4
|
-
require "tmpdir"
|
5
|
-
require "rspec/matchers"
|
6
|
-
require "equivalent-xml"
|
7
|
-
|
8
|
-
Dir["./spec/support/**/*.rb"].sort.each { |file| require file }
|
9
|
-
|
10
|
-
RSpec.configure do |config|
|
11
|
-
# Enable flags like --only-failures and --next-failure
|
12
|
-
config.example_status_persistence_file_path = ".rspec_status"
|
13
|
-
|
14
|
-
config.include Vectory::Helper
|
15
|
-
|
16
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
17
|
-
config.disable_monkey_patching!
|
18
|
-
|
19
|
-
config.expect_with :rspec do |c|
|
20
|
-
c.syntax = :expect
|
21
|
-
end
|
22
|
-
end
|
data/spec/support/matchers.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
RSpec::Matchers.define :be_eps do
|
2
|
-
match do |actual|
|
3
|
-
actual.start_with?("%!PS-Adobe-3.0")
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
RSpec::Matchers.define :be_svg do
|
8
|
-
match do |actual|
|
9
|
-
actual.include?("<svg")
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
RSpec::Matchers.define :be_equivalent_eps_to do |expected|
|
14
|
-
match do |actual|
|
15
|
-
e = sub_time_and_version(expected)
|
16
|
-
a = sub_time_and_version(actual)
|
17
|
-
|
18
|
-
windows_pattern = /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
19
|
-
if RbConfig::CONFIG["host_os"].match?(windows_pattern)
|
20
|
-
Vectory.ui.debug("Using `TextMatcher`.")
|
21
|
-
|
22
|
-
Vectory::TextMatcher.new(allowed_changed_lines: 60,
|
23
|
-
allowed_changed_words_in_line: 5).match?(e, a)
|
24
|
-
else
|
25
|
-
Vectory.ui.debug("Using a default matcher.")
|
26
|
-
|
27
|
-
values_match?(e, a)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def sub_time_and_version(str)
|
32
|
-
str.sub(/%%CreationDate:(.+)$/, "%%CreationDate:")
|
33
|
-
.sub(/%%Creator: cairo(.+)$/, "%%Creator: cairo")
|
34
|
-
end
|
35
|
-
|
36
|
-
diffable
|
37
|
-
end
|
38
|
-
|
39
|
-
RSpec::Matchers.define :be_equivalent_svg_to do |expected|
|
40
|
-
match do |actual|
|
41
|
-
e = sub_unimportant(expected)
|
42
|
-
a = sub_unimportant(actual)
|
43
|
-
values_match?(e, a)
|
44
|
-
end
|
45
|
-
|
46
|
-
def sub_unimportant(str)
|
47
|
-
str.sub(/sodipodi:docname=(.+)$/, "sodipodi:docname=")
|
48
|
-
end
|
49
|
-
|
50
|
-
diffable
|
51
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module Vectory
|
2
|
-
class TextMatcher
|
3
|
-
def initialize(allowed_changed_lines: 0,
|
4
|
-
allowed_changed_words_in_line: 0)
|
5
|
-
@allowed_changed_lines = allowed_changed_lines
|
6
|
-
@allowed_changed_words_in_line = allowed_changed_words_in_line
|
7
|
-
end
|
8
|
-
|
9
|
-
def match?(expected, actual)
|
10
|
-
expected_lines = expected.split("\n")
|
11
|
-
actual_lines = actual.split("\n")
|
12
|
-
|
13
|
-
if expected_lines.count < actual_lines.count
|
14
|
-
Vectory.ui.debug("Lines count differ.")
|
15
|
-
return false
|
16
|
-
end
|
17
|
-
|
18
|
-
lines_the_same?(expected_lines, actual_lines)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def lines_the_same?(expected_lines, actual_lines)
|
24
|
-
results = []
|
25
|
-
expected_lines
|
26
|
-
.zip(actual_lines)
|
27
|
-
.each_with_index do |(expected_line, actual_line), current_line|
|
28
|
-
results[current_line] = analyze_line(expected_line, actual_line)
|
29
|
-
end
|
30
|
-
|
31
|
-
print_results(results)
|
32
|
-
|
33
|
-
evaluate_results(results)
|
34
|
-
end
|
35
|
-
|
36
|
-
def analyze_line(expected, actual)
|
37
|
-
expected_words = expected.split
|
38
|
-
actual_words = actual.split
|
39
|
-
|
40
|
-
padded_expected_words = pad_ary(expected_words, actual_words.count)
|
41
|
-
padded_expected_words.zip(actual_words).count do |e, a|
|
42
|
-
e != a
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def pad_ary(ary, target_length)
|
47
|
-
ary.fill(nil, ary.length...target_length)
|
48
|
-
end
|
49
|
-
|
50
|
-
def print_results(results)
|
51
|
-
results.each_with_index do |result, index|
|
52
|
-
unless result.zero?
|
53
|
-
Vectory.ui.debug("#{index}: #{result} different word(s).")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def evaluate_results(results)
|
59
|
-
results.none? { |changed| changed >= @allowed_changed_words_in_line } &&
|
60
|
-
results.count { |changed| changed > 0 } < @allowed_changed_lines
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "nokogiri"
|
2
|
-
require "tmpdir"
|
3
|
-
|
4
|
-
module Vectory
|
5
|
-
module Helper
|
6
|
-
def with_tmp_dir(&block)
|
7
|
-
Dir.mktmpdir(nil, Vectory.root_path.join("tmp/"), &block)
|
8
|
-
end
|
9
|
-
|
10
|
-
def in_tmp_dir(&block)
|
11
|
-
Dir.mktmpdir(nil, Vectory.root_path.join("tmp/")) do |dir|
|
12
|
-
Dir.chdir(dir, &block)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def xmlpp(xml)
|
17
|
-
xsl = <<~XSL
|
18
|
-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
19
|
-
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
|
20
|
-
<xsl:strip-space elements="*"/>
|
21
|
-
<xsl:template match="/">
|
22
|
-
<xsl:copy-of select="."/>
|
23
|
-
</xsl:template>
|
24
|
-
</xsl:stylesheet>
|
25
|
-
XSL
|
26
|
-
Nokogiri::XSLT(xsl).transform(Nokogiri::XML(xml, &:noblanks))
|
27
|
-
.to_xml(indent: 2, encoding: "UTF-8")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/spec/vectory/cli_spec.rb
DELETED
@@ -1,215 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "vectory/cli"
|
3
|
-
|
4
|
-
RSpec.describe Vectory::CLI do
|
5
|
-
before do
|
6
|
-
# Vectory.ui.level = :debug
|
7
|
-
Vectory.ui.level = ENV["VECTORY_LOG"] || :fatal
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#convert" do
|
11
|
-
shared_examples "converter" do |format|
|
12
|
-
it "creates file of a chosen format" do
|
13
|
-
matcher = case format
|
14
|
-
when "eps", "ps" then "be_eps"
|
15
|
-
when "svg" then "be_svg"
|
16
|
-
else "be_equivalent_to"
|
17
|
-
end
|
18
|
-
|
19
|
-
with_tmp_dir do |dir|
|
20
|
-
output = File.join(dir, "output.#{format}")
|
21
|
-
status = described_class.start(["-f", format, "-o", output, input])
|
22
|
-
expect(status).to be Vectory::CLI::STATUS_SUCCESS
|
23
|
-
expect(File.read(output))
|
24
|
-
.to public_send(matcher, File.read(reference))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "eps to ps" do
|
30
|
-
let(:input) { "spec/examples/eps2ps/img.eps" }
|
31
|
-
let(:reference) { "spec/examples/eps2ps/ref.ps" }
|
32
|
-
|
33
|
-
it_behaves_like "converter", "ps"
|
34
|
-
end
|
35
|
-
|
36
|
-
context "eps to svg" do
|
37
|
-
let(:input) { "spec/examples/eps2svg/img.eps" }
|
38
|
-
let(:reference) { "spec/examples/eps2svg/ref.svg" }
|
39
|
-
|
40
|
-
it_behaves_like "converter", "svg"
|
41
|
-
end
|
42
|
-
|
43
|
-
context "eps to emf" do
|
44
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
45
|
-
let(:reference) { "spec/examples/eps2emf/ref.emf" }
|
46
|
-
|
47
|
-
it_behaves_like "converter", "emf"
|
48
|
-
end
|
49
|
-
|
50
|
-
context "ps to eps" do
|
51
|
-
let(:input) { "spec/examples/ps2eps/img.ps" }
|
52
|
-
let(:reference) { "spec/examples/ps2eps/ref.eps" }
|
53
|
-
|
54
|
-
it_behaves_like "converter", "eps"
|
55
|
-
end
|
56
|
-
|
57
|
-
context "ps to emf" do
|
58
|
-
let(:input) { "spec/examples/ps2emf/img.ps" }
|
59
|
-
let(:reference) { "spec/examples/ps2emf/ref.emf" }
|
60
|
-
|
61
|
-
it_behaves_like "converter", "emf"
|
62
|
-
end
|
63
|
-
|
64
|
-
context "ps to svg" do
|
65
|
-
let(:input) { "spec/examples/ps2svg/img.ps" }
|
66
|
-
let(:reference) { "spec/examples/ps2svg/ref.svg" }
|
67
|
-
|
68
|
-
it_behaves_like "converter", "svg"
|
69
|
-
end
|
70
|
-
|
71
|
-
context "svg to emf" do
|
72
|
-
let(:input) { "spec/examples/svg2emf/img.svg" }
|
73
|
-
let(:reference) { "spec/examples/svg2emf/ref.emf" }
|
74
|
-
|
75
|
-
it_behaves_like "converter", "emf"
|
76
|
-
end
|
77
|
-
|
78
|
-
context "svg to eps" do
|
79
|
-
let(:input) { "spec/examples/svg2eps/img.svg" }
|
80
|
-
let(:reference) { "spec/examples/svg2eps/ref.eps" }
|
81
|
-
|
82
|
-
it_behaves_like "converter", "eps"
|
83
|
-
end
|
84
|
-
|
85
|
-
context "svg to ps" do
|
86
|
-
let(:input) { "spec/examples/svg2ps/img.svg" }
|
87
|
-
let(:reference) { "spec/examples/svg2ps/ref.ps" }
|
88
|
-
|
89
|
-
it_behaves_like "converter", "ps"
|
90
|
-
end
|
91
|
-
|
92
|
-
context "emf to svg" do
|
93
|
-
let(:input) { "spec/examples/emf2svg/img.emf" }
|
94
|
-
let(:reference) { "spec/examples/emf2svg/ref.svg" }
|
95
|
-
|
96
|
-
it_behaves_like "converter", "svg"
|
97
|
-
end
|
98
|
-
|
99
|
-
context "emf to eps" do
|
100
|
-
let(:input) { "spec/examples/emf2eps/img.emf" }
|
101
|
-
let(:reference) { "spec/examples/emf2eps/ref.eps" }
|
102
|
-
|
103
|
-
it_behaves_like "converter", "eps"
|
104
|
-
end
|
105
|
-
|
106
|
-
context "emf to ps" do
|
107
|
-
let(:input) { "spec/examples/emf2ps/img.emf" }
|
108
|
-
let(:reference) { "spec/examples/emf2ps/ref.ps" }
|
109
|
-
|
110
|
-
it_behaves_like "converter", "ps"
|
111
|
-
end
|
112
|
-
|
113
|
-
context "jpg to svg" do
|
114
|
-
let(:input) { "spec/examples/img.jpg" }
|
115
|
-
let(:format) { "svg" }
|
116
|
-
|
117
|
-
it "returns unsupported-input-format error" do
|
118
|
-
with_tmp_dir do |dir|
|
119
|
-
expect(Vectory.ui).to receive(:error)
|
120
|
-
.with(start_with("Could not detect input format. " \
|
121
|
-
"Please provide file of the following formats:"))
|
122
|
-
|
123
|
-
output = File.join(dir, "output.#{format}")
|
124
|
-
status = described_class.start(["-f", format, "-o", output, input])
|
125
|
-
|
126
|
-
expect(status)
|
127
|
-
.to be Vectory::CLI::STATUS_UNSUPPORTED_INPUT_FORMAT_ERROR
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context "svg to jpg" do
|
133
|
-
let(:input) { "spec/examples/svg2emf/img.svg" }
|
134
|
-
let(:format) { "jpg" }
|
135
|
-
|
136
|
-
it "returns unsupported-output-format error" do
|
137
|
-
with_tmp_dir do |dir|
|
138
|
-
expect(Vectory.ui).to receive(:error)
|
139
|
-
.with(start_with("Unsupported output format '#{format}'. " \
|
140
|
-
"Please choose one of:"))
|
141
|
-
|
142
|
-
output = File.join(dir, "output.#{format}")
|
143
|
-
status = described_class.start(["-f", format, "-o", output, input])
|
144
|
-
|
145
|
-
expect(status)
|
146
|
-
.to be Vectory::CLI::STATUS_UNSUPPORTED_OUTPUT_FORMAT_ERROR
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
context "inkscape throws ConversionError" do
|
152
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
153
|
-
let(:format) { "emf" }
|
154
|
-
|
155
|
-
it "returns conversion error" do
|
156
|
-
with_tmp_dir do |dir|
|
157
|
-
expect(Vectory::InkscapeConverter.instance).to receive(:convert)
|
158
|
-
.and_raise(Vectory::ConversionError)
|
159
|
-
|
160
|
-
output = File.join(dir, "output.#{format}")
|
161
|
-
status = described_class.start(["-f", format, "-o", output, input])
|
162
|
-
|
163
|
-
expect(status).to be Vectory::CLI::STATUS_CONVERSION_ERROR
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
context "got SystemCallError" do
|
169
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
170
|
-
let(:format) { "emf" }
|
171
|
-
|
172
|
-
it "returns system-call error" do
|
173
|
-
with_tmp_dir do |dir|
|
174
|
-
expect_any_instance_of(Vectory::SystemCall).to receive(:call)
|
175
|
-
.and_raise(Vectory::SystemCallError)
|
176
|
-
|
177
|
-
output = File.join(dir, "output.#{format}")
|
178
|
-
status = described_class.start(["-f", format, "-o", output, input])
|
179
|
-
|
180
|
-
expect(status).to be Vectory::CLI::STATUS_SYSTEM_CALL_ERROR
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
context "got InkscapeNotFoundError" do
|
186
|
-
let(:input) { Vectory.root_path.join("spec/examples/eps2emf/img.eps") }
|
187
|
-
let(:format) { "emf" }
|
188
|
-
|
189
|
-
it "returns inkscape-not-found error" do
|
190
|
-
in_tmp_dir do
|
191
|
-
expect(Vectory::InkscapeConverter.instance)
|
192
|
-
.to receive(:convert).and_raise(Vectory::InkscapeNotFoundError)
|
193
|
-
|
194
|
-
status = described_class.start(["-f", format, input])
|
195
|
-
|
196
|
-
expect(status).to be Vectory::CLI::STATUS_INKSCAPE_NOT_FOUND_ERROR
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
context "no output option (it's not required)" do
|
202
|
-
let(:input) { Vectory.root_path.join("spec/examples/eps2emf/img.eps") }
|
203
|
-
let(:format) { "emf" }
|
204
|
-
|
205
|
-
it "uses input filename with a new extension and writes to current dir" do
|
206
|
-
in_tmp_dir do |dir|
|
207
|
-
status = described_class.start(["-f", format, input])
|
208
|
-
|
209
|
-
expect(Pathname.new(File.join(dir, "img.emf"))).to exist
|
210
|
-
expect(status).to be Vectory::CLI::STATUS_SUCCESS
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
@@ -1,181 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Vectory::Datauri do
|
4
|
-
describe "::from_vector" do
|
5
|
-
context "eps" do
|
6
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
7
|
-
let(:vector) { Vectory::Eps.from_path(input) }
|
8
|
-
|
9
|
-
it "returns datauri content" do
|
10
|
-
expect(Vectory::Datauri.from_vector(vector).content)
|
11
|
-
.to eq File.read("#{input}.datauri")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "ps" do
|
16
|
-
let(:input) { "spec/examples/ps2emf/img.ps" }
|
17
|
-
let(:vector) { Vectory::Ps.from_path(input) }
|
18
|
-
|
19
|
-
it "returns datauri content" do
|
20
|
-
expect(Vectory::Datauri.from_vector(vector).content)
|
21
|
-
.to eq File.read("#{input}.datauri")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "emf" do
|
26
|
-
let(:input) { "spec/examples/emf2eps/img.emf" }
|
27
|
-
let(:vector) { Vectory::Emf.from_path(input) }
|
28
|
-
|
29
|
-
it "returns datauri content" do
|
30
|
-
expect(Vectory::Datauri.from_vector(vector).content)
|
31
|
-
.to eq File.read("#{input}.datauri")
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "svg" do
|
36
|
-
let(:input) { "spec/examples/svg2emf/img.svg" }
|
37
|
-
let(:vector) { Vectory::Svg.from_path(input) }
|
38
|
-
|
39
|
-
it "returns datauri content" do
|
40
|
-
expect(Vectory::Datauri.from_vector(vector).content)
|
41
|
-
.to eq File.read("#{input}.datauri")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe "#to_vector" do
|
47
|
-
context "incorrect data" do
|
48
|
-
let(:not_a_datauri) { "123abc" }
|
49
|
-
|
50
|
-
it "raises conversion error" do
|
51
|
-
expect { Vectory::Datauri.new(not_a_datauri).to_vector }
|
52
|
-
.to raise_error(Vectory::ConversionError)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context "eps" do
|
57
|
-
let(:input) { "spec/examples/eps2emf/img.eps.datauri" }
|
58
|
-
let(:reference) { "spec/examples/eps2emf/img.eps" }
|
59
|
-
|
60
|
-
it "returns eps content" do
|
61
|
-
expect(Vectory::Datauri.from_path(input).to_vector.content)
|
62
|
-
.to eq File.read(reference)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "returns Eps class" do
|
66
|
-
expect(Vectory::Datauri.from_path(input).to_vector)
|
67
|
-
.to be_kind_of(Vectory::Eps)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context "emf" do
|
72
|
-
let(:input) { "spec/examples/emf2eps/img.emf.datauri" }
|
73
|
-
let(:reference) { "spec/examples/emf2eps/img.emf" }
|
74
|
-
|
75
|
-
it "returns emf content" do
|
76
|
-
expect(Vectory::Datauri.from_path(input).to_vector.content)
|
77
|
-
.to eq File.binread(reference)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "returns Emf class" do
|
81
|
-
expect(Vectory::Datauri.from_path(input).to_vector)
|
82
|
-
.to be_kind_of(Vectory::Emf)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "svg" do
|
87
|
-
let(:input) { "spec/examples/svg2emf/img.svg.datauri" }
|
88
|
-
let(:reference) { "spec/examples/svg2emf/img.svg" }
|
89
|
-
|
90
|
-
it "returns svg content" do
|
91
|
-
expect(Vectory::Datauri.from_path(input).to_vector.content)
|
92
|
-
.to be_equivalent_to File.read(reference)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "returns Svg class" do
|
96
|
-
expect(Vectory::Datauri.from_path(input).to_vector)
|
97
|
-
.to be_kind_of(Vectory::Svg)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
describe "#mime" do
|
103
|
-
context "incorrect data" do
|
104
|
-
let(:not_a_datauri) { "123abc" }
|
105
|
-
|
106
|
-
it "raises conversion error" do
|
107
|
-
expect { described_class.new(not_a_datauri).mime }
|
108
|
-
.to raise_error(Vectory::ConversionError)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context "eps" do
|
113
|
-
let(:input) { "spec/examples/eps2emf/img.eps.datauri" }
|
114
|
-
|
115
|
-
it "returns eps" do
|
116
|
-
expect(described_class.from_path(input).mime)
|
117
|
-
.to eq "application/postscript"
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context "emf" do
|
122
|
-
let(:input) { "spec/examples/emf2eps/img.emf.datauri" }
|
123
|
-
|
124
|
-
it "returns emf" do
|
125
|
-
expect(described_class.from_path(input).mime).to eq "image/emf"
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
context "svg" do
|
130
|
-
let(:input) { "spec/examples/svg2emf/img.svg.datauri" }
|
131
|
-
|
132
|
-
it "returns svg" do
|
133
|
-
expect(described_class.from_path(input).mime).to eq "image/svg+xml"
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe "dimensions (#height / #width)" do
|
139
|
-
context "incorrect data" do
|
140
|
-
let(:not_a_datauri) { "123abc" }
|
141
|
-
|
142
|
-
it "raises conversion error" do
|
143
|
-
expect { described_class.new(not_a_datauri).height }
|
144
|
-
.to raise_error(Vectory::ConversionError)
|
145
|
-
|
146
|
-
expect { described_class.new(not_a_datauri).width }
|
147
|
-
.to raise_error(Vectory::ConversionError)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
context "eps" do
|
152
|
-
let(:input) { "spec/examples/eps2emf/img.eps.datauri" }
|
153
|
-
|
154
|
-
it "returns height and width" do
|
155
|
-
expect(described_class.from_path(input).height)
|
156
|
-
.to eq 707
|
157
|
-
|
158
|
-
expect(described_class.from_path(input).width)
|
159
|
-
.to eq 649
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context "emf" do
|
164
|
-
let(:input) { "spec/examples/emf2eps/img.emf.datauri" }
|
165
|
-
|
166
|
-
it "returns height and width" do
|
167
|
-
expect(described_class.from_path(input).height).to eq 90
|
168
|
-
expect(described_class.from_path(input).width).to eq 90
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
context "svg" do
|
173
|
-
let(:input) { "spec/examples/svg2emf/img.svg.datauri" }
|
174
|
-
|
175
|
-
it "returns height and width" do
|
176
|
-
expect(described_class.from_path(input).height).to eq 90
|
177
|
-
expect(described_class.from_path(input).width).to eq 90
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
data/spec/vectory/emf_spec.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Vectory::Emf do
|
4
|
-
describe "#to_svg" do
|
5
|
-
let(:input) { "spec/examples/emf2svg/img.emf" }
|
6
|
-
let(:reference) { "spec/examples/emf2svg/ref.svg" }
|
7
|
-
|
8
|
-
it "returns svg content" do
|
9
|
-
expect(Vectory::Emf.from_path(input).to_svg.content)
|
10
|
-
.to be_equivalent_to File.read(reference)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "strips the starting xml tag" do
|
14
|
-
expect(Vectory::Emf.from_path(input).to_svg.content)
|
15
|
-
.not_to start_with "<?xml"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "#to_eps" do
|
20
|
-
let(:input) { "spec/examples/emf2eps/img.emf" }
|
21
|
-
let(:reference) { "spec/examples/emf2eps/ref.eps" }
|
22
|
-
|
23
|
-
it "returns eps content" do
|
24
|
-
expect(Vectory::Emf.from_path(input).to_eps.content)
|
25
|
-
.to be_equivalent_eps_to File.read(reference)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#to_ps" do
|
30
|
-
let(:input) { "spec/examples/emf2ps/img.emf" }
|
31
|
-
let(:reference) { "spec/examples/emf2ps/ref.ps" }
|
32
|
-
|
33
|
-
it "returns ps content" do
|
34
|
-
expect(Vectory::Emf.from_path(input).to_ps.content)
|
35
|
-
.to be_equivalent_eps_to File.read(reference)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#mime" do
|
40
|
-
let(:input) { "spec/examples/emf2eps/img.emf" }
|
41
|
-
|
42
|
-
it "returns emf" do
|
43
|
-
expect(described_class.from_path(input).mime).to eq "image/emf"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "#height" do
|
48
|
-
let(:input) { "spec/examples/emf2eps/img.emf" }
|
49
|
-
|
50
|
-
it "returns height" do
|
51
|
-
expect(described_class.from_path(input).height).to eq 90
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "#width" do
|
56
|
-
let(:input) { "spec/examples/emf2eps/img.emf" }
|
57
|
-
|
58
|
-
it "returns width" do
|
59
|
-
expect(described_class.from_path(input).width).to eq 90
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
data/spec/vectory/eps_spec.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Vectory::Eps do
|
4
|
-
shared_examples "converter" do |format|
|
5
|
-
it "returns content of a chosen format" do
|
6
|
-
to_format_method = "to_#{format}"
|
7
|
-
content = described_class.from_path(input)
|
8
|
-
.public_send(to_format_method)
|
9
|
-
.content
|
10
|
-
|
11
|
-
matcher = case format
|
12
|
-
when "eps", "ps" then "be_eps"
|
13
|
-
when "svg" then "be_svg"
|
14
|
-
else "be_equivalent_to"
|
15
|
-
end
|
16
|
-
|
17
|
-
expect(content)
|
18
|
-
.to public_send(matcher, File.read(reference))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#to_ps" do
|
23
|
-
let(:input) { "spec/examples/eps2ps/img.eps" }
|
24
|
-
let(:reference) { "spec/examples/eps2ps/ref.ps" }
|
25
|
-
|
26
|
-
it_behaves_like "converter", "ps"
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#to_svg" do
|
30
|
-
let(:input) { "spec/examples/eps2svg/img.eps" }
|
31
|
-
let(:reference) { "spec/examples/eps2svg/ref.svg" }
|
32
|
-
|
33
|
-
it_behaves_like "converter", "svg"
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "#to_emf" do
|
37
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
38
|
-
let(:reference) { "spec/examples/eps2emf/ref.emf" }
|
39
|
-
|
40
|
-
it_behaves_like "converter", "emf"
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "#mime" do
|
44
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
45
|
-
|
46
|
-
it "returns postscript" do
|
47
|
-
expect(described_class.from_path(input).mime)
|
48
|
-
.to eq "application/postscript"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#height" do
|
53
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
54
|
-
|
55
|
-
it "returns height" do
|
56
|
-
expect(described_class.from_path(input).height).to eq 707
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "#width" do
|
61
|
-
let(:input) { "spec/examples/eps2emf/img.eps" }
|
62
|
-
|
63
|
-
it "returns width" do
|
64
|
-
expect(described_class.from_path(input).width).to eq 649
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|