tests: add error_virtual_type.nit and error_virtual_type2.nit
authorJean Privat <jean@pryen.org>
Mon, 6 Apr 2015 08:19:43 +0000 (15:19 +0700)
committerJean Privat <jean@pryen.org>
Tue, 7 Apr 2015 14:25:55 +0000 (21:25 +0700)
Signed-off-by: Jean Privat <jean@pryen.org>

15 files changed:
src/modelize/modelize_property.nit
tests/error_virtual_type.nit [new file with mode: 0644]
tests/error_virtual_type2.nit [new file with mode: 0644]
tests/sav/error_virtual_type2.res [new file with mode: 0644]
tests/sav/error_virtual_type2_alt1.res [new file with mode: 0644]
tests/sav/error_virtual_type2_alt2.res [new file with mode: 0644]
tests/sav/error_virtual_type2_alt3.res [new file with mode: 0644]
tests/sav/error_virtual_type2_alt4.res [new file with mode: 0644]
tests/sav/error_virtual_type2_alt5.res [new file with mode: 0644]
tests/sav/error_virtual_type2_alt6.res [new file with mode: 0644]
tests/sav/error_virtual_type_alt1.res [new file with mode: 0644]
tests/sav/error_virtual_type_alt2.res [new file with mode: 0644]
tests/sav/error_virtual_type_alt3.res [new file with mode: 0644]
tests/sav/error_virtual_type_alt4.res [new file with mode: 0644]
tests/sav/error_virtual_type_alt5.res [new file with mode: 0644]

index ba7a1f3..c3c1ca0 100644 (file)
@@ -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 (file)
index 0000000..dd7243b
--- /dev/null
@@ -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 (file)
index 0000000..274bb77
--- /dev/null
@@ -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 (file)
index 0000000..417f403
--- /dev/null
@@ -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 (file)
index 0000000..38cf3dd
--- /dev/null
@@ -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 (file)
index 0000000..f155524
--- /dev/null
@@ -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 (file)
index 0000000..80c9981
--- /dev/null
@@ -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 (file)
index 0000000..158622e
--- /dev/null
@@ -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 (file)
index 0000000..1efe3e7
--- /dev/null
@@ -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 (file)
index 0000000..6e05965
--- /dev/null
@@ -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 (file)
index 0000000..b87d6c0
--- /dev/null
@@ -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 (file)
index 0000000..98ff344
--- /dev/null
@@ -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 (file)
index 0000000..1bad756
--- /dev/null
@@ -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 (file)
index 0000000..150aef7
--- /dev/null
@@ -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 (file)
index 0000000..84b89c9
--- /dev/null
@@ -0,0 +1 @@
+alt/error_virtual_type_alt5.nit:22,2--28,10: Error: circularity of virtual type definition: T <-> U