return function()local Y=require(script.Parent)it("\115\104\111\117\108\100 \108\111\097\100 \119\105\116\104 \097\108\108 \112\117\098\108\105\099 \065\080\073\115",function()local i={createElement="\102\117\110\099\116\105\111\110";createFragment="\102\117\110\099\116\105\111\110";createRef="\102\117\110\099\116\105\111\110";forwardRef="\102\117\110\099\116\105\111\110";createBinding="\102\117\110\099\116\105\111\110",joinBindings="\102\117\110\099\116\105\111\110";mount="\102\117\110\099\116\105\111\110";unmount="\102\117\110\099\116\105\111\110",update="\102\117\110\099\116\105\111\110";oneChild="\102\117\110\099\116\105\111\110",setGlobalConfig="\102\117\110\099\116\105\111\110",createContext="\102\117\110\099\116\105\111\110";reify="\102\117\110\099\116\105\111\110";teardown="\102\117\110\099\116\105\111\110",reconcile="\102\117\110\099\116\105\111\110",Component=true;PureComponent=true,Portal=true,Children=true,Event=true,Change=true,Ref=true,None=true;UNSTABLE=true};(expect(Y)).to.be.ok()for i,h in pairs(i)do local x if typeof(h)=="\115\116\114\105\110\103"then x=typeof(Y[i])==h else x=Y[i]~=nil end if not x then local x=typeof(h)=="\098\111\111\108\101\097\110"and"\112\114\101\115\101\110\116"or"\111\102 \116\121\112\101 "..tostring(h)local C=("\069\120\112\101\099\116\101\100 \112\117\098\108\105\099 \065\080\073 \109\101\109\098\101\114 \037\113 \116\111 \098\101 \037\115\044 \098\117\116 \105\110\115\116\101\097\100 \105\116 \119\097\115 \111\102 \116\121\112\101 \037\115"):format(tostring(i),x,typeof(Y[i]))error(C)end end for Y in pairs(Y)do if i[Y]==nil then local i=("\070\111\117\110\100 \117\110\107\110\111\119\110 \112\117\098\108\105\099 \065\080\073 \107\101\121 \037\113\033"):format(tostring(Y))error(i)end end end)end
return function()
	local Roact = require(script.Parent)

	it("should load with all public APIs", function()
		local publicApi = {
			createElement = "function",
			createFragment = "function",
			createRef = "function",
			forwardRef = "function",
			createBinding = "function",
			joinBindings = "function",
			mount = "function",
			unmount = "function",
			update = "function",
			oneChild = "function",
			setGlobalConfig = "function",
			createContext = "function",

			-- These functions are deprecated and throw warnings!
			reify = "function",
			teardown = "function",
			reconcile = "function",

			Component = true,
			PureComponent = true,
			Portal = true,
			Children = true,
			Event = true,
			Change = true,
			Ref = true,
			None = true,
			UNSTABLE = true,
		}

		expect(Roact).to.be.ok()

		for key, valueType in pairs(publicApi) do
			local success
			if typeof(valueType) == "string" then
				success = typeof(Roact[key]) == valueType
			else
				success = Roact[key] ~= nil
			end

			if not success then
				local existence = typeof(valueType) == "boolean" and "present" or "of type " .. tostring(valueType)
				local message = ("Expected public API member %q to be %s, but instead it was of type %s"):format(
					tostring(key),
					existence,
					typeof(Roact[key])
				)

				error(message)
			end
		end

		for key in pairs(Roact) do
			if publicApi[key] == nil then
				local message = ("Found unknown public API key %q!"):format(tostring(key))

				error(message)
			end
		end
	end)
end
