forked from rojo-rbx/rojo
Upgrade to rbx_dom_weak 2.0 (#377)
* 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
This commit is contained in:
committed by
GitHub
parent
b84aab0960
commit
59ef5f05ea
@@ -1,127 +1,63 @@
|
||||
return function()
|
||||
local HttpService = game:GetService("HttpService")
|
||||
|
||||
local RbxDom = require(script.Parent)
|
||||
local EncodedValue = require(script.Parent.EncodedValue)
|
||||
local allValues = require(script.Parent.allValues)
|
||||
|
||||
it("should decode Rect values", function()
|
||||
local input = {
|
||||
Type = "Rect",
|
||||
Value = {
|
||||
Min = {1, 2},
|
||||
Max = {3, 4},
|
||||
},
|
||||
}
|
||||
local function deepEq(a, b)
|
||||
if typeof(a) ~= typeof(b) then
|
||||
return false
|
||||
end
|
||||
|
||||
local output = Rect.new(1, 2, 3, 4)
|
||||
local ty = typeof(a)
|
||||
|
||||
local ok, decoded = EncodedValue.decode(input)
|
||||
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
|
||||
|
||||
assert(ok, decoded)
|
||||
expect(decoded).to.equal(output)
|
||||
end)
|
||||
for key, valueB in pairs(b) do
|
||||
if visited[key] then
|
||||
continue
|
||||
end
|
||||
|
||||
it("should decode ColorSequence values", function()
|
||||
local input = {
|
||||
Type = "ColorSequence",
|
||||
Value = {
|
||||
Keypoints = {
|
||||
{
|
||||
Time = 0,
|
||||
Color = { 0.12, 0.34, 0.56 },
|
||||
},
|
||||
if not deepEq(valueB, a[key]) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
{
|
||||
Time = 1,
|
||||
Color = { 0.13, 0.33, 0.37 },
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
return true
|
||||
else
|
||||
return a == b
|
||||
end
|
||||
end
|
||||
|
||||
local output = ColorSequence.new({
|
||||
ColorSequenceKeypoint.new(0, Color3.new(0.12, 0.34, 0.56)),
|
||||
ColorSequenceKeypoint.new(1, Color3.new(0.13, 0.33, 0.37)),
|
||||
})
|
||||
for testName, testEntry in pairs(allValues) do
|
||||
it("round trip " .. testName, function()
|
||||
local ok, decoded = EncodedValue.decode(testEntry.value)
|
||||
assert(ok, decoded)
|
||||
|
||||
local ok, decoded = EncodedValue.decode(input)
|
||||
assert(ok, decoded)
|
||||
expect(decoded).to.equal(output)
|
||||
end)
|
||||
local ok, encoded = EncodedValue.encode(decoded, testEntry.ty)
|
||||
assert(ok, encoded)
|
||||
|
||||
it("should decode NumberSequence values", function()
|
||||
local input = {
|
||||
Type = "NumberSequence",
|
||||
Value = {
|
||||
Keypoints = {
|
||||
{
|
||||
Time = 0,
|
||||
Value = 0.5,
|
||||
Envelope = 0,
|
||||
},
|
||||
if not deepEq(encoded, testEntry.value) then
|
||||
local expected = HttpService:JSONEncode(testEntry.value)
|
||||
local actual = HttpService:JSONEncode(encoded)
|
||||
|
||||
{
|
||||
Time = 1,
|
||||
Value = 0.5,
|
||||
Envelope = 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
local message = string.format(
|
||||
"Round-trip results did not match.\nExpected:\n%s\nActual:\n%s",
|
||||
expected, actual
|
||||
)
|
||||
|
||||
local output = NumberSequence.new({
|
||||
NumberSequenceKeypoint.new(0, 0.5, 0),
|
||||
NumberSequenceKeypoint.new(1, 0.5, 0),
|
||||
})
|
||||
|
||||
local ok, decoded = EncodedValue.decode(input)
|
||||
assert(ok, decoded)
|
||||
expect(decoded).to.equal(output)
|
||||
end)
|
||||
|
||||
it("should decode PhysicalProperties values", function()
|
||||
local input = {
|
||||
Type = "PhysicalProperties",
|
||||
Value = {
|
||||
Density = 0.1,
|
||||
Friction = 0.2,
|
||||
Elasticity = 0.3,
|
||||
FrictionWeight = 0.4,
|
||||
ElasticityWeight = 0.5,
|
||||
},
|
||||
}
|
||||
|
||||
local output = PhysicalProperties.new(
|
||||
0.1,
|
||||
0.2,
|
||||
0.3,
|
||||
0.4,
|
||||
0.5
|
||||
)
|
||||
|
||||
local ok, decoded = EncodedValue.decode(input)
|
||||
assert(ok, decoded)
|
||||
expect(decoded).to.equal(output)
|
||||
end)
|
||||
|
||||
-- This part of rbx_dom_lua needs some work still.
|
||||
itSKIP("should encode Rect values", function()
|
||||
local input = Rect.new(10, 20, 30, 40)
|
||||
|
||||
local output = {
|
||||
Type = "Rect",
|
||||
Value = {
|
||||
Min = {10, 20},
|
||||
Max = {30, 40},
|
||||
},
|
||||
}
|
||||
|
||||
local descriptor = RbxDom.findCanonicalPropertyDescriptor("ImageLabel", "SliceCenter")
|
||||
local ok, encoded = EncodedValue.encode(input, descriptor)
|
||||
|
||||
assert(ok, encoded)
|
||||
expect(encoded.Type).to.equal(output.Type)
|
||||
expect(encoded.Value.Min[1]).to.equal(output.Value.Min[1])
|
||||
expect(encoded.Value.Min[2]).to.equal(output.Value.Min[2])
|
||||
expect(encoded.Value.Max[1]).to.equal(output.Value.Max[1])
|
||||
expect(encoded.Value.Max[2]).to.equal(output.Value.Max[2])
|
||||
end)
|
||||
end
|
||||
error(message)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user