Merge: doc: fixed some typos and other misc. corrections
[nit.git] / tests / test_deserialization.nit
index deb07b7..c0f1045 100644 (file)
 # limitations under the License.
 
 import serialization
-import json_serialization
 
 # Simple class
 class A
        auto_serializable
 
-       var b = false
+       var b: Bool
        var c: Char
        var f: Float
-       var i = 123
-       var s = "asdf"
+       var i: Int
+       var s: String is serialize_as "serialization_specific_name"
        var n: nullable Int
+       var password = "p4ssw0rd" is lazy, noserialize
 
-       init(b: Bool, c: Char, f: Float, i: Int, s: String, n: nullable Int)
-       do
-               self.b = b
-               self.c = c
-               self.f = f
-               self.i = i
-               self.s = s
-       end
-
-       redef fun to_s do return "<A: {b} {c} {f} {i} {s} {n != null}>"
+       redef fun to_s do return "<A: {b} {c} {f} {i} {s} {n != null} {password}>"
 end
 
 # Sub-class of A
@@ -48,14 +39,6 @@ class B
        var ii: Int
        var ss: String
 
-       init(b: Bool, c: Char, f: Float, i: Int, s: String, n: nullable Int, ii: Int, ss: String)
-       do
-               super(b, c, f, i, s, n)
-
-               self.ii = ii
-               self.ss = ss
-       end
-
        redef fun to_s do return "<B: {super} {ii} {ss}>"
 end
 
@@ -64,16 +47,9 @@ class C
        auto_serializable
 
        var a: A
-       var b = new B(false, 'b', 123.123, 2345, "hjkl", 12, 1111, "qwer")
+       var b: B
        var aa: A
 
-       init(a: A, b: B)
-       do
-               self.a = a
-               self.b = b
-               self.aa = a
-       end
-
        redef fun to_s do return "<C: {a} {b}>"
 end
 
@@ -93,45 +69,61 @@ class E
 
        var a = new Array[Object].with_items("hello", 1234, 123.4)
        var b = new Array[nullable Serializable].with_items("hella", 2345, 234.5)
-       init do end
 
        redef fun to_s do return "<E: a: {a.join(", ")}; b: {b.join(", ")}>"
 end
 
-# Class with generics
+# Parameterized class
 class F[N: Numeric]
        auto_serializable
 
        var n: N
-       init(n: N) do self.n = n
 
-       redef fun to_s do return "<E: {n}>"
+       redef fun to_s do return "<F: {n}>"
 end
 
-var a = new A(true, 'a', 0.1234, 1234, "asdf", null)
-var b = new B(false, 'b', 123.123, 2345, "hjkl", 12, 1111, "qwer")
-var c = new C(a, b)
-var d = new D(false, 'b', 123.123, 2345, "new line ->\n<-", null, 1111, "\t\f\"\r\\/")
-d.d = d
-var e = new E
-var fi = new F[Int](2222)
-var ff = new F[Float](33.33)
-
-# Default works only with Nit serial
-var tests = new Array[Serializable].with_items(a, b, c, d, e, fi, ff)
+# Other collections
+class G
+       auto_serializable
 
-# Alt1 should work without nitserial
-#alt1# tests = new Array[Serializable].with_items(a, b, c, d)
+       var hs = new HashSet[Int]
+       var s: Set[String] = new ArraySet[String]
+       var hm = new HashMap[String, Int]
+       var am = new ArrayMap[String, String]
 
-for o in tests do
-       var stream = new StringWriter
-       var serializer = new JsonSerializer(stream)
-       serializer.serialize(o)
+       init
+       do
+               hs.add -1
+               hs.add 0
+               s.add "one"
+               s.add "two"
+               hm["one"] = 1
+               hm["two"] = 2
+               am["three"] = 3.to_s
+               am["four"] = 4.to_s
+       end
 
-       var deserializer = new JsonDeserializer(stream.to_s)
-       var deserialized = deserializer.deserialize
+       redef fun to_s do return "<G: hs: {hs.join(", ")}; s: {s.join(", ")}; "+
+               "hm: {hm.join(", ", ". ")}; am: {am.join(", ", ". ")}>"
+end
 
-       print "# Nit:\n{o}\n"
-       print "# Json:\n{stream}\n"
-       print "# Back in Nit:\n{deserialized or else "null"}\n"
+class TestEntities
+       var a = new A(true, 'a', 0.1234, 1234, "asdf", null)
+       var b = new B(false, 'b', 123.123, 2345, "hjkl", 12, 1111, "qwer")
+       var c = new C(a, b, a)
+       var d = new D(false, 'b', 123.123, 2345, "new line ->\n<-", null, 1111, "\t\f\"\r\\/")
+       init do d.d = d
+       var e = new E
+       var fi = new F[Int](2222)
+       var ff = new F[Float](33.33)
+       var g = new G
+
+       # should work without nitserial
+       var without_generics: Array[Serializable] = [a, b, c, d: Serializable]
+
+       # Default works only with Nit serial
+       var with_generics: Array[Serializable] = [a, b, c, d, e, fi, ff, g: Serializable]
 end
+
+# We instantiate it here so that `nitserial` detects generic types as being alive
+var entities = new TestEntities