Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,299 +1,100 @@
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;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import javax.xml.transform.TransformerException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;

import static org.junit.Assert.assertTrue;

@RunWith(value = Parameterized.class)
public class FormattingSwitchHelperDateTests extends FormattingTestsBase {

public class FormattingSwitchHelperDateTests {

static boolean wasDateFormatInferencerUSA = false;

static Locale initialLocale;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
// Tests assume USA date format
wasDateFormatInferencerUSA = Docx4jProperties.getProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", false);
wasDateFormatInferencerUSA = Docx4jProperties.getProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", false);
Docx4jProperties.setProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", true);
initialLocale=Locale.getDefault();
Locale.setDefault(Locale.ENGLISH); // otherwise dates will be formatted using local language standard
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
Docx4jProperties.setProperty("docx4j.Fields.Dates.DateFormatInferencer.USA", wasDateFormatInferencerUSA);
Locale.setDefault(initialLocale);
}

@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");
}
@Parameterized.Parameter(value=0)
public String format;

@Parameterized.Parameter(value=1)
public String input;

@Parameterized.Parameter(value=2)
public String result;

@Parameterized.Parameters(name = "{index}: test {1}({0}) parsed as {2}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
{"\\@ ", "4/15/2013","Error! Switch argument not specified."},
{"\\@ M/d/yyyy", "4/15/2013","4/15/2013"},
{"\\@ \"dddd, MMMM dd, yyyy\"", "4/15/2013","Monday, April 15, 2013"},
{"\\@ \"MMMM d, yyyy\"", "4/15/2013","April 15, 2013"},
{"\\@ M/d/yy", "4/15/2013","4/15/13"},
{"\\@ yyyy-MM-dd", "4/15/2013","2013-04-15"},
{"\\@ d-MMM-yy", "4/15/2013","15-Apr-13"},
{"\\@ M.d.yyyy", "4/15/2013","4.15.2013"},
{"\\@ \"MMM. d, yy\"", "4/15/2013","Apr. 15, 13"},
{"\\@ \"d MMMM yyyy\"", "4/15/2013","15 April 2013"},
{"\\@ \"MMMM yy\"", "4/15/2013","April 13"},
{"\\@ MMM-yy", "4/15/2013","Apr-13"},
{"\\@ \"dddd, MMMM dd, yyyy\"", "4/15/2013","Monday, April 15, 2013"},
{"\\@ \"MMMM d, yyyy\"", "4/15/2013","April 15, 2013"},
{"\\@ \"MMM. d, yy\"", "4/15/2013","Apr. 15, 13"},
{"\\@ \"d MMMM yyyy\"", "4/15/2013","15 April 2013"},
{"\\@ \"MMMM yy\"", "4/15/2013","April 13"},
{"\\@ dddd, MMMM dd, yyyy", "4/15/2013","Monday,"},
{"\\@ MMMM d, yyyy", "4/15/2013","April"},
{"\\@ MMM. d, yy", "4/15/2013","Apr."},
{"\\@ d MMMM yyyy", "4/15/2013","15"},
{"\\@ MMMM yy", "4/15/2013","April"} });
}

// 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");
}
public void testDateParsed()throws TransformerException, Docx4JException {
SwitchTestData data = new SwitchTestData(format, input);
doit("MERGEFIELD", data, result);
doit("DOCPROPERTY", data, result);
}


// 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 {
// (for =, Word also used current date)

String format;
String val;

public String toString() {
return "format " + format + " to data " + val;
}
// tests for time were commented out. To enable it, add to parameters values:
//{"\\@ M/d/yyyy h:mm am/pm", "4/15/2013","1/3/2006 5:28 PM"},
//{"\\@ M/d/yyyy h:mm:ss am/pm", "4/15/2013","1/3/2006 5:28:34 PM"},
//{"\\@ \"M/d/yyyy h:mm am/pm\"", "4/15/2013","4/15/2013 5:28 PM"},
//{"\\@ \"M/d/yyyy h:mm:ss am/pm\"", "4/15/2013","4/15/2013 5:28:34 PM"},
//{"\\@ h:mm am/pm", "4/15/2013","5:28 PM"},
//{"\\@ h:mm:ss am/pm", "4/15/2013","5:28:34 PM"},
//{"\\@ \"h:mm am/pm\"", "4/15/2013","5:28 PM"},
//{"\\@ \"h:mm:ss am/pm\"", "4/15/2013","5:28:34 PM"},
//{"\\@ HH:mm", "4/15/2013","17:28"},
//{"\\@ \"'Today is 'HH:mm:ss\"", "4/15/2013","Today is 17:28:34"}

public SwitchTestData(String format, String val) {

this.format = format;
this.val = val;
}
}


}
Loading