KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > foxtrot > test > MultiWorkerThreadTest


1 /**
2  * Copyright (c) 2002-2005, Simone Bordet
3  * All rights reserved.
4  *
5  * This software is distributable under the BSD license.
6  * See the terms of the BSD license in the documentation provided with this software.
7  */

8
9 package foxtrot.test;
10
11 import foxtrot.workers.MultiWorkerThread;
12 import foxtrot.Job;
13
14 /**
15  * @version $Revision: 1.2 $
16  */

17 public class MultiWorkerThreadTest extends FoxtrotTestCase
18 {
19    public MultiWorkerThreadTest(String JavaDoc s)
20    {
21       super(s);
22    }
23
24    public void testThreads() throws Exception JavaDoc
25    {
26       final MutableHolder thread = new MutableHolder(null);
27       final MultiWorkerThread worker = new MultiWorkerThread()
28       {
29          public void run()
30          {
31             thread.set(Thread.currentThread());
32             super.run();
33          }
34       };
35       invokeTest(worker, new Runnable JavaDoc()
36       {
37          public void run()
38          {
39             worker.start();
40
41             final MutableHolder runner = new MutableHolder(null);
42             worker.postTask(new Job()
43             {
44                public Object JavaDoc run()
45                {
46                   runner.set(Thread.currentThread());
47                   return null;
48                }
49             });
50
51             sleep(1000);
52
53             if (thread.get() == runner.get()) fail();
54          }
55       }, null);
56    }
57
58    public void testLongBeforeShort() throws Exception JavaDoc
59    {
60       final MultiWorkerThread worker = new MultiWorkerThread();
61       invokeTest(worker, new Runnable JavaDoc()
62       {
63          public void run()
64          {
65             worker.start();
66
67             // A long Task followed by a short one.
68
final long longDelay = 5000;
69             final MutableInteger longer = new MutableInteger(0);
70             worker.postTask(new Job()
71             {
72                public Object JavaDoc run()
73                {
74                   longer.set(1);
75                   sleep(longDelay);
76                   longer.set(2);
77                   return null;
78                }
79             });
80             final long shortDelay = 2000;
81             final MutableInteger shorter = new MutableInteger(0);
82             worker.postTask(new Job()
83             {
84                public Object JavaDoc run()
85                {
86                   shorter.set(1);
87                   sleep(shortDelay);
88                   shorter.set(2);
89                   return null;
90                }
91             });
92
93             sleep(shortDelay / 2);
94             if (shorter.get() != 1) fail();
95             if (longer.get() != 1) fail();
96
97             sleep(shortDelay);
98             if (shorter.get() != 2) fail();
99             if (longer.get() != 1) fail();
100
101             sleep(longDelay);
102             if (longer.get() != 2) fail();
103          }
104       }, null);
105    }
106 }
107
Popular Tags