From b9c4d7ee0450b65b463c0de73973a11a3290b2ee Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Thu, 26 Oct 2017 16:37:34 -0400 Subject: [PATCH] nitunit: fix `before-all` and `after-all` detection Before this commit, nitunit did not lookup annotation from parent modules if no local definition of Sys was found. Signed-off-by: Alexandre Terrasa --- src/testing/testing_suite.nit | 26 ++++++++++++++++++++------ tests/nitunit.args | 1 + tests/sav/nitunit_args13.res | 14 ++++++++++++++ tests/test_nitunit8.nit | 24 ++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 tests/sav/nitunit_args13.res create mode 100644 tests/test_nitunit8.nit diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit index 43ac8f5..aeee668 100644 --- a/src/testing/testing_suite.nit +++ b/src/testing/testing_suite.nit @@ -449,18 +449,32 @@ end redef class MModule # Methods tagged with `before_all` at the module level (in `Sys`) private fun before_all: Array[MMethodDef] do - for mclassdef in mclassdefs do - if mclassdef.name == "Sys" then return mclassdef.before_all + var res = new Array[MMethodDef] + for mmodule in in_importation.greaters do + for mclassdef in mmodule.mclassdefs do + if mclassdef.name != "Sys" then continue + for mpropdef in mclassdef.mpropdefs do + if not mpropdef isa MMethodDef or not mpropdef.is_before_all then continue + res.add mpropdef + end + end end - return new Array[MMethodDef] + return res end # Methods tagged with `after_all` at the module level (in `Sys`) private fun after_all: Array[MMethodDef] do - for mclassdef in mclassdefs do - if mclassdef.name == "Sys" then return mclassdef.after_all + var res = new Array[MMethodDef] + for mmodule in in_importation.greaters do + for mclassdef in mmodule.mclassdefs do + if mclassdef.name != "Sys" then continue + for mpropdef in mclassdef.mpropdefs do + if not mpropdef isa MMethodDef or not mpropdef.is_after_all then continue + res.add mpropdef + end + end end - return new Array[MMethodDef] + return res end end diff --git a/tests/nitunit.args b/tests/nitunit.args index f11b0b1..d55842d 100644 --- a/tests/nitunit.args +++ b/tests/nitunit.args @@ -10,3 +10,4 @@ test_nitunit4 --no-color -o $WRITE test_nitunit5.nit --no-color -o $WRITE test_nitunit6.nit --no-color -o $WRITE test_nitunit7.nit --no-color -o $WRITE +test_nitunit8.nit --no-color -o $WRITE diff --git a/tests/sav/nitunit_args13.res b/tests/sav/nitunit_args13.res new file mode 100644 index 0000000..8c8d3f9 --- /dev/null +++ b/tests/sav/nitunit_args13.res @@ -0,0 +1,14 @@ +==== Test-suite of module test_nitunit8::test_nitunit8 | tests: 3 +[OK] test_nitunit7::test_nitunit7$core::Sys$before_module +[OK] test_nitunit8$TestNitunit8$test_foo +[KO] test_nitunit7::test_nitunit7$core::Sys$after_module + test_nitunit7.nit:29,1--31,3: Runtime Error in file nitunit.out/gen_test_nitunit8.nit + Output + Runtime error: Assert failed (test_nitunit7.nit:30) + + +Docunits: Entities: 3; Documented ones: 0; With nitunits: 0 +Test suites: Classes: 1; Test Cases: 3; Failures: 1 +[FAILURE] 1/3 tests failed. +`nitunit.out` is not removed for investigation. + \ No newline at end of file diff --git a/tests/test_nitunit8.nit b/tests/test_nitunit8.nit new file mode 100644 index 0000000..92ef0bc --- /dev/null +++ b/tests/test_nitunit8.nit @@ -0,0 +1,24 @@ +# 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. + +module test_nitunit8 is test +import test_nitunit7 + +class TestNitunit8 + test + + fun test_foo is test do + assert true + end +end -- 1.7.9.5