B-1_14-DEV merge back to main
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
package com.jacob.test.powerpoint;
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This is really more of a multi threaded tester
|
||||
* <p>
|
||||
* May need to run with some command line options (including from inside Eclipse).
|
||||
* Look in the docs area at the Jacob usage document for command line options.
|
||||
*/
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This is really more of a multi threaded tester
|
||||
* <p>
|
||||
* May need to run with some command line options (including from inside Eclipse).
|
||||
* Look in the docs area at the Jacob usage document for command line options.
|
||||
*/
|
||||
import com.jacob.activeX.ActiveXComponent;
|
||||
import com.jacob.com.ComFailException;
|
||||
import com.jacob.com.ComThread;
|
||||
@@ -17,117 +17,136 @@ import com.jacob.test.BaseTestCase;
|
||||
/**
|
||||
*
|
||||
* power point test program posted to sourceforge to demonstrate memory problem.
|
||||
* The submitter stated they had the problem on windows 2000 with office 2000
|
||||
* I have been unable to duplicate on windows XP with office 2003.
|
||||
* I am comitting this to the tree just in case we need to come back to it.
|
||||
* The submitter stated they had the problem on windows 2000 with office 2000 I
|
||||
* have been unable to duplicate on windows XP with office 2003. I am comitting
|
||||
* this to the tree just in case we need to come back to it.
|
||||
* <P>
|
||||
* This relies on BaseTestCase to provide the root path to the file under test
|
||||
* <p>
|
||||
* May need to run with some command line options (including from inside Eclipse).
|
||||
* Look in the docs area at the Jacob usage document for command line options.
|
||||
* May need to run with some command line options (including from inside
|
||||
* Eclipse). Look in the docs area at the Jacob usage document for command line
|
||||
* options.
|
||||
*/
|
||||
public class PowerpointTest extends BaseTestCase {
|
||||
public class PowerpointTest extends BaseTestCase {
|
||||
private static final int NUM_THREADS = 5;
|
||||
protected static final int NUM_ITERATIONS = 50;
|
||||
|
||||
protected static final int NUM_ITERATIONS = 50;
|
||||
|
||||
/**
|
||||
* main program that lets us run this as a test
|
||||
* @param args
|
||||
*/
|
||||
public void testPowerpoint() {
|
||||
ComThread.InitMTA();
|
||||
|
||||
ActiveXComponent component = new ActiveXComponent("Powerpoint.Application");
|
||||
Dispatch comPowerpoint = component.getObject();
|
||||
|
||||
try {
|
||||
PowerpointTestThread[] threads = new PowerpointTestThread[NUM_THREADS];
|
||||
for (int i=0; i<NUM_THREADS; i++) {
|
||||
threads[i] = new PowerpointTestThread(i+1, comPowerpoint);
|
||||
threads[i].start();
|
||||
}
|
||||
|
||||
boolean allThreadsFinished = false;
|
||||
while (!allThreadsFinished) {
|
||||
allThreadsFinished = true;
|
||||
for (int i=0; i<NUM_THREADS; i++) {
|
||||
if (threads[i].isAlive()) {
|
||||
allThreadsFinished = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!allThreadsFinished) {
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {
|
||||
// no op
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Dispatch.call(comPowerpoint,"Quit");
|
||||
for (int i = 0 ; i < NUM_THREADS; i++){
|
||||
if (threads[i].threadFailedWithException != null){
|
||||
fail ("caught unexpected exception in thread "+
|
||||
threads[i].threadFailedWithException);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
ComThread.Release();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class PowerpointTestThread extends Thread {
|
||||
/**
|
||||
* holds any caught exception so the main/test case can see them
|
||||
* main program that lets us run this as a test
|
||||
*
|
||||
* @param args
|
||||
*/
|
||||
public Throwable threadFailedWithException = null;
|
||||
|
||||
private int threadID;
|
||||
private Dispatch comPowerpoint;
|
||||
|
||||
public PowerpointTestThread(int threadID, Dispatch comPowerpoint) {
|
||||
super("TestThread "+threadID);
|
||||
this.threadID = threadID;
|
||||
this.comPowerpoint = comPowerpoint;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
System.out.println("Thread \""+Thread.currentThread().getName()+"\" started");
|
||||
System.out.flush();
|
||||
ComThread.InitMTA();
|
||||
try {
|
||||
for (int i=0; i<NUM_ITERATIONS; i++) {
|
||||
if (i % 10 == 0) {
|
||||
System.out.println(Thread.currentThread().getName()+": Iteration "+i);
|
||||
System.out.flush();
|
||||
}
|
||||
Dispatch comPresentations = Dispatch.get(comPowerpoint,"Presentations").toDispatch();
|
||||
Dispatch comPresentation = Dispatch.call(comPresentations,
|
||||
"Open",
|
||||
getWindowsFilePathToPackageResource("test"+threadID+".ppt",this.getClass()),
|
||||
new Integer(0),
|
||||
new Integer(0),
|
||||
new Integer(0)).toDispatch();
|
||||
Dispatch.call(comPresentation, "Close");
|
||||
}
|
||||
} catch (ComFailException cfe){
|
||||
threadFailedWithException = cfe;
|
||||
System.err.println(Thread.currentThread().getName()+"\" while working on: "+
|
||||
getWindowsFilePathToPackageResource("test"+threadID+".ppt",this.getClass()));
|
||||
cfe.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
threadFailedWithException = e;
|
||||
System.err.println("Error in Thread \""+Thread.currentThread().getName()+"\":");
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
ComThread.Release();
|
||||
System.out.println("Thread \""+Thread.currentThread().getName()+"\" finished");
|
||||
System.out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public void testPowerpoint() {
|
||||
ComThread.InitMTA();
|
||||
|
||||
ActiveXComponent component = new ActiveXComponent(
|
||||
"Powerpoint.Application");
|
||||
Dispatch comPowerpoint = component.getObject();
|
||||
|
||||
try {
|
||||
PowerpointTestThread[] threads = new PowerpointTestThread[NUM_THREADS];
|
||||
for (int i = 0; i < NUM_THREADS; i++) {
|
||||
threads[i] = new PowerpointTestThread(i + 1, comPowerpoint);
|
||||
threads[i].start();
|
||||
}
|
||||
|
||||
boolean allThreadsFinished = false;
|
||||
while (!allThreadsFinished) {
|
||||
allThreadsFinished = true;
|
||||
for (int i = 0; i < NUM_THREADS; i++) {
|
||||
if (threads[i].isAlive()) {
|
||||
allThreadsFinished = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!allThreadsFinished) {
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {
|
||||
// no op
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Dispatch.call(comPowerpoint, "Quit");
|
||||
for (int i = 0; i < NUM_THREADS; i++) {
|
||||
if (threads[i].threadFailedWithException != null) {
|
||||
fail("caught unexpected exception in thread "
|
||||
+ threads[i].threadFailedWithException);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
ComThread.Release();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* the thread class that runs power point
|
||||
*/
|
||||
public class PowerpointTestThread extends Thread {
|
||||
/**
|
||||
* holds any caught exception so the main/test case can see them
|
||||
*/
|
||||
public Throwable threadFailedWithException = null;
|
||||
|
||||
private int threadID;
|
||||
private Dispatch comPowerpoint;
|
||||
|
||||
/**
|
||||
* thread constructor
|
||||
*
|
||||
* @param threadID
|
||||
* @param comPowerpoint
|
||||
*/
|
||||
public PowerpointTestThread(int threadID, Dispatch comPowerpoint) {
|
||||
super("TestThread " + threadID);
|
||||
this.threadID = threadID;
|
||||
this.comPowerpoint = comPowerpoint;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
System.out.println("Thread \"" + Thread.currentThread().getName()
|
||||
+ "\" started");
|
||||
System.out.flush();
|
||||
ComThread.InitMTA();
|
||||
try {
|
||||
for (int i = 0; i < NUM_ITERATIONS; i++) {
|
||||
if (i % 10 == 0) {
|
||||
System.out.println(Thread.currentThread().getName()
|
||||
+ ": Iteration " + i);
|
||||
System.out.flush();
|
||||
}
|
||||
Dispatch comPresentations = Dispatch.get(comPowerpoint,
|
||||
"Presentations").toDispatch();
|
||||
Dispatch comPresentation = Dispatch.call(
|
||||
comPresentations,
|
||||
"Open",
|
||||
getWindowsFilePathToPackageResource("test"
|
||||
+ threadID + ".ppt", this.getClass()),
|
||||
new Integer(0), new Integer(0), new Integer(0))
|
||||
.toDispatch();
|
||||
Dispatch.call(comPresentation, "Close");
|
||||
}
|
||||
} catch (ComFailException cfe) {
|
||||
threadFailedWithException = cfe;
|
||||
System.err.println(Thread.currentThread().getName()
|
||||
+ "\" while working on: "
|
||||
+ getWindowsFilePathToPackageResource("test" + threadID
|
||||
+ ".ppt", this.getClass()));
|
||||
cfe.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
threadFailedWithException = e;
|
||||
System.err.println("Error in Thread \""
|
||||
+ Thread.currentThread().getName() + "\":");
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
ComThread.Release();
|
||||
System.out.println("Thread \""
|
||||
+ Thread.currentThread().getName() + "\" finished");
|
||||
System.out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user