2019-06-24 10:56:27 +00:00
defmodule LinkifyTest do
2019-02-08 10:56:05 +00:00
use ExUnit.Case , async : true
2019-06-24 10:56:27 +00:00
doctest Linkify
2017-03-29 14:11:22 +00:00
2018-01-23 00:46:47 +00:00
test " default link " do
2019-06-24 10:56:27 +00:00
assert Linkify . link ( " google.com " ) ==
2019-06-27 08:32:07 +00:00
" <a href= \" http://google.com \" >google.com</a> "
2018-01-23 00:46:47 +00:00
end
2020-07-27 15:40:44 +00:00
test " default link iodata " do
assert Linkify . link_to_iodata ( " google.com " ) ==
[ [ " <a " , " href= \" http://google.com \" " , " > " , " google.com " , " </a> " ] ]
end
test " default link safe iodata " do
assert Linkify . link_safe ( " google.com " ) ==
2020-07-27 17:46:26 +00:00
[
[
{ :safe , [ " <a " , " href= \" http://google.com \" " , " > " ] } ,
" google.com " ,
{ :safe , " </a> " }
]
]
2020-07-27 15:40:44 +00:00
end
2018-01-23 00:46:47 +00:00
test " does on link existing links " do
2019-06-21 10:24:30 +00:00
text = ~s( <a href="http://google.com">google.com</a> )
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == text
2018-01-23 00:46:47 +00:00
end
2019-02-08 06:45:11 +00:00
test " all kinds of links " do
2019-06-21 12:05:47 +00:00
text = " hello google.com https://ddg.com user@email.com irc:///mIRC "
2019-02-08 06:45:11 +00:00
expected =
2019-07-11 13:08:30 +00:00
" hello <a href= \" http://google.com \" >google.com</a> <a href= \" https://ddg.com \" >https://ddg.com</a> <a href= \" mailto:user@email.com \" >user@email.com</a> <a href= \" irc:///mIRC \" >irc:///mIRC</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-02-08 06:45:11 +00:00
email : true ,
2019-06-27 08:32:07 +00:00
extra : true
2019-02-08 06:45:11 +00:00
) == expected
end
2020-07-27 15:40:44 +00:00
test " all kinds of links iodata " do
text = " hello google.com https://ddg.com user@email.com irc:///mIRC "
2020-07-27 17:46:26 +00:00
expected = [
" hello " ,
" " ,
[ " <a " , " href= \" http://google.com \" " , " > " , " google.com " , " </a> " ] ,
" " ,
[ " <a " , " href= \" https://ddg.com \" " , " > " , " https://ddg.com " , " </a> " ] ,
" " ,
[ " <a " , " href= \" mailto:user@email.com \" " , " > " , " user@email.com " , " </a> " ] ,
" " ,
[ " <a " , " href= \" irc:///mIRC \" " , " > " , " irc:///mIRC " , " </a> " ]
]
2020-07-27 15:40:44 +00:00
assert Linkify . link_to_iodata ( text ,
email : true ,
extra : true
) == expected
end
2019-06-27 08:32:07 +00:00
test " class attribute " do
assert Linkify . link ( " google.com " , class : " linkified " ) ==
" <a href= \" http://google.com \" class= \" linkified \" >google.com</a> "
end
2020-07-27 15:40:44 +00:00
test " class attribute iodata " do
assert Linkify . link_to_iodata ( " google.com " , class : " linkified " ) ==
2020-07-27 17:46:26 +00:00
[
[
" <a " ,
" href= \" http://google.com \" class= \" linkified \" " ,
" > " ,
" google.com " ,
" </a> "
]
]
2020-07-27 15:40:44 +00:00
end
2019-06-27 08:32:07 +00:00
test " rel attribute " do
assert Linkify . link ( " google.com " , rel : " noopener noreferrer " ) ==
" <a href= \" http://google.com \" rel= \" noopener noreferrer \" >google.com</a> "
end
2020-07-27 15:40:44 +00:00
test " rel attribute iodata " do
assert Linkify . link_to_iodata ( " google.com " , rel : " noopener noreferrer " ) ==
2020-07-27 17:46:26 +00:00
[
[
" <a " ,
" href= \" http://google.com \" rel= \" noopener noreferrer \" " ,
" > " ,
" google.com " ,
" </a> "
]
]
2020-07-27 15:40:44 +00:00
end
2019-02-22 10:41:23 +00:00
test " rel as function " do
text = " google.com "
expected = " <a href= \" http://google.com \" rel= \" com \" >google.com</a> "
custom_rel = fn url ->
url |> String . split ( " . " ) |> List . last ( )
end
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , rel : custom_rel ) == expected
2019-04-09 08:03:39 +00:00
text = " google.com "
expected = " <a href= \" http://google.com \" >google.com</a> "
custom_rel = fn _ -> nil end
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , rel : custom_rel ) == expected
2019-04-09 08:03:39 +00:00
end
2020-07-27 15:40:44 +00:00
test " strip parens " do
assert Linkify . link ( " (google.com) " ) ==
" (<a href= \" http://google.com \" >google.com</a>) "
end
test " strip parens iodata " do
assert Linkify . link_to_iodata ( " (google.com) " ) ==
[ [ " ( " , [ " <a " , " href= \" http://google.com \" " , " > " , " google.com " , " </a> " ] , " ) " ] ]
end
2019-04-09 08:03:39 +00:00
test " link_map/2 " do
2019-06-24 10:56:27 +00:00
assert Linkify . link_map ( " google.com " , [ ] ) ==
2019-06-27 08:32:07 +00:00
{ " <a href= \" http://google.com \" >google.com</a> " , [ ] }
2019-02-22 10:41:23 +00:00
end
2019-02-08 08:21:07 +00:00
describe " custom handlers " do
test " mentions handler " do
text = " hello @user, @valid_user and @invalid_user "
valid_users = [ " user " , " valid_user " ]
2019-02-08 09:14:39 +00:00
handler = fn " @ " <> user = mention , buffer , _opts , acc ->
2019-02-08 08:21:07 +00:00
if Enum . member? ( valid_users , user ) do
link = ~s( <a href="https://example.com/user/ #{ user } " data-user=" #{ user } "> #{ mention } </a> )
2019-02-08 09:14:39 +00:00
{ link , %{ acc | mentions : MapSet . put ( acc . mentions , { mention , user } ) } }
2019-02-08 08:21:07 +00:00
else
2019-02-08 09:14:39 +00:00
{ buffer , acc }
2019-02-08 08:21:07 +00:00
end
end
{ result_text , %{ mentions : mentions } } =
2019-06-24 10:56:27 +00:00
Linkify . link_map ( text , %{ mentions : MapSet . new ( ) } ,
2019-02-08 08:21:07 +00:00
mention : true ,
mention_handler : handler
)
assert result_text ==
2019-02-18 11:34:38 +00:00
" hello <a href= \" https://example.com/user/user \" data-user= \" user \" >@user</a>, <a href= \" https://example.com/user/valid_user \" data-user= \" valid_user \" >@valid_user</a> and @invalid_user "
2019-02-08 08:21:07 +00:00
assert mentions |> MapSet . to_list ( ) |> Enum . map ( & elem ( &1 , 1 ) ) == valid_users
end
test " hashtags handler " do
text = " # hello # world "
2019-02-08 09:14:39 +00:00
handler = fn hashtag , buffer , opts , acc ->
2019-06-24 10:56:27 +00:00
link = Linkify.Builder . create_hashtag_link ( hashtag , buffer , opts )
2019-02-08 09:14:39 +00:00
{ link , %{ acc | tags : MapSet . put ( acc . tags , hashtag ) } }
2019-02-08 08:21:07 +00:00
end
{ result_text , %{ tags : tags } } =
2019-06-24 10:56:27 +00:00
Linkify . link_map ( text , %{ tags : MapSet . new ( ) } ,
2019-02-08 08:21:07 +00:00
hashtag : true ,
hashtag_handler : handler ,
hashtag_prefix : " https://example.com/user/ " ,
rel : false
)
assert result_text ==
2019-02-18 11:34:38 +00:00
" <a href= \" https://example.com/user/hello \" > # hello</a> <a href= \" https://example.com/user/world \" > # world</a> "
2019-02-08 08:21:07 +00:00
2019-02-18 11:39:56 +00:00
assert MapSet . to_list ( tags ) == [ " # hello " , " # world " ]
2020-08-30 16:43:45 +00:00
text = " # cofe <br><a href= \" https://pleroma.social/ \" >Source</a> "
{ _result_text , %{ tags : tags } } =
Linkify . link_map ( text , %{ tags : MapSet . new ( ) } ,
hashtag : true ,
hashtag_handler : handler ,
hashtag_prefix : " https://example.com/tag/ "
)
assert MapSet . to_list ( tags ) == [ " # cofe " ]
text = " # cofe<br><a href= \" https://pleroma.social/ \" >Source</a> "
{ _result_text , %{ tags : tags } } =
Linkify . link_map ( text , %{ tags : MapSet . new ( ) } ,
hashtag : true ,
hashtag_handler : handler ,
hashtag_prefix : " https://example.com/tag/ "
)
assert MapSet . to_list ( tags ) == [ " # cofe " ]
text = " # cofe<a href= \" https://pleroma.social/ \" >Source</a> "
{ _result_text , %{ tags : tags } } =
Linkify . link_map ( text , %{ tags : MapSet . new ( ) } ,
hashtag : true ,
hashtag_handler : handler ,
hashtag_prefix : " https://example.com/tag/ "
)
assert MapSet . to_list ( tags ) == [ " # cofe " ]
text = " # cofe<code>fetch()</code> "
{ _result_text , %{ tags : tags } } =
Linkify . link_map ( text , %{ tags : MapSet . new ( ) } ,
hashtag : true ,
hashtag_handler : handler ,
hashtag_prefix : " https://example.com/tag/ "
)
assert MapSet . to_list ( tags ) == [ " # cofe " ]
text = " # cofe<pre>fetch()</pre> "
{ _result_text , %{ tags : tags } } =
Linkify . link_map ( text , %{ tags : MapSet . new ( ) } ,
hashtag : true ,
hashtag_handler : handler ,
hashtag_prefix : " https://example.com/tag/ "
)
assert MapSet . to_list ( tags ) == [ " # cofe " ]
2019-02-08 08:21:07 +00:00
end
2019-02-18 11:55:17 +00:00
test " mention handler and hashtag prefix " do
text =
" Hello again, @user.<script></script> \n This is on another :moominmamma: line. # 2hu # epic # phantasmagoric "
handler = fn " @ " <> user = mention , _ , _ , _ ->
2019-06-21 10:24:30 +00:00
~s( <span class="h-card"><a href=" # /user/ #{ user } ">@<span> #{ mention } </span></a></span> )
2019-02-18 11:55:17 +00:00
end
expected =
2019-06-27 08:32:07 +00:00
~s( Hello again, <span class="h-card"><a href=" # /user/user">@<span>@user</span></a></span>.<script></script> \n This is on another :moominmamma: line. <a href="/tag/2hu" target="_blank"> # 2hu</a> <a href="/tag/epic" target="_blank"> # epic</a> <a href="/tag/phantasmagoric" target="_blank"> # phantasmagoric</a> )
2019-02-18 11:55:17 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-02-18 11:55:17 +00:00
mention : true ,
mention_handler : handler ,
hashtag : true ,
2019-06-27 08:32:07 +00:00
hashtag_prefix : " /tag/ " ,
new_window : true
2019-02-18 11:55:17 +00:00
) == expected
end
2020-06-23 23:21:18 +00:00
test " mentions handler with hostname/@user links " do
text =
" hi @user, take a look at this post: https://example.com/@valid_user/posts/9w5AkQp956XIh74apc "
valid_users = [ " user " , " valid_user " ]
handler = fn " @ " <> user = mention , buffer , _opts , acc ->
if Enum . member? ( valid_users , user ) do
link = ~s( <a href="https://example.com/user/ #{ user } " data-user=" #{ user } "> #{ mention } </a> )
{ link , %{ acc | mentions : MapSet . put ( acc . mentions , { mention , user } ) } }
else
{ buffer , acc }
end
end
{ result_text , %{ mentions : mentions } } =
Linkify . link_map ( text , %{ mentions : MapSet . new ( ) } ,
mention : true ,
mention_handler : handler ,
new_window : true
)
assert result_text ==
" hi <a href= \" https://example.com/user/user \" data-user= \" user \" >@user</a>, take a look at this post: <a href= \" https://example.com/@valid_user/posts/9w5AkQp956XIh74apc \" target= \" _blank \" >https://example.com/@valid_user/posts/9w5AkQp956XIh74apc</a> "
assert mentions |> MapSet . to_list ( ) |> Enum . map ( & elem ( &1 , 1 ) ) == [ " user " ]
end
2020-09-02 11:18:02 +00:00
test " mentions handler and extra links " do
text =
" hi @user, text me asap xmpp:me@cofe.ai, (or contact me at me@cofe.ai), please.<br>cofe.ai. "
valid_users = [ " user " , " cofe " ]
handler = fn " @ " <> user = mention , buffer , _opts , acc ->
if Enum . member? ( valid_users , user ) do
link = ~s( <a href="https://example.com/user/ #{ user } " data-user=" #{ user } "> #{ mention } </a> )
{ link , %{ acc | mentions : MapSet . put ( acc . mentions , { mention , user } ) } }
else
{ buffer , acc }
end
end
{ result_text , %{ mentions : mentions } } =
Linkify . link_map ( text , %{ mentions : MapSet . new ( ) } ,
mention : true ,
mention_handler : handler ,
extra : true ,
email : true
)
assert result_text ==
" hi <a href= \" https://example.com/user/user \" data-user= \" user \" >@user</a>, text me asap <a href= \" xmpp:me@cofe.ai \" >xmpp:me@cofe.ai</a>, (or contact me at <a href= \" mailto:me@cofe.ai \" >me@cofe.ai</a>), please.<br><a href= \" http://cofe.ai \" >cofe.ai</a>. "
assert MapSet . to_list ( mentions ) == [ { " @user " , " user " } ]
end
test " mentions handler and emails " do
text = " hi @friend, here is my email<br><br>user@user.me "
valid_users = [ " user " , " friend " ]
handler = fn " @ " <> user = mention , buffer , _opts , acc ->
if Enum . member? ( valid_users , user ) do
link = ~s( <a href="https://example.com/user/ #{ user } " data-user=" #{ user } "> #{ mention } </a> )
{ link , %{ acc | mentions : MapSet . put ( acc . mentions , { mention , user } ) } }
else
{ buffer , acc }
end
end
{ result_text , %{ mentions : mentions } } =
Linkify . link_map ( text , %{ mentions : MapSet . new ( ) } ,
mention : true ,
mention_handler : handler ,
extra : true ,
email : true
)
assert result_text ==
" hi <a href= \" https://example.com/user/friend \" data-user= \" friend \" >@friend</a>, here is my email<br><br><a href= \" mailto:user@user.me \" >user@user.me</a> "
assert MapSet . to_list ( mentions ) == [ { " @friend " , " friend " } ]
end
2020-11-19 15:40:47 +00:00
test " href handler " do
text = ~s( google.com )
result_text = Linkify . link ( text , href_handler : & " /redirect? #{ URI . encode_query ( to : &1 ) } " )
assert result_text == ~s( <a href="/redirect?to=http%3A%2F%2Fgoogle.com">google.com</a> )
end
2019-02-08 08:21:07 +00:00
end
2019-02-08 06:45:11 +00:00
describe " mentions " do
test " simple mentions " do
expected =
2019-06-27 08:32:07 +00:00
~s{ hello <a href="https://example.com/user/user" target="_blank">@user</a> and <a href="https://example.com/user/anotherUser" target="_blank">@anotherUser</a>. }
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( " hello @user and @anotherUser. " ,
2019-02-08 06:45:11 +00:00
mention : true ,
2019-06-27 08:32:07 +00:00
mention_prefix : " https://example.com/user/ " ,
new_window : true
2019-02-08 06:45:11 +00:00
) == expected
end
2019-04-09 06:08:13 +00:00
test " mentions inside html tags " do
text =
" <p><strong>hello world</strong></p> \n <p><`em>another @user__test and @user__test google.com paragraph</em></p> \n "
expected =
" <p><strong>hello world</strong></p> \n <p><`em>another <a href= \" u/user__test \" >@user__test</a> and <a href= \" u/user__test \" >@user__test</a> <a href= \" http://google.com \" >google.com</a> paragraph</em></p> \n "
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , mention : true , mention_prefix : " u/ " ) == expected
2019-04-09 06:08:13 +00:00
end
2020-09-02 11:18:02 +00:00
test " mention @user@example.com " do
2019-02-08 06:45:11 +00:00
text = " hey @user@example.com "
expected =
2019-06-27 08:32:07 +00:00
" hey <a href= \" https://example.com/user/user@example.com \" target= \" _blank \" >@user@example.com</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-02-08 06:45:11 +00:00
mention : true ,
2019-06-27 08:32:07 +00:00
mention_prefix : " https://example.com/user/ " ,
new_window : true
2019-02-08 06:45:11 +00:00
) == expected
2020-09-02 11:18:02 +00:00
text = " That's @user@example.com's server "
expected =
" That's <a href= \" https://example.com/user/user@example.com \" >@user@example.com</a>'s server "
assert Linkify . link ( text ,
mention : true ,
mention_prefix : " https://example.com/user/ "
) == expected
2019-02-08 06:45:11 +00:00
end
2020-11-10 20:24:50 +00:00
2020-11-16 17:57:01 +00:00
test " mentions with symbols before them " do
text = " @@example hey! >@@test@example.com "
expected =
" @<a href= \" /users/example \" >@example</a> hey! >@<a href= \" /users/test@example.com \" >@test@example.com</a> "
assert Linkify . link ( text , mention : true , mention_prefix : " /users/ " ) == expected
end
2020-11-10 20:24:50 +00:00
test " invalid mentions " do
text = " hey user@example "
assert Linkify . link ( text , mention : true , mention_prefix : " /users/ " ) == text
end
2019-02-08 06:45:11 +00:00
end
describe " hashtag links " do
test " hashtag " do
expected =
2019-06-27 08:32:07 +00:00
" one <a href= \" https://example.com/tag/2two \" target= \" _blank \" > # 2two</a> three <a href= \" https://example.com/tag/four \" target= \" _blank \" > # four</a>. "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( " one # 2two three # four. " ,
2019-02-08 06:45:11 +00:00
hashtag : true ,
2019-06-27 08:32:07 +00:00
hashtag_prefix : " https://example.com/tag/ " ,
new_window : true
2019-02-08 06:45:11 +00:00
) == expected
end
2019-02-21 07:30:59 +00:00
test " must have non-numbers " do
expected = " <a href= \" /t/1ok \" > # 1ok</a> # 42 # 7 "
2019-06-24 10:56:27 +00:00
assert Linkify . link ( " # 1ok # 42 # 7 " ,
2019-02-21 07:30:59 +00:00
hashtag : true ,
hashtag_prefix : " /t/ " ,
2019-06-27 08:32:07 +00:00
rel : false
2019-02-22 07:39:06 +00:00
) == expected
end
test " support French " do
text = " # administrateur·rice·s # ingénieur·e·s "
expected =
" <a href= \" /t/administrateur·rice·s \" > # administrateur·rice·s</a> <a href= \" /t/ingénieur·e·s \" > # ingénieur·e·s</a> "
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-02-22 07:39:06 +00:00
hashtag : true ,
hashtag_prefix : " /t/ " ,
2019-06-27 08:32:07 +00:00
rel : false
2019-02-21 07:30:59 +00:00
) == expected
end
2019-04-03 11:53:35 +00:00
test " support Telugu " do
text = " # చక్రం # కకకకక్ # కకకకాక # కకకక్రకకకక "
expected =
" <a href= \" /t/చక్రం \" > # చక్రం</a> <a href= \" /t/కకకకక్ \" > # కకకకక్</a> <a href= \" /t/కకకకాక \" > # కకకకాక</a> <a href= \" /t/కకకక్రకకకక \" > # కకకక్రకకకక</a> "
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-04-03 11:53:35 +00:00
hashtag : true ,
hashtag_prefix : " /t/ " ,
2019-06-27 08:32:07 +00:00
rel : false
2019-04-03 11:53:35 +00:00
) == expected
end
2019-02-08 06:45:11 +00:00
test " do not turn urls with hashes into hashtags " do
text = " google.com # test # test google.com/ # test # tag "
expected =
2019-02-18 11:34:38 +00:00
" <a href= \" http://google.com # test \" >google.com # test</a> <a href= \" https://example.com/tag/test \" > # test</a> <a href= \" http://google.com/ # test \" >google.com/ # test</a> <a href= \" https://example.com/tag/tag \" > # tag</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-02-08 06:45:11 +00:00
hashtag : true ,
rel : false ,
hashtag_prefix : " https://example.com/tag/ "
) == expected
end
test " works with non-latin characters " do
text = " # 漢字 # は # тест # ทดสอบ "
expected =
2019-02-18 11:34:38 +00:00
" <a href= \" https://example.com/tag/漢字 \" > # 漢字</a> <a href= \" https://example.com/tag/は \" > # は</a> <a href= \" https://example.com/tag/тест \" > # тест</a> <a href= \" https://example.com/tag/ทดสอบ \" > # ทดสอบ</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ,
2019-02-08 06:45:11 +00:00
rel : false ,
hashtag : true ,
hashtag_prefix : " https://example.com/tag/ "
) == expected
end
end
describe " links " do
test " turning urls into links " do
text = " Hey, check out http://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2 # blabla . "
expected =
2019-07-11 13:08:30 +00:00
" Hey, check out <a href= \" http://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2 # blabla \" target= \" _blank \" >http://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2 # blabla</a> . "
2019-02-08 06:45:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , new_window : true ) == expected
2019-02-08 06:45:11 +00:00
# no scheme
text = " Hey, check out www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2 # blabla . "
2019-07-11 13:08:30 +00:00
expected =
" Hey, check out <a href= \" http://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2 # blabla \" target= \" _blank \" >www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2 # blabla</a> . "
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , new_window : true ) == expected
2019-02-08 06:45:11 +00:00
end
2019-04-03 11:05:11 +00:00
test " turn urls with schema into urls " do
text = " 📌https://google.com "
2019-07-11 13:08:30 +00:00
expected = " 📌<a href= \" https://google.com \" >https://google.com</a> "
2019-04-03 11:05:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , rel : false ) == expected
2019-04-03 11:05:11 +00:00
end
2019-07-11 13:08:30 +00:00
test " skip prefix " do
assert Linkify . link ( " http://google.com " , strip_prefix : true ) ==
" <a href= \" http://google.com \" >google.com</a> "
assert Linkify . link ( " http://www.google.com " , strip_prefix : true ) ==
" <a href= \" http://www.google.com \" >google.com</a> "
end
2019-02-08 06:45:11 +00:00
test " hostname/@user " do
text = " https://example.com/@user "
2019-07-11 13:08:30 +00:00
expected =
" <a href= \" https://example.com/@user \" target= \" _blank \" >https://example.com/@user</a> "
2019-02-08 06:45:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , new_window : true ) == expected
2019-02-08 06:45:11 +00:00
text = " https://example.com:4000/@user "
expected =
2019-07-11 13:08:30 +00:00
" <a href= \" https://example.com:4000/@user \" target= \" _blank \" >https://example.com:4000/@user</a> "
2019-02-08 06:45:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , new_window : true ) == expected
2019-02-08 06:45:11 +00:00
text = " https://example.com:4000/@user "
expected =
2019-07-11 13:08:30 +00:00
" <a href= \" https://example.com:4000/@user \" target= \" _blank \" >https://example.com:4000/@user</a> "
2019-02-08 06:45:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , new_window : true ) == expected
2019-02-08 06:45:11 +00:00
text = " @username "
expected = " @username "
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , new_window : true ) == expected
2019-02-08 06:45:11 +00:00
text = " http://www.cs.vu.nl/~ast/intel/ "
2019-07-11 13:08:30 +00:00
expected = " <a href= \" http://www.cs.vu.nl/~ast/intel/ \" >http://www.cs.vu.nl/~ast/intel/</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-08 06:45:11 +00:00
text = " https://forum.zdoom.org/viewtopic.php?f=44&t=57087 "
expected =
2019-07-11 13:08:30 +00:00
" <a href= \" https://forum.zdoom.org/viewtopic.php?f=44&t=57087 \" >https://forum.zdoom.org/viewtopic.php?f=44&t=57087</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-08 06:45:11 +00:00
text = " https://en.wikipedia.org/wiki/Sophia_(Gnosticism) # Mythos_of_the_soul "
expected =
2019-07-11 13:08:30 +00:00
" <a href= \" https://en.wikipedia.org/wiki/Sophia_(Gnosticism) # Mythos_of_the_soul \" >https://en.wikipedia.org/wiki/Sophia_(Gnosticism) # Mythos_of_the_soul</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-08 06:45:11 +00:00
text = " https://en.wikipedia.org/wiki/Duff's_device "
expected =
2019-07-11 13:08:30 +00:00
" <a href= \" https://en.wikipedia.org/wiki/Duff's_device \" >https://en.wikipedia.org/wiki/Duff's_device</a> "
2019-02-08 06:45:11 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-08 06:45:11 +00:00
end
end
describe " non http links " do
test " xmpp " do
text = " xmpp:user@example.com "
2019-02-18 11:34:38 +00:00
2019-06-27 08:32:07 +00:00
expected = " <a href= \" xmpp:user@example.com \" >xmpp:user@example.com</a> "
2019-02-18 11:34:38 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , extra : true ) == expected
2019-02-08 06:45:11 +00:00
end
2020-09-02 11:18:02 +00:00
test " wrong xmpp " do
text = " xmpp:user.example.com "
assert Linkify . link ( text , extra : true ) == text
end
2019-02-08 06:45:11 +00:00
test " email " do
text = " user@example.com "
2019-06-27 08:32:07 +00:00
expected = " <a href= \" mailto:user@example.com \" >user@example.com</a> "
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text , email : true ) == expected
2019-02-08 06:45:11 +00:00
end
test " magnet " do
text =
" magnet:?xt=urn:btih:a4104a9d2f5615601c429fe8bab8177c47c05c84&dn=ubuntu-18.04.1.0-live-server-amd64.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&tr=http%3A%2F%2Fipv6.torrent.ubuntu.com%3A6969%2Fannounce "
expected =
2019-06-27 08:32:07 +00:00
" <a href= \" magnet:?xt=urn:btih:a4104a9d2f5615601c429fe8bab8177c47c05c84&dn=ubuntu-18.04.1.0-live-server-amd64.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&tr=http%3A%2F%2Fipv6.torrent.ubuntu.com%3A6969%2Fannounce \" >magnet:?xt=urn:btih:a4104a9d2f5615601c429fe8bab8177c47c05c84&dn=ubuntu-18.04.1.0-live-server-amd64.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&tr=http%3A%2F%2Fipv6.torrent.ubuntu.com%3A6969%2Fannounce</a> "
2019-02-08 06:45:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , extra : true ) == expected
2019-02-08 06:45:11 +00:00
end
test " dweb " do
text =
" dweb://584faa05d394190ab1a3f0240607f9bf2b7e2bd9968830a11cf77db0cea36a21+v1.0.0/path/to/file.txt "
expected =
2019-06-27 08:32:07 +00:00
" <a href= \" dweb://584faa05d394190ab1a3f0240607f9bf2b7e2bd9968830a11cf77db0cea36a21+v1.0.0/path/to/file.txt \" >dweb://584faa05d394190ab1a3f0240607f9bf2b7e2bd9968830a11cf77db0cea36a21+v1.0.0/path/to/file.txt</a> "
2019-02-08 06:45:11 +00:00
2019-06-27 08:32:07 +00:00
assert Linkify . link ( text , extra : true ) == expected
2019-02-08 06:45:11 +00:00
end
end
2019-02-05 11:27:58 +00:00
describe " TLDs " do
test " parse with scheme " do
text = " https://google.com "
2019-07-11 13:08:30 +00:00
expected = " <a href= \" https://google.com \" >https://google.com</a> "
2019-02-05 11:27:58 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-05 11:27:58 +00:00
end
test " only existing TLDs with scheme " do
text = " this url https://google.foobar.blah11blah/ has invalid TLD "
expected = " this url https://google.foobar.blah11blah/ has invalid TLD "
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-05 11:27:58 +00:00
text = " this url https://google.foobar.com/ has valid TLD "
expected =
2019-07-11 13:08:30 +00:00
" this url <a href= \" https://google.foobar.com/ \" >https://google.foobar.com/</a> has valid TLD "
2019-02-05 11:27:58 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-05 11:27:58 +00:00
end
test " only existing TLDs without scheme " do
text = " this url google.foobar.blah11blah/ has invalid TLD "
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == text
2019-02-05 11:27:58 +00:00
text = " this url google.foobar.com/ has valid TLD "
expected =
2019-06-27 08:32:07 +00:00
" this url <a href= \" http://google.foobar.com/ \" >google.foobar.com/</a> has valid TLD "
2019-02-05 11:27:58 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-05 11:27:58 +00:00
end
test " only existing TLDs with and without scheme " do
text = " this url http://google.foobar.com/ has valid TLD "
expected =
2019-07-11 13:08:30 +00:00
" this url <a href= \" http://google.foobar.com/ \" >http://google.foobar.com/</a> has valid TLD "
2019-02-05 11:27:58 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-05 11:27:58 +00:00
text = " this url google.foobar.com/ has valid TLD "
expected =
2019-06-27 08:32:07 +00:00
" this url <a href= \" http://google.foobar.com/ \" >google.foobar.com/</a> has valid TLD "
2019-02-05 11:27:58 +00:00
2019-06-24 10:56:27 +00:00
assert Linkify . link ( text ) == expected
2019-02-05 11:27:58 +00:00
end
2020-11-18 17:24:44 +00:00
test " FQDN (with trailing period) " do
text =
" Check out this article: https://www.wired.com./story/marissa-mayer-startup-sunshine-contacts/ "
expected =
" Check out this article: <a href= \" https://www.wired.com./story/marissa-mayer-startup-sunshine-contacts/ \" >https://www.wired.com./story/marissa-mayer-startup-sunshine-contacts/</a> "
assert Linkify . link ( text ) == expected
end
2020-11-18 17:40:10 +00:00
test " Does not link trailing punctuation " do
text = " You can find more info at https://pleroma.social. "
expected =
" You can find more info at <a href= \" https://pleroma.social \" >https://pleroma.social</a>. "
assert Linkify . link ( text ) == expected
end
2019-02-05 11:27:58 +00:00
end
2017-03-29 14:11:22 +00:00
end