ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ExecutorCompletionServiceTest.java
(Generate patch)

Comparing jsr166/src/test/tck/ExecutorCompletionServiceTest.java (file contents):
Revision 1.3 by dl, Tue May 3 16:02:00 2005 UTC vs.
Revision 1.5 by dl, Mon Aug 1 19:54:04 2005 UTC

# Line 10 | Line 10
10   import junit.framework.*;
11   import java.util.*;
12   import java.util.concurrent.*;
13 + import java.util.concurrent.atomic.*;
14   import java.math.BigInteger;
15   import java.security.*;
16  
# Line 157 | Line 158 | public class ExecutorCompletionServiceTe
158              joinPool(e);
159          }
160      }
161 +     /**
162 +      * Submitting to underlying AES that overrides newTaskFor(Callable)
163 +      * returns and eventually runs Future returned by newTaskFor.
164 +      */
165 +     public void testNewTaskForCallable() {
166 +         final AtomicBoolean done = new AtomicBoolean(false);
167 +         class MyCallableFuture<V> extends FutureTask<V> {
168 +             MyCallableFuture(Callable<V> c) { super(c); }
169 +             protected void done() { done.set(true); }
170 +         }
171 +         ExecutorService e = new ThreadPoolExecutor(
172 +                                 1, 1, 30L, TimeUnit.SECONDS,
173 +                                 new ArrayBlockingQueue<Runnable>(1)) {
174 +             protected <T> RunnableFuture<T> newTaskFor(Callable<T> c) {
175 +                 return new MyCallableFuture<T>(c);
176 +             }
177 +         };
178 +         ExecutorCompletionService<String> ecs =
179 +             new ExecutorCompletionService<String>(e);
180 +         try {
181 +             assertNull(ecs.poll());
182 +             Callable<String> c = new StringTask();
183 +             Future f1 = ecs.submit(c);
184 +             assertTrue("submit must return MyCallableFuture",
185 +                        f1 instanceof MyCallableFuture);
186 +             Future f2 = ecs.take();
187 +             assertSame("submit and take must return same objects", f1, f2);
188 +             assertTrue("completed task must have set done", done.get());
189 +         } catch (Exception ex) {
190 +             unexpectedException();
191 +         } finally {
192 +             joinPool(e);
193 +         }
194 +     }
195 +
196 +     /**
197 +      * Submitting to underlying AES that overrides newTaskFor(Runnable,T)
198 +      * returns and eventually runs Future returned by newTaskFor.
199 +      */
200 +     public void testNewTaskForRunnable() {
201 +         final AtomicBoolean done = new AtomicBoolean(false);
202 +         class MyRunnableFuture<V> extends FutureTask<V> {
203 +             MyRunnableFuture(Runnable t, V r) { super(t, r); }
204 +             protected void done() { done.set(true); }
205 +         }
206 +         ExecutorService e = new ThreadPoolExecutor(
207 +                                 1, 1, 30L, TimeUnit.SECONDS,
208 +                                 new ArrayBlockingQueue<Runnable>(1)) {
209 +             protected <T> RunnableFuture<T> newTaskFor(Runnable t, T r) {
210 +                 return new MyRunnableFuture<T>(t, r);
211 +             }
212 +         };
213 +         ExecutorCompletionService<String> ecs =
214 +             new ExecutorCompletionService<String>(e);
215 +         try {
216 +             assertNull(ecs.poll());
217 +             Callable<String> c = new StringTask();
218 +             Future f1 = ecs.submit(c);
219 +             assertTrue("submit must return MyRunnableFuture",
220 +                        f1 instanceof MyRunnableFuture);
221 +             Future f2 = ecs.take();
222 +             assertSame("submit and take must return same objects", f1, f2);
223 +             assertTrue("completed task must have set done", done.get());
224 +         } catch (Exception ex) {
225 +             unexpectedException();
226 +         } finally {
227 +             joinPool(e);
228 +         }
229 +     }
230 +
231 +
232  
233   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines