package hudson.plugins.fitnesse;
import hudson.plugins.fitnesse.NativePageCounts.Counts;
import java.util.Collection;
import org.junit.Assert;
import org.junit.Test;
/**
* {@linkplain http://github.com/unclebob/fitnesse/blob/master/src/fit/Counts.java}
* The "official" spec for tallying Counts (the results of assertion elements within a single page)
* into an overall Count (for the page as a whole) is hidden away in the fitnesse code base :-(
* Here is the pseduo code from tallyCounts() in the URL above.
* - if any wrong assertions within page: page is wrong
* - else if any exceptions thrown by assertions within page: page is exception
* - else if any ignores within page and no right within page: page is ignore
* - else: page is right
*/
public class FitnesseResultsTest {
private static final FitnesseResults[] WRONG = new FitnesseResults[] {
resultsForCounts(0, 1, 0, 0),
resultsForCounts(1, 1, 0, 0),
resultsForCounts(0, 1, 1, 0),
resultsForCounts(0, 1, 0, 1),
resultsForCounts(1, 1, 1, 0),
resultsForCounts(1, 1, 0, 1),
resultsForCounts(0, 1, 1, 1),
resultsForCounts(1, 1, 1, 1)
};
private static final FitnesseResults[] EXCEPTION = new FitnesseResults[] {
resultsForCounts(0, 0, 0, 1),
resultsForCounts(0, 0, 1, 1),
resultsForCounts(1, 0, 0, 1),
resultsForCounts(1, 0, 1, 1),
};
private static final FitnesseResults[] IGNORED = new FitnesseResults[] {
resultsForCounts(0, 0, 1, 0),
resultsForCounts(0, 0, 0, 0)
};
private static final FitnesseResults[] RIGHT = new FitnesseResults[] {
resultsForCounts(1, 0, 0, 0),
resultsForCounts(1, 0, 1, 0)
};
private static FitnesseResults resultsForCounts(int right, int wrong, int ignored, int exceptions) {
return new FitnesseResults(new Counts("", "20100320184439", right, wrong, ignored, exceptions));
}
@Test
public void wrongCountsShouldBeFailedOverall() {
for (FitnesseResults results : WRONG) {
Assert.assertTrue(results.getHeadlineText(), results.isFailedOverall());
Assert.assertFalse(results.getHeadlineText(), results.isPassedOverall());
Assert.assertFalse(results.getHeadlineText(), results.isSkippedOverall());
}
}
@Test
public void exceptionCountsShouldBeSkipped() {
for (FitnesseResults results : EXCEPTION) {
Assert.assertFalse(results.getHeadlineText(), results.isFailedOverall());
Assert.assertTrue(results.getHeadlineText(), results.isSkippedOverall());
Assert.assertFalse(results.getHeadlineText(), results.isPassedOverall());
}
}
@Test
public void ignoredCountsShouldBeSkipped() {
for (FitnesseResults results : IGNORED) {
Assert.assertFalse(results.getHeadlineText(), results.isFailedOverall());
Assert.assertTrue(results.getHeadlineText(), results.isSkippedOverall());
Assert.assertFalse(results.getHeadlineText(), results.isPassedOverall());
}
}
@Test
public void rightCountsShouldBePassed() {
for (FitnesseResults results : RIGHT) {
Assert.assertFalse(results.getHeadlineText(), results.isFailedOverall());
Assert.assertFalse(results.getHeadlineText(), results.isSkippedOverall());
Assert.assertTrue(results.getHeadlineText(), results.isPassedOverall());
}
}
@Test
public void failedTestsShouldIncludeCountsWrong() {
FitnesseResults summary = setUpSummaryResults();
Collection<FitnesseResults> failedTests = summary.getFailedTests();
Assert.assertEquals(WRONG.length, failedTests.size());
for (FitnesseResults results : WRONG) {
Assert.assertTrue(results.getHeadlineText(), failedTests.contains(results));
}
}
@Test
public void skippedTestsShouldIncludeCountsIgnoredOrExceptions() {
FitnesseResults summary = setUpSummaryResults();
Collection<FitnesseResults> skippedTests = summary.getSkippedTests();
Assert.assertEquals(EXCEPTION.length + IGNORED.length, skippedTests.size());
for (FitnesseResults results : EXCEPTION) {
Assert.assertTrue(results.getHeadlineText(), skippedTests.contains(results));
}
for (FitnesseResults results : IGNORED) {
Assert.assertTrue(results.getHeadlineText(), skippedTests.contains(results));
}
}
@Test
public void passedTestsShouldIncludeCountsRight() {
FitnesseResults summary = setUpSummaryResults();
Collection<FitnesseResults> passedTests = summary.getPassedTests();
Assert.assertEquals(RIGHT.length, passedTests.size());
for (FitnesseResults results : RIGHT) {
Assert.assertTrue(results.getHeadlineText(), passedTests.contains(results));
}
}
private FitnesseResults setUpSummaryResults() {
FitnesseResults summary = new FitnesseResults((Counts)null);
for (FitnesseResults results : RIGHT) {
summary.addDetail(results);
}
for (FitnesseResults results : WRONG) {
summary.addDetail(results);
}
for (FitnesseResults results : IGNORED) {
summary.addDetail(results);
}
for (FitnesseResults results : EXCEPTION) {
summary.addDetail(results);
}
return summary;
}
private static final Counts BEFORE = new Counts("", "20100313174438", 1, 2, 3, 4);
private static final Counts AFTER = new Counts("", "20100313174439", 1, 2, 3, 4);
@Test
public void isEarlierThanShouldDependOnCounts() {
FitnesseResults first = new FitnesseResults(BEFORE);
FitnesseResults second = new FitnesseResults(AFTER);
Assert.assertTrue(first.isEarlierThan(second));
Assert.assertFalse(second.isEarlierThan(first));
Assert.assertFalse(second.isEarlierThan(second));
}
@Test
public void isLaterThanShouldDependOnCounts() {
FitnesseResults first = new FitnesseResults(BEFORE);
FitnesseResults second = new FitnesseResults(AFTER);
Assert.assertTrue(second.isLaterThan(first));
Assert.assertFalse(first.isLaterThan(second));
Assert.assertFalse(first.isLaterThan(first));
}
@Test
public void secondsAfterThanShouldDependOnCounts() {
FitnesseResults first = new FitnesseResults(BEFORE);
FitnesseResults second = new FitnesseResults(AFTER);
Assert.assertEquals(1000, second.millisAfter(first));
Assert.assertEquals(-1000, first.millisAfter(second));
Assert.assertEquals(0, second.millisAfter(second));
}
@Test
public void durationShouldBeDifferenceBetweenEarliestAndLatestResults() {
FitnesseResults first = new FitnesseResults(BEFORE);
FitnesseResults second = new FitnesseResults(AFTER);
FitnesseResults summary = new FitnesseResults((Counts)null);
summary.addDetail(first);
summary.addDetail(second);
Assert.assertEquals(1.0f, summary.getDuration());
}
}