// Path: extension-testing/src/main/java/name/falgout/jeffrey/testing/junit/testing/TestPlanExecutionReport.java
// @AutoValue
// public static abstract class DisplayName {
//   public static DisplayName create(String... names) {
//     return create(Arrays.asList(names));
//   }
// 
//   public static DisplayName create(Collection<? extends String> names) {
//     return new AutoValue_TestPlanExecutionReport_DisplayName(ImmutableList.copyOf(names));
//   }
// 
//   DisplayName() {}
// 
//   public abstract ImmutableList<String> getNames();
// }


import static com.google.common.truth.Truth.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import java.io.IOException;
import name.falgout.jeffrey.testing.junit.testing.ExpectFailure.Cause;
import name.falgout.jeffrey.testing.junit.testing.TestPlanExecutionReport.DisplayName;
import org.junit.jupiter.api.Test;
      @Cause(type = IllegalArgumentException.class, message = "bar"),
      @Cause(type = IOException.class, message = "something else"),
  })
  @Test
  void matchingCauses() {
    throw new IllegalArgumentException("Foo bar", new IOException("something else"));
  }

  @ExpectFailure(@Cause(type = IllegalArgumentException.class))
  @Test
  void messageIsOptional() {
    throw new IllegalArgumentException("Anything you want");
  }

  @ExpectFailure(@Cause(message = "only message"))
  @Test
  void typeIsOptional() {
    throw new Error("only message");
  }

  @ExpectFailure
  @Test
  void causeIsOptional() {
    throw new IllegalArgumentException();
  }

  @Test
  void negativeExamples() {
    TestPlanExecutionReport report = ExtensionTester.runTests(NegativeExamples.class);

// Path: extension-testing/src/main/java/name/falgout/jeffrey/testing/junit/testing/TestPlanExecutionReport.java
// @AutoValue
// public static abstract class DisplayName {
//   public static DisplayName create(String... names) {
//     return create(Arrays.asList(names));
//   }
// 
//   public static DisplayName create(Collection<? extends String> names) {
//     return new AutoValue_TestPlanExecutionReport_DisplayName(ImmutableList.copyOf(names));
//   }
// 
//   DisplayName() {}
// 
//   public abstract ImmutableList<String> getNames();
// }


// Path: extension-testing/src/test/java/name/falgout/jeffrey/testing/junit/testing/ExpectFailureTest.java
import static com.google.common.truth.Truth.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import java.io.IOException;
import name.falgout.jeffrey.testing.junit.testing.ExpectFailure.Cause;
import name.falgout.jeffrey.testing.junit.testing.TestPlanExecutionReport.DisplayName;
import org.junit.jupiter.api.Test;

      @Cause(type = IllegalArgumentException.class, message = "bar"),
      @Cause(type = IOException.class, message = "something else"),
  })
  @Test
  void matchingCauses() {
    throw new IllegalArgumentException("Foo bar", new IOException("something else"));
  }

  @ExpectFailure(@Cause(type = IllegalArgumentException.class))
  @Test
  void messageIsOptional() {
    throw new IllegalArgumentException("Anything you want");
  }

  @ExpectFailure(@Cause(message = "only message"))
  @Test
  void typeIsOptional() {
    throw new Error("only message");
  }

  @ExpectFailure
  @Test
  void causeIsOptional() {
    throw new IllegalArgumentException();
  }

  @Test
  void negativeExamples() {
    TestPlanExecutionReport report = ExtensionTester.runTests(NegativeExamples.class);

    DisplayName noExceptionThrown = DisplayName.create("noExceptionThrown()");