
KeylessUniversal

local passes, fails, aliasIssues = 0, 0, 0
local runningTests = 0
local function getGlobal(path)
local env = (getgenv and getgenv()) or getfenv(2)
for segment in string.gmatch(path, "([^.]+)") do
if env then
env = env[segment]
else
break
end
end
return env
end
local function test(globalName, aliases, callback)
runningTests = runningTests + 1
task.spawn(function()
if not callback then
print("⏺️ " .. globalName)
elseif not getGlobal(globalName) then
fails = fails + 1
warn("⛔ Global `" .. globalName .. "` does not exist.")
else
local success, message = pcall(callback)
if success then
passes = passes + 1
print("✅ " .. globalName .. (message and " • " .. tostring(message) or ""))
else
fails = fails + 1
warn("⛔ " .. globalName .. " test failed: " .. tostring(message))
end
end
local missingAliases = {}
if aliases and type(aliases) == "table" then
for _, alias in ipairs(aliases) do
if getGlobal(alias) == nil then
table.insert(missingAliases, alias)
end
end
end
if #missingAliases > 0 then
aliasIssues = aliasIssues + 1
warn("⚠️ Missing aliases for test \"" .. globalName .. "\": " .. table.concat(missingAliases, ", "))
end
runningTests = runningTests - 1
end)
end
print("UNC Environment Check")
print("✅ - Pass, ⛔ - Fail, ⏺️ - No test, ⚠️ - Missing aliases\n")
-- Cache
test("cache.invalidate", {}, function()
local container = Instance.new("Folder")
local part = Instance.new("Part", container)
local original = container:FindFirstChild("Part")
cache.invalidate(original)
local invalidated = container:FindFirstChild("Part")
assert(original ~= invalidated, "cache.invalidate: The cached reference was not updated as expected.")
end)
test("cache.iscached", {}, function()
local part = Instance.new("Part")
assert(cache.iscached(part), "cache.iscached: Instance should be cached initially.")
cache.invalidate(part)
assert(not cache.iscached(part), "cache.iscached: Instance should not be cached after invalidation.")
end)
test("cache.replace", {}, function()
local part = Instance.new("Part")
local fire = Instance.new("Fire")
cache.replace(part, fire)
assert(not cache.iscached(part),
"cache.replace: Original instance should not be cached after replacement.")
assert(cache.iscached(fire),
"cache.replace: Replacement instance should be cached after replacement.")
end)
test("cloneref", {}, function()
local part = Instance.new("Part")
local clone = cloneref(part)
assert(part ~= clone, "cloneref: Clone should be a distinct instance from the original.")
clone.Name = "Test"
assert(part.Name == "Test", "cloneref: Changes in the clone did not propagate to the original instance.")
end)
test("compareinstances", {}, function()
local part = Instance.new("Part")
local clone = cloneref(part)
assert(part ~= clone, "compareinstances: Clone should be a distinct instance from the original.")
assert(compareinstances(part, clone), "compareinstances: The clone is not considered equivalent to the original.")
end)
-- Closures
test("clonefunction", {}, function()
local function originalFunction()
return "success"
end
local clonedFunction = clonefunction(originalFunction)
assert(originalFunction() == clonedFunction(), "clonefunction: Cloned function did not return the same value as the original.")
assert(originalFunction ~= clonedFunction, "clonefunction: Cloned function should be a distinct instance from the original.")
end)
test("getfunctionhash", {}, function()
local function sampleFunction()
return "sample"
end
local hash1 = getfunctionhash(sampleFunction)
local hash2 = getfunctionhash(sampleFunction)
assert(type(hash1) == "string", "getfunctionhash: The function hash should be a string.")
assert(hash1 == hash2, "getfunctionhash: The hash for the same function must be consistent.")
local clonedFunction = clonefunction(sampleFunction)
local hashCloned = getfunctionhash(clonedFunction)
assert(hash1 == hashCloned, "getfunctionhash: The hash of a cloned function should match the original function hash.")
local function anotherFunction()
return "another"
end
local hash3 = getfunctionhash(anotherFunction)
assert(hash1 ~= hash3, "getfunctionhash: Different functions should have different hashes.")
end)
test("hookfunction", {"replaceclosure"}, function()
local function originalFunction()
return true
end
local originalHook = hookfunction(originalFunction, function()
return false
end)
assert(originalFunction() == false, "hookfunction: After hooking, the function should return false.")
assert(originalHook() == true, "hookfunction: The returned original function should return true.")
assert(originalFunction ~= originalHook, "hookfunction: Hooked function reference should differ from the original function reference.")
end)
test("hookmetamethod", {}, function()
local metaFunction = newcclosure(function() return false end)
local object = setmetatable({}, { __index = metaFunction, __metatable = "Locked!" })
local originalMetaMethod = hookmetamethod(object, "__index", function() return true end)
assert(object.anyKey == true, "hookmetamethod: Metamethod hook did not change the behavior as expected.")
assert(originalMetaMethod() == false, "hookmetamethod: Original metamethod should return false.")
end)
test("iscclosure", {}, function()
assert(iscclosure(print) == true, "iscclosure: 'print' should be detected as a C closure.")
assert(iscclosure(function() end) == false, "iscclosure: A Lua function should not be a C closure.")
end)
test("islclosure", {}, function()
assert(islclosure(print) == false, "islclosure: 'print' should not be detected as a Lua closure.")
assert(islclosure(function() end) == true, "islclosure: A Lua executor function should be detected as a Lua closure.")
end)
test("isexecutorclosure", {"checkclosure", "isourclosure"}, function()
assert(isexecutorclosure(isexecutorclosure) == true, "isexecutorclosure: Executor global function should be detected as an executor closure.")
assert(isexecutorclosure(newcclosure(function() end)) == true, "isexecutorclosure: New C closure should be detected as an executor closure.")
assert(isexecutorclosure(function() end) == true, "isexecutorclosure: Lua closure should be detected as an executor closure.")
assert(isexecutorclosure(print) == false, "isexecutorclosure: Roblox global function 'print' should not be detected as an executor closure.")
end)
test("newcclosure", {}, function()
local function originalFunction()
return true
end
local cClosure = newcclosure(originalFunction)
assert(originalFunction() == cClosure(), "newcclosure: The new C closure did not return the expected result.")
assert(originalFunction ~= cClosure, "newcclosure: The new C closure should be distinct from the original.")
assert(iscclosure(cClosure), "newcclosure: The new closure should be detected as a C closure.")
end)
-- Crypt
test("crypt.base64decode", {"crypt.base64.decode", "crypt.base64_decode", "base64.decode", "base64_decode"}, function()
local base64Input = "dGVzdA=="
local expectedOutput = "test"
local decodedValue = crypt.base64decode(base64Input)
assert(decodedValue == expectedOutput, "crypt.base64decode: Expected '" .. expectedOutput .. "', got '" .. tostring(decodedValue) .. "'")
end)
test("crypt.base64encode", {"crypt.base64.encode", "crypt.base64_encode", "base64.encode", "base64_encode"}, function()
local inputString = "test"
local expectedEncoded = "dGVzdA=="
local encodedValue = crypt.base64encode(inputString)
assert(encodedValue == expectedEncoded, "crypt.base64encode: Expected '" .. expectedEncoded .. "', got '" .. tostring(encodedValue) .. "'")
end)
test("crypt.decrypt", {}, function()
local key = crypt.generatekey()
local iv = crypt.generatekey()
local originalMessage = "test"
local encryptedData = crypt.encrypt(originalMessage, key, iv, "CBC")
local decryptedMessage = crypt.decrypt(encryptedData, key, iv, "CBC")
assert(decryptedMessage == originalMessage, "crypt.decrypt: Expected decrypted message '" .. originalMessage .. "', but got '" .. tostring(decryptedMessage) .. "'")
end)
test("crypt.encrypt", {}, function()
local key = crypt.generatekey()
local originalMessage = "test"
local encryptedData, generatedIV = crypt.encrypt(originalMessage, key, nil, "CBC")
assert(generatedIV, "crypt.encrypt: Expected an IV to be generated when none is provided.")
local decryptedMessage = crypt.decrypt(encryptedData, key, generatedIV, "CBC")
assert(decryptedMessage == originalMessage, "crypt.encrypt: Decrypted message mismatch. Expected '" .. originalMessage .. "', got '" .. tostring(decryptedMessage) .. "'")
end)
test("crypt.generatebytes", {}, function()
local byteCount = math.random(10, 100)
local base64Bytes = crypt.generatebytes(byteCount)
local decodedBytes = crypt.base64decode(base64Bytes)
assert(#decodedBytes == byteCount, "crypt.generatebytes: Expected decoded byte length of " .. byteCount .. " but got " .. #decodedBytes)
end)
test("crypt.generatekey", {}, function()
local key = crypt.generatekey()
local decodedKey = crypt.base64decode(key)
assert(#decodedKey == 32, "crypt.generatekey: Expected a 32-byte key when decoded, but got " .. #decodedKey .. " bytes.")
end)
test("crypt.hash", {}, function()
local message = "test"
local algorithms = {'sha1', 'sha384', 'sha512', 'md5', 'sha256', 'sha3-224', 'sha3-256', 'sha3-512'}
for _, algorithm in ipairs(algorithms) do
local hashResult = crypt.hash(message, algorithm)
assert(hashResult and type(hashResult) == "string" and #hashResult > 0,
"crypt.hash: Expected a non-empty hash string for algorithm '" .. algorithm .. "'.")
end
end)
-- Debug
test("debug.getconstants", {}, function()
local function sampleFunction()
local num = 5000 .. 50000
print("Hello, world!", num, warn)
end
local constants = debug.getconstants(sampleFunction)
assert(constants[1] == 50000, "debug.getconstants: Expected first constant to be 50000, got " .. tostring(constants[1]))
assert(constants[2] == "print", "debug.getconstants: Expected second constant to be 'print', got " .. tostring(constants[2]))
assert(constants[3] == nil, "debug.getconstants: Expected third constant to be nil, got " .. tostring(constants[3]))
assert(constants[4] == "Hello, world!", "debug.getconstants: Expected fourth constant to be 'Hello, world!', got " .. tostring(constants[4]))
assert(constants[5] == "warn", "debug.getconstants: Expected fifth constant to be 'warn', got " .. tostring(constants[5]))
end)
test("debug.getconstant", {}, function()
local function sampleFunction()
print("Hello, world!")
end
local const1 = debug.getconstant(sampleFunction, 1)
local const2 = debug.getconstant(sampleFunction, 2)
local const3 = debug.getconstant(sampleFunction, 3)
assert(const1 == "print", "debug.getconstant: Expected first constant to be 'print', got " .. tostring(const1))
assert(const2 == nil, "debug.getconstant: Expected second constant to be nil, got " .. tostring(const2))
assert(const3 == "Hello, world!", "debug.getconstant: Expected third constant to be 'Hello, world!', got " .. tostring(const3))
end)
test("debug.getinfo", {}, function()
local expectedTypes = {
source = "string",
short_src = "string",
func = "function",
what = "string",
currentline = "number",
name = "string",
nups = "number",
numparams = "number",
is_vararg = "number",
}
local function sampleFunction(...)
print(...)
end
local info = debug.getinfo(sampleFunction)
for key, expectedType in pairs(expectedTypes) do
assert(info[key] ~= nil, "debug.getinfo: Expected info to include field '" .. key .. "', but it is nil.")
local actualType = type(info[key])
assert(actualType == expectedType, "debug.getinfo: Field '" .. key .. "' expected to be '" .. expectedType .. "', but got '" .. actualType .. "'.")
end
end)
test("debug.getproto", {}, function()
local function sampleFunction()
local function innerProto()
return true
end
end
local protos = debug.getproto(sampleFunction, 1, true)
local protoFunc = protos and protos[1]
local realProtoFunc = debug.getproto(sampleFunction, 1)
assert(protoFunc, "debug.getproto: Failed to retrieve the inner function.")
assert(protoFunc() == true, "debug.getproto: The retrieved inner function did not return true.")
local realResult = realProtoFunc and realProtoFunc()
assert(realResult == true, "debug.getproto: The real proto function did not return true. (Proto return values may be disabled on this executor)")
end)
test("debug.getprotos", {}, function()
local function sampleFunction()
local function inner1()
return true
end
local function inner2()
return true
end
local function inner3()
return true
end
end
local protosList = debug.getprotos(sampleFunction)
for i, _ in ipairs(protosList) do
local protoEntry = debug.getproto(sampleFunction, i, true)
local protoFunc = protoEntry and protoEntry[1]
local realProtoFunc = debug.getproto(sampleFunction, i)
assert(protoFunc and protoFunc() == true, "debug.getprotos: Failed retrieving or validating inner function at index " .. i)
local realResult = realProtoFunc and realProtoFunc()
assert(realResult == true, "debug.getprotos: Real proto function at index " .. i .. " did not return true. (Proto return values may be disabled)")
end
end)
test("debug.getstack", {}, function()
local concatenated = "a" .. "b"
local singleStack = debug.getstack(1, 1)
local stackTable = debug.getstack(1)
assert(singleStack == concatenated, "debug.getstack: Expected first stack item to be '" .. concatenated .. "', got '" .. tostring(singleStack) .. "'.")
assert(stackTable[1] == concatenated, "debug.getstack: Expected first item in stack table to be '" .. concatenated .. "', got '" .. tostring(stackTable[1]) .. "'.")
end)
test("debug.getupvalue", {}, function()
local capturedUpvalue = function() end
local function sampleFunction()
print(capturedUpvalue)
end
local retrievedUpvalue = debug.getupvalue(sampleFunction, 1)
assert(retrievedUpvalue == capturedUpvalue, "debug.getupvalue: Expected upvalue to match; got " .. tostring(retrievedUpvalue))
end)
test("debug.getupvalues", {}, function()
local capturedUpvalue = function() end
local function sampleFunction()
print(capturedUpvalue)
end
local upvalues = debug.getupvalues(sampleFunction)
assert(upvalues[1] == capturedUpvalue, "debug.getupvalues: Expected first upvalue to match the captured value; got " .. tostring(upvalues[1]))
end)
test("debug.setconstant", {}, function()
local function sampleFunction()
return "fail"
end
debug.setconstant(sampleFunction, 1, "success")
local result = sampleFunction()
assert(result == "success", "debug.setconstant: Expected sampleFunction() to return 'success', got '" .. tostring(result) .. "'.")
end)
test("debug.setstack", {}, function()
local function sampleFunction()
return "fail", debug.setstack(1, 1, "success")
end
local result = sampleFunction()
assert(result == "success", "debug.setstack: Expected sampleFunction() to return 'success', got '" .. tostring(result) .. "'.")
end)
test("debug.setupvalue", {}, function()
local function innerUpvalue()
return "fail"
end
local function sampleFunction()
return innerUpvalue()
end
debug.setupvalue(sampleFunction, 1, function() return "success" end)
local result = sampleFunction()
assert(result == "success", "debug.setupvalue: Expected sampleFunction() to return 'success', got '" .. tostring(result) .. "'.")
end)
-- Drawing
test("cleardrawcache", {}, function()
local dummyDrawing = Drawing.new("Circle")
dummyDrawing.Visible = true
local success = pcall(function()
cleardrawcache()
end)
assert(success, "cleardrawcache: Clearing the drawing cache produced an error.")
end)
test("Drawing.Fonts", {}, function()
assert(Drawing.Fonts.UI == 0, "Drawing.Fonts.UI expected value 0, got " .. tostring(Drawing.Fonts.UI))
assert(Drawing.Fonts.System == 1, "Drawing.Fonts.System expected value 1, got " .. tostring(Drawing.Fonts.System))
assert(Drawing.Fonts.Plex == 2, "Drawing.Fonts.Plex expected value 2, got " .. tostring(Drawing.Fonts.Plex))
assert(Drawing.Fonts.Monospace == 3, "Drawing.Fonts.Monospace expected value 3, got " .. tostring(Drawing.Fonts.Monospace))
end)
test("Drawing.new", {}, function()
local drawing = Drawing.new("Square")
drawing.Visible = false
local destroySuccess, err = pcall(function()
drawing:Destroy()
end)
assert(destroySuccess, "Drawing.new: Calling Destroy() threw an error: " .. tostring(err))
end)
test("getrenderproperty", {}, function()
local drawing = Drawing.new("Image")
drawing.Visible = true
local visibleValue = getrenderproperty(drawing, "Visible")
assert(type(visibleValue) == "boolean", "getrenderproperty: Expected 'Visible' to be a boolean, got " .. type(visibleValue))
local success, colorValue = pcall(function()
return getrenderproperty(drawing, "Color")
end)
if not success or colorValue == nil then
return "getrenderproperty: 'Color' property is not supported by this drawing object."
else
assert(type(colorValue) == "string" or type(colorValue) == "table",
"getrenderproperty: 'Color' exists but has an unexpected type: " .. type(colorValue))
end
end)
test("isrenderobj", {}, function()
local drawing = Drawing.new("Image")
drawing.Visible = true
assert(isrenderobj(drawing) == true, "isrenderobj: Expected true for a valid Drawing instance but got false.")
local nonRenderObject = newproxy and newproxy() or {}
assert(isrenderobj(nonRenderObject) == false, "isrenderobj: Expected false for a non-render object, but got true.")
end)
test("setrenderproperty", {}, function()
local drawing = Drawing.new("Square")
drawing.Visible = true
setrenderproperty(drawing, "Visible", false)
assert(drawing.Visible == false, "setrenderproperty: Expected 'Visible' to be false after setting, but got " .. tostring(drawing.Visible))
end)
-- Environment
test("getgc", {}, function()
local gcTable = getgc()
assert(type(gcTable) == "table", "getgc: Expected a table, got " .. type(gcTable))
assert(#gcTable > 0, "getgc: Expected a non-empty table, but got 0 items.")
end)
test("getgenv", {}, function()
local env = getgenv()
env.__TEST_GLOBAL = true
assert(__TEST_GLOBAL == true, "getgenv: Failed to set the global variable '__TEST_GLOBAL'.")
env.__TEST_GLOBAL = nil
end)
test("getrenv", {}, function()
local executorEnv = getrenv()
assert(_G ~= executorEnv._G, "getrenv: Expected executor _G to differ from the game's _G.")
end)
-- Filesystem
if isfolder and makefolder and delfolder then
if isfolder(".tests") then
delfolder(".tests")
end
makefolder(".tests")
end
test("appendfile", {}, function()
writefile(".tests/appendfile.txt", "su")
appendfile(".tests/appendfile.txt", "cce")
appendfile(".tests/appendfile.txt", "ss")
local content = readfile(".tests/appendfile.txt")
assert(content == "success", "appendfile: Expected file content 'success'; got '" .. tostring(content) .. "'.")
end)
test("delfile", {}, function()
writefile(".tests/delfile.txt", "Hello, world!")
delfile(".tests/delfile.txt")
local exists = isfile(".tests/delfile.txt")
assert(exists == false, "delfile: Expected file to be deleted; isfile returned " .. tostring(exists) .. ".")
end)
test("delfolder", {}, function()
makefolder(".tests/delfolder")
delfolder(".tests/delfolder")
local exists = isfolder(".tests/delfolder")
assert(exists == false, "delfolder: Expected folder to be deleted; isfolder returned " .. tostring(exists) .. ".")
end)
test("getcustomasset", {}, function()
writefile(".tests/getcustomasset.txt", "success")
local assetUrl = getcustomasset(".tests/getcustomasset.txt")
assert(type(assetUrl) == "string", "getcustomasset: Expected a string; got " .. type(assetUrl) .. ".")
assert(#assetUrl > 0, "getcustomasset: Returned an empty string.")
local matched = string.match(assetUrl, "rbxasset://")
assert(matched == "rbxasset://", "getcustomasset: Expected URL starting with 'rbxasset://'; got '" .. tostring(assetUrl) .. "'.")
end)
test("isfile", {}, function()
writefile(".tests/isfile.txt", "success")
assert(isfile(".tests/isfile.txt") == true, "isfile: Expected true for an existing file.")
assert(isfile(".tests") == false, "isfile: Expected false when checking a folder.")
assert(isfile(".tests/doesnotexist.exe") == false, "isfile: Expected false for a non-existent path; got " .. tostring(isfile(".tests/doesnotexist.exe")) .. ".")
end)
test("isfolder", {}, function()
assert(isfolder(".tests") == true, "isfolder: Expected true for an existing folder.")
assert(isfolder(".tests/doesnotexist.exe") == false, "isfolder: Expected false for a non-existent folder; got " .. tostring(isfolder(".tests/doesnotexist.exe")) .. ".")
end)
test("listfiles", {}, function()
makefolder(".tests/listfiles")
writefile(".tests/listfiles/test_1.txt", "success")
writefile(".tests/listfiles/test_2.txt", "success")
local files = listfiles(".tests/listfiles")
assert(#files == 2, "listfiles: Expected 2 files; got " .. #files .. ".")
for _, file in ipairs(files) do
assert(isfile(file), "listfiles: Expected a file path; got " .. tostring(file) .. ".")
assert(readfile(file) == "success", "listfiles: File content does not match expectations.")
end
makefolder(".tests/listfiles_2")
makefolder(".tests/listfiles_2/test_1")
makefolder(".tests/listfiles_2/test_2")
local folders = listfiles(".tests/listfiles_2")
assert(#folders == 2, "listfiles: Expected 2 folders; got " .. #folders .. ".")
for _, folder in ipairs(folders) do
assert(isfolder(folder), "listfiles: Expected a folder path; got " .. tostring(folder) .. ".")
end
end)
test("loadfile", {}, function()
writefile(".tests/loadfile.txt", "return ... + 1")
local fileFunc = assert(loadfile(".tests/loadfile.txt"))
local result = fileFunc(1)
assert(result == 2, "loadfile: Expected result 2 when calling function with argument 1; got " .. tostring(result) .. ".")
writefile(".tests/loadfile.txt", "f")
local callback, err = loadfile(".tests/loadfile.txt")
assert(not callback and err, "loadfile: Expected a compiler error message for invalid file content.")
end)
test("makefolder", {}, function()
makefolder(".tests/makefolder")
assert(isfolder(".tests/makefolder") == true, "makefolder: Expected folder '.tests/makefolder' to be created.")
end)
test("readfile", {}, function()
writefile(".tests/readfile.txt", "success")
local content = readfile(".tests/readfile.txt")
assert(content == "success", "readfile: Expected content 'success'; got '" .. tostring(content) .. "'.")
end)
test("writefile", {}, function()
writefile(".tests/writefile.txt", "success")
local content = readfile(".tests/writefile.txt")
assert(content == "success", "writefile: Expected content 'success'; got '" .. tostring(content) .. "'.")
local requiresFileExt = pcall(function()
writefile(".tests/writefile", "success")
assert(isfile(".tests/writefile.txt"), "writefile: Expected file with missing extension to be saved as '.txt'.")
end)
if not requiresFileExt then
return "writefile: This executor requires a file extension in writefile."
end
end)
-- Input
test("isrbxactive", {"isgameactive"}, function()
local activeStatus = isrbxactive()
assert(type(activeStatus) == "boolean", "isrbxactive: Expected a boolean value but received " .. type(activeStatus))
end)
-- Instances
test("fireclickdetector", {}, function()
local detector = Instance.new("ClickDetector")
fireclickdetector(detector, 50, "MouseHoverEnter")
end)
test("fireproximityprompt", {}, function()
local part = Instance.new("Part")
local prompt = Instance.new("ProximityPrompt")
prompt.Parent = part
fireproximityprompt(prompt)
end)
test("firetouchinterest", {}, function()
local partA = Instance.new("Part")
local partB = Instance.new("Part")
local successBegin, errBegin = pcall(function()
firetouchinterest(partA, partB, 0)
end)
assert(successBegin, "firetouchinterest: Failed to fire touch begin event: " .. tostring(errBegin))
local successEnd, errEnd = pcall(function()
firetouchinterest(partA, partB, 1)
end)
assert(successEnd, "firetouchinterest: Failed to fire touch end event: " .. tostring(errEnd))
end)
test("getcallbackvalue", {}, function()
local bindable = Instance.new("BindableFunction")
local function callbackFunction() end
bindable.OnInvoke = callbackFunction
local retrievedCallback = getcallbackvalue(bindable, "OnInvoke")
assert(retrievedCallback == callbackFunction, "getcallbackvalue: Retrieved callback does not match the expected function.")
end)
test("gethui", {}, function()
local huiInstance = gethui()
assert(typeof(huiInstance) == "Instance", "gethui: Expected an Instance, got " .. typeof(huiInstance))
end)
test("getinstances", {}, function()
local instancesList = getinstances()
assert(instancesList[1]:IsA("Instance"), "getinstances: The first element is not an Instance.")
end)
test("getnilinstances", {}, function()
local nilInstances = getnilinstances()
assert(nilInstances[1]:IsA("Instance"), "getnilinstances: The first element is not an Instance.")
assert(nilInstances[1].Parent == nil, "getnilinstances: The first instance is not parented to nil.")
end)
test("isscriptable", {}, function()
local fireInstance = Instance.new("Fire")
assert(isscriptable(fireInstance, "size_xml") == false, "isscriptable: Expected false for non-scriptable property 'size_xml'.")
assert(isscriptable(fireInstance, "Size") == true, "isscriptable: Expected true for scriptable property 'Size'.")
end)
-- Metatable
test("getrawmetatable", {}, function()
local expectedMT = { __metatable = "Locked!" }
local obj = setmetatable({}, expectedMT)
local rawMT = getrawmetatable(obj)
assert(rawMT == expectedMT, "getrawmetatable: Expected metatable does not match the actual metatable.")
end)
test("isreadonly", {}, function()
local obj = {}
table.freeze(obj)
local readonlyStatus = isreadonly(obj)
assert(readonlyStatus, "isreadonly: Expected a frozen table to be read-only, but got false.")
end)
test("setrawmetatable", {}, function()
local obj = setmetatable({}, { __index = function() return false end, __metatable = "Locked!" })
local newMT = { __index = function() return true end }
local returnedObj = setrawmetatable(obj, newMT)
assert(returnedObj == obj, "setrawmetatable: Expected to return the original object, but did not.")
assert(obj.test == true, "setrawmetatable: Expected obj.test to be true from the new metatable; got " .. tostring(obj.test))
end)
test("setreadonly", {}, function()
local obj = { success = false }
table.freeze(obj)
setreadonly(obj, false)
obj.success = true
assert(obj.success, "setreadonly: Table modification failed; expected obj.success to be true, but got " .. tostring(obj.success))
end)
-- Miscellaneous
test("identifyexecutor", {"getexecutorname"}, function()
local executorName, executorVersion = identifyexecutor()
assert(type(executorName) == "string", "identifyexecutor: Expected executor name to be a string, got " .. type(executorName))
if type(executorVersion) == "string" then
return "Returns version as a string: " .. executorVersion
else
return "Does not return a version string"
end
end)
test("lz4compress", {}, function()
local rawData = "Hello, world!"
local compressedData = lz4compress(rawData)
assert(type(compressedData) == "string", "lz4compress: Expected compressed data to be a string, got " .. type(compressedData))
local decompressedData = lz4decompress(compressedData, #rawData)
assert(decompressedData == rawData, "lz4compress/lz4decompress: Decompressed data did not match original")
end)
test("lz4decompress", {}, function()
local rawData = "Hello, world!"
local compressedData = lz4compress(rawData)
assert(type(compressedData) == "string", "lz4decompress: Expected compressed data to be a string, got " .. type(compressedData))
local decompressedData = lz4decompress(compressedData, #rawData)
assert(decompressedData == rawData, "lz4decompress: Decompressed data did not match original")
end)
test("request", {"http.request", "http_request"}, function()
local response = request({
Url = "https://httpbin.org/user-agent",
Method = "GET",
})
assert(type(response) == "table", "request: Expected response to be a table, got " .. type(response))
assert(response.StatusCode == 200, "request: Expected status code 200, got " .. tostring(response.StatusCode))
local jsonData = game:GetService("HttpService"):JSONDecode(response.Body)
assert(type(jsonData) == "table" and type(jsonData["user-agent"]) == "string", "request: Response body is not as expected")
return "User-Agent: " .. jsonData["user-agent"]
end)
test("setclipboard", {}, function()
local clipboardText = "Hello, clipboard!"
local success, err = pcall(function()
setclipboard(clipboardText)
end)
assert(success, "setclipboard: Expected to set clipboard text without error, but got: " .. tostring(err))
return "Clipboard set to: " .. clipboardText
end)
test("setfpscap", {}, function()
local RunService = game:GetService("RunService")
local function measureFPS()
local totalFPS, count = 0, 5
for i = 1, count do
local dt = RunService.RenderStepped:Wait()
totalFPS = totalFPS + (1 / dt)
end
return math.round(totalFPS / count)
end
setfpscap(60)
local fpsAt60 = measureFPS()
setfpscap(0)
local fpsAt0 = measureFPS()
return fpsAt60 .. "fps @60 cap • " .. fpsAt0 .. "fps @0 cap"
end)
test("queue_on_teleport", {}, function()
local success, err = pcall(function()
queue_on_teleport("print('Teleport script queued')")
end)
assert(success, "queue_on_teleport: Expected no error when queuing a teleport script, but got: " .. tostring(err))
end)
-- Reflection
test("checkcaller", {}, function()
local isMainCaller = checkcaller()
assert(isMainCaller, "checkcaller: Expected main scope to return true, but got false.")
end)
test("gethiddenproperty", {}, function()
local fireInstance = Instance.new("Fire")
local propertyValue, isHidden = gethiddenproperty(fireInstance, "size_xml")
assert(propertyValue == 5, "gethiddenproperty: Expected 'size_xml' to be 5; got " .. tostring(propertyValue))
assert(isHidden == true, "gethiddenproperty: Expected 'size_xml' to be hidden; got " .. tostring(isHidden))
end)
test("getthreadidentity", {"getidentity", "getthreadcontext"}, function()
local threadIdentity = getthreadidentity()
assert(type(threadIdentity) == "number", "getthreadidentity: Expected a number; got " .. type(threadIdentity))
end)
test("sethiddenproperty", {}, function()
local fireInstance = Instance.new("Fire")
local success = sethiddenproperty(fireInstance, "size_xml", 10)
assert(success, "sethiddenproperty: Expected sethiddenproperty to return true for setting 'size_xml' to 10, but got false.")
local newValue = gethiddenproperty(fireInstance, "size_xml")
assert(newValue == 10, "sethiddenproperty: Expected 'size_xml' to be updated to 10; got " .. tostring(newValue))
end)
test("setscriptable", {}, function()
local fireInstance = Instance.new("Fire")
local wasScriptable = setscriptable(fireInstance, "size_xml", true)
assert(wasScriptable == false, "setscriptable: Expected initial state for 'size_xml' to be non-scriptable, but got " .. tostring(wasScriptable))
assert(isscriptable(fireInstance, "size_xml") == true, "setscriptable: 'size_xml' should be scriptable after setting, but it is not.")
local anotherFire = Instance.new("Fire")
assert(isscriptable(anotherFire, "size_xml") == false, "setscriptable: Scriptable state should not persist between instances; new instance returned true.")
end)
test("setthreadidentity", {"setidentity", "setthreadcontext"}, function()
setthreadidentity(3)
local threadIdentity = getthreadidentity()
assert(threadIdentity == 3, "setthreadidentity: Expected thread identity to be 3 after setting, but got " .. tostring(threadIdentity))
end)
-- Scripts
local function shallowEqual(t1, t2)
if t1 == t2 then
return true
end
local UNIQUE_TYPES = {
["function"] = true,
["table"] = true,
["userdata"] = true,
["thread"] = true,
}
for k, v in pairs(t1) do
if UNIQUE_TYPES[type(v)] then
if type(t2[k]) ~= type(v) then
return false
end
elseif t2[k] ~= v then
return false
end
end
for k, v in pairs(t2) do
if UNIQUE_TYPES[type(v)] then
if type(t1[k]) ~= type(v) then
return false
end
elseif t1[k] ~= v then
return false
end
end
return true
end
test("getcallingscript", {}, function()
local function retrieveCallingScript()
return getcallingscript()
end
local callingScript = retrieveCallingScript()
assert(typeof(callingScript) == "Instance", "getcallingscript: Expected an Instance, got " .. typeof(callingScript))
local scriptClass = callingScript.ClassName
local validScriptType = (scriptClass == "LocalScript" or scriptClass == "Script" or scriptClass == "ModuleScript")
assert(validScriptType, "getcallingscript: Expected caller to be a Script/LocalScript/ModuleScript, got " .. scriptClass)
return "Caller script: " .. callingScript:GetFullName()
end)
test("getloadedmodules", {}, function()
local modules = getloadedmodules()
assert(type(modules) == "table", "getloadedmodules: Expected a table, got " .. type(modules))
assert(#modules > 0, "getloadedmodules: Table is empty")
assert(typeof(modules[1]) == "Instance", "getloadedmodules: First value is not an Instance")
assert(modules[1]:IsA("ModuleScript"), "getloadedmodules: First value is not a ModuleScript")
end)
test("getscriptbytecode", {"dumpstring"}, function()
local animate = game:GetService("Players").LocalPlayer.Character.Animate
local bytecode = getscriptbytecode(animate)
assert(type(bytecode) == "string", "getscriptbytecode: Expected a string for Character.Animate (a " .. animate.ClassName .. "), got " .. type(bytecode))
end)
test("getscriptclosure", {"getscriptfunction"}, function()
local module = game:GetService("CoreGui").RobloxGui.Modules.Common.Constants
local expectedConstants = getrenv().require(module)
local generatedConstants = getscriptclosure(module)()
assert(expectedConstants ~= generatedConstants, "getscriptclosure: Generated module should not match the original reference")
assert(shallowEqual(expectedConstants, generatedConstants), "getscriptclosure: Generated constant table is not shallow equal to the expected constants")
end)
test("getscripthash", {}, function()
local animate = game:GetService("Players").LocalPlayer.Character.Animate:Clone()
local originalHash = getscripthash(animate)
local originalSource = animate.Source
animate.Source = "print('Hello, world!')"
task.defer(function()
animate.Source = originalSource
end)
local modifiedHash = getscripthash(animate)
assert(originalHash ~= modifiedHash, "getscripthash: Expected different hash after modifying the script")
assert(modifiedHash == getscripthash(animate), "getscripthash: Expected same hash when source remains unchanged")
end)
test("getrunningscripts", {}, function()
local runningScripts = getrunningscripts()
assert(type(runningScripts) == "table", "getrunningscripts: Expected a table, got " .. type(runningScripts))
assert(#runningScripts > 0, "getrunningscripts: No running scripts returned")
assert(typeof(runningScripts[1]) == "Instance", "getrunningscripts: First value is not an Instance")
local className = runningScripts[1].ClassName
assert(className == "ModuleScript" or className == "LocalScript", "getrunningscripts: First value is not a ModuleScript or LocalScript")
end)
test("getscripts", {}, function()
local scripts = getscripts()
assert(type(scripts) == "table", "getscripts: Expected a table, got " .. type(scripts))
assert(#scripts > 0, "getscripts: No scripts returned")
assert(typeof(scripts[1]) == "Instance", "getscripts: First value is not an Instance")
local className = scripts[1].ClassName
assert(className == "ModuleScript" or className == "LocalScript", "getscripts: First value is not a ModuleScript or LocalScript")
end)
test("getsenv", {}, function()
local animate = game:GetService("Players").LocalPlayer.Character.Animate
local env = getsenv(animate)
assert(type(env) == "table", "getsenv: Expected a table for " .. animate.ClassName .. ", got " .. type(env))
assert(env.script == animate, "getsenv: The 'script' global does not match " .. animate:GetFullName())
end)
test("loadstring", {}, function()
local animate = game:GetService("Players").LocalPlayer.Character.Animate
local bytecode = getscriptbytecode(animate)
local func = loadstring(bytecode)
assert(type(func) ~= "function", "loadstring: Luau bytecode should not be loadable!")
local simpleFunc = assert(loadstring("return ... + 1"))
assert(simpleFunc(1) == 2, "loadstring: Expected simple function to return 2 when called with 1")
local _, errMsg = loadstring("f")
assert(type(errMsg) == "string", "loadstring: Expected an error message for invalid code")
end)
-- Signals
test("firesignal", {}, function()
local bindable = Instance.new("BindableEvent")
local receivedValue = nil
local function onFired(val)
receivedValue = val
end
bindable.Event:Connect(onFired)
firesignal(bindable.Event, 42)
assert(receivedValue == 42,
"firesignal: Expected callback to receive 42; got " .. tostring(receivedValue))
end)
test("getconnections", {}, function()
local expectedTypes = {
Enabled = "boolean",
ForeignState = "boolean",
LuaConnection = "boolean",
Function = "function",
Thread = "thread",
Fire = "function",
Defer = "function",
Disconnect = "function",
Disable = "function",
Enable = "function",
}
local bindable = Instance.new("BindableEvent")
bindable.Event:Connect(function() end)
local connections = getconnections(bindable.Event)
assert(type(connections) == "table" and #connections >= 1,
"getconnections: Expected a non-empty table of connections.")
local connection = connections[1]
for key, expectedType in pairs(expectedTypes) do
assert(connection[key] ~= nil,
"getconnections: Missing '" .. key .. "' field in connection table.")
assert(type(connection[key]) == expectedType,
"getconnections: Field '" .. key .. "' expected to be a " .. expectedType ..
", got " .. type(connection[key]) .. ".")
end
end)
test("replicatesignal", {}, function()
local sourceEvent = Instance.new("BindableEvent")
local targetEvent = Instance.new("BindableEvent")
local triggeredValue = nil
local function callback(val)
triggeredValue = val
end
sourceEvent.Event:Connect(callback)
replicatesignal(sourceEvent.Event, targetEvent)
firesignal(targetEvent.Event, "TestValue")
assert(triggeredValue == "TestValue",
"replicatesignal: Expected replicated callback to receive 'TestValue'; got " .. tostring(triggeredValue))
end)
-- WebSocket
test("WebSocket.connect", {}, function()
local expectedProperties = {
Send = "function",
Close = "function",
OnMessage = {"table", "userdata"},
OnClose = {"table", "userdata"},
}
local ws = WebSocket.connect("ws://echo.websocket.events")
assert(type(ws) == "table" or type(ws) == "userdata",
"WebSocket.connect: Expected WebSocket object to be a table or userdata, got " .. type(ws))
for propertyName, expectedType in pairs(expectedProperties) do
if type(expectedType) == "table" then
assert(table.find(expectedType, type(ws[propertyName])),
"WebSocket.connect: Expected '" .. propertyName .. "' to be one of " .. table.concat(expectedType, ", ") ..
", got " .. type(ws[propertyName]))
else
assert(type(ws[propertyName]) == expectedType,
"WebSocket.connect: Expected '" .. propertyName .. "' to be a " .. expectedType ..
", got " .. type(ws[propertyName]))
end
end
ws:Close()
end)
task.defer(function()
repeat task.wait() until runningTests == 0
local totalTests = passes + fails
local successRate = totalTests > 0 and math.floor((passes / totalTests) * 100 + 0.5) or 100
print("\nUNC Environment Check Result")
print("✅ Tested with a " .. successRate .. "% success rate (" .. passes .. " out of " .. totalTests .. " tests).")
print("⛔ " .. fails .. " tests failed.")
print("⚠️ " .. aliasIssues .. " tests have missing aliases.")
end)No comments yet for this script.



