return function()
local assertDeepEqual = require(script.Parent.assertDeepEqual)
it("should fail with a message when args are not equal", function()
local success, message = pcall(assertDeepEqual, 1, 2)
expect(success).to.equal(false)
expect(message:find("first ~= second")).to.be.ok()
success, message = pcall(assertDeepEqual, {
foo = 1,
}, {
foo = 2,
})
expect(success).to.equal(false)
expect(message:find("first%[foo%] ~= second%[foo%]")).to.be.ok()
end)
it("should compare non-table values using standard '==' equality", function()
assertDeepEqual(1, 1)
assertDeepEqual("hello", "hello")
assertDeepEqual(nil, nil)
local someFunction = function() end
local theSameFunction = someFunction
assertDeepEqual(someFunction, theSameFunction)
local A = {
foo = someFunction,
}
local B = {
foo = theSameFunction,
}
assertDeepEqual(A, B)
end)
it("should fail when types differ", function()
local success, message = pcall(assertDeepEqual, 1, "1")
expect(success).to.equal(false)
expect(message:find("first is of type number, but second is of type string")).to.be.ok()
end)
it("should compare (and report about) nested tables", function()
local A = {
foo = "bar",
nested = {
foo = 1,
bar = 2,
},
}
local B = {
foo = "bar",
nested = {
foo = 1,
bar = 2,
},
}
assertDeepEqual(A, B)
local C = {
foo = "bar",
nested = {
foo = 1,
bar = 3,
},
}
local success, message = pcall(assertDeepEqual, A, C)
expect(success).to.equal(false)
expect(message:find("first%[nested%]%[bar%] ~= second%[nested%]%[bar%]")).to.be.ok()
end)
it("should be commutative", function()
local equalArgsA = {
foo = "bar",
hello = "world",
}
local equalArgsB = {
foo = "bar",
hello = "world",
}
assertDeepEqual(equalArgsA, equalArgsB)
assertDeepEqual(equalArgsB, equalArgsA)
local nonEqualArgs = {
foo = "bar",
}
expect(function()
assertDeepEqual(equalArgsA, nonEqualArgs)
end).to.throw()
expect(function()
assertDeepEqual(nonEqualArgs, equalArgsA)
end).to.throw()
end)
end