asciidoctor-doctest 2.0.0.beta.4 → 2.0.0.beta.5
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 +5 -5
- data/CHANGELOG.adoc +58 -0
- data/LICENSE +21 -0
- data/README.adoc +310 -0
- data/asciidoctor-doctest.gemspec +48 -0
- data/data/examples/asciidoc/embedded.adoc +15 -0
- data/data/examples/asciidoc/preamble.adoc +1 -2
- data/data/examples/asciidoc/section.adoc +9 -0
- data/data/examples/asciidoc/toc.adoc +21 -9
- data/lib/asciidoctor/doctest/html/converter.rb +1 -1
- data/lib/asciidoctor/doctest/io/asciidoc.rb +2 -3
- data/lib/asciidoctor/doctest/io/base.rb +1 -1
- data/lib/asciidoctor/doctest/io/xml.rb +1 -1
- data/lib/asciidoctor/doctest/test_reporter.rb +3 -3
- data/lib/asciidoctor/doctest/version.rb +1 -1
- metadata +20 -69
- data/doc/img/doctest-diag.odf +0 -0
- data/doc/img/doctest-diag.svg +0 -56
- data/doc/img/failing-test-term.gif +0 -0
- data/features/README +0 -1
- data/features/fixtures/html-slim/Rakefile +0 -9
- data/features/fixtures/html-slim/examples/asciidoc/document.adoc +0 -4
- data/features/fixtures/html-slim/examples/asciidoc/inline_quoted.adoc +0 -2
- data/features/fixtures/html-slim/examples/asciidoc/quote.adoc +0 -12
- data/features/fixtures/html-slim/examples/html/document.html +0 -7
- data/features/fixtures/html-slim/examples/html/quote.html +0 -26
- data/features/fixtures/html-slim/templates/document.html.slim +0 -13
- data/features/fixtures/html-slim/templates/embedded.html.slim +0 -3
- data/features/fixtures/html-slim/templates/inline_quoted.html.slim +0 -8
- data/features/fixtures/html-slim/templates/paragraph.html.slim +0 -1
- data/features/fixtures/html-slim/templates/quote.html.slim +0 -7
- data/features/generator_html.feature +0 -171
- data/features/step_definitions/doctest_steps.rb +0 -5
- data/features/support/env.rb +0 -24
- data/features/test_html.feature +0 -98
- data/spec/asciidoc_converter_spec.rb +0 -64
- data/spec/example_spec.rb +0 -180
- data/spec/factory_spec.rb +0 -46
- data/spec/html/converter_spec.rb +0 -137
- data/spec/html_normalizer_spec.rb +0 -70
- data/spec/io/asciidoc_spec.rb +0 -139
- data/spec/io/xml_spec.rb +0 -141
- data/spec/minitest_diffy_spec.rb +0 -59
- data/spec/no_fallback_template_converter_spec.rb +0 -38
- data/spec/shared_examples/base_examples.rb +0 -289
- data/spec/spec_helper.rb +0 -39
- data/spec/support/matchers.rb +0 -7
- data/spec/tester_spec.rb +0 -153
@@ -1,13 +0,0 @@
|
|
1
|
-
doctype 5
|
2
|
-
html lang=(attr :lang, 'en' unless attr? :nolang)
|
3
|
-
head
|
4
|
-
meta charset='UTF-8'
|
5
|
-
title=((doctitle sanitize: true) || (attr 'untitled-label'))
|
6
|
-
body
|
7
|
-
- unless noheader && notitle
|
8
|
-
#header
|
9
|
-
h1 =header.title
|
10
|
-
- if attr? :author
|
11
|
-
.details
|
12
|
-
span#author =(attr :author)
|
13
|
-
#content =content
|
@@ -1 +0,0 @@
|
|
1
|
-
p =content
|
@@ -1,171 +0,0 @@
|
|
1
|
-
Feature: Generating output examples for a custom HTML backend
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given I do have a template-based HTML backend with DocTest
|
5
|
-
|
6
|
-
Scenario: Generate missing output examples
|
7
|
-
When I run `bundle exec rake doctest:generate`
|
8
|
-
Then the output should contain:
|
9
|
-
"""
|
10
|
-
Generating test examples *:* in examples/html
|
11
|
-
--> Skipping document:title-with-author
|
12
|
-
--> Generating inline_quoted:emphasis
|
13
|
-
--> Unchanged quote:with-id-and-role
|
14
|
-
--> Generating quote:with-title
|
15
|
-
--> Skipping quote:with-attribution
|
16
|
-
--> Unknown quote:basic, doesn't exist in input examples!
|
17
|
-
|
18
|
-
"""
|
19
|
-
And the file "examples/html/quote.html" should contain exactly:
|
20
|
-
"""
|
21
|
-
<!-- .basic
|
22
|
-
Doesn't exist in input examples.
|
23
|
-
-->
|
24
|
-
<div class="quoteblock">
|
25
|
-
<blockquote>Four score and seven years ago our fathers brought forth
|
26
|
-
on this continent a new nation…​</blockquote>
|
27
|
-
</div>
|
28
|
-
|
29
|
-
<!-- .with-id-and-role
|
30
|
-
Correct example.
|
31
|
-
-->
|
32
|
-
<div id="parking"
|
33
|
-
class="quoteblock startrek">
|
34
|
-
<blockquote>
|
35
|
-
Everybody remember
|
36
|
-
where we parked.
|
37
|
-
</blockquote>
|
38
|
-
</div>
|
39
|
-
|
40
|
-
<!-- .with-attribution
|
41
|
-
Failing example.
|
42
|
-
-->
|
43
|
-
<div class="quoteblock">
|
44
|
-
<blockquote>A person who never made a mistake <em>never</em> tried anything new.</blockquote>
|
45
|
-
<div>Albert Einstein</div>
|
46
|
-
</div>
|
47
|
-
|
48
|
-
<!-- .with-title -->
|
49
|
-
<section class="quoteblock">
|
50
|
-
<h6>After landing the cloaked Klingon bird of prey in Golden Gate park:</h6>
|
51
|
-
<blockquote>Everybody remember where we parked.</blockquote>
|
52
|
-
</section>
|
53
|
-
|
54
|
-
"""
|
55
|
-
And the file "examples/html/document.html" should contain exactly:
|
56
|
-
"""
|
57
|
-
<!-- .title-with-author
|
58
|
-
:include: .//body/div[@id="header"]
|
59
|
-
-->
|
60
|
-
<div id="header">
|
61
|
-
<h1>The Dangerous and Thrilling Documentation Chronicles</h1>
|
62
|
-
<div id="author">Kismet Rainbow Chameleon</div>
|
63
|
-
</div>
|
64
|
-
|
65
|
-
"""
|
66
|
-
And the file "examples/html/inline_quoted.html" should contain exactly:
|
67
|
-
"""
|
68
|
-
<!-- .emphasis -->
|
69
|
-
<em>chunky bacon</em>
|
70
|
-
|
71
|
-
"""
|
72
|
-
|
73
|
-
Scenario: Regenerate all outdated output examples
|
74
|
-
When I run `bundle exec rake doctest:generate FORCE=yes`
|
75
|
-
Then the output should contain:
|
76
|
-
"""
|
77
|
-
Generating test examples *:* in examples/html
|
78
|
-
--> Rewriting document:title-with-author
|
79
|
-
--> Generating inline_quoted:emphasis
|
80
|
-
--> Unchanged quote:with-id-and-role
|
81
|
-
--> Generating quote:with-title
|
82
|
-
--> Rewriting quote:with-attribution
|
83
|
-
--> Unknown quote:basic, doesn't exist in input examples!
|
84
|
-
|
85
|
-
"""
|
86
|
-
And the file "examples/html/quote.html" should contain exactly:
|
87
|
-
"""
|
88
|
-
<!-- .basic
|
89
|
-
Doesn't exist in input examples.
|
90
|
-
-->
|
91
|
-
<div class="quoteblock">
|
92
|
-
<blockquote>Four score and seven years ago our fathers brought forth
|
93
|
-
on this continent a new nation…​</blockquote>
|
94
|
-
</div>
|
95
|
-
|
96
|
-
<!-- .with-id-and-role
|
97
|
-
Correct example.
|
98
|
-
-->
|
99
|
-
<div id="parking"
|
100
|
-
class="quoteblock startrek">
|
101
|
-
<blockquote>
|
102
|
-
Everybody remember
|
103
|
-
where we parked.
|
104
|
-
</blockquote>
|
105
|
-
</div>
|
106
|
-
|
107
|
-
<!-- .with-attribution
|
108
|
-
Failing example.
|
109
|
-
-->
|
110
|
-
<div class="quoteblock">
|
111
|
-
<blockquote>A person who never made a mistake <em>never</em> tried anything new.</blockquote>
|
112
|
-
<div class="attribution">— Albert Einstein</div>
|
113
|
-
</div>
|
114
|
-
|
115
|
-
<!-- .with-title -->
|
116
|
-
<section class="quoteblock">
|
117
|
-
<h6>After landing the cloaked Klingon bird of prey in Golden Gate park:</h6>
|
118
|
-
<blockquote>Everybody remember where we parked.</blockquote>
|
119
|
-
</section>
|
120
|
-
|
121
|
-
"""
|
122
|
-
And the file "examples/html/document.html" should contain exactly:
|
123
|
-
"""
|
124
|
-
<!-- .title-with-author
|
125
|
-
:include: .//body/div[@id="header"]
|
126
|
-
-->
|
127
|
-
<div id="header">
|
128
|
-
<h1>The Dangerous and Thrilling Documentation Chronicles</h1>
|
129
|
-
<div class="details"><span id="author">Kismet Rainbow Chameleon</span></div>
|
130
|
-
</div>
|
131
|
-
|
132
|
-
"""
|
133
|
-
|
134
|
-
Scenario: Regenerate outdated output examples specified by filter
|
135
|
-
When I run `bundle exec rake doctest:generate PATTERN="*:*attribution" FORCE=yes`
|
136
|
-
Then the output should contain:
|
137
|
-
"""
|
138
|
-
Generating test examples *:*attribution in examples/html
|
139
|
-
--> Rewriting quote:with-attribution
|
140
|
-
|
141
|
-
"""
|
142
|
-
And the file "examples/html/quote.html" should contain exactly:
|
143
|
-
"""
|
144
|
-
<!-- .basic
|
145
|
-
Doesn't exist in input examples.
|
146
|
-
-->
|
147
|
-
<div class="quoteblock">
|
148
|
-
<blockquote>Four score and seven years ago our fathers brought forth
|
149
|
-
on this continent a new nation…​</blockquote>
|
150
|
-
</div>
|
151
|
-
|
152
|
-
<!-- .with-id-and-role
|
153
|
-
Correct example.
|
154
|
-
-->
|
155
|
-
<div id="parking"
|
156
|
-
class="quoteblock startrek">
|
157
|
-
<blockquote>
|
158
|
-
Everybody remember
|
159
|
-
where we parked.
|
160
|
-
</blockquote>
|
161
|
-
</div>
|
162
|
-
|
163
|
-
<!-- .with-attribution
|
164
|
-
Failing example.
|
165
|
-
-->
|
166
|
-
<div class="quoteblock">
|
167
|
-
<blockquote>A person who never made a mistake <em>never</em> tried anything new.</blockquote>
|
168
|
-
<div class="attribution">— Albert Einstein</div>
|
169
|
-
</div>
|
170
|
-
|
171
|
-
"""
|
data/features/support/env.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'aruba'
|
2
|
-
require 'aruba/cucumber'
|
3
|
-
require 'asciidoctor/doctest'
|
4
|
-
require 'fileutils'
|
5
|
-
require 'rspec/expectations'
|
6
|
-
|
7
|
-
Dir["#{__dir__}/../step_definitions/**/*.rb"].each { |file| require file }
|
8
|
-
|
9
|
-
PROJECT_DIR = File.expand_path('../../', __dir__)
|
10
|
-
FIXTURES_DIR = File.expand_path('../fixtures', __dir__)
|
11
|
-
TEMP_DIR = File.join(PROJECT_DIR, 'tmp/aruba')
|
12
|
-
|
13
|
-
Before do
|
14
|
-
FileUtils.mkdir_p TEMP_DIR
|
15
|
-
# overwrite Aruba's default temp directory location
|
16
|
-
@dirs = [TEMP_DIR]
|
17
|
-
|
18
|
-
# Increase timeout for JRuby, that is very slooow...
|
19
|
-
@aruba_timeout_seconds = 50
|
20
|
-
end
|
21
|
-
|
22
|
-
After do
|
23
|
-
FileUtils.rm_rf(TEMP_DIR) if Dir.exist? TEMP_DIR
|
24
|
-
end
|
data/features/test_html.feature
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
Feature: Testing a custom HTML backend
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given I do have a template-based HTML backend with DocTest
|
5
|
-
|
6
|
-
Scenario: Some examples do not match the expected output
|
7
|
-
When I run `bundle exec rake doctest:test`
|
8
|
-
Then the output should contain:
|
9
|
-
"""
|
10
|
-
Running DocTest for the templates: templates.
|
11
|
-
|
12
|
-
FS.SF
|
13
|
-
"""
|
14
|
-
Then the output should contain:
|
15
|
-
"""
|
16
|
-
✗ Failure: quote:with-attribution
|
17
|
-
Failing example..
|
18
|
-
|
19
|
-
<div class="quoteblock">
|
20
|
-
<blockquote>A person who never made a mistake <em>never</em> tried anything new.</blockquote>
|
21
|
-
E <div>Albert Einstein</div>
|
22
|
-
A <div class="attribution">— Albert Einstein</div>
|
23
|
-
</div>
|
24
|
-
"""
|
25
|
-
And the output should contain:
|
26
|
-
"""
|
27
|
-
✗ Failure: document:title-with-author
|
28
|
-
This example should fail..
|
29
|
-
|
30
|
-
<div id="header">
|
31
|
-
<h1>The Dangerous and Thrilling Documentation Chronicles</h1>
|
32
|
-
E <div id="author">Kismet Rainbow Chameleon</div>
|
33
|
-
A <div class="details"><span id="author">Kismet Rainbow Chameleon</span></div>
|
34
|
-
</div>
|
35
|
-
"""
|
36
|
-
And the output should contain:
|
37
|
-
"""
|
38
|
-
5 examples (1 passed, 2 failed, 2 skipped)
|
39
|
-
"""
|
40
|
-
And the output should contain:
|
41
|
-
"""
|
42
|
-
You have skipped tests. Run with VERBOSE=yes for details.
|
43
|
-
"""
|
44
|
-
|
45
|
-
When I run `bundle exec rake doctest:test VERBOSE=yes`
|
46
|
-
Then the output should contain:
|
47
|
-
"""
|
48
|
-
Running DocTest for the templates: templates.
|
49
|
-
|
50
|
-
✗ document:title-with-author
|
51
|
-
∅ inline_quoted:emphasis
|
52
|
-
✓ quote:with-id-and-role
|
53
|
-
∅ quote:with-title
|
54
|
-
✗ quote:with-attribution
|
55
|
-
|
56
|
-
"""
|
57
|
-
And the output should contain:
|
58
|
-
"""
|
59
|
-
∅ Skipped: quote:with-title
|
60
|
-
No expected output found
|
61
|
-
"""
|
62
|
-
And the output should contain:
|
63
|
-
"""
|
64
|
-
∅ Skipped: inline_quoted:emphasis
|
65
|
-
No expected output found
|
66
|
-
"""
|
67
|
-
|
68
|
-
Scenario: Test only examples matching the pattern
|
69
|
-
When I run `bundle exec rake doctest:test PATTERN=quot*:* VERBOSE=yes`
|
70
|
-
Then the output should contain:
|
71
|
-
"""
|
72
|
-
Running DocTest for the templates: templates.
|
73
|
-
|
74
|
-
✓ quote:with-id-and-role
|
75
|
-
∅ quote:with-title
|
76
|
-
✗ quote:with-attribution
|
77
|
-
|
78
|
-
"""
|
79
|
-
|
80
|
-
Scenario: A necessary template is missing and fallback to the built-in converter is disabled
|
81
|
-
When I remove the file "templates/inline_quoted.html.slim"
|
82
|
-
And I run `bundle exec rake doctest:test`
|
83
|
-
Then the output should contain:
|
84
|
-
"""
|
85
|
-
Could not find a custom template to handle template_name: inline_quoted
|
86
|
-
"""
|
87
|
-
And the output should contain:
|
88
|
-
"""
|
89
|
-
✗ Failure: quote:with-attribution
|
90
|
-
Failing example..
|
91
|
-
|
92
|
-
<div class="quoteblock">
|
93
|
-
E <blockquote>A person who never made a mistake <em>never</em> tried anything new.</blockquote>
|
94
|
-
E <div>Albert Einstein</div>
|
95
|
-
A <blockquote>A person who never made a mistake --TEMPLATE NOT FOUND-- tried anything new.</blockquote>
|
96
|
-
A <div class="attribution">— Albert Einstein</div>
|
97
|
-
</div>
|
98
|
-
"""
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
describe DocTest::AsciidocConverter do
|
4
|
-
|
5
|
-
subject { described_class }
|
6
|
-
|
7
|
-
it { is_expected.to have_method :convert, :call }
|
8
|
-
|
9
|
-
|
10
|
-
describe '#initialize' do
|
11
|
-
|
12
|
-
context 'with defaults' do
|
13
|
-
subject { described_class.new.opts }
|
14
|
-
it { is_expected.to include safe: :safe }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with backend_name' do
|
18
|
-
subject { described_class.new(backend_name: 'html5').opts }
|
19
|
-
it { is_expected.to include backend: 'html5' }
|
20
|
-
|
21
|
-
context 'empty string' do
|
22
|
-
subject { described_class.new(backend_name: '').opts }
|
23
|
-
it { is_expected.to_not include :backend }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'with template_dirs' do
|
28
|
-
include FakeFS::SpecHelpers
|
29
|
-
|
30
|
-
subject { described_class.new(template_dirs: template_dirs).opts }
|
31
|
-
let(:template_dirs) { ['/tmp/html5'] }
|
32
|
-
|
33
|
-
before { FileUtils.mkpath template_dirs[0] }
|
34
|
-
|
35
|
-
context 'that exists' do
|
36
|
-
it do
|
37
|
-
is_expected.to include(
|
38
|
-
template_dirs: template_dirs,
|
39
|
-
converter: DocTest::NoFallbackTemplateConverter
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'and templates_fallback is true' do
|
44
|
-
subject { described_class.new(template_dirs: template_dirs, templates_fallback: true).opts }
|
45
|
-
it { is_expected.to include template_dirs: template_dirs }
|
46
|
-
it { is_expected.to_not include :converter }
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'and custom converter' do
|
50
|
-
subject { described_class.new(template_dirs: template_dirs, converter: converter).opts }
|
51
|
-
let(:converter) { Asciidoctor::Converter::TemplateConverter }
|
52
|
-
|
53
|
-
it { is_expected.to include template_dirs: template_dirs, converter: converter }
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "that doesn't exist" do
|
58
|
-
let(:template_dirs) { ['/tmp/html5', '/tmp/revealjs'] }
|
59
|
-
|
60
|
-
it { expect { subject }.to raise_error ArgumentError }
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/spec/example_spec.rb
DELETED
@@ -1,180 +0,0 @@
|
|
1
|
-
describe DocTest::Example do
|
2
|
-
|
3
|
-
subject(:o) { described_class.new ['foo', 'bar'] }
|
4
|
-
|
5
|
-
it do
|
6
|
-
is_expected.to respond_to :group_name, :local_name, :desc, :opts, :content
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#name' do
|
10
|
-
|
11
|
-
it 'returns #{group_name}:#{local_name}' do
|
12
|
-
o.group_name = 'block_olist'
|
13
|
-
o.local_name = 'with-start'
|
14
|
-
|
15
|
-
expect(o.name).to eq "#{o.group_name}:#{o.local_name}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#name=' do
|
20
|
-
|
21
|
-
shared_examples :example do
|
22
|
-
it 'sets group_name and local_name' do
|
23
|
-
is_expected.to have_attributes group_name: 'section', local_name: 'basic'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'with String' do
|
28
|
-
before { o.name = 'section:basic' }
|
29
|
-
include_examples :example
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'with Array' do
|
33
|
-
before { o.name = ['section', 'basic'] }
|
34
|
-
include_examples :example
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '#name_match?' do
|
39
|
-
name = 'block_ulist:with-title'
|
40
|
-
|
41
|
-
context "when name is e.g. #{name}" do
|
42
|
-
subject(:o) { described_class.new(name) }
|
43
|
-
|
44
|
-
[ '*', '*:*', 'block_ulist:*', '*:with-title', 'block_*:*',
|
45
|
-
'block_ulist:with-*', 'block_ulist:*title'
|
46
|
-
].each do |pattern|
|
47
|
-
it "returns true for #{pattern}" do
|
48
|
-
expect(o.name_match?(pattern)).to be_truthy
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
[ 'block_foo:with-title', 'block_ulist:foo', 'foo:*' '*:foo', 'foo'
|
53
|
-
].each do |pattern|
|
54
|
-
it "returns false for #{pattern}" do
|
55
|
-
expect(o.name_match?(pattern)).to be_falsy
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '#empty?' do
|
62
|
-
subject { o.empty? }
|
63
|
-
|
64
|
-
context 'when content is nil' do
|
65
|
-
before { o.content = nil }
|
66
|
-
it { is_expected.to be_truthy }
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'when content is blank' do
|
70
|
-
before { o.content = ' ' }
|
71
|
-
it { is_expected.to be_truthy }
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'when content is not blank' do
|
75
|
-
before { o.content = 'allons-y!' }
|
76
|
-
it { is_expected.to be_falsy }
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe '#[]' do
|
81
|
-
|
82
|
-
context 'when option exists' do
|
83
|
-
it 'returns the option value' do
|
84
|
-
o.opts[:foo] = 'bar'
|
85
|
-
expect(o['foo']).to eq 'bar'
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'when option does not exist' do
|
90
|
-
it 'returns nil' do
|
91
|
-
expect(o[:nothing]).to be_nil
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe '#[]=' do
|
97
|
-
subject { o.opts }
|
98
|
-
|
99
|
-
context 'with boolean value' do
|
100
|
-
[true, false].each do |value|
|
101
|
-
it "associates the option with #{value}" do
|
102
|
-
o['foo'] = value
|
103
|
-
is_expected.to eq(foo: value)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'with Array value' do
|
109
|
-
it 'associates the option with the value' do
|
110
|
-
o['foo'] = ['a', 'b']
|
111
|
-
is_expected.to eq(foo: ['a', 'b'])
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context 'with String value' do
|
116
|
-
|
117
|
-
context 'when option is not defined' do
|
118
|
-
it 'associates the option with the value wrapped in an array' do
|
119
|
-
o['key'] = 'foo'
|
120
|
-
is_expected.to eq(key: ['foo'])
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
context 'when option is already defined' do
|
125
|
-
before { o.opts[:key] = ['foo'] }
|
126
|
-
|
127
|
-
it 'adds the value to array associated with the option' do
|
128
|
-
o[:key] = 'bar'
|
129
|
-
is_expected.to eq(key: ['foo', 'bar'])
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
context 'with nil value' do
|
135
|
-
before { o.opts[:key] = ['foo'] }
|
136
|
-
|
137
|
-
it 'deletes the option' do
|
138
|
-
o[:key] = nil
|
139
|
-
is_expected.to be_empty
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
describe '#==' do
|
145
|
-
|
146
|
-
let(:first) { described_class.new('a:b', content: 'allons-y!') }
|
147
|
-
let(:second) { described_class.new('a:b', content: 'allons-y!') }
|
148
|
-
|
149
|
-
it 'returns true for different instances with the same name and content' do
|
150
|
-
expect(first).to eq second
|
151
|
-
end
|
152
|
-
|
153
|
-
it 'returns false for instances with different name' do
|
154
|
-
second.name = 'a:x'
|
155
|
-
expect(first).to_not eq second
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'returns false for instances with different content' do
|
159
|
-
expect(second).to receive(:content).and_return('ALLONS-Y!')
|
160
|
-
expect(first).to_not eq second
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe '#dup' do
|
165
|
-
using Corefines::Object::instance_values
|
166
|
-
|
167
|
-
it 'returns deep copy' do
|
168
|
-
origo = described_class.new('a:b', content: 'allons-y!', desc: 'who?', opts: {key: ['value']})
|
169
|
-
copy = origo.dup
|
170
|
-
|
171
|
-
expect(origo).to eql copy
|
172
|
-
expect(origo).to_not equal copy
|
173
|
-
|
174
|
-
origo.instance_values.values.zip(copy.instance_values.values).each do |val1, val2|
|
175
|
-
expect(val1).to_not equal val2 unless val1.nil? && val2.nil?
|
176
|
-
end
|
177
|
-
expect(origo.opts[:key].first).to_not equal copy.opts[:key].first
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|