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));
}
}