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.4 by dl, Fri Jul 8 20:00:10 2005 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines