package org.radargun.config; import org.testng.Assert; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import static org.testng.Assert.*; /** * @author Radim Vansa <rvansa@redhat.com> */ @Test public class InitDestroyTest { public static class A { public ArrayList<Integer> invocations = new ArrayList<>(); @Init public void init1() { invocations.add(1); } @Init public void init2() { invocations.add(2); } @Destroy public void destroy1() { invocations.add(-1); } @Destroy public void destroy2() { invocations.add(-2); } } public static class B extends A { @Init public void init3() { invocations.add(3); } @Destroy public void destroy3() { invocations.add(-3); } } public static class C extends B { @Override public void init1() { invocations.add(4); } @Override public void destroy1() { invocations.add(-4); } } public static class D extends B { @Init @Override public void init1() { invocations.add(4); } @Destroy @Override public void destroy1() { invocations.add(-4); } } public static class E { public ArrayList<Integer> invocations = new ArrayList<>(); @Init private void init1() { invocations.add(1); } @Destroy private void destroy1() { invocations.add(-1); } } public void testB() { B b = new B(); List<Integer> expected = Arrays.asList(1, 2, 3); InitHelper.init(b); assertEquals(b.invocations.size(), 3); assertListEqualsPermuted(b.invocations, expected, 0, 3); assertListIndexEquals(b.invocations, expected, 2); expected = Arrays.asList(-3, -2, -1); b.invocations.clear(); InitHelper.destroy(b); assertEquals(b.invocations.size(), 3); assertListIndexEquals(b.invocations, expected, 0); assertListEqualsPermuted(b.invocations, expected, 1, 3); } public void testC() { C c = new C(); List<Integer> expected = Arrays.asList(4, 2, 3); InitHelper.init(c); assertEquals(c.invocations.size(), 3); assertListEqualsPermuted(c.invocations, expected, 0, 2); assertListIndexEquals(c.invocations, expected, 2); expected = Arrays.asList(-3, -2, -4); c.invocations.clear(); InitHelper.destroy(c); assertEquals(c.invocations.size(), 3); assertListIndexEquals(c.invocations, expected, 0); assertListEqualsPermuted(c.invocations, expected, 1, 3); } public void testD() { D e = new D(); List<Integer> expected = Arrays.asList(2, 3, 4); InitHelper.init(e); assertEquals(e.invocations.size(), 3); assertEquals(e.invocations, expected); expected = Arrays.asList(-4, -3, -2); e.invocations.clear(); InitHelper.destroy(e); assertEquals(e.invocations.size(), 3); assertEquals(e.invocations, expected); } public void testE() { E d = new E(); InitHelper.init(d); InitHelper.destroy(d); Assert.assertEquals(d.invocations, Arrays.asList(1, -1)); } private void assertListIndexEquals(List<Integer> actual, List<Integer> expected, int index) { assertEquals(actual.get(index), expected.get(index)); } private void assertListEqualsPermuted(List<Integer> actual, List<Integer> expected, int fromIndex, int toIndex) { Assert.assertEquals(new HashSet<>(actual.subList(fromIndex, toIndex)), new HashSet<>(expected.subList(fromIndex, toIndex))); } }