asciidoctor-diagram 1.5.18 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +75 -0
  3. data/README.adoc +98 -23
  4. data/examples/features.adoc +2 -2
  5. data/lib/asciidoctor-diagram.rb +8 -0
  6. data/lib/asciidoctor-diagram/a2s/converter.rb +59 -0
  7. data/lib/asciidoctor-diagram/a2s/extension.rb +6 -52
  8. data/lib/asciidoctor-diagram/blockdiag/converter.rb +37 -0
  9. data/lib/asciidoctor-diagram/blockdiag/extension.rb +9 -116
  10. data/lib/asciidoctor-diagram/bpmn.rb +7 -0
  11. data/lib/asciidoctor-diagram/bpmn/converter.rb +62 -0
  12. data/lib/asciidoctor-diagram/bpmn/extension.rb +14 -0
  13. data/lib/asciidoctor-diagram/bytefield.rb +7 -0
  14. data/lib/asciidoctor-diagram/bytefield/converter.rb +26 -0
  15. data/lib/asciidoctor-diagram/bytefield/extension.rb +14 -0
  16. data/lib/asciidoctor-diagram/diagram_converter.rb +23 -0
  17. data/lib/asciidoctor-diagram/diagram_processor.rb +357 -0
  18. data/lib/asciidoctor-diagram/diagram_source.rb +322 -0
  19. data/lib/asciidoctor-diagram/ditaa/converter.rb +90 -0
  20. data/lib/asciidoctor-diagram/ditaa/extension.rb +6 -71
  21. data/lib/asciidoctor-diagram/dpic.rb +7 -0
  22. data/lib/asciidoctor-diagram/dpic/converter.rb +30 -0
  23. data/lib/asciidoctor-diagram/dpic/extension.rb +14 -0
  24. data/lib/asciidoctor-diagram/erd/converter.rb +31 -0
  25. data/lib/asciidoctor-diagram/erd/extension.rb +6 -35
  26. data/lib/asciidoctor-diagram/gnuplot.rb +7 -0
  27. data/lib/asciidoctor-diagram/gnuplot/converter.rb +63 -0
  28. data/lib/asciidoctor-diagram/gnuplot/extension.rb +14 -0
  29. data/lib/asciidoctor-diagram/graphviz/converter.rb +32 -0
  30. data/lib/asciidoctor-diagram/graphviz/extension.rb +6 -35
  31. data/lib/asciidoctor-diagram/http/converter.rb +99 -0
  32. data/lib/asciidoctor-diagram/http/server.rb +132 -0
  33. data/lib/asciidoctor-diagram/lilypond.rb +7 -0
  34. data/lib/asciidoctor-diagram/lilypond/converter.rb +54 -0
  35. data/lib/asciidoctor-diagram/lilypond/extension.rb +14 -0
  36. data/lib/asciidoctor-diagram/meme/converter.rb +122 -0
  37. data/lib/asciidoctor-diagram/meme/extension.rb +5 -107
  38. data/lib/asciidoctor-diagram/mermaid/converter.rb +179 -0
  39. data/lib/asciidoctor-diagram/mermaid/extension.rb +6 -159
  40. data/lib/asciidoctor-diagram/msc/converter.rb +35 -0
  41. data/lib/asciidoctor-diagram/msc/extension.rb +6 -36
  42. data/lib/asciidoctor-diagram/nomnoml/converter.rb +25 -0
  43. data/lib/asciidoctor-diagram/nomnoml/extension.rb +6 -28
  44. data/lib/asciidoctor-diagram/pikchr.rb +7 -0
  45. data/lib/asciidoctor-diagram/pikchr/converter.rb +26 -0
  46. data/lib/asciidoctor-diagram/pikchr/extension.rb +14 -0
  47. data/lib/asciidoctor-diagram/plantuml/converter.rb +117 -0
  48. data/lib/asciidoctor-diagram/plantuml/extension.rb +10 -119
  49. data/lib/asciidoctor-diagram/shaape/converter.rb +25 -0
  50. data/lib/asciidoctor-diagram/shaape/extension.rb +6 -28
  51. data/lib/asciidoctor-diagram/smcat.rb +7 -0
  52. data/lib/asciidoctor-diagram/smcat/converter.rb +44 -0
  53. data/lib/asciidoctor-diagram/smcat/extension.rb +14 -0
  54. data/lib/asciidoctor-diagram/svgbob/converter.rb +49 -0
  55. data/lib/asciidoctor-diagram/svgbob/extension.rb +6 -28
  56. data/lib/asciidoctor-diagram/symbolator.rb +7 -0
  57. data/lib/asciidoctor-diagram/symbolator/converter.rb +23 -0
  58. data/lib/asciidoctor-diagram/symbolator/extension.rb +14 -0
  59. data/lib/asciidoctor-diagram/syntrax/converter.rb +58 -0
  60. data/lib/asciidoctor-diagram/syntrax/extension.rb +6 -51
  61. data/lib/asciidoctor-diagram/tikz/converter.rb +56 -0
  62. data/lib/asciidoctor-diagram/tikz/extension.rb +6 -60
  63. data/lib/asciidoctor-diagram/umlet/converter.rb +24 -0
  64. data/lib/asciidoctor-diagram/umlet/extension.rb +6 -28
  65. data/lib/asciidoctor-diagram/util/cli.rb +14 -3
  66. data/lib/asciidoctor-diagram/util/cli_generator.rb +19 -1
  67. data/lib/asciidoctor-diagram/util/gif.rb +2 -2
  68. data/lib/asciidoctor-diagram/util/java.rb +1 -1
  69. data/lib/asciidoctor-diagram/util/java_socket.rb +7 -9
  70. data/lib/asciidoctor-diagram/util/pdf.rb +2 -2
  71. data/lib/asciidoctor-diagram/util/png.rb +2 -2
  72. data/lib/asciidoctor-diagram/util/svg.rb +46 -19
  73. data/lib/asciidoctor-diagram/util/which.rb +0 -29
  74. data/lib/asciidoctor-diagram/vega/converter.rb +47 -0
  75. data/lib/asciidoctor-diagram/vega/extension.rb +6 -44
  76. data/lib/asciidoctor-diagram/version.rb +1 -1
  77. data/lib/asciidoctor-diagram/wavedrom/converter.rb +50 -0
  78. data/lib/asciidoctor-diagram/wavedrom/extension.rb +6 -46
  79. data/lib/ditaa-1.3.15.jar +0 -0
  80. data/lib/ditaamini-0.12.jar +0 -0
  81. data/lib/plantuml-1.3.15.jar +0 -0
  82. data/lib/plantuml.jar +0 -0
  83. data/lib/server-1.3.15.jar +0 -0
  84. data/spec/a2s_spec.rb +2 -140
  85. data/spec/blockdiag_spec.rb +2 -200
  86. data/spec/bpmn_spec.rb +56 -0
  87. data/spec/bytefield_spec.rb +92 -0
  88. data/spec/ditaa_spec.rb +37 -143
  89. data/spec/dpic_spec.rb +19 -0
  90. data/spec/erd_spec.rb +2 -199
  91. data/spec/gnuplot_spec.rb +225 -0
  92. data/spec/graphviz_spec.rb +6 -145
  93. data/spec/lilypond_spec.rb +13 -0
  94. data/spec/mermaid_spec.rb +35 -200
  95. data/spec/msc_spec.rb +2 -199
  96. data/spec/nomnoml_spec.rb +4 -142
  97. data/spec/pikchr_spec.rb +51 -0
  98. data/spec/plantuml_spec.rb +24 -507
  99. data/spec/shaape_spec.rb +9 -221
  100. data/spec/shared_examples.rb +552 -0
  101. data/spec/smcat_spec.rb +26 -0
  102. data/spec/svgbob_spec.rb +2 -140
  103. data/spec/symbolator_spec.rb +23 -0
  104. data/spec/syntrax_spec.rb +5 -215
  105. data/spec/test_helper.rb +1 -18
  106. data/spec/tikz_spec.rb +4 -24
  107. data/spec/umlet_spec.rb +2 -58
  108. data/spec/vega_spec.rb +4 -117
  109. data/spec/wavedrom_spec.rb +2 -199
  110. metadata +73 -11
  111. data/lib/asciidoctor-diagram/extensions.rb +0 -568
  112. data/lib/ditaa-1.3.13.jar +0 -0
  113. data/lib/ditaamini-0.11.jar +0 -0
  114. data/lib/plantuml-1.3.13.jar +0 -0
  115. data/lib/server-1.3.13.jar +0 -0
