package org.docx4j.model.fields;
import static org.junit.Assert.assertTrue;
import javax.xml.transform.TransformerException;
import org.docx4j.Docx4jProperties;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class FormattingSwitchHelperDateTests {
static boolean wasDateFormatInferencerUSA = false;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
// Tests assume USA date format
wasDateFormatInferencerUSA = Docx4jProperties.getProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", false);
Docx4jProperties.setProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", true);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
Docx4jProperties.setProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", wasDateFormatInferencerUSA);
}
@Test
public void testDate1() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ ", "4/15/2013");
doit("MERGEFIELD", data, "Error! Switch argument not specified.");
doit("DOCPROPERTY", data, "Error! Switch argument not specified.");
}
@Test
public void testDate2() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ M/d/yyyy", "4/15/2013");
doit("MERGEFIELD", data, "4/15/2013");
doit("DOCPROPERTY", data, "4/15/2013");
}
@Test
public void testDate3() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"dddd, MMMM dd, yyyy\"", "4/15/2013");
doit("MERGEFIELD", data, "Monday, April 15, 2013");
doit("DOCPROPERTY", data, "Monday, April 15, 2013");
}
@Test
public void testDate4() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"MMMM d, yyyy\"", "4/15/2013");
doit("MERGEFIELD", data, "April 15, 2013");
doit("DOCPROPERTY", data, "April 15, 2013");
}
@Test
public void testDate5() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ M/d/yy", "4/15/2013");
doit("MERGEFIELD", data, "4/15/13");
doit("DOCPROPERTY", data, "4/15/13");
}
@Test
public void testDate6() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ yyyy-MM-dd", "4/15/2013");
doit("MERGEFIELD", data, "2013-04-15");
doit("DOCPROPERTY", data, "2013-04-15");
}
@Test
public void testDate7() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ d-MMM-yy", "4/15/2013");
doit("MERGEFIELD", data, "15-Apr-13");
doit("DOCPROPERTY", data, "15-Apr-13");
}
@Test
public void testDate8() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ M.d.yyyy", "4/15/2013");
doit("MERGEFIELD", data, "4.15.2013");
doit("DOCPROPERTY", data, "4.15.2013");
}
@Test
public void testDate9() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"MMM. d, yy\"", "4/15/2013");
doit("MERGEFIELD", data, "Apr. 15, 13");
doit("DOCPROPERTY", data, "Apr. 15, 13");
}
@Test
public void testDate10() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"d MMMM yyyy\"", "4/15/2013");
doit("MERGEFIELD", data, "15 April 2013");
doit("DOCPROPERTY", data, "15 April 2013");
}
@Test
public void testDate11() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"MMMM yy\"", "4/15/2013");
doit("MERGEFIELD", data, "April 13");
doit("DOCPROPERTY", data, "April 13");
}
@Test
public void testDate12() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ MMM-yy", "4/15/2013");
doit("MERGEFIELD", data, "Apr-13");
doit("DOCPROPERTY", data, "Apr-13");
}
@Test
public void testDate13() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"dddd, MMMM dd, yyyy\"", "4/15/2013");
doit("MERGEFIELD", data, "Monday, April 15, 2013");
doit("DOCPROPERTY", data, "Monday, April 15, 2013");
}
@Test
public void testDate14() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"MMMM d, yyyy\"", "4/15/2013");
doit("MERGEFIELD", data, "April 15, 2013");
doit("DOCPROPERTY", data, "April 15, 2013");
}
@Test
public void testDate15() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"MMM. d, yy\"", "4/15/2013");
doit("MERGEFIELD", data, "Apr. 15, 13");
doit("DOCPROPERTY", data, "Apr. 15, 13");
}
@Test
public void testDate16() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"d MMMM yyyy\"", "4/15/2013");
doit("MERGEFIELD", data, "15 April 2013");
doit("DOCPROPERTY", data, "15 April 2013");
}
@Test
public void testDate17() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ \"MMMM yy\"", "4/15/2013");
doit("MERGEFIELD", data, "April 13");
doit("DOCPROPERTY", data, "April 13");
}
// No quotes ....
@Test
public void testDateNoQuotes13() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ dddd, MMMM dd, yyyy", "4/15/2013");
doit("MERGEFIELD", data, "Monday,");
doit("DOCPROPERTY", data, "Monday,");
}
@Test
public void testDateNoQuotes14() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ MMMM d, yyyy", "4/15/2013");
doit("MERGEFIELD", data, "April");
doit("DOCPROPERTY", data, "April");
}
@Test
public void testDateNoQuotes15() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ MMM. d, yy", "4/15/2013");
doit("MERGEFIELD", data, "Apr.");
doit("DOCPROPERTY", data, "Apr.");
}
@Test
public void testDateNoQuotes16() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ d MMMM yyyy", "4/15/2013");
doit("MERGEFIELD", data, "15");
doit("DOCPROPERTY", data, "15");
}
@Test
public void testDateNoQuotes17() throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData("\\@ MMMM yy", "4/15/2013");
doit("MERGEFIELD", data, "April");
doit("DOCPROPERTY", data, "April");
}
// TODO: where no time is passed in..
// for DOCPROPERTY, Word uses 12:00 AM
// for DATE and MERGEFIELD, Word uses current time
// (for =, Word also used current date)
// @Test
// public void testDate18() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ M/d/yyyy h:mm am/pm", "4/15/2013");
// doit("MERGEFIELD", data, "1/3/2006 5:28 PM");
// doit("DOCPROPERTY", data, "1/3/2006 5:28 PM");
// }
//
// @Test
// public void testDate19() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ M/d/yyyy h:mm:ss am/pm", "4/15/2013");
// doit("MERGEFIELD", data, "1/3/2006 5:28:34 PM");
// doit("DOCPROPERTY", data, "1/3/2006 5:28:34 PM");
// }
//
// @Test
// public void testDate20() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ \"M/d/yyyy h:mm am/pm\"", "4/15/2013");
// doit("MERGEFIELD", data, "4/15/2013 5:28 PM");
// doit("DOCPROPERTY", data, "4/15/2013 5:28 PM");
// }
//
// @Test
// public void testDate21() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ \"M/d/yyyy h:mm:ss am/pm\"", "4/15/2013");
// doit("MERGEFIELD", data, "4/15/2013 5:28:34 PM");
// doit("DOCPROPERTY", data, "4/15/2013 5:28:34 PM");
// }
//
// @Test
// public void testDate22() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ h:mm am/pm", "4/15/2013");
// doit("MERGEFIELD", data, "5:28 PM");
// doit("DOCPROPERTY", data, "5:28 PM");
// }
//
// @Test
// public void testDate23() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ h:mm:ss am/pm", "4/15/2013");
// doit("MERGEFIELD", data, "5:28:34 PM");
// doit("DOCPROPERTY", data, "5:28:34 PM");
// }
//
// @Test
// public void testDate24() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ \"h:mm am/pm\"", "4/15/2013");
// doit("MERGEFIELD", data, "5:28 PM");
// doit("DOCPROPERTY", data, "5:28 PM");
// }
//
// @Test
// public void testDate25() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ \"h:mm:ss am/pm\"", "4/15/2013");
// doit("MERGEFIELD", data, "5:28:34 PM");
// doit("DOCPROPERTY", data, "5:28:34 PM");
// }
//
// @Test
// public void testDate26() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ HH:mm", "4/15/2013");
// doit("MERGEFIELD", data, "17:28");
// doit("DOCPROPERTY", data, "17:28");
// }
//
// @Test
// public void testDate27() throws TransformerException, Docx4JException {
// SwitchTestData data = new SwitchTestData("\\@ \"'Today is 'HH:mm:ss\"", "4/15/2013");
// doit("MERGEFIELD", data, "Today is 17:28:34");
// doit("DOCPROPERTY", data, "Today is 17:28:34");
// }
// ---------------------------------------------------------------------------------------
private void doit(String fieldname, SwitchTestData triple, String expectedResult) throws TransformerException, Docx4JException {
String instr = fieldname + " foo " + triple.format;
String result = getFormat(instr, triple.val);
System.out.println(result);
assertTrue(result.equals(expectedResult));
}
private String getFormat(String instr, String val) throws TransformerException, Docx4JException {
FldSimpleModel fsm = new FldSimpleModel();
fsm.build(instr);
return FormattingSwitchHelper.applyFormattingSwitch(null, fsm, val);
}
private static class SwitchTestData {
String format;
String val;
public String toString() {
return "format " + format + " to data " + val;
}
public SwitchTestData(String format, String val) {
this.format = format;
this.val = val;
}
}
}