local refine_edits = require("format-on-save.refine-edits")

describe("refine_edits", function()
  it("works", function()
    assert.are.same({ { 1, 1, 1, 1 } }, refine_edits({ "(" }, { " " }))

    assert.are.same({
      { 1, 1, 0, 0 },
      { 2, 0, 2, 2 },
    }, refine_edits({ " ", "+" }, { "+", "\n", " " }))

    assert.are.same({
      { 0, 0, 1, 1 },
      { 2, 2, 2, 0 },
    }, refine_edits({ "+", "\n", " " }, { " ", "+" }))

    assert.are.same(
      {
        { 0, 0, 1, 2 },
        { 9, 2, 10, 0 },
      },
      refine_edits(
        { "c", "o", "n", "s", "o", "l", "e", ".", "\n", "\n" },
        { " ", " ", "c", "o", "n", "s", "o", "l", "e", "." }
      )
    )

    assert.are.same(
      {
        { 1, 2, 1, 2 },
        { 8, 2, 8, 2 },
      },
      refine_edits(
        { " ", " ", "p", "r", "i", "n", "t", " ", " " },
        { "\t", "\t", "p", "r", "i", "n", "t", "\t", "\t" }
      )
    )

    assert.are.same(
      {
        { 0, 0, 1, 1 },
        { 1, 0, 3, 1 },
        { 5, 0, 8, 1 },
        { 6, 0, 10, 1 },
        { 10, 0, 15, 1 },
        { 11, 0, 17, 1 },
        { 16, 1, 22, 1 },
      },
      refine_edits({
        " ",
        "1",
        "2",
        "3",
        ";",
        " ",
        "4",
        "5",
        "6",
        ";",
        " ",
        "7",
        "8",
        "9",
        ";",
        " ",
      }, {
        "\n",
        " ",
        " ",
        "1",
        "2",
        "3",
        ";",
        "\n",
        " ",
        " ",
        "4",
        "5",
        "6",
        ";",
        "\n",
        " ",
        " ",
        "7",
        "8",
        "9",
        ";",
        "\n",
      })
    )

    assert.are.same(
      {
        { 0, 0, 1, 2 },
        { 4, 0, 7, 1 },
        { 5, 0, 9, 1 },
        { 10, 0, 15, 2 },
      },
      refine_edits({
        "1",
        "2",
        "3",
        ";",
        " ",
        "4",
        "5",
        "6",
        ";",
        "\n",
      }, {
        " ",
        " ",
        "1",
        "2",
        "3",
        ";",
        "\n",
        " ",
        " ",
        "4",
        "5",
        "6",
        ";",
        "\n",
        " ",
        " ",
      })
    )

    assert.are.same(
      {
        { 0, 0, 1, 1 },
        { 1, 0, 3, 2 },
        { 8, 0, 12, 1 },
      },
      refine_edits(
        { " ", "r", "e", "t", "u", "r", "n", ";" },
        { "\n", " ", " ", " ", "r", "e", "t", "u", "r", "n", ";", "\n" }
      )
    )

    assert.are.same({
      { 0, 0, 1, 6 },
    }, refine_edits({}, { "r", "e", "t", "u", "r", "n" }))

    assert.are.same(
      {
        { 7, 1, 6, 0 },
      },
      refine_edits(
        { "r", "e", "t", "u", "r", "n", "\n", ";" },
        { "r", "e", "t", "u", "r", "n", ";" }
      )
    )
  end)
end)