@@ -1,228 +1,16 @@
1
1
  require_relative 'test_helper'
2
2
 
3
- describe Asciidoctor::Diagram::ShaapeBlockMacroProcessor, :broken_on_osx, :broken_on_appveyor do
4
- it "should generate PNG images when format is set to 'png'" do
5
- code = <<-eos
6
- +--------+ +-------------+
7
- | | \\ /
8
- | Hello |---> \\ Goodbye /
9
- | ;) | / \\
10
- | | / \\
11
- +--------+ +-------------+
12
- eos
13
-
14
- File.write('shaape.txt', code)
15
-
16
- doc = <<-eos
17
- = Hello, Shaape!
18
- Doc Writer <doc@example.com>
19
-
20
- == First Section
21
-
22
- shaape::shaape.txt[format="png"]
23
- eos
24
-
25
- d = load_asciidoc doc
26
- expect(d).to_not be_nil
27
-
28
- b = d.find { |bl| bl.context == :image }
29
- expect(b).to_not be_nil
3
+ code = <<-eos
4
+ +-->
5
+ / /\
6
+ >---+---->+ +
7
+ \/
8
+ eos
30
9
 
31
- expect(b.content_model).to eq :empty
32
-
33
- target = b.attributes['target']
34
- expect(target).to_not be_nil
35
- expect(target).to match(/\.png$/)
36
- expect(File.exist?(target)).to be true
37
-
38
- expect(b.attributes['width']).to_not be_nil
39
- expect(b.attributes['height']).to_not be_nil
40
- end
10
+ describe Asciidoctor::Diagram::ShaapeBlockMacroProcessor, :broken_on_osx, :broken_on_appveyor do
11
+ include_examples "block_macro", :shaape, code, [:png, :svg]
41
12
  end
42
13
 
43
14
  describe Asciidoctor::Diagram::ShaapeBlockProcessor, :broken_on_osx, :broken_on_appveyor do
44
- it "should generate PNG images when format is set to 'png'" do
45
- doc = <<-eos
46
- = Hello, Shaape!
47
- Doc Writer <doc@example.com>
48
-
49
- == First Section
50
-
51
- [shaape, format="png"]
52
- ----
53
- +--------+ +-------------+
54
- | | \\ /
55
- | Hello |---> \\ Goodbye /
56
- | ;) | / \\
57
- | | / \\
58
- +--------+ +-------------+
59
- ----
60
- eos
61
-
62
- d = load_asciidoc doc
63
- expect(d).to_not be_nil
64
-
65
- b = d.find { |bl| bl.context == :image }
66
- expect(b).to_not be_nil
67
-
68
- expect(b.content_model).to eq :empty
69
-
70
- target = b.attributes['target']
71
- expect(target).to_not be_nil
72
- expect(target).to match(/\.png$/)
73
- expect(File.exist?(target)).to be true
74
-
75
- expect(b.attributes['width']).to_not be_nil
76
- expect(b.attributes['height']).to_not be_nil
77
- end
78
-
79
- it "should generate SVG images when format is set to 'svg'" do
80
- doc = <<-eos
81
- = Hello, Shaape!
82
- Doc Writer <doc@example.com>
83
-
84
- == First Section
85
-
86
- [shaape, format="svg"]
87
- ----
88
- +--------+ +-------------+
89
- | | \\ /
90
- | Hello |---> \\ Goodbye /
91
- | ;) | / \\
92
- | | / \\
93
- +--------+ +-------------+
94
- ----
95
- eos
96
-
97
- d = load_asciidoc doc
98
- expect(d).to_not be_nil
99
-
100
- b = d.find { |bl| bl.context == :image }
101
- expect(b).to_not be_nil
102
-
103
- expect(b.content_model).to eq :empty
104
-
105
- target = b.attributes['target']
106
- expect(target).to_not be_nil
107
- expect(target).to match(/\.svg/)
108
- expect(File.exist?(target)).to be true
109
-
110
- expect(b.attributes['width']).to_not be_nil
111
- expect(b.attributes['height']).to_not be_nil
112
- end
113
-
114
- it "should raise an error when when format is set to an invalid value" do
115
- doc = <<-eos
116
- = Hello, Shaape!
117
- Doc Writer <doc@example.com>
118
-
119
- == First Section
120
-
121
- [shaape, format="foobar"]
122
- ----
123
- ----
124
- eos
125
-
126
- expect { load_asciidoc doc }.to raise_error(/support.*format/i)
127
- end
128
-
129
- it "should not regenerate images when source has not changed" do
130
- code = <<-eos
131
- +--------+ +-------------+
132
- | | \\ /
133
- | Hello |---> \\ Goodbye /
134
- | ;) | / \\
135
- | | / \\
136
- +--------+ +-------------+
137
- eos
138
-
139
- File.write('shaape.txt', code)
140
-
141
- doc = <<-eos
142
- = Hello, Shaape!
143
- Doc Writer <doc@example.com>
144
-
145
- == First Section
146
-
147
- shaape::shaape.txt
148
-
149
- [shaape, format="png"]
150
- ----
151
- +--------+
152
- | |
153
- | Hello |
154
- | ;) |
155
- | |
156
- +--------+
157
- ----
158
- eos
159
-
160
- d = load_asciidoc doc
161
- b = d.find { |bl| bl.context == :image }
162
- expect(b).to_not be_nil
163
- target = b.attributes['target']
164
- mtime1 = File.mtime(target)
165
-
166
- sleep 1
167
-
168
- d = load_asciidoc doc
169
-
170
- mtime2 = File.mtime(target)
171
-
172
- expect(mtime2).to eq mtime1
173
- end
174
-
175
- it "should handle two block macros with the same source" do
176
- code = <<-eos
177
- +--------+ +-------------+
178
- | | \\ /
179
- | Hello |---> \\ Goodbye /
180
- | ;) | / \\
181
- | | / \\
182
- +--------+ +-------------+
183
- eos
184
-
185
- File.write('shaape.txt', code)
186
-
187
- doc = <<-eos
188
- = Hello, Shaape!
189
- Doc Writer <doc@example.com>
190
-
191
- == First Section
192
-
193
- shaape::shaape.txt[]
194
- shaape::shaape.txt[]
195
- eos
196
-
197
- load_asciidoc doc
198
- expect(File.exist?('shaape.png')).to be true
199
- end
200
-
201
- it "should respect target attribute in block macros" do
202
- code = <<-eos
203
- +--------+ +-------------+
204
- | | \\ /
205
- | Hello |---> \\ Goodbye /
206
- | ;) | / \\
207
- | | / \\
208
- +--------+ +-------------+
209
- eos
210
-
211
- File.write('shaape.txt', code)
212
-
213
- doc = <<-eos
214
- = Hello, Shaape!
215
- Doc Writer <doc@example.com>
216
-
217
- == First Section
218
-
219
- shaape::shaape.txt["foobar"]
220
- shaape::shaape.txt["foobaz"]
221
- eos
222
-
223
- load_asciidoc doc
224
- expect(File.exist?('foobar.png')).to be true
225
- expect(File.exist?('foobaz.png')).to be true
226
- expect(File.exist?('shaape.png')).to be false
227
- end
15
+ include_examples "block", :shaape, code, [:png, :svg]
228
16
  end
@@ -0,0 +1,552 @@
1
+ require_relative 'test_helper'
2
+
3
+ RSpec.shared_examples "block_macro" do |name, code, formats|
4
+ formats.each do |format|
5
+ if format == :txt
6
+ it "#{name} should generate literal blocks when format is set to 'txt'" do
7
+ File.write("#{name}.txt", code)
8
+
9
+ doc = <<-eos
10
+ = Hello, #{name}!
11
+ Doc Writer <doc@example.com>
12
+
13
+ == First Section
14
+
15
+ #{name}::#{name}.txt[format="#{format}"]
16
+ eos
17
+
18
+ d = load_asciidoc doc
19
+ expect(d).to_not be_nil
20
+
21
+ b = d.find { |bl| bl.context == :literal }
22
+ expect(b).to_not be_nil
23
+
24
+ expect(b.content_model).to eq :verbatim
25
+
26
+ expect(b.attributes['target']).to be_nil
27
+ end
28
+ else
29
+ it "#{name} should generate image blocks when format is set to '#{format}'" do
30
+ File.write("#{name}.txt", code)
31
+
32
+ doc = <<-eos
33
+ = Hello, #{name}!
34
+ Doc Writer <doc@example.com>
35
+
36
+ == First Section
37
+
38
+ #{name}::#{name}.txt[format="#{format}"]
39
+ eos
40
+
41
+ d = load_asciidoc doc
42
+ expect(d).to_not be_nil
43
+
44
+ b = d.find { |bl| bl.context == :image }
45
+ expect(b).to_not be_nil
46
+
47
+ expect(b.content_model).to eq :empty
48
+
49
+ target = b.attributes['target']
50
+ expect(target).to_not be_nil
51
+ expect(target).to match(/\.#{format}$/)
52
+ expect(File.exist?(target)).to be true
53
+
54
+ unless format == :pdf
55
+ expect(b.attributes['width']).to_not be_nil
56
+ expect(b.attributes['height']).to_not be_nil
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ it 'should support substitutions in the target attribute' do
63
+ File.write("#{name}.txt", code)
64
+
65
+ doc = <<-eos
66
+ = Hello, #{name}!
67
+ Doc Writer <doc@example.com>
68
+ :file: #{name}
69
+
70
+ == First Section
71
+
72
+ #{name}::{file}.txt[subs=attributes+]
73
+ eos
74
+
75
+ d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
76
+ expect(d).to_not be_nil
77
+
78
+ b = d.find { |bl| bl.context == :image }
79
+ expect(b).to_not be_nil
80
+
81
+ target = b.attributes['target']
82
+ expect(File.exist?(target)).to be true
83
+ end
84
+
85
+ it 'should support substitutions in the format attribute' do
86
+ File.write("#{name}.txt", code)
87
+
88
+ doc = <<-eos
89
+ = Hello, #{name}!
90
+ Doc Writer <doc@example.com>
91
+ :file: #{name}
92
+ :outputformat: #{formats[0]}
93
+
94
+ == First Section
95
+
96
+ #{name}::{file}.txt[format="{outputformat}", subs=attributes+]
97
+ eos
98
+
99
+ d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
100
+ expect(d).to_not be_nil
101
+
102
+ b = d.find { |bl| bl.context == :image }
103
+ expect(b).to_not be_nil
104
+
105
+ target = b.attributes['target']
106
+ expect(target).to match(/\.#{formats[0]}$/)
107
+ expect(File.exist?(target)).to be true
108
+
109
+ unless formats[0] == :pdf
110
+ expect(b.attributes['width']).to_not be_nil
111
+ expect(b.attributes['height']).to_not be_nil
112
+ end
113
+ end
114
+
115
+ it 'should generate blocks with figure captions' do
116
+ File.write("#{name}.txt", code)
117
+
118
+ doc = <<-eos
119
+ = Hello, #{name}!
120
+ Doc Writer <doc@example.com>
121
+
122
+ == First Section
123
+
124
+ .This is a diagram
125
+ #{name}::#{name}.txt[]
126
+ eos
127
+
128
+ d = load_asciidoc doc
129
+ expect(d).to_not be_nil
130
+
131
+ b = d.find { |bl| bl.context == :image }
132
+ expect(b).to_not be_nil
133
+
134
+ expect(b.caption).to match(/Figure \d+/)
135
+ end
136
+
137
+ it 'should handle two block macros with the same source' do
138
+ File.write("#{name}.txt", code)
139
+
140
+ doc = <<-eos
141
+ = Hello, #{name}!
142
+ Doc Writer <doc@example.com>
143
+
144
+ == First Section
145
+
146
+ #{name}::#{name}.txt[]
147
+ #{name}::#{name}.txt[]
148
+ eos
149
+
150
+ d = load_asciidoc doc
151
+
152
+ b = d.find { |bl| bl.context == :image }
153
+ expect(b).to_not be_nil
154
+
155
+ target = b.attributes['target']
156
+ expect(File.exist?(target)).to be true
157
+ end
158
+
159
+ it 'should respect target attribute in block macros' do
160
+ File.write("#{name}.txt", code)
161
+
162
+ doc = <<-eos
163
+ = Hello, #{name}!
164
+ Doc Writer <doc@example.com>
165
+
166
+ == First Section
167
+
168
+ #{name}::#{name}.txt["foobar"]
169
+ #{name}::#{name}.txt["foobaz"]
170
+ eos
171
+
172
+ load_asciidoc doc
173
+ expect(File.exist?("foobar.#{formats[0]}")).to be true
174
+ expect(File.exist?("foobaz.#{formats[0]}")).to be true
175
+ expect(File.exist?("#{name}.#{formats[0]}")).to be false
176
+ end
177
+
178
+ it 'should respect target attribute values with relative paths in block macros' do
179
+ File.write("#{name}.txt", code)
180
+
181
+ doc = <<-eos
182
+ = Hello, #{name}!
183
+ Doc Writer <doc@example.com>
184
+
185
+ == First Section
186
+
187
+ #{name}::#{name}.txt["test/foobar"]
188
+ #{name}::#{name}.txt["test2/foobaz"]
189
+ eos
190
+
191
+ load_asciidoc doc
192
+ expect(File.exist?("test/foobar.#{formats[0]}")).to be true
193
+ expect(File.exist?("test2/foobaz.#{formats[0]}")).to be true
194
+ expect(File.exist?("#{name}.#{formats[0]}")).to be false
195
+ end
196
+ end
197
+
198
+ RSpec.shared_examples "block" do |name, code, formats|
199
+ formats.each do |format|
200
+ if format == :txt
201
+ it "#{name} should generate literal blocks when format is set to 'txt'" do
202
+ doc = <<-eos
203
+ = Hello, #{name}!
204
+ Doc Writer <doc@example.com>
205
+
206
+ == First Section
207
+
208
+ [#{name}, format="#{format}"]
209
+ ----
210
+ #{code}
211
+ ----
212
+ eos
213
+
214
+ d = load_asciidoc doc
215
+ expect(d).to_not be_nil
216
+
217
+ b = d.find { |bl| bl.context == :literal }
218
+ expect(b).to_not be_nil
219
+
220
+ expect(b.content_model).to eq :verbatim
221
+
222
+ expect(b.attributes['target']).to be_nil
223
+ end
224
+ else
225
+ it "#{name} should generate image blocks when format is set to '#{format}'" do
226
+ doc = <<-eos
227
+ = Hello, #{name}!
228
+ Doc Writer <doc@example.com>
229
+
230
+ == First Section
231
+
232
+ [#{name}, format="#{format}"]
233
+ ----
234
+ #{code}
235
+ ----
236
+ eos
237
+
238
+ d = load_asciidoc doc
239
+ expect(d).to_not be_nil
240
+
241
+ b = d.find { |bl| bl.context == :image }
242
+ expect(b).to_not be_nil
243
+
244
+ expect(b.content_model).to eq :empty
245
+
246
+ target = b.attributes['target']
247
+ expect(target).to_not be_nil
248
+ expect(target).to match(/\.#{format}$/)
249
+ expect(File.exist?(target)).to be true
250
+
251
+ unless format == :pdf
252
+ expect(b.attributes['width']).to_not be_nil
253
+ expect(b.attributes['height']).to_not be_nil
254
+ end
255
+ end
256
+ end
257
+ end
258
+
259
+ if formats.include? :svg
260
+ it "#{name} should respect the svg-type attribute when format is set to 'svg'" do
261
+ doc = <<-eos
262
+ = Hello, #{name}!
263
+ Doc Writer <doc@example.com>
264
+
265
+ == First Section
266
+
267
+ [#{name}, format="svg", svg-type="inline"]
268
+ ----
269
+ #{code}
270
+ ----
271
+ eos
272
+
273
+ d = load_asciidoc doc
274
+ expect(d).to_not be_nil
275
+
276
+ b = d.find { |bl| bl.context == :image }
277
+ expect(b).to_not be_nil
278
+
279
+ expect(b.content_model).to eq :empty
280
+
281
+ target = b.attributes['target']
282
+ expect(target).to_not be_nil
283
+ expect(target).to match(/\.svg/)
284
+ expect(File.exist?(target)).to be true
285
+
286
+ expect(b.option?('inline')).to be_truthy
287
+
288
+ unless formats[0] == :pdf
289
+ expect(b.attributes['width']).to_not be_nil
290
+ expect(b.attributes['height']).to_not be_nil
291
+ end
292
+ end
293
+
294
+ it "#{name} should respect the diagram-svg-type attribute when format is set to 'svg'" do
295
+ doc = <<-eos
296
+ = Hello, #{name}!
297
+ :diagram-svg-type: inline
298
+ Doc Writer <doc@example.com>
299
+
300
+ == First Section
301
+
302
+ [#{name}, format="svg"]
303
+ ----
304
+ #{code}
305
+ ----
306
+ eos
307
+
308
+ d = load_asciidoc doc
309
+ expect(d).to_not be_nil
310
+
311
+ b = d.find { |bl| bl.context == :image }
312
+ expect(b).to_not be_nil
313
+
314
+ expect(b.content_model).to eq :empty
315
+
316
+ target = b.attributes['target']
317
+ expect(target).to_not be_nil
318
+ expect(target).to match(/\.svg/)
319
+ expect(File.exist?(target)).to be true
320
+
321
+ expect(b.option?('inline')).to be_truthy
322
+
323
+ unless formats[0] == :pdf
324
+ expect(b.attributes['width']).to_not be_nil
325
+ expect(b.attributes['height']).to_not be_nil
326
+ end
327
+ end
328
+ end
329
+
330
+ it 'should raise an error when when format is set to an invalid value' do
331
+ doc = <<-eos
332
+ = Hello, #{name}!
333
+ Doc Writer <doc@example.com>
334
+
335
+ == First Section
336
+
337
+ [#{name}, format="foobar"]
338
+ ----
339
+ ----
340
+ eos
341
+
342
+ expect { load_asciidoc doc }.to raise_error(/support.*format/i)
343
+ end
344
+
345
+ it 'should not regenerate images when source has not changed' do
346
+ doc = <<-eos
347
+ = Hello, #{name}!
348
+ Doc Writer <doc@example.com>
349
+
350
+ == First Section
351
+
352
+ [#{name}]
353
+ ----
354
+ #{code}
355
+ ----
356
+ eos
357
+
358
+ d = load_asciidoc doc
359
+ b1 = d.find { |bl| bl.context == :image }
360
+ target1 = b1.attributes['target']
361
+ mtime1 = File.mtime(target1)
362
+
363
+ sleep 1
364
+
365
+ d = load_asciidoc doc
366
+ b2 = d.find { |bl| bl.context == :image }
367
+ target2 = b2.attributes['target']
368
+
369
+ mtime2 = File.mtime(target1)
370
+
371
+ expect(mtime2).to eq mtime1
372
+ end
373
+
374
+ it 'should write files to outdir if set' do
375
+ doc = <<-eos
376
+ = Hello, #{name}!
377
+ Doc Writer <doc@example.com>
378
+
379
+ == First Section
380
+
381
+ [#{name}]
382
+ ----
383
+ #{code}
384
+ ----
385
+ eos
386
+
387
+ d = load_asciidoc doc, {:attributes => {'outdir' => 'foo'}}
388
+ b = d.find { |bl| bl.context == :image }
389
+
390
+ target = b.attributes['target']
391
+ expect(target).to_not be_nil
392
+ expect(File.exist?(target)).to be false
393
+ expect(File.exist?(File.expand_path(target, 'foo'))).to be true
394
+ end
395
+
396
+ it 'should write files to to_dir if set' do
397
+ doc = <<-eos
398
+ = Hello, #{name}!
399
+ Doc Writer <doc@example.com>
400
+
401
+ == First Section
402
+
403
+ [#{name}]
404
+ ----
405
+ #{code}
406
+ ----
407
+ eos
408
+
409
+ d = load_asciidoc doc, {:to_dir => 'foo'}
410
+ b = d.find { |bl| bl.context == :image }
411
+
412
+ target = b.attributes['target']
413
+ expect(target).to_not be_nil
414
+ expect(File.exist?(target)).to be false
415
+ expect(File.exist?(File.expand_path(target, 'foo'))).to be true
416
+ end
417
+
418
+ it 'should write files to to_dir if set when embedded in table' do
419
+ doc = <<-eos
420
+ = Hello, #{name}!
421
+ Doc Writer <doc@example.com>
422
+
423
+ == First Section
424
+
425
+ |===
426
+ |Type | Example
427
+
428
+ |graphviz
429
+ a|
430
+ [#{name}]
431
+ ----
432
+ #{code.gsub('|', '\|')}
433
+ ----
434
+ |===
435
+ eos
436
+
437
+ d = load_asciidoc doc, {:to_dir => 'foo'}
438
+ b = d.find { |bl| bl.context == :image }
439
+
440
+ target = b.attributes['target']
441
+ expect(target).to_not be_nil
442
+ expect(File.exist?(target)).to be false
443
+ expect(File.exist?(File.expand_path(target, 'foo'))).to be true
444
+ end
445
+
446
+ it 'should write files to imagesoutdir if set' do
447
+ doc = <<-eos
448
+ = Hello, #{name}!
449
+ Doc Writer <doc@example.com>
450
+
451
+ == First Section
452
+
453
+ [#{name}]
454
+ ----
455
+ #{code}
456
+ ----
457
+ eos
458
+
459
+ d = load_asciidoc doc, {:attributes => {'imagesoutdir' => 'bar', 'outdir' => 'foo'}}
460
+ b = d.find { |bl| bl.context == :image }
461
+
462
+ target = b.attributes['target']
463
+ expect(target).to_not be_nil
464
+ expect(File.exist?(target)).to be false
465
+ expect(File.exist?(File.expand_path(target, 'bar'))).to be true
466
+ expect(File.exist?(File.expand_path(target, 'foo'))).to be false
467
+ end
468
+
469
+ it 'should omit width/height attributes when generating docbook' do
470
+ doc = <<-eos
471
+ = Hello, #{name}!
472
+ Doc Writer <doc@example.com>
473
+
474
+ == First Section
475
+
476
+ [#{name}]
477
+ ----
478
+ #{code}
479
+ ----
480
+ eos
481
+
482
+ d = load_asciidoc doc, :attributes => {'backend' => 'docbook5'}
483
+ expect(d).to_not be_nil
484
+
485
+ b = d.find { |bl| bl.context == :image }
486
+ expect(b).to_not be_nil
487
+
488
+ target = b.attributes['target']
489
+ expect(File.exist?(target)).to be true
490
+
491
+ expect(b.attributes['width']).to be_nil
492
+ expect(b.attributes['height']).to be_nil
493
+ end
494
+
495
+ it 'should generate blocks with figure captions' do
496
+ doc = <<-eos
497
+ = Hello, #{name}!
498
+ Doc Writer <doc@example.com>
499
+
500
+ == First Section
501
+
502
+ .Caption for my diagram
503
+ [#{name}]
504
+ ----
505
+ #{code}
506
+ ----
507
+ eos
508
+
509
+ d = load_asciidoc doc
510
+ expect(d).to_not be_nil
511
+
512
+ b = d.find { |bl| bl.context == :image }
513
+ expect(b).to_not be_nil
514
+
515
+ expect(b.caption).to match(/Figure \d+/)
516
+ end
517
+
518
+ it 'should support scaling diagrams' do
519
+ doc = <<-eos
520
+ = Hello, #{name}!
521
+ Doc Writer <doc@example.com>
522
+
523
+ == First Section
524
+
525
+ [#{name}]
526
+ ----
527
+ #{code}
528
+ ----
529
+ eos
530
+
531
+ scaled_doc = <<-eos
532
+ = Hello, #{name}!
533
+ Doc Writer <doc@example.com>
534
+
535
+ == First Section
536
+
537
+ [#{name}, scale="1.5"]
538
+ ----
539
+ #{code}
540
+ ----
541
+ eos
542
+
543
+ d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
544
+ unscaled_image = d.find { |bl| bl.context == :image }
545
+
546
+ d = load_asciidoc scaled_doc, :attributes => {'backend' => 'html5'}
547
+ scaled_image = d.find { |bl| bl.context == :image }
548
+
549
+ expect(scaled_image.attributes['width']).to be_within(1).of(unscaled_image.attributes['width'] * 1.5)
550
+ expect(scaled_image.attributes['height']).to be_within(1).of(unscaled_image.attributes['height'] * 1.5)
551
+ end
552
+ end