package com.google.refine.tests.expr.functions.strings; import java.util.Calendar; import java.util.Properties; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import com.google.refine.expr.EvalError; import com.google.refine.expr.util.CalendarParser; import com.google.refine.expr.util.CalendarParserException; import com.google.refine.grel.ControlFunctionRegistry; import com.google.refine.grel.Function; import com.google.refine.tests.RefineTest; public class DiffTests extends RefineTest { static Properties bindings; private Calendar date1; private Calendar date2; @Override @BeforeTest public void init() { logger = LoggerFactory.getLogger(this.getClass()); try { date1 = CalendarParser.parse("2012-08-02"); date2 = CalendarParser.parse("2012-10-02"); } catch (CalendarParserException e) { // TODO Auto-generated catch block e.printStackTrace(); Assert.fail(); } } @BeforeMethod public void SetUp() { bindings = new Properties(); } @AfterMethod public void TearDown() { bindings = null; } /** * Lookup a control function by name and invoke it with a variable number of args */ private static Object invoke(String name,Object... args) { // registry uses static initializer, so no need to set it up Function function = ControlFunctionRegistry.getFunction(name); if (function == null) { throw new IllegalArgumentException("Unknown function "+name); } if (args == null) { return function.call(bindings,new Object[0]); } else { return function.call(bindings,args); } } @Test public void testDiffInvalidParams() { Assert.assertTrue(invoke("diff") instanceof EvalError); Assert.assertTrue(invoke("diff", "one","two","three") instanceof EvalError); Assert.assertTrue(invoke("diff", date1,date2) instanceof EvalError); Assert.assertTrue(invoke("diff", date1,date2,"foo") instanceof EvalError); } @Test public void testDiff() { Assert.assertEquals((String)(invoke("diff", "onetwo","onetwothree")),"three"); Assert.assertEquals(invoke("diff",date2,date1,"days"),Long.valueOf(61)); Assert.assertEquals(invoke("diff",date2,date1,"weeks"),Long.valueOf(8)); Assert.assertEquals(invoke("diff",date2,date1,"months"),Long.valueOf(2)); Assert.assertEquals(invoke("diff",date2,date1,"hours"),Long.valueOf(1464)); Assert.assertEquals(invoke("diff",date2,date1,"seconds"),Long.valueOf(5270400)); } }