From 1794bffec199adfe221c070e53f47899554d8771 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Wed, 10 Jul 2019 10:06:22 -0400 Subject: [PATCH] tests: add base_safe.nit for safe calls Signed-off-by: Jean Privat --- tests/base_safe.nit | 51 ++++++++++++++++++++++++++++++++++++++++++ tests/sav/base_safe.res | 10 +++++++++ tests/sav/base_safe_alt1.res | 2 ++ tests/sav/base_safe_alt2.res | 13 +++++++++++ tests/sav/base_safe_alt3.res | 13 +++++++++++ tests/sav/base_safe_alt4.res | 14 ++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 tests/base_safe.nit create mode 100644 tests/sav/base_safe.res create mode 100644 tests/sav/base_safe_alt1.res create mode 100644 tests/sav/base_safe_alt2.res create mode 100644 tests/sav/base_safe_alt3.res create mode 100644 tests/sav/base_safe_alt4.res diff --git a/tests/base_safe.nit b/tests/base_safe.nit new file mode 100644 index 0000000..3e34c31 --- /dev/null +++ b/tests/base_safe.nit @@ -0,0 +1,51 @@ +# 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 core::kernel + +class A + fun foo(i: Int) do + 'F'.output + i.output + end + + fun bar(i: Int): A do + 'B'.output + i.output + return self + end +end + +fun test(a: nullable A) do + 'a'.output + (a == null).output + a?.foo(1) + + var r = a?.bar(2) + 'r'.output + (r == null).output + + a?.bar(10)?.bar(11)?.foo(12) + #alt2#a.bar(20).foo(21) + #alt3#a?.bar(20).foo(21) + #alt4#a.bar(20)?.foo(21) +end + +var a = new A +test(a) +'\n'.output +test(null) + +#alt1#a?.foo(10) +#alt1#null?.foo(11) diff --git a/tests/sav/base_safe.res b/tests/sav/base_safe.res new file mode 100644 index 0000000..622ceaa --- /dev/null +++ b/tests/sav/base_safe.res @@ -0,0 +1,10 @@ +afalse +F1 +B2 +rfalse +B10 +B11 +F12 + +atrue +rtrue diff --git a/tests/sav/base_safe_alt1.res b/tests/sav/base_safe_alt1.res new file mode 100644 index 0000000..8512172 --- /dev/null +++ b/tests/sav/base_safe_alt1.res @@ -0,0 +1,2 @@ +alt/base_safe_alt1.nit:50,1--2: Warning: useless safe operator `?` on non-nullable value. +alt/base_safe_alt1.nit:51,1--5: Error: safe operator `?` on `null`. diff --git a/tests/sav/base_safe_alt2.res b/tests/sav/base_safe_alt2.res new file mode 100644 index 0000000..f7df0a0 --- /dev/null +++ b/tests/sav/base_safe_alt2.res @@ -0,0 +1,13 @@ +Runtime error: Receiver is null (alt/base_safe_alt2.nit:40) +afalse +F1 +B2 +rfalse +B10 +B11 +F12 +B20 +F21 + +atrue +rtrue diff --git a/tests/sav/base_safe_alt3.res b/tests/sav/base_safe_alt3.res new file mode 100644 index 0000000..f367bdd --- /dev/null +++ b/tests/sav/base_safe_alt3.res @@ -0,0 +1,13 @@ +Runtime error: Receiver is null (alt/base_safe_alt3.nit:41) +afalse +F1 +B2 +rfalse +B10 +B11 +F12 +B20 +F21 + +atrue +rtrue diff --git a/tests/sav/base_safe_alt4.res b/tests/sav/base_safe_alt4.res new file mode 100644 index 0000000..e0972a4 --- /dev/null +++ b/tests/sav/base_safe_alt4.res @@ -0,0 +1,14 @@ +alt/base_safe_alt4.nit:42,2--11: Warning: useless safe operator `?` on non-nullable value. +Runtime error: Receiver is null (alt/base_safe_alt4.nit:42) +afalse +F1 +B2 +rfalse +B10 +B11 +F12 +B20 +F21 + +atrue +rtrue -- 1.7.9.5