// Copyright © 2011-2013, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.core;
import fi.jumi.api.drivers.TestId;
import fi.jumi.core.api.*;
@SuppressWarnings("CodeBlock2Expr")
public class SuiteMother {
public static final TestFile TEST_FILE = TestFile.fromClassName("com.example.DummyTest");
public static final String TEST_CLASS = TEST_FILE.getClassName();
public static final String TEST_CLASS_NAME = "DummyTest";
public static void emptySuite(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.end();
}
// passing and failing tests
public static void onePassingTest(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME);
suite.runFinished(run1);
suite.end();
}
public static void oneFailingTest(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.failingTest(run1, TestId.ROOT, TEST_CLASS_NAME,
new Throwable("dummy exception")
);
suite.runFinished(run1);
suite.end();
}
public static void nestedFailingAndPassingTests(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME, () -> {
suite.test(run1, TestId.of(0), "testOne");
suite.failingTest(run1, TestId.of(1), "testTwo", new Throwable("dummy exception"));
});
suite.runFinished(run1);
suite.end();
}
// multiple runs
public static void twoPassingRuns(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME, () -> {
suite.test(run1, TestId.of(0), "testOne");
});
suite.runFinished(run1);
RunId run2 = suite.nextRunId();
suite.runStarted(run2, TEST_FILE);
suite.test(run2, TestId.ROOT, TEST_CLASS_NAME, () -> {
suite.test(run2, TestId.of(1), "testTwo");
});
suite.runFinished(run2);
suite.end();
}
public static void twoInterleavedRuns(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
RunId run2 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.runStarted(run2, TEST_FILE);
listener.onTestFound(TEST_FILE, TestId.of(0), "testOne");
listener.onTestFound(TEST_FILE, TestId.of(1), "testTwo");
listener.onTestStarted(run1, TestId.of(0));
listener.onTestStarted(run2, TestId.of(1));
listener.onTestFinished(run1);
listener.onTestFinished(run2);
suite.runFinished(run1);
suite.runFinished(run2);
suite.end();
}
// standard output
public static void printsToStdout(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME, () -> {
suite.printOut(run1, "printed to stdout\n");
});
suite.runFinished(run1);
suite.end();
}
public static void printsToStderr(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME, () -> {
suite.printErr(run1, "printed to stderr\n");
});
suite.runFinished(run1);
suite.end();
}
public static void printsToStdoutWithoutNewlineAtEnd(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME, () -> {
suite.printOut(run1, "this doesn't end with newline");
});
suite.runFinished(run1);
suite.end();
}
public static void printsAfterTestRunFinished(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.findAllTestFiles(TEST_FILE);
RunId run1 = suite.nextRunId();
suite.runStarted(run1, TEST_FILE);
suite.test(run1, TestId.ROOT, TEST_CLASS_NAME, () -> {
});
suite.runFinished(run1);
suite.printOut(run1, "printed to stdout "); // any warnings should happen only once, even though printed many times
suite.printOut(run1, "after run\n");
suite.printErr(run1, "and the same for stderr\n");
suite.end();
}
// internal errors
public static void internalError(SuiteListener listener) {
EventBuilder suite = new EventBuilder(listener);
suite.begin();
suite.internalError("the internal error message", new Throwable("dummy exception"));
suite.end();
}
}