prawn-icon 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +54 -1
- data/GPLv2 +21 -22
- data/README.md +10 -10
- data/data/fonts/fab/LICENSE +34 -0
- data/data/fonts/fab/fa-brands.ttf +0 -0
- data/data/fonts/fab/fab.yml +333 -0
- data/data/fonts/far/LICENSE +34 -0
- data/data/fonts/far/fa-regular.ttf +0 -0
- data/data/fonts/far/far.yml +119 -0
- data/data/fonts/fas/LICENSE +34 -0
- data/data/fonts/fas/fa-solid.ttf +0 -0
- data/data/fonts/fas/fas.yml +503 -0
- data/data/fonts/pf/paymentfont-webfont.ttf +0 -0
- data/data/fonts/pf/pf.yml +118 -97
- data/examples/fas-beer-inline.png +0 -0
- data/examples/fas-beer.png +0 -0
- data/examples/fontawesome.rb +28 -20
- data/examples/foundation_icons.rb +1 -1
- data/examples/paymentfont.rb +1 -1
- data/lib/prawn/icon.rb +3 -200
- data/lib/prawn/icon/base.rb +19 -0
- data/lib/prawn/icon/errors.rb +21 -0
- data/lib/prawn/icon/font_data.rb +11 -13
- data/lib/prawn/icon/interface.rb +208 -0
- data/lib/prawn/icon/parser.rb +45 -53
- data/lib/prawn/icon/version.rb +1 -1
- data/prawn-icon.gemspec +8 -9
- data/spec/integration/icon_spec.rb +80 -60
- data/spec/spec_helper.rb +4 -0
- data/spec/support/parser_helper.rb +1 -1
- data/spec/support/pdf_helper.rb +1 -1
- data/spec/unit/base_spec.rb +15 -0
- data/spec/unit/errors/icon_key_empty_spec.rb +19 -0
- data/spec/unit/errors/icon_not_found_spec.rb +19 -0
- data/spec/unit/font_data_spec.rb +54 -73
- data/spec/unit/icon_spec.rb +20 -27
- data/spec/unit/parser_spec.rb +66 -63
- metadata +35 -41
- data/data/fonts/fa/LICENSE +0 -4
- data/data/fonts/fa/fa.yml +0 -676
- data/data/fonts/fa/fontawesome.ttf +0 -0
- data/data/fonts/octicon/LICENSE +0 -9
- data/data/fonts/octicon/octicon.yml +0 -192
- data/data/fonts/octicon/octicons.ttf +0 -0
- data/examples/fa-beer-inline.png +0 -0
- data/examples/fa-beer.png +0 -0
- data/examples/octicons.rb +0 -35
@@ -7,12 +7,13 @@
|
|
7
7
|
require 'spec_helper'
|
8
8
|
|
9
9
|
describe Prawn::Icon::Interface do
|
10
|
+
let(:pdf) { create_pdf }
|
11
|
+
|
10
12
|
describe '::icon' do
|
11
13
|
context 'valid icon key' do
|
12
14
|
context 'with options' do
|
13
15
|
it 'should handle text options (size)' do
|
14
|
-
pdf
|
15
|
-
pdf.icon 'fa-arrows', size: 60
|
16
|
+
pdf.icon 'far-address-book', size: 60
|
16
17
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
17
18
|
|
18
19
|
expect(text.font_settings.first[:size]).to eq(60)
|
@@ -21,50 +22,69 @@ describe Prawn::Icon::Interface do
|
|
21
22
|
|
22
23
|
context 'inline_format: true' do
|
23
24
|
it 'should handle text options (size)' do
|
24
|
-
pdf =
|
25
|
-
pdf.icon '<icon size="60">fa-arrows</icon>', inline_format: true
|
25
|
+
pdf.icon '<icon size="60">far-address-book</icon>', inline_format: true
|
26
26
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
27
27
|
|
28
|
-
expect(text.strings.first).to eq(
|
28
|
+
expect(text.strings.first).to eq('')
|
29
29
|
expect(text.font_settings.first[:size]).to eq(60.0)
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'should be able to render on multiple documents' do
|
33
33
|
pdf1 = create_pdf
|
34
34
|
pdf2 = create_pdf
|
35
|
-
pdf1.icon '<icon>
|
36
|
-
pdf2.icon '<icon>
|
35
|
+
pdf1.icon '<icon>far-address-book</icon>', inline_format: true
|
36
|
+
pdf2.icon '<icon>far-address-book</icon>', inline_format: true
|
37
37
|
text1 = PDF::Inspector::Text.analyze(pdf1.render)
|
38
38
|
text2 = PDF::Inspector::Text.analyze(pdf2.render)
|
39
39
|
|
40
|
-
expect(text1.strings.first).to eq(
|
41
|
-
expect(text2.strings.first).to eq(
|
40
|
+
expect(text1.strings.first).to eq('')
|
41
|
+
expect(text2.strings.first).to eq('')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'renders the icon at the proper cursor position (#24)' do
|
45
|
+
icon_text = '<icon>fas-info-circle</icon> icon here!'
|
46
|
+
pdf.text 'Start'
|
47
|
+
pdf.move_down 10
|
48
|
+
pdf.text 'More'
|
49
|
+
pdf.move_down 20
|
50
|
+
icon = pdf.icon icon_text, inline_format: true
|
51
|
+
pdf.move_down 30
|
52
|
+
pdf.text 'End'
|
53
|
+
|
54
|
+
expect(icon.at.first).to eq(0)
|
55
|
+
expect(icon.at.last.round).to eq(734)
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'with final_gap: false' do
|
59
|
+
it 'renders the icon without a final gap' do
|
60
|
+
icon = pdf.icon '<icon size="60">far-address-book</icon>',
|
61
|
+
inline_format: true,
|
62
|
+
final_gap: false
|
63
|
+
expect(icon.at.last.round).to eq(792)
|
64
|
+
end
|
42
65
|
end
|
43
66
|
end
|
44
67
|
|
45
68
|
context 'without options' do
|
46
69
|
it 'should render an icon to document' do
|
47
|
-
pdf
|
48
|
-
pdf.icon 'fa-arrows'
|
70
|
+
pdf.icon 'far-address-book'
|
49
71
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
50
72
|
|
51
|
-
expect(text.strings.first).to eq(
|
73
|
+
expect(text.strings.first).to eq('')
|
52
74
|
end
|
53
75
|
end
|
54
76
|
end
|
55
77
|
|
56
78
|
context 'invalid icon key' do
|
57
79
|
it 'should raise IconNotFound' do
|
58
|
-
|
59
|
-
proc = Proc.new { pdf.icon 'fa-__INVALID' }
|
80
|
+
proc = Proc.new { pdf.icon 'far-__INVALID' }
|
60
81
|
|
61
|
-
expect(proc).to raise_error(Prawn::Errors::IconNotFound)
|
82
|
+
expect(proc).to raise_error(Prawn::Icon::Errors::IconNotFound)
|
62
83
|
end
|
63
84
|
end
|
64
85
|
|
65
86
|
context 'invalid specifier' do
|
66
87
|
it 'should raise UnknownFont' do
|
67
|
-
pdf = create_pdf
|
68
88
|
proc = Proc.new { pdf.icon '__INVALID__' }
|
69
89
|
|
70
90
|
expect(proc).to raise_error(Prawn::Errors::UnknownFont)
|
@@ -75,74 +95,67 @@ describe Prawn::Icon::Interface do
|
|
75
95
|
describe '::make_icon' do
|
76
96
|
context ':inline_format => false (default)' do
|
77
97
|
it 'should return a Prawn::Icon instance' do
|
78
|
-
|
79
|
-
icon = pdf.make_icon 'fa-arrows'
|
98
|
+
icon = pdf.make_icon 'far-address-book'
|
80
99
|
|
81
|
-
expect(icon
|
100
|
+
expect(icon).to be_a(Prawn::Icon)
|
82
101
|
end
|
83
102
|
end
|
84
103
|
|
85
104
|
context ':inline_format => true' do
|
86
105
|
it 'should return a Prawn::::Text::Formatted::Box instance' do
|
87
|
-
|
88
|
-
icon = pdf.make_icon '<icon>fa-arrows</icon>', inline_format: true
|
106
|
+
icon = pdf.make_icon '<icon>far-address-book</icon>', inline_format: true
|
89
107
|
|
90
|
-
expect(icon
|
108
|
+
expect(icon).to be_a(Prawn::Text::Formatted::Box)
|
91
109
|
end
|
92
110
|
end
|
93
111
|
end
|
94
112
|
|
95
113
|
describe '::inline_icon' do
|
96
114
|
it 'should return a Prawn::Text::Formatted::Box instance' do
|
97
|
-
|
98
|
-
icon = pdf.inline_icon '<icon>fa-arrows</icon>'
|
115
|
+
icon = pdf.inline_icon '<icon>far-address-book</icon>'
|
99
116
|
|
100
|
-
expect(icon
|
117
|
+
expect(icon).to be_a(Prawn::Text::Formatted::Box)
|
101
118
|
end
|
102
119
|
end
|
103
120
|
|
104
121
|
describe '::table_icon' do
|
105
122
|
context 'inline_format: false (default)' do
|
106
123
|
it 'should return a hash with font and content keys' do
|
107
|
-
|
108
|
-
icon = pdf.table_icon 'fa-arrows'
|
124
|
+
icon = pdf.table_icon 'far-address-book'
|
109
125
|
|
110
|
-
expect(icon
|
111
|
-
expect(icon[:font]).to eq('
|
112
|
-
expect(icon[:content]).to eq(
|
126
|
+
expect(icon).to be_a(Hash)
|
127
|
+
expect(icon[:font]).to eq('far')
|
128
|
+
expect(icon[:content]).to eq('')
|
113
129
|
end
|
114
130
|
end
|
115
131
|
|
116
132
|
context 'inline_format: true' do
|
117
133
|
it 'should convert <icon> to <font> tags' do
|
118
|
-
|
119
|
-
icon = pdf.table_icon '<icon>fa-user</icon>', inline_format: true
|
134
|
+
icon = pdf.table_icon '<icon>fas-user</icon>', inline_format: true
|
120
135
|
|
121
|
-
expect(icon
|
122
|
-
expect(icon[:content]).to eq('<font name="
|
123
|
-
expect(icon[:inline_format]).to
|
136
|
+
expect(icon).to be_a(Hash)
|
137
|
+
expect(icon[:content]).to eq('<font name="fas"></font>')
|
138
|
+
expect(icon[:inline_format]).to be true
|
124
139
|
end
|
125
140
|
|
126
141
|
it 'should ignore all other tags' do
|
127
|
-
pdf = create_pdf
|
128
142
|
a = ['<b>BOLD</b> <color rgb="0099FF">BLUE</color>', inline_format: true]
|
129
143
|
icon = pdf.table_icon(*a)
|
130
144
|
|
131
|
-
expect(icon
|
145
|
+
expect(icon).to be_a(Hash)
|
132
146
|
expect(icon[:content]).to eq(a[0])
|
133
|
-
expect(icon[:inline_format]).to
|
147
|
+
expect(icon[:inline_format]).to be true
|
134
148
|
end
|
135
149
|
|
136
150
|
context 'multiple icons' do
|
137
151
|
it 'should ignore any text not in an icon tag' do
|
138
|
-
|
139
|
-
|
140
|
-
out = '<font name="fa"></font> Some Text <font name="fi"></font>'
|
152
|
+
a = ['<icon>fas-user</icon> Some Text <icon>fi-laptop</icon>', inline_format: true]
|
153
|
+
out = '<font name="fas"></font> Some Text <font name="fi"></font>'
|
141
154
|
icon = pdf.table_icon(*a)
|
142
155
|
|
143
|
-
expect(icon
|
156
|
+
expect(icon).to be_a(Hash)
|
144
157
|
expect(icon[:content]).to eq(out)
|
145
|
-
expect(icon[:inline_format]).to
|
158
|
+
expect(icon[:inline_format]).to be true
|
146
159
|
end
|
147
160
|
end
|
148
161
|
end
|
@@ -150,43 +163,50 @@ describe Prawn::Icon::Interface do
|
|
150
163
|
end
|
151
164
|
|
152
165
|
describe Prawn::Icon do
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
166
|
+
let(:pdf) { create_pdf }
|
167
|
+
|
168
|
+
context 'FontAwesome | Regular' do
|
169
|
+
it 'should render regular glyphs' do
|
170
|
+
pdf.icon 'far-user'
|
157
171
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
158
172
|
|
159
|
-
expect(text.strings.first).to eq(
|
173
|
+
expect(text.strings.first).to eq('')
|
160
174
|
end
|
161
175
|
end
|
162
176
|
|
163
|
-
context '
|
164
|
-
it 'should render
|
165
|
-
pdf
|
166
|
-
pdf.icon 'fi-laptop'
|
177
|
+
context 'FontAwesome | Solid' do
|
178
|
+
it 'should render solid glyphs' do
|
179
|
+
pdf.icon 'fas-user'
|
167
180
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
168
181
|
|
169
|
-
expect(text.strings.first).to eq(
|
182
|
+
expect(text.strings.first).to eq('')
|
170
183
|
end
|
171
184
|
end
|
172
185
|
|
173
|
-
context '
|
174
|
-
it 'should render
|
175
|
-
pdf
|
176
|
-
pdf.
|
186
|
+
context 'FontAwesome | Brands' do
|
187
|
+
it 'should render FontAwesome glyphs' do
|
188
|
+
pdf.icon 'fab-amazon'
|
189
|
+
text = PDF::Inspector::Text.analyze(pdf.render)
|
190
|
+
|
191
|
+
expect(text.strings.first).to eq('')
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context 'Foundation Icons' do
|
196
|
+
it 'should render Foundation glyphs' do
|
197
|
+
pdf.icon 'fi-laptop'
|
177
198
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
178
199
|
|
179
|
-
expect(text.strings.first).to eq(
|
200
|
+
expect(text.strings.first).to eq('')
|
180
201
|
end
|
181
202
|
end
|
182
203
|
|
183
204
|
context 'PaymentFont' do
|
184
205
|
it 'should render PaymentFont glyphs' do
|
185
|
-
pdf = create_pdf
|
186
206
|
pdf.icon 'pf-amazon'
|
187
207
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
188
208
|
|
189
|
-
expect(text.strings.first).to eq(
|
209
|
+
expect(text.strings.first).to eq('')
|
190
210
|
end
|
191
211
|
end
|
192
212
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/pdf_helper.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright September 2016, Jesse Doyle. All rights reserved.
|
4
|
+
#
|
5
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
6
|
+
|
7
|
+
describe Prawn::Icon::Base do
|
8
|
+
describe 'FONTDIR' do
|
9
|
+
it 'returns the data/fonts directory' do
|
10
|
+
path = File.expand_path '../../..', __FILE__
|
11
|
+
path = File.join path, 'data/fonts'
|
12
|
+
expect(Prawn::Icon::Base::FONTDIR).to eq(path)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright September 2016, Jesse Doyle. All rights reserved.
|
4
|
+
#
|
5
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
6
|
+
|
7
|
+
describe Prawn::Icon::Errors::IconKeyEmpty do
|
8
|
+
let(:pdf) { create_pdf }
|
9
|
+
|
10
|
+
it 'is a StandardError' do
|
11
|
+
expect(subject).to be_a(StandardError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'is thrown on a missing icon key' do
|
15
|
+
proc = Proc.new { pdf.icon '' }
|
16
|
+
|
17
|
+
expect(proc).to raise_error(described_class)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright September 2016, Jesse Doyle. All rights reserved.
|
4
|
+
#
|
5
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
6
|
+
|
7
|
+
describe Prawn::Icon::Errors::IconNotFound do
|
8
|
+
let(:pdf) { create_pdf }
|
9
|
+
|
10
|
+
it 'is a StandardError' do
|
11
|
+
expect(subject).to be_a(StandardError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'is thrown on an invalid icon key' do
|
15
|
+
proc = Proc.new { pdf.icon 'far-an invalid key' }
|
16
|
+
|
17
|
+
expect(proc).to raise_error(described_class)
|
18
|
+
end
|
19
|
+
end
|
data/spec/unit/font_data_spec.rb
CHANGED
@@ -7,47 +7,49 @@
|
|
7
7
|
require 'spec_helper'
|
8
8
|
|
9
9
|
describe Prawn::Icon::FontData do
|
10
|
+
let(:pdf) { create_pdf }
|
11
|
+
let(:fontawesome) { Prawn::Icon::FontData.new(pdf, set: :far) }
|
12
|
+
|
13
|
+
before { Prawn::Icon::FontData.release_data }
|
14
|
+
|
10
15
|
describe '#initialize' do
|
11
|
-
|
12
|
-
pdf = create_pdf
|
13
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
16
|
+
before { Prawn::Icon::FontData.new(pdf, set: :far) }
|
14
17
|
|
15
|
-
|
18
|
+
it 'should update font_families on initialization' do
|
19
|
+
expect(pdf.font_families['far']).not_to be_nil
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
23
|
describe '::load' do
|
20
|
-
|
21
|
-
pdf
|
22
|
-
data = Prawn::Icon::FontData.load(pdf, 'fa')
|
23
|
-
obj_id_1 = data.__id__
|
24
|
-
data = Prawn::Icon::FontData.load(pdf, 'fa')
|
25
|
-
obj_id_2 = data.__id__
|
24
|
+
context 'specifier is a string' do
|
25
|
+
let(:data) { Prawn::Icon::FontData.load(pdf, 'far') }
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
it 'should load the font' do
|
28
|
+
expect(data).not_to be_nil
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
it 'should only load a single object for multiple documents' do
|
32
|
+
obj_id_1 = data.object_id
|
33
|
+
second = Prawn::Icon::FontData.load(pdf, 'far')
|
34
|
+
obj_id_2 = second.object_id
|
33
35
|
|
34
|
-
|
36
|
+
expect(obj_id_1).to eq(obj_id_2)
|
37
|
+
end
|
35
38
|
end
|
36
39
|
|
37
|
-
|
38
|
-
pdf
|
39
|
-
data = Prawn::Icon::FontData.load(pdf, :fa)
|
40
|
+
context 'specifier is a symbol' do
|
41
|
+
let(:data) { Prawn::Icon::FontData.load(pdf, :far) }
|
40
42
|
|
41
|
-
|
43
|
+
it 'should load the font' do
|
44
|
+
expect(data).not_to be_nil
|
45
|
+
end
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
45
49
|
describe '::release_data' do
|
46
50
|
it 'should remove all data references if requested' do
|
47
|
-
pdf
|
48
|
-
Prawn::Icon::FontData.load(pdf, :fa)
|
51
|
+
Prawn::Icon::FontData.load(pdf, :far)
|
49
52
|
Prawn::Icon::FontData.load(pdf, :fi)
|
50
|
-
Prawn::Icon::FontData.load(pdf, :octicon)
|
51
53
|
data = Prawn::Icon::FontData.release_data
|
52
54
|
|
53
55
|
expect(data).to be_empty
|
@@ -56,30 +58,29 @@ describe Prawn::Icon::FontData do
|
|
56
58
|
|
57
59
|
describe '::unicode_from_key' do
|
58
60
|
it 'should provide a UTF-8 string for a valid key' do
|
59
|
-
|
60
|
-
unicode = Prawn::Icon::FontData.unicode_from_key(pdf, 'fa-arrows')
|
61
|
+
unicode = Prawn::Icon::FontData.unicode_from_key(pdf, 'far-address-book')
|
61
62
|
valid = unicode.force_encoding('UTF-8').valid_encoding?
|
62
63
|
|
63
|
-
expect(valid).to
|
64
|
+
expect(valid).to be true
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
68
|
describe '::specifier_from_key' do
|
68
69
|
it 'should provide the font specifier from a valid key' do
|
69
|
-
specifier = Prawn::Icon::FontData.specifier_from_key('
|
70
|
-
expect(specifier).to eq(:
|
70
|
+
specifier = Prawn::Icon::FontData.specifier_from_key('far-address-book')
|
71
|
+
expect(specifier).to eq(:far)
|
71
72
|
end
|
72
73
|
|
73
74
|
it 'should error when key is nil' do
|
74
75
|
proc = Proc.new { Prawn::Icon::FontData.specifier_from_key nil }
|
75
76
|
|
76
|
-
expect(proc).to raise_error(Prawn::Errors::IconKeyEmpty)
|
77
|
+
expect(proc).to raise_error(Prawn::Icon::Errors::IconKeyEmpty)
|
77
78
|
end
|
78
79
|
|
79
80
|
it 'should error when key is an empty string' do
|
80
81
|
proc = Proc.new { Prawn::Icon::FontData.specifier_from_key '' }
|
81
82
|
|
82
|
-
expect(proc).to raise_error(Prawn::Errors::IconKeyEmpty)
|
83
|
+
expect(proc).to raise_error(Prawn::Icon::Errors::IconKeyEmpty)
|
83
84
|
end
|
84
85
|
|
85
86
|
it 'should handle strings without any dashes properly' do
|
@@ -91,19 +92,15 @@ describe Prawn::Icon::FontData do
|
|
91
92
|
|
92
93
|
describe '#font_version' do
|
93
94
|
it 'should have a font version as a string' do
|
94
|
-
|
95
|
-
data = Prawn::Icon::FontData.new(pdf)
|
96
|
-
version = data.font_version
|
95
|
+
version = fontawesome.font_version
|
97
96
|
|
98
|
-
expect(version.
|
97
|
+
expect(version).to be_a(String)
|
99
98
|
end
|
100
99
|
end
|
101
100
|
|
102
101
|
describe '#legend_path' do
|
103
102
|
it 'should have a valid path to a yml file for legend' do
|
104
|
-
|
105
|
-
data = Prawn::Icon::FontData.new(pdf)
|
106
|
-
path = data.legend_path
|
103
|
+
path = fontawesome.legend_path
|
107
104
|
extname = File.extname(path)
|
108
105
|
|
109
106
|
expect(extname).to eq('.yml')
|
@@ -112,19 +109,15 @@ describe Prawn::Icon::FontData do
|
|
112
109
|
|
113
110
|
describe '#load_fonts' do
|
114
111
|
it 'should return a FontData object' do
|
115
|
-
|
116
|
-
data = Prawn::Icon::FontData.new(pdf)
|
117
|
-
ret_val = data.load_fonts(pdf)
|
112
|
+
ret_val = fontawesome.load_fonts(pdf)
|
118
113
|
|
119
|
-
expect(ret_val.
|
114
|
+
expect(ret_val).to be_a(Prawn::Icon::FontData)
|
120
115
|
end
|
121
116
|
end
|
122
117
|
|
123
118
|
describe '#path' do
|
124
119
|
it 'should have a valid path to a TTF file' do
|
125
|
-
|
126
|
-
data = Prawn::Icon::FontData.new(pdf)
|
127
|
-
path = data.path
|
120
|
+
path = fontawesome.path
|
128
121
|
extname = File.extname(path)
|
129
122
|
|
130
123
|
expect(extname).to eq('.ttf')
|
@@ -133,68 +126,56 @@ describe Prawn::Icon::FontData do
|
|
133
126
|
|
134
127
|
describe '#specifier' do
|
135
128
|
it 'should retrieve the string specifier from the yaml legend file' do
|
136
|
-
|
137
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
138
|
-
specifier = data.specifier
|
129
|
+
specifier = fontawesome.specifier
|
139
130
|
|
140
|
-
expect(specifier).to eq('
|
131
|
+
expect(specifier).to eq('far')
|
141
132
|
end
|
142
133
|
end
|
143
134
|
|
144
135
|
describe '#unicode' do
|
145
136
|
it 'should provide a valid UTF-8 encoded string for a valid key' do
|
146
|
-
|
147
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
148
|
-
unicode = data.unicode('arrows')
|
137
|
+
unicode = fontawesome.unicode('address-book')
|
149
138
|
valid = unicode.force_encoding('UTF-8').valid_encoding?
|
150
139
|
|
151
|
-
expect(valid).to
|
140
|
+
expect(valid).to be true
|
152
141
|
end
|
153
142
|
|
154
143
|
it 'should raise an error if unable to match a key' do
|
155
|
-
|
156
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
157
|
-
proc = Proc.new { data.unicode('an invalid sequence') }
|
144
|
+
proc = Proc.new { fontawesome.unicode('an invalid sequence') }
|
158
145
|
|
159
|
-
expect(proc).to raise_error(Prawn::Errors::IconNotFound)
|
146
|
+
expect(proc).to raise_error(Prawn::Icon::Errors::IconNotFound)
|
160
147
|
end
|
161
148
|
end
|
162
149
|
|
163
150
|
describe '#keys' do
|
164
151
|
it 'should return a non-empty array of strings' do
|
165
|
-
|
166
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
167
|
-
keys = data.keys
|
152
|
+
keys = fontawesome.keys
|
168
153
|
|
169
154
|
expect(keys).not_to be_empty
|
170
|
-
expect(keys.first.
|
155
|
+
expect(keys.first).to be_a(String)
|
171
156
|
end
|
172
157
|
|
173
158
|
it 'should not contain the version as a key' do
|
174
|
-
|
175
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
176
|
-
keys = data.keys
|
159
|
+
keys = fontawesome.keys
|
177
160
|
|
178
|
-
expect(keys.include?('__font_version__')).to
|
161
|
+
expect(keys.include?('__font_version__')).to be false
|
179
162
|
end
|
180
163
|
end
|
181
164
|
|
182
165
|
describe '#yaml' do
|
183
166
|
it 'should return a hash with the specifier as the first key' do
|
184
|
-
|
185
|
-
data = Prawn::Icon::FontData.new(pdf, set: :fa)
|
186
|
-
yaml = data.yaml
|
167
|
+
yaml = fontawesome.yaml
|
187
168
|
key = yaml.keys.first
|
188
|
-
mapping = yaml['
|
169
|
+
mapping = yaml['far']
|
189
170
|
inner_key = mapping.keys.last
|
190
171
|
inner_value = mapping.values.last
|
191
172
|
proc = Proc.new { inner_value.force_encoding('UTF-8').valid_encoding? }
|
192
173
|
|
193
|
-
expect(yaml.
|
194
|
-
expect(key).to eq('
|
195
|
-
expect(inner_key.
|
196
|
-
expect(inner_value.
|
197
|
-
expect(proc).to
|
174
|
+
expect(yaml).to be_a(Hash)
|
175
|
+
expect(key).to eq('far')
|
176
|
+
expect(inner_key).to be_a(String)
|
177
|
+
expect(inner_value).to be_a(String)
|
178
|
+
expect(proc.call).to be true
|
198
179
|
end
|
199
180
|
end
|
200
181
|
end
|