Software /
code /
prosody
Annotate
spec/util_serialization_spec.lua @ 9566:dad29508d0f2
util.serialization: Test rejection of multiple references to same table
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 27 Oct 2018 12:40:47 +0200 |
parent | 9485:c667887d78ad |
child | 9567:dbfa286cfa88 |
rev | line source |
---|---|
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local serialization = require "util.serialization"; |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 describe("util.serialization", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 describe("serialize", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 it("makes a string", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 assert.is_string(serialization.serialize({})); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 assert.is_string(serialization.serialize(nil)); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 assert.is_string(serialization.serialize(1)); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 assert.is_string(serialization.serialize(true)); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 end); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
9480
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
12 it("rejects function by default", function () |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
13 assert.has_error(function () |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
14 serialization.serialize(function () end) |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
15 end); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
16 end); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
17 |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
18 it("makes a string in debug mode", function () |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
19 assert.is_string(serialization.serialize(function () end, "debug")); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
20 end); |
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
21 |
9481
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
22 it("rejects cycles", function () |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
23 assert.has_error(function () |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
24 local t = {} |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
25 t[t] = { t }; |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
26 serialization.serialize(t) |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
27 end); |
f34c635c5f42
util.serialization: Test that it rejects tables wit cycles
Kim Alvefur <zash@zash.se>
parents:
9480
diff
changeset
|
28 end); |
9480
006a71a83e6a
util.serialization: Make errors fatal by default (like the previous implementation)
Kim Alvefur <zash@zash.se>
parents:
9343
diff
changeset
|
29 |
9566
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
30 it("rejects multiple references to same table", function () |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
31 assert.has_error(function () |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
32 local t1 = {}; |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
33 local t2 = { t1, t1 }; |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
34 serialization.serialize(t2); |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
35 end); |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
36 end); |
dad29508d0f2
util.serialization: Test rejection of multiple references to same table
Kim Alvefur <zash@zash.se>
parents:
9485
diff
changeset
|
37 |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 it("roundtrips", function () |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 local function test(data) |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 local serialized = serialization.serialize(data); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 assert.is_string(serialized); |
9343
e767da06399d
util.serialization: Use deserialize instead of envload directly
Kim Alvefur <zash@zash.se>
parents:
9342
diff
changeset
|
42 local deserialized, err = serialization.deserialize(serialized); |
e767da06399d
util.serialization: Use deserialize instead of envload directly
Kim Alvefur <zash@zash.se>
parents:
9342
diff
changeset
|
43 assert.same(data, deserialized, err); |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 end |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 test({}); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 test({hello="world"}); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 test("foobar") |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 test("\0\1\2\3"); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 test("nödåtgärd"); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 test({1,2,3,4}); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 test({foo={[100]={{"bar"},{baz=1}}}}); |
9482
8791bfa3984a
util.serialization: Test table keys that are Lua keywords
Kim Alvefur <zash@zash.se>
parents:
9481
diff
changeset
|
53 test({["goto"] = {["function"]={["do"]="keywords"}}}); |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 end); |
9485
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
55 |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
56 it("can serialize with metatables", function () |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
57 local s = serialization.new({ freeze = true }); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
58 local t = setmetatable({ a = "hi" }, { __freeze = function (t) return { t.a } end }); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
59 local rt = serialization.deserialize(s(t)); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
60 assert.same({"hi"}, rt); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
61 end); |
c667887d78ad
util.serialization: Simpler metatable pre-processing
Kim Alvefur <zash@zash.se>
parents:
9482
diff
changeset
|
62 |
9342
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 end); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 end); |
83e4596c2824
util.serialization: Add brief initial tests
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 |