Page MenuHomePhorge

No OneTemporary

Size
12 KB
Referenced Files
None
Subscribers
None
diff --git a/test/bbcode/generator_test.exs b/test/bbcode/generator_test.exs
index 903531e..52ca657 100644
--- a/test/bbcode/generator_test.exs
+++ b/test/bbcode/generator_test.exs
@@ -1,175 +1,192 @@
# SPDX-FileCopyrightText: 2019-2022 Pleroma Authors
# SPDX-License-Identifier: LGPL-3.0-only
defmodule BBCode.Generator.Test do
use ExUnit.Case
describe "simple tags" do
test "[b] tags are translated to <strong>" do
assert {:ok, "<strong>testing</strong>"} = BBCode.to_html("[b]testing[/b]")
end
test "[i] tags are translated to <em>" do
assert {:ok, "<em>testing</em>"} = BBCode.to_html("[i]testing[/i]")
end
test "[u] tags are translated to <u>" do
assert {:ok, "<u>testing</u>"} = BBCode.to_html("[u]testing[/u]")
end
test "[s] tags are translated to <del>" do
assert {:ok, "<del>testing</del>"} = BBCode.to_html("[s]testing[/s]")
end
test "[code] tags are translated to <pre>" do
assert {:ok, "<pre>testing</pre>"} = BBCode.to_html("[code]testing[/code]")
end
test "[quote] tags are translated to <blockquote>" do
assert {:ok, "<blockquote>testing</blockquote>"} = BBCode.to_html("[quote]testing[/quote]")
end
test "compounding simple tags works as expected" do
assert {:ok, "<strong><em>testing</em></strong>"} = BBCode.to_html("[b][i]testing[/i][/b]")
end
test "[ruby] tags are translated to ruby-text" do
assert {:ok, "<ruby>X<rp>(</rp><rt>eks</rt><rp>)</rp></ruby>"} =
BBCode.to_html("[ruby=eks]X[/ruby]")
end
-
- test "it continues when unknown tag is encountered" do
- assert {:ok, "<pre>[asdf] valid input</pre> and <strong>bold</strong> text"} =
- BBCode.to_html("[code][asdf] valid input[/code] and [b]bold[/b] text")
- end
-
- test "it continues when stray brackets are encountered" do
- assert {:ok, "<pre> a[ b] [ ] [] valid input</pre> and <strong>bold</strong> text"} =
- BBCode.to_html("[code] a[ b] [ ] [] valid input[/code] and [b]bold[/b] text")
- end
end
describe "lists" do
test "[ul] lists are rendered properly" do
data = """
[ul]
[*]a
[*]b
[*]c
[/ul]
"""
expected = "<ul><li>a</li><li>b</li><li>c</li></ul>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
test "[ol] lists are rendered properly" do
data = """
[ol]
[*]a
[*]b
[*]c
[/ol]
"""
expected = "<ol><li>a</li><li>b</li><li>c</li></ol>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
end
describe "tables" do
test "[table] tables are rendered properly" do
data = """
[table]
[tr]
[th]header[/th]
[/tr]
[tr]
[td]cell[/td]
[/tr]
[/table]
"""
expected = "<table><tr><th>header</th></tr><tr><td>cell</td></tr></table>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
end
describe "links" do
test "bare [url] links are rendered properly" do
data = """
[url]http://example.com[/url]
"""
expected = "<a href=\"http://example.com\">http://example.com</a><br>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
test "named [url] links are rendered properly" do
data = """
[url=http://example.com]Example[/url]
"""
expected = "<a href=\"http://example.com\">Example</a><br>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
end
describe "images" do
test "bare [img] links are rendered properly" do
data = """
[img]http://example.com/image.jpg[/img]
"""
expected = "<img src=\"http://example.com/image.jpg\"><br>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
test "sized [img] links are rendered properly" do
data = """
[img=32x32]http://example.com/image.jpg[/img]
"""
expected = "<img src=\"http://example.com/image.jpg\" width=\"32\" height=\"32\"><br>"
assert {:ok, ^expected} = BBCode.to_html(data)
end
end
describe "documents" do
test "it correctly renders a complex document" do
data = """
[quote]
A multiline quote.
This is the second line.
[/quote]
[ul]
[*]a
[*]b
[*]c
[/ul]
[b]bold[/b]
[i]italic[/i]
[u]underline[/u]
[s]strikethrough[/s]
[url=http://example.com]a link[/url]
@kaniini (a mention)
+
+ [code]
+ [lain@navi ~/.local/src/git/bbcode]$ hacking on the [b]BBCode[/b] parser using [asdf]as the version manager[/asdf]
+ [/code]
"""
{:ok, output} = BBCode.to_html(data)
assert output ==
- "<blockquote>A multiline quote.<br>This is the second line.<br></blockquote><ul><li>a</li><li>b</li><li>c</li></ul><strong>bold</strong><br><em>italic</em><br><u>underline</u><br><del>strikethrough</del><br><br><a href=\"http://example.com\">a link</a><br><br>@kaniini (a mention)<br>"
+ "<blockquote>A multiline quote.<br>This is the second line.<br></blockquote><ul><li>a</li><li>b</li><li>c</li></ul><strong>bold</strong><br><em>italic</em><br><u>underline</u><br><del>strikethrough</del><br><br><a href=\"http://example.com\">a link</a><br><br>@kaniini (a mention)<br><br><pre>[lain@navi ~/.local/src/git/bbcode]$ hacking on the <strong>BBCode</strong> parser using [asdf]as the version manager[/asdf]<br></pre>"
+ end
+ end
+
+ describe "unknown tags" do
+ test "it continues when tag is encountered" do
+ assert {:ok, "<pre>[asdf] valid input</pre> and <strong>bold</strong> text"} =
+ BBCode.to_html("[code][asdf] valid input[/code] and [b]bold[/b] text")
+ end
+
+ test "it continues when closing tag is encountered" do
+ assert {:ok, "[/asdf]"} = BBCode.to_html("[/asdf]")
+ assert {:ok, "[/asdf] text"} = BBCode.to_html("[/asdf] text")
+ assert {:ok, "<strong>[/asdf]</strong> text"} = BBCode.to_html("[b][/asdf][/b] text")
+ end
+
+ test "it continues when opening and closing tag is encountered" do
+ assert {:ok, "asdf [asdf]#cofe and #hambaga[/asdf] rest of text"} =
+ BBCode.to_html("asdf [asdf]#cofe and #hambaga[/asdf] rest of text")
+ end
+
+ test "it continues when stray brackets are encountered" do
+ assert {:ok, "<pre> a[ b] [ ] [] valid input</pre> and <strong>bold</strong> text"} =
+ BBCode.to_html("[code] a[ b] [ ] [] valid input[/code] and [b]bold[/b] text")
end
end
end
diff --git a/test/bbcode/parser_test.exs b/test/bbcode/parser_test.exs
index 723b1df..fbc3f3d 100644
--- a/test/bbcode/parser_test.exs
+++ b/test/bbcode/parser_test.exs
@@ -1,112 +1,160 @@
# SPDX-FileCopyrightText: 2019-2022 Pleroma Authors
# SPDX-License-Identifier: LGPL-3.0-only
defmodule BBCode.Parser.Test do
use ExUnit.Case
alias BBCode.Parser
describe "simple tags" do
test "it parses [b] tags correctly" do
assert {:ok, [b: "testing"]} = Parser.parse("[b]testing[/b]")
end
test "it parses [i] tags correctly" do
assert {:ok, [i: "testing"]} = Parser.parse("[i]testing[/i]")
end
test "it parses [u] tags correctly" do
assert {:ok, [u: "testing"]} = Parser.parse("[u]testing[/u]")
end
test "it parses [s] tags correctly" do
assert {:ok, [s: "testing"]} = Parser.parse("[s]testing[/s]")
end
test "it parses [code] tags correctly" do
assert {:ok, [code: "testing"]} = Parser.parse("[code]testing[/code]")
end
test "it parses [quote] tags correctly" do
assert {:ok, [quote: "testing"]} = Parser.parse("[quote]testing[/quote]")
end
- test "it continues when unknown tag is encountered" do
- assert {:ok, ["[asdf]", " valid text input and ", {:b, "bold"}, " text"]} =
- Parser.parse("[asdf] valid text input and [b]bold[/b] text")
- end
+ test "it parses [img] tags correctly" do
+ assert {:ok, [img: "https://example.com"]} = Parser.parse("[img]https://example.com[/img]")
- test "it continues when stray brackets are encountered" do
- assert {:ok,
- [
- {:code, [" a", "[ b]", " ", "[ ]", " ", "[] ", "valid input"]},
- " and ",
- {:b, "bold"},
- " text ",
- "]"
- ]} =
- Parser.parse("[code] a[ b] [ ] [] valid input[/code] and [b]bold[/b] text ]")
+ assert {:ok, [{:img, 64, 64, "https://example.com"}]} =
+ Parser.parse("[img=64x64]https://example.com[/img]")
end
+ test "it parses [url] tags correctly" do
+ assert {:ok, [url: "https://example.com"]} = Parser.parse("[url]https://example.com[/url]")
+
+ assert {:ok, [{:url, "https://example.com", {:b, "Example.com"}}]} =
+ Parser.parse("[url=https://example.com][b]Example.com[/b][/url]")
+ end
end
describe "nested tags" do
test "it parses [ul] lists correctly" do
assert {:ok, [{:ul, [{:li, "a"}, {:li, "b"}]}]} =
Parser.parse("[ul][li]a[/li][li]b[/li][/ul]")
end
test "it parses [ol] lists correctly" do
assert {:ok, [{:ol, [{:li, "a"}, {:li, "b"}]}]} =
Parser.parse("[ol][li]a[/li][li]b[/li][/ol]")
end
end
describe "multiline" do
test "it parses a multiline [li] list" do
data = """
[ul]
[li]a[/li]
[li]b[/li]
[/ul]
"""
assert {:ok, [{:ul, [{:li, "a"}, {:li, "b"}]}]} = Parser.parse(data)
end
test "it parses a multiline [*] list" do
data = """
[ul]
[*]a
[*]b
[/ul]
"""
assert {:ok, [{:ul, [{:li, ["a"]}, {:li, ["b"]}]}]} = Parser.parse(data)
end
test "it parses a multiline [*] list with children" do
data = """
[ul]
[*][url=http://example.com]Example[/url]
[/ul]
"""
assert {:ok, [{:ul, {:li, [{:url, "http://example.com", "Example"}]}}]} = Parser.parse(data)
end
end
describe "property tags" do
test "it parses [url=] tags correctly" do
assert {:ok, [{:url, "http://example.com", "Example"}]} =
Parser.parse("[url=http://example.com]Example[/url]")
end
end
describe "non-tags" do
test "it properly handles bracket text" do
data = "oh no! [swearing intensifies]"
assert {:ok, ["oh no! ", "[swearing intensifies]"]} = Parser.parse(data)
end
+
+ test "it continues when unknown tag is encountered" do
+ assert {:ok, ["[asdf]", " valid text input and ", {:b, "bold"}, " text"]} =
+ Parser.parse("[asdf] valid text input and [b]bold[/b] text")
+ end
+
+ test "it continues when unknown closing tag is encountered" do
+ assert {:ok, ["[/asdf]"]} = Parser.parse("[/asdf]")
+ assert {:ok, ["[/asdf]", " text"]} = Parser.parse("[/asdf] text")
+ assert {:ok, [b: ["[/asdf]", " text"]]} = Parser.parse("[b][/asdf] text[/b]")
+ end
+
+ test "it continues when known closing-only tag is encountered" do
+ assert {:ok, ["[/url]"]} = Parser.parse("[/url]")
+ assert {:ok, ["[/url]", " text"]} = Parser.parse("[/url] text")
+ assert {:ok, ["text ", "[/url]"]} = Parser.parse("text [/url]")
+ end
+
+ test "it continues when opening and closing tag is encountered" do
+ assert {:ok, ["asdf ", "[asdf]", "#cofe and #hambaga", "[/asdf]", " rest of text"]} =
+ Parser.parse("asdf [asdf]#cofe and #hambaga[/asdf] rest of text")
+ end
+
+ test "it works with nested tags" do
+ assert {:ok,
+ [
+ code: [
+ "[lain@navi ~/.local/src/git/bbcode]",
+ "$ hacking on the ",
+ {:b, "BBCode"},
+ " parser using ",
+ "[asdf]",
+ "as the version manager",
+ "[/asdf]"
+ ]
+ ]} =
+ Parser.parse(
+ "[code][lain@navi ~/.local/src/git/bbcode]$ hacking on the [b]BBCode[/b] parser using [asdf]as the version manager[/asdf][/code]"
+ )
+ end
+
+ test "it continues when stray brackets are encountered" do
+ assert {:ok,
+ [
+ {:code, [" a", "[ b]", " ", "[ ]", " ", "[] ", "valid input"]},
+ " and ",
+ {:b, "bold"},
+ " text ",
+ "]"
+ ]} =
+ Parser.parse("[code] a[ b] [ ] [] valid input[/code] and [b]bold[/b] text ]")
+ end
end
end

File Metadata

Mime Type
text/x-diff
Expires
Sat, Aug 8, 9:44 PM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1723997
Default Alt Text
(12 KB)

Event Timeline