mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 16:21:18 +08:00
DEV: Apply syntax_tree formatting to spec/*
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'plain_text_to_markdown'
|
||||
require "plain_text_to_markdown"
|
||||
|
||||
RSpec.describe PlainTextToMarkdown do
|
||||
def to_markdown(text, opts = {})
|
||||
@ -50,30 +50,37 @@ RSpec.describe PlainTextToMarkdown do
|
||||
describe "special characters" do
|
||||
it "escapes special Markdown characters" do
|
||||
expect(to_markdown('\ backslash')).to eq('\\\\ backslash')
|
||||
expect(to_markdown('` backtick')).to eq('\` backtick')
|
||||
expect(to_markdown('* asterisk')).to eq('\* asterisk')
|
||||
expect(to_markdown('_ underscore')).to eq('\_ underscore')
|
||||
expect(to_markdown('{} curly braces')).to eq('\{\} curly braces')
|
||||
expect(to_markdown('[] square brackets')).to eq('\[\] square brackets')
|
||||
expect(to_markdown('() parentheses')).to eq('\(\) parentheses')
|
||||
expect(to_markdown('# hash mark')).to eq('\# hash mark')
|
||||
expect(to_markdown('+ plus sign')).to eq('\+ plus sign')
|
||||
expect(to_markdown('- minus sign')).to eq('\- minus sign')
|
||||
expect(to_markdown('. dot')).to eq('\. dot')
|
||||
expect(to_markdown('! exclamation mark')).to eq('\! exclamation mark')
|
||||
expect(to_markdown('~ tilde')).to eq('\~ tilde')
|
||||
expect(to_markdown("` backtick")).to eq('\` backtick')
|
||||
expect(to_markdown("* asterisk")).to eq('\* asterisk')
|
||||
expect(to_markdown("_ underscore")).to eq('\_ underscore')
|
||||
expect(to_markdown("{} curly braces")).to eq('\{\} curly braces')
|
||||
expect(to_markdown("[] square brackets")).to eq('\[\] square brackets')
|
||||
expect(to_markdown("() parentheses")).to eq('\(\) parentheses')
|
||||
expect(to_markdown("# hash mark")).to eq('\# hash mark')
|
||||
expect(to_markdown("+ plus sign")).to eq('\+ plus sign')
|
||||
expect(to_markdown("- minus sign")).to eq('\- minus sign')
|
||||
expect(to_markdown(". dot")).to eq('\. dot')
|
||||
expect(to_markdown("! exclamation mark")).to eq('\! exclamation mark')
|
||||
expect(to_markdown("~ tilde")).to eq('\~ tilde')
|
||||
end
|
||||
|
||||
it "escapes special HTML characters" do
|
||||
expect(to_markdown("' single quote")).to eq("' single quote")
|
||||
expect(to_markdown("\" double quote")).to eq("" double quote")
|
||||
expect(to_markdown("& ampersand")).to eq("& ampersand")
|
||||
expect(to_markdown("<> less-than and greater-than sign")).to eq("<> less\\-than and greater\\-than sign")
|
||||
expect(to_markdown("<> less-than and greater-than sign")).to eq(
|
||||
"<> less\\-than and greater\\-than sign",
|
||||
)
|
||||
end
|
||||
|
||||
it "escapes special characters but ignores links" do
|
||||
expect(to_markdown("*some text* https://www.example.com/foo.html?a=1&b=0 & <https://www.example.com/bar.html?a=1&b=0> *more text*"))
|
||||
.to eq("\\*some text\\* https://www.example.com/foo.html?a=1&b=0 & <https://www.example.com/bar.html?a=1&b=0> \\*more text\\*")
|
||||
expect(
|
||||
to_markdown(
|
||||
"*some text* https://www.example.com/foo.html?a=1&b=0 & <https://www.example.com/bar.html?a=1&b=0> *more text*",
|
||||
),
|
||||
).to eq(
|
||||
"\\*some text\\* https://www.example.com/foo.html?a=1&b=0 & <https://www.example.com/bar.html?a=1&b=0> \\*more text\\*",
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@ -108,29 +115,37 @@ RSpec.describe PlainTextToMarkdown do
|
||||
|
||||
describe "format=flowed" do
|
||||
it "concats lines ending with a space" do
|
||||
text = "Lorem ipsum dolor sit amet, consectetur \nadipiscing elit. Quasi vero, inquit, \nperpetua oratio rhetorum solum, non \netiam philosophorum sit."
|
||||
markdown = "Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit\\."
|
||||
text =
|
||||
"Lorem ipsum dolor sit amet, consectetur \nadipiscing elit. Quasi vero, inquit, \nperpetua oratio rhetorum solum, non \netiam philosophorum sit."
|
||||
markdown =
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit\\."
|
||||
|
||||
expect(to_markdown(text, format_flowed: true)).to eq(markdown)
|
||||
end
|
||||
|
||||
it "does not concat lines when there is an empty line between" do
|
||||
text = "Lorem ipsum dolor sit amet, consectetur \nadipiscing elit. \n\nQuasi vero, inquit, \nperpetua oratio rhetorum solum, non \netiam philosophorum sit."
|
||||
markdown = "Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. \n\nQuasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit\\."
|
||||
text =
|
||||
"Lorem ipsum dolor sit amet, consectetur \nadipiscing elit. \n\nQuasi vero, inquit, \nperpetua oratio rhetorum solum, non \netiam philosophorum sit."
|
||||
markdown =
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. \n\nQuasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit\\."
|
||||
|
||||
expect(to_markdown(text, format_flowed: true)).to eq(markdown)
|
||||
end
|
||||
|
||||
it "concats quoted lines ending with a space" do
|
||||
text = "> Lorem ipsum dolor sit amet, consectetur \n> adipiscing elit. Quasi vero, inquit, \n> perpetua oratio rhetorum solum, non \n> etiam philosophorum sit."
|
||||
markdown = "> Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit\\."
|
||||
text =
|
||||
"> Lorem ipsum dolor sit amet, consectetur \n> adipiscing elit. Quasi vero, inquit, \n> perpetua oratio rhetorum solum, non \n> etiam philosophorum sit."
|
||||
markdown =
|
||||
"> Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit\\."
|
||||
|
||||
expect(to_markdown(text, format_flowed: true)).to eq(markdown)
|
||||
end
|
||||
|
||||
it "does not concat quoted lines ending with a space when the quote level differs" do
|
||||
text = "> Lorem ipsum dolor sit amet, consectetur \n> adipiscing elit. \n>> Quasi vero, inquit, \n>> perpetua oratio rhetorum solum, non \n> etiam philosophorum sit."
|
||||
markdown = "> Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. \n>> Quasi vero, inquit, perpetua oratio rhetorum solum, non \n>\n> etiam philosophorum sit\\."
|
||||
text =
|
||||
"> Lorem ipsum dolor sit amet, consectetur \n> adipiscing elit. \n>> Quasi vero, inquit, \n>> perpetua oratio rhetorum solum, non \n> etiam philosophorum sit."
|
||||
markdown =
|
||||
"> Lorem ipsum dolor sit amet, consectetur adipiscing elit\\. \n>> Quasi vero, inquit, perpetua oratio rhetorum solum, non \n>\n> etiam philosophorum sit\\."
|
||||
|
||||
expect(to_markdown(text, format_flowed: true)).to eq(markdown)
|
||||
end
|
||||
@ -159,29 +174,36 @@ RSpec.describe PlainTextToMarkdown do
|
||||
|
||||
describe "links" do
|
||||
it "removes duplicate links" do
|
||||
expect(to_markdown("foo https://www.example.com/foo.html?a=1 <https://www.example.com/foo.html?a=1> bar"))
|
||||
.to eq("foo https://www.example.com/foo.html?a=1 bar")
|
||||
expect(
|
||||
to_markdown(
|
||||
"foo https://www.example.com/foo.html?a=1 <https://www.example.com/foo.html?a=1> bar",
|
||||
),
|
||||
).to eq("foo https://www.example.com/foo.html?a=1 bar")
|
||||
|
||||
expect(to_markdown("foo https://www.example.com/foo.html <https://www.example.com/foo.html> bar"))
|
||||
.to eq("foo https://www.example.com/foo.html bar")
|
||||
expect(
|
||||
to_markdown("foo https://www.example.com/foo.html <https://www.example.com/foo.html> bar"),
|
||||
).to eq("foo https://www.example.com/foo.html bar")
|
||||
|
||||
expect(to_markdown("foo https://www.example.com/foo.html (https://www.example.com/foo.html) bar"))
|
||||
.to eq("foo https://www.example.com/foo.html bar")
|
||||
expect(
|
||||
to_markdown("foo https://www.example.com/foo.html (https://www.example.com/foo.html) bar"),
|
||||
).to eq("foo https://www.example.com/foo.html bar")
|
||||
|
||||
expect(to_markdown("foo https://www.example.com/foo.html https://www.example.com/foo.html bar"))
|
||||
.to eq("foo https://www.example.com/foo.html bar")
|
||||
expect(
|
||||
to_markdown("foo https://www.example.com/foo.html https://www.example.com/foo.html bar"),
|
||||
).to eq("foo https://www.example.com/foo.html bar")
|
||||
end
|
||||
|
||||
it "does not removes duplicate links when there is text between the links" do
|
||||
expect(to_markdown("foo https://www.example.com/foo.html bar https://www.example.com/foo.html baz"))
|
||||
.to eq("foo https://www.example.com/foo.html bar https://www.example.com/foo.html baz")
|
||||
expect(
|
||||
to_markdown(
|
||||
"foo https://www.example.com/foo.html bar https://www.example.com/foo.html baz",
|
||||
),
|
||||
).to eq("foo https://www.example.com/foo.html bar https://www.example.com/foo.html baz")
|
||||
end
|
||||
|
||||
it "does not explode with weird links" do
|
||||
expect {
|
||||
Timeout::timeout(0.25) {
|
||||
to_markdown("https://www.discourse.org/?boom=#{"." * 20}")
|
||||
}
|
||||
Timeout.timeout(0.25) { to_markdown("https://www.discourse.org/?boom=#{"." * 20}") }
|
||||
}.not_to raise_error
|
||||
end
|
||||
end
|
||||
@ -192,7 +214,9 @@ RSpec.describe PlainTextToMarkdown do
|
||||
end
|
||||
|
||||
it "does not detect Markdown code block when backticks are not on new line" do
|
||||
expect(to_markdown("foo\n```\n<this is code> ```")).to eq("foo\n\\`\\`\\`\n<this is code> \\`\\`\\`")
|
||||
expect(to_markdown("foo\n```\n<this is code> ```")).to eq(
|
||||
"foo\n\\`\\`\\`\n<this is code> \\`\\`\\`",
|
||||
)
|
||||
end
|
||||
|
||||
it "does not detect Markdown code block when backticks are indented by more than 3 whitespaces" do
|
||||
@ -203,7 +227,9 @@ RSpec.describe PlainTextToMarkdown do
|
||||
expect(to_markdown("foo\n```\n<this is code>\n ```")).to include("<this is code>")
|
||||
|
||||
expect(to_markdown("foo\n ```\n<this is code>\n```")).to include("<this is code>")
|
||||
expect(to_markdown("foo\n```\n<this is code>\n ```")).to include("<this is code>")
|
||||
expect(to_markdown("foo\n```\n<this is code>\n ```")).to include(
|
||||
"<this is code>",
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user