Mercurial > prosody-hg
view spec/util_ringbuffer_spec.lua @ 14195:8d726f5d044a 13.0
net.websocket: Fix traceback in client if server doesn't respond with Connection header
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 26 May 2026 12:26:59 +0100 |
| parents | 67b68147ed1d |
| children |
line wrap: on
line source
local rb = require "util.ringbuffer"; describe("util.ringbuffer", function () describe("#new", function () it("has a constructor", function () assert.Function(rb.new); end); it("can be created", function () assert.truthy(rb.new()); end); it("won't create an empty buffer", function () assert.has_error(function () rb.new(0); end); end); it("won't create a negatively sized buffer", function () assert.has_error(function () rb.new(-1); end); end); end); describe(":write", function () local b = rb.new(); it("works", function () assert.truthy(b:write("hi")); end); end); describe(":discard", function () local b = rb.new(); it("works", function () assert.truthy(b:write("hello world")); assert.truthy(b:discard(6)); assert.equal(5, #b); assert.equal("world", b:read(5)); end); end); describe(":find", function () local function test_find(b, str, expected) if expected ~= nil then assert.equal(expected, b:find(str)); else assert.is_nil(b:find(str)); end end it("works", function () local b = rb.new(); assert.truthy(b:write("hello world")); test_find(b, "world", 7); end); it("works across wraps", function () local b = rb.new(5); assert.truthy(b:write("12345")); assert.equal("123", b:read(3)); assert.truthy(b:write("678")); test_find(b, "45678", 1); test_find(b, "567", 2); test_find(b, "56", 2); test_find(b, "5", 2); test_find(b, "6", 3); test_find(b, "7", 4); test_find(b, "8", 5); test_find(b, "9", nil); end); it("no match when the needle is larger than the buffer", function () for i = 5, 11 do local b = rb.new(i); assert.truthy(b:write("hello")); test_find(b, "hello world", nil); end end); it("no match when the needle is an empty string", function () local b = rb.new(5); assert.truthy(b:write("hello")); test_find(b, "", nil); end); end); describe(":sub", function () -- Helper function to compare buffer:sub() with string:sub() local function test_sub(b, x, y) local s = b:read(#b, true); local string_result, buffer_result = s:sub(x, y), b:sub(x, y); assert.equals(string_result, buffer_result, ("buffer:sub(%d, %s) does not match string:sub()"):format(x, y and ("%d"):format(y) or "nil")); end it("works", function () local b = rb.new(); assert.truthy(b:write("hello world")); assert.equals("hello", b:sub(1, 5)); end); it("supports optional end parameter", function () local b = rb.new(); assert.truthy(b:write("hello world")); assert.equals("hello world", b:sub(1)); assert.equals("world", b:sub(-5)); end); it("is equivalent to string:sub", function () local b = rb.new(6); assert.truthy(b:write("foobar")); b:read(3); b:write("foo"); for i = -13, 13 do for j = -13, 13 do test_sub(b, i, j); end end end); end); describe(":byte", function () -- Helper function to compare buffer:byte() with string:byte() local function test_byte(b, x, y) local s = b:read(#b, true); local string_result, buffer_result = {s:byte(x, y)}, {b:byte(x, y)}; assert.same(string_result, buffer_result, ("buffer:byte(%d, %s) does not match string:byte()"):format(x, y and ("%d"):format(y) or "nil")); end it("is equivalent to string:byte", function () local b = rb.new(6); assert.truthy(b:write("foobar")); b:read(3); b:write("foo"); test_byte(b, 1); test_byte(b, 3); test_byte(b, -1); test_byte(b, -3); for i = -13, 13 do for j = -13, 13 do test_byte(b, i, j); end end end); it("works with characters > 127", function () local b = rb.new(); b:write(string.char(0, 140)); local r = { b:byte(1, 2) }; assert.same({ 0, 140 }, r); end); end); end);
