jekyll-diagrams 0.9.3 → 0.10.0
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.
- checksums.yaml +4 -4
- data/features/{blockdiag.feature → blockdiag/block.feature} +2 -2
- data/features/graphviz/block.feature +26 -0
- data/features/{graphviz.feature → graphviz/config.feature} +18 -31
- data/features/{mermaid.feature → mermaid/block.feature} +2 -2
- data/features/{nomnoml.feature → nomnoml/block.feature} +2 -2
- data/features/{plantuml.feature → plantuml/block.feature} +3 -12
- data/features/{smcat.feature → smcat/block.feature} +3 -3
- data/features/step_definitions/jekyll-diagrams.rb +5 -5
- data/features/support/env.rb +3 -9
- data/features/{syntrax.feature → syntrax/block.feature} +2 -2
- data/features/{vega.feature → vega/block.feature} +3 -3
- data/features/{wavedrom.feature → wavedrom/block.feature} +2 -2
- data/lib/jekyll-diagrams.rb +22 -61
- data/lib/jekyll-diagrams/basic_block.rb +28 -0
- data/lib/jekyll-diagrams/basic_renderer.rb +38 -0
- data/lib/jekyll-diagrams/blockdiag.rb +5 -31
- data/lib/jekyll-diagrams/blockdiag/block.rb +9 -0
- data/lib/jekyll-diagrams/blockdiag/renderer.rb +40 -0
- data/lib/jekyll-diagrams/erd.rb +4 -30
- data/lib/jekyll-diagrams/erd/block.rb +8 -0
- data/lib/jekyll-diagrams/erd/renderer.rb +34 -0
- data/lib/jekyll-diagrams/errors.rb +12 -13
- data/lib/jekyll-diagrams/graphviz.rb +4 -34
- data/lib/jekyll-diagrams/graphviz/block.rb +8 -0
- data/lib/jekyll-diagrams/graphviz/renderer.rb +40 -0
- data/lib/jekyll-diagrams/mermaid.rb +4 -25
- data/lib/jekyll-diagrams/mermaid/block.rb +8 -0
- data/lib/jekyll-diagrams/mermaid/renderer.rb +29 -0
- data/lib/jekyll-diagrams/nomnoml.rb +4 -15
- data/lib/jekyll-diagrams/nomnoml/block.rb +8 -0
- data/lib/jekyll-diagrams/nomnoml/renderer.rb +19 -0
- data/lib/jekyll-diagrams/plantuml.rb +4 -19
- data/lib/jekyll-diagrams/plantuml/block.rb +8 -0
- data/lib/jekyll-diagrams/plantuml/renderer.rb +23 -0
- data/lib/jekyll-diagrams/smcat.rb +4 -26
- data/lib/jekyll-diagrams/smcat/block.rb +8 -0
- data/lib/jekyll-diagrams/smcat/renderer.rb +30 -0
- data/lib/jekyll-diagrams/svgbob.rb +4 -21
- data/lib/jekyll-diagrams/svgbob/block.rb +8 -0
- data/lib/jekyll-diagrams/svgbob/renderer.rb +25 -0
- data/lib/jekyll-diagrams/syntrax.rb +4 -23
- data/lib/jekyll-diagrams/syntrax/block.rb +8 -0
- data/lib/jekyll-diagrams/syntrax/renderer.rb +27 -0
- data/lib/jekyll-diagrams/utils.rb +85 -0
- data/lib/jekyll-diagrams/vega.rb +5 -26
- data/lib/jekyll-diagrams/vega/block.rb +9 -0
- data/lib/jekyll-diagrams/vega/renderer.rb +33 -0
- data/lib/jekyll-diagrams/version.rb +1 -1
- data/lib/jekyll-diagrams/wavedrom.rb +4 -15
- data/lib/jekyll-diagrams/wavedrom/block.rb +8 -0
- data/lib/jekyll-diagrams/wavedrom/renderer.rb +19 -0
- data/spec/basic_block_spec.rb +70 -0
- data/spec/basic_renderer_spec.rb +69 -0
- data/spec/blockdiag_renderer_spec.rb +43 -0
- data/spec/erd_renderer_spec.rb +43 -0
- data/spec/graphviz_renderer_spec.rb +19 -0
- data/spec/jekyll-diagrams_spec.rb +23 -0
- data/spec/mermaid_renderer_spec.rb +19 -0
- data/spec/nomnoml_renderer_spec.rb +19 -0
- data/spec/plantuml_renderer_spec.rb +20 -0
- data/spec/rendering_spec.rb +111 -0
- data/spec/smcat_renderer_spec.rb +19 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/svgbob_renderer_spec.rb +27 -0
- data/spec/syntrax_renderer_spec.rb +19 -0
- data/spec/utils_spec.rb +163 -0
- data/spec/vega_renderer_spec.rb +19 -0
- data/spec/wavedrom_renderer_spec.rb +19 -0
- metadata +115 -95
- data/lib/jekyll-diagrams/block.rb +0 -51
- data/test/block_test.rb +0 -6
- data/test/blockdiag_test.rb +0 -28
- data/test/erd_test.rb +0 -25
- data/test/rendering_test.rb +0 -20
- data/test/svgbob_test.rb +0 -22
- data/test/test_helper.rb +0 -22
@@ -1,21 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'wavedrom/renderer'
|
4
|
+
require_relative 'wavedrom/block'
|
5
|
+
|
3
6
|
module Jekyll
|
4
7
|
module Diagrams
|
5
|
-
|
6
|
-
def render_svg(code, config)
|
7
|
-
command = build_command(config)
|
8
|
-
|
9
|
-
render_with_tempfile(command, code) do |input, output|
|
10
|
-
"--input #{input} --svg #{output}"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def build_command(_config)
|
15
|
-
'wavedrom-cli'
|
16
|
-
end
|
17
|
-
end
|
8
|
+
Liquid::Template.register_tag(:wavedrom, WavedromBlock)
|
18
9
|
end
|
19
10
|
end
|
20
|
-
|
21
|
-
Liquid::Template.register_tag(:wavedrom, Jekyll::Diagrams::WavedromBlock)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module Diagrams
|
5
|
+
class WavedromRenderer < BasicRenderer
|
6
|
+
def render_svg(code, config)
|
7
|
+
command = build_command(config)
|
8
|
+
|
9
|
+
render_with_tempfile(command, code) do |input, output|
|
10
|
+
"--input #{input} --svg #{output}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def build_command(_config)
|
15
|
+
'wavedrom-cli'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::BasicBlock do
|
6
|
+
before do
|
7
|
+
stub_const('TestBlock', Class.new(described_class))
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '.renderer_name' do
|
11
|
+
subject { TestBlock.renderer_name }
|
12
|
+
|
13
|
+
it { is_expected.to eq 'TestRenderer' }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.renderer' do
|
17
|
+
subject { TestBlock.renderer }
|
18
|
+
|
19
|
+
context 'when the renderer is not found' do
|
20
|
+
it 'raise an renderer not found error' do
|
21
|
+
expect { TestBlock.renderer }.to raise_error(
|
22
|
+
Jekyll::Diagrams::Errors::RendererNotFoundError
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when the renderer is found' do
|
28
|
+
before { stub_const('TestRenderer', Class.new) }
|
29
|
+
|
30
|
+
it { is_expected.to be TestRenderer }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#render' do
|
35
|
+
context 'when the renderer is not found' do
|
36
|
+
it 'raise renderer not found error' do
|
37
|
+
allow(Jekyll::Diagrams::Utils).to receive(:handle_error)
|
38
|
+
|
39
|
+
Liquid::Template.register_tag(:test, TestBlock)
|
40
|
+
|
41
|
+
content = '{% test %}test{% endtest %}'
|
42
|
+
context = Liquid::Template.parse(content)
|
43
|
+
context.render(context_with_config)
|
44
|
+
|
45
|
+
expect(Jekyll::Diagrams::Utils).to have_received(:handle_error)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when the renderer is found' do
|
50
|
+
before do
|
51
|
+
renderer = Class.new do
|
52
|
+
def self.render(_context, input, _name)
|
53
|
+
input
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
stub_const('TestRenderer', renderer)
|
58
|
+
|
59
|
+
Liquid::Template.register_tag(:test, TestBlock)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'render the content with the renderer' do
|
63
|
+
content = '{% test %}test{% endtest %}'
|
64
|
+
context = Liquid::Template.parse(content)
|
65
|
+
|
66
|
+
expect(context.render(context_with_config)).to eq 'test'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::BasicRenderer do
|
6
|
+
describe '.render' do
|
7
|
+
it 'create an instance and render' do
|
8
|
+
allow(described_class).to receive_message_chain(:new, :render)
|
9
|
+
|
10
|
+
described_class.render('context', 'content', { key: 'value' })
|
11
|
+
|
12
|
+
expect(described_class).to have_received(:new).with(
|
13
|
+
'context', 'content', { key: 'value' }
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#render' do
|
19
|
+
it 'call render_svg to render' do
|
20
|
+
renderer = described_class.new('context', 'content')
|
21
|
+
|
22
|
+
allow(renderer).to receive(:render_svg)
|
23
|
+
allow(renderer).to receive(:configuration)
|
24
|
+
allow(Jekyll::Diagrams::Utils).to receive(:wrap_class)
|
25
|
+
|
26
|
+
renderer.render
|
27
|
+
|
28
|
+
expect(renderer).to have_received(:render_svg)
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when rendering successfully' do
|
32
|
+
it 'wrap the output' do
|
33
|
+
renderer = described_class.new(context_with_config, '')
|
34
|
+
|
35
|
+
allow(renderer).to receive(:render_svg)
|
36
|
+
allow(Jekyll::Diagrams::Utils).to receive(:wrap_class)
|
37
|
+
|
38
|
+
renderer.render
|
39
|
+
|
40
|
+
expect(Jekyll::Diagrams::Utils).to have_received(:wrap_class)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when rendering failed' do
|
45
|
+
it 'handle the error and wrap the return value' do
|
46
|
+
renderer = described_class.new(context_with_config, '')
|
47
|
+
|
48
|
+
allow(renderer).to receive(:render_svg).and_raise
|
49
|
+
allow(Jekyll::Diagrams::Utils).to receive(:handle_error)
|
50
|
+
allow(Jekyll::Diagrams::Utils).to receive(:wrap_class)
|
51
|
+
|
52
|
+
renderer.render
|
53
|
+
|
54
|
+
expect(Jekyll::Diagrams::Utils).to have_received(:handle_error)
|
55
|
+
expect(Jekyll::Diagrams::Utils).to have_received(:wrap_class)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#render_svg' do
|
61
|
+
it 'raise not implemented error' do
|
62
|
+
renderer = described_class.new('context', 'content')
|
63
|
+
|
64
|
+
expect do
|
65
|
+
renderer.send(:render_svg, '', '')
|
66
|
+
end.to raise_error NotImplementedError
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::BlockdiagRenderer do
|
6
|
+
subject(:renderer) do
|
7
|
+
described_class.new(Liquid::ParseContext.new, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#build_command' do
|
11
|
+
context 'when config is empty' do
|
12
|
+
let(:config) { {} }
|
13
|
+
|
14
|
+
it 'build command' do
|
15
|
+
expect(renderer.build_command(config)).to match '-T svg --nodoctype'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when switch is true' do
|
20
|
+
let(:config) { { 'antialias' => true } }
|
21
|
+
|
22
|
+
it 'build command' do
|
23
|
+
expect(renderer.build_command(config)).to match '--antialias'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when switch is false' do
|
28
|
+
let(:config) { { 'antialias' => false } }
|
29
|
+
|
30
|
+
it 'build command' do
|
31
|
+
expect(renderer.build_command(config)).not_to match '--antialias'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when options with value' do
|
36
|
+
let(:config) { { 'size' => 3 } }
|
37
|
+
|
38
|
+
it 'build command' do
|
39
|
+
expect(renderer.build_command(config)).to match '--size=3'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::ErdRenderer do
|
6
|
+
subject(:renderer) do
|
7
|
+
described_class.new(Liquid::ParseContext.new, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#build_command' do
|
11
|
+
context 'when config is empty' do
|
12
|
+
let(:config) { {} }
|
13
|
+
|
14
|
+
it 'build command' do
|
15
|
+
expect(renderer.build_command(config)).to eq 'erd --fmt=svg'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when switch is true' do
|
20
|
+
let(:config) { { 'dot-entity' => true } }
|
21
|
+
|
22
|
+
it 'build command' do
|
23
|
+
expect(renderer.build_command(config)).to match '--dot-entity'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when switch is false' do
|
28
|
+
let(:config) { { 'dot-entity' => false } }
|
29
|
+
|
30
|
+
it 'build command' do
|
31
|
+
expect(renderer.build_command(config)).not_to match '--dot-entity'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when options with value' do
|
36
|
+
let(:config) { { 'edge' => 'compound' } }
|
37
|
+
|
38
|
+
it 'build command' do
|
39
|
+
expect(renderer.build_command(config)).to match '--edge'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::GraphvizRenderer do
|
6
|
+
subject(:renderer) do
|
7
|
+
described_class.new(Liquid::ParseContext.new, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#build_command' do
|
11
|
+
context 'when config is empty' do
|
12
|
+
subject { renderer.build_command(config) }
|
13
|
+
|
14
|
+
let(:config) { {} }
|
15
|
+
|
16
|
+
it { is_expected.to eq 'dot -Tsvg' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams do
|
6
|
+
describe '.config_name' do
|
7
|
+
subject { described_class.config_name }
|
8
|
+
|
9
|
+
it { is_expected.to eq 'jekyll-diagrams' }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.logger_topic' do
|
13
|
+
subject { described_class.logger_topic }
|
14
|
+
|
15
|
+
it { is_expected.to eq 'Jekyll Diagrams:' }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.defaut_error_mode' do
|
19
|
+
subject { described_class.default_error_mode }
|
20
|
+
|
21
|
+
it { is_expected.to eq :warn }
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::MermaidRenderer do
|
6
|
+
subject(:renderer) do
|
7
|
+
described_class.new(Liquid::ParseContext.new, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#build_command' do
|
11
|
+
context 'when config is empty' do
|
12
|
+
subject { renderer.build_command(config) }
|
13
|
+
|
14
|
+
let(:config) { {} }
|
15
|
+
|
16
|
+
it { is_expected.to match 'mmdc --puppeteerConfigFile' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::NomnomlRenderer do
|
6
|
+
subject(:renderer) do
|
7
|
+
described_class.new(Liquid::ParseContext.new, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#build_command' do
|
11
|
+
context 'when config is empty' do
|
12
|
+
subject { renderer.build_command(config) }
|
13
|
+
|
14
|
+
let(:config) { {} }
|
15
|
+
|
16
|
+
it { is_expected.to eq 'nomnoml' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::PlantUMLRenderer do
|
6
|
+
subject(:renderer) do
|
7
|
+
described_class.new(Liquid::ParseContext.new, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#build_command' do
|
11
|
+
context 'when config is empty' do
|
12
|
+
subject { renderer.build_command(config) }
|
13
|
+
|
14
|
+
let(:config) { {} }
|
15
|
+
|
16
|
+
it { is_expected.to match 'plantuml' }
|
17
|
+
it { is_expected.to match '-tsvg -pipe' }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Jekyll::Diagrams::Rendering do
|
6
|
+
describe '.render_with_stdin_stdout' do
|
7
|
+
it 'call render_with_command' do
|
8
|
+
allow(described_class).to receive(:render_with_command)
|
9
|
+
|
10
|
+
described_class.render_with_stdin_stdout('command', 'content')
|
11
|
+
|
12
|
+
expect(described_class).to have_received(:render_with_command).with(
|
13
|
+
'command', :stdout, stdin_data: 'content'
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.render_with_tempfile' do
|
19
|
+
before do
|
20
|
+
allow(described_class).to receive(:render_with_command)
|
21
|
+
|
22
|
+
allow(Dir).to receive(:mktmpdir).and_yield('/tmp')
|
23
|
+
allow(File).to receive(:write)
|
24
|
+
allow(Tempfile).to receive_message_chain(:new, :close!)
|
25
|
+
allow(Tempfile).to receive_message_chain(:new, :path)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'call Dir.mktmpdir to create a direcory' do
|
29
|
+
allow(Dir).to receive(:mktmpdir)
|
30
|
+
|
31
|
+
described_class.render_with_tempfile('command', 'content')
|
32
|
+
|
33
|
+
expect(Dir).to have_received(:mktmpdir)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'call Tempfile.new twice to create temp file' do
|
37
|
+
described_class.render_with_tempfile('command', 'content') {}
|
38
|
+
|
39
|
+
expect(Tempfile).to have_received(:new).twice
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'call render_with_command' do
|
43
|
+
described_class.render_with_tempfile('command', 'content') {}
|
44
|
+
|
45
|
+
expect(described_class).to have_received(:render_with_command)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.render_with_command' do
|
50
|
+
it 'call Open3.capture3 to render' do
|
51
|
+
status = Object.new
|
52
|
+
allow(status).to receive(:success?).and_return(true)
|
53
|
+
allow(Open3).to receive(:capture3).and_return(['o', 'e', status])
|
54
|
+
|
55
|
+
described_class.render_with_command('command')
|
56
|
+
|
57
|
+
expect(Open3).to have_received(:capture3)
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'when command not found' do
|
61
|
+
it 'raise a command not found error' do
|
62
|
+
allow(Open3).to receive(:capture3).and_raise(Errno::ENOENT)
|
63
|
+
|
64
|
+
expect do
|
65
|
+
described_class.render_with_command('command_that_is_not_exist')
|
66
|
+
end.to raise_error Jekyll::Diagrams::Errors::CommandNotFoundError
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'when rendering failed' do
|
71
|
+
before do
|
72
|
+
status = Object.new
|
73
|
+
allow(status).to receive(:success?).and_return(false)
|
74
|
+
allow(Open3).to receive(:capture3).and_return(['o', 'e', status])
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'raise a rendering failed error' do
|
78
|
+
expect do
|
79
|
+
described_class.render_with_command('command_that_will_failed')
|
80
|
+
end.to raise_error Jekyll::Diagrams::Errors::RenderingFailedError
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when output is stdout' do
|
85
|
+
before do
|
86
|
+
status = Object.new
|
87
|
+
allow(status).to receive(:success?).and_return(true)
|
88
|
+
allow(Open3).to receive(:capture3).and_return(['o', 'e', status])
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'read output from stdout' do
|
92
|
+
expect(described_class.render_with_command('cmd', :stdout)).to eq 'o'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when output is a file' do
|
97
|
+
before do
|
98
|
+
status = Object.new
|
99
|
+
allow(status).to receive(:success?).and_return(true)
|
100
|
+
allow(Open3).to receive(:capture3).and_return(['o', 'e', status])
|
101
|
+
allow(File).to receive(:read)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'read output from the file' do
|
105
|
+
described_class.render_with_command('cmd', 'a_file')
|
106
|
+
|
107
|
+
expect(File).to have_received(:read).with('a_file')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|