/*
* JBoss, Home of Professional Open Source
* Copyright 2016 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @authors tag. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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 org.jboss.arquillian.test.spi;
import java.util.List;
import org.junit.Test;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.jboss.arquillian.test.spi.TestResult.failed;
public class TestResultFlattenTest {
public static final String LINE_SEPARATOR = System.getProperty("line.separator");
@Test
public void should_flatten_successful_test_results() throws Exception {
// given
final TestResult p1 = TestResult.passed();
final TestResult p2 = TestResult.passed();
final List<TestResult> testResults = asList(p1, p2);
// when
TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.PASSED);
}
@Test
public void should_combine_descriptions() throws Exception {
// given
final TestResult p1 = TestResult.passed("First test passed");
final TestResult p2 = TestResult.passed("Second test passed");
final List<TestResult> testResults = asList(p1, p2);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getDescription()).isEqualTo(
String.format("PASSED: 'First test passed'%nPASSED: 'Second test passed'%n"));
}
@Test
public void should_treat_skipped_and_passed_tests_as_passed_overall() throws Exception {
// given
final TestResult passed = TestResult.passed("Test passed");
final TestResult skipped = TestResult.skipped();
final List<TestResult> testResults = asList(skipped, passed);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.PASSED);
assertThat(result.getDescription()).isEqualTo(String.format("SKIPPED: ''%nPASSED: 'Test passed'%n"));
}
@Test
public void should_combine_skipped_and_passed_tests_descriptions() throws Exception {
// given
final TestResult passed = TestResult.passed("First test passed");
final TestResult skipped = TestResult.skipped("Not implemented yet");
final List<TestResult> testResults = asList(skipped, passed);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getDescription()).isEqualTo(
String.format("SKIPPED: 'Not implemented yet'%nPASSED: 'First test passed'%n"));
}
@Test
public void should_mark_combined_test_result_as_skipped_if_only_skipped_test_results_are_present() throws Exception {
// given
final TestResult s1 = TestResult.skipped();
final TestResult s2 = TestResult.skipped();
final List<TestResult> testResults = asList(s1, s2);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.SKIPPED);
}
@Test
public void should_mark_test_result_as_failed_if_there_is_at_least_one_failure() throws Exception {
// given
final TestResult p1 = TestResult.passed("First test passed");
final TestResult s1 = TestResult.skipped("Not implemented yet");
final TestResult f1 = failed(new RuntimeException("Exception"));
final List<TestResult> testResults = asList(p1, s1, f1);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.FAILED);
}
@Test
public void should_mark_test_result_as_failed_if_there_are_only_failures() throws Exception {
//given
final TestResult e1 = failed(new RuntimeException("Exception 1"));
final TestResult e2 = failed(new RuntimeException("Exception 2"));
final List<TestResult> testResults = asList(e1, e2);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.FAILED);
}
// maybe 2 tests? one with failure one with skipped? open question
@Test
public void should_propagate_exception_when_only_one_cause_reported() throws Exception {
// given
final RuntimeException cause = new RuntimeException("Exception 1");
final TestResult f1 = failed(cause);
final List<TestResult> testResults = asList(f1);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getThrowable()).isEqualTo(cause);
}
@Test
public void should_combine_exceptions_for_all_failures() throws Exception {
// given
final RuntimeException ex1 = new RuntimeException("Exception 1");
final TestResult e1 = failed(ex1);
final RuntimeException ex2 = new RuntimeException("Exception 2");
final TestResult e2 = failed(ex2);
final List<TestResult> testResults = asList(e1, e2);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getThrowable()).isInstanceOf(CombinedException.class);
assertThat(((CombinedException) result.getThrowable()).getCauses()).containsExactly(ex1, ex2);
}
@Test
public void should_create_exception_messages_in_order() throws Exception {
// given
final RuntimeException ex1 = new RuntimeException("Exception 1");
final TestResult e1 = failed(ex1);
final RuntimeException ex2 = new RuntimeException("Exception 2");
final TestResult e2 = failed(ex2);
final List<TestResult> testResults = asList(e2, e1);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getThrowable().getMessage()).isEqualTo("Exception 1: '[java.lang.RuntimeException] Exception 2'"
+ LINE_SEPARATOR
+ "Exception 2: '[java.lang.RuntimeException] Exception 1'"
+ LINE_SEPARATOR);
}
@Test
public void should_ignore_null_entries_in_the_list_of_test_results() throws Exception {
// given
final TestResult p1 = TestResult.passed("First test passed");
final TestResult f1 = failed(new RuntimeException("Exception"));
final List<TestResult> testResults = asList(p1, null, f1);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.FAILED);
}
@Test
public void should_ignore_null_entry_and_treat_result_as_success() throws Exception {
// given
final TestResult p1 = TestResult.passed("First test passed");
final List<TestResult> testResults = asList(p1, null);
// when
final TestResult result = TestResult.flatten(testResults);
// then
assertThat(result.getStatus()).isEqualTo(TestResult.Status.PASSED);
}
}