@@ -0,0 +1,1555 @@
+package com.github.havarunner.beforeafter;%0A%0Aimport com.github.havarunner.HavaRunner;%0Aimport com.github.havarunner.annotation.RunSequentially;%0Aimport com.google.common.collect.Lists;%0Aimport com.google.common.collect.Sets;%0Aimport org.junit.Before;%0Aimport org.junit.Test;%0A%0Aimport static com.github.havarunner.TestHelper.run;%0Aimport static org.junit.Assert.assertEquals;%0Aimport static org.junit.Assert.assertTrue;%0A%0Apublic class BeforeCallOrderTest %7B%0A    static long grandParentBeforeCalled;%0A    static long parentBeforeCalled;%0A    static long childBeforeCalled;%0A%0A    @Test%0A    public void HavaRunner_calls_the_ancestor_befores_first() %7B%0A        run(new HavaRunner(Child.class));%0A        assertTrue(grandParentBeforeCalled %3C parentBeforeCalled);%0A        assertTrue(parentBeforeCalled %3C childBeforeCalled);%0A    %7D%0A%0A    static class Child extends Parent %7B%0A        @Before%0A        void childBefore() throws InterruptedException %7B%0A            Thread.sleep(1);%0A            childBeforeCalled = System.currentTimeMillis();%0A        %7D%0A%0A        @Test%0A        void hello() %7B%7D%0A    %7D%0A%0A    abstract static class Parent extends GrandParent %7B%0A        @Before%0A        void parentBefore() throws InterruptedException %7B%0A            Thread.sleep(1);%0A            parentBeforeCalled = System.currentTimeMillis();%0A        %7D%0A    %7D%0A%0A    @RunSequentially%0A    abstract static class GrandParent %7B%0A        @Before%0A        void grandParentBefore() throws InterruptedException %7B%0A            Thread.sleep(1);%0A            grandParentBeforeCalled = System.currentTimeMillis();%0A        %7D%0A    %7D%0A%7D%0A

Add spec on @Before call order