package org.docx4j.model.fields; import org.docx4j.openpackaging.exceptions.Docx4JException; public class DateTimeFormattingSwitchTests extends AbstractFormattingSwitchTest { public DateTimeFormattingSwitchTests() { formattingSwitch = "\\@"; // For \@ date formatting, Word seems to give same results for // DATE, DOCPROPERTY, and MERGEFIELD, // but to have a different code path for = // initDate(); // initEqual(); // not implemented really initDOCPROPERTY(); // initMERGEFIELD(); } private void initDate() { instruction = "DATE "; // This date needs to be parsed using US formatting // docx4j.Fields.Dates.DateFormatInferencer.USA=true quads.add(new SwitchTestQuad("4/15/2013", " ", "4/15/2013", "4/15/2013")); // Examples from 4ed spec quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy", "4/15/2013", "4/15/2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"dddd, MMMM dd, yyyy\"", "Monday, April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM d, yyyy\"", "April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "M/d/yy", "4/15/13")); quads.add(new SwitchTestQuad("4/15/2013", "yyyy-MM-dd", "2013-04-15")); quads.add(new SwitchTestQuad("4/15/2013", "d-MMM-yy", "15-Apr-13")); quads.add(new SwitchTestQuad("4/15/2013", "M.d.yyyy", "4.15.2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMM. d, yy\"", "Apr. 15, 13")); quads.add(new SwitchTestQuad("4/15/2013", "\"d MMMM yyyy\"", "15 April 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM yy\"", "April 13")); quads.add(new SwitchTestQuad("4/15/2013", "MMM-yy", "Apr-13")); // Word drops the rest if the quotes are missing quads.add(new SwitchTestQuad("4/15/2013", "dddd, MMMM dd, yyyy","Monday,")); quads.add(new SwitchTestQuad("4/15/2013", "MMMM d, yyyy", "January 3, 2006", "January 3, 2006")); // nope quads.add(new SwitchTestQuad("4/15/2013", "MMM. d, yy", "Apr.")); // nope quads.add(new SwitchTestQuad("4/15/2013", "d MMMM yyyy", "15")); //nope quads.add(new SwitchTestQuad("4/15/2013", "MMMM yy", "April")); //nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm am/pm", "1/3/2006 5:28 PM","1/3/2006 5:28 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm:ss am/pm","1/3/2006 5:28:34 PM", "1/3/2006 5:28:34 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm am/pm\"", "1/3/2006 5:28 PM","4/15/2013 5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm:ss am/pm\"","1/3/2006 5:28:34 PM", "4/15/2013 5:28:34 PM")); //nope // If no time specified, Word uses current time! quads.add(new SwitchTestQuad("4/15/2013", "h:mm am/pm", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "h:mm:ss am/pm", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm am/pm\"", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm:ss am/pm\"", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "HH:mm", "17:28", "17:28")); quads.add(new SwitchTestQuad("4/15/2013", "\"'Today is 'HH:mm:ss\"", "Today is 17:28:34", "Today is 17:28:34")); // add examples with time } private void initDOCPROPERTY() { instruction = "DOCPROPERTY "; // This date needs to be parsed using US formatting // docx4j.Fields.Dates.DateFormatInferencer.USA=true quads.add(new SwitchTestQuad("4/15/2013", " ", "4/15/2013", "4/15/2013")); // Examples from 4ed spec quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy", "4/15/2013", "4/15/2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"dddd, MMMM dd, yyyy\"", "Monday, April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM d, yyyy\"", "April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "M/d/yy", "4/15/13")); quads.add(new SwitchTestQuad("4/15/2013", "yyyy-MM-dd", "2013-04-15")); quads.add(new SwitchTestQuad("4/15/2013", "d-MMM-yy", "15-Apr-13")); quads.add(new SwitchTestQuad("4/15/2013", "M.d.yyyy", "4.15.2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMM. d, yy\"", "Apr. 15, 13")); quads.add(new SwitchTestQuad("4/15/2013", "\"d MMMM yyyy\"", "15 April 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM yy\"", "April 13")); quads.add(new SwitchTestQuad("4/15/2013", "MMM-yy", "Apr-13")); // Word drops the rest if the quotes are missing quads.add(new SwitchTestQuad("4/15/2013", "dddd, MMMM dd, yyyy","Monday,")); quads.add(new SwitchTestQuad("4/15/2013", "MMMM d, yyyy", "January 3, 2006", "January 3, 2006")); // nope quads.add(new SwitchTestQuad("4/15/2013", "MMM. d, yy", "Apr.")); // nope quads.add(new SwitchTestQuad("4/15/2013", "d MMMM yyyy", "15")); //nope quads.add(new SwitchTestQuad("4/15/2013", "MMMM yy", "April")); //nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm am/pm", "1/3/2006 5:28 PM","1/3/2006 5:28 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm:ss am/pm","1/3/2006 5:28:34 PM", "1/3/2006 5:28:34 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm am/pm\"", "1/3/2006 5:28 PM","4/15/2013 5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm:ss am/pm\"","1/3/2006 5:28:34 PM", "4/15/2013 5:28:34 PM")); //nope // If no time specified, Word uses current time! quads.add(new SwitchTestQuad("4/15/2013", "h:mm am/pm", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "h:mm:ss am/pm", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm am/pm\"", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm:ss am/pm\"", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "HH:mm", "17:28", "17:28")); quads.add(new SwitchTestQuad("4/15/2013", "\"'Today is 'HH:mm:ss\"", "Today is 17:28:34", "Today is 17:28:34")); // add examples with time } private void initMERGEFIELD() { instruction = "MERGEFIELD "; // This date needs to be parsed using US formatting // docx4j.Fields.Dates.DateFormatInferencer.USA=true // Examples from 4ed spec quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy", "4/15/2013", "4/15/2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"dddd, MMMM dd, yyyy\"", "Monday, April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM d, yyyy\"", "April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "M/d/yy", "4/15/13")); quads.add(new SwitchTestQuad("4/15/2013", "yyyy-MM-dd", "2013-04-15")); quads.add(new SwitchTestQuad("4/15/2013", "d-MMM-yy", "15-Apr-13")); quads.add(new SwitchTestQuad("4/15/2013", "M.d.yyyy", "4.15.2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMM. d, yy\"", "Apr. 15, 13")); quads.add(new SwitchTestQuad("4/15/2013", "\"d MMMM yyyy\"", "15 April 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM yy\"", "April 13")); quads.add(new SwitchTestQuad("4/15/2013", "MMM-yy", "Apr-13")); // Word drops the rest if the quotes are missing quads.add(new SwitchTestQuad("4/15/2013", "dddd, MMMM dd, yyyy","Monday,")); quads.add(new SwitchTestQuad("4/15/2013", "MMMM d, yyyy", "January 3, 2006", "January 3, 2006")); // nope quads.add(new SwitchTestQuad("4/15/2013", "MMM. d, yy", "Apr.")); // nope quads.add(new SwitchTestQuad("4/15/2013", "d MMMM yyyy", "15")); //nope quads.add(new SwitchTestQuad("4/15/2013", "MMMM yy", "April")); //nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm am/pm", "1/3/2006 5:28 PM","1/3/2006 5:28 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm:ss am/pm","1/3/2006 5:28:34 PM", "1/3/2006 5:28:34 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm am/pm\"", "1/3/2006 5:28 PM","4/15/2013 5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm:ss am/pm\"","1/3/2006 5:28:34 PM", "4/15/2013 5:28:34 PM")); //nope // If no time specified, Word uses current time! quads.add(new SwitchTestQuad("4/15/2013", "h:mm am/pm", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "h:mm:ss am/pm", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm am/pm\"", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm:ss am/pm\"", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "HH:mm", "17:28", "17:28")); quads.add(new SwitchTestQuad("4/15/2013", "\"'Today is 'HH:mm:ss\"", "Today is 17:28:34", "Today is 17:28:34")); // add examples with time } private void initEqual() { instruction = "="; // Haven't made much effort with "="for DATEs // If Word recognises a date, it'll substitute TODAY's date, then format it quads.add(new SwitchTestQuad("foo", "M/d/yyyy", "!Undefined Bookmark, FOO")); // This date needs to be parsed using US formatting // docx4j.Fields.Dates.DateFormatInferencer.USA=true // Examples from 4ed spec quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy", "8/10/2013", "4/15/2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"dddd, MMMM dd, yyyy\"", "Monday, April 15, 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM d, yyyy\"", "April 15, 2013")); // Word drops the rest if the quotes are missing quads.add(new SwitchTestQuad("4/15/2013", "dddd, MMMM dd, yyyy","!Syntax Error, MMMM")); quads.add(new SwitchTestQuad("4/15/2013", "MMMM d, yyyy", "!Syntax Error, D")); // nope quads.add(new SwitchTestQuad("4/15/2013", "M/d/yy", "4/15/13")); quads.add(new SwitchTestQuad("4/15/2013", "yyyy-MM-dd", "2013-04-15")); quads.add(new SwitchTestQuad("4/15/2013", "d-MMM-yy", "15-Apr-13")); quads.add(new SwitchTestQuad("4/15/2013", "M.d.yyyy", "4.15.2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMM. d, yy\"", "Apr. 15, 13")); quads.add(new SwitchTestQuad("4/15/2013", "\"d MMMM yyyy\"", "15 April 2013")); quads.add(new SwitchTestQuad("4/15/2013", "\"MMMM yy\"", "April 13")); // Word drops the rest if the quotes are missing quads.add(new SwitchTestQuad("4/15/2013", "MMM. d, yy", "!Syntax Error, D")); quads.add(new SwitchTestQuad("4/15/2013", "d MMMM yyyy", "!Syntax Error, MMMM")); quads.add(new SwitchTestQuad("4/15/2013", "MMMM yy", "!Syntax Error, YY")); quads.add(new SwitchTestQuad("4/15/2013", "MMM-yy", "Apr-13")); quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm am/pm", "!Syntax Error, H:H")); quads.add(new SwitchTestQuad("4/15/2013", "M/d/yyyy h:mm:ss am/pm","!Syntax Error, H:H")); quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm am/pm\"", "1/3/2006 5:28 PM","1/3/2006 5:28 PM")); //nope quads.add(new SwitchTestQuad("4/15/2013", "\"M/d/yyyy h:mm:ss am/pm\"","1/3/2006 5:28:34 PM", "1/3/2006 5:28:34 PM")); //nope // If no time specified, Word uses current time! quads.add(new SwitchTestQuad("4/15/2013", "h:mm am/pm", "!Syntax Error, AM")); quads.add(new SwitchTestQuad("4/15/2013", "h:mm:ss am/pm", "!Syntax Error, AM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm am/pm\"", "5:28 PM", "5:28 PM")); quads.add(new SwitchTestQuad("4/15/2013", "\"h:mm:ss am/pm\"", "5:28:34 PM", "5:28:34 PM")); quads.add(new SwitchTestQuad("4/15/2013", "HH:mm", "17:28", "17:28")); quads.add(new SwitchTestQuad("4/15/2013", "\"'Today is 'HH:mm:ss\"", "Today is 17:28:34", "Today is 17:28:34")); // add examples with time } /** * @param args * @throws Docx4JException */ public static void main(String[] args) throws Docx4JException { DateTimeFormattingSwitchTests fst = new DateTimeFormattingSwitchTests(); // fst.generateSampleDocx("test_DateTimeFormatting.docx"); fst.generateJUnitTest(); // fst.testFormatting(); // // if (fst.instruction.equals("DATE ") ) { // fst.generateSampleDocx("test_DATE_DateFormatting.docx"); // } else if (fst.instruction.equals("DOCPROPERTY ") ) { // fst.generateSampleDocx("test_DOCPROPERTY_DateFormatting.docx"); // } else if (fst.instruction.equals("MERGEFIELD ") ) { // fst.generateSampleDocx("test_MERGEFIELD_DateFormatting.docx"); // } else { // fst.generateSampleDocx("test_DateFormatting.docx"); // } } }