From: Jean Privat Date: Mon, 6 Apr 2015 08:19:43 +0000 (+0700) Subject: tests: add error_virtual_type.nit and error_virtual_type2.nit X-Git-Tag: v0.7.4~38^2~1 X-Git-Url: http://nitlanguage.org tests: add error_virtual_type.nit and error_virtual_type2.nit Signed-off-by: Jean Privat --- diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index ba7a1f3..c3c1ca0 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -418,7 +418,7 @@ redef class ModelBuilder var mtype = mproperty.mvirtualtype var poset = new POSet[MType] - # The work-list of type to resolve + # The work-list of types to resolve var todo = new List[MType] todo.add mtype diff --git a/tests/error_virtual_type.nit b/tests/error_virtual_type.nit new file mode 100644 index 0000000..dd7243b --- /dev/null +++ b/tests/error_virtual_type.nit @@ -0,0 +1,35 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import standard::kernel + +class G[E: Object] +end + +class A + fun foo(t: T): Comparable do return t + type T: Comparable #alt1-5# + #alt1#type T: T + #alt2#type T: nullable T + #alt3#type T: G[T] + #alt4#type T: U + #alt4#type U: FAIL + #alt5#type T: U + #alt5#type U: T + fun bar(t: T): Comparable do return t +end + +var a = new A +a.foo(1) +a.bar('1') diff --git a/tests/error_virtual_type2.nit b/tests/error_virtual_type2.nit new file mode 100644 index 0000000..274bb77 --- /dev/null +++ b/tests/error_virtual_type2.nit @@ -0,0 +1,52 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import standard::kernel + +class G[E] +end + +class A + fun foo(t: T): Comparable do return t + #fun foog: nullable G[T] do return barg + type T: Comparable #alt1-5# + type GT: G[T] + #alt1#type T: T + #alt2#type T: nullable T + #alt3#type T: G[T] + #alt4#type T: U + #alt4#type U: FAIL + #alt5#type T: U + #alt5#type U: T + fun bar(t: T): Comparable do return t + #fun barg: nullable G[T] do return foog +end + +class B + super A + redef fun foo(t: T): T do return t + #redef fun foog: GT do return barg + redef type GT: G[Discrete] + #alt6#redef type GT: G[Bool] + redef fun bar(t: T): T do return t + #redef fun barg: GT do return foog +end + +var a = new A +a.foo(1) +a.bar('1') + +var b = new B +b.foo(2) +b.bar('3') diff --git a/tests/sav/error_virtual_type2.res b/tests/sav/error_virtual_type2.res new file mode 100644 index 0000000..417f403 --- /dev/null +++ b/tests/sav/error_virtual_type2.res @@ -0,0 +1 @@ +error_virtual_type2.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of G[T], as in error_virtual_type2#A#GT. diff --git a/tests/sav/error_virtual_type2_alt1.res b/tests/sav/error_virtual_type2_alt1.res new file mode 100644 index 0000000..38cf3dd --- /dev/null +++ b/tests/sav/error_virtual_type2_alt1.res @@ -0,0 +1,5 @@ +alt/error_virtual_type2_alt1.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> T +alt/error_virtual_type2_alt1.nit:25,2--10: Error: circularity of virtual type definition: T <-> T +alt/error_virtual_type2_alt1.nit:38,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt1#A#foo. +alt/error_virtual_type2_alt1.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of null, as in error_virtual_type2_alt1#A#GT. +alt/error_virtual_type2_alt1.nit:42,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt1#A#bar. diff --git a/tests/sav/error_virtual_type2_alt2.res b/tests/sav/error_virtual_type2_alt2.res new file mode 100644 index 0000000..f155524 --- /dev/null +++ b/tests/sav/error_virtual_type2_alt2.res @@ -0,0 +1,5 @@ +alt/error_virtual_type2_alt2.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> nullable T +alt/error_virtual_type2_alt2.nit:25,2--26,19: Error: circularity of virtual type definition: T <-> nullable T +alt/error_virtual_type2_alt2.nit:38,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt2#A#foo. +alt/error_virtual_type2_alt2.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of null, as in error_virtual_type2_alt2#A#GT. +alt/error_virtual_type2_alt2.nit:42,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt2#A#bar. diff --git a/tests/sav/error_virtual_type2_alt3.res b/tests/sav/error_virtual_type2_alt3.res new file mode 100644 index 0000000..80c9981 --- /dev/null +++ b/tests/sav/error_virtual_type2_alt3.res @@ -0,0 +1,5 @@ +alt/error_virtual_type2_alt3.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> G[T] <-> T +alt/error_virtual_type2_alt3.nit:25,2--27,12: Error: circularity of virtual type definition: T <-> G[T] +alt/error_virtual_type2_alt3.nit:38,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt3#A#foo. +alt/error_virtual_type2_alt3.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of null, as in error_virtual_type2_alt3#A#GT. +alt/error_virtual_type2_alt3.nit:42,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt3#A#bar. diff --git a/tests/sav/error_virtual_type2_alt4.res b/tests/sav/error_virtual_type2_alt4.res new file mode 100644 index 0000000..158622e --- /dev/null +++ b/tests/sav/error_virtual_type2_alt4.res @@ -0,0 +1,4 @@ +alt/error_virtual_type2_alt4.nit:29,10--13: Type error: class FAIL not found in module error_virtual_type2_alt4. +alt/error_virtual_type2_alt4.nit:38,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt4#A#foo. +alt/error_virtual_type2_alt4.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of null, as in error_virtual_type2_alt4#A#GT. +alt/error_virtual_type2_alt4.nit:42,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt4#A#bar. diff --git a/tests/sav/error_virtual_type2_alt5.res b/tests/sav/error_virtual_type2_alt5.res new file mode 100644 index 0000000..1efe3e7 --- /dev/null +++ b/tests/sav/error_virtual_type2_alt5.res @@ -0,0 +1,5 @@ +alt/error_virtual_type2_alt5.nit:22,2--24,13: Error: circularity of virtual type definition: GT -> T <-> U +alt/error_virtual_type2_alt5.nit:25,2--30,10: Error: circularity of virtual type definition: T <-> U +alt/error_virtual_type2_alt5.nit:38,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt5#A#foo. +alt/error_virtual_type2_alt5.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of null, as in error_virtual_type2_alt5#A#GT. +alt/error_virtual_type2_alt5.nit:42,23: Redef Error: Wrong return type. found T, expected Comparable as in error_virtual_type2_alt5#A#bar. diff --git a/tests/sav/error_virtual_type2_alt6.res b/tests/sav/error_virtual_type2_alt6.res new file mode 100644 index 0000000..6e05965 --- /dev/null +++ b/tests/sav/error_virtual_type2_alt6.res @@ -0,0 +1,2 @@ +alt/error_virtual_type2_alt6.nit:40,17--26: Redef Error: Wrong bound type. Found G[Discrete], expected a subtype of G[T], as in error_virtual_type2_alt6#A#GT. +alt/error_virtual_type2_alt6.nit:41,2--22: Error: A property GT is already defined in class B at line 39. diff --git a/tests/sav/error_virtual_type_alt1.res b/tests/sav/error_virtual_type_alt1.res new file mode 100644 index 0000000..b87d6c0 --- /dev/null +++ b/tests/sav/error_virtual_type_alt1.res @@ -0,0 +1 @@ +alt/error_virtual_type_alt1.nit:22,2--23,10: Error: circularity of virtual type definition: T <-> T diff --git a/tests/sav/error_virtual_type_alt2.res b/tests/sav/error_virtual_type_alt2.res new file mode 100644 index 0000000..98ff344 --- /dev/null +++ b/tests/sav/error_virtual_type_alt2.res @@ -0,0 +1 @@ +alt/error_virtual_type_alt2.nit:22,2--24,19: Error: circularity of virtual type definition: T <-> nullable T diff --git a/tests/sav/error_virtual_type_alt3.res b/tests/sav/error_virtual_type_alt3.res new file mode 100644 index 0000000..1bad756 --- /dev/null +++ b/tests/sav/error_virtual_type_alt3.res @@ -0,0 +1,2 @@ +alt/error_virtual_type_alt3.nit:25,12: Type error: expected Object, got T +alt/error_virtual_type_alt3.nit:22,2--25,12: Error: circularity of virtual type definition: T <-> G[T] diff --git a/tests/sav/error_virtual_type_alt4.res b/tests/sav/error_virtual_type_alt4.res new file mode 100644 index 0000000..150aef7 --- /dev/null +++ b/tests/sav/error_virtual_type_alt4.res @@ -0,0 +1 @@ +alt/error_virtual_type_alt4.nit:27,10--13: Type error: class FAIL not found in module error_virtual_type_alt4. diff --git a/tests/sav/error_virtual_type_alt5.res b/tests/sav/error_virtual_type_alt5.res new file mode 100644 index 0000000..84b89c9 --- /dev/null +++ b/tests/sav/error_virtual_type_alt5.res @@ -0,0 +1 @@ +alt/error_virtual_type_alt5.nit:22,2--28,10: Error: circularity of virtual type definition: T <-> U