package com.softwaremill.common.test.util.fest;
import org.joda.time.DateTime;
import org.joda.time.LocalDateTime;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.softwaremill.common.test.util.AssertException;
import java.util.Date;
import static com.softwaremill.common.test.util.fest.TimeAssertions.assertTime;
public class TimeAssertionsTest {
//Test isBefore
@Test(dataProvider = "referenceBeforeAfterProvider")
public void isBeforeShouldAssertThatTimeIsBefore(final DateTime reference, DateTime before, final DateTime after) {
assertTime(before).isBefore(reference);
assertTime(before.toDate()).isBefore(reference);
assertTime(before).isBefore(reference.toDate());
assertTime(before.toDate()).isBefore(reference.toDate());
assertTime(before.toLocalDateTime()).isBefore(reference.toLocalDateTime());
assertIsBeforeThrowsException(reference, reference);
assertIsBeforeThrowsException(reference, reference.toDate());
assertIsBeforeThrowsException(reference.toDate(), reference);
assertIsBeforeThrowsException(reference.toDate(), reference.toDate());
assertIsBeforeThrowsException(reference.toLocalDateTime(), reference.toLocalDateTime());
assertIsBeforeThrowsException(after, reference);
assertIsBeforeThrowsException(after.toDate(), reference);
assertIsBeforeThrowsException(after, reference.toDate());
assertIsBeforeThrowsException(after.toDate(), reference.toDate());
assertIsBeforeThrowsException(after.toLocalDateTime(), reference.toLocalDateTime());
}
//Test isBeforeOrAt
@Test(dataProvider = "referenceBeforeAfterProvider")
public void isBeforeOrAtShouldAssertThatTimeIsBeforeOrEqual(final DateTime reference, DateTime before, final DateTime after) {
assertTime(before).isBeforeOrAt(reference);
assertTime(before.toDate()).isBeforeOrAt(reference);
assertTime(before).isBeforeOrAt(reference.toDate());
assertTime(before.toDate()).isBeforeOrAt(reference.toDate());
assertTime(before.toLocalDateTime()).isBeforeOrAt(reference.toLocalDateTime());
assertTime(reference).isBeforeOrAt(reference);
assertTime(reference.toDate()).isBeforeOrAt(reference);
assertTime(reference).isBeforeOrAt(reference.toDate());
assertTime(reference.toDate()).isBeforeOrAt(reference.toDate());
assertTime(reference.toLocalDateTime()).isBeforeOrAt(reference.toLocalDateTime());
assertIsBeforeOrAtThrowsException(after, reference);
assertIsBeforeOrAtThrowsException(after.toDate(), reference);
assertIsBeforeOrAtThrowsException(after, reference.toDate());
assertIsBeforeOrAtThrowsException(after.toDate(), reference.toDate());
assertIsBeforeOrAtThrowsException(after.toLocalDateTime(), reference.toLocalDateTime());
}
//Test isAfter
@Test(dataProvider = "referenceBeforeAfterProvider")
public void isAfterShouldAssertThatTimeIsAfter(final DateTime reference, final DateTime before, final DateTime after) {
assertIsAfterThrowsException(before, reference);
assertIsAfterThrowsException(before.toDate(), reference);
assertIsAfterThrowsException(before, reference.toDate());
assertIsAfterThrowsException(before.toDate(), reference.toDate());
assertIsAfterThrowsException(before.toLocalDateTime(), reference.toLocalDateTime());
assertIsAfterThrowsException(reference, reference);
assertIsAfterThrowsException(reference.toDate(), reference);
assertIsAfterThrowsException(reference, reference.toDate());
assertIsAfterThrowsException(reference.toDate(), reference.toDate());
assertIsAfterThrowsException(reference.toLocalDateTime(), reference.toLocalDateTime());
assertTime(after).isAfter(reference);
assertTime(after.toDate()).isAfter(reference);
assertTime(after).isAfter(reference.toDate());
assertTime(after.toDate()).isAfter(reference.toDate());
assertTime(after.toLocalDateTime()).isAfter(reference.toLocalDateTime());
}
//Test isAfterOrAt
@Test(dataProvider = "referenceBeforeAfterProvider")
public void isAfterOrAtShouldAssertThatTimeIsAfterOrEqual(final DateTime reference, final DateTime before, final DateTime after) {
assertIsAfterOrAtThrowsException(before, reference);
assertIsAfterOrAtThrowsException(before.toDate(), reference);
assertIsAfterOrAtThrowsException(before, reference.toDate());
assertIsAfterOrAtThrowsException(before.toDate(), reference.toDate());
assertIsAfterOrAtThrowsException(before.toLocalDateTime(), reference.toLocalDateTime());
assertIsAfterOrAtThrowsException(reference, reference);
assertIsAfterOrAtThrowsException(reference.toDate(), reference);
assertIsAfterOrAtThrowsException(reference, reference.toDate());
assertIsAfterOrAtThrowsException(reference.toDate(), reference.toDate());
assertIsAfterOrAtThrowsException(reference.toLocalDateTime(), reference.toLocalDateTime());
assertTime(after).isAfterOrAt(reference);
assertTime(after.toDate()).isAfterOrAt(reference);
assertTime(after).isAfterOrAt(reference.toDate());
assertTime(after.toDate()).isAfterOrAt(reference.toDate());
assertTime(after.toLocalDateTime()).isAfterOrAt(reference.toLocalDateTime());
}
@DataProvider
public Object[][] referenceBeforeAfterProvider() {
return new Object[][] {
new Object[] { new DateTime(2000, 12, 14, 0, 0), new DateTime(2000, 12, 13, 23, 59, 59, 999), new DateTime(2000, 12, 14, 0, 0, 0, 1) },
new Object[] { new DateTime(2000, 12, 14, 22, 15, 15, 875), new DateTime(2000, 12, 14, 22, 15, 15, 874), new DateTime(2000, 12, 14, 22, 15, 15, 876) },
};
}
private void assertIsBeforeThrowsException(final Date dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBefore(reference);
}
});
}
private void assertIsBeforeThrowsException(final Date dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBefore(reference);
}
});
}
private void assertIsBeforeThrowsException(final DateTime dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBefore(reference);
}
});
}
private void assertIsBeforeThrowsException(final LocalDateTime dateToCheck, final LocalDateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBefore(reference);
}
});
}
private void assertIsBeforeThrowsException(final DateTime dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBefore(reference);
}
});
}
private void assertIsBeforeOrAtThrowsException(final Date dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBeforeOrAt(reference);
}
});
}
private void assertIsBeforeOrAtThrowsException(final Date dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBeforeOrAt(reference);
}
});
}
private void assertIsBeforeOrAtThrowsException(final DateTime dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBeforeOrAt(reference);
}
});
}
private void assertIsBeforeOrAtThrowsException(final LocalDateTime dateToCheck, final LocalDateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBeforeOrAt(reference);
}
});
}
private void assertIsBeforeOrAtThrowsException(final DateTime dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isBeforeOrAt(reference);
}
});
}
private void assertIsAfterThrowsException(final Date dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfter(reference);
}
});
}
private void assertIsAfterThrowsException(final Date dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfter(reference);
}
});
}
private void assertIsAfterThrowsException(final DateTime dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfter(reference);
}
});
}
private void assertIsAfterThrowsException(final LocalDateTime dateToCheck, final LocalDateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfter(reference);
}
});
}
private void assertIsAfterThrowsException(final DateTime dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfter(reference);
}
});
}
private void assertIsAfterOrAtThrowsException(final Date dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfterOrAt(reference);
}
});
}
private void assertIsAfterOrAtThrowsException(final DateTime dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfterOrAt(reference);
}
});
}
private void assertIsAfterOrAtThrowsException(final Date dateToCheck, final Date reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfterOrAt(reference);
}
});
}
private void assertIsAfterOrAtThrowsException(final LocalDateTime dateToCheck, final LocalDateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfterOrAt(reference);
}
});
}
private void assertIsAfterOrAtThrowsException(final DateTime dateToCheck, final DateTime reference) {
AssertException.thrown(AssertionError.class, new Runnable() {
@Override
public void run() {
assertTime(dateToCheck).isAfterOrAt(reference);
}
});
}
}