Browse Source

add some date function tests

git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@1185 f203690c-595d-4dc9-a70b-905162fa7fd2
tags/jackcess-2.2.0
James Ahlborn 5 years ago
parent
commit
b2aba90126

+ 14
- 5
src/main/java/com/healthmarketscience/jackcess/impl/expr/DefaultDateFunctions.java View File

@@ -155,9 +155,8 @@ public class DefaultDateFunctions
public static final Function YEAR = registerFunc(new Func1NullIsNull("Year") {
@Override
protected Value eval1(EvalContext ctx, Value param1) {
// convert from 0 based to 1 based value
return BuiltinOperators.toValue(
nonNullToCalendarField(ctx, param1, Calendar.YEAR) + 1);
nonNullToCalendarField(ctx, param1, Calendar.YEAR));
}
});

@@ -186,11 +185,21 @@ public class DefaultDateFunctions
return null;
}
int day = nonNullToCalendarField(ctx, param1, Calendar.DAY_OF_WEEK);

// vbSunday (default)
int firstDay = 1;
if(params.length > 1) {
// TODO handle first day of week
// int firstDay = params[1].getAsLong();
throw new UnsupportedOperationException();
firstDay = params[1].getAsLongInt();
if(firstDay == 0) {
// 0 == vbUseSystem, so we will use the default "sunday"
firstDay = 1;
}
}

// shift all the values to 0 based to calculate the correct value, then
// back to 1 based to return the result
day = (((day - 1) - (firstDay - 1) + 7) % 7) + 1;

return BuiltinOperators.toValue(day);
}
});

+ 23
- 0
src/test/java/com/healthmarketscience/jackcess/impl/expr/DefaultFunctionsTest.java View File

@@ -213,6 +213,29 @@ public class DefaultFunctionsTest extends TestCase
assertEquals(-4, eval("=Round(-4, 2)"));
}

public void testDateFuncs() throws Exception
{
assertEquals("1/2/2003", eval("=CStr(DateValue(#01/02/2003 7:00:00 AM#))"));
assertEquals("07:00:00 AM", eval("=CStr(TimeValue(#01/02/2003 7:00:00 AM#))"));

assertEquals(2003, eval("=Year(#01/02/2003 7:00:00 AM#)"));
assertEquals(1, eval("=Month(#01/02/2003 7:00:00 AM#)"));
assertEquals(2, eval("=Day(#01/02/2003 7:00:00 AM#)"));

assertEquals(7, eval("=Hour(#01/02/2003 7:10:27 AM#)"));
assertEquals(19, eval("=Hour(#01/02/2003 7:10:27 PM#)"));
assertEquals(10, eval("=Minute(#01/02/2003 7:10:27 AM#)"));
assertEquals(27, eval("=Second(#01/02/2003 7:10:27 AM#)"));

assertEquals(7, eval("=Weekday(#11/22/2003#)"));
assertEquals(3, eval("=Weekday(#11/22/2003#, 5)"));

assertTrue(((String)eval("=CStr(Date())"))
.matches("\\d{1,2}/\\d{1,2}/\\d{4}"));
assertTrue(((String)eval("=CStr(Time())"))
.matches("\\d{1,2}:\\d{1,2}:\\d{2} (AM|PM)"));
}

public void testFinancialFuncs() throws Exception
{
assertEquals("-9.57859403981317",

+ 3
- 3
src/test/java/com/healthmarketscience/jackcess/impl/expr/ExpressionatorTest.java View File

@@ -315,11 +315,11 @@ public class ExpressionatorTest extends TestCase

public void testDateArith() throws Exception
{
assertEquals(new Date(1041508800000L), eval("=#01/02/2003# + #7:00:00#"));
assertEquals(new Date(1041458400000L), eval("=#01/02/2003# - #7:00:00#"));
assertEquals(new Date(1041508800000L), eval("=#01/02/2003# + #7:00:00 AM#"));
assertEquals(new Date(1041458400000L), eval("=#01/02/2003# - #7:00:00 AM#"));
assertEquals(new Date(1044680400000L), eval("=#01/02/2003# + '37'"));
assertEquals(new Date(1044680400000L), eval("='37' + #01/02/2003#"));
assertEquals(new Date(1041508800000L), eval("=#01/02/2003 7:00:00#"));
assertEquals(new Date(1041508800000L), eval("=#01/02/2003 7:00:00 AM#"));
}

public void testNull() throws Exception

Loading…
Cancel
Save