From 28936adc298e29f2193f912dcf6cba7736fd408e Mon Sep 17 00:00:00 2001 From: Clownxz Date: Wed, 24 Apr 2024 01:22:54 -0400 Subject: [PATCH 1/4] Support Buffers in expect matchers --- src/jest-get-type/src/__tests__/getType.spec.lua | 4 ++++ src/jest-get-type/src/init.lua | 3 +++ src/jest-roblox-shared/src/expect.lua | 2 ++ 3 files changed, 9 insertions(+) diff --git a/src/jest-get-type/src/__tests__/getType.spec.lua b/src/jest-get-type/src/__tests__/getType.spec.lua index 85651308..573d9dc4 100644 --- a/src/jest-get-type/src/__tests__/getType.spec.lua +++ b/src/jest-get-type/src/__tests__/getType.spec.lua @@ -59,6 +59,10 @@ describe(".getType()", function() expect(getType(true)).toBe("boolean") end) + it("buffer", function() + expect(getType(buffer.fromstring("test"))).toBe("buffer") + end) + -- ROBLOX deviation start: additional symbol tests it("symbol", function() expect(getType(Symbol("test"))).toBe("symbol") diff --git a/src/jest-get-type/src/init.lua b/src/jest-get-type/src/init.lua index b4558bba..e08978ee 100644 --- a/src/jest-get-type/src/init.lua +++ b/src/jest-get-type/src/init.lua @@ -32,6 +32,9 @@ local function getType(value: any): string if typeof(value) == "boolean" then return "boolean" end + if typeof(value) == "buffer" then + return "buffer" + end if typeof(value) == "function" then return "function" end diff --git a/src/jest-roblox-shared/src/expect.lua b/src/jest-roblox-shared/src/expect.lua index b6a459ea..b72e5ed8 100644 --- a/src/jest-roblox-shared/src/expect.lua +++ b/src/jest-roblox-shared/src/expect.lua @@ -139,6 +139,8 @@ local function eq( return a == b elseif className == "regexp" then return tostring(a) == tostring(b) + elseif className == "buffer" then + return buffer.tostring(a) == buffer.tostring(b) end if typeof(a) ~= "table" or typeof(b) ~= "table" then From ea10ee2a3349f00d95ad08cb4fed16641b5d7314 Mon Sep 17 00:00:00 2001 From: Clownxz Date: Wed, 24 Apr 2024 19:19:37 -0400 Subject: [PATCH 2/4] =?UTF-8?q?Support=20printing=20buffers=20in=20Pretty?= =?UTF-8?q?=20Format=20Ex.=20``buffer=20{=20size=20=3D=202,=20data=20=3D?= =?UTF-8?q?=20"@=F4=85=80=80"=20}``?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pretty-format/src/init.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pretty-format/src/init.lua b/src/pretty-format/src/init.lua index 1ad3e2ae..81479a88 100644 --- a/src/pretty-format/src/init.lua +++ b/src/pretty-format/src/init.lua @@ -143,6 +143,10 @@ local function printBasicValue( return val end + if typeOf == "buffer" then + return string.format('buffer { size = %s, data = "%s" }', buffer.len(val), buffer.tostring(val)) + end + -- ROBLOX deviation: output classname for Instance types if typeOf == "Instance" then return val.ClassName From 43abb65d73b009021d804f5c65bc8dceab2261de Mon Sep 17 00:00:00 2001 From: Clownxz Date: Tue, 30 Apr 2024 23:47:11 -0400 Subject: [PATCH 3/4] Don't print out buffer data --- src/expect/src/matchers.lua | 10 ++++++++-- src/pretty-format/src/init.lua | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/expect/src/matchers.lua b/src/expect/src/matchers.lua index e045117e..0e435400 100644 --- a/src/expect/src/matchers.lua +++ b/src/expect/src/matchers.lua @@ -756,8 +756,14 @@ local function toEqual( end else message = function() - return matcherHint(matcherName, nil, nil, options) - .. "\n\n" + local retval = matcherHint(matcherName, nil, nil, options) .. "\n\n" + if type(received) == "buffer" or type(expected) == "buffer" then + retval = retval + .. DIM_COLOR("If comparing buffers, consider reading their data and comparing that instead") + .. "\n\n" + end + + return retval .. printDiffOrStringify(expected, received, EXPECTED_LABEL, RECEIVED_LABEL, isExpand(self.expand)) end end diff --git a/src/pretty-format/src/init.lua b/src/pretty-format/src/init.lua index 81479a88..f156b1cf 100644 --- a/src/pretty-format/src/init.lua +++ b/src/pretty-format/src/init.lua @@ -144,7 +144,7 @@ local function printBasicValue( end if typeOf == "buffer" then - return string.format('buffer { size = %s, data = "%s" }', buffer.len(val), buffer.tostring(val)) + return string.format("buffer { size = %*}", buffer.len(val)) end -- ROBLOX deviation: output classname for Instance types From ea1a8932a5ccdadea9f1756f6f0c8b7eaacb3e1e Mon Sep 17 00:00:00 2001 From: Clownxz Date: Thu, 11 Jul 2024 20:21:51 -0400 Subject: [PATCH 4/4] Pretty Format prints numerical representation of bytes when printing buffers --- src/pretty-format/src/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pretty-format/src/init.lua b/src/pretty-format/src/init.lua index f156b1cf..92d1368c 100644 --- a/src/pretty-format/src/init.lua +++ b/src/pretty-format/src/init.lua @@ -144,7 +144,8 @@ local function printBasicValue( end if typeOf == "buffer" then - return string.format("buffer { size = %*}", buffer.len(val)) + local bytes = { string.byte(buffer.tostring(val), 1, -1) } + return string.format("buffer { size = %*, data = %q }", buffer.len(val), table.concat(bytes, "/")) end -- ROBLOX deviation: output classname for Instance types