defmodule HomingPigeon.SplitterTest do use ExUnit.Case import HomingPigeon.ByteSplit doctest HomingPigeon.ByteSplit test "split by bytes" do assert byte_split("test", 2) == ["te", "st"] end test "split with emoji" do assert byte_split("testπŸ¦€", 4) == ["test", "πŸ¦€"] end test "ircsplit without emoji" do lorem_ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam lorem nunc, vestibulum ac magna et, egestas accumsan felis. " <> "Morbi dolor quam, venenatis in molestie ullamcorper, fringilla nec tellus. Cras viverra purus ut ante iaculis consequat. " <> "Donec convallis id velit id vulputate. Nullam vel libero at sem consequat dapibus non in lectus. Nunc nec lectus aliquet, " <> "faucibus erat eget, feugiat justo. Duis imperdiet ligula at sem consectetur, porta semper massa sagittis. Duis sit amet risus sit amet nisi lectus." irc_result = [ "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam lorem nunc, vestibulum ac magna et, egestas accumsan felis. " <> "Morbi dolor quam, venenatis in molestie ullamcorper, fringilla nec tellus. Cras viverra purus ut ante iaculis consequat. " <> "Donec convallis id velit id vulputate. Nullam vel libero at sem consequat dapibus non in lectus. Nunc nec lectus aliquet, " <> "faucibus erat eget, feugiat justo. Duis imperdiet ligula at sem consectetur, porta semper massa sagittis. Duis sit amet risus", "sit amet nisi lectus." ] prefix = "PRIVMSG #test :" prefix_len = prefix |> byte_size() irc_after_split = ircsplit(lorem_ipsum, prefix_len) assert irc_after_split == irc_result assert Enum.map(irc_after_split, &byte_size(prefix <> &1 <> "\r\n")) |> Enum.map(&(&1 <= 512)) == [ true, true ] end test "ircsplit with emoji" do lorem_ipsum = "Lorem πŸ“¨πŸ°πŸ‡πŸŒ€πŸ•£πŸ‘» gravida enim suspendisse vel πŸ’΅ πŸ”·πŸ”ƒπŸŒ™πŸ¦ blandit 🌝🎌🌈 quis πŸ¬πŸ”«πŸŸ tincidunt odio quis a morbi ipsum, " <> "lectus at nunc, nunc πŸ“–πŸ· morbi amet velit mattis netus est id πŸ‘­πŸŒ› mauris id massa massa lorem feugiat et πŸŒƒπŸ₯πŸ‘‡ πŸ“΄ tellus. Purus " <> "pulvinar sed integer ipsum, porta πŸ“•πŸ† posuere nunc mauris, elit vitae volutpat lacinia nulla et pellentesque elit πŸ’™πŸ’πŸπŸ“—πŸ›πŸŒ° πŸ‘ " <> "hendrerit sit πŸ’΄πŸ“£πŸ’ etiam πŸ…πŸˆ πŸ“— 🌹 curabitur purus" irc_result = [ "Lorem πŸ“¨πŸ°πŸ‡πŸŒ€πŸ•£πŸ‘» gravida enim suspendisse vel πŸ’΅ πŸ”·πŸ”ƒπŸŒ™πŸ¦ blandit 🌝🎌🌈 quis πŸ¬πŸ”«πŸŸ tincidunt odio quis a morbi ipsum, " <> "lectus at nunc, nunc πŸ“–πŸ· morbi amet velit mattis netus est id πŸ‘­πŸŒ› mauris id massa massa lorem feugiat et πŸŒƒπŸ₯πŸ‘‡ πŸ“΄ tellus. Purus " <> "pulvinar sed integer ipsum, porta πŸ“•πŸ† posuere nunc mauris, elit vitae volutpat lacinia nulla et pellentesque elit πŸ’™πŸ’πŸπŸ“—πŸ›πŸŒ° πŸ‘ " <> "hendrerit sit πŸ’΄πŸ“£πŸ’ etiam πŸ…πŸˆ", "πŸ“— 🌹 curabitur purus" ] prefix = "PRIVMSG #test :" prefix_len = prefix |> byte_size() irc_after_split = ircsplit(lorem_ipsum, prefix_len) assert irc_after_split == irc_result assert Enum.map(irc_after_split, &byte_size(prefix <> &1 <> "\r\n")) |> Enum.map(&(&1 <= 512)) == [ true, true ] end test "ircsplit only emoji" do crab = "πŸ¦€" crabs = for _ <- 1..129, into: "", do: crab good_split = [ for(_ <- 1..123, into: "", do: crab), for(_ <- 1..6, into: "", do: crab) ] prefix = "PRIVMSG #test :" prefix_len = prefix |> byte_size() irc_split = ircsplit(crabs, prefix_len) assert irc_split == good_split assert Enum.map(irc_split, &byte_size(prefix <> &1 <> "\r\n")) |> Enum.map(&(&1 <= 512)) == [ true, true ] end end