html2bbcode 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.document +5 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +76 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/html2bbcode.gemspec +85 -0
- data/lib/bbcode/closing_tags.rb +29 -0
- data/lib/bbcode/element.rb +41 -0
- data/lib/bbcode/opening_tags.rb +42 -0
- data/lib/bbcode/rules.rb +85 -0
- data/lib/html/attributes.rb +13 -0
- data/lib/html/color.rb +43 -0
- data/lib/html/element.rb +107 -0
- data/lib/html2bbcode.rb +32 -0
- data/lib/ruby_units/definitions.rb +5 -0
- data/spec/lib/bbcode/closing_tags_spec.rb +20 -0
- data/spec/lib/bbcode/element_spec.rb +42 -0
- data/spec/lib/bbcode/opening_tags_spec.rb +63 -0
- data/spec/lib/bbcode/rules_spec.rb +167 -0
- data/spec/lib/html/attributes_spec.rb +34 -0
- data/spec/lib/html/color_spec.rb +28 -0
- data/spec/lib/html/element_spec.rb +167 -0
- data/spec/lib/html2bbcode_spec.rb +18 -0
- data/spec/lib/ruby_units/definitions_spec.rb +15 -0
- data/spec/spec_helper.rb +7 -0
- metadata +172 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Bbcode::ClosingTags do
|
4
|
+
let(:bbcode_element) { double 'bbcode element'}
|
5
|
+
subject{ described_class.new bbcode_element }
|
6
|
+
|
7
|
+
describe '#tags' do
|
8
|
+
context 'the names contain the * (li html) tag' do
|
9
|
+
before { subject.stub names: %w(*) }
|
10
|
+
|
11
|
+
its(:tags) { should eq '' }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'the names contain any other tag' do
|
15
|
+
before { subject.stub names: %w(b) }
|
16
|
+
|
17
|
+
its(:tags) { should eq '[/b]' }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Bbcode::Element do
|
4
|
+
let(:html_element) { double 'html element' }
|
5
|
+
subject { described_class.new html_element }
|
6
|
+
|
7
|
+
describe '#opening_tags' do
|
8
|
+
let(:opening_tags) { double 'opening tags', tags: %w(b) }
|
9
|
+
before { subject.stub get_opening_tags: opening_tags }
|
10
|
+
|
11
|
+
it 'delegates method to the opening tags object' do
|
12
|
+
subject.opening_tags
|
13
|
+
expect(opening_tags).to have_received :tags
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#closing_tags' do
|
18
|
+
let(:closing_tags) { double 'closing tags', tags: %w(b) }
|
19
|
+
before { subject.stub get_closing_tags: closing_tags }
|
20
|
+
|
21
|
+
it 'delegates method to the closing tags object' do
|
22
|
+
subject.closing_tags
|
23
|
+
expect(closing_tags).to have_received :tags
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#names' do
|
28
|
+
before { subject.stub name: 'a' }
|
29
|
+
|
30
|
+
its(:names) { should match_array ['a'] }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#name' do
|
34
|
+
let(:rules) { double 'rules', bbcode_name: 'b' }
|
35
|
+
before { subject.stub rules: rules }
|
36
|
+
|
37
|
+
it 'delegates method to the rules object' do
|
38
|
+
subject.name
|
39
|
+
expect(rules).to have_received :bbcode_name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Bbcode::OpeningTags do
|
4
|
+
let(:bbcode_element) { double 'bbcode element'}
|
5
|
+
subject{ described_class.new bbcode_element }
|
6
|
+
|
7
|
+
describe '#tags' do
|
8
|
+
before { subject.stub names: %w(b u) }
|
9
|
+
|
10
|
+
its(:tags) { should eq '[b][u]' }
|
11
|
+
|
12
|
+
context 'the names contain the url tag' do
|
13
|
+
let(:href) { 'www.example.com' }
|
14
|
+
before { subject.stub names: %w(url), href: href, text: text }
|
15
|
+
|
16
|
+
context 'the text is the same like the href attribute' do
|
17
|
+
let(:text) { href }
|
18
|
+
|
19
|
+
its(:tags) { should eq '[url]' }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'the text is different than the href attribute' do
|
23
|
+
let(:text) { 'A title for the link' }
|
24
|
+
|
25
|
+
its(:tags) { should eq "[url=#{href}]" }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'the names contain the size tag' do
|
30
|
+
before { subject.stub names: %w(size), font_size: 15 }
|
31
|
+
|
32
|
+
its(:tags) { should eq "[size=15]" }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'the names contain the color tag' do
|
36
|
+
before { subject.stub names: %w(color), font_color: 'blue' }
|
37
|
+
|
38
|
+
its(:tags) { should eq "[color=blue]" }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'the names contain the * (li html) tag' do
|
42
|
+
before { subject.stub names: %w(*) }
|
43
|
+
|
44
|
+
its(:tags) { should eq '[*]' }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'the names contain the list tag' do
|
48
|
+
before { subject.stub names: %w(list) }
|
49
|
+
|
50
|
+
context 'the html tag is ul' do
|
51
|
+
before { subject.stub html_name: 'ul' }
|
52
|
+
|
53
|
+
its(:tags) { should eq '[list]'}
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'the html tag is ol' do
|
57
|
+
before { subject.stub html_name: 'ol' }
|
58
|
+
|
59
|
+
its(:tags) { should eq '[list=1]'}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Bbcode::Rules do
|
4
|
+
let(:bbcode_element) { double 'bbcode elemenet' }
|
5
|
+
subject { described_class.new bbcode_element }
|
6
|
+
before { subject.stub html_name: html_name }
|
7
|
+
|
8
|
+
%w(b i u s img table tr td).each do |tag_name|
|
9
|
+
context "html element name is: #{tag_name}" do
|
10
|
+
let(:html_name) { tag_name }
|
11
|
+
|
12
|
+
its(:bbcode_name) { should eq tag_name }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'html element name is: a' do
|
17
|
+
let(:html_name) { 'a' }
|
18
|
+
before { subject.stub html_href: href }
|
19
|
+
|
20
|
+
context 'html element contains a href attribute' do
|
21
|
+
let(:href) { 'www.example.com' }
|
22
|
+
|
23
|
+
its(:bbcode_name) { should eq 'url' }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'html element does not contain a href attribute' do
|
27
|
+
let(:href) { nil }
|
28
|
+
|
29
|
+
its(:bbcode_name) { should be_nil }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'html element name is: blockquote' do
|
34
|
+
let(:html_name) { 'blockquote' }
|
35
|
+
|
36
|
+
its(:bbcode_name) { should eq 'quote' }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'html element name is: pre' do
|
40
|
+
let(:html_name) { 'pre' }
|
41
|
+
|
42
|
+
its(:bbcode_name) { should eq 'code' }
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'html element name is: strong' do
|
46
|
+
let(:html_name) { 'strong' }
|
47
|
+
|
48
|
+
its(:bbcode_name) { should eq 'b' }
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'html element name is: em' do
|
52
|
+
let(:html_name) { 'em' }
|
53
|
+
|
54
|
+
its(:bbcode_name) { should eq 'i' }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'html element name is: ins' do
|
58
|
+
let(:html_name) { 'ins' }
|
59
|
+
|
60
|
+
its(:bbcode_name) { should eq 'u' }
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'html element name is: del' do
|
64
|
+
let(:html_name) { 'del' }
|
65
|
+
|
66
|
+
its(:bbcode_name) { should eq 's' }
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'html element name is: font' do
|
70
|
+
let(:html_name) { 'font' }
|
71
|
+
|
72
|
+
before { subject.stub html_font_size: nil, html_color: nil }
|
73
|
+
|
74
|
+
its(:bbcode_name) { should be_nil }
|
75
|
+
|
76
|
+
context 'attributes contain the size' do
|
77
|
+
before { subject.stub html_font_size: '15' }
|
78
|
+
|
79
|
+
its(:bbcode_name) { should eq 'size' }
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'attributes contain the color' do
|
83
|
+
before { subject.stub html_color: 'red' }
|
84
|
+
|
85
|
+
its(:bbcode_name) { should eq 'color' }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'html element name is ul' do
|
90
|
+
let(:html_name) { 'ul' }
|
91
|
+
|
92
|
+
its(:bbcode_name) { should eq 'list' }
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'html element name is ol' do
|
96
|
+
let(:html_name) { 'ol' }
|
97
|
+
|
98
|
+
its(:bbcode_name) { should eq 'list' }
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'html element name is li' do
|
102
|
+
let(:html_name) { 'li' }
|
103
|
+
|
104
|
+
its(:bbcode_name) { should eq '*' }
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'html element name is: span' do
|
108
|
+
let(:html_name) { 'span' }
|
109
|
+
before { subject.stub(html_styles: style) }
|
110
|
+
|
111
|
+
context 'html element does not contain a style' do
|
112
|
+
let(:style) { {} }
|
113
|
+
|
114
|
+
its(:bbcode_name) { should be_empty }
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'html element contains a style' do
|
118
|
+
context 'the style is font-weight: bold' do
|
119
|
+
let(:style) { {'font-weight' => 'bold'} }
|
120
|
+
|
121
|
+
its(:bbcode_name) { should match_array %w(b) }
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'the style is text-decoration: underline' do
|
125
|
+
let(:style) { {'text-decoration' => 'underline'} }
|
126
|
+
|
127
|
+
its(:bbcode_name) { should match_array %w(u) }
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'the style is text-decoration: line-through' do
|
131
|
+
let(:style) { {'text-decoration' => 'line-through'} }
|
132
|
+
|
133
|
+
its(:bbcode_name) { should match_array %w(s) }
|
134
|
+
end
|
135
|
+
|
136
|
+
context 'the style is text-decoration: line-through' do
|
137
|
+
let(:style) { {'font-style' => 'italic'} }
|
138
|
+
|
139
|
+
its(:bbcode_name) { should match_array %w(i) }
|
140
|
+
end
|
141
|
+
|
142
|
+
context 'the style is font-size: 15px' do
|
143
|
+
let(:style) { {'font-size' => '15px'} }
|
144
|
+
|
145
|
+
its(:bbcode_name) { should match_array %w(size) }
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'the style is color: red' do
|
149
|
+
let(:style) { {'color' => 'red'} }
|
150
|
+
|
151
|
+
its(:bbcode_name) { should match_array %w(color) }
|
152
|
+
end
|
153
|
+
|
154
|
+
context 'the style are font-style: italic and font-weight: bold' do
|
155
|
+
let(:style) { {'font-style' => 'italic', 'font-weight' => 'bold'} }
|
156
|
+
|
157
|
+
its(:bbcode_name) { should match_array %w(b i) }
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'the style are font-weight: bold and margin-left: 20px' do
|
161
|
+
let(:style) { {'font-weight' => 'bold', 'margin-left' => '20px'} }
|
162
|
+
|
163
|
+
its(:bbcode_name) { should match_array %w(b) }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Html::Attributes do
|
4
|
+
describe '#has_html_attribtues' do
|
5
|
+
class Element
|
6
|
+
extend Html2Bbcode::Html::Attributes
|
7
|
+
has_html_attributes :style
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:html_element) { double 'html element' }
|
11
|
+
|
12
|
+
subject { Element.new }
|
13
|
+
|
14
|
+
before { subject.stub element: html_element }
|
15
|
+
|
16
|
+
context 'attributes does not contain given attribute' do
|
17
|
+
before { html_element.stub :[] }
|
18
|
+
|
19
|
+
its(:style) { should be_nil }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'attributes contains given attribute' do
|
23
|
+
before { html_element.stub(:[]).with('style').and_return 'color: red;' }
|
24
|
+
|
25
|
+
its(:style) { should eq 'color: red;' }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'given attribute is not defined in the html attributes' do
|
29
|
+
it 'raises an error about missing method' do
|
30
|
+
expect { subject.src }.to raise_error
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Html::Color do
|
4
|
+
let(:color) { nil }
|
5
|
+
subject { described_class.new color }
|
6
|
+
|
7
|
+
its(:get) { should be_nil }
|
8
|
+
|
9
|
+
context 'an element has a color attribute' do
|
10
|
+
context 'the color is a name of the color' do
|
11
|
+
let(:color) { 'blue' }
|
12
|
+
|
13
|
+
its(:get) { should eq color }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'the color is a hex value' do
|
17
|
+
let(:color) { '#003322' }
|
18
|
+
|
19
|
+
its(:get) { should eq color }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'the color is a rgb value' do
|
23
|
+
let(:color) { 'rgb(0, 64, 255)' }
|
24
|
+
|
25
|
+
its(:get) { should eq '#0040ff' }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode::Html::Element do
|
4
|
+
let(:nokogiri_html_element) { Nokogiri::HTML::Document.parse input_html }
|
5
|
+
let(:input_html) { 'Sample text' }
|
6
|
+
|
7
|
+
subject { described_class.new nokogiri_html_element }
|
8
|
+
|
9
|
+
it 'has the html attributes interface' do
|
10
|
+
expect(described_class).to respond_to :has_html_attributes
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'has html attributes' do
|
14
|
+
expect(subject).to respond_to :href, :src, :size, :styles, :color
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#process' do
|
18
|
+
its(:process) { should eq input_html }
|
19
|
+
|
20
|
+
context 'contains nested html tags' do
|
21
|
+
let(:input_html) { 'normal <b> bolded words <i> italic and bolded </i> bolded </b> normal' }
|
22
|
+
|
23
|
+
its(:process) { should eq 'normal [b] bolded words [i] italic and bolded [/i] bolded [/b] normal'}
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'contains the img tag' do
|
27
|
+
let(:input_html) { 'normal <img src="secret.png"></img>' }
|
28
|
+
|
29
|
+
its(:process) { should eq 'normal [img]secret.png[/img]'}
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'contains the span tag with the font size & text decoration styles' do
|
33
|
+
let(:input_html) { '<span style="font-size: 15cm; text-decoration: underline;">text 15 cm and underline</span>' }
|
34
|
+
|
35
|
+
context 'the size unit is not set' do
|
36
|
+
subject { described_class.new nokogiri_html_element }
|
37
|
+
|
38
|
+
its(:process) { should eq '[u][size=15]text 15 cm and underline[/size][/u]'}
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'the size unit is set' do
|
42
|
+
subject { described_class.new nokogiri_html_element, size_unit: 'mm' }
|
43
|
+
|
44
|
+
its(:process) { should eq '[u][size=150]text 15 cm and underline[/size][/u]'}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'contains the font tag with the color attribute & span tag with font-color style' do
|
49
|
+
let(:input_html) { '<font color="blue">blue text</font><span style="color: red;">red text</span>' }
|
50
|
+
|
51
|
+
its(:process) { should eq '[color=blue]blue text[/color][color=red]red text[/color]'}
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'contains the ordered list' do
|
55
|
+
let(:input_html) { '<ol><li>first</li> <li>second</li></ol>'}
|
56
|
+
|
57
|
+
its(:process) { should eq '[list=1][*]first [*]second[/list]'}
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'contains the unordered list' do
|
61
|
+
let(:input_html) { '<ul><li>first</li> <li>second</li></ul>'}
|
62
|
+
|
63
|
+
its(:process) { should eq '[list][*]first [*]second[/list]'}
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'contains the table' do
|
67
|
+
let(:input_html) { '<table><tr><td>date</td></tr><tr><td>second date</td></tr></table>' }
|
68
|
+
|
69
|
+
its(:process) { should eq '[table][tr][td]date[/td][/tr][tr][td]second date[/td][/tr][/table]' }
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'contains the pre tag with a content' do
|
73
|
+
let(:input_html) { '<pre><b>bolded</b></pre>' }
|
74
|
+
|
75
|
+
its(:process) { should eq '[code]<b>bolded</b>[/code]' }
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'contains the br tag' do
|
79
|
+
let(:input_html) { '<br><br/>' }
|
80
|
+
|
81
|
+
its(:process) { should eq "\n\n" }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#build_bbcode_element' do
|
86
|
+
before { subject.stub bbcode_opening_tags: '[a]', process: 'sample text', bbcode_closing_tags: '[/a]' }
|
87
|
+
|
88
|
+
its(:build_bbcode_element) { should eq '[a]sample text[/a]' }
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#to_bbcode_element' do
|
92
|
+
before { subject.stub(element?: false, text?: false) }
|
93
|
+
|
94
|
+
its(:to_bbcode_element) { should be_nil }
|
95
|
+
|
96
|
+
context 'the element name is br' do
|
97
|
+
before { subject.stub(name: 'br') }
|
98
|
+
|
99
|
+
its(:to_bbcode_element) { should eq "\n" }
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'the element is an element in the nokogiri structure' do
|
103
|
+
let(:bbcode_element) { '[b]bolded[/b]' }
|
104
|
+
before { subject.stub(element?: true, build_bbcode_element: bbcode_element) }
|
105
|
+
|
106
|
+
its(:to_bbcode_element) { should eq bbcode_element }
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'the element is a text in the nokogiri structure' do
|
110
|
+
let(:text) { 'Sample text' }
|
111
|
+
before { subject.stub(text?: true, text: text) }
|
112
|
+
|
113
|
+
its(:to_bbcode_element) { should eq text }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe '#font_color' do
|
118
|
+
let(:element_color) { double 'element color', get: 'red' }
|
119
|
+
before { subject.stub element_color: element_color }
|
120
|
+
|
121
|
+
it 'delegates the method to the color object' do
|
122
|
+
subject.font_color
|
123
|
+
expect(element_color).to have_received :get
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe '#font_size' do
|
128
|
+
before do
|
129
|
+
nokogiri_html_element.stub(:[]).with('style').and_return nil
|
130
|
+
nokogiri_html_element.stub(:[]).with('size').and_return nil
|
131
|
+
end
|
132
|
+
|
133
|
+
its(:font_size) { should be_nil }
|
134
|
+
|
135
|
+
shared_examples_for 'a size unit converter' do
|
136
|
+
context 'size unit is the same like the unit of the size attribute' do
|
137
|
+
subject { described_class.new nokogiri_html_element, size_unit: 'cm' }
|
138
|
+
|
139
|
+
its(:font_size) { should eq 15 }
|
140
|
+
end
|
141
|
+
|
142
|
+
context 'size unit is different than the unit of the size attribute' do
|
143
|
+
subject { described_class.new nokogiri_html_element, size_unit: 'mm' }
|
144
|
+
|
145
|
+
its(:font_size) { should eq 150 }
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'size unit is not set' do
|
149
|
+
subject { described_class.new nokogiri_html_element }
|
150
|
+
|
151
|
+
its(:font_size) { should eq 15 }
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context 'element has a size attribute' do
|
156
|
+
before { nokogiri_html_element.stub(:[]).with('size').and_return '15cm' }
|
157
|
+
|
158
|
+
it_behaves_like 'a size unit converter'
|
159
|
+
end
|
160
|
+
|
161
|
+
context 'element has a style about the font size' do
|
162
|
+
before { nokogiri_html_element.stub(:[]).with('style').and_return 'font-size: 15cm;' }
|
163
|
+
|
164
|
+
it_behaves_like 'a size unit converter'
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Html2Bbcode do
|
4
|
+
let(:input_html) { 'Sample text' }
|
5
|
+
|
6
|
+
subject { Html2Bbcode.new input_html }
|
7
|
+
|
8
|
+
describe '#convert' do
|
9
|
+
let(:html_element) { double 'html element', process: true }
|
10
|
+
|
11
|
+
before { subject.stub html_element: html_element }
|
12
|
+
|
13
|
+
it 'calls process on the html element' do
|
14
|
+
subject.convert
|
15
|
+
expect(html_element).to have_received :process
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'custom unit definitions' do
|
4
|
+
describe 'pixels' do
|
5
|
+
subject { Unit.new('1 px') }
|
6
|
+
|
7
|
+
it 'has the unit' do
|
8
|
+
expect { subject }.to_not raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'converts properly to the other unit' do
|
12
|
+
expect(subject.to('in')).to eq(Unit.new('1/72 in'))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|