@@ -0,0 +1,2207 @@
+/*%0D%0A * (C) Copyright 2022 Boni Garcia (https://bonigarcia.github.io/)%0D%0A *%0D%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0D%0A * you may not use this file except in compliance with the License.%0D%0A * You may obtain a copy of the License at%0D%0A *%0D%0A *   http://www.apache.org/licenses/LICENSE-2.0%0D%0A *%0D%0A * Unless required by applicable law or agreed to in writing, software%0D%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0D%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0D%0A * See the License for the specific language governing permissions and%0D%0A * limitations under the License.%0D%0A *%0D%0A */%0D%0Apackage io.github.bonigarcia;%0D%0A%0D%0Aimport static java.lang.invoke.MethodHandles.lookup;%0D%0Aimport static org.slf4j.LoggerFactory.getLogger;%0D%0A%0D%0Aimport org.junit.After;%0D%0Aimport org.junit.AfterClass;%0D%0Aimport org.junit.Before;%0D%0Aimport org.junit.BeforeClass;%0D%0Aimport org.junit.Rule;%0D%0Aimport org.junit.Test;%0D%0Aimport org.junit.rules.RuleChain;%0D%0Aimport org.junit.rules.TestRule;%0D%0Aimport org.junit.runner.Description;%0D%0Aimport org.junit.runners.model.Statement;%0D%0Aimport org.slf4j.Logger;%0D%0A%0D%0Apublic class TestRuleChain %7B%0D%0A%0D%0A    static final Logger log = getLogger(lookup().lookupClass());%0D%0A%0D%0A    @Rule%0D%0A    public TestRule chain = RuleChain.outerRule(new BasicRule(%22outer%22))%0D%0A            .around(new BasicRule(%22middle%22)).around(new BasicRule(%22inner%22));%0D%0A%0D%0A    @BeforeClass%0D%0A    public static void beforeclass() %7B%0D%0A        log.debug(%22@BeforeClass%22);%0D%0A    %7D%0D%0A%0D%0A    @Before%0D%0A    public void before() %7B%0D%0A        log.debug(%22@Before%22);%0D%0A    %7D%0D%0A%0D%0A    @Test%0D%0A    public void test() %7B%0D%0A        log.debug(%22@Test%22);%0D%0A    %7D%0D%0A%0D%0A    @AfterClass%0D%0A    public static void afterclass() %7B%0D%0A        log.debug(%22@AfterClass%22);%0D%0A    %7D%0D%0A%0D%0A    @After%0D%0A    public void after() %7B%0D%0A        log.debug(%22@After%22);%0D%0A    %7D%0D%0A%0D%0A    private static class BasicRule implements TestRule %7B%0D%0A%0D%0A        private String name;%0D%0A%0D%0A        public BasicRule(String name) %7B%0D%0A            this.name = name;%0D%0A        %7D%0D%0A%0D%0A        public Statement apply(final Statement base,%0D%0A                final Description description) %7B%0D%0A            log.debug(%22Rule %7B%7D applied%22, name);%0D%0A            return base;%0D%0A        %7D%0D%0A%0D%0A    %7D%0D%0A%0D%0A%7D%0D%0A

Include test using JUnit 4's RuleChain