From 2b6da5c12ae0d1912a72fa334fb57c05b1e090cc Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Sat, 27 Dec 2008 15:15:40 -0500 Subject: [PATCH] New tests for inherited constructors. --- tests/base_init_inherit.nit | 111 +++++++++++++++++++++++++++++++++ tests/base_init_inherit2.nit | 99 +++++++++++++++++++++++++++++ tests/base_init_inherit3.nit | 98 +++++++++++++++++++++++++++++ tests/base_init_inherit4.nit | 85 +++++++++++++++++++++++++ tests/base_init_inherit5.nit | 96 ++++++++++++++++++++++++++++ tests/base_init_simple.nit | 24 +++++++ tests/sav/base_init_inherit.sav | 8 +++ tests/sav/base_init_inherit2.sav | 1 + tests/sav/base_init_inherit2_alt0.sav | 5 ++ tests/sav/base_init_inherit2_alt1.sav | 5 ++ tests/sav/base_init_inherit2_alt2.sav | 5 ++ tests/sav/base_init_inherit2_alt3.sav | 1 + tests/sav/base_init_inherit3.sav | 1 + tests/sav/base_init_inherit3_alt0.sav | 7 +++ tests/sav/base_init_inherit3_alt1.sav | 7 +++ tests/sav/base_init_inherit3_alt2.sav | 7 +++ tests/sav/base_init_inherit3_alt3.sav | 7 +++ tests/sav/base_init_inherit4.sav | 1 + tests/sav/base_init_inherit4_alt0.sav | 4 ++ tests/sav/base_init_inherit4_alt1.sav | 4 ++ tests/sav/base_init_inherit4_alt2.sav | 4 ++ tests/sav/base_init_inherit4_alt3.sav | 4 ++ tests/sav/base_init_inherit5.sav | 6 ++ tests/sav/base_init_inherit_alt1.sav | 11 ++++ tests/sav/base_init_simple.sav | 5 ++ tests/sav/base_init_simple_alt1.sav | 3 + 26 files changed, 609 insertions(+) create mode 100644 tests/base_init_inherit.nit create mode 100644 tests/base_init_inherit2.nit create mode 100644 tests/base_init_inherit3.nit create mode 100644 tests/base_init_inherit4.nit create mode 100644 tests/base_init_inherit5.nit create mode 100644 tests/base_init_simple.nit create mode 100644 tests/sav/base_init_inherit.sav create mode 100644 tests/sav/base_init_inherit2.sav create mode 100644 tests/sav/base_init_inherit2_alt0.sav create mode 100644 tests/sav/base_init_inherit2_alt1.sav create mode 100644 tests/sav/base_init_inherit2_alt2.sav create mode 100644 tests/sav/base_init_inherit2_alt3.sav create mode 100644 tests/sav/base_init_inherit3.sav create mode 100644 tests/sav/base_init_inherit3_alt0.sav create mode 100644 tests/sav/base_init_inherit3_alt1.sav create mode 100644 tests/sav/base_init_inherit3_alt2.sav create mode 100644 tests/sav/base_init_inherit3_alt3.sav create mode 100644 tests/sav/base_init_inherit4.sav create mode 100644 tests/sav/base_init_inherit4_alt0.sav create mode 100644 tests/sav/base_init_inherit4_alt1.sav create mode 100644 tests/sav/base_init_inherit4_alt2.sav create mode 100644 tests/sav/base_init_inherit4_alt3.sav create mode 100644 tests/sav/base_init_inherit5.sav create mode 100644 tests/sav/base_init_inherit_alt1.sav create mode 100644 tests/sav/base_init_simple.sav create mode 100644 tests/sav/base_init_simple_alt1.sav diff --git a/tests/base_init_inherit.nit b/tests/base_init_inherit.nit new file mode 100644 index 0000000..9424272 --- /dev/null +++ b/tests/base_init_inherit.nit @@ -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 index 0000000..8265995 --- /dev/null +++ b/tests/base_init_inherit2.nit @@ -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 index 0000000..552e2c6 --- /dev/null +++ b/tests/base_init_inherit3.nit @@ -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 index 0000000..f269809 --- /dev/null +++ b/tests/base_init_inherit4.nit @@ -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 index 0000000..e833b51 --- /dev/null +++ b/tests/base_init_inherit5.nit @@ -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 index 0000000..bab4c7d --- /dev/null +++ b/tests/base_init_simple.nit @@ -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 index 0000000..04165c5 --- /dev/null +++ b/tests/sav/base_init_inherit.sav @@ -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 index 0000000..863486b --- /dev/null +++ b/tests/sav/base_init_inherit2.sav @@ -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 index 0000000..0212e99 --- /dev/null +++ b/tests/sav/base_init_inherit2_alt0.sav @@ -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 index 0000000..3868b73 --- /dev/null +++ b/tests/sav/base_init_inherit2_alt1.sav @@ -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 index 0000000..5bb2c66 --- /dev/null +++ b/tests/sav/base_init_inherit2_alt2.sav @@ -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 index 0000000..70caf2f --- /dev/null +++ b/tests/sav/base_init_inherit2_alt3.sav @@ -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 index 0000000..f8caa8c --- /dev/null +++ b/tests/sav/base_init_inherit3.sav @@ -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 index 0000000..9a3590f --- /dev/null +++ b/tests/sav/base_init_inherit3_alt0.sav @@ -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 index 0000000..3a08969 --- /dev/null +++ b/tests/sav/base_init_inherit3_alt1.sav @@ -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 index 0000000..77e587f --- /dev/null +++ b/tests/sav/base_init_inherit3_alt2.sav @@ -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 index 0000000..7293394 --- /dev/null +++ b/tests/sav/base_init_inherit3_alt3.sav @@ -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 index 0000000..ee7c116 --- /dev/null +++ b/tests/sav/base_init_inherit4.sav @@ -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 index 0000000..1df3160 --- /dev/null +++ b/tests/sav/base_init_inherit4_alt0.sav @@ -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 index 0000000..1b94fae --- /dev/null +++ b/tests/sav/base_init_inherit4_alt1.sav @@ -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 index 0000000..5d31ef6 --- /dev/null +++ b/tests/sav/base_init_inherit4_alt2.sav @@ -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 index 0000000..65961af --- /dev/null +++ b/tests/sav/base_init_inherit4_alt3.sav @@ -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 index 0000000..c67526f --- /dev/null +++ b/tests/sav/base_init_inherit5.sav @@ -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 index 0000000..d36f0a6 --- /dev/null +++ b/tests/sav/base_init_inherit_alt1.sav @@ -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 index 0000000..8fbf529 --- /dev/null +++ b/tests/sav/base_init_simple.sav @@ -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 index 0000000..c31ffd1 --- /dev/null +++ b/tests/sav/base_init_simple_alt1.sav @@ -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. -- 1.7.9.5