/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.errai.bus.client.api; import org.jboss.errai.common.client.api.tasks.AsyncTask; import org.jboss.errai.common.client.api.tasks.TaskManagerFactory; import org.jboss.errai.common.client.util.TimeUnit; import com.google.gwt.user.client.Timer; public class ClientTaskManagerTimedTaskTest extends ClientAsyncTaskTest { private CountingRunnable latestRunnable; @Override protected AsyncTask getTaskUnderTest(final CountingRunnable task) { latestRunnable = task; assertEquals("Hey, you can't pass me a used runnable!", 0, task.getRunCount()); return TaskManagerFactory.get().schedule(TimeUnit.MILLISECONDS, 100, latestRunnable); } @Override protected void runAfterTaskFinished(final Runnable r) { new Timer() { @Override public void run() { if (latestRunnable.getRunCount() > 0) { System.out.println("Task is complete"); r.run(); } else { System.out.println("Task still hasn't run"); schedule(100); } } }.schedule(120); } public void testRepeatingTask() throws Exception { final CountingRunnable cr = new CountingRunnable(); final AsyncTask task = TaskManagerFactory.get() .scheduleRepeating(TimeUnit.MILLISECONDS, 50, cr); // TODO move this to AbstractAsyncTaskTest and make sure it works on both the client and the server new Timer() { @Override public void run() { task.cancel(true); final int actualRunCount = cr.getRunCount(); final int expectedRunCount = 30; assertTrue("task executed " + actualRunCount + " times. Should have been at least " + expectedRunCount, actualRunCount >= expectedRunCount); finishTest(); } }.schedule(2000); delayTestFinish(5000); } }