return function()local i=require(script.Parent.None)local W=require(script.Parent.assign)it("\115\104\111\117\108\100 \097\099\099\101\112\116 \122\101\114\111 \097\100\100\105\116\105\111\110\097\108 \116\097\098\108\101\115",function()local i={}local K=W(i);(expect(i)).to.equal(K)end)it("\115\104\111\117\108\100 \109\101\114\103\101 \109\117\108\116\105\112\108\101 \116\097\098\108\101\115 \111\110\116\111 \116\104\101 \103\105\118\101\110 \116\097\114\103\101\116 \116\097\098\108\101",function()local i={a=5,b=6}local K={b=7;c=8}local D={b=8}W(i,K,D);(expect(i.a)).to.equal(5);(expect(i.b)).to.equal(D.b);(expect(i.c)).to.equal(K.c)end)it("\115\104\111\117\108\100 \114\101\109\111\118\101 \107\101\121\115 \105\102 \115\112\101\099\105\102\105\101\100 \097\115 \078\111\110\101",function()local K={foo=2,bar=3}local D={foo=i}W(K,D);(expect(K.foo)).to.equal(nil);(expect(K.bar)).to.equal(3)end)it("\115\104\111\117\108\100 \114\101-\097\100\100 \107\101\121\115 \105\102 \115\112\101\099\105\102\105\101\100 \097\102\116\101\114 \078\111\110\101",function()local K={foo=2}local D={foo=i}local u={foo=3}W(K,D,u);(expect(K.foo)).to.equal(u.foo)end)end
return function()
	local None = require(script.Parent.None)

	local assign = require(script.Parent.assign)

	it("should accept zero additional tables", function()
		local input = {}
		local result = assign(input)

		expect(input).to.equal(result)
	end)

	it("should merge multiple tables onto the given target table", function()
		local target = {
			a = 5,
			b = 6,
		}

		local source1 = {
			b = 7,
			c = 8,
		}

		local source2 = {
			b = 8,
		}

		assign(target, source1, source2)

		expect(target.a).to.equal(5)
		expect(target.b).to.equal(source2.b)
		expect(target.c).to.equal(source1.c)
	end)

	it("should remove keys if specified as None", function()
		local target = {
			foo = 2,
			bar = 3,
		}

		local source = {
			foo = None,
		}

		assign(target, source)

		expect(target.foo).to.equal(nil)
		expect(target.bar).to.equal(3)
	end)

	it("should re-add keys if specified after None", function()
		local target = {
			foo = 2,
		}

		local source1 = {
			foo = None,
		}

		local source2 = {
			foo = 3,
		}

		assign(target, source1, source2)

		expect(target.foo).to.equal(source2.foo)
	end)
end