Deprecate DeferredCommand and IncrementalCommand. Add MockScheduler. Patch by: bobv Review by: rjrjr Review at http://gwt-code-reviews.appspot.com/982802 git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9041 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/core/client/Scheduler.java b/user/src/com/google/gwt/core/client/Scheduler.java index ef6a090..7fceb6f 100644 --- a/user/src/com/google/gwt/core/client/Scheduler.java +++ b/user/src/com/google/gwt/core/client/Scheduler.java
@@ -21,6 +21,8 @@ * This class provides low-level task scheduling primitives. Any exceptions * thrown by the command objects executed by the scheduler will be passed to the * {@link GWT.UncaughtExceptionHandler} if one is installed. + * + * @see com.google.gwt.core.client.testing.StubScheduler */ public abstract class Scheduler {
diff --git a/user/src/com/google/gwt/core/client/testing/StubScheduler.java b/user/src/com/google/gwt/core/client/testing/StubScheduler.java new file mode 100644 index 0000000..c59fc1a --- /dev/null +++ b/user/src/com/google/gwt/core/client/testing/StubScheduler.java
@@ -0,0 +1,84 @@ +/* + * Copyright 2010 Google Inc. + * + * 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 com.google.gwt.core.client.testing; + +import com.google.gwt.core.client.Scheduler; + +import java.util.ArrayList; +import java.util.List; + +/** + * A no-op implementation of Scheduler that simply records its arguments. + */ +public class StubScheduler extends Scheduler { + private final List<RepeatingCommand> repeatingCommands = new ArrayList<RepeatingCommand>(); + + private final List<ScheduledCommand> scheduledCommands = new ArrayList<ScheduledCommand>(); + + /** + * Returns the RepeatingCommands that have been passed into the MockScheduler. + */ + public List<RepeatingCommand> getRepeatingCommands() { + return repeatingCommands; + } + + /** + * Returns the ScheduledCommands that have been passed into the MockScheduler. + */ + public List<ScheduledCommand> getScheduledCommands() { + return scheduledCommands; + } + + @Override + public void scheduleDeferred(ScheduledCommand cmd) { + scheduledCommands.add(cmd); + } + + @Override + public void scheduleEntry(RepeatingCommand cmd) { + repeatingCommands.add(cmd); + } + + @Override + public void scheduleEntry(ScheduledCommand cmd) { + scheduledCommands.add(cmd); + } + + @Override + public void scheduleFinally(RepeatingCommand cmd) { + repeatingCommands.add(cmd); + } + + @Override + public void scheduleFinally(ScheduledCommand cmd) { + scheduledCommands.add(cmd); + } + + @Override + public void scheduleFixedDelay(RepeatingCommand cmd, int delayMs) { + repeatingCommands.add(cmd); + } + + @Override + public void scheduleFixedPeriod(RepeatingCommand cmd, int delayMs) { + repeatingCommands.add(cmd); + } + + @Override + public void scheduleIncremental(RepeatingCommand cmd) { + repeatingCommands.add(cmd); + } +}
diff --git a/user/src/com/google/gwt/user/client/Command.java b/user/src/com/google/gwt/user/client/Command.java index 90b9bde..e664e31 100644 --- a/user/src/com/google/gwt/user/client/Command.java +++ b/user/src/com/google/gwt/user/client/Command.java
@@ -15,6 +15,8 @@ */ package com.google.gwt.user.client; +import com.google.gwt.core.client.Scheduler; + /** * Encapsulates an action for later execution, often from a different context. * @@ -22,14 +24,16 @@ * The Command interface provides a layer of separation between the code * specifying some behavior and the code invoking that behavior. This separation * aids in creating reusable code. For example, a - * {@link com.google.gwt.user.client.ui.MenuItem} can have a Command - * associated with it that it executes when the menu item is chosen by the user. + * {@link com.google.gwt.user.client.ui.MenuItem} can have a Command associated + * with it that it executes when the menu item is chosen by the user. * Importantly, the code that constructed the Command to be executed when the * menu item is invoked knows nothing about the internals of the MenuItem class - * and vice-versa.</p> + * and vice-versa. + * </p> * - * <p> The Command interface is often implemented with an anonymous inner class. - * For example, + * <p> + * The Command interface is often implemented with an anonymous inner class. For + * example, * * <pre> * Command sayHello = new Command() { @@ -41,9 +45,9 @@ * </pre> * * </p> + * This type extends ScheduledCommand to help migrate from DeferredCommand API. */ -public interface Command { - +public interface Command extends Scheduler.ScheduledCommand { /** * Causes the Command to perform its encapsulated behavior. */
diff --git a/user/src/com/google/gwt/user/client/DeferredCommand.java b/user/src/com/google/gwt/user/client/DeferredCommand.java index 9fe21d4..3601913 100644 --- a/user/src/com/google/gwt/user/client/DeferredCommand.java +++ b/user/src/com/google/gwt/user/client/DeferredCommand.java
@@ -20,7 +20,13 @@ * handlers have completed, using the {@link #addCommand(Command)} or * {@link #addCommand(IncrementalCommand)} methods. This is useful when you need * to execute code outside of the context of the current stack. + * + * @deprecated Replaced by + * {@link com.google.gwt.core.client.Scheduler#scheduleDeferred + * Scheduler.scheduleDeferred()} because the static nature of this + * API prevents effective mocking for JRE-only tests. */ +@Deprecated public class DeferredCommand { private static final CommandExecutor commandExecutor = new CommandExecutor(); @@ -80,6 +86,9 @@ * {@link DeferredCommand}s or pauses that are added after this pause will * wait for an additional cycle through the system event loop before * executing. + * + * @deprecated with no replacement because the presence of this method causes + * arbitrary scheduling decisions */ public static void addPause() { commandExecutor.submit((Command) null);
diff --git a/user/src/com/google/gwt/user/client/IncrementalCommand.java b/user/src/com/google/gwt/user/client/IncrementalCommand.java index d2f9739..dd53bd3 100644 --- a/user/src/com/google/gwt/user/client/IncrementalCommand.java +++ b/user/src/com/google/gwt/user/client/IncrementalCommand.java
@@ -15,6 +15,8 @@ */ package com.google.gwt.user.client; +import com.google.gwt.core.client.Scheduler.RepeatingCommand; + /** * An <code>IncrementalCommand</code> is a command that is broken into one or * more substeps, each substep brings the whole command nearer to completion. @@ -22,8 +24,13 @@ * <code>false</code>. * * {@example com.google.gwt.examples.IncrementalCommandExample} + * + * @deprecated Replaced by {@link RepeatingCommand} and + * {@link com.google.gwt.core.client.Scheduler#scheduleIncremental + * Scheduler.scheduleIncremental()} */ -public interface IncrementalCommand { +@Deprecated +public interface IncrementalCommand extends RepeatingCommand { /** * Causes the <code>IncrementalCommand</code> to execute its encapsulated * behavior.