---------------------------------------------------------------------------
-- @author Uli Schlachter
-- @copyright 2016 Uli Schlachter
---------------------------------------------------------------------------

local gdebug = require("gears.debug")
local protected_call = require("gears.protected_call")

describe("gears.protected_call", function()
    -- Stop the error reporting during tests
    local orig_print_error = gdebug.print_error
    local errors
    before_each(function()
        errors = {}
        gdebug.print_error = function(err)
            table.insert(errors, err)
        end
    end)
    after_each(function()
        gdebug.print_error = orig_print_error
    end)

    it("Call with arguments and result", function()
        local called = false
        local function f(...)
            called = true
            assert.is_same({ ... }, { 1, "second" })
            return "first", 2
        end
        local results = { protected_call(f, 1, "second") }
        assert.is_true(called)
        assert.is_same({ "first", 2 }, results)
        assert.is_same(errors, {})
    end)

    it("Call with error", function()
        assert.is_same({}, { protected_call(error, "I was called") })
        assert.is_same(#errors, 1)
        assert.is_truthy(string.find(errors[1], "I was called"))
    end)
end)

-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80