# frozen_string_literal: true require 'rails_helper' require 'html_to_markdown' describe HtmlToMarkdown do def html_to_markdown(html, opts = {}) HtmlToMarkdown.new(html, opts).to_markdown end it "remove whitespaces" do expect(html_to_markdown(<<-HTML
Hello
})).to eq("Hello World!") end it "converts " do expect(html_to_markdown("Strong")).to eq("**Strong**") expect(html_to_markdown("Str*ng")).to eq("__Str*ng__") end it "converts " do expect(html_to_markdown("Bold")).to eq("**Bold**") expect(html_to_markdown("B*ld")).to eq("__B*ld__") html = <<~HTML World!Bold
if next character is \n" do expect(html_to_markdown("
Before
\nInside
After
" do
expect(html_to_markdown("Code
")).to eq("`Code`")
end
it "supports " do
expect(html_to_markdown("This is an insertion")).to eq("This is an insertion")
end
it "supports " do
expect(html_to_markdown("This is a deletion")).to eq("This is a deletion")
end
it "supports " do
expect(html_to_markdown("H2O")).to eq("H2O")
end
it "supports " do
expect(html_to_markdown("Super Script!")).to eq("Super Script!")
end
it "supports " do
expect(html_to_markdown("Small")).to eq("Small")
end
it "supports " do
expect(html_to_markdown("CTRL+C")).to eq("CTRL+C")
end
it "supports " do
expect(html_to_markdown(%Q{CDCK})).to eq(%Q{CDCK})
end
it "supports " do
expect(html_to_markdown("Strike Through")).to eq("Strike Through")
end
it "supports " do
expect(html_to_markdown("Strike Through")).to eq("Strike Through")
end
it "supports " do
expect(html_to_markdown("Quote
")).to eq("> Quote")
end
it "supports " do
expect(html_to_markdown("- 🍏
- 🍐
- 🍌
")).to eq("- 🍏\n- 🍐\n- 🍌")
expect(html_to_markdown("\n- 🍏
\n- 🍐
\n- 🍌
\n
")).to eq("- 🍏\n- 🍐\n- 🍌")
end
it "supports " do
expect(html_to_markdown("- 🍆
- 🍅
- 🍄
")).to eq("1. 🍆\n1. 🍅\n1. 🍄")
end
it "supports inside
- " do
expect(html_to_markdown("
🍏
🍐
🍌
")).to eq("- 🍏\n\n- 🍐\n\n- 🍌")
end
it "supports inside " do
expect(html_to_markdown(<<-HTML
- Fruits
- 🍏
- 🍐
- 🍌
- Vegetables
- 🍆
- 🍅
- 🍄
HTML
)).to eq("- Fruits\n - 🍏\n - 🍐\n - 🍌\n- Vegetables\n - 🍆\n - 🍅\n - 🍄")
end
it "supports bare - " do
expect(html_to_markdown("
- I'm alone
")).to eq("- I'm alone")
end
it "supports
" do
expect(html_to_markdown("var foo = 'bar';
")).to eq("```\nvar foo = 'bar';\n```")
expect(html_to_markdown("var foo = 'bar';
")).to eq("```\nvar foo = 'bar';\n```")
expect(html_to_markdown(%Q{var foo = 'bar';
})).to eq("```javascript\nvar foo = 'bar';\n```")
expect(html_to_markdown(" function f() {\n console.log('Hello world!');\n }
")).to eq("```\n function f() {\n console.log('Hello world!');\n }\n```")
end
it "supports inside " do
expect(html_to_markdown("var foo = 'bar';
")).to eq("> ```\n> var foo = 'bar';\n> ```")
end
it "works" do
expect(html_to_markdown("A list item with a blockquote:
This is a blockquote
inside a list item.
")).to eq("- A list item with a blockquote:\n\n > This is a **blockquote**\n > inside a list item.")
end
it "supports html document" do
expect(html_to_markdown("HelloWorld")).to eq("Hello\nWorld")
end
it "handles " do
expect(html_to_markdown("
1st paragraph
2nd paragraph
")).to eq("1st paragraph\n\n2nd paragraph")
expect(html_to_markdown("1st paragraph
\n 2nd paragraph\n 2nd paragraph
\n3rd paragraph
")).to eq("1st paragraph\n\n2nd paragraph\n2nd paragraph\n\n3rd paragraph")
end
it "handles " do
expect(html_to_markdown("1st div2nd div")).to eq("1st div\n\n2nd div")
end
it "swallows " do
expect(html_to_markdown("Span")).to eq("Span")
end
it "swallows " do
expect(html_to_markdown("Underline")).to eq("Underline")
end
it "removes ")).to eq("")
end
it "removes ")).to eq("")
end
it "handles and
within " do
html = "1st paragraph2nd paragraph3rd paragraph
"
expect(html_to_markdown(html)).to eq("1st paragraph\n2nd paragraph\n\n3rd paragraph")
end
it "handles and
within " do
html = "1st paragraph
2nd paragraph3rd paragraph4th paragraph
"
expect(html_to_markdown(html)).to eq("1st paragraph\n2nd paragraph\n3rd paragraph\n\n4th paragraph")
end
context "with an oddly placed
" do
it "handles " do
expect(html_to_markdown("
Bold")).to eq("**Bold**")
expect(html_to_markdown("Bold
")).to eq("**Bold**")
expect(html_to_markdown("Bold
text")).to eq("**Bold\ntext**")
end
it "handles " do
expect(html_to_markdown("
Italic")).to eq("*Italic*")
expect(html_to_markdown("Italic
")).to eq("*Italic*")
expect(html_to_markdown("Italic
text")).to eq("*Italic\ntext*")
end
end
context "with an empty tag" do
it "handles " do
expect(html_to_markdown("")).to eq("")
expect(html_to_markdown(" ")).to eq("")
expect(html_to_markdown("Some text")).to eq("Some text")
expect(html_to_markdown("Some text")).to eq("Some text")
end
it "handles " do
expect(html_to_markdown("")).to eq("")
expect(html_to_markdown(" ")).to eq("")
expect(html_to_markdown("Some text")).to eq("Some text")
expect(html_to_markdown("Some text")).to eq("Some text")
end
end
context "with spaces around text" do
it "handles " do
expect(html_to_markdown(" Bold")).to eq("**Bold**")
expect(html_to_markdown(" Bold")).to eq("**Bold**")
expect(html_to_markdown("Bold ")).to eq("**Bold**")
expect(html_to_markdown("Bold ")).to eq("**Bold**")
expect(html_to_markdown("Some bold text")).to eq("Some **bold** text")
expect(html_to_markdown("Some bold text")).to eq("Some **bold** text")
expect(html_to_markdown("Some bold text")).to eq("Some **bold** text")
expect(html_to_markdown("Some bold text")).to eq("Some **bold** text")
end
it "handles " do
expect(html_to_markdown(" Italic")).to eq("*Italic*")
expect(html_to_markdown(" Italic")).to eq("*Italic*")
expect(html_to_markdown("Italic ")).to eq("*Italic*")
expect(html_to_markdown("Italic ")).to eq("*Italic*")
expect(html_to_markdown("Some italic text")).to eq("Some *italic* text")
expect(html_to_markdown("Some italic text")).to eq("Some *italic* text")
expect(html_to_markdown("Some italic text")).to eq("Some *italic* text")
expect(html_to_markdown("Some italic text")).to eq("Some *italic* text")
end
end
end