Skip to content

Commit 021228a

Browse files
Use the Nameable and Stringifiable mixins in the DistanceLimit class
1 parent d13e739 commit 021228a

2 files changed

Lines changed: 99 additions & 2 deletions

File tree

distancelimit.lua

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1+
-- luacheck: no max comment line length
2+
13
---
24
-- @classmod DistanceLimit
35

46
local middleclass = require("middleclass")
57
local assertions = require("luatypechecks.assertions")
8+
local Nameable = require("luaserialization.nameable")
9+
local Stringifiable = require("luaserialization.stringifiable")
610

711
local DistanceLimit = middleclass("Point")
12+
DistanceLimit:include(Nameable)
13+
DistanceLimit:include(Stringifiable)
814

915
---
1016
-- @table instance
@@ -23,4 +29,19 @@ function DistanceLimit:initialize(maximal_distance, suitable_value)
2329
self.suitable_value = suitable_value
2430
end
2531

32+
---
33+
-- @treturn tab table with instance fields
34+
-- (see the [luaserialization](https://github.com/thewizardplusplus/luaserialization) library)
35+
function DistanceLimit:__data()
36+
return {
37+
maximal_distance = self.maximal_distance,
38+
suitable_value = self.suitable_value,
39+
}
40+
end
41+
42+
---
43+
-- @function __tostring
44+
-- @treturn string stringified table with instance fields
45+
-- (see the [luaserialization](https://github.com/thewizardplusplus/luaserialization) library)
46+
2647
return DistanceLimit

distancelimit_test.lua

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,30 @@
11
local luaunit = require("luaunit")
22
local middleclass = require("middleclass")
3+
local assertions = require("luatypechecks.assertions")
34
local checks = require("luatypechecks.checks")
5+
local Nameable = require("luaserialization.nameable")
6+
local Stringifiable = require("luaserialization.stringifiable")
47
local DistanceLimit = require("luaplot.distancelimit")
58

9+
local MockClass = middleclass("MockClass")
10+
11+
local SerializableMockClass = middleclass("SerializableMockClass")
12+
SerializableMockClass:include(Nameable)
13+
SerializableMockClass:include(Stringifiable)
14+
15+
function SerializableMockClass:initialize(id)
16+
assertions.is_integer(id)
17+
18+
self.id = id
19+
end
20+
21+
function SerializableMockClass:__data()
22+
return {
23+
field_1 = self.id + 100,
24+
field_2 = string.format("test-%d", self.id),
25+
}
26+
end
27+
628
-- luacheck: globals TestDistanceLimit
729
TestDistanceLimit = {}
830

@@ -33,7 +55,6 @@ function TestDistanceLimit.test_new_string()
3355
end
3456

3557
function TestDistanceLimit.test_new_class()
36-
local MockClass = middleclass("MockClass")
3758
local mock = MockClass:new()
3859
local limit = DistanceLimit:new(23, mock)
3960

@@ -48,7 +69,6 @@ function TestDistanceLimit.test_new_class()
4869
end
4970

5071
function TestDistanceLimit.test_new_negative_maximum()
51-
local MockClass = middleclass("MockClass")
5272
local mock = MockClass:new()
5373
local limit = DistanceLimit:new(-23, mock)
5474

@@ -61,3 +81,59 @@ function TestDistanceLimit.test_new_negative_maximum()
6181
luaunit.assert_is_table(limit.suitable_value)
6282
luaunit.assert_true(checks.is_instance(limit.suitable_value, MockClass))
6383
end
84+
85+
function TestDistanceLimit.test_tostring_number()
86+
local limit = DistanceLimit:new(23, 42)
87+
local text = tostring(limit)
88+
89+
luaunit.assert_is_string(text)
90+
luaunit.assert_equals(text, "{" ..
91+
"__name = \"Point\"," ..
92+
"maximal_distance = 23," ..
93+
"suitable_value = 42" ..
94+
"}")
95+
end
96+
97+
function TestDistanceLimit.test_tostring_string()
98+
local limit = DistanceLimit:new(23, "test")
99+
local text = tostring(limit)
100+
101+
luaunit.assert_is_string(text)
102+
luaunit.assert_equals(text, "{" ..
103+
"__name = \"Point\"," ..
104+
"maximal_distance = 23," ..
105+
"suitable_value = \"test\"" ..
106+
"}")
107+
end
108+
109+
function TestDistanceLimit.test_tostring_class()
110+
luaunit.skip("skip")
111+
112+
local mock = MockClass:new()
113+
local limit = DistanceLimit:new(23, mock)
114+
local text = tostring(limit)
115+
116+
luaunit.assert_is_string(text)
117+
luaunit.assert_equals(text, "{" ..
118+
"__name = \"Point\"," ..
119+
"maximal_distance = 23," ..
120+
"suitable_value = {}" ..
121+
"}")
122+
end
123+
124+
function TestDistanceLimit.test_tostring_serializable_class()
125+
local mock = SerializableMockClass:new(42)
126+
local limit = DistanceLimit:new(23, mock)
127+
local text = tostring(limit)
128+
129+
luaunit.assert_is_string(text)
130+
luaunit.assert_equals(text, "{" ..
131+
"__name = \"Point\"," ..
132+
"maximal_distance = 23," ..
133+
"suitable_value = {" ..
134+
"__name = \"SerializableMockClass\"," ..
135+
"field_1 = 142," ..
136+
"field_2 = \"test-42\"" ..
137+
"}" ..
138+
"}")
139+
end

0 commit comments

Comments
 (0)