package com.jcwhatever.nucleus.collections.timed; import static org.junit.Assert.assertEquals; import com.jcwhatever.v1_8_R3.BukkitTester; import com.jcwhatever.v1_8_R3.MockPlugin; import com.jcwhatever.nucleus.NucleusTest; import com.jcwhatever.nucleus.collections.java.DequeRunnable; import com.jcwhatever.nucleus.utils.text.TextUtils; import org.junit.Test; import java.util.HashSet; import java.util.Set; public class DecayListTest { @Test public synchronized void testDequeInterface() throws Exception { NucleusTest.init(); MockPlugin plugin = new MockPlugin("dummy").enable(); DecayList<String> list = new DecayList<String>(plugin); DequeRunnable<String> test = new DequeRunnable<>(list, "a", "b", "c"); test.run(); } @Test public synchronized void testPreventDecay() throws Exception { NucleusTest.init(); MockPlugin plugin = new MockPlugin("dummy").enable(); DecayList<String> list = new DecayList<String>(plugin); list.clear(); // check decay prevented by adding before 1 seconds has elapsed (blocking should not matter) for (int i=0; i < 20; i++) { BukkitTester.pause(10); // 10 ticks list.add(String.valueOf(i)); assertEquals(i + 1, list.size()); } } @Test public synchronized void testAllowDecay() throws Exception { NucleusTest.init(); MockPlugin plugin = new MockPlugin("dummy").enable(); plugin.onEnable(); DecayList<String> list = new DecayList<String>(plugin); list.clear(); list.add("a"); list.add("b"); list.add("c"); assertEquals(3, list.size()); Set<Integer> sizes = new HashSet<>(3); Set<String> concatedValues = new HashSet<>(3); long timeout = System.currentTimeMillis() + (1000 * 5);// 5 seconds while(!list.isEmpty() && System.currentTimeMillis() < timeout) { BukkitTester.heartBeat(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } sizes.add(list.size()); concatedValues.add(TextUtils.concat(list, ",")); } //System.out.println(TextUtils.concat(sizes, ", ")); //System.out.println(TextUtils.concat(concatedValues, " | ")); assertEquals(4, sizes.size()); assertEquals(4, concatedValues.size()); assertEquals(true, sizes.contains(0)); assertEquals(true, sizes.contains(1)); assertEquals(true, sizes.contains(2)); assertEquals(true, sizes.contains(3)); } }