# frozen_string_literal: true

RSpec.describe Strings::Align, '#align_right' do
  it "aligns line to right" do
    text = "the madness of men"
    expect(Strings::Align.align_right(text, 22)).to eq("    the madness of men")
  end

  it "fills empty" do
    expect(Strings::Align.align_right('', 22)).to eq("                      ")
  end

  it "aligns string to the right with unicode characters" do
    text = "こんにちは"
    expect(Strings::Align.align(text, 20, direction: :right)).to eq("          こんにちは")
  end

  it "aligns string to the right with ansi codees" do
    text = "\e[32mthe madness of men\e[0m"
    expect(Strings::Align.align(text, 22, direction: :right)).to eq("    \e[32mthe madness of men\e[0m")
  end

  it "aligns multiline text to the right" do
    text = "for there is no folly of the beast\n of the earth which\n is not infinitely\n outdone by the madness of men"
    expect(Strings::Align.align_right(text, 40)).to eq([
     "      for there is no folly of the beast\n",
     "                      of the earth which\n",
     "                       is not infinitely\n",
     "           outdone by the madness of men"
    ].join)
  end

  it "aligns multiline text to right with unicode characters" do
    text = "ラドクリフ\n、マラソン五輪\n代表に1万m出\n場にも含み"
    expect(Strings::Align.align_right(text, 20)).to eq([
      "          ラドクリフ\n",
      "      、マラソン五輪\n",
      "        代表に1万m出\n",
      "          場にも含み"
    ].join)
  end

  it "right justfies ansi text" do
    text = "for \e[35mthere\e[0m is no folly of the beast\nof the \e[33mearth\e0m which\nis \e[34mnot infinitely\e[0m\n\e[33moutdone\e[0m by the madness of men"
    expect(Strings::Align.align_right(text, 40)).to eq([
     "      for \e[35mthere\e[0m is no folly of the beast\n",
     "                      of the \e[33mearth\e0m which\n",
     "                       is \e[34mnot infinitely\e[0m\n",
     "           \e[33moutdone\e[0m by the madness of men"
    ].join)
  end

  it "right justifies multiline text with fill of '*'" do
    text = "for there is no folly of the beast\nof the earth which\nis not infinitely\noutdone by the madness of men"
    expect(Strings::Align.align_right(text, 40, fill: '*')).to eq([
     "******for there is no folly of the beast\n",
     "**********************of the earth which\n",
     "***********************is not infinitely\n",
     "***********outdone by the madness of men"
    ].join)
  end

  it "handles \r\n line separator" do
    text = "Closes #360\r\n\r\nCloses !217"
    expect(Strings::Align.align_right(text, 27)).to eq([
      "                Closes #360",
      "                           ",
      "                Closes !217"
    ].join("\r\n"))
  end
end
