local utils = require('CopilotChat.utils')

describe('CopilotChat.utils', function()
  it('empty', function()
    assert.is_true(utils.empty(nil))
    assert.is_true(utils.empty(''))
    assert.is_true(utils.empty('   '))
    assert.is_true(utils.empty({}))
    assert.is_false(utils.empty({ 1 }))
    assert.is_false(utils.empty('abc'))
    assert.is_false(utils.empty(0))
  end)

  it('split_lines', function()
    assert.are.same(utils.split_lines(''), {})
    assert.are.same(utils.split_lines('a\nb'), { 'a', 'b' })
    assert.are.same(utils.split_lines('a\r\nb'), { 'a', 'b' })
    assert.are.same(utils.split_lines('a\nb\n'), { 'a', 'b', '' })
  end)

  it('make_string', function()
    assert.equals('a b 1', utils.make_string('a', 'b', 1))
    assert.equals(vim.inspect({ x = 1 }), utils.make_string({ x = 1 }))
    assert.equals('msg', utils.make_string('error:1: msg'))
  end)

  it('uuid', function()
    local uuid1 = utils.uuid()
    local uuid2 = utils.uuid()
    assert.equals('string', type(uuid1))
    assert.not_equals(uuid1, uuid2)
    assert.equals(36, #uuid1)
  end)

  it('to_table', function()
    assert.are.same({ 1, 2, 3 }, utils.to_table(1, 2, 3))
    assert.are.same({ 1, 2, 3 }, utils.to_table({ 1, 2 }, 3))
    assert.are.same({ 1 }, utils.to_table(nil, 1))
  end)
end)
