Package org.fest.swing.junit.v4_3_1.runner

Source Code of org.fest.swing.junit.v4_3_1.runner.MethodRunner_addFailure_Test$FailureMatcher

/*
* Created on Mar 16, 2009
*
* 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.
*
* Copyright @2009 the original author or authors.
*/
package org.fest.swing.junit.v4_3_1.runner;

import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.reportMatcher;
import static org.easymock.classextension.EasyMock.createMock;
import static org.fest.util.Objects.areEqual;

import java.lang.reflect.Method;

import org.easymock.IArgumentMatcher;
import org.fest.mocks.EasyMockTemplate;
import org.fest.swing.junit.runner.FailureScreenshotTaker;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;

/**
* Tests for <code>{@link MethodRunner#addFailure(Throwable)}</code>.
*
* @author Alex Ruiz
*/
public class MethodRunner_addFailure_Test {

  private Class<?> testClass;
  private RunNotifier notifier;
  private FailureScreenshotTaker screenshotTaker;
  private TestInfo testInfo;
  private MethodRunner runner;
  private Exception exception;
  private Failure expectedFailure;

  @Before public void setUp() {
    testClass = SomeGuiTestFake.class;
    notifier = createMock(RunNotifier.class);
    screenshotTaker = createMock(FailureScreenshotTaker.class);
    exception = new Exception();
  }

  @Test
  public void should_take_screenshot_if_test_fails_and_is_GUI_test() throws Exception {
    setUpUsing("failedGUITest");
    new EasyMockTemplate(notifier, screenshotTaker) {
      protected void expectations() {
        screenshotTaker.saveScreenshot(testInfo.screenshotFileName());
        expectLastCall().once();
        reportMatcherForFailure();
        expectNotifierToFireTestFailure();
      }

      protected void codeToTest() {
        runner.addFailure(exception);
      }
    }.run();
  }

  @Test
  public void should_not_take_screenshot_if_test_fails_and_is_not_GUI_test() throws Exception {
    setUpUsing("failedNonGUITest");
    new EasyMockTemplate(notifier, screenshotTaker) {
      protected void expectations() {
        reportMatcherForFailure();
        expectNotifierToFireTestFailure();
      }

      protected void codeToTest() {
        runner.addFailure(exception);
      }
    }.run();
  }

  private void setUpUsing(String methodName) throws Exception {
    testInfo = new TestInfo(new Object(), testClass, method(methodName));
    runner = new MethodRunner(testInfo, notifier, screenshotTaker);
    expectedFailure = new Failure(testInfo.description(), exception);
  }

  private Method method(String name) throws Exception {
    return testClass.getDeclaredMethod(name);
  }

  private void reportMatcherForFailure() {
    reportMatcher(new FailureMatcher(expectedFailure));
  }

  private void expectNotifierToFireTestFailure() {
    notifier.fireTestFailure(expectedFailure);
    expectLastCall().once();
  }

  private static class FailureMatcher implements IArgumentMatcher {
    private final Failure expected;

    FailureMatcher(Failure expected) {
      this.expected = expected;
    }

    public void appendTo(StringBuffer buffer) {
      buffer.append(expected.getClass().getName()).append("[");
      buffer.append("description=").append(expected.getDescription()).append(",");
      buffer.append("exception=").append(expected.getException().getMessage()).append("]");
    }

    public boolean matches(Object argument) {
      if (!(argument instanceof Failure)) return false;
      Failure actual = (Failure) argument;
      if (!areEqual(expected.getDescription(), actual.getDescription())) return false;
      return areEqual(expected.getException(), actual.getException());
    }
  }
}
TOP

Related Classes of org.fest.swing.junit.v4_3_1.runner.MethodRunner_addFailure_Test$FailureMatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.