return function()describe("\069\110\117\109\115\046\110\101\119\040\041",function()it("\115\104\111\117\108\100 \116\104\114\111\119",function()(expect(function()return Enums.new("\084\101\115\116\069\110\117\109",{[20]=Vector3.new()})end)).to.throw()end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \117\115\101\114\100\097\116\097",function()(expect(Enums.new("\084\101\115\116\069\110\117\109",{"\070\111\111";Bar=10;[20]="\066\097\122"}))).to.be.a("\117\115\101\114\100\097\116\097")end)end)describe("\069\110\117\109\115\058\071\101\116\083\116\097\110\100\097\114\100\069\110\117\109\115\040\041",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \115\116\097\110\100\097\114\100 \069\110\117\109\115 \105\110\115\116\097\110\099\101",function()(expect(Enums:GetStandardEnums())).to.equal(Enum)end)end)describe("\069\110\117\109\115\058\070\114\111\109\086\097\108\117\101\040\041",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \075\101\121\067\111\100\101\046\087",function()(expect(Enums:FromValue("\075\101\121\067\111\100\101",119))).to.equal(Enum.KeyCode.W)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \084\101\115\116\069\110\117\109\046\070\111\111",function()(expect(Enums:FromValue("\084\101\115\116\069\110\117\109",1))).to.equal(Enums.TestEnum.Foo)end)end)describe("\069\110\117\109\115\058\070\105\110\100\040\041",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \075\101\121\067\111\100\101",function()(expect(Enums:Find("\075\101\121\067\111\100\101"))).to.equal(Enum.KeyCode)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \084\101\115\116\069\110\117\109",function()(expect(Enums:Find("\084\101\115\116\069\110\117\109"))).to.equal(Enums.TestEnum)end)it("\115\104\111\117\108\100\110\'\116 \101\114\114\111\114 \105\102 \069\110\117\109 \100\111\101\115\110\'\116 \101\120\105\115\116",function()(expect(function()Enums:Find("\070\111\111")end)).to.never.throw()end)end)describe("\069\110\117\109\115\046\095\095\109\101\116\097\116\097\098\108\101",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \115\116\114\105\110\103",function()(expect(getmetatable(Enums))).to.be.a("\115\116\114\105\110\103")end)end)describe("\069\110\117\109\115\046\095\095\105\110\100\101\120",function()it("\115\104\111\117\108\100 \114\101\116\117\114\110 \075\101\121\067\111\100\101",function()(expect(Enums.KeyCode)).to.equal(Enum.KeyCode)end)it("\115\104\111\117\108\100 \114\101\116\117\114\110 \084\101\115\116\069\110\117\109",function()(expect(Enums.TestEnum)).to.equal(Enums.TestEnum)end)it("\115\104\111\117\108\100 \116\104\114\111\119",function()(expect(function()_=Enums.nosuchenum end)).to.throw()end)end)describe("\069\110\117\109\115\046\095\095\110\101\119\105\110\100\101\120",function()it("\115\104\111\117\108\100 \116\104\114\111\119",function()(expect(function()Enums.TestEnum=nil end)).to.throw()end)end)end
return function()
    describe("Enums.new()", function()
        it("should throw", function()
            expect(function()
                return Enums.new(
                    "TestEnum",
                    {
                        [20] = Vector3.new()
                    }
                )
            end).to.throw()
        end)

        it("should return userdata", function()
            expect(Enums.new(
                "TestEnum",
                {
                    "Foo", -- Foo = 1
                    Bar = 10, -- Bar = 10
                    [20] = "Baz", -- Baz = 20
                }
            )).to.be.a("userdata")
        end)
    end)

    describe("Enums:GetStandardEnums()", function()
        it("should return standard Enums instance", function()
            expect(Enums:GetStandardEnums()).to.equal(Enum)
        end)
    end)

    describe("Enums:FromValue()", function()
        it("should return KeyCode.W", function()
            expect(Enums:FromValue("KeyCode", 119)).to.equal(Enum.KeyCode.W)
        end)

        it("should return TestEnum.Foo", function()
            expect(Enums:FromValue("TestEnum", 1)).to.equal(Enums.TestEnum.Foo)
        end)
    end)

    describe("Enums:Find()", function()
        it("should return KeyCode", function()
            expect(Enums:Find("KeyCode")).to.equal(Enum.KeyCode)
        end)

        it("should return TestEnum", function()
            expect(Enums:Find("TestEnum")).to.equal(Enums.TestEnum)
        end)

        it("shouldn't error if Enum doesn't exist", function()
            expect(function()
                Enums:Find("Foo")
            end).to.never.throw()
        end)
    end)

    describe("Enums.__metatable", function()
        it("should return string", function()
            expect(getmetatable(Enums)).to.be.a("string")
        end)
    end)

    describe("Enums.__index", function()
        it("should return KeyCode", function()
            expect(Enums.KeyCode).to.equal(Enum.KeyCode)
        end)

        it("should return TestEnum", function()
            expect(Enums.TestEnum).to.equal(Enums.TestEnum)
        end)

        it("should throw", function()
            expect(function()
                _ = Enums.nosuchenum
            end).to.throw()
        end)
    end)

    describe("Enums.__newindex", function()
        it("should throw", function()
            expect(function()
                Enums.TestEnum = nil
            end).to.throw()
        end)
    end)
end