package net.md_5.bungee.scheduler; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import net.md_5.bungee.api.plugin.DummyPlugin; import net.md_5.bungee.api.scheduler.ScheduledTask; import net.md_5.bungee.api.scheduler.TaskScheduler; import org.junit.Assert; import org.junit.Test; public class SchedulerTest { @Test public void testRun() throws InterruptedException { TaskScheduler scheduler = new BungeeScheduler(); final CountDownLatch latch = new CountDownLatch( 1 ); scheduler.runAsync( DummyPlugin.INSTANCE, new Runnable() { @Override public void run() { latch.countDown(); } } ); latch.await( 5, TimeUnit.SECONDS ); Assert.assertEquals( 0, latch.getCount() ); } @Test public void testCancel() throws InterruptedException { TaskScheduler scheduler = new BungeeScheduler(); AtomicBoolean b = new AtomicBoolean(); ScheduledTask task = setup( scheduler, b ); scheduler.cancel( task.getId() ); Thread.sleep( 250 ); Assert.assertFalse( b.get() ); task = setup( scheduler, b ); scheduler.cancel( task ); Thread.sleep( 250 ); Assert.assertFalse( b.get() ); task = setup( scheduler, b ); scheduler.cancel( task.getOwner() ); Thread.sleep( 250 ); Assert.assertFalse( b.get() ); } @Test public void testScheduleAndRepeat() throws InterruptedException { TaskScheduler scheduler = new BungeeScheduler(); AtomicBoolean b = new AtomicBoolean(); setup( scheduler, b ); Thread.sleep( 250 ); Assert.assertTrue( b.get() ); b.set( false ); Thread.sleep( 250 ); Assert.assertTrue( b.get() ); } private ScheduledTask setup(TaskScheduler scheduler, final AtomicBoolean hasRun) { return scheduler.schedule( DummyPlugin.INSTANCE, new Runnable() { @Override public void run() { hasRun.set( true ); } }, 100, 100, TimeUnit.MILLISECONDS ); } }