package com.levelup.java.text; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import org.joda.time.DateTime; import org.junit.Test; /** * This java example will demonstrate formatting messages in java * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/message-format/>Messageformat</a> * */ public class MessageFormatting { @Test public void format_message_with_out_messageformatter_java() { String value1 = "Your account balance was "; String value2 = "2,500 "; String value3 = "on "; String value4 = "5/15/2013"; String output = value1 + value2 + value3 + value4; assertEquals("Your account balance was 2,500 on 5/15/2013", output); } @Test public void format_message_with_messageformatter() { Object[] accountValues = { "2,500", "5/15/2013" }; String output = MessageFormat.format("Your account balance was {0} on {1}", accountValues); assertEquals("Your account balance was 2,500 on 5/15/2013", output); } @Test public void messageformatter_mutliple_records() { Object[][] statementValues = { { "2,500", "5/15/2013" }, { "2,200", "6/15/2013" } }; MessageFormat formatter = new MessageFormat("Your account balance was {0} on {1}"); List<String> statementOutput = new ArrayList<String>(); for (Object[] monthlyStatements : statementValues) { statementOutput.add(formatter.format(monthlyStatements)); } assertTrue(statementOutput.size() == 2); assertEquals("Your account balance was 2,500 on 5/15/2013", statementOutput.get(0)); assertEquals("Your account balance was 2,200 on 6/15/2013",statementOutput.get(1)); } @Test public void messageformatter_with_format_type_and_style() { DateTime statementDate = new DateTime(2013, 5, 15, 0, 0, 0, 0); double satementBalance = 2500; Object[] statementValues = { satementBalance, statementDate.toDate() }; String output = MessageFormat.format("Your account balance was {0, number, currency} " + "on {1, date, MM/dd/yyyy}", statementValues); assertEquals("Your account balance was $2,500.00 on 05/15/2013", output); } @Test public void messageformatter_with_choice() { String pattern = "Your statement on {0, date, MM/dd/yyyy} " + "{1,choice,0#is not available|1#is {1, number, currency}}"; MessageFormat statementFormat = new MessageFormat(pattern); DateTime statementDate1 = new DateTime(2013, 5, 15, 0, 0, 0, 0); Object[] statement1 = {statementDate1.toDate(), 23444}; assertEquals("Your statement on 05/15/2013 is $23,444.00", statementFormat.format(statement1)); DateTime statementDate2 = new DateTime(2013, 6, 15, 0, 0, 0, 0); Object[] statement2 = {statementDate2.toDate(), 0}; assertEquals("Your statement on 06/15/2013 is not available", statementFormat.format(statement2)); } }