/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.query;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.joda.time.DateTime;
import org.junit.Test;
import com.mysema.converters.DateTimeConverter;
import com.mysema.query.types.Ops;
public class QueryFunctionsTest {
private static final DateTime dateTime = new DateTime();
private static final String dateTimeString = new DateTimeConverter().toString(dateTime);
@Test
public void test() {
Set<String> functions = new HashSet<String>();
for (Method m : QueryFunctions.class.getMethods()) {
functions.add(m.getName().toUpperCase());
}
List<Field> fields = new ArrayList<Field>();
fields.addAll(Arrays.asList(Ops.class.getFields()));
fields.addAll(Arrays.asList(Ops.AggOps.class.getFields()));
fields.addAll(Arrays.asList(Ops.DateTimeOps.class.getFields()));
fields.addAll(Arrays.asList(Ops.MathOps.class.getFields()));
fields.addAll(Arrays.asList(Ops.StringOps.class.getFields()));
int available = 0;
int missing = 0;
for (Field field : fields) {
String name = field.getName().replace("_", "");
if (!functions.contains(name)) {
missing++;
} else {
available++;
}
}
System.err.println(missing + " functions missing, " + available + " available");
}
@Test
public void DayOfMonth() {
assertEquals(dateTime.getDayOfMonth(), QueryFunctions.dayOfMonth(dateTimeString));
}
@Test
public void DayOfWeek() {
int dow = dateTime.getDayOfWeek();
assertEquals(dow == 7 ? 1 : dow + 1, QueryFunctions.dayOfWeek(dateTimeString));
}
@Test
public void DayOfYear() {
assertEquals(dateTime.getDayOfYear(), QueryFunctions.dayOfYear(dateTimeString));
}
@Test
public void Ceil() {
assertEquals(1.0, QueryFunctions.ceil("0.5"), 0.01);
}
@Test
public void Floor() {
assertEquals(0.0, QueryFunctions.floor("0.5"), 0.01);
}
@Test
public void Hour() {
assertEquals(dateTime.getHourOfDay(), QueryFunctions.hour(dateTimeString));
}
@Test
public void Like() {
assertTrue(QueryFunctions.like("XXX", "X%"));
}
@Test
public void Millisecond() {
assertEquals(dateTime.getMillisOfSecond(), QueryFunctions.millisecond(dateTimeString));
}
@Test
public void Minute() {
assertEquals(dateTime.getMinuteOfHour(), QueryFunctions.minute(dateTimeString));
}
@Test
public void Month() {
assertEquals(dateTime.getMonthOfYear(), QueryFunctions.month(dateTimeString));
}
@Test
public void Second() {
assertEquals(dateTime.getSecondOfMinute(), QueryFunctions.second(dateTimeString));
}
@Test
public void Space() {
assertEquals(" ", QueryFunctions.space(3));
}
@Test
public void Sqrt() {
assertEquals(2.0, QueryFunctions.sqrt("4"), 0.01);
}
@Test
public void Week() {
assertEquals(dateTime.toGregorianCalendar().get(Calendar.WEEK_OF_YEAR), QueryFunctions.week(dateTimeString));
}
@Test
public void Year() {
assertEquals(dateTime.getYear(), QueryFunctions.year(dateTimeString));
}
@Test
public void YearMonth() {
assertEquals(dateTime.getYear() * 100 + dateTime.getMonthOfYear(), QueryFunctions.yearMonth(dateTimeString));
}
}