/**
* Copyright 2011-2017 Asakusa Framework Team.
*
* 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 com.asakusafw.testdriver.rule;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.util.Calendar;
import org.junit.Test;
/**
* Test for {@link Predicates}.
* @since 0.2.0
*/
public class PredicatesTest {
/**
* Test method for {@link Predicates#equalTo(java.lang.Object)}.
*/
@Test
public void equalTo() {
ValuePredicate<Object> p = Predicates.equalTo(100);
assertThat(p.accepts(100, 100), is(true));
assertThat(p.accepts(200, 100), is(true));
assertThat(p.accepts(100, 200), is(false));
// no exceptions
p.describeExpected(100, 200);
}
/**
* Test method for {@link Predicates#isNull()}.
*/
@Test
public void isNull() {
ValuePredicate<Object> p = Predicates.isNull();
assertThat(p.accepts(100, null), is(true));
assertThat(p.accepts(200, 100), is(false));
assertThat(p.accepts(null, 200), is(false));
// no exceptions
p.describeExpected(100, 200);
}
/**
* Test method for {@link Predicates#not(ValuePredicate)}.
*/
@Test
public void not() {
ValuePredicate<Object> p = Predicates.not(Predicates.equalTo(100));
assertThat(p.accepts(100, 100), is(false));
assertThat(p.accepts(200, 100), is(false));
assertThat(p.accepts(100, 200), is(true));
// no exceptions
p.describeExpected(100, 200);
}
/**
* Test method for {@link Predicates#equals()}.
*/
@Test
public void equals() {
ValuePredicate<Object> p = Predicates.equals();
assertThat(p.accepts(100, 100), is(true));
assertThat(p.accepts(200, 100), is(false));
assertThat(p.accepts(100, 200), is(false));
// no exceptions
p.describeExpected(100, 200);
}
/**
* Test method for {@link Predicates#floatRange(double, double)}.
*/
@Test
public void floatRange() {
ValuePredicate<Number> p = Predicates.floatRange(-1.0, +2.0);
assertThat(p.accepts(10.0, 10.0), is(true));
assertThat(p.accepts(10.0, 9.0), is(true));
assertThat(p.accepts(10.0, 12.0), is(true));
assertThat(p.accepts(10.0, 8.9), is(false));
assertThat(p.accepts(10.0, 12.1), is(false));
// no exceptions
p.describeExpected(100.0, 200.0);
}
/**
* Test method for {@link Predicates#integerRange(long, long)}.
*/
@Test
public void integerRange() {
ValuePredicate<Number> p = Predicates.integerRange(-1, +2);
assertThat(p.accepts(10, 10), is(true));
assertThat(p.accepts(10, 9), is(true));
assertThat(p.accepts(10, 12), is(true));
assertThat(p.accepts(10, 8), is(false));
assertThat(p.accepts(10, 13), is(false));
// no exceptions
p.describeExpected(100, 200);
}
/**
* Test method for {@link Predicates#decimalRange(java.math.BigDecimal, java.math.BigDecimal)}.
*/
@Test
public void decimalRange() {
ValuePredicate<BigDecimal> p = Predicates.decimalRange(new BigDecimal(-1), new BigDecimal(+2));
assertThat(p.accepts(new BigDecimal(10.0), new BigDecimal(10.0)), is(true));
assertThat(p.accepts(new BigDecimal(10.0), new BigDecimal(9.0)), is(true));
assertThat(p.accepts(new BigDecimal(10.0), new BigDecimal(12.0)), is(true));
assertThat(p.accepts(new BigDecimal(10.0), new BigDecimal(8.9)), is(false));
assertThat(p.accepts(new BigDecimal(10.0), new BigDecimal(12.1)), is(false));
// no exceptions
p.describeExpected(new BigDecimal(100), new BigDecimal(200));
}
/**
* Test method for {@link Predicates#dateRange(int, int)}.
*/
@Test
public void dateRange() {
ValuePredicate<Calendar> p = Predicates.dateRange(-1, +2);
assertThat(p.accepts(d(2011, 5, 6), d(2011, 5, 6)), is(true));
assertThat(p.accepts(d(2011, 5, 6), d(2011, 5, 5)), is(true));
assertThat(p.accepts(d(2011, 5, 6), d(2011, 5, 8)), is(true));
assertThat(p.accepts(d(2011, 5, 6), d(2011, 5, 4)), is(false));
assertThat(p.accepts(d(2011, 5, 6), d(2011, 5, 9)), is(false));
p.describeExpected(d(2011, 12, 13), d(2012, 3, 1));
}
private Calendar d(int y, int m, int d) {
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, y);
c.set(Calendar.MONTH, m - 1);
c.set(Calendar.DATE, d);
return c;
}
/**
* Test method for {@link Predicates#timeRange(int, int)}.
*/
@Test
public void timeRange() {
ValuePredicate<Calendar> p = Predicates.timeRange(-1, +2);
assertThat(p.accepts(t(12, 34, 56), t(12, 34, 56)), is(true));
assertThat(p.accepts(t(12, 34, 56), t(12, 34, 55)), is(true));
assertThat(p.accepts(t(12, 34, 56), t(12, 34, 58)), is(true));
assertThat(p.accepts(t(12, 34, 56), t(12, 34, 54)), is(false));
assertThat(p.accepts(t(12, 34, 56), t(12, 34, 59)), is(false));
p.describeExpected(t(0, 1, 2), t(23, 59, 59));
}
private Calendar t(int h, int m, int s) {
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, 2011);
c.set(Calendar.MONTH, 2);
c.set(Calendar.DATE, 31);
c.set(Calendar.HOUR_OF_DAY, h);
c.set(Calendar.MINUTE, m);
c.set(Calendar.SECOND, s);
return c;
}
/**
* Test method for compares date/time.
*/
@Test
public void dateAndTime() {
ValuePredicate<Calendar> p = Predicates.timeRange(0, 0);
assertThat(p.accepts(d(2000, 1, 1), t(2000, 1, 1, 0, 0, 0)), is(true));
assertThat(p.accepts(t(2000, 1, 1, 0, 0, 0), d(2000, 1, 1)), is(true));
}
private Calendar t(
int y, int mo, int d,
int h, int mi, int s) {
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, y);
c.set(Calendar.MONTH, mo -1);
c.set(Calendar.DATE, d);
c.set(Calendar.HOUR_OF_DAY, h);
c.set(Calendar.MINUTE, mi);
c.set(Calendar.SECOND, s);
return c;
}
/**
* Test method for {@link Predicates#containsString()}.
*/
@Test
public void containsString() {
ValuePredicate<String> p = Predicates.containsString();
assertThat(p.accepts("abc", "abc"), is(true));
assertThat(p.accepts("abc", "abcde"), is(true));
assertThat(p.accepts("abc", "deabcde"), is(true));
assertThat(p.accepts("abc", "abbc"), is(false));
assertThat(p.accepts("abc", "ab"), is(false));
p.describeExpected("abc", "def");
}
}