IMPORTANT: due to a drive failure, as of 13-Mar-2021, the Mercurial repository had to be re-mirrored, which changed every commit SHA. The old SHAs and trees are backed up in the vault branches. Please migrate to the new branches as soon as you can.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
prosody/spec/util_dbuffer_spec.lua

131 lines
3.5 KiB

local dbuffer = require "util.dbuffer";
describe("util.dbuffer", function ()
describe("#new", function ()
it("has a constructor", function ()
assert.Function(dbuffer.new);
end);
it("can be created", function ()
assert.truthy(dbuffer.new());
end);
it("won't create an empty buffer", function ()
assert.falsy(dbuffer.new(0));
end);
it("won't create a negatively sized buffer", function ()
assert.falsy(dbuffer.new(-1));
end);
end);
describe(":write", function ()
local b = dbuffer.new();
it("works", function ()
assert.truthy(b:write("hi"));
end);
end);
describe(":read", function ()
it("supports optional bytes parameter", function ()
-- should return the frontmost chunk
local b = dbuffer.new();
assert.truthy(b:write("hello"));
assert.truthy(b:write(" "));
assert.truthy(b:write("world"));
assert.equal("h", b:read(1));
assert.equal("ello", b:read());
assert.equal(" ", b:read());
assert.equal("world", b:read());
end);
end);
describe(":discard", function ()
local b = dbuffer.new();
it("works", function ()
assert.truthy(b:write("hello world"));
assert.truthy(b:discard(6));
assert.equal(5, b:length());
assert.equal(5, b:len());
assert.equal("world", b:read(5));
end);
end);
describe(":collapse()", function ()
it("works on an empty buffer", function ()
local b = dbuffer.new();
b:collapse();
end);
end);
describe(":sub", function ()
-- Helper function to compare buffer:sub() with string:sub()
local s = "hello world";
local function test_sub(b, x, y)
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 = dbuffer.new();
assert.truthy(b:write("hello world"));
assert.equals("hello", b:sub(1, 5));
end);
it("works after discard", function ()
local b = dbuffer.new(256);
assert.truthy(b:write("foobar"));
assert.equals("foobar", b:sub(1, 6));
assert.truthy(b:discard(3)); -- consume "foo"
assert.equals("bar", b:sub(1, 3));
end);
it("supports optional end parameter", function ()
local b = dbuffer.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 = dbuffer.new(11);
assert.truthy(b:write(s));
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 s = "hello world"
local function test_byte(b, x, y)
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 = dbuffer.new(11);
assert.truthy(b:write(s));
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 = dbuffer.new();
b:write(string.char(0, 140));
local r = { b:byte(1, 2) };
assert.same({ 0, 140 }, r);
end);
it("works on an empty buffer", function ()
local b = dbuffer.new();
assert.equal("", b:sub(1,1));
end);
end);
end);