base/lua/test: updates buffer management to be compatible with Lua 5.2 and latest...
[luaevent.git] / test / event_buffer-tests.lua
blob6c2fcedff0cb50745c49437383e6540c15db12c4
1 local core = require("luaevent.core")
2 local buffer = core.buffer
4 require("lunit")
6 --lunit.import("all")
8 bufferTests = lunit.TestCase("bufferTests")
10 function bufferTests:setup()
11 self.buffer = buffer.new()
12 self.buffer2 = buffer.new()
13 end
15 function bufferTests:teardown()
16 self.buffer:close()
17 self.buffer2:close()
18 end
20 local function testDataEqual(expected, actual, msg)
21 msg = msg or ''
22 lunit.assert_equal(expected, actual:get_data(), "Buffer not the same: " .. msg)
23 lunit.assert_equal(#expected, actual:length(), "Buffer length not the same: " .. msg)
24 lunit.assert_equal(expected, tostring(actual), "Buffer (from tostring) not the same: " .. msg)
25 lunit.assert_equal(#expected, #actual, "Buffer length (from #) not zero: " .. msg)
26 end
28 function bufferTests:test_empty()
29 testDataEqual("", self.buffer, "Buffer not empty")
30 testDataEqual("", self.buffer2, "Buffer2 not empty")
31 end
33 function bufferTests:test_addSimpleString()
34 self.buffer:add("Hello")
35 testDataEqual("Hello", self.buffer)
36 self.buffer:add("Hello")
37 testDataEqual("HelloHello", self.buffer)
38 end
40 function bufferTests:test_addMultipleStrings()
41 self.buffer:add("Hello", "Hello")
42 testDataEqual("HelloHello", self.buffer)
43 end
45 function bufferTests:test_addDigits()
46 self.buffer:add(1,2,3,4)
47 testDataEqual("1234", self.buffer)
48 self.buffer:add(100)
49 testDataEqual("1234100", self.buffer)
50 self.buffer:add(1.1)
51 testDataEqual("12341001.1", self.buffer)
52 end
54 function bufferTests:test_addBuffer()
55 self.buffer:add(self.buffer2)
56 testDataEqual("", self.buffer)
57 testDataEqual("", self.buffer2)
58 self.buffer2:add("Hello")
59 testDataEqual("Hello", self.buffer2)
60 self.buffer:add(self.buffer2)
61 testDataEqual("Hello", self.buffer)
62 testDataEqual("", self.buffer2)
63 lunit.assert_error("Cannot self-add buffers", function()
64 self.buffer:add(self.buffer)
65 end)
66 lunit.assert_error("Cannot self-add buffers", function()
67 self.buffer2:add(self.buffer2)
68 end)
69 testDataEqual("Hello", self.buffer, "Failures should not affect data content")
70 testDataEqual("", self.buffer2, "Failures should not affect data content")
71 end
73 function bufferTests:test_addBadValues_fail()
74 lunit.assert_error("Should not be able to add no values", function()
75 self.buffer:add()
76 end)
77 lunit.assert_error("Should not be able to add boolean true", function()
78 self.buffer:add(true)
79 end)
80 lunit.assert_error("Should not be able to add boolean false", function()
81 self.buffer:add(false)
82 end)
83 lunit.assert_error("Should not be able to add functions", function()
84 self.buffer:add(function() end)
85 end)
86 lunit.assert_error("Should not be able to add threads", function()
87 self.buffer:add(coroutine.create(function() end))
88 end)
89 lunit.assert_error("Should not be able to add non-buffer userdata", function()
90 self.buffer:add(newproxy())
91 end)
92 lunit.assert_error("Should not be able to add nil values", function()
93 self.buffer:add(nil)
94 end)
95 lunit.assert_error("Multiples including valid values should not affect failure results", function()
96 self.buffer:add("Hello", 1, bufferb, true, false, function() end, newproxy(), nil)
97 end)
98 testDataEqual("", self.buffer, "Buffer not empty after failing additions")
99 end
101 function bufferTests:test_drain()
102 self.buffer:add("123456789")
103 testDataEqual("123456789", self.buffer)
104 lunit.assert_error("Cannot call drain w/ no args", function()
105 self.buffer:drain()
106 end)
107 self.buffer:drain(1)
108 testDataEqual("23456789", self.buffer)
109 self.buffer:drain(4)
110 testDataEqual("6789", self.buffer)
111 lunit.assert_pass("Should be able to apply draining beyond actual buffer length", function()
112 self.buffer:drain(5)
113 end)
114 testDataEqual("", self.buffer)
115 self.buffer:add("123456789")
116 testDataEqual("123456789", self.buffer)
117 lunit.assert_pass([[Should be able to apply negative draining to cause draining `all data`
118 (see source comments for why)]], function()
119 self.buffer:drain(-1)
120 end)
121 testDataEqual("", self.buffer)
124 function bufferTests:test_getPartial()
125 self.buffer:add("123456789")
126 lunit.assert_equal("1234", self.buffer:get_data(4))
127 lunit.assert_equal("1234", self.buffer:get_data(1,4))
128 lunit.assert_equal("5678", self.buffer:get_data(5,4))
129 lunit.assert_equal("5", self.buffer:get_data(5,1))
130 lunit.assert_equal("56789", self.buffer:get_data(5,100000000), "Data length is capped at max obtainable")
131 lunit.assert_equal("56789", self.buffer:get_data(5,-100), "Negative sizes capture entire remaining string")
132 lunit.assert_equal("9", self.buffer:get_data(-1, 1, "Negative position causes wraparound"))
133 lunit.assert_equal("89", self.buffer:get_data(-2,2, "Negative wraparound does not cause length inversion"))
136 local lineData = [[1
139 local splitLineData = {
140 "1","2",nil
142 local mixedLineData = "1\r2\n3\r\n4\n\r5\r\r6\n\n7\r\n\r8\r\n\r9"
143 local splitMixedLineData = {
144 "1","2","3","4","5","6","7","8", nil
146 function bufferTests:test_readline()
147 self.buffer:add(lineData)
148 testDataEqual(lineData, self.buffer)
149 for _, data in ipairs(splitLineData) do
150 lunit.assert_equal(data, self.buffer:readline())
152 testDataEqual("3", self.buffer, "Failed readline doesn't affect buffer contents")
153 self.buffer:drain(-1)
154 testDataEqual("", self.buffer)
155 self.buffer:add(mixedLineData)
156 testDataEqual(mixedLineData, self.buffer)
157 for _, data in ipairs(splitMixedLineData) do
158 lunit.assert_equal(data, self.buffer:readline())
160 testDataEqual("9", self.buffer)
163 lunit.run()