New tests for inherited constructors.
authorJean Privat <jean@pryen.org>
Sat, 27 Dec 2008 20:15:40 +0000 (15:15 -0500)
committerJean Privat <jean@pryen.org>
Sat, 27 Dec 2008 20:15:40 +0000 (15:15 -0500)
26 files changed:
tests/base_init_inherit.nit [new file with mode: 0644]
tests/base_init_inherit2.nit [new file with mode: 0644]
tests/base_init_inherit3.nit [new file with mode: 0644]
tests/base_init_inherit4.nit [new file with mode: 0644]
tests/base_init_inherit5.nit [new file with mode: 0644]
tests/base_init_simple.nit [new file with mode: 0644]
tests/sav/base_init_inherit.sav [new file with mode: 0644]
tests/sav/base_init_inherit2.sav [new file with mode: 0644]
tests/sav/base_init_inherit2_alt0.sav [new file with mode: 0644]
tests/sav/base_init_inherit2_alt1.sav [new file with mode: 0644]
tests/sav/base_init_inherit2_alt2.sav [new file with mode: 0644]
tests/sav/base_init_inherit2_alt3.sav [new file with mode: 0644]
tests/sav/base_init_inherit3.sav [new file with mode: 0644]
tests/sav/base_init_inherit3_alt0.sav [new file with mode: 0644]
tests/sav/base_init_inherit3_alt1.sav [new file with mode: 0644]
tests/sav/base_init_inherit3_alt2.sav [new file with mode: 0644]
tests/sav/base_init_inherit3_alt3.sav [new file with mode: 0644]
tests/sav/base_init_inherit4.sav [new file with mode: 0644]
tests/sav/base_init_inherit4_alt0.sav [new file with mode: 0644]
tests/sav/base_init_inherit4_alt1.sav [new file with mode: 0644]
tests/sav/base_init_inherit4_alt2.sav [new file with mode: 0644]
tests/sav/base_init_inherit4_alt3.sav [new file with mode: 0644]
tests/sav/base_init_inherit5.sav [new file with mode: 0644]
tests/sav/base_init_inherit_alt1.sav [new file with mode: 0644]
tests/sav/base_init_simple.sav [new file with mode: 0644]
tests/sav/base_init_simple_alt1.sav [new file with mode: 0644]

diff --git a/tests/base_init_inherit.nit b/tests/base_init_inherit.nit
new file mode 100644 (file)
index 0000000..9424272
--- /dev/null
@@ -0,0 +1,111 @@
+import kernel
+
+class A
+       init ca
+       do
+               'A'.output
+       end
+
+       init ca2
+       do
+               'A'.output
+               '2'.output
+       end
+
+       meth foo
+       do
+               'a'.output
+               '\n'.output
+       end
+end
+
+class B
+special A
+       init cb
+       do
+               'B'.output
+               '{'.output
+               ca
+               '}'.output
+       end
+
+       redef meth foo
+       do
+               'b'.output
+               super
+       end
+end
+
+class C
+special B
+       init cc
+       do
+               'C'.output
+               '{'.output
+               cb
+               '}'.output
+       end
+
+       redef meth foo
+       do
+               'c'.output
+               super
+       end
+end
+
+class M
+special A
+       redef meth foo
+       do
+               'm'.output
+               super
+       end
+end
+
+class N
+special B
+special M
+       redef meth foo
+       do
+               'n'.output
+               super
+       end
+end
+
+class O
+special N
+special C
+       init co
+       do
+               'O'.output
+               '{'.output
+               cc
+               '}'.output
+       end
+       redef meth foo
+       do
+               'o'.output
+               super
+       end
+end
+
+(new A.ca).foo
+(new A.ca2).foo
+(new B.cb).foo
+#alt1#(new B.ca).foo
+#alt1#(new B.ca2).foo
+(new C.cc).foo
+#alt1#(new C.ca).foo
+#alt1#(new C.ca2).foo
+#alt1#(new C.cb).foo
+(new M.ca).foo
+(new M.ca2).foo
+(new N.cb).foo
+#alt1#(new N.ca).foo
+#alt1#(new N.ca2).foo
+(new O.co).foo
+#alt1#(new O.ca).foo
+#alt1#(new O.ca2).foo
+#alt1#(new O.cb).foo
+#alt1#(new O.cc).foo
+
diff --git a/tests/base_init_inherit2.nit b/tests/base_init_inherit2.nit
new file mode 100644 (file)
index 0000000..8265995
--- /dev/null
@@ -0,0 +1,99 @@
+import kernel
+
+class A
+       init ca
+       do
+               'A'.output
+       end
+
+       meth foo
+       do
+               'a'.output
+               '\n'.output
+       end
+end
+
+class B
+special A
+#alt1# init cb
+#alt1# do
+#alt1#         'B'.output
+#alt1#         '{'.output
+#alt1#         ca
+#alt1#         '}'.output
+#alt1# end
+
+#alt3# init cb
+#alt3# do
+#alt3#         'B'.output
+#alt3#         '{'.output
+#alt3#         ca
+#alt3#         '}'.output
+#alt3# end
+
+       redef meth foo
+       do
+               'b'.output
+               super
+       end
+end
+
+class C
+special A
+#alt2# init cc
+#alt2# do
+#alt2#         'C'.output
+#alt2#         '{'.output
+#alt2#         ca
+#alt2#         '}'.output
+#alt2# end
+
+#alt3# init cc
+#alt3# do
+#alt3#         'C'.output
+#alt3#         '{'.output
+#alt3#         ca
+#alt3#         '}'.output
+#alt3# end
+
+       redef meth foo
+       do
+               'c'.output
+               super
+       end
+end
+
+class M
+special C
+       redef meth foo
+       do
+               'm'.output
+               super
+       end
+end
+
+class N
+special B
+special M
+       redef meth foo
+       do
+               'n'.output
+               super
+       end
+end
+
+(new A.ca).foo
+#alt0#(new B.ca).foo
+#alt1#(new B.cb).foo
+#alt2#(new B.ca).foo
+#alt0#(new C.ca).foo
+#alt1#(new C.ca).foo
+#alt2#(new C.cc).foo
+#alt0#(new M.ca).foo
+#alt1#(new M.ca).foo
+#alt2#(new M.cc).foo
+#alt0#(new N.ca).foo
+#alt1#(new N.cb).foo
+#alt2#(new N.cc).foo
+
+
diff --git a/tests/base_init_inherit3.nit b/tests/base_init_inherit3.nit
new file mode 100644 (file)
index 0000000..552e2c6
--- /dev/null
@@ -0,0 +1,98 @@
+import kernel
+
+class A
+       init ca
+       do
+               'A'.output
+       end
+
+       meth foo
+       do
+               'a'.output
+               '\n'.output
+       end
+end
+
+class M
+special A
+       redef meth foo
+       do
+               'm'.output
+               super
+       end
+end
+
+class B
+special A
+       init cb
+       do
+               'B'.output
+               '{'.output
+               ca
+               '}'.output
+       end
+
+       redef meth foo
+       do
+               'b'.output
+               super
+       end
+end
+
+class N
+special A
+       redef meth foo
+       do
+               'n'.output
+               super
+       end
+end
+
+class O
+special M
+special B
+       redef meth foo
+       do
+               'o'.output
+               super
+       end
+end
+
+class P
+special B
+special N
+       redef meth foo
+       do
+               'p'.output
+               super
+       end
+end
+
+class Q
+#alt0#special M
+#alt0#special B
+#alt0#special N
+
+#alt1#special O
+#alt1#special N
+
+#alt2#special M
+#alt2#special P
+       
+#alt3#special O
+#alt3#special P
+       redef meth foo
+       do
+               'q'.output
+               super
+       end
+end
+
+(new A.ca).foo
+(new M.ca).foo
+(new B.cb).foo
+(new N.ca).foo
+(new O.cb).foo
+(new P.cb).foo
+(new Q.cb).foo
+
diff --git a/tests/base_init_inherit4.nit b/tests/base_init_inherit4.nit
new file mode 100644 (file)
index 0000000..f269809
--- /dev/null
@@ -0,0 +1,85 @@
+import kernel
+
+redef interface Object
+
+       meth foo
+       do
+               'a'.output
+               '\n'.output
+       end
+end
+
+interface M
+       redef meth foo
+       do
+               'm'.output
+               super
+       end
+end
+
+class B
+       init cb
+       do
+               'B'.output
+       end
+
+       redef meth foo
+       do
+               'b'.output
+               super
+       end
+end
+
+interface N
+       redef meth foo
+       do
+               'n'.output
+               super
+       end
+end
+
+class O
+special M
+special B
+       redef meth foo
+       do
+               'o'.output
+               super
+       end
+end
+
+class P
+special B
+special N
+       redef meth foo
+       do
+               'p'.output
+               super
+       end
+end
+
+class Q
+#alt0#special M
+#alt0#special B
+#alt0#special N
+
+#alt1#special O
+#alt1#special N
+
+#alt2#special M
+#alt2#special P
+       
+#alt3#special O
+#alt3#special P
+       redef meth foo
+       do
+               'q'.output
+               super
+       end
+end
+
+(new B.cb).foo
+(new O.cb).foo
+(new P.cb).foo
+(new Q.cb).foo
+
diff --git a/tests/base_init_inherit5.nit b/tests/base_init_inherit5.nit
new file mode 100644 (file)
index 0000000..e833b51
--- /dev/null
@@ -0,0 +1,96 @@
+import kernel
+
+class A
+       init ca(a: Char)
+       do
+               'A'.output
+               a.output
+       end
+
+       meth foo
+       do
+               'a'.output
+               '\n'.output
+       end
+end
+
+class B
+special A
+       init cb(a, b: Char)
+       do
+               'B'.output
+               b.output
+               '{'.output
+               ca(a)
+               '}'.output
+       end
+
+       redef meth foo
+       do
+               'b'.output
+               super
+       end
+end
+
+class C
+special B
+       init cc(a,b,c: Char)
+       do
+               'C'.output
+               c.output
+               '{'.output
+               cb(a,b)
+               '}'.output
+       end
+
+       redef meth foo
+       do
+               'c'.output
+               super
+       end
+end
+
+class M
+special A
+       redef meth foo
+       do
+               'm'.output
+               super
+       end
+end
+
+class N
+special B
+special M
+       redef meth foo
+       do
+               'n'.output
+               super
+       end
+end
+
+class O
+special N
+special C
+       init co(a,b,c,o: Char)
+       do
+               'O'.output
+               o.output
+               '{'.output
+               cc(a,b,c)
+               '}'.output
+       end
+       redef meth foo
+       do
+               'o'.output
+               super
+       end
+end
+
+(new A.ca('1')).foo
+(new B.cb('1','2')).foo
+(new C.cc('1','2','3')).foo
+(new M.ca('1')).foo
+(new N.cb('1','2')).foo
+(new O.co('1','2','3','4')).foo
+
diff --git a/tests/base_init_simple.nit b/tests/base_init_simple.nit
new file mode 100644 (file)
index 0000000..bab4c7d
--- /dev/null
@@ -0,0 +1,24 @@
+import kernel
+
+class A
+       init do 'A'.output
+       init init2 do 'a'.output
+       meth foo do '\n'.output
+end
+
+class B
+special A
+       #alt1#redef init do '1'.output
+       init do '1'.output #!alt1#
+       #alt1#redef init init2 do '2'.output
+       init init2 do '2'.output #!alt1#
+       #alt1#redef init init3 do '3'.output
+       init init3 do '3'.output #!alt1#
+end
+
+(new A).foo
+(new A.init2).foo
+(new B).foo
+(new B.init2).foo
+(new B.init3).foo
+
diff --git a/tests/sav/base_init_inherit.sav b/tests/sav/base_init_inherit.sav
new file mode 100644 (file)
index 0000000..04165c5
--- /dev/null
@@ -0,0 +1,8 @@
+Aa
+A2a
+B{A}ba
+C{B{A}}cba
+Ama
+A2ma
+B{A}nbma
+O{C{B{A}}}onmcba
diff --git a/tests/sav/base_init_inherit2.sav b/tests/sav/base_init_inherit2.sav
new file mode 100644 (file)
index 0000000..863486b
--- /dev/null
@@ -0,0 +1 @@
+Aa
diff --git a/tests/sav/base_init_inherit2_alt0.sav b/tests/sav/base_init_inherit2_alt0.sav
new file mode 100644 (file)
index 0000000..0212e99
--- /dev/null
@@ -0,0 +1,5 @@
+Aa
+Aba
+Aca
+Amca
+Anbmca
diff --git a/tests/sav/base_init_inherit2_alt1.sav b/tests/sav/base_init_inherit2_alt1.sav
new file mode 100644 (file)
index 0000000..3868b73
--- /dev/null
@@ -0,0 +1,5 @@
+Aa
+B{A}ba
+Aca
+Amca
+B{A}nbmca
diff --git a/tests/sav/base_init_inherit2_alt2.sav b/tests/sav/base_init_inherit2_alt2.sav
new file mode 100644 (file)
index 0000000..5bb2c66
--- /dev/null
@@ -0,0 +1,5 @@
+Aa
+Aba
+C{A}ca
+C{A}mca
+C{A}nbmca
diff --git a/tests/sav/base_init_inherit2_alt3.sav b/tests/sav/base_init_inherit2_alt3.sav
new file mode 100644 (file)
index 0000000..70caf2f
--- /dev/null
@@ -0,0 +1 @@
+alt/base_init_inherit2_alt3.nit:75,1--81:7: Error: Explicit constructor required in N since multiple inheritance of constructor is forbiden. Conflicting classes are B, C. Costructors are base_init_inherit2_alt3::A::ca, base_init_inherit2_alt3::B::cb, base_init_inherit2_alt3::C::cc.
diff --git a/tests/sav/base_init_inherit3.sav b/tests/sav/base_init_inherit3.sav
new file mode 100644 (file)
index 0000000..f8caa8c
--- /dev/null
@@ -0,0 +1 @@
+./base_init_inherit3.nit:82,1--87:7: Error: No property Q::foo is inherited. Remove the redef keyword to define a new property.
diff --git a/tests/sav/base_init_inherit3_alt0.sav b/tests/sav/base_init_inherit3_alt0.sav
new file mode 100644 (file)
index 0000000..9a3590f
--- /dev/null
@@ -0,0 +1,7 @@
+Aa
+Ama
+B{A}ba
+Ana
+B{A}omba
+B{A}pbna
+B{A}qmbna
diff --git a/tests/sav/base_init_inherit3_alt1.sav b/tests/sav/base_init_inherit3_alt1.sav
new file mode 100644 (file)
index 0000000..3a08969
--- /dev/null
@@ -0,0 +1,7 @@
+Aa
+Ama
+B{A}ba
+Ana
+B{A}omba
+B{A}pbna
+B{A}qombna
diff --git a/tests/sav/base_init_inherit3_alt2.sav b/tests/sav/base_init_inherit3_alt2.sav
new file mode 100644 (file)
index 0000000..77e587f
--- /dev/null
@@ -0,0 +1,7 @@
+Aa
+Ama
+B{A}ba
+Ana
+B{A}omba
+B{A}pbna
+B{A}qmpbna
diff --git a/tests/sav/base_init_inherit3_alt3.sav b/tests/sav/base_init_inherit3_alt3.sav
new file mode 100644 (file)
index 0000000..7293394
--- /dev/null
@@ -0,0 +1,7 @@
+Aa
+Ama
+B{A}ba
+Ana
+B{A}omba
+B{A}pbna
+B{A}qompbna
diff --git a/tests/sav/base_init_inherit4.sav b/tests/sav/base_init_inherit4.sav
new file mode 100644 (file)
index 0000000..ee7c116
--- /dev/null
@@ -0,0 +1 @@
+./base_init_inherit4.nit:84,2--9: Error: Method 'cb' doesn't exists in Q.
diff --git a/tests/sav/base_init_inherit4_alt0.sav b/tests/sav/base_init_inherit4_alt0.sav
new file mode 100644 (file)
index 0000000..1df3160
--- /dev/null
@@ -0,0 +1,4 @@
+Bba
+Bomba
+Bpbna
+Bqmbna
diff --git a/tests/sav/base_init_inherit4_alt1.sav b/tests/sav/base_init_inherit4_alt1.sav
new file mode 100644 (file)
index 0000000..1b94fae
--- /dev/null
@@ -0,0 +1,4 @@
+Bba
+Bomba
+Bpbna
+Bqombna
diff --git a/tests/sav/base_init_inherit4_alt2.sav b/tests/sav/base_init_inherit4_alt2.sav
new file mode 100644 (file)
index 0000000..5d31ef6
--- /dev/null
@@ -0,0 +1,4 @@
+Bba
+Bomba
+Bpbna
+Bqmpbna
diff --git a/tests/sav/base_init_inherit4_alt3.sav b/tests/sav/base_init_inherit4_alt3.sav
new file mode 100644 (file)
index 0000000..65961af
--- /dev/null
@@ -0,0 +1,4 @@
+Bba
+Bomba
+Bpbna
+Bqompbna
diff --git a/tests/sav/base_init_inherit5.sav b/tests/sav/base_init_inherit5.sav
new file mode 100644 (file)
index 0000000..c67526f
--- /dev/null
@@ -0,0 +1,6 @@
+A1a
+B2{A1}ba
+C3{B2{A1}}cba
+A1ma
+B2{A1}nbma
+O4{C3{B2{A1}}}onmcba
diff --git a/tests/sav/base_init_inherit_alt1.sav b/tests/sav/base_init_inherit_alt1.sav
new file mode 100644 (file)
index 0000000..d36f0a6
--- /dev/null
@@ -0,0 +1,11 @@
+alt/base_init_inherit_alt1.nit:95,2--9: Error: Method 'ca' doesn't exists in B.
+alt/base_init_inherit_alt1.nit:96,2--10: Error: Method 'ca2' doesn't exists in B.
+alt/base_init_inherit_alt1.nit:98,2--9: Error: Method 'ca' doesn't exists in C.
+alt/base_init_inherit_alt1.nit:99,2--10: Error: Method 'ca2' doesn't exists in C.
+alt/base_init_inherit_alt1.nit:100,2--9: Error: Method 'cb' doesn't exists in C.
+alt/base_init_inherit_alt1.nit:104,2--9: Error: Method 'ca' doesn't exists in N.
+alt/base_init_inherit_alt1.nit:105,2--10: Error: Method 'ca2' doesn't exists in N.
+alt/base_init_inherit_alt1.nit:107,2--9: Error: Method 'ca' doesn't exists in O.
+alt/base_init_inherit_alt1.nit:108,2--10: Error: Method 'ca2' doesn't exists in O.
+alt/base_init_inherit_alt1.nit:109,2--9: Error: Method 'cb' doesn't exists in O.
+alt/base_init_inherit_alt1.nit:110,2--9: Error: Method 'cc' doesn't exists in O.
diff --git a/tests/sav/base_init_simple.sav b/tests/sav/base_init_simple.sav
new file mode 100644 (file)
index 0000000..8fbf529
--- /dev/null
@@ -0,0 +1,5 @@
+A
+a
+A1
+a2
+A3
diff --git a/tests/sav/base_init_simple_alt1.sav b/tests/sav/base_init_simple_alt1.sav
new file mode 100644 (file)
index 0000000..c31ffd1
--- /dev/null
@@ -0,0 +1,3 @@
+alt/base_init_simple_alt1.nit:11,2--25: Error: No property B::init is inherited. Remove the redef keyword to define a new property.
+alt/base_init_simple_alt1.nit:12,2--31: Error: No property B::init2 is inherited. Remove the redef keyword to define a new property.
+alt/base_init_simple_alt1.nit:13,2--31: Error: No property B::init3 is inherited. Remove the redef keyword to define a new property.