-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
190 additions
and
171 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,181 +1,17 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'bidify' | ||
require 'bidify/html_string_bidifier' | ||
|
||
describe 'Bidify' do | ||
describe '#bidify' do | ||
it 'bidifies a single paragraph' do | ||
input = '<p>some text</p>' | ||
expected_output = '<p dir="auto">some text</p>' | ||
it '#bidify_html_string calls HtmlStringBidifier#apply with the given input' do | ||
input = '<p>some text</p>' | ||
|
||
actual_output = Bidify.bidify(input) | ||
html_string_bidifier = instance_spy(Bidify::HtmlStringBidifier) | ||
allow(Bidify::HtmlStringBidifier).to receive(:new).and_return(html_string_bidifier) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
Bidify.bidify_html_string(input) | ||
|
||
it 'bidifies all non-list tags in bidifiable tags list' do | ||
input = <<~HTML | ||
<div>Content</div> | ||
<h1>Content</h1> | ||
<h2>Content</h2> | ||
<h3>Content</h3> | ||
<h4>Content</h4> | ||
<h5>Content</h5> | ||
<h6>Content</h6> | ||
<p>Content</p> | ||
<blockquote>Content</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<div dir="auto">Content</div> | ||
<h1 dir="auto">Content</h1> | ||
<h2 dir="auto">Content</h2> | ||
<h3 dir="auto">Content</h3> | ||
<h4 dir="auto">Content</h4> | ||
<h5 dir="auto">Content</h5> | ||
<h6 dir="auto">Content</h6> | ||
<p dir="auto">Content</p> | ||
<blockquote dir="auto">Content</blockquote> | ||
HTML | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies non list nested elements and ignore the first inner element' do | ||
input = <<~HTML | ||
<blockquote> | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
<p>Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it "doesn't bidify li elements by default" do | ||
input = <<~HTML | ||
<ul> | ||
<li> | ||
Item 1 | ||
<p>with paragraph</p> | ||
</li> | ||
<li> | ||
<p>Paragram at the begining of</p> | ||
Item 2 | ||
</li> | ||
</ul> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<ul dir="auto"> | ||
<li> | ||
Item 1 | ||
<p dir="auto">with paragraph</p> | ||
</li> | ||
<li> | ||
<p>Paragram at the begining of</p> | ||
Item 2 | ||
</li> | ||
</ul> | ||
HTML | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies non-list nested elements with plain text as the first content' do | ||
input = <<~HTML | ||
<blockquote> | ||
blah | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
blah | ||
<p dir="auto">Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies non-list nested elements and ignores html comments' do | ||
input = <<~HTML | ||
<blockquote> | ||
<!-- comment --> | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
<!-- comment --> | ||
<p>Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'skips tags not included in bidifiable tags by default' do | ||
input = <<~HTML | ||
<span>Not getting affected</span> | ||
<img src="image.png"> | ||
<main>content</main> | ||
<section>content</section> | ||
<aside>content</aside> | ||
<a>content</a> | ||
HTML | ||
|
||
expected_output = input | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'skips blank lines' do | ||
input = <<~HTML | ||
<blockquote> | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
<p>Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = Bidify.bidify(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
expect(html_string_bidifier).to have_received(:apply).with(input) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'bidify' | ||
|
||
describe 'Bidify' do | ||
describe '::StringHtmlBidifier.apply' do | ||
let(:bidifier) { Bidify::HtmlStringBidifier.new } | ||
|
||
it 'bidifies a single paragraph' do | ||
input = '<p>some text</p>' | ||
expected_output = '<p dir="auto">some text</p>' | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies all non-list tags in bidifiable tags list' do | ||
input = <<~HTML | ||
<div>Content</div> | ||
<h1>Content</h1> | ||
<h2>Content</h2> | ||
<h3>Content</h3> | ||
<h4>Content</h4> | ||
<h5>Content</h5> | ||
<h6>Content</h6> | ||
<p>Content</p> | ||
<blockquote>Content</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<div dir="auto">Content</div> | ||
<h1 dir="auto">Content</h1> | ||
<h2 dir="auto">Content</h2> | ||
<h3 dir="auto">Content</h3> | ||
<h4 dir="auto">Content</h4> | ||
<h5 dir="auto">Content</h5> | ||
<h6 dir="auto">Content</h6> | ||
<p dir="auto">Content</p> | ||
<blockquote dir="auto">Content</blockquote> | ||
HTML | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies non list nested elements and ignore the first inner element' do | ||
input = <<~HTML | ||
<blockquote> | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
<p>Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it "doesn't bidify li elements by default" do | ||
input = <<~HTML | ||
<ul> | ||
<li> | ||
Item 1 | ||
<p>with paragraph</p> | ||
</li> | ||
<li> | ||
<p>Paragram at the begining of</p> | ||
Item 2 | ||
</li> | ||
</ul> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<ul dir="auto"> | ||
<li> | ||
Item 1 | ||
<p dir="auto">with paragraph</p> | ||
</li> | ||
<li> | ||
<p>Paragram at the begining of</p> | ||
Item 2 | ||
</li> | ||
</ul> | ||
HTML | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies non-list nested elements with plain text as the first content' do | ||
input = <<~HTML | ||
<blockquote> | ||
blah | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
blah | ||
<p dir="auto">Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'bidifies non-list nested elements and ignores html comments' do | ||
input = <<~HTML | ||
<blockquote> | ||
<!-- comment --> | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
<!-- comment --> | ||
<p>Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'skips tags not included in bidifiable tags by default' do | ||
input = <<~HTML | ||
<span>Not getting affected</span> | ||
<img src="image.png"> | ||
<main>content</main> | ||
<section>content</section> | ||
<aside>content</aside> | ||
<a>content</a> | ||
HTML | ||
|
||
expected_output = input | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
|
||
it 'skips blank lines' do | ||
input = <<~HTML | ||
<blockquote> | ||
<p>Item 1</p> | ||
<p>Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
expected_output = <<~HTML | ||
<blockquote dir="auto"> | ||
<p>Item 1</p> | ||
<p dir="auto">Item 2</p> | ||
</blockquote> | ||
HTML | ||
|
||
actual_output = bidifier.apply(input) | ||
|
||
expect(actual_output).to eq expected_output | ||
end | ||
end | ||
end |