From a84fc65879a8dd1a8659661dc14d0c5d1e6f99fc Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Wed, 3 Apr 2013 12:02:48 +0200 Subject: [PATCH] Fix get unset without index/keys --- mocks/sr.lua | 37 +++++++++++++++++++++++++------------ tests/mocks.lua | 25 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/mocks/sr.lua b/mocks/sr.lua index e95df1f..ed25777 100644 --- a/mocks/sr.lua +++ b/mocks/sr.lua @@ -105,18 +105,22 @@ pvMock = { if result.type == 'var' then return t.vars[result.private_id] elseif result.type == 'xavp' then - if not result.indx then - result.indx = 0 - end if not t.vars[result.private_id] then return end if not result.key then - return t.vars[result.private_id] + if not result.indx then + return t.vars[result.private_id] + else + result.real_indx = #t.vars[result.private_id]._et - result.indx + return t.vars[result.private_id]._et[result.real_indx] + end + end + if not result.indx then + result.indx = 0 end result.real_indx = #t.vars[result.private_id]._et - result.indx if t.vars[result.private_id]._et[result.real_indx] then - --print(string.format("t.vars[%s]._et[%d]:%s", result.private_id, result.real_indx, table.tostring(t.vars[result.private_id]._et[result.indx+1]))) return t.vars[result.private_id]._et[result.real_indx][result.key] end elseif result.type == 'avp' then @@ -207,16 +211,26 @@ pvMock = { function t.unset(id) local result = t._is(id) if result.type == 'xavp' then - if not result.indx then - result.indx = 0 - end if t.vars[result.private_id] then if not result.key then - t.vars[result.private_id] = nil - return + if not result.indx then + -- xavp(g) -> clean all + t.vars[result.private_id] = nil + return + else + -- xavp(g[0]) + result.real_indx = #t.vars[result.private_id]._et - result.indx + t.vars[result.private_id]._et[result.real_indx] = false + return + end + else + if not result.indx then + result.indx = 0 + end end + -- xavp(g[1]=>k) result.real_indx = #t.vars[result.private_id]._et - result.indx - t.vars[result.private_id]._et[result.real_indx] = false + t.vars[result.private_id]._et[result.real_indx][result.key] = nil end elseif result.type == 'avp' then t.vars[result.private_id] = nil @@ -265,7 +279,6 @@ srMock = { } srMock_MT = { __index = srMock, __newindex = lemock.controller():mock() } function srMock:new() - --print("srMock:new") local t = {} function t.log(level, message) if not t._logger_levels[level] then diff --git a/tests/mocks.lua b/tests/mocks.lua index f775145..b5642d8 100644 --- a/tests/mocks.lua +++ b/tests/mocks.lua @@ -272,9 +272,34 @@ TestSRMock = {} assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), "value") self.sr.pv.sets("$xavp(g=>t)", "value1") assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), "value1") + assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") + -- self.sr.pv.unset("$xavp(g[0]=>t)") assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), nil) assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") + assertTrue(self.sr.pv.get("$xavp(g[0])")) + -- + self.sr.pv.unset("$xavp(g[1])") + assertFalse(self.sr.pv.get("$xavp(g[1])")) + self.sr.pv.unset("$xavp(g)") + assertEquals(self.sr.pv.get("$xavp(g)"), nil) + end + + function TestSRMock:test_unset_xavp1() + self.sr.pv.sets("$xavp(g=>t)", "value") + assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), "value") + self.sr.pv.sets("$xavp(g=>t)", "value1") + assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), "value1") + assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") + self.sr.pv.sets("$xavp(g[1]=>z)", "value_z") + assertEquals(self.sr.pv.get("$xavp(g[1]=>z)"), "value_z") + -- + self.sr.pv.unset("$xavp(g[0])") + assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), nil) + assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") + assertEquals(self.sr.pv.get("$xavp(g[1]=>z)"), "value_z") + assertFalse(self.sr.pv.get("$xavp(g[0])")) + -- self.sr.pv.unset("$xavp(g[1])") assertFalse(self.sr.pv.get("$xavp(g[1])")) self.sr.pv.unset("$xavp(g)")