Add proper unit tests for chain pattern #293
This commit is contained in:
parent
6c1f025d0f
commit
1fa617d08d
@ -15,6 +15,7 @@ public class OrcCommander extends RequestHandler {
|
|||||||
public void handleRequest(Request req) {
|
public void handleRequest(Request req) {
|
||||||
if (req.getRequestType().equals(RequestType.DEFEND_CASTLE)) {
|
if (req.getRequestType().equals(RequestType.DEFEND_CASTLE)) {
|
||||||
printHandling(req);
|
printHandling(req);
|
||||||
|
req.markHandled();
|
||||||
} else {
|
} else {
|
||||||
super.handleRequest(req);
|
super.handleRequest(req);
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ public class OrcOfficer extends RequestHandler {
|
|||||||
public void handleRequest(Request req) {
|
public void handleRequest(Request req) {
|
||||||
if (req.getRequestType().equals(RequestType.TORTURE_PRISONER)) {
|
if (req.getRequestType().equals(RequestType.TORTURE_PRISONER)) {
|
||||||
printHandling(req);
|
printHandling(req);
|
||||||
|
req.markHandled();
|
||||||
} else {
|
} else {
|
||||||
super.handleRequest(req);
|
super.handleRequest(req);
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ public class OrcSoldier extends RequestHandler {
|
|||||||
public void handleRequest(Request req) {
|
public void handleRequest(Request req) {
|
||||||
if (req.getRequestType().equals(RequestType.COLLECT_TAX)) {
|
if (req.getRequestType().equals(RequestType.COLLECT_TAX)) {
|
||||||
printHandling(req);
|
printHandling(req);
|
||||||
|
req.markHandled();
|
||||||
} else {
|
} else {
|
||||||
super.handleRequest(req);
|
super.handleRequest(req);
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,78 @@
|
|||||||
package com.iluwatar.chain;
|
package com.iluwatar.chain;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* Request
|
* Request
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class Request {
|
public class Request {
|
||||||
|
|
||||||
private String requestDescription;
|
/**
|
||||||
private RequestType requestType;
|
* The type of this request, used by each item in the chain to see if they should or can handle
|
||||||
|
* this particular request
|
||||||
|
*/
|
||||||
|
private final RequestType requestType;
|
||||||
|
|
||||||
public Request(RequestType requestType, String requestDescription) {
|
/**
|
||||||
this.setRequestType(requestType);
|
* A description of the request
|
||||||
this.setRequestDescription(requestDescription);
|
*/
|
||||||
|
private final String requestDescription;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the request is handled or not. A request can only switch state from unhandled to
|
||||||
|
* handled, there's no way to 'unhandle' a request
|
||||||
|
*/
|
||||||
|
private boolean handled = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new request of the given type and accompanied description.
|
||||||
|
*
|
||||||
|
* @param requestType The type of request
|
||||||
|
* @param requestDescription The description of the request
|
||||||
|
*/
|
||||||
|
public Request(final RequestType requestType, final String requestDescription) {
|
||||||
|
this.requestType = Objects.requireNonNull(requestType);
|
||||||
|
this.requestDescription = Objects.requireNonNull(requestDescription);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a description of the request
|
||||||
|
*
|
||||||
|
* @return A human readable description of the request
|
||||||
|
*/
|
||||||
public String getRequestDescription() {
|
public String getRequestDescription() {
|
||||||
return requestDescription;
|
return requestDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRequestDescription(String requestDescription) {
|
/**
|
||||||
this.requestDescription = requestDescription;
|
* Get the type of this request, used by each person in the chain of command to see if they should
|
||||||
}
|
* or can handle this particular request
|
||||||
|
*
|
||||||
|
* @return The request type
|
||||||
|
*/
|
||||||
public RequestType getRequestType() {
|
public RequestType getRequestType() {
|
||||||
return requestType;
|
return requestType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRequestType(RequestType requestType) {
|
/**
|
||||||
this.requestType = requestType;
|
* Mark the request as handled
|
||||||
|
*/
|
||||||
|
public void markHandled() {
|
||||||
|
this.handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if this request is handled or not
|
||||||
|
*
|
||||||
|
* @return <tt>true</tt> when the request is handled, <tt>false</tt> if not
|
||||||
|
*/
|
||||||
|
public boolean isHandled() {
|
||||||
|
return this.handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return getRequestDescription();
|
return getRequestDescription();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
37
chain/src/test/java/com/iluwatar/chain/OrcKingTest.java
Normal file
37
chain/src/test/java/com/iluwatar/chain/OrcKingTest.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package com.iluwatar.chain;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date: 12/6/15 - 9:29 PM
|
||||||
|
*
|
||||||
|
* @author Jeroen Meulemeester
|
||||||
|
*/
|
||||||
|
public class OrcKingTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All possible requests
|
||||||
|
*/
|
||||||
|
private static final Request[] REQUESTS = new Request[]{
|
||||||
|
new Request(RequestType.DEFEND_CASTLE, "Don't let the barbarians enter my castle!!"),
|
||||||
|
new Request(RequestType.TORTURE_PRISONER, "Don't just stand there, tickle him!"),
|
||||||
|
new Request(RequestType.COLLECT_TAX, "Don't steal, the King hates competition ..."),
|
||||||
|
};
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMakeRequest() throws Exception {
|
||||||
|
final OrcKing king = new OrcKing();
|
||||||
|
|
||||||
|
for (final Request request : REQUESTS) {
|
||||||
|
king.makeRequest(request);
|
||||||
|
assertTrue(
|
||||||
|
"Expected all requests from King to be handled, but [" + request + "] was not!",
|
||||||
|
request.isHandled()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user