mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-20 17:41:37 +00:00
* Mostly mechanical port bits * Almost there * It builds again! * Turn on all the code again * Tests compiling but not passing * Stub work for value resolution * Implement resolution minus enums and derived properties * Implement property descriptor resolution * Update referent snapshots * Update unions test project Using a place file instead of a model yields better error messages in Roblox Studio. * Add easy shortcut to testing with local rbx-dom * Update rbx-dom * Add enum resolution * Update init.meta.json to use UnresolvedValue * Expand value resolution support, add test * Filter SharedString values from web API * Add 'property' builder method to InstanceSnapshot * Change InstanceSnapshot/InstanceBuilder boundary * Fix remove_file crash * rustfmt * Update to latest rbx_dom_lua * Update dependencies, including rbx_dom_weak * Update to latest rbx-dom * Update dependencies * Update rbx-dom, fixing more bugs * Remove experimental warning on binary place builds * Remove unused imports
63 lines
1.3 KiB
Lua
63 lines
1.3 KiB
Lua
return function()
|
|
local HttpService = game:GetService("HttpService")
|
|
|
|
local RbxDom = require(script.Parent)
|
|
local EncodedValue = require(script.Parent.EncodedValue)
|
|
local allValues = require(script.Parent.allValues)
|
|
|
|
local function deepEq(a, b)
|
|
if typeof(a) ~= typeof(b) then
|
|
return false
|
|
end
|
|
|
|
local ty = typeof(a)
|
|
|
|
if ty == "table" then
|
|
local visited = {}
|
|
|
|
for key, valueA in pairs(a) do
|
|
visited[key] = true
|
|
|
|
if not deepEq(valueA, b[key]) then
|
|
return false
|
|
end
|
|
end
|
|
|
|
for key, valueB in pairs(b) do
|
|
if visited[key] then
|
|
continue
|
|
end
|
|
|
|
if not deepEq(valueB, a[key]) then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
else
|
|
return a == b
|
|
end
|
|
end
|
|
|
|
for testName, testEntry in pairs(allValues) do
|
|
it("round trip " .. testName, function()
|
|
local ok, decoded = EncodedValue.decode(testEntry.value)
|
|
assert(ok, decoded)
|
|
|
|
local ok, encoded = EncodedValue.encode(decoded, testEntry.ty)
|
|
assert(ok, encoded)
|
|
|
|
if not deepEq(encoded, testEntry.value) then
|
|
local expected = HttpService:JSONEncode(testEntry.value)
|
|
local actual = HttpService:JSONEncode(encoded)
|
|
|
|
local message = string.format(
|
|
"Round-trip results did not match.\nExpected:\n%s\nActual:\n%s",
|
|
expected, actual
|
|
)
|
|
|
|
error(message)
|
|
end
|
|
end)
|
|
end
|
|
end
|