[P-unit-devel] SF.net SVN: p-unit: [223] trunk/punit
Status: Beta
Brought to you by:
zhanghuangzhu
|
From: <zha...@us...> - 2007-06-25 01:24:48
|
Revision: 223
http://p-unit.svn.sourceforge.net/p-unit/?rev=223&view=rev
Author: zhanghuangzhu
Date: 2007-06-24 18:24:49 -0700 (Sun, 24 Jun 2007)
Log Message:
-----------
Andrew Zhang: First implementation for Loop test.
Modified Paths:
--------------
trunk/punit/src/org/punit/convention/Convention.java
trunk/punit/src/org/punit/convention/NameConvention.java
trunk/punit/src/org/punit/method/runner/AbstractMethodRunner.java
trunk/punit.extension/src/org/punit/convention/AnnotationConvention.java
trunk/punit.extension/src/org/punit/convention/JUnitAnnotationConvention.java
Added Paths:
-----------
trunk/punit/src/org/punit/method/runner/ToStopThread.java
Modified: trunk/punit/src/org/punit/convention/Convention.java
===================================================================
--- trunk/punit/src/org/punit/convention/Convention.java 2007-06-24 05:27:25 UTC (rev 222)
+++ trunk/punit/src/org/punit/convention/Convention.java 2007-06-25 01:24:49 UTC (rev 223)
@@ -42,6 +42,8 @@
public Method getAfterClassMethod(Class test);
+ public boolean isLoopTest(Object testInstance);
+
public int getToStop(Object testInstance);
public int getToAbort(Object testInstance);
Modified: trunk/punit/src/org/punit/convention/NameConvention.java
===================================================================
--- trunk/punit/src/org/punit/convention/NameConvention.java 2007-06-24 05:27:25 UTC (rev 222)
+++ trunk/punit/src/org/punit/convention/NameConvention.java 2007-06-25 01:24:49 UTC (rev 223)
@@ -116,15 +116,19 @@
return ReflectionUtil.getMethodAndSetAccessible(test, "tearDown", new Class[] {}); //$NON-NLS-1$
}
+ public boolean isLoopTest(Object testInstance) {
+ return testInstance instanceof Loop;
+ }
+
public int getToAbort(Object testInstance) {
- if(testInstance instanceof Loop) {
+ if(isLoopTest(testInstance)) {
((Loop) testInstance).toAbort();
}
return 0;
}
public int getToStop(Object testInstance) {
- if(testInstance instanceof Loop) {
+ if(isLoopTest(testInstance)) {
((Loop) testInstance).toStop();
}
return 0;
Modified: trunk/punit/src/org/punit/method/runner/AbstractMethodRunner.java
===================================================================
--- trunk/punit/src/org/punit/method/runner/AbstractMethodRunner.java 2007-06-24 05:27:25 UTC (rev 222)
+++ trunk/punit/src/org/punit/method/runner/AbstractMethodRunner.java 2007-06-25 01:24:49 UTC (rev 223)
@@ -26,6 +26,10 @@
protected Convention _convention;
+ private transient ToStopThread _toStopThread;
+
+ private transient boolean _isLoop;
+
protected transient Object _testInstance;
protected transient Method _method;
@@ -72,10 +76,14 @@
try {
if (needsRunMethod()) {
init(testInstance, method, params);
- setUpBeforeWatchers(params);
- startWatchers(testInstance, method, params);
- setUpAfterWatchers(params);
- runImpl();
+ startToStopThread();
+ do {
+ setUpBeforeWatchers(params);
+ startWatchers(testInstance, method, params);
+ setUpAfterWatchers(params);
+ runImpl();
+ } while (isLoop());
+ stopToStopThread();
runCheckMethod(testInstance, params);
} else {
startWatchers(testInstance, method, params);
@@ -103,6 +111,18 @@
onMethodEnd(method, testInstance, params, throwable);
}
+ private void startToStopThread() {
+ if(_toStopThread != null) {
+ _toStopThread.start();
+ }
+ }
+
+ private void stopToStopThread() {
+ if(_toStopThread != null) {
+ _toStopThread.close();
+ }
+ }
+
private void runCheckMethod(Object testInstance, Object[] params) {
if(_checkMethod != null) {
ReflectionUtil.invokeMethod(_checkMethod, testInstance, params);
@@ -141,8 +161,28 @@
_tearDownMethod = _convention.getTearDownMethod(_class);
_checkMethod = _convention.getCheckMethod(method);
_expectedException = _convention.getExpectedException(method);
+ int toStop = _convention.getToStop(_testInstance);
+ if (toStop > 0) {
+ _toStopThread = new ToStopThread(new Runnable() {
+ public void run() {
+ stop();
+ }
+ }, toStop);
+ _isLoop = true;
+ } else {
+ _isLoop = false;
+ _toStopThread = null;
+ }
}
+ protected synchronized boolean isLoop() {
+ return _isLoop;
+ }
+
+ protected synchronized void stop() {
+ _isLoop = false;
+ }
+
/**
* This method might be overriden by subclass. The runner may do some more
* things during this step.
Added: trunk/punit/src/org/punit/method/runner/ToStopThread.java
===================================================================
--- trunk/punit/src/org/punit/method/runner/ToStopThread.java (rev 0)
+++ trunk/punit/src/org/punit/method/runner/ToStopThread.java 2007-06-25 01:24:49 UTC (rev 223)
@@ -0,0 +1,41 @@
+/* (C) Copyright 2007, by Andrew Zhang */
+
+package org.punit.method.runner;
+
+public class ToStopThread extends Thread {
+
+ private long _timeout;
+
+ private Object _lock = new Object();
+
+ private boolean _closed;
+
+ private Runnable _runnable;
+
+ public ToStopThread(Runnable runnable, long timeout) {
+ _runnable = runnable;
+ _timeout = timeout;
+ }
+
+ public void run() {
+ synchronized (_lock) {
+ try {
+ _lock.wait(_timeout);
+ } catch (InterruptedException e) {
+
+ }
+ if(_closed) {
+ return;
+ }
+ _runnable.run();
+ }
+ }
+
+ public void close() {
+ _closed = true;
+ synchronized (_lock) {
+ _lock.notifyAll();
+ }
+ }
+
+}
Modified: trunk/punit.extension/src/org/punit/convention/AnnotationConvention.java
===================================================================
--- trunk/punit.extension/src/org/punit/convention/AnnotationConvention.java 2007-06-24 05:27:25 UTC (rev 222)
+++ trunk/punit.extension/src/org/punit/convention/AnnotationConvention.java 2007-06-25 01:24:49 UTC (rev 223)
@@ -109,10 +109,14 @@
}
public int getToAbort(Object testInstance) {
- throw new UnsupportedOperationException();
+ return 0;
}
public int getToStop(Object testInstance) {
- throw new UnsupportedOperationException();
+ return 0;
}
+
+ public boolean isLoopTest(Object testInstance) {
+ return false;
+ }
}
Modified: trunk/punit.extension/src/org/punit/convention/JUnitAnnotationConvention.java
===================================================================
--- trunk/punit.extension/src/org/punit/convention/JUnitAnnotationConvention.java 2007-06-24 05:27:25 UTC (rev 222)
+++ trunk/punit.extension/src/org/punit/convention/JUnitAnnotationConvention.java 2007-06-25 01:24:49 UTC (rev 223)
@@ -84,10 +84,14 @@
}
public int getToAbort(Object testInstance) {
- throw new UnsupportedOperationException();
+ return 0;
}
public int getToStop(Object testInstance) {
- throw new UnsupportedOperationException();
+ return 0;
}
+
+ public boolean isLoopTest(Object testInstance) {
+ return false;
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|