local Runner = require('tests.indent.common').Runner

local run = Runner:new(it, 'tests/indent/gleam', {
  tabstop = 2,
  shiftwidth = 2,
  softtabstop = 2,
  expandtab = true,
})

describe('indent Gleam:', function()
  describe('whole file:', function()
    run:whole_file('.')
  end)
  describe('new line:', function()
    run:new_line('type.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 2, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 3, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 4, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 5, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 6, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 7, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 8, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 9, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 10, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 11, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 12, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 13, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 14, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 15, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 16, text = '//', indent = 0 })
    run:new_line('type.gleam', { on_line = 17, text = '//', indent = 2 })
    run:new_line('type.gleam', { on_line = 18, text = '//', indent = 0 })

    run:new_line('function.gleam', { on_line = 1, text = '//', indent = 0 })
    run:new_line('function.gleam', { on_line = 2, text = '//', indent = 0 })
    run:new_line('function.gleam', { on_line = 3, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 4, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 5, text = '//', indent = 0 })
    run:new_line('function.gleam', { on_line = 6, text = '//', indent = 0 })
    run:new_line('function.gleam', { on_line = 7, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 8, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 9, text = '//', indent = 0 })
    run:new_line('function.gleam', { on_line = 10, text = '//', indent = 0 })
    run:new_line('function.gleam', { on_line = 11, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 12, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 13, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 14, text = '//', indent = 2 })
    run:new_line('function.gleam', { on_line = 15, text = '//', indent = 2 })

    run:new_line('list.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('list.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('list.gleam', { on_line = 3, text = '//', indent = 4 })
    run:new_line('list.gleam', { on_line = 4, text = '//', indent = 6 })
    run:new_line('list.gleam', { on_line = 5, text = '//', indent = 6 })
    run:new_line('list.gleam', { on_line = 6, text = '//', indent = 8 })
    run:new_line('list.gleam', { on_line = 7, text = '//', indent = 8 })
    run:new_line('list.gleam', { on_line = 8, text = '//', indent = 6 })
    run:new_line('list.gleam', { on_line = 9, text = '//', indent = 4 })
    run:new_line('list.gleam', { on_line = 10, text = '//', indent = 2 })
    run:new_line('list.gleam', { on_line = 11, text = '//', indent = 0 })

    run:new_line('tuple.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('tuple.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('tuple.gleam', { on_line = 3, text = '//', indent = 4 })
    run:new_line('tuple.gleam', { on_line = 4, text = '//', indent = 6 })
    run:new_line('tuple.gleam', { on_line = 5, text = '//', indent = 6 })
    run:new_line('tuple.gleam', { on_line = 6, text = '//', indent = 8 })
    run:new_line('tuple.gleam', { on_line = 7, text = '//', indent = 8 })
    run:new_line('tuple.gleam', { on_line = 8, text = '//', indent = 6 })
    run:new_line('tuple.gleam', { on_line = 9, text = '//', indent = 4 })
    run:new_line('tuple.gleam', { on_line = 10, text = '//', indent = 2 })
    run:new_line('tuple.gleam', { on_line = 11, text = '//', indent = 0 })

    run:new_line('case.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('case.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('case.gleam', { on_line = 3, text = '//', indent = 4 })
    run:new_line('case.gleam', { on_line = 4, text = '//', indent = 6 })
    run:new_line('case.gleam', { on_line = 5, text = '//', indent = 8 })
    run:new_line('case.gleam', { on_line = 6, text = '//', indent = 8 })
    run:new_line('case.gleam', { on_line = 7, text = '//', indent = 6 })
    run:new_line('case.gleam', { on_line = 8, text = '//', indent = 4 })
    run:new_line('case.gleam', { on_line = 9, text = '//', indent = 2 })
    run:new_line('case.gleam', { on_line = 10, text = '//', indent = 0 })

    run:new_line('let.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('let.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('let.gleam', { on_line = 3, text = '//', indent = 4 })
    run:new_line('let.gleam', { on_line = 4, text = '//', indent = 0 })

    run:new_line('pipe.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('pipe.gleam', { on_line = 2, text = '//', indent = 2 })
    run:new_line('pipe.gleam', { on_line = 3, text = '//', indent = 2 })
    run:new_line('pipe.gleam', { on_line = 4, text = '//', indent = 0 })

    run:new_line('binary_expression.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('binary_expression.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('binary_expression.gleam', { on_line = 3, text = '//', indent = 4 })
    run:new_line('binary_expression.gleam', { on_line = 4, text = '//', indent = 0 })

    run:new_line('import.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('import.gleam', { on_line = 2, text = '//', indent = 2 })
    run:new_line('import.gleam', { on_line = 3, text = '//', indent = 2 })
    run:new_line('import.gleam', { on_line = 4, text = '//', indent = 0 })

    run:new_line('constant.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('constant.gleam', { on_line = 2, text = '//', indent = 2 })

    run:new_line('assert.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('assert.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('assert.gleam', { on_line = 3, text = '//', indent = 2 })
    run:new_line('assert.gleam', { on_line = 4, text = '//', indent = 0 })

    run:new_line('todo.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('todo.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('todo.gleam', { on_line = 3, text = '//', indent = 4 })
    run:new_line('todo.gleam', { on_line = 4, text = '//', indent = 2 })
    run:new_line('todo.gleam', { on_line = 5, text = '//', indent = 0 })

    run:new_line('anonymous_function.gleam', { on_line = 1, text = '//', indent = 2 })
    run:new_line('anonymous_function.gleam', { on_line = 2, text = '//', indent = 4 })
    run:new_line('anonymous_function.gleam', { on_line = 3, text = '//', indent = 6 })
    run:new_line('anonymous_function.gleam', { on_line = 4, text = '//', indent = 6 })
    run:new_line('anonymous_function.gleam', { on_line = 5, text = '//', indent = 4 })
    run:new_line('anonymous_function.gleam', { on_line = 6, text = '//', indent = 2 })
    run:new_line('anonymous_function.gleam', { on_line = 7, text = '//', indent = 0 })
  end)
end)
