# frozen_string_literal: true

RSpec.describe TTY::Box, "#frame" do
  it "creates frame with only  width & height values" do
    output = TTY::Box.frame(width: 35, height: 4)

    expect(output).to eq([
      "┌─────────────────────────────────┐\n",
      "│                                 │\n",
      "│                                 │\n",
      "└─────────────────────────────────┘\n"
    ].join)
  end

  it "creates frame at a position with direct width & height values" do
    output = TTY::Box.frame(top: 0, left: 0, width: 35, height: 4)

    expect(output).to eq([
      "\e[1;1H┌─────────────────────────────────┐",
      "\e[2;1H│\e[2;35H│",
      "\e[3;1H│\e[3;35H│",
      "\e[4;1H└─────────────────────────────────┘"
    ].join)
  end

  it "displays content when block provided" do
    output = TTY::Box.frame(top: 0, left: 0, width: 35, height: 4) do
      "Hello world!"
    end

    expect(output).to eq([
      "\e[1;1H┌─────────────────────────────────┐",
      "\e[2;1H│Hello world!                     \e[2;35H│",
      "\e[3;1H│\e[3;35H│",
      "\e[4;1H└─────────────────────────────────┘"
    ].join)
  end

  it "wraps content when exceeding width" do
    box = TTY::Box.frame(top: 0, left: 0, width: 20, height: 4) do
      "Drawing a box in terminal emulator"
    end

    expect(box).to eq([
      "\e[1;1H┌──────────────────┐",
      "\e[2;1H│Drawing a box in  \e[2;20H│",
      "\e[3;1H│terminal emulator \e[3;20H│",
      "\e[4;1H└──────────────────┘"
    ].join)
  end

  it "correctly displays colored content" do
    box = TTY::Box.frame(width: 35, height: 3) do
      Pastel.new.green.on_red("Hello world!")
    end

    expect(box).to eq([
      "┌─────────────────────────────────┐\n",
      "│\e[32;41mHello world!\e[0m                     │\n",
      "└─────────────────────────────────┘\n"
    ].join)
  end

  it "handles \r\n line breaks" do
    box = TTY::Box.frame(
          width: 29,
          height: 7
        ) do
      "Closes #360\r\n\r\nCloses !217"
    end

    expect(box).to eq([
      "┌───────────────────────────┐\r\n",
      "│Closes #360                │\r\n",
      "│                           │\r\n",
      "│Closes !217                │\r\n",
      "│                           │\r\n",
      "│                           │\r\n",
      "└───────────────────────────┘\r\n"
    ].join)
  end
end