All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ratpack.test.UnitTest Maven / Gradle / Ivy

There is a newer version: 2.0.0-rc-1
Show newest version
/*
 * Copyright 2013 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ratpack.test;

import ratpack.func.Action;
import ratpack.handling.Chain;
import ratpack.handling.Handler;
import ratpack.test.handling.HandlingResult;
import ratpack.test.handling.RequestFixture;
import ratpack.test.handling.internal.DefaultRequestFixture;

/**
 * Static methods for the unit testing of handlers.
 */
public abstract class UnitTest {

  private UnitTest() {
  }

  /**
   * Unit test a single {@link Handler}.
   *
   * 
{@code
   * import ratpack.handling.Context;
   * import ratpack.handling.Handler;
   * import ratpack.test.UnitTest;
   * import ratpack.test.handling.HandlingResult;
   *
   * public class Example {
   *
   *   public static class MyHandler implements Handler {
   *     public void handle(Context ctx) throws Exception {
   *       String outputHeaderValue = ctx.getRequest().getHeaders().get("input-value") + ":bar";
   *       ctx.getResponse().getHeaders().set("output-value", outputHeaderValue);
   *       ctx.render("received: " + ctx.getRequest().getPath());
   *     }
   *   }
   *
   *   public static void main(String[] args) throws Exception {
   *     HandlingResult result = UnitTest.handle(new MyHandler(), fixture ->
   *         fixture.header("input-value", "foo").uri("some/path")
   *     );
   *
   *     assert result.rendered(String.class).equals("received: some/path");
   *     assert result.getHeaders().get("output-value").equals("foo:bar");
   *   }
   * }
   * }
* * @param handler The handler to invoke * @param action The configuration of the context for the handler * @return A result object indicating what happened * @throws ratpack.test.handling.HandlerTimeoutException if the handler takes more than {@link ratpack.test.handling.RequestFixture#timeout(int)} seconds to send a response or call {@code next()} on the context * @throws Exception any thrown by {@code action} * @see #handle(Action, Action) */ @SuppressWarnings("overloads") public static HandlingResult handle(Handler handler, Action action) throws Exception { RequestFixture requestFixture = requestFixture(); action.execute(requestFixture); return requestFixture.handle(handler); } /** * Unit test a {@link Handler} chain. * *
{@code
   * import ratpack.func.Action;
   * import ratpack.handling.Chain;
   * import ratpack.test.UnitTest;
   * import ratpack.test.handling.HandlingResult;
   *
   * public class Example {
   *
   *   public static class MyHandlers implements Action {
   *     public void execute(Chain chain) throws Exception {
   *       chain.handler(ctx -> {
   *         String outputHeaderValue = ctx.getRequest().getHeaders().get("input-value") + ":bar";
   *         ctx.getResponse().getHeaders().set("output-value", outputHeaderValue);
   *         ctx.next();
   *       });
   *       chain.handler(ctx -> {
   *         ctx.render("received: " + ctx.getRequest().getPath());
   *       });
   *     }
   *   }
   *
   *   public static void main(String[] args) throws Exception {
   *     HandlingResult result = UnitTest.handle(new MyHandlers(), fixture ->
   *         fixture.header("input-value", "foo").uri("some/path")
   *     );
   *
   *     assert result.rendered(String.class).equals("received: some/path");
   *     assert result.getHeaders().get("output-value").equals("foo:bar");
   *   }
   * }
   * }
* * @param chainAction the definition of a handler chain to test * @param requestFixtureAction the configuration of the request fixture * @return a result object indicating what happened * @throws ratpack.test.handling.HandlerTimeoutException if the handler takes more than {@link ratpack.test.handling.RequestFixture#timeout(int)} seconds to send a response or call {@code next()} on the context * @throws Exception any thrown by {@code chainAction} or {@code requestFixtureAction} * @see #handle(Handler, Action) */ @SuppressWarnings("overloads") public static HandlingResult handle(Action chainAction, Action requestFixtureAction) throws Exception { RequestFixture requestFixture = requestFixture(); requestFixtureAction.execute(requestFixture); return requestFixture.handleChain(chainAction); } /** * Create a request fixture, for unit testing of {@link Handler handlers}. * * @see #handle(ratpack.handling.Handler, ratpack.func.Action) * @see #handle(ratpack.func.Action, ratpack.func.Action) * @return a request fixture */ public static RequestFixture requestFixture() { return new DefaultRequestFixture(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy