From 420fc0b7528599b56a6e92f29dfb718477ce7827 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Tue, 11 Nov 2014 14:23:08 -0500 Subject: [PATCH] tests: test the virtual type SELF MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- tests/base_self_type.nit | 58 ++++++++++++++++++++++++++++++ tests/sav/base_self_type.res | 11 ++++++ tests/sav/base_self_type_alt1.res | 1 + tests/sav/base_self_type_alt2.res | 11 ++++++ tests/sav/base_self_type_alt3.res | 1 + tests/sav/nitg-e/base_self_type.res | 11 ++++++ tests/sav/nitg-e/base_self_type_alt2.res | 11 ++++++ 7 files changed, 104 insertions(+) create mode 100644 tests/base_self_type.nit create mode 100644 tests/sav/base_self_type.res create mode 100644 tests/sav/base_self_type_alt1.res create mode 100644 tests/sav/base_self_type_alt2.res create mode 100644 tests/sav/base_self_type_alt3.res create mode 100644 tests/sav/nitg-e/base_self_type.res create mode 100644 tests/sav/nitg-e/base_self_type_alt2.res diff --git a/tests/base_self_type.nit b/tests/base_self_type.nit new file mode 100644 index 0000000..7c5d204 --- /dev/null +++ b/tests/base_self_type.nit @@ -0,0 +1,58 @@ +# 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 kernel + +class X + fun foo: SELF do return self + fun bar(o: SELF) do o.output_class_name +end + +class Y + super X + +#alt1# redef fun foo do return new X +#alt2# redef fun foo do return new Y +end + +class A[E] + fun foo: Object do return new G[SELF] +end + +class B[F] + super A[F] +end + +class G[E:A[nullable Object]] +end + +var x = new X +x.output_class_name +x.foo.output_class_name +x.bar x + +var y = new Y +y.output_class_name +y.foo.output_class_name +x.bar y +y.bar y +#alt3# y.bar x + +var a = new A[Int] +a.output_class_name +a.foo.output_class_name + +var b = new B[Bool] +b.output_class_name +b.foo.output_class_name diff --git a/tests/sav/base_self_type.res b/tests/sav/base_self_type.res new file mode 100644 index 0000000..4c75853 --- /dev/null +++ b/tests/sav/base_self_type.res @@ -0,0 +1,11 @@ +X +X +X +Y +Y +Y +Y +A[Int] +G[A[Int]] +B[Bool] +G[B[Bool]] diff --git a/tests/sav/base_self_type_alt1.res b/tests/sav/base_self_type_alt1.res new file mode 100644 index 0000000..467d315 --- /dev/null +++ b/tests/sav/base_self_type_alt1.res @@ -0,0 +1 @@ +alt/base_self_type_alt1.nit:25,25--29: Type error: expected SELF, got X diff --git a/tests/sav/base_self_type_alt2.res b/tests/sav/base_self_type_alt2.res new file mode 100644 index 0000000..4c75853 --- /dev/null +++ b/tests/sav/base_self_type_alt2.res @@ -0,0 +1,11 @@ +X +X +X +Y +Y +Y +Y +A[Int] +G[A[Int]] +B[Bool] +G[B[Bool]] diff --git a/tests/sav/base_self_type_alt3.res b/tests/sav/base_self_type_alt3.res new file mode 100644 index 0000000..78888be --- /dev/null +++ b/tests/sav/base_self_type_alt3.res @@ -0,0 +1 @@ +alt/base_self_type_alt3.nit:50,7: Type error: expected Y, got X diff --git a/tests/sav/nitg-e/base_self_type.res b/tests/sav/nitg-e/base_self_type.res new file mode 100644 index 0000000..3c20b42 --- /dev/null +++ b/tests/sav/nitg-e/base_self_type.res @@ -0,0 +1,11 @@ +X +X +X +Y +Y +Y +Y +A +G +B +G diff --git a/tests/sav/nitg-e/base_self_type_alt2.res b/tests/sav/nitg-e/base_self_type_alt2.res new file mode 100644 index 0000000..3c20b42 --- /dev/null +++ b/tests/sav/nitg-e/base_self_type_alt2.res @@ -0,0 +1,11 @@ +X +X +X +Y +Y +Y +Y +A +G +B +G -- 1.7.9.5