You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2007/11/27 18:27:38 UTC
svn commit: r598707 - in /commons/proper/lang/trunk/src:
java/org/apache/commons/lang/text/ test/org/apache/commons/lang/text/
Author: mbenson
Date: Tue Nov 27 09:27:35 2007
New Revision: 598707
URL: http://svn.apache.org/viewvc?rev=598707&view=rev
Log:
[LANG-362] checkstyle; javadoc; extended testing which necessitated some refactorings
Modified:
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java Tue Nov 27 09:27:35 2007
@@ -43,11 +43,8 @@
super();
}
- /*
- * (non-Javadoc)
- *
- * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer,
- * java.text.FieldPosition)
+ /**
+ * {@inheritDoc}
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos) {
@@ -57,11 +54,8 @@
throw new IllegalArgumentException(String.valueOf(obj));
}
- /*
- * (non-Javadoc)
- *
- * @see java.text.Format#parseObject(java.lang.String,
- * java.text.ParsePosition)
+ /**
+ * {@inheritDoc}
*/
public Object parseObject(String source, ParsePosition pos) {
int start = pos.getIndex();
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java Tue Nov 27 09:27:35 2007
@@ -56,8 +56,15 @@
}
/**
- * Uses the formatter Format instance.
- *
+ * Uses the formatter Format instance.
+ *
+ * @param obj
+ * the object to format
+ * @param toAppendTo
+ * the {@link StringBuffer} to append to
+ * @param pos
+ * the FieldPosition to use (or ignore).
+ * @return <code>toAppendTo</code>
* @see Format#format(Object, StringBuffer, FieldPosition)
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
@@ -65,8 +72,15 @@
}
/**
- * Uses the parser Format instance.
- *
+ * Uses the parser Format instance.
+ *
+ * @param source
+ * the String source
+ * @param pos
+ * the ParsePosition containing the position to parse from, will
+ * be updated according to parsing success (index) or failure
+ * (error index)
+ * @return the parsed Object
* @see Format#parseObject(String, ParsePosition)
*/
public Object parseObject(String source, ParsePosition pos) {
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java Tue Nov 27 09:27:35 2007
@@ -40,17 +40,13 @@
/**
* Create a new DateMetaFormat.
*
- * @param locale
+ * @param locale the Locale to use
*/
public DateMetaFormat(Locale locale) {
super(locale);
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
- */
+ /** {@inheritDoc} */
protected DateFormat createSubformatInstance(int style) {
return DateFormat.getDateInstance(style, getLocale());
}
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java Tue Nov 27 09:27:35 2007
@@ -29,6 +29,7 @@
/**
* date/time metaFormat support.
+ *
* @see ExtendedMessageFormat
* @author Matt Benson
* @since 2.4
@@ -70,18 +71,15 @@
/**
* Create a new AbstractDateMetaFormat.
*
- * @param locale
+ * @param locale Locale
*/
public DateMetaFormatSupport(Locale locale) {
super();
this.locale = locale;
}
- /*
- * (non-Javadoc)
- *
- * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer,
- * java.text.FieldPosition)
+ /**
+ * {@inheritDoc}
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos) {
@@ -98,6 +96,12 @@
throw new IllegalArgumentException(String.valueOf(obj));
}
+ /**
+ * Get the subformat name for the given object.
+ *
+ * @param subformat Object
+ * @return subformat name.
+ */
private String getSubformatName(Object subformat) {
initialize();
if (reverseSubformats.containsKey(subformat)) {
@@ -107,11 +111,8 @@
return null;
}
- /*
- * (non-Javadoc)
- *
- * @see java.text.Format#parseObject(java.lang.String,
- * java.text.ParsePosition)
+ /**
+ * {@inheritDoc}
*/
public Object parseObject(String source, ParsePosition pos) {
int start = pos.getIndex();
@@ -131,6 +132,12 @@
return null;
}
+ /**
+ * Get the named subformat.
+ *
+ * @param subformat name
+ * @return Format designated by <code>name</code>, if any
+ */
private Format getSubformat(String subformat) {
initialize();
if (!styleMap.containsKey(subformat)) {
@@ -141,7 +148,7 @@
}
/**
- * Get the locale in use by this {@link DateMetaFormatSupport}.
+ * Get the locale in use by this DateMetaFormatSupport.
*
* @return Locale
*/
@@ -149,6 +156,9 @@
return locale;
}
+ /**
+ * Initialize this DateMetaFormatSupport.
+ */
private synchronized void initialize() {
if (!initialized) {
styleMap = createStyleMap();
@@ -175,7 +185,7 @@
* Create a subformat for the given <code>DateFormat</code> style
* constant.
*
- * @param style
+ * @param style DateFormat style constant
* @return a DateFormat instance.
*/
protected abstract DateFormat createSubformatInstance(int style);
@@ -194,8 +204,7 @@
* Set whether this metaformat can parse date/time pattern formats in
* addition to named formats.
*
- * @param handlePatterns
- * the boolean handlePatterns to set.
+ * @param handlePatterns the boolean handlePatterns to set.
* @return <code>this</code> for fluent usage.
*/
public DateMetaFormatSupport setHandlePatterns(boolean handlePatterns) {
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java Tue Nov 27 09:27:35 2007
@@ -34,7 +34,8 @@
*
* @author Matt Benson
* @since 2.4
- * @version $Id$
+ * @version $Id: DefaultMetaFormatFactory.java 592077 2007-11-05 16:47:10Z
+ * mbenson $
*/
class DefaultMetaFormatFactory {
@@ -59,16 +60,32 @@
private static final String[] PATTERN_KEYS = new String[] { DATE_KEY,
TIME_KEY };
+ /**
+ * Ordered NameKeyedMetaFormat
+ */
private static class OrderedNameKeyedMetaFormat extends NameKeyedMetaFormat {
private static final long serialVersionUID = -7688772075239431055L;
private List keys;
+ /**
+ * Construct a new OrderedNameKeyedMetaFormat.
+ *
+ * @param names String[]
+ * @param formats Format[]
+ */
private OrderedNameKeyedMetaFormat(String[] names, Format[] formats) {
super(createMap(names, formats));
this.keys = Arrays.asList(names);
}
+ /**
+ * Create a map from the specified key/value parameters.
+ *
+ * @param names keys
+ * @param formats values
+ * @return Map
+ */
private static Map createMap(String[] names, Format[] formats) {
Validate.isTrue(ArrayUtils.isSameLength(names, formats));
HashMap result = new HashMap(names.length);
@@ -78,6 +95,9 @@
return result;
}
+ /**
+ * {@inheritDoc}
+ */
protected Iterator iterateKeys() {
return keys.iterator();
}
@@ -86,8 +106,7 @@
/**
* Get a default metaformat for the specified Locale.
*
- * @param locale
- * the Locale for the resulting Format instance.
+ * @param locale the Locale for the resulting Format instance.
* @return Format
*/
public static Format getFormat(final Locale locale) {
@@ -106,6 +125,12 @@
new TimeMetaFormat(locale) }) });
}
+ /**
+ * Get the default format supported by a given metaformat.
+ *
+ * @param metaformat Format to handle parsing.
+ * @return the default format, if any.
+ */
private static Format getDefaultFormat(Format metaformat) {
ParsePosition pos = new ParsePosition(0);
Object o = metaformat.parseObject("", pos);
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java Tue Nov 27 09:27:35 2007
@@ -22,13 +22,16 @@
import java.util.ArrayList;
import java.util.Locale;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
/**
* Extends <code>MessageFormat</code> to allow pluggable/additional formatting
* options for embedded format elements; requires a "meta-format", i.e. a
* <code>Format</code> capable of parsing and formatting other
- * <code>Format</code>s.
+ * <code>Format</code>s. One shortcoming is that recursive choice formats do
+ * not inherit knowledge of the extended formatters and are limited to those
+ * available with <code>java.text.MessageFormat</code> (patches welcome).
*
* @author Matt Benson
* @since 2.4
@@ -53,14 +56,16 @@
* behavior identical to a <code>java.lang.MessageFormat</code> using
* <code>locale</code>.
*
- * @param locale
- * the Locale for the resulting Format instance.
+ * @param locale the Locale for the resulting Format instance.
* @return Format
*/
public static Format createDefaultMetaFormat(Locale locale) {
return DefaultMetaFormatFactory.getFormat(locale);
}
+ /**
+ * Conceptual demarcation of methods to parse the pattern.
+ */
private static class Parser {
private static final String ESCAPED_QUOTE = "''";
private static final char START_FMT = ',';
@@ -68,6 +73,12 @@
private static final char START_FE = '{';
private static final char QUOTE = '\'';
+ /**
+ * Strip all formats from the pattern.
+ *
+ * @param pattern String to strip
+ * @return stripped pattern
+ */
private String stripFormats(String pattern) {
StringBuffer sb = new StringBuffer(pattern.length());
ParsePosition pos = new ParsePosition(0);
@@ -98,6 +109,14 @@
return sb.toString();
}
+ /**
+ * Insert formats back into the pattern for toPattern() support.
+ *
+ * @param pattern source
+ * @param formats the Formats to insert
+ * @param metaFormat Format to format the Formats
+ * @return full pattern
+ */
private String insertFormats(String pattern, Format[] formats,
Format metaFormat) {
if (formats == null || formats.length == 0) {
@@ -117,8 +136,10 @@
sb.append(START_FE).append(
readArgumentIndex(pattern, next(pos)));
if (formats[fe] != null) {
- sb.append(START_FMT).append(
- metaFormat.format(formats[fe]));
+ String formatName = metaFormat.format(formats[fe]);
+ if (StringUtils.isNotEmpty(formatName)) {
+ sb.append(START_FMT).append(formatName);
+ }
}
break;
default:
@@ -129,6 +150,13 @@
return sb.toString();
}
+ /**
+ * Parse the formats from the given pattern.
+ *
+ * @param pattern String to parse
+ * @param metaFormat Format to parse the Formats
+ * @return array of parsed Formats
+ */
private Format[] parseFormats(String pattern, Format metaFormat) {
ArrayList result = new ArrayList();
ParsePosition pos = new ParsePosition(0);
@@ -142,8 +170,8 @@
readArgumentIndex(pattern, next(pos));
if (pattern.charAt(pos.getIndex()) == START_FMT) {
seekNonWs(pattern, next(pos));
- result.add(metaFormat.parseObject(pattern, pos));
}
+ result.add(metaFormat.parseObject(pattern, pos));
seekNonWs(pattern, pos);
if (pattern.charAt(pos.getIndex()) != END_FE) {
throw new IllegalArgumentException(
@@ -158,6 +186,12 @@
return (Format[]) result.toArray(new Format[result.size()]);
}
+ /**
+ * Consume whitespace from the current parse position.
+ *
+ * @param pattern String to read
+ * @param pos current position
+ */
private void seekNonWs(String pattern, ParsePosition pos) {
int len = 0;
char[] buffer = pattern.toCharArray();
@@ -167,11 +201,24 @@
} while (len > 0 && pos.getIndex() < pattern.length());
}
+ /**
+ * Convenience method to advance parse position by 1
+ *
+ * @param pos ParsePosition
+ * @return <code>pos</code>
+ */
private ParsePosition next(ParsePosition pos) {
pos.setIndex(pos.getIndex() + 1);
return pos;
}
+ /**
+ * Read the argument index from the current format element
+ *
+ * @param pattern pattern to parse
+ * @param pos current parse position
+ * @return argument index as string
+ */
private String readArgumentIndex(String pattern, ParsePosition pos) {
int start = pos.getIndex();
for (; pos.getIndex() < pattern.length(); next(pos)) {
@@ -189,6 +236,16 @@
"Unterminated format element at position " + start);
}
+ /**
+ * Consume a quoted string, adding it to <code>appendTo</code> if
+ * specified.
+ *
+ * @param pattern pattern to parse
+ * @param pos current parse position
+ * @param appendTo optional StringBuffer to append
+ * @param escapingOn whether to process escaped quotes
+ * @return <code>appendTo</code>
+ */
private StringBuffer appendQuotedString(String pattern,
ParsePosition pos, StringBuffer appendTo, boolean escapingOn) {
int start = pos.getIndex();
@@ -200,8 +257,8 @@
for (int i = pos.getIndex(); i < pattern.length(); i++) {
if (escapingOn
&& pattern.substring(i).startsWith(ESCAPED_QUOTE)) {
- appendTo.append(c, lastHold, pos.getIndex() - lastHold).append(
- QUOTE);
+ appendTo.append(c, lastHold, pos.getIndex() - lastHold)
+ .append(QUOTE);
pos.setIndex(i + ESCAPED_QUOTE.length());
lastHold = pos.getIndex();
continue;
@@ -219,11 +276,24 @@
"Unterminated quoted string at position " + start);
}
+ /**
+ * Consume quoted string only
+ *
+ * @param pattern pattern to parse
+ * @param pos current parse position
+ * @param escapingOn whether to process escaped quotes
+ */
private void getQuotedString(String pattern, ParsePosition pos,
boolean escapingOn) {
appendQuotedString(pattern, pos, null, escapingOn);
}
+ /**
+ * Consume the entire format found at the current position.
+ *
+ * @param pattern string to parse
+ * @param pos current parse position
+ */
private void eatFormat(String pattern, ParsePosition pos) {
int start = pos.getIndex();
int depth = 1;
@@ -254,15 +324,28 @@
private String strippedPattern;
/**
- * Create a new ExtendedMessageFormat.
+ * Create a new ExtendedMessageFormat for the default locale.
*
- * @param pattern
- * @param metaFormat
- * @throws IllegalArgumentException
- * if <code>metaFormat</code> is <code>null</code> or in
- * case of a bad pattern.
+ * @param pattern String
+ * @param metaFormat Format
+ * @throws IllegalArgumentException if <code>metaFormat</code> is
+ * <code>null</code> or in case of a bad pattern.
*/
public ExtendedMessageFormat(String pattern, Format metaFormat) {
+ this(pattern, Locale.getDefault(), metaFormat);
+ }
+
+ /**
+ * Create a new ExtendedMessageFormat.
+ *
+ * @param pattern String
+ * @param locale Locale
+ * @param metaFormat Format
+ * @throws IllegalArgumentException if <code>metaFormat</code> is
+ * <code>null</code> or in case of a bad pattern.
+ */
+ public ExtendedMessageFormat(String pattern, Locale locale,
+ Format metaFormat) {
/*
* We have to do some acrobatics here: the call to the super constructor
* will invoke applyPattern(), but we don't want to apply the pattern
@@ -270,7 +353,7 @@
* our (final) applyPattern implementation, and re-call at the end of
* this constructor.
*/
- super(pattern);
+ super(pattern, locale);
setMetaFormat(metaFormat);
applyPattern(pattern);
}
@@ -278,8 +361,7 @@
/**
* Apply the specified pattern.
*
- * @param pattern
- * pattern String
+ * @param pattern String
*/
public final void applyPattern(String pattern) {
if (metaFormat == null) {
@@ -293,20 +375,20 @@
}
/**
- * Pre-execution hook that allows subclasses to customize the behavior of
- * the final applyPattern implementation.
+ * Pre-execution hook by means of which a subclass can customize the
+ * behavior of the final applyPattern implementation.
*
- * @param pattern
+ * @param pattern String
*/
protected void applyPatternPre(String pattern) {
// noop
}
/**
- * Post-execution hook that allows subclasses to customize the behavior of
- * the final applyPattern implementation.
+ * Post-execution hook by means of which a subclass can customize the
+ * behavior of the final applyPattern implementation.
*
- * @param pattern
+ * @param pattern String
*/
protected void applyPatternPost(String pattern) {
// noop
@@ -335,8 +417,7 @@
* Set the meta-format. Has no effect until a subsequent call to
* {@link #applyPattern(String)}.
*
- * @param metaFormat
- * the Format metaFormat to set.
+ * @param metaFormat the Format metaFormat to set.
*/
public synchronized void setMetaFormat(Format metaFormat) {
Validate.notNull(metaFormat, "metaFormat is null");
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java Tue Nov 27 09:27:35 2007
@@ -24,7 +24,8 @@
import java.util.Map;
/**
- * metaFormat support.
+ * Support class for implementing Formats that parse/format other Formats, with
+ * specific support for interoperability with ExtendedMessageFormat.
*
* @see ExtendedMessageFormat
* @author Matt Benson
@@ -40,11 +41,9 @@
/**
* Invert the specified Map.
*
- * @param map
- * the Map to invert.
+ * @param map the Map to invert.
* @return a new Map instance.
- * @throws NullPointerException
- * if <code>map</code> is <code>null</code>.
+ * @throws NullPointerException if <code>map</code> is <code>null</code>.
*/
protected Map invert(Map map) {
Map result = new HashMap(map.size());
@@ -58,8 +57,8 @@
/**
* Find the end of the subformat.
*
- * @param source
- * @param pos
+ * @param source String
+ * @param pos current parse position
*/
protected void seekFormatElementEnd(String source, ParsePosition pos) {
int depth = 1;
@@ -85,8 +84,7 @@
/**
* Advance the parse index by 1.
*
- * @param pos
- * the ParsePosition to advance.
+ * @param pos the ParsePosition to advance.
* @return <code>pos</code>
*/
protected ParsePosition next(ParsePosition pos) {
@@ -100,10 +98,8 @@
* occurs <code>pos.getErrorIndex()</code> will contain a value >= zero,
* indicating the index at which the parse error occurred.
*
- * @param source
- * String to parse
- * @param pos
- * ParsePosition marking index into <code>source</code>
+ * @param source String to parse
+ * @param pos ParsePosition marking index into <code>source</code>
* @return Object parsed
*/
public abstract Object parseObject(String source, ParsePosition pos);
@@ -112,19 +108,14 @@
* Format the specified object, appending to the given StringBuffer, and
* optionally respecting the specified FieldPosition.
*
- * @param obj
- * the object to format
- * @param toAppendTo
- * the StringBuffer to which the formatted object should be
- * appended
- * @param pos
- * FieldPosition associated with <code>obj</code>
+ * @param obj the object to format
+ * @param toAppendTo the StringBuffer to which the formatted object should
+ * be appended
+ * @param pos FieldPosition associated with <code>obj</code>
* @return <code>toAppendTo</code>
- * @throws NullPointerException
- * if <code>toAppendTo</code> or <code>pos</code> is
- * <code>null</code>
- * @throws IllegalArgumentException
- * if unable to format <code>obj</code>
+ * @throws NullPointerException if <code>toAppendTo</code> or
+ * <code>pos</code> is <code>null</code>
+ * @throws IllegalArgumentException if unable to format <code>obj</code>
*/
public abstract StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos);
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java Tue Nov 27 09:27:35 2007
@@ -50,7 +50,7 @@
/**
* Add a delegate format.
*
- * @param delegate
+ * @param delegate Format
* @return the builder
*/
public Builder add(Format delegate) {
@@ -82,17 +82,19 @@
/**
* Create a new MultiFormat.
*
- * @param delegates
+ * @param delegates Formats
*/
public MultiFormat(Format[] delegates) {
setDelegates(delegates);
}
- /*
- * (non-Javadoc)
+ /**
+ * Format <code>obj</code>; append to <code>toAppendTo</code>.
*
- * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer,
- * java.text.FieldPosition)
+ * @param obj Object to format
+ * @param toAppendTo StringBuffer to append to
+ * @param pos FieldPosition
+ * @return <code>toAppendTo</code>
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos) {
@@ -108,11 +110,13 @@
+ obj);
}
- /*
- * (non-Javadoc)
+ /**
+ * Parse an object by trying each delegate.
*
- * @see java.text.Format#parseObject(java.lang.String,
- * java.text.ParsePosition)
+ * @param source string
+ * @param pos current parse position
+ * @return value returned from first delegate that does not encounter an
+ * error.
*/
public Object parseObject(String source, ParsePosition pos) {
int start = pos.getIndex();
@@ -133,8 +137,7 @@
/**
* Set the delegates.
*
- * @param delegates
- * the Format[] delegates to set.
+ * @param delegates the Format[] delegates to set.
*/
public void setDelegates(Format[] delegates) {
Validate.noNullElements(delegates,
@@ -151,6 +154,11 @@
return delegates;
}
+ /**
+ * Validate and return our delegates.
+ *
+ * @return delegate Formats, not null
+ */
private Format[] getValidDelegates() {
Format[] result = getDelegates();
Validate.notEmpty(result, "No delegate Formats configured");
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java Tue Nov 27 09:27:35 2007
@@ -57,8 +57,8 @@
/**
* Add the specified format with the specified string key.
*
- * @param key
- * @param format
+ * @param key String
+ * @param format Format
* @return Builder reference to this object
*/
public Builder put(String key, Format format) {
@@ -80,16 +80,15 @@
/**
* Create a new NameKeyedMetaFormat.
+ *
+ * @param keyedFormats String->Format map.
*/
public NameKeyedMetaFormat(Map keyedFormats) {
this.keyedFormats = keyedFormats;
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.MetaFormatSupport#format(java.lang.Object,
- * java.lang.StringBuffer, java.text.FieldPosition)
+ /**
+ * {@inheritDoc}
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos) {
@@ -117,11 +116,8 @@
throw new IllegalArgumentException("Cannot format " + obj);
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.MetaFormatSupport#parseObject(java.lang.String,
- * java.text.ParsePosition)
+ /**
+ * {@inheritDoc}
*/
public Object parseObject(String source, ParsePosition pos) {
int start = pos.getIndex();
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java Tue Nov 27 09:27:35 2007
@@ -56,18 +56,15 @@
/**
* Create a new NumberMetaFormat.
*
- * @param locale
+ * @param locale Locale
*/
public NumberMetaFormat(Locale locale) {
super();
this.locale = locale;
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.AbstractMetaFormat#format(java.lang.Object,
- * java.lang.StringBuffer, java.text.FieldPosition)
+ /**
+ * {@inheritDoc}
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition pos) {
@@ -85,11 +82,8 @@
throw new IllegalArgumentException();
}
- /*
- * (non-Javadoc)
- *
- * @see java.text.Format#parseObject(java.lang.String,
- * java.text.ParsePosition)
+ /**
+ * {@inheritDoc}
*/
public Object parseObject(String source, ParsePosition pos) {
int start = pos.getIndex();
@@ -115,6 +109,9 @@
return locale;
}
+ /**
+ * Initialize this NumberMetaFormat.
+ */
private synchronized void initialize() {
if (subformats == null) {
subformats = new HashMap();
Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java (original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java Tue Nov 27 09:27:35 2007
@@ -41,30 +41,28 @@
/**
* Create a new NumberMetaFormat.
*
- * @param locale
+ * @param locale Locale
*/
public TimeMetaFormat(Locale locale) {
super(locale);
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
- */
+ /** {@inheritDoc} */
protected DateFormat createSubformatInstance(int style) {
return DateFormat.getTimeInstance(style, getLocale());
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.AbstractDateMetaFormat#createReverseStyleMap()
- */
+ /** {@inheritDoc} */
protected Map createInverseStyleMap() {
Map invertMe = createStyleMap();
invertMe.remove(DEFAULT);
- invertMe.remove(FULL);
+ DateFormat longDf = DateFormat.getTimeInstance(DateFormat.LONG,
+ getLocale());
+ DateFormat fullDf = DateFormat.getTimeInstance(DateFormat.FULL,
+ getLocale());
+ if (fullDf.equals(longDf)) {
+ invertMe.remove(FULL);
+ }
return invert(invertMe);
}
}
Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java (original)
+++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java Tue Nov 27 09:27:35 2007
@@ -16,10 +16,18 @@
*/
package org.apache.commons.lang.text;
+import java.text.ChoiceFormat;
import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.FieldPosition;
+import java.text.Format;
import java.text.MessageFormat;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
+import java.util.Locale;
import junit.framework.TestCase;
@@ -32,7 +40,7 @@
* @version $Id$
*/
public abstract class AbstractMessageFormatTest extends TestCase {
- protected static final Object[] NUMBERS = { new Double(0.1),
+ protected static final Double[] NUMBERS = { new Double(0.1),
new Double(1.1), new Double(2.1) };
protected static final Object[] DATES = {
@@ -43,18 +51,30 @@
new GregorianCalendar(1970, Calendar.MARCH, 03, 18, 45, 50)
.getTime() };
- /*
- * (non-Javadoc)
- *
- * @see junit.framework.TestCase#setUp()
+ protected Locale locale;
+
+ /**
+ * {@inheritDoc}
*/
protected void setUp() throws Exception {
super.setUp();
- // tests depend on Locale.US
- java.util.Locale.setDefault(java.util.Locale.US);
+ this.locale = getLocale();
}
- protected abstract MessageFormat createMessageFormat(String pattern);
+ /**
+ * Create a MessageFormat.
+ * @param pattern
+ * @param locale
+ * @return
+ */
+ protected abstract MessageFormat createMessageFormat(String pattern,
+ Locale locale);
+
+ /**
+ * Get the Locale to use.
+ * @return
+ */
+ protected abstract Locale getLocale();
protected void doAssertions(String expected, String pattern, Object[] args) {
doAssertions(expected, pattern, args, pattern);
@@ -62,235 +82,213 @@
protected void doAssertions(String expected, String pattern, Object[] args,
String toPattern) {
- MessageFormat f = createMessageFormat(pattern);
+ MessageFormat f = createMessageFormat(pattern, locale);
assertEquals(expected, f.format(args));
assertEquals(toPattern, f.toPattern());
}
- public void testPlain() {
+ protected void doAssertions(Format format, Object[] args) {
+ doAssertions(format, args, null);
+ }
+
+ protected void doAssertions(Format format, Object[] args, String formatName) {
+ doAssertions(format, args, formatName, null);
+ }
+
+ protected void doAssertions(Format format, Object[] args,
+ String formatName, String decodeFormatName) {
+ StringBuffer pattern = new StringBuffer();
+ StringBuffer expected = new StringBuffer();
+ StringBuffer decodePattern = new StringBuffer();
+ for (int i = 0; i < args.length; i++) {
+ pattern.append(i).append(": {").append(i);
+ if (formatName != null) {
+ pattern.append(',').append(formatName);
+ }
+ pattern.append("}; ");
+ expected.append(i).append(": ");
+ if (format != null) {
+ format.format(args[i], expected, new FieldPosition(0));
+ } else {
+ expected.append(String.valueOf(args[i]));
+ }
+ expected.append("; ");
+ decodePattern.append(i).append(": {").append(i);
+ if (decodeFormatName != null || formatName != null) {
+ decodePattern.append(',').append(
+ decodeFormatName == null ? formatName
+ : decodeFormatName);
+ }
+ decodePattern.append("}; ");
+ }
+ doAssertions(expected.toString(), pattern.toString(), args,
+ decodePattern.toString());
+ }
+
+ public void testNoFormatElements() {
StringBuffer pattern = new StringBuffer();
for (int i = 0; i < NUMBERS.length; i++) {
if (i > 0) {
pattern.append("; ");
}
- pattern.append("Object ").append(i).append(": ").append(NUMBERS[i]);
+ pattern.append(i).append(": ").append(NUMBERS[i]);
}
String p = pattern.toString();
- doAssertions(p, p, NUMBERS);
+ doAssertions(p, p, null);
}
- public void testSimple() {
- doAssertions("Object 0: 0.1; Object 1: 1.1; Object 2: 2.1",
- "Object 0: {0}; Object 1: {1}; Object 2: {2}", NUMBERS);
+ public void testSimpleStrings() {
+ doAssertions(null, new Object[] { "foo", "bar", "baz"}, null);
+ }
+
+ public void testSimpleNumbers() {
+ doAssertions(NumberFormat.getInstance(locale), NUMBERS, null);
+ }
+
+ public void testSimpleDates() {
+ doAssertions(DateFormat.getDateTimeInstance(DateFormat.SHORT,
+ DateFormat.SHORT, locale), DATES, null);
}
public void testNumber() {
- doAssertions(
- "Number 0: 0.1; Number 1: 1.1; Number 2: 2.1",
- "Number 0: {0,number}; Number 1: {1,number}; Number 2: {2,number}",
- NUMBERS);
+ doAssertions(NumberFormat.getInstance(locale), NUMBERS, "number");
}
public void testNumberLooseFormatting() {
- doAssertions(
- "Number 0: 0.1; Number 1: 1.1; Number 2: 2.1",
- "Number 0: {0, number }; Number 1: {1, number }; Number 2: {2, number }",
- NUMBERS,
- "Number 0: {0,number}; Number 1: {1,number}; Number 2: {2,number}");
+ doAssertions(NumberFormat.getInstance(locale), NUMBERS, " number ",
+ "number");
}
public void testInteger() {
- doAssertions(
- "Number 0: 0; Number 1: 1; Number 2: 2",
- "Number 0: {0,number,integer}; Number 1: {1,number,integer}; Number 2: {2,number,integer}",
- NUMBERS);
+ doAssertions(NumberFormat.getIntegerInstance(locale), NUMBERS,
+ "number,integer");
}
public void testIntegerLooseFormatting() {
- doAssertions(
- "Number 0: 0; Number 1: 1; Number 2: 2",
- "Number 0: {0, number , integer }; Number 1: {1, number , integer }; Number 2: {2, number , integer }",
- NUMBERS,
- "Number 0: {0,number,integer}; Number 1: {1,number,integer}; Number 2: {2,number,integer}");
+ doAssertions(NumberFormat.getIntegerInstance(locale), NUMBERS,
+ " number , integer ", "number,integer");
}
public void testCurrency() {
- doAssertions(
- "Number 0: $0.10; Number 1: $1.10; Number 2: $2.10",
- "Number 0: {0,number,currency}; Number 1: {1,number,currency}; Number 2: {2,number,currency}",
- NUMBERS);
+ doAssertions(NumberFormat.getCurrencyInstance(locale), NUMBERS,
+ "number,currency");
}
public void testPercent() {
- doAssertions(
- "Number 0: 10%; Number 1: 110%; Number 2: 210%",
- "Number 0: {0,number,percent}; Number 1: {1,number,percent}; Number 2: {2,number,percent}",
- NUMBERS);
+ doAssertions(NumberFormat.getPercentInstance(locale), NUMBERS,
+ "number,percent");
}
public void testNumberPattern() {
- doAssertions(
- "Number 0: 000.100; Number 1: 001.100; Number 2: 002.100",
- "Number 0: {0,number,#000.000}; Number 1: {1,number,#000.000}; Number 2: {2,number,#000.000}",
- NUMBERS);
+ doAssertions(new DecimalFormat("#000.000", new DecimalFormatSymbols(
+ locale)), NUMBERS, "number,#000.000");
}
public void testDate() {
- doAssertions(
- "Date 0: Jan 1, 1970; Date 1: Feb 2, 1970; Date 2: Mar 3, 1970",
- "Date 0: {0,date}; Date 1: {1,date}; Date 2: {2,date}", DATES);
+ doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT, locale),
+ DATES, "date");
}
public void testDateLooseFormatting() {
- doAssertions(
- "Date 0: Jan 1, 1970; Date 1: Feb 2, 1970; Date 2: Mar 3, 1970",
- "Date 0: {0, date }; Date 1: {1, date }; Date 2: {2, date }",
- DATES, "Date 0: {0,date}; Date 1: {1,date}; Date 2: {2,date}");
+ doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT, locale),
+ DATES, " date ", "date");
}
public void testShortDate() {
- doAssertions(
- "Date 0: 1/1/70; Date 1: 2/2/70; Date 2: 3/3/70",
- "Date 0: {0,date,short}; Date 1: {1,date,short}; Date 2: {2,date,short}",
- DATES);
+ DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ DateFormat defaultDf = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
+ doAssertions(shortDf, DATES, "date,short",
+ shortDf.equals(defaultDf) ? "date" : "date,short");
}
public void testShortDateLooseFormatting() {
- doAssertions(
- "Date 0: 1/1/70; Date 1: 2/2/70; Date 2: 3/3/70",
- "Date 0: {0, date , short }; Date 1: {1, date , short }; Date 2: {2, date , short }",
- DATES,
- "Date 0: {0,date,short}; Date 1: {1,date,short}; Date 2: {2,date,short}");
+ DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ DateFormat defaultDf = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
+ doAssertions(shortDf, DATES, " date , short ",
+ shortDf.equals(defaultDf) ? "date" : "date,short");
}
public void testMediumDate() {
- doAssertions(
- "Date 0: Jan 1, 1970; Date 1: Feb 2, 1970; Date 2: Mar 3, 1970",
- "Date 0: {0,date,medium}; Date 1: {1,date,medium}; Date 2: {2,date,medium}",
- DATES, "Date 0: {0,date}; Date 1: {1,date}; Date 2: {2,date}");
+ doAssertions(DateFormat.getDateInstance(DateFormat.MEDIUM, locale),
+ DATES, "date,medium", "date");
}
public void testLongDate() {
- doAssertions(
- "Date 0: January 1, 1970; Date 1: February 2, 1970; Date 2: March 3, 1970",
- "Date 0: {0,date,long}; Date 1: {1,date,long}; Date 2: {2,date,long}",
- DATES);
+ DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG, locale);
+ DateFormat defaultDf = DateFormat.getDateInstance(DateFormat.DEFAULT,
+ locale);
+ doAssertions(longDf, DATES, "date,long",
+ longDf.equals(defaultDf) ? "date" : "date,long");
}
public void testFullDate() {
- doAssertions(
- "Date 0: Thursday, January 1, 1970; Date 1: Monday, February 2, 1970; Date 2: Tuesday, March 3, 1970",
- "Date 0: {0,date,full}; Date 1: {1,date,full}; Date 2: {2,date,full}",
- DATES);
+ DateFormat fullDf = DateFormat.getDateInstance(DateFormat.FULL, locale);
+ DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG, locale);
+ doAssertions(fullDf, DATES, "date,full",
+ fullDf.equals(longDf) ? "date,long" : "date,full");
}
public void testDatePattern() {
- doAssertions(
- "Date 0: AD1970.1; Date 1: AD1970.33; Date 2: AD1970.62",
- "Date 0: {0,date,Gyyyy.D}; Date 1: {1,date,Gyyyy.D}; Date 2: {2,date,Gyyyy.D}",
- DATES);
+ doAssertions(new SimpleDateFormat("Gyyyy.D", locale), DATES,
+ "date,Gyyyy.D");
}
public void testTime() {
- doAssertions(
- "Time 0: 12:15:20 AM; Time 1: 12:30:35 PM; Time 2: 6:45:50 PM",
- "Time 0: {0,time}; Time 1: {1,time}; Time 2: {2,time}", DATES);
+ doAssertions(DateFormat.getTimeInstance(DateFormat.DEFAULT, locale),
+ DATES, "time");
}
public void testShortTime() {
- doAssertions(
- "Time 0: 12:15 AM; Time 1: 12:30 PM; Time 2: 6:45 PM",
- "Time 0: {0,time,short}; Time 1: {1,time,short}; Time 2: {2,time,short}",
- DATES);
+ doAssertions(DateFormat.getTimeInstance(DateFormat.SHORT, locale),
+ DATES, "time,short");
}
public void testMediumTime() {
- doAssertions(
- "Time 0: 12:15:20 AM; Time 1: 12:30:35 PM; Time 2: 6:45:50 PM",
- "Time 0: {0,time,medium}; Time 1: {1,time,medium}; Time 2: {2,time,medium}",
- DATES, "Time 0: {0,time}; Time 1: {1,time}; Time 2: {2,time}");
+ doAssertions(DateFormat.getTimeInstance(DateFormat.MEDIUM, locale),
+ DATES, "time,medium", "time");
}
public void testLongTime() {
- DateFormat df = DateFormat.getTimeInstance(DateFormat.LONG);
- StringBuffer expected = new StringBuffer();
- for (int i = 0; i < DATES.length; i++) {
- if (i > 0) {
- expected.append("; ");
- }
- expected.append("Time ").append(i).append(": ").append(
- df.format(DATES[i]));
- }
- doAssertions(
- expected.toString(),
- "Time 0: {0,time,long}; Time 1: {1,time,long}; Time 2: {2,time,long}",
- DATES);
+ doAssertions(DateFormat.getTimeInstance(DateFormat.LONG, locale),
+ DATES, "time,long");
}
public void testFullTime() {
- DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL);
- StringBuffer expected = new StringBuffer();
- for (int i = 0; i < DATES.length; i++) {
- if (i > 0) {
- expected.append("; ");
- }
- expected.append("Time ").append(i).append(": ").append(
- df.format(DATES[i]));
- }
- doAssertions(
- expected.toString(),
- "Time 0: {0,time,full}; Time 1: {1,time,full}; Time 2: {2,time,full}",
- DATES,
- "Time 0: {0,time,long}; Time 1: {1,time,long}; Time 2: {2,time,long}");
+ DateFormat fullDf = DateFormat.getTimeInstance(DateFormat.FULL, locale);
+ DateFormat longDf = DateFormat.getTimeInstance(DateFormat.LONG, locale);
+ doAssertions(fullDf, DATES, "time,full",
+ fullDf.equals(longDf) ? "time,long" : "time,full");
}
public void testTimePattern() {
- doAssertions(
- "Time 0: AM01520; Time 1: PM123035; Time 2: PM184550",
- "Time 0: {0,time,aHms}; Time 1: {1,time,aHms}; Time 2: {2,time,aHms}",
- DATES,
- "Time 0: {0,date,aHms}; Time 1: {1,date,aHms}; Time 2: {2,date,aHms}");
+ doAssertions(new SimpleDateFormat("aHms", locale), DATES, "date,aHms");
}
public void testChoice() {
- String choice = "0.0#x|1.0#y|2.0#z";
- StringBuffer pattern = new StringBuffer();
- for (int i = 0; i < 3; i++) {
- if (i > 0) {
- pattern.append("; ");
- }
- pattern.append("Choice ").append(i).append(": {").append(i).append(
- ",choice,").append(choice).append("}");
- }
- doAssertions("Choice 0: x; Choice 1: y; Choice 2: z", pattern
- .toString(), NUMBERS);
+ doAssertions(new ChoiceFormat("0.0#x|1.0#y|2.0#z"), NUMBERS,
+ "choice,0.0#x|1.0#y|2.0#z");
}
public void testChoiceLooseFormatting() {
- String choice = "0.0#x |1.0#y |2.0#z ";
- StringBuffer pattern = new StringBuffer();
- for (int i = 0; i < 3; i++) {
- if (i > 0) {
- pattern.append("; ");
- }
- pattern.append("Choice ").append(i).append(": {").append(i).append(
- ",choice,").append(choice).append("}");
- }
- doAssertions("Choice 0: x ; Choice 1: y ; Choice 2: z ", pattern
- .toString(), NUMBERS);
+ doAssertions(new ChoiceFormat("0.0#x |1.0#y |2.0#z "), NUMBERS,
+ "choice,0.0#x |1.0#y |2.0#z ");
}
public void testChoiceRecursive() {
- String choice = "0.0#{0}|1.0#{1}|2.0#{2}";
- StringBuffer pattern = new StringBuffer();
- for (int i = 0; i < 3; i++) {
+ NumberFormat nf = NumberFormat.getInstance(locale);
+ StringBuffer choice = new StringBuffer();
+ StringBuffer format = new StringBuffer("choice,");
+ for (int i = 0; i < NUMBERS.length; i++) {
+ Double d = new Double(Math.floor(NUMBERS[i].doubleValue()));
if (i > 0) {
- pattern.append("; ");
+ choice.append('|');
+ format.append('|');
}
- pattern.append("Choice ").append(i).append(": {").append(i).append(
- ",choice,").append(choice).append("}");
+ choice.append(d).append('#').append(
+ nf.format(NUMBERS[i].doubleValue()));
+ format.append(d).append('#').append('{').append(i).append('}');
}
- doAssertions("Choice 0: 0.1; Choice 1: 1.1; Choice 2: 2.1", pattern
- .toString(), NUMBERS);
+ doAssertions(new ChoiceFormat(choice.toString()), NUMBERS, format
+ .toString());
}
}
Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java (original)
+++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java Tue Nov 27 09:27:35 2007
@@ -20,21 +20,161 @@
import java.util.Locale;
/**
- * Baseline tests for {@link ExtendedMessageFormat}
+ * Baseline tests for ExtendedMessageFormat
*
* @author Matt Benson
* @since 2.4
* @version $Id$
*/
-public class ExtendedMessageFormatBaselineTest extends AbstractMessageFormatTest {
+public abstract class ExtendedMessageFormatBaselineTest extends
+ AbstractMessageFormatTest {
- /*
- * (non-Javadoc)
+ /**
+ * Tests for <code>Locale.US</code>
*
- * @see org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
+ * @author mbenson
*/
- protected MessageFormat createMessageFormat(String pattern) {
- return new ExtendedMessageFormat(pattern, ExtendedMessageFormat.createDefaultMetaFormat(Locale.US));
+ public static class US extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.US;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.UK</code>
+ *
+ * @author mbenson
+ */
+ public static class UK extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.UK;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.GERMANY</code>
+ *
+ * @author mbenson
+ */
+ public static class DE extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.GERMANY;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.ITALY</code>
+ *
+ * @author mbenson
+ */
+ public static class IT extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.ITALY;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.JAPAN</code>
+ *
+ * @author mbenson
+ */
+ public static class JP extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.JAPAN;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.CHINA</code>
+ *
+ * @author mbenson
+ */
+ public static class CN extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.CHINA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.CANADA</code>
+ *
+ * @author mbenson
+ */
+ public static class CA extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.CANADA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.FRANCE</code>
+ *
+ * @author mbenson
+ */
+ public static class FR extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.FRANCE;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.KOREA</code>
+ *
+ * @author mbenson
+ */
+ public static class KR extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.KOREA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.TAIWAN</code>
+ *
+ * @author mbenson
+ */
+ public static class TW extends ExtendedMessageFormatBaselineTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.TAIWAN;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected MessageFormat createMessageFormat(String pattern, Locale locale) {
+ return new ExtendedMessageFormat(pattern, locale, ExtendedMessageFormat
+ .createDefaultMetaFormat(locale));
}
}
Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java (original)
+++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java Tue Nov 27 09:27:35 2007
@@ -16,11 +16,13 @@
*/
package org.apache.commons.lang.text;
+import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.Format;
import java.text.MessageFormat;
import java.text.ParsePosition;
import java.util.Calendar;
+import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
@@ -31,22 +33,162 @@
* @since 2.4
* @version $Id$
*/
-public class MessageFormatExtensionTest extends AbstractMessageFormatTest {
+public abstract class MessageFormatExtensionTest extends
+ AbstractMessageFormatTest {
+ /**
+ * Tests for <code>Locale.US</code>
+ *
+ * @author mbenson
+ */
+ public static class US extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.US;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.UK</code>
+ *
+ * @author mbenson
+ */
+ public static class UK extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.UK;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.GERMANY</code>
+ *
+ * @author mbenson
+ */
+ public static class DE extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.GERMANY;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.ITALY</code>
+ *
+ * @author mbenson
+ */
+ public static class IT extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.ITALY;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.JAPAN</code>
+ *
+ * @author mbenson
+ */
+ public static class JP extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.JAPAN;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.CHINA</code>
+ *
+ * @author mbenson
+ */
+ public static class CN extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.CHINA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.CANADA</code>
+ *
+ * @author mbenson
+ */
+ public static class CA extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.CANADA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.FRANCE</code>
+ *
+ * @author mbenson
+ */
+ public static class FR extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.FRANCE;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.KOREA</code>
+ *
+ * @author mbenson
+ */
+ public static class KR extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.KOREA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.TAIWAN</code>
+ *
+ * @author mbenson
+ */
+ public static class TW extends MessageFormatExtensionTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.TAIWAN;
+ }
+ }
static class ProperNameCapitalizationFormat extends Format {
private static final long serialVersionUID = -6081911520622186866L;
private static final StrMatcher MATCH = StrMatcher
.charSetMatcher(" ,.");
- /*
- * (non-Javadoc)
- *
- * @see java.text.Format#format(java.lang.Object,
- * java.lang.StringBuffer, java.text.FieldPosition)
+ /**
+ * {@inheritDoc}
*/
public StringBuffer format(Object obj, StringBuffer toAppendTo,
FieldPosition fpos) {
- char[] buffer = String.valueOf(obj).toCharArray();
+ if (!(obj instanceof String)) {
+ throw new IllegalArgumentException();
+ }
+ char[] buffer = ((String) obj).toCharArray();
ParsePosition pos = new ParsePosition(0);
while (pos.getIndex() < buffer.length) {
char c = buffer[pos.getIndex()];
@@ -91,17 +233,17 @@
}
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
+ /**
+ * {@inheritDoc}
*/
- protected MessageFormat createMessageFormat(String pattern) {
- return new ExtendedMessageFormat(pattern, new MultiFormat.Builder()
- .add(ExtendedMessageFormat.createDefaultMetaFormat(Locale.US)).add(
+ protected MessageFormat createMessageFormat(String pattern, Locale locale) {
+ return new ExtendedMessageFormat(pattern, locale,
+ new MultiFormat.Builder().add(
new NameKeyedMetaFormat.Builder().put("properName",
new ProperNameCapitalizationFormat())
- .toNameKeyedMetaFormat()).toMultiFormat());
+ .toNameKeyedMetaFormat()).add(
+ ExtendedMessageFormat.createDefaultMetaFormat(locale))
+ .toMultiFormat());
}
public void testProperName() {
@@ -111,10 +253,23 @@
}
public void testMixed() {
- doAssertions("John Q. Public was born on Thursday, January 1, 1970.",
- "{0,properName} was born on {1,date,full}.", new Object[] {
+ StringBuffer expected = new StringBuffer("John Q. Public was born on ");
+ Date dob = new GregorianCalendar(1970, Calendar.JANUARY, 01, 0, 15, 20)
+ .getTime();
+ DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG, locale);
+ longDf.format(dob, expected, new FieldPosition(0));
+ expected.append('.');
+ String pattern = "{0,properName} was born on {1,date,long}.";
+ StringBuffer toPattern = new StringBuffer(pattern);
+ if (longDf.equals(DateFormat.getDateInstance(DateFormat.DEFAULT, locale))) {
+ int idx = pattern.indexOf(",long");
+ toPattern.delete(idx, idx + ",long".length());
+ }
+ doAssertions(expected.toString(),
+ pattern, new Object[] {
"john q. public",
new GregorianCalendar(1970, Calendar.JANUARY, 01, 0,
- 15, 20).getTime() });
+ 15, 20).getTime() }, toPattern.toString());
}
+
}
Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java (original)
+++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java Tue Nov 27 09:27:35 2007
@@ -10,13 +10,152 @@
* @since 2.4
* @version $Id$
*/
-public class MessageFormatTest extends AbstractMessageFormatTest {
- /*
- * (non-Javadoc)
+public abstract class MessageFormatTest extends AbstractMessageFormatTest {
+
+ /**
+ * Tests for <code>Locale.US</code>
*
- * @see org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
+ * @author mbenson
*/
- protected MessageFormat createMessageFormat(String pattern) {
- return new MessageFormat(pattern, Locale.US);
+ public static class US extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.US;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.UK</code>
+ *
+ * @author mbenson
+ */
+ public static class UK extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.UK;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.GERMANY</code>
+ *
+ * @author mbenson
+ */
+ public static class DE extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.GERMANY;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.ITALY</code>
+ *
+ * @author mbenson
+ */
+ public static class IT extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.ITALY;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.JAPAN</code>
+ *
+ * @author mbenson
+ */
+ public static class JP extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.JAPAN;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.CHINA</code>
+ *
+ * @author mbenson
+ */
+ public static class CN extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.CHINA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.CANADA</code>
+ *
+ * @author mbenson
+ */
+ public static class CA extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.CANADA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.FRANCE</code>
+ *
+ * @author mbenson
+ */
+ public static class FR extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.FRANCE;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.KOREA</code>
+ *
+ * @author mbenson
+ */
+ public static class KR extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.KOREA;
+ }
+ }
+
+ /**
+ * Tests for <code>Locale.TAIWAN</code>
+ *
+ * @author mbenson
+ */
+ public static class TW extends MessageFormatTest {
+ /**
+ * {@inheritDoc}
+ */
+ protected Locale getLocale() {
+ return Locale.TAIWAN;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected MessageFormat createMessageFormat(String pattern, Locale locale) {
+ return new MessageFormat(pattern, locale);
}
}
Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java?rev=598707&r1=598706&r2=598707&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java (original)
+++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java Tue Nov 27 09:27:35 2007
@@ -57,9 +57,36 @@
suite.addTest(StrSubstitutorTest.suite());
suite.addTest(StrTokenizerTest.suite());
suite.addTestSuite(MultiFormatTest.class);
- suite.addTestSuite(MessageFormatTest.class);
- suite.addTestSuite(ExtendedMessageFormatBaselineTest.class);
- suite.addTestSuite(MessageFormatExtensionTest.class);
+ suite.addTestSuite(MessageFormatTest.US.class);
+ suite.addTestSuite(MessageFormatTest.UK.class);
+ suite.addTestSuite(MessageFormatTest.DE.class);
+ suite.addTestSuite(MessageFormatTest.IT.class);
+ suite.addTestSuite(MessageFormatTest.JP.class);
+ suite.addTestSuite(MessageFormatTest.CA.class);
+ suite.addTestSuite(MessageFormatTest.CN.class);
+ suite.addTestSuite(MessageFormatTest.FR.class);
+ suite.addTestSuite(MessageFormatTest.KR.class);
+ suite.addTestSuite(MessageFormatTest.TW.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.US.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.UK.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.DE.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.IT.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.JP.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.CA.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.CN.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.FR.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.KR.class);
+ suite.addTestSuite(ExtendedMessageFormatBaselineTest.TW.class);
+ suite.addTestSuite(MessageFormatExtensionTest.US.class);
+ suite.addTestSuite(MessageFormatExtensionTest.UK.class);
+ suite.addTestSuite(MessageFormatExtensionTest.DE.class);
+ suite.addTestSuite(MessageFormatExtensionTest.IT.class);
+ suite.addTestSuite(MessageFormatExtensionTest.JP.class);
+ suite.addTestSuite(MessageFormatExtensionTest.CA.class);
+ suite.addTestSuite(MessageFormatExtensionTest.CN.class);
+ suite.addTestSuite(MessageFormatExtensionTest.FR.class);
+ suite.addTestSuite(MessageFormatExtensionTest.KR.class);
+ suite.addTestSuite(MessageFormatExtensionTest.TW.class);
return suite;
}
Re: svn commit: r598707 - in /commons/proper/lang/trunk/src: java/org/apache/commons/lang/text/ test/org/apache/commons/lang/text/
Posted by Matt Benson <gu...@yahoo.com>.
--- Niall Pemberton <ni...@gmail.com> wrote:
> On Nov 29, 2007 3:17 PM, Matt Benson
> <gu...@yahoo.com> wrote:
> > I understand your concerns, Niall, and agree with
> you
> > in principle. My laxity here was due to the fact
> > that this entire suite of classes is new to [lang]
> and
> > I treated the change more like an extension of the
> > initial add. If you like I can revert the changes
> and
> > re-add more atomically.
>
> No need to revert IMO - you're right its not as big
> an issue for brand
> new stuff and I understand the temptation when its
> something only
> you've worked on. But the easier we make it for
> others to follow along
> the more likely for others to comment/contribute.
>
> Niall
>
> P.S. I keep meaning to take a look at multiformat
> sometime - I'm sure
> its useful stuff
MultiFormat was something I needed to implement
ExtendedMessageFormat, but may be useful enough in its
own right. It's kind of strange for MultiFormat and
CompositeFormat to live side-by-side when they have
such similar but different aims, and names that could
easily be confused with one another. Anyone have a
better suggestion for a name for MultiFormat?
-Matt
>
> > -Matt
> >
> >
> > --- Niall Pemberton <ni...@gmail.com>
> wrote:
> >
> > > My preference is that commits are as atomic as
> > > possible. These kind of
> > > all-in-one uber commits make it difficult to
> follow
> > > along with whats
> > > actually changing. IMO its especially a good
> idea to
> > > separate out the
> > > *noise" of javadoc/checkstyle changes from real
> code
> > > changes and in
> > > this case perhaps 3 commits would have been
> > > appropriate? Perhaps this
> > > sounds picky, but I believe it helps rather than
> > > hinders collaboration
> > > to work that way.
> > >
> > > Niall
> > >
> > > On Nov 27, 2007 5:27 PM, <mb...@apache.org>
> > > wrote:
> > > > Author: mbenson
> > > > Date: Tue Nov 27 09:27:35 2007
> > > > New Revision: 598707
> > > >
> > > > URL:
> > > http://svn.apache.org/viewvc?rev=598707&view=rev
> > > > Log:
> > > > [LANG-362] checkstyle; javadoc; extended
> testing
> > > which necessitated some refactorings
> > > >
> > > > Modified:
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > > >
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -43,11 +43,8 @@
> > > > super();
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > > java.text.Format#format(java.lang.Object,
> > > java.lang.StringBuffer,
> > > > - * java.text.FieldPosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public StringBuffer format(Object obj,
> > > StringBuffer toAppendTo,
> > > > FieldPosition pos) {
> > > > @@ -57,11 +54,8 @@
> > > > throw new
> > > IllegalArgumentException(String.valueOf(obj));
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > > java.text.Format#parseObject(java.lang.String,
> > > > - * java.text.ParsePosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public Object parseObject(String source,
> > > ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -56,8 +56,15 @@
> > > > }
> > > >
> > > > /**
> > > > - * Uses the formatter Format instance.
> > > > - *
> > > > + * Uses the formatter Format instance.
> > > > + *
> > > > + * @param obj
> > > > + * the object to format
> > > > + * @param toAppendTo
> > > > + * the {@link StringBuffer} to
> > > append to
> > > > + * @param pos
> > > > + * the FieldPosition to use
> (or
> > > ignore).
> > > > + * @return <code>toAppendTo</code>
> > > > * @see Format#format(Object,
> StringBuffer,
> > > FieldPosition)
> > > > */
> > > > public StringBuffer format(Object obj,
> > > StringBuffer toAppendTo, FieldPosition pos) {
> > > > @@ -65,8 +72,15 @@
> > > > }
> > > >
> > > > /**
> > > > - * Uses the parser Format instance.
> > > > - *
> > > > + * Uses the parser Format instance.
> > > > + *
> > > > + * @param source
> > > > + * the String source
> > > > + * @param pos
> > > > + * the ParsePosition
> containing
> > > the position to parse from, will
> > > > + * be updated according to
> parsing
> > > success (index) or failure
> > > > + * (error index)
> > > > + * @return the parsed Object
> > > > * @see Format#parseObject(String,
> > > ParsePosition)
> > > > */
> > > > public Object parseObject(String source,
> > > ParsePosition pos) {
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -40,17 +40,13 @@
> > > > /**
> > > > * Create a new DateMetaFormat.
> > > > *
> > > > - * @param locale
> > > > + * @param locale the Locale to use
> > > > */
> > > > public DateMetaFormat(Locale locale) {
> > > > super(locale);
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> > > > - */
> > > > + /** {@inheritDoc} */
> > > > protected DateFormat
> > > createSubformatInstance(int style) {
> > > > return
> DateFormat.getDateInstance(style,
> > > getLocale());
> > > > }
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -29,6 +29,7 @@
> > > >
> > > > /**
> > > > * date/time metaFormat support.
> > > > + *
> > > > * @see ExtendedMessageFormat
> > > > * @author Matt Benson
> > > > * @since 2.4
> > > > @@ -70,18 +71,15 @@
> > > > /**
> > > > * Create a new AbstractDateMetaFormat.
> > > > *
> > > > - * @param locale
> > > > + * @param locale Locale
> > > > */
> > > > public DateMetaFormatSupport(Locale
> locale) {
> > > > super();
> > > > this.locale = locale;
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > > java.text.Format#format(java.lang.Object,
> > > java.lang.StringBuffer,
> > > > - * java.text.FieldPosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public StringBuffer format(Object obj,
> > > StringBuffer toAppendTo,
> > > > FieldPosition pos) {
> > > > @@ -98,6 +96,12 @@
> > > > throw new
> > > IllegalArgumentException(String.valueOf(obj));
> > > > }
> > > >
> > > > + /**
> > > > + * Get the subformat name for the given
> > > object.
> > > > + *
> > > > + * @param subformat Object
> > > > + * @return subformat name.
> > > > + */
> > > > private String getSubformatName(Object
> > > subformat) {
> > > > initialize();
> > > > if
> > > (reverseSubformats.containsKey(subformat)) {
> > > > @@ -107,11 +111,8 @@
> > > > return null;
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > > java.text.Format#parseObject(java.lang.String,
> > > > - * java.text.ParsePosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public Object parseObject(String source,
> > > ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > > @@ -131,6 +132,12 @@
> > > > return null;
> > > > }
> > > >
> > > > + /**
> > > > + * Get the named subformat.
> > > > + *
> > > > + * @param subformat name
> > > > + * @return Format designated by
> > > <code>name</code>, if any
> > > > + */
> > > > private Format getSubformat(String
> subformat)
> > > {
> > > > initialize();
> > > > if (!styleMap.containsKey(subformat))
> {
> > > > @@ -141,7 +148,7 @@
> > > > }
> > > >
> > > > /**
> > > > - * Get the locale in use by this {@link
> > > DateMetaFormatSupport}.
> > > > + * Get the locale in use by this
> > > DateMetaFormatSupport.
> > > > *
> > > > * @return Locale
> > > > */
> > > > @@ -149,6 +156,9 @@
> > > > return locale;
> > > > }
> > > >
> > > > + /**
> > > > + * Initialize this DateMetaFormatSupport.
> > > > + */
> > > > private synchronized void initialize() {
> > > > if (!initialized) {
> > > > styleMap = createStyleMap();
> > > > @@ -175,7 +185,7 @@
> > > > * Create a subformat for the given
> > > <code>DateFormat</code> style
> > > > * constant.
> > > > *
> > > > - * @param style
> > > > + * @param style DateFormat style constant
> > > > * @return a DateFormat instance.
> > > > */
> > > > protected abstract DateFormat
> > > createSubformatInstance(int style);
> > > > @@ -194,8 +204,7 @@
> > > > * Set whether this metaformat can parse
> > > date/time pattern formats in
> > > > * addition to named formats.
> > > > *
> > > > - * @param handlePatterns
> > > > - * the boolean handlePatterns
> to
> > > set.
> > > > + * @param handlePatterns the boolean
> > > handlePatterns to set.
> > > > * @return <code>this</code> for fluent
> > > usage.
> > > > */
> > > > public DateMetaFormatSupport
> > > setHandlePatterns(boolean handlePatterns) {
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -34,7 +34,8 @@
> > > > *
> > > > * @author Matt Benson
> > > > * @since 2.4
> > > > - * @version $Id$
> > > > + * @version $Id:
> DefaultMetaFormatFactory.java
> > > 592077 2007-11-05 16:47:10Z
> > > > + * mbenson $
> > > > */
> > > > class DefaultMetaFormatFactory {
> > > >
> > > > @@ -59,16 +60,32 @@
> > > > private static final String[]
> PATTERN_KEYS =
> > > new String[] { DATE_KEY,
> > > > TIME_KEY };
> > > >
> > > > + /**
> > > > + * Ordered NameKeyedMetaFormat
> > > > + */
> > > > private static class
> > > OrderedNameKeyedMetaFormat extends
> > > NameKeyedMetaFormat {
> > > > private static final long
> > > serialVersionUID = -7688772075239431055L;
> > > >
> > > > private List keys;
> > > >
> > > > + /**
> > > > + * Construct a new
> > > OrderedNameKeyedMetaFormat.
> > > > + *
> > > > + * @param names String[]
> > > > + * @param formats Format[]
> > > > + */
> > > > private
> > > OrderedNameKeyedMetaFormat(String[] names,
> Format[]
> > > formats) {
> > > > super(createMap(names, formats));
> > > > this.keys = Arrays.asList(names);
> > > > }
> > > >
> > > > + /**
> > > > + * Create a map from the specified
> > > key/value parameters.
> > > > + *
> > > > + * @param names keys
> > > > + * @param formats values
> > > > + * @return Map
> > > > + */
> > > > private static Map createMap(String[]
> > > names, Format[] formats) {
> > > >
> > > Validate.isTrue(ArrayUtils.isSameLength(names,
> > > formats));
> > > > HashMap result = new
> > > HashMap(names.length);
> > > > @@ -78,6 +95,9 @@
> > > > return result;
> > > > }
> > > >
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > protected Iterator iterateKeys() {
> > > > return keys.iterator();
> > > > }
> > > > @@ -86,8 +106,7 @@
> > > > /**
> > > > * Get a default metaformat for the
> specified
> > > Locale.
> > > > *
> > > > - * @param locale
> > > > - * the Locale for the
> resulting
> > > Format instance.
> > > > + * @param locale the Locale for the
> resulting
> > > Format instance.
> > > > * @return Format
> > > > */
> > > > public static Format getFormat(final
> Locale
> > > locale) {
> > > > @@ -106,6 +125,12 @@
> > > > new
> > > TimeMetaFormat(locale) }) });
> > > > }
> > > >
> > > > + /**
> > > > + * Get the default format supported by a
> > > given metaformat.
> > > > + *
> > > > + * @param metaformat Format to handle
> > > parsing.
> > > > + * @return the default format, if any.
> > > > + */
> > > > private static Format
> getDefaultFormat(Format
> > > metaformat) {
> > > > ParsePosition pos = new
> ParsePosition(0);
> > > > Object o = metaformat.parseObject("",
> > > pos);
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -22,13 +22,16 @@
> > > > import java.util.ArrayList;
> > > > import java.util.Locale;
> > > >
> > > > +import org.apache.commons.lang.StringUtils;
> > > > import org.apache.commons.lang.Validate;
> > > >
> > > > /**
> > > > * Extends <code>MessageFormat</code> to
> allow
> > > pluggable/additional formatting
> > > > * options for embedded format elements;
> requires
> > > a "meta-format", i.e. a
> > > > * <code>Format</code> capable of parsing and
> > > formatting other
> > > > - * <code>Format</code>s.
> > > > + * <code>Format</code>s. One shortcoming is
> that
> > > recursive choice formats do
> > > > + * not inherit knowledge of the extended
> > > formatters and are limited to those
> > > > + * available with
> > > <code>java.text.MessageFormat</code> (patches
> > > welcome).
> > > > *
> > > > * @author Matt Benson
> > > > * @since 2.4
> > > > @@ -53,14 +56,16 @@
> > > > * behavior identical to a
> > > <code>java.lang.MessageFormat</code> using
> > > > * <code>locale</code>.
> > > > *
> > > > - * @param locale
> > > > - * the Locale for the
> resulting
> > > Format instance.
> > > > + * @param locale the Locale for the
> resulting
> > > Format instance.
> > > > * @return Format
> > > > */
> > > > public static Format
> > > createDefaultMetaFormat(Locale locale) {
> > > > return
> > > DefaultMetaFormatFactory.getFormat(locale);
> > > > }
> > > >
> > > > + /**
> > > > + * Conceptual demarcation of methods to
> parse
> > > the pattern.
> > > > + */
> > > > private static class Parser {
> > > > private static final String
> ESCAPED_QUOTE
> > > = "''";
> > > > private static final char START_FMT =
> > > ',';
> > > > @@ -68,6 +73,12 @@
> > > > private static final char START_FE =
> '{';
> > > > private static final char QUOTE =
> '\'';
> > > >
> > > > + /**
> > > > + * Strip all formats from the
> pattern.
> > > > + *
> > > > + * @param pattern String to strip
> > > > + * @return stripped pattern
> > > > + */
> > > > private String stripFormats(String
> > > pattern) {
> > > > StringBuffer sb = new
> > > StringBuffer(pattern.length());
> > > > ParsePosition pos = new
> > > ParsePosition(0);
> > > > @@ -98,6 +109,14 @@
> > > > return sb.toString();
> > > > }
> > > >
> > > > + /**
> > > > + * Insert formats back into the
> pattern
> > > for toPattern() support.
> > > > + *
> > > > + * @param pattern source
> > > > + * @param formats the Formats to
> insert
> > > > + * @param metaFormat Format to format
> the
> > > Formats
> > > > + * @return full pattern
> > > > + */
> > > > private String insertFormats(String
> > > pattern, Format[] formats,
> > > > Format metaFormat) {
> > > > if (formats == null ||
> formats.length
> > > == 0) {
> > > > @@ -117,8 +136,10 @@
> > > >
> sb.append(START_FE).append(
> > > >
> > > readArgumentIndex(pattern, next(pos)));
> > > > if (formats[fe] != null)
> {
> > > > -
> > > sb.append(START_FMT).append(
> > > > -
> > > metaFormat.format(formats[fe]));
> > > > + String formatName =
> > > metaFormat.format(formats[fe]);
> > > > + if
> > > (StringUtils.isNotEmpty(formatName)) {
> > > > +
> > > sb.append(START_FMT).append(formatName);
> > > > + }
> > > > }
> > > > break;
> > > > default:
> > > > @@ -129,6 +150,13 @@
> > > > return sb.toString();
> > > > }
> > > >
> > > > + /**
> > > > + * Parse the formats from the given
> > > pattern.
> > > > + *
> > > > + * @param pattern String to parse
> > > > + * @param metaFormat Format to parse
> the
> > > Formats
> > > > + * @return array of parsed Formats
> > > > + */
> > > > private Format[] parseFormats(String
> > > pattern, Format metaFormat) {
> > > > ArrayList result = new
> ArrayList();
> > > > ParsePosition pos = new
> > > ParsePosition(0);
> > > > @@ -142,8 +170,8 @@
> > > >
> readArgumentIndex(pattern,
> > > next(pos));
> > > > if
> > > (pattern.charAt(pos.getIndex()) == START_FMT) {
> > > > seekNonWs(pattern,
> > > next(pos));
> > > > -
> > > result.add(metaFormat.parseObject(pattern,
> pos));
> > > > }
> > > > +
> > > result.add(metaFormat.parseObject(pattern,
> pos));
> > > > seekNonWs(pattern, pos);
> > > > if
> > > (pattern.charAt(pos.getIndex()) != END_FE) {
> > > > throw new
> > > IllegalArgumentException(
> > > > @@ -158,6 +186,12 @@
> > > > return (Format[])
> result.toArray(new
> > > Format[result.size()]);
> > > > }
> > > >
> > > > + /**
> > > > + * Consume whitespace from the
> current
> > > parse position.
> > > > + *
> > > > + * @param pattern String to read
> > > > + * @param pos current position
> > > > + */
> > > > private void seekNonWs(String
> pattern,
> > > ParsePosition pos) {
> > > > int len = 0;
> > > > char[] buffer =
> > > pattern.toCharArray();
> > > > @@ -167,11 +201,24 @@
> > > > } while (len > 0 &&
> pos.getIndex() <
> > > pattern.length());
> > > > }
> > > >
> > > > + /**
> > > > + * Convenience method to advance
> parse
> > > position by 1
> > > > + *
> > > > + * @param pos ParsePosition
> > > > + * @return <code>pos</code>
> > > > + */
> > > > private ParsePosition
> next(ParsePosition
> > > pos) {
> > > > pos.setIndex(pos.getIndex() + 1);
> > > > return pos;
> > > > }
> > > >
> > > > + /**
> > > > + * Read the argument index from the
> > > current format element
> > > > + *
> > > > + * @param pattern pattern to parse
> > > > + * @param pos current parse position
> > > > + * @return argument index as string
> > > > + */
> > > > private String
> readArgumentIndex(String
> > > pattern, ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > > for (; pos.getIndex() <
> > > pattern.length(); next(pos)) {
> > > > @@ -189,6 +236,16 @@
> > > > "Unterminated format
> element
> > > at position " + start);
> > > > }
> > > >
> > > > + /**
> > > > + * Consume a quoted string, adding it
> to
> > > <code>appendTo</code> if
> > > > + * specified.
> > > > + *
> > > > + * @param pattern pattern to parse
> > > > + * @param pos current parse position
> > > > + * @param appendTo optional
> StringBuffer
> > > to append
> > > > + * @param escapingOn whether to
> process
> > > escaped quotes
> > > > + * @return <code>appendTo</code>
> > > > + */
> > > > private StringBuffer
> > > appendQuotedString(String pattern,
> > > > ParsePosition pos,
> StringBuffer
> > > appendTo, boolean escapingOn) {
> > > > int start = pos.getIndex();
> > > > @@ -200,8 +257,8 @@
> > > > for (int i = pos.getIndex(); i <
> > > pattern.length(); i++) {
> > > > if (escapingOn
> > > > &&
> > > pattern.substring(i).startsWith(ESCAPED_QUOTE))
> {
> > > > - appendTo.append(c,
> lastHold,
> > > pos.getIndex() - lastHold).append(
> > > > - QUOTE);
> > > > + appendTo.append(c,
> lastHold,
> > > pos.getIndex() - lastHold)
> > > > + .append(QUOTE);
> > > > pos.setIndex(i +
> > > ESCAPED_QUOTE.length());
> > > > lastHold =
> pos.getIndex();
> > > > continue;
> > > > @@ -219,11 +276,24 @@
> > > > "Unterminated quoted
> string
> > > at position " + start);
> > > > }
> > > >
> > > > + /**
> > > > + * Consume quoted string only
> > > > + *
> > > > + * @param pattern pattern to parse
> > > > + * @param pos current parse position
> > > > + * @param escapingOn whether to
> process
> > > escaped quotes
> > > > + */
> > > > private void getQuotedString(String
> > > pattern, ParsePosition pos,
> > > > boolean escapingOn) {
> > > > appendQuotedString(pattern, pos,
> > > null, escapingOn);
> > > > }
> > > >
> > > > + /**
> > > > + * Consume the entire format found at
> the
> > > current position.
> > > > + *
> > > > + * @param pattern string to parse
> > > > + * @param pos current parse position
> > > > + */
> > > > private void eatFormat(String
> pattern,
> > > ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > > int depth = 1;
> > > > @@ -254,15 +324,28 @@
> > > > private String strippedPattern;
> > > >
> > > > /**
> > > > - * Create a new ExtendedMessageFormat.
> > > > + * Create a new ExtendedMessageFormat for
> the
> > > default locale.
> > > > *
> > > > - * @param pattern
> > > > - * @param metaFormat
> > > > - * @throws IllegalArgumentException
> > > > - * if <code>metaFormat</code>
> is
> > > <code>null</code> or in
> > > > - * case of a bad pattern.
> > > > + * @param pattern String
> > > > + * @param metaFormat Format
> > > > + * @throws IllegalArgumentException if
> > > <code>metaFormat</code> is
> > > > + * <code>null</code> or in
> case
> > > of a bad pattern.
> > > > */
> > > > public ExtendedMessageFormat(String
> pattern,
> > > Format metaFormat) {
> > > > + this(pattern, Locale.getDefault(),
> > > metaFormat);
> > > > + }
> > > > +
> > > > + /**
> > > > + * Create a new ExtendedMessageFormat.
> > > > + *
> > > > + * @param pattern String
> > > > + * @param locale Locale
> > > > + * @param metaFormat Format
> > > > + * @throws IllegalArgumentException if
> > > <code>metaFormat</code> is
> > > > + * <code>null</code> or in
> case
> > > of a bad pattern.
> > > > + */
> > > > + public ExtendedMessageFormat(String
> pattern,
> > > Locale locale,
> > > > + Format metaFormat) {
> > > > /*
> > > > * We have to do some acrobatics
> here:
> > > the call to the super constructor
> > > > * will invoke applyPattern(), but we
> > > don't want to apply the pattern
> > > > @@ -270,7 +353,7 @@
> > > > * our (final) applyPattern
> > > implementation, and re-call at the end of
> > > > * this constructor.
> > > > */
> > > > - super(pattern);
> > > > + super(pattern, locale);
> > > > setMetaFormat(metaFormat);
> > > > applyPattern(pattern);
> > > > }
> > > > @@ -278,8 +361,7 @@
> > > > /**
> > > > * Apply the specified pattern.
> > > > *
> > > > - * @param pattern
> > > > - * pattern String
> > > > + * @param pattern String
> > > > */
> > > > public final void applyPattern(String
> > > pattern) {
> > > > if (metaFormat == null) {
> > > > @@ -293,20 +375,20 @@
> > > > }
> > > >
> > > > /**
> > > > - * Pre-execution hook that allows
> subclasses
> > > to customize the behavior of
> > > > - * the final applyPattern implementation.
> > > > + * Pre-execution hook by means of which a
> > > subclass can customize the
> > > > + * behavior of the final applyPattern
> > > implementation.
> > > > *
> > > > - * @param pattern
> > > > + * @param pattern String
> > > > */
> > > > protected void applyPatternPre(String
> > > pattern) {
> > > > // noop
> > > > }
> > > >
> > > > /**
> > > > - * Post-execution hook that allows
> subclasses
> > > to customize the behavior of
> > > > - * the final applyPattern implementation.
> > > > + * Post-execution hook by means of which
> a
> > > subclass can customize the
> > > > + * behavior of the final applyPattern
> > > implementation.
> > > > *
> > > > - * @param pattern
> > > > + * @param pattern String
> > > > */
> > > > protected void applyPatternPost(String
> > > pattern) {
> > > > // noop
> > > > @@ -335,8 +417,7 @@
> > > > * Set the meta-format. Has no effect
> until a
> > > subsequent call to
> > > > * {@link #applyPattern(String)}.
> > > > *
> > > > - * @param metaFormat
> > > > - * the Format metaFormat to
> set.
> > > > + * @param metaFormat the Format
> metaFormat to
> > > set.
> > > > */
> > > > public synchronized void
> setMetaFormat(Format
> > > metaFormat) {
> > > > Validate.notNull(metaFormat,
> "metaFormat
> > > is null");
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -24,7 +24,8 @@
> > > > import java.util.Map;
> > > >
> > > > /**
> > > > - * metaFormat support.
> > > > + * Support class for implementing Formats
> that
> > > parse/format other Formats, with
> > > > + * specific support for interoperability with
> > > ExtendedMessageFormat.
> > > > *
> > > > * @see ExtendedMessageFormat
> > > > * @author Matt Benson
> > > > @@ -40,11 +41,9 @@
> > > > /**
> > > > * Invert the specified Map.
> > > > *
> > > > - * @param map
> > > > - * the Map to invert.
> > > > + * @param map the Map to invert.
> > > > * @return a new Map instance.
> > > > - * @throws NullPointerException
> > > > - * if <code>map</code> is
> > > <code>null</code>.
> > > > + * @throws NullPointerException if
> > > <code>map</code> is <code>null</code>.
> > > > */
> > > > protected Map invert(Map map) {
> > > > Map result = new HashMap(map.size());
> > > > @@ -58,8 +57,8 @@
> > > > /**
> > > > * Find the end of the subformat.
> > > > *
> > > > - * @param source
> > > > - * @param pos
> > > > + * @param source String
> > > > + * @param pos current parse position
> > > > */
> > > > protected void
> seekFormatElementEnd(String
> > > source, ParsePosition pos) {
> > > > int depth = 1;
> > > > @@ -85,8 +84,7 @@
> > > > /**
> > > > * Advance the parse index by 1.
> > > > *
> > > > - * @param pos
> > > > - * the ParsePosition to
> advance.
> > > > + * @param pos the ParsePosition to
> advance.
> > > > * @return <code>pos</code>
> > > > */
> > > > protected ParsePosition
> next(ParsePosition
> > > pos) {
> > > > @@ -100,10 +98,8 @@
> > > > * occurs
> <code>pos.getErrorIndex()</code>
> > > will contain a value >= zero,
> > > > * indicating the index at which the
> parse
> > > error occurred.
> > > > *
> > > > - * @param source
> > > > - * String to parse
> > > > - * @param pos
> > > > - * ParsePosition marking index
> > > into <code>source</code>
> > > > + * @param source String to parse
> > > > + * @param pos ParsePosition marking index
> > > into <code>source</code>
> > > > * @return Object parsed
> > > > */
> > > > public abstract Object parseObject(String
> > > source, ParsePosition pos);
> > > > @@ -112,19 +108,14 @@
> > > > * Format the specified object, appending
> to
> > > the given StringBuffer, and
> > > > * optionally respecting the specified
> > > FieldPosition.
> > > > *
> > > > - * @param obj
> > > > - * the object to format
> > > > - * @param toAppendTo
> > > > - * the StringBuffer to which
> the
> > > formatted object should be
> > > > - * appended
> > > > - * @param pos
> > > > - * FieldPosition associated
> with
> > > <code>obj</code>
> > > > + * @param obj the object to format
> > > > + * @param toAppendTo the StringBuffer to
> > > which the formatted object should
> > > > + * be appended
> > > > + * @param pos FieldPosition associated
> with
> > > <code>obj</code>
> > > > * @return <code>toAppendTo</code>
> > > > - * @throws NullPointerException
> > > > - * if <code>toAppendTo</code>
> or
> > > <code>pos</code> is
> > > > - * <code>null</code>
> > > > - * @throws IllegalArgumentException
> > > > - * if unable to format
> > > <code>obj</code>
> > > > + * @throws NullPointerException if
> > > <code>toAppendTo</code> or
> > > > + * <code>pos</code> is
> > > <code>null</code>
> > > > + * @throws IllegalArgumentException if
> unable
> > > to format <code>obj</code>
> > > > */
> > > > public abstract StringBuffer
> format(Object
> > > obj, StringBuffer toAppendTo,
> > > > FieldPosition pos);
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -50,7 +50,7 @@
> > > > /**
> > > > * Add a delegate format.
> > > > *
> > > > - * @param delegate
> > > > + * @param delegate Format
> > > > * @return the builder
> > > > */
> > > > public Builder add(Format delegate) {
> > > > @@ -82,17 +82,19 @@
> > > > /**
> > > > * Create a new MultiFormat.
> > > > *
> > > > - * @param delegates
> > > > + * @param delegates Formats
> > > > */
> > > > public MultiFormat(Format[] delegates) {
> > > > setDelegates(delegates);
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > + /**
> > > > + * Format <code>obj</code>; append to
> > > <code>toAppendTo</code>.
> > > > *
> > > > - * @see
> > > java.text.Format#format(java.lang.Object,
> > > java.lang.StringBuffer,
> > > > - * java.text.FieldPosition)
> > > > + * @param obj Object to format
> > > > + * @param toAppendTo StringBuffer to
> append
> > > to
> > > > + * @param pos FieldPosition
> > > > + * @return <code>toAppendTo</code>
> > > > */
> > > > public StringBuffer format(Object obj,
> > > StringBuffer toAppendTo,
> > > > FieldPosition pos) {
> > > > @@ -108,11 +110,13 @@
> > > > + obj);
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > + /**
> > > > + * Parse an object by trying each
> delegate.
> > > > *
> > > > - * @see
> > > java.text.Format#parseObject(java.lang.String,
> > > > - * java.text.ParsePosition)
> > > > + * @param source string
> > > > + * @param pos current parse position
> > > > + * @return value returned from first
> delegate
> > > that does not encounter an
> > > > + * error.
> > > > */
> > > > public Object parseObject(String source,
> > > ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > > @@ -133,8 +137,7 @@
> > > > /**
> > > > * Set the delegates.
> > > > *
> > > > - * @param delegates
> > > > - * the Format[] delegates to
> set.
> > > > + * @param delegates the Format[]
> delegates to
> > > set.
> > > > */
> > > > public void setDelegates(Format[]
> delegates)
> > > {
> > > > Validate.noNullElements(delegates,
> > > > @@ -151,6 +154,11 @@
> > > > return delegates;
> > > > }
> > > >
> > > > + /**
> > > > + * Validate and return our delegates.
> > > > + *
> > > > + * @return delegate Formats, not null
> > > > + */
> > > > private Format[] getValidDelegates() {
> > > > Format[] result = getDelegates();
> > > > Validate.notEmpty(result, "No
> delegate
> > > Formats configured");
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -57,8 +57,8 @@
> > > > /**
> > > > * Add the specified format with the
> > > specified string key.
> > > > *
> > > > - * @param key
> > > > - * @param format
> > > > + * @param key String
> > > > + * @param format Format
> > > > * @return Builder reference to this
> > > object
> > > > */
> > > > public Builder put(String key, Format
> > > format) {
> > > > @@ -80,16 +80,15 @@
> > > >
> > > > /**
> > > > * Create a new NameKeyedMetaFormat.
> > > > + *
> > > > + * @param keyedFormats String->Format
> map.
> > > > */
> > > > public NameKeyedMetaFormat(Map
> keyedFormats)
> > > {
> > > > this.keyedFormats = keyedFormats;
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.MetaFormatSupport#format(java.lang.Object,
> > > > - * java.lang.StringBuffer,
> > > java.text.FieldPosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public StringBuffer format(Object obj,
> > > StringBuffer toAppendTo,
> > > > FieldPosition pos) {
> > > > @@ -117,11 +116,8 @@
> > > > throw new
> > > IllegalArgumentException("Cannot format " +
> obj);
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.MetaFormatSupport#parseObject(java.lang.String,
> > > > - * java.text.ParsePosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public Object parseObject(String source,
> > > ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -56,18 +56,15 @@
> > > > /**
> > > > * Create a new NumberMetaFormat.
> > > > *
> > > > - * @param locale
> > > > + * @param locale Locale
> > > > */
> > > > public NumberMetaFormat(Locale locale) {
> > > > super();
> > > > this.locale = locale;
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractMetaFormat#format(java.lang.Object,
> > > > - * java.lang.StringBuffer,
> > > java.text.FieldPosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public StringBuffer format(Object obj,
> > > StringBuffer toAppendTo,
> > > > FieldPosition pos) {
> > > > @@ -85,11 +82,8 @@
> > > > throw new IllegalArgumentException();
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > > java.text.Format#parseObject(java.lang.String,
> > > > - * java.text.ParsePosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public Object parseObject(String source,
> > > ParsePosition pos) {
> > > > int start = pos.getIndex();
> > > > @@ -115,6 +109,9 @@
> > > > return locale;
> > > > }
> > > >
> > > > + /**
> > > > + * Initialize this NumberMetaFormat.
> > > > + */
> > > > private synchronized void initialize() {
> > > > if (subformats == null) {
> > > > subformats = new HashMap();
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -41,30 +41,28 @@
> > > > /**
> > > > * Create a new NumberMetaFormat.
> > > > *
> > > > - * @param locale
> > > > + * @param locale Locale
> > > > */
> > > > public TimeMetaFormat(Locale locale) {
> > > > super(locale);
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> > > > - */
> > > > + /** {@inheritDoc} */
> > > > protected DateFormat
> > > createSubformatInstance(int style) {
> > > > return
> DateFormat.getTimeInstance(style,
> > > getLocale());
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractDateMetaFormat#createReverseStyleMap()
> > > > - */
> > > > + /** {@inheritDoc} */
> > > > protected Map createInverseStyleMap() {
> > > > Map invertMe = createStyleMap();
> > > > invertMe.remove(DEFAULT);
> > > > - invertMe.remove(FULL);
> > > > + DateFormat longDf =
> > > DateFormat.getTimeInstance(DateFormat.LONG,
> > > > + getLocale());
> > > > + DateFormat fullDf =
> > > DateFormat.getTimeInstance(DateFormat.FULL,
> > > > + getLocale());
> > > > + if (fullDf.equals(longDf)) {
> > > > + invertMe.remove(FULL);
> > > > + }
> > > > return invert(invertMe);
> > > > }
> > > > }
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -16,10 +16,18 @@
> > > > */
> > > > package org.apache.commons.lang.text;
> > > >
> > > > +import java.text.ChoiceFormat;
> > > > import java.text.DateFormat;
> > > > +import java.text.DecimalFormat;
> > > > +import java.text.DecimalFormatSymbols;
> > > > +import java.text.FieldPosition;
> > > > +import java.text.Format;
> > > > import java.text.MessageFormat;
> > > > +import java.text.NumberFormat;
> > > > +import java.text.SimpleDateFormat;
> > > > import java.util.Calendar;
> > > > import java.util.GregorianCalendar;
> > > > +import java.util.Locale;
> > > >
> > > > import junit.framework.TestCase;
> > > >
> > > > @@ -32,7 +40,7 @@
> > > > * @version $Id$
> > > > */
> > > > public abstract class
> AbstractMessageFormatTest
> > > extends TestCase {
> > > > - protected static final Object[] NUMBERS =
> {
> > > new Double(0.1),
> > > > + protected static final Double[] NUMBERS =
> {
> > > new Double(0.1),
> > > > new Double(1.1), new Double(2.1)
> };
> > > >
> > > > protected static final Object[] DATES = {
> > > > @@ -43,18 +51,30 @@
> > > > new GregorianCalendar(1970,
> > > Calendar.MARCH, 03, 18, 45, 50)
> > > > .getTime() };
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see junit.framework.TestCase#setUp()
> > > > + protected Locale locale;
> > > > +
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > protected void setUp() throws Exception {
> > > > super.setUp();
> > > > - // tests depend on Locale.US
> > > > -
> > >
> java.util.Locale.setDefault(java.util.Locale.US);
> > > > + this.locale = getLocale();
> > > > }
> > > >
> > > > - protected abstract MessageFormat
> > > createMessageFormat(String pattern);
> > > > + /**
> > > > + * Create a MessageFormat.
> > > > + * @param pattern
> > > > + * @param locale
> > > > + * @return
> > > > + */
> > > > + protected abstract MessageFormat
> > > createMessageFormat(String pattern,
> > > > + Locale locale);
> > > > +
> > > > + /**
> > > > + * Get the Locale to use.
> > > > + * @return
> > > > + */
> > > > + protected abstract Locale getLocale();
> > > >
> > > > protected void doAssertions(String
> expected,
> > > String pattern, Object[] args) {
> > > > doAssertions(expected, pattern, args,
> > > pattern);
> > > > @@ -62,235 +82,213 @@
> > > >
> > > > protected void doAssertions(String
> expected,
> > > String pattern, Object[] args,
> > > > String toPattern) {
> > > > - MessageFormat f =
> > > createMessageFormat(pattern);
> > > > + MessageFormat f =
> > > createMessageFormat(pattern, locale);
> > > > assertEquals(expected,
> f.format(args));
> > > > assertEquals(toPattern,
> f.toPattern());
> > > > }
> > > >
> > > > - public void testPlain() {
> > > > + protected void doAssertions(Format
> format,
> > > Object[] args) {
> > > > + doAssertions(format, args, null);
> > > > + }
> > > > +
> > > > + protected void doAssertions(Format
> format,
> > > Object[] args, String formatName) {
> > > > + doAssertions(format, args,
> formatName,
> > > null);
> > > > + }
> > > > +
> > > > + protected void doAssertions(Format
> format,
> > > Object[] args,
> > > > + String formatName, String
> > > decodeFormatName) {
> > > > + StringBuffer pattern = new
> > > StringBuffer();
> > > > + StringBuffer expected = new
> > > StringBuffer();
> > > > + StringBuffer decodePattern = new
> > > StringBuffer();
> > > > + for (int i = 0; i < args.length; i++)
> {
> > > > + pattern.append(i).append(":
> > > {").append(i);
> > > > + if (formatName != null) {
> > > > +
> > > pattern.append(',').append(formatName);
> > > > + }
> > > > + pattern.append("}; ");
> > > > + expected.append(i).append(": ");
> > > > + if (format != null) {
> > > > + format.format(args[i],
> expected,
> > > new FieldPosition(0));
> > > > + } else {
> > > > +
> > > expected.append(String.valueOf(args[i]));
> > > > + }
> > > > + expected.append("; ");
> > > > + decodePattern.append(i).append(":
> > > {").append(i);
> > > > + if (decodeFormatName != null ||
> > > formatName != null) {
> > > > +
> decodePattern.append(',').append(
> > > > + decodeFormatName ==
> null
> > > ? formatName
> > > > + :
> > > decodeFormatName);
> > > > + }
> > > > + decodePattern.append("}; ");
> > > > + }
> > > > + doAssertions(expected.toString(),
> > > pattern.toString(), args,
> > > > + decodePattern.toString());
> > > > + }
> > > > +
> > > > + public void testNoFormatElements() {
> > > > StringBuffer pattern = new
> > > StringBuffer();
> > > > for (int i = 0; i < NUMBERS.length;
> i++)
> > > {
> > > > if (i > 0) {
> > > > pattern.append("; ");
> > > > }
> > > > - pattern.append("Object
> > > ").append(i).append(": ").append(NUMBERS[i]);
> > > > + pattern.append(i).append(":
> > > ").append(NUMBERS[i]);
> > > > }
> > > > String p = pattern.toString();
> > > > - doAssertions(p, p, NUMBERS);
> > > > + doAssertions(p, p, null);
> > > > }
> > > >
> > > > - public void testSimple() {
> > > > - doAssertions("Object 0: 0.1; Object
> 1:
> > > 1.1; Object 2: 2.1",
> > > > - "Object 0: {0}; Object 1:
> {1};
> > > Object 2: {2}", NUMBERS);
> > > > + public void testSimpleStrings() {
> > > > + doAssertions(null, new Object[] {
> "foo",
> > > "bar", "baz"}, null);
> > > > + }
> > > > +
> > > > + public void testSimpleNumbers() {
> > > > +
> > > doAssertions(NumberFormat.getInstance(locale),
> > > NUMBERS, null);
> > > > + }
> > > > +
> > > > + public void testSimpleDates() {
> > > > +
> > >
> >
>
doAssertions(DateFormat.getDateTimeInstance(DateFormat.SHORT,
> > > > + DateFormat.SHORT, locale),
> DATES,
> > > null);
> > > > }
> > > >
> > > > public void testNumber() {
> > > > - doAssertions(
> > > > - "Number 0: 0.1; Number 1:
> 1.1;
> > > Number 2: 2.1",
> > > > - "Number 0: {0,number}; Number
> 1:
> > > {1,number}; Number 2: {2,number}",
> > > > - NUMBERS);
> > > > +
> > > doAssertions(NumberFormat.getInstance(locale),
> > > NUMBERS, "number");
> > > > }
> > > >
> > > > public void testNumberLooseFormatting() {
> > > > - doAssertions(
> > > > - "Number 0: 0.1; Number 1:
> 1.1;
> > > Number 2: 2.1",
> > > > - "Number 0: {0, number };
> Number
> > > 1: {1, number }; Number 2: {2, number }",
> > > > - NUMBERS,
> > > > - "Number 0: {0,number}; Number
> 1:
> > > {1,number}; Number 2: {2,number}");
> > > > +
> > > doAssertions(NumberFormat.getInstance(locale),
> > > NUMBERS, " number ",
> > > > + "number");
> > > > }
> > > >
> > > > public void testInteger() {
> > > > - doAssertions(
> > > > - "Number 0: 0; Number 1: 1;
> Number
> > > 2: 2",
> > > > - "Number 0:
> {0,number,integer};
> > > Number 1: {1,number,integer}; Number 2:
> > > {2,number,integer}",
> > > > - NUMBERS);
> > > > +
> > >
> >
>
doAssertions(NumberFormat.getIntegerInstance(locale),
> > > NUMBERS,
> > > > + "number,integer");
> > > > }
> > > >
> > > > public void testIntegerLooseFormatting()
> {
> > > > - doAssertions(
> > > > - "Number 0: 0; Number 1: 1;
> Number
> > > 2: 2",
> > > > - "Number 0: {0, number ,
> integer
> > > }; Number 1: {1, number , integer }; Number 2:
> {2,
> > > number , integer }",
> > > > - NUMBERS,
> > > > - "Number 0:
> {0,number,integer};
> > > Number 1: {1,number,integer}; Number 2:
> > > {2,number,integer}");
> > > > +
> > >
> >
>
doAssertions(NumberFormat.getIntegerInstance(locale),
> > > NUMBERS,
> > > > + " number , integer ",
> > > "number,integer");
> > > > }
> > > >
> > > > public void testCurrency() {
> > > > - doAssertions(
> > > > - "Number 0: $0.10; Number 1:
> > > $1.10; Number 2: $2.10",
> > > > - "Number 0:
> {0,number,currency};
> > > Number 1: {1,number,currency}; Number 2:
> > > {2,number,currency}",
> > > > - NUMBERS);
> > > > +
> > >
> >
>
doAssertions(NumberFormat.getCurrencyInstance(locale),
> > > NUMBERS,
> > > > + "number,currency");
> > > > }
> > > >
> > > > public void testPercent() {
> > > > - doAssertions(
> > > > - "Number 0: 10%; Number 1:
> 110%;
> > > Number 2: 210%",
> > > > - "Number 0:
> {0,number,percent};
> > > Number 1: {1,number,percent}; Number 2:
> > > {2,number,percent}",
> > > > - NUMBERS);
> > > > +
> > >
> >
>
doAssertions(NumberFormat.getPercentInstance(locale),
> > > NUMBERS,
> > > > + "number,percent");
> > > > }
> > > >
> > > > public void testNumberPattern() {
> > > > - doAssertions(
> > > > - "Number 0: 000.100; Number 1:
> > > 001.100; Number 2: 002.100",
> > > > - "Number 0:
> {0,number,#000.000};
> > > Number 1: {1,number,#000.000}; Number 2:
> > > {2,number,#000.000}",
> > > > - NUMBERS);
> > > > + doAssertions(new
> > > DecimalFormat("#000.000", new
> DecimalFormatSymbols(
> > > > + locale)), NUMBERS,
> > > "number,#000.000");
> > > > }
> > > >
> > > > public void testDate() {
> > > > - doAssertions(
> > > > - "Date 0: Jan 1, 1970; Date 1:
> Feb
> > > 2, 1970; Date 2: Mar 3, 1970",
> > > > - "Date 0: {0,date}; Date 1:
> > > {1,date}; Date 2: {2,date}", DATES);
> > > > +
> > >
> >
>
doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > locale),
> > > > + DATES, "date");
> > > > }
> > > >
> > > > public void testDateLooseFormatting() {
> > > > - doAssertions(
> > > > - "Date 0: Jan 1, 1970; Date 1:
> Feb
> > > 2, 1970; Date 2: Mar 3, 1970",
> > > > - "Date 0: {0, date }; Date 1:
> {1,
> > > date }; Date 2: {2, date }",
> > > > - DATES, "Date 0: {0,date};
> Date 1:
> > > {1,date}; Date 2: {2,date}");
> > > > +
> > >
> >
>
doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > locale),
> > > > + DATES, " date ", "date");
> > > > }
> > > >
> > > > public void testShortDate() {
> > > > - doAssertions(
> > > > - "Date 0: 1/1/70; Date 1:
> 2/2/70;
> > > Date 2: 3/3/70",
> > > > - "Date 0: {0,date,short}; Date
> 1:
> > > {1,date,short}; Date 2: {2,date,short}",
> > > > - DATES);
> > > > + DateFormat shortDf =
> > > DateFormat.getDateInstance(DateFormat.SHORT,
> > > locale);
> > > > + DateFormat defaultDf =
> > > DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > locale);
> > > > + doAssertions(shortDf, DATES,
> > > "date,short",
> > > > + shortDf.equals(defaultDf) ?
> > > "date" : "date,short");
> > > > }
> > > >
> > > > public void
> testShortDateLooseFormatting() {
> > > > - doAssertions(
> > > > - "Date 0: 1/1/70; Date 1:
> 2/2/70;
> > > Date 2: 3/3/70",
> > > > - "Date 0: {0, date , short };
> Date
> > > 1: {1, date , short }; Date 2: {2, date ,
> short
> > > }",
> > > > - DATES,
> > > > - "Date 0: {0,date,short}; Date
> 1:
> > > {1,date,short}; Date 2: {2,date,short}");
> > > > + DateFormat shortDf =
> > > DateFormat.getDateInstance(DateFormat.SHORT,
> > > locale);
> > > > + DateFormat defaultDf =
> > > DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > locale);
> > > > + doAssertions(shortDf, DATES, " date ,
> > > short ",
> > > > + shortDf.equals(defaultDf) ?
> > > "date" : "date,short");
> > > > }
> > > >
> > > > public void testMediumDate() {
> > > > - doAssertions(
> > > > - "Date 0: Jan 1, 1970; Date 1:
> Feb
> > > 2, 1970; Date 2: Mar 3, 1970",
> > > > - "Date 0: {0,date,medium};
> Date 1:
> > > {1,date,medium}; Date 2: {2,date,medium}",
> > > > - DATES, "Date 0: {0,date};
> Date 1:
> > > {1,date}; Date 2: {2,date}");
> > > > +
> > >
> >
>
doAssertions(DateFormat.getDateInstance(DateFormat.MEDIUM,
> > > locale),
> > > > + DATES, "date,medium",
> "date");
> > > > }
> > > >
> > > > public void testLongDate() {
> > > > - doAssertions(
> > > > - "Date 0: January 1, 1970;
> Date 1:
> > > February 2, 1970; Date 2: March 3, 1970",
> > > > - "Date 0: {0,date,long}; Date
> 1:
> > > {1,date,long}; Date 2: {2,date,long}",
> > > > - DATES);
> > > > + DateFormat longDf =
> > > DateFormat.getDateInstance(DateFormat.LONG,
> locale);
> > > > + DateFormat defaultDf =
> > > DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > > + locale);
> > > > + doAssertions(longDf, DATES,
> "date,long",
> > > > + longDf.equals(defaultDf) ?
> "date"
> > > : "date,long");
> > > > }
> > > >
> > > > public void testFullDate() {
> > > > - doAssertions(
> > > > - "Date 0: Thursday, January 1,
> > > 1970; Date 1: Monday, February 2, 1970; Date 2:
> > > Tuesday, March 3, 1970",
> > > > - "Date 0: {0,date,full}; Date
> 1:
> > > {1,date,full}; Date 2: {2,date,full}",
> > > > - DATES);
> > > > + DateFormat fullDf =
> > > DateFormat.getDateInstance(DateFormat.FULL,
> locale);
> > > > + DateFormat longDf =
> > > DateFormat.getDateInstance(DateFormat.LONG,
> locale);
> > > > + doAssertions(fullDf, DATES,
> "date,full",
> > > > + fullDf.equals(longDf) ?
> > > "date,long" : "date,full");
> > > > }
> > > >
> > > > public void testDatePattern() {
> > > > - doAssertions(
> > > > - "Date 0: AD1970.1; Date 1:
> > > AD1970.33; Date 2: AD1970.62",
> > > > - "Date 0: {0,date,Gyyyy.D};
> Date
> > > 1: {1,date,Gyyyy.D}; Date 2: {2,date,Gyyyy.D}",
> > > > - DATES);
> > > > + doAssertions(new
> > > SimpleDateFormat("Gyyyy.D", locale), DATES,
> > > > + "date,Gyyyy.D");
> > > > }
> > > >
> > > > public void testTime() {
> > > > - doAssertions(
> > > > - "Time 0: 12:15:20 AM; Time 1:
> > > 12:30:35 PM; Time 2: 6:45:50 PM",
> > > > - "Time 0: {0,time}; Time 1:
> > > {1,time}; Time 2: {2,time}", DATES);
> > > > +
> > >
> >
>
doAssertions(DateFormat.getTimeInstance(DateFormat.DEFAULT,
> > > locale),
> > > > + DATES, "time");
> > > > }
> > > >
> > > > public void testShortTime() {
> > > > - doAssertions(
> > > > - "Time 0: 12:15 AM; Time 1:
> 12:30
> > > PM; Time 2: 6:45 PM",
> > > > - "Time 0: {0,time,short}; Time
> 1:
> > > {1,time,short}; Time 2: {2,time,short}",
> > > > - DATES);
> > > > +
> > >
> >
>
doAssertions(DateFormat.getTimeInstance(DateFormat.SHORT,
> > > locale),
> > > > + DATES, "time,short");
> > > > }
> > > >
> > > > public void testMediumTime() {
> > > > - doAssertions(
> > > > - "Time 0: 12:15:20 AM; Time 1:
> > > 12:30:35 PM; Time 2: 6:45:50 PM",
> > > > - "Time 0: {0,time,medium};
> Time 1:
> > > {1,time,medium}; Time 2: {2,time,medium}",
> > > > - DATES, "Time 0: {0,time};
> Time 1:
> > > {1,time}; Time 2: {2,time}");
> > > > +
> > >
> >
>
doAssertions(DateFormat.getTimeInstance(DateFormat.MEDIUM,
> > > locale),
> > > > + DATES, "time,medium",
> "time");
> > > > }
> > > >
> > > > public void testLongTime() {
> > > > - DateFormat df =
> > > DateFormat.getTimeInstance(DateFormat.LONG);
> > > > - StringBuffer expected = new
> > > StringBuffer();
> > > > - for (int i = 0; i < DATES.length;
> i++) {
> > > > - if (i > 0) {
> > > > - expected.append("; ");
> > > > - }
> > > > - expected.append("Time
> > > ").append(i).append(": ").append(
> > > > - df.format(DATES[i]));
> > > > - }
> > > > - doAssertions(
> > > > - expected.toString(),
> > > > - "Time 0: {0,time,long}; Time
> 1:
> > > {1,time,long}; Time 2: {2,time,long}",
> > > > - DATES);
> > > > +
> > >
> >
>
doAssertions(DateFormat.getTimeInstance(DateFormat.LONG,
> > > locale),
> > > > + DATES, "time,long");
> > > > }
> > > >
> > > > public void testFullTime() {
> > > > - DateFormat df =
> > > DateFormat.getTimeInstance(DateFormat.FULL);
> > > > - StringBuffer expected = new
> > > StringBuffer();
> > > > - for (int i = 0; i < DATES.length;
> i++) {
> > > > - if (i > 0) {
> > > > - expected.append("; ");
> > > > - }
> > > > - expected.append("Time
> > > ").append(i).append(": ").append(
> > > > - df.format(DATES[i]));
> > > > - }
> > > > - doAssertions(
> > > > - expected.toString(),
> > > > - "Time 0: {0,time,full}; Time
> 1:
> > > {1,time,full}; Time 2: {2,time,full}",
> > > > - DATES,
> > > > - "Time 0: {0,time,long}; Time
> 1:
> > > {1,time,long}; Time 2: {2,time,long}");
> > > > + DateFormat fullDf =
> > > DateFormat.getTimeInstance(DateFormat.FULL,
> locale);
> > > > + DateFormat longDf =
> > > DateFormat.getTimeInstance(DateFormat.LONG,
> locale);
> > > > + doAssertions(fullDf, DATES,
> "time,full",
> > > > + fullDf.equals(longDf) ?
> > > "time,long" : "time,full");
> > > > }
> > > >
> > > > public void testTimePattern() {
> > > > - doAssertions(
> > > > - "Time 0: AM01520; Time 1:
> > > PM123035; Time 2: PM184550",
> > > > - "Time 0: {0,time,aHms}; Time
> 1:
> > > {1,time,aHms}; Time 2: {2,time,aHms}",
> > > > - DATES,
> > > > - "Time 0: {0,date,aHms}; Time
> 1:
> > > {1,date,aHms}; Time 2: {2,date,aHms}");
> > > > + doAssertions(new
> SimpleDateFormat("aHms",
> > > locale), DATES, "date,aHms");
> > > > }
> > > >
> > > > public void testChoice() {
> > > > - String choice = "0.0#x|1.0#y|2.0#z";
> > > > - StringBuffer pattern = new
> > > StringBuffer();
> > > > - for (int i = 0; i < 3; i++) {
> > > > - if (i > 0) {
> > > > - pattern.append("; ");
> > > > - }
> > > > - pattern.append("Choice
> > > ").append(i).append(": {").append(i).append(
> > > > -
> > > ",choice,").append(choice).append("}");
> > > > - }
> > > > - doAssertions("Choice 0: x; Choice 1:
> y;
> > > Choice 2: z", pattern
> > > > - .toString(), NUMBERS);
> > > > + doAssertions(new
> > > ChoiceFormat("0.0#x|1.0#y|2.0#z"), NUMBERS,
> > > > + "choice,0.0#x|1.0#y|2.0#z");
> > > > }
> > > >
> > > > public void testChoiceLooseFormatting() {
> > > > - String choice = "0.0#x |1.0#y |2.0#z
> ";
> > > > - StringBuffer pattern = new
> > > StringBuffer();
> > > > - for (int i = 0; i < 3; i++) {
> > > > - if (i > 0) {
> > > > - pattern.append("; ");
> > > > - }
> > > > - pattern.append("Choice
> > > ").append(i).append(": {").append(i).append(
> > > > -
> > > ",choice,").append(choice).append("}");
> > > > - }
> > > > - doAssertions("Choice 0: x ; Choice 1:
> y ;
> > > Choice 2: z ", pattern
> > > > - .toString(), NUMBERS);
> > > > + doAssertions(new ChoiceFormat("0.0#x
> > > |1.0#y |2.0#z "), NUMBERS,
> > > > + "choice,0.0#x |1.0#y |2.0#z
> ");
> > > > }
> > > >
> > > > public void testChoiceRecursive() {
> > > > - String choice =
> > > "0.0#{0}|1.0#{1}|2.0#{2}";
> > > > - StringBuffer pattern = new
> > > StringBuffer();
> > > > - for (int i = 0; i < 3; i++) {
> > > > + NumberFormat nf =
> > > NumberFormat.getInstance(locale);
> > > > + StringBuffer choice = new
> StringBuffer();
> > > > + StringBuffer format = new
> > > StringBuffer("choice,");
> > > > + for (int i = 0; i < NUMBERS.length;
> i++)
> > > {
> > > > + Double d = new
> > > Double(Math.floor(NUMBERS[i].doubleValue()));
> > > > if (i > 0) {
> > > > - pattern.append("; ");
> > > > + choice.append('|');
> > > > + format.append('|');
> > > > }
> > > > - pattern.append("Choice
> > > ").append(i).append(": {").append(i).append(
> > > > -
> > > ",choice,").append(choice).append("}");
> > > > +
> choice.append(d).append('#').append(
> > > > +
> > > nf.format(NUMBERS[i].doubleValue()));
> > > > +
> > >
> >
>
format.append(d).append('#').append('{').append(i).append('}');
> > > > }
> > > > - doAssertions("Choice 0: 0.1; Choice
> 1:
> > > 1.1; Choice 2: 2.1", pattern
> > > > - .toString(), NUMBERS);
> > > > + doAssertions(new
> > > ChoiceFormat(choice.toString()), NUMBERS, format
> > > > + .toString());
> > > > }
> > > > }
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -20,21 +20,161 @@
> > > > import java.util.Locale;
> > > >
> > > > /**
> > > > - * Baseline tests for {@link
> > > ExtendedMessageFormat}
> > > > + * Baseline tests for ExtendedMessageFormat
> > > > *
> > > > * @author Matt Benson
> > > > * @since 2.4
> > > > * @version $Id$
> > > > */
> > > > -public class
> ExtendedMessageFormatBaselineTest
> > > extends AbstractMessageFormatTest {
> > > > +public abstract class
> > > ExtendedMessageFormatBaselineTest extends
> > > > + AbstractMessageFormatTest {
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > + /**
> > > > + * Tests for <code>Locale.US</code>
> > > > *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > > > + * @author mbenson
> > > > */
> > > > - protected MessageFormat
> > > createMessageFormat(String pattern) {
> > > > - return new
> ExtendedMessageFormat(pattern,
> > >
> >
>
ExtendedMessageFormat.createDefaultMetaFormat(Locale.US));
> > > > + public static class US extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.US;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.UK</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class UK extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.UK;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.GERMANY</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class DE extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.GERMANY;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.ITALY</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class IT extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.ITALY;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.JAPAN</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class JP extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.JAPAN;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.CHINA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class CN extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.CHINA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.CANADA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class CA extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.CANADA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.FRANCE</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class FR extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.FRANCE;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.KOREA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class KR extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.KOREA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.TAIWAN</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class TW extends
> > > ExtendedMessageFormatBaselineTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.TAIWAN;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected MessageFormat
> > > createMessageFormat(String pattern, Locale
> locale) {
> > > > + return new
> ExtendedMessageFormat(pattern,
> > > locale, ExtendedMessageFormat
> > > > +
> > > .createDefaultMetaFormat(locale));
> > > > }
> > > >
> > > > }
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -16,11 +16,13 @@
> > > > */
> > > > package org.apache.commons.lang.text;
> > > >
> > > > +import java.text.DateFormat;
> > > > import java.text.FieldPosition;
> > > > import java.text.Format;
> > > > import java.text.MessageFormat;
> > > > import java.text.ParsePosition;
> > > > import java.util.Calendar;
> > > > +import java.util.Date;
> > > > import java.util.GregorianCalendar;
> > > > import java.util.Locale;
> > > >
> > > > @@ -31,22 +33,162 @@
> > > > * @since 2.4
> > > > * @version $Id$
> > > > */
> > > > -public class MessageFormatExtensionTest
> extends
> > > AbstractMessageFormatTest {
> > > > +public abstract class
> MessageFormatExtensionTest
> > > extends
> > > > + AbstractMessageFormatTest {
> > > > + /**
> > > > + * Tests for <code>Locale.US</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class US extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.US;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.UK</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class UK extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.UK;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.GERMANY</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class DE extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.GERMANY;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.ITALY</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class IT extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.ITALY;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.JAPAN</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class JP extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.JAPAN;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.CHINA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class CN extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.CHINA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.CANADA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class CA extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.CANADA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.FRANCE</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class FR extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.FRANCE;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.KOREA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class KR extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.KOREA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.TAIWAN</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class TW extends
> > > MessageFormatExtensionTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.TAIWAN;
> > > > + }
> > > > + }
> > > >
> > > > static class
> ProperNameCapitalizationFormat
> > > extends Format {
> > > > private static final long
> > > serialVersionUID = -6081911520622186866L;
> > > > private static final StrMatcher MATCH
> =
> > > StrMatcher
> > > > .charSetMatcher(" ,.");
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > > java.text.Format#format(java.lang.Object,
> > > > - * java.lang.StringBuffer,
> > > java.text.FieldPosition)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > public StringBuffer format(Object
> obj,
> > > StringBuffer toAppendTo,
> > > > FieldPosition fpos) {
> > > > - char[] buffer =
> > > String.valueOf(obj).toCharArray();
> > > > + if (!(obj instanceof String)) {
> > > > + throw new
> > > IllegalArgumentException();
> > > > + }
> > > > + char[] buffer = ((String)
> > > obj).toCharArray();
> > > > ParsePosition pos = new
> > > ParsePosition(0);
> > > > while (pos.getIndex() <
> > > buffer.length) {
> > > > char c =
> buffer[pos.getIndex()];
> > > > @@ -91,17 +233,17 @@
> > > > }
> > > > }
> > > >
> > > > - /*
> > > > - * (non-Javadoc)
> > > > - *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > > > + /**
> > > > + * {@inheritDoc}
> > > > */
> > > > - protected MessageFormat
> > > createMessageFormat(String pattern) {
> > > > - return new
> ExtendedMessageFormat(pattern,
> > > new MultiFormat.Builder()
> > > > -
> > >
> >
>
.add(ExtendedMessageFormat.createDefaultMetaFormat(Locale.US)).add(
> > > > + protected MessageFormat
> > > createMessageFormat(String pattern, Locale
> locale) {
> > > > + return new
> ExtendedMessageFormat(pattern,
> > > locale,
> > > > + new
> MultiFormat.Builder().add(
> > > > new
> > > NameKeyedMetaFormat.Builder().put("properName",
> > > > new
> > > ProperNameCapitalizationFormat())
> > > > -
> > > .toNameKeyedMetaFormat()).toMultiFormat());
> > > > +
> > > .toNameKeyedMetaFormat()).add(
> > > > +
> > >
> >
>
ExtendedMessageFormat.createDefaultMetaFormat(locale))
> > > > + .toMultiFormat());
> > > > }
> > > >
> > > > public void testProperName() {
> > > > @@ -111,10 +253,23 @@
> > > > }
> > > >
> > > > public void testMixed() {
> > > > - doAssertions("John Q. Public was born
> on
> > > Thursday, January 1, 1970.",
> > > > - "{0,properName} was born on
> > > {1,date,full}.", new Object[] {
> > > > + StringBuffer expected = new
> > > StringBuffer("John Q. Public was born on ");
> > > > + Date dob = new
> GregorianCalendar(1970,
> > > Calendar.JANUARY, 01, 0, 15, 20)
> > > > + .getTime();
> > > > + DateFormat longDf =
> > > DateFormat.getDateInstance(DateFormat.LONG,
> locale);
> > > > + longDf.format(dob, expected, new
> > > FieldPosition(0));
> > > > + expected.append('.');
> > > > + String pattern = "{0,properName} was
> born
> > > on {1,date,long}.";
> > > > + StringBuffer toPattern = new
> > > StringBuffer(pattern);
> > > > + if
> > >
> >
>
(longDf.equals(DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > locale))) {
> > > > + int idx =
> pattern.indexOf(",long");
> > > > + toPattern.delete(idx, idx +
> > > ",long".length());
> > > > + }
> > > > + doAssertions(expected.toString(),
> > > > + pattern, new Object[] {
> > > > "john q. public",
> > > > new
> > > GregorianCalendar(1970, Calendar.JANUARY, 01, 0,
> > > > - 15,
> 20).getTime()
> > > });
> > > > + 15,
> 20).getTime()
> > > }, toPattern.toString());
> > > > }
> > > > +
> > > > }
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -10,13 +10,152 @@
> > > > * @since 2.4
> > > > * @version $Id$
> > > > */
> > > > -public class MessageFormatTest extends
> > > AbstractMessageFormatTest {
> > > > - /*
> > > > - * (non-Javadoc)
> > > > +public abstract class MessageFormatTest
> extends
> > > AbstractMessageFormatTest {
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.US</code>
> > > > *
> > > > - * @see
> > >
> >
>
org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > > > + * @author mbenson
> > > > */
> > > > - protected MessageFormat
> > > createMessageFormat(String pattern) {
> > > > - return new MessageFormat(pattern,
> > > Locale.US);
> > > > + public static class US extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.US;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.UK</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class UK extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.UK;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.GERMANY</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class DE extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.GERMANY;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.ITALY</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class IT extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.ITALY;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.JAPAN</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class JP extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.JAPAN;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.CHINA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class CN extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.CHINA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.CANADA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class CA extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.CANADA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.FRANCE</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class FR extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.FRANCE;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.KOREA</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class KR extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.KOREA;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * Tests for <code>Locale.TAIWAN</code>
> > > > + *
> > > > + * @author mbenson
> > > > + */
> > > > + public static class TW extends
> > > MessageFormatTest {
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected Locale getLocale() {
> > > > + return Locale.TAIWAN;
> > > > + }
> > > > + }
> > > > +
> > > > + /**
> > > > + * {@inheritDoc}
> > > > + */
> > > > + protected MessageFormat
> > > createMessageFormat(String pattern, Locale
> locale) {
> > > > + return new MessageFormat(pattern,
> > > locale);
> > > > }
> > > > }
> > > >
> > > > Modified:
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > > > URL:
> > >
> >
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java?rev=598707&r1=598706&r2=598707&view=diff
> > > >
> > >
> >
>
==============================================================================
> > > > ---
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > > (original)
> > > > +++
> > >
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > > Tue Nov 27 09:27:35 2007
> > > > @@ -57,9 +57,36 @@
> > > >
> > > suite.addTest(StrSubstitutorTest.suite());
> > > >
> suite.addTest(StrTokenizerTest.suite());
> > > >
> > > suite.addTestSuite(MultiFormatTest.class);
> > > > -
> > > suite.addTestSuite(MessageFormatTest.class);
> > > > -
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.class);
> > > > -
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.US.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.UK.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.DE.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.IT.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.JP.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.CA.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.CN.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.FR.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.KR.class);
> > > > +
> > > suite.addTestSuite(MessageFormatTest.TW.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.US.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.UK.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.DE.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.IT.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.JP.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.CA.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.CN.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.FR.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.KR.class);
> > > > +
> > >
> >
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.TW.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.US.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.UK.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.DE.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.IT.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.JP.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.CA.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.CN.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.FR.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.KR.class);
> > > > +
> > >
> >
>
suite.addTestSuite(MessageFormatExtensionTest.TW.class);
> > > > return suite;
> > > > }
> > > >
>
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> dev-unsubscribe@commons.apache.org
> For additional commands, e-mail:
> dev-help@commons.apache.org
>
>
____________________________________________________________________________________
Get easy, one-click access to your favorites.
Make Yahoo! your homepage.
http://www.yahoo.com/r/hs
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org
Re: svn commit: r598707 - in /commons/proper/lang/trunk/src: java/org/apache/commons/lang/text/ test/org/apache/commons/lang/text/
Posted by Niall Pemberton <ni...@gmail.com>.
On Nov 29, 2007 3:17 PM, Matt Benson <gu...@yahoo.com> wrote:
> I understand your concerns, Niall, and agree with you
> in principle. My laxity here was due to the fact
> that this entire suite of classes is new to [lang] and
> I treated the change more like an extension of the
> initial add. If you like I can revert the changes and
> re-add more atomically.
No need to revert IMO - you're right its not as big an issue for brand
new stuff and I understand the temptation when its something only
you've worked on. But the easier we make it for others to follow along
the more likely for others to comment/contribute.
Niall
P.S. I keep meaning to take a look at multiformat sometime - I'm sure
its useful stuff
> -Matt
>
>
> --- Niall Pemberton <ni...@gmail.com> wrote:
>
> > My preference is that commits are as atomic as
> > possible. These kind of
> > all-in-one uber commits make it difficult to follow
> > along with whats
> > actually changing. IMO its especially a good idea to
> > separate out the
> > *noise" of javadoc/checkstyle changes from real code
> > changes and in
> > this case perhaps 3 commits would have been
> > appropriate? Perhaps this
> > sounds picky, but I believe it helps rather than
> > hinders collaboration
> > to work that way.
> >
> > Niall
> >
> > On Nov 27, 2007 5:27 PM, <mb...@apache.org>
> > wrote:
> > > Author: mbenson
> > > Date: Tue Nov 27 09:27:35 2007
> > > New Revision: 598707
> > >
> > > URL:
> > http://svn.apache.org/viewvc?rev=598707&view=rev
> > > Log:
> > > [LANG-362] checkstyle; javadoc; extended testing
> > which necessitated some refactorings
> > >
> > > Modified:
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > >
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > >
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > >
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > >
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > >
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > >
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -43,11 +43,8 @@
> > > super();
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> > java.text.Format#format(java.lang.Object,
> > java.lang.StringBuffer,
> > > - * java.text.FieldPosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo,
> > > FieldPosition pos) {
> > > @@ -57,11 +54,8 @@
> > > throw new
> > IllegalArgumentException(String.valueOf(obj));
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> > java.text.Format#parseObject(java.lang.String,
> > > - * java.text.ParsePosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public Object parseObject(String source,
> > ParsePosition pos) {
> > > int start = pos.getIndex();
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -56,8 +56,15 @@
> > > }
> > >
> > > /**
> > > - * Uses the formatter Format instance.
> > > - *
> > > + * Uses the formatter Format instance.
> > > + *
> > > + * @param obj
> > > + * the object to format
> > > + * @param toAppendTo
> > > + * the {@link StringBuffer} to
> > append to
> > > + * @param pos
> > > + * the FieldPosition to use (or
> > ignore).
> > > + * @return <code>toAppendTo</code>
> > > * @see Format#format(Object, StringBuffer,
> > FieldPosition)
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo, FieldPosition pos) {
> > > @@ -65,8 +72,15 @@
> > > }
> > >
> > > /**
> > > - * Uses the parser Format instance.
> > > - *
> > > + * Uses the parser Format instance.
> > > + *
> > > + * @param source
> > > + * the String source
> > > + * @param pos
> > > + * the ParsePosition containing
> > the position to parse from, will
> > > + * be updated according to parsing
> > success (index) or failure
> > > + * (error index)
> > > + * @return the parsed Object
> > > * @see Format#parseObject(String,
> > ParsePosition)
> > > */
> > > public Object parseObject(String source,
> > ParsePosition pos) {
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -40,17 +40,13 @@
> > > /**
> > > * Create a new DateMetaFormat.
> > > *
> > > - * @param locale
> > > + * @param locale the Locale to use
> > > */
> > > public DateMetaFormat(Locale locale) {
> > > super(locale);
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> > > - */
> > > + /** {@inheritDoc} */
> > > protected DateFormat
> > createSubformatInstance(int style) {
> > > return DateFormat.getDateInstance(style,
> > getLocale());
> > > }
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -29,6 +29,7 @@
> > >
> > > /**
> > > * date/time metaFormat support.
> > > + *
> > > * @see ExtendedMessageFormat
> > > * @author Matt Benson
> > > * @since 2.4
> > > @@ -70,18 +71,15 @@
> > > /**
> > > * Create a new AbstractDateMetaFormat.
> > > *
> > > - * @param locale
> > > + * @param locale Locale
> > > */
> > > public DateMetaFormatSupport(Locale locale) {
> > > super();
> > > this.locale = locale;
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> > java.text.Format#format(java.lang.Object,
> > java.lang.StringBuffer,
> > > - * java.text.FieldPosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo,
> > > FieldPosition pos) {
> > > @@ -98,6 +96,12 @@
> > > throw new
> > IllegalArgumentException(String.valueOf(obj));
> > > }
> > >
> > > + /**
> > > + * Get the subformat name for the given
> > object.
> > > + *
> > > + * @param subformat Object
> > > + * @return subformat name.
> > > + */
> > > private String getSubformatName(Object
> > subformat) {
> > > initialize();
> > > if
> > (reverseSubformats.containsKey(subformat)) {
> > > @@ -107,11 +111,8 @@
> > > return null;
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> > java.text.Format#parseObject(java.lang.String,
> > > - * java.text.ParsePosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public Object parseObject(String source,
> > ParsePosition pos) {
> > > int start = pos.getIndex();
> > > @@ -131,6 +132,12 @@
> > > return null;
> > > }
> > >
> > > + /**
> > > + * Get the named subformat.
> > > + *
> > > + * @param subformat name
> > > + * @return Format designated by
> > <code>name</code>, if any
> > > + */
> > > private Format getSubformat(String subformat)
> > {
> > > initialize();
> > > if (!styleMap.containsKey(subformat)) {
> > > @@ -141,7 +148,7 @@
> > > }
> > >
> > > /**
> > > - * Get the locale in use by this {@link
> > DateMetaFormatSupport}.
> > > + * Get the locale in use by this
> > DateMetaFormatSupport.
> > > *
> > > * @return Locale
> > > */
> > > @@ -149,6 +156,9 @@
> > > return locale;
> > > }
> > >
> > > + /**
> > > + * Initialize this DateMetaFormatSupport.
> > > + */
> > > private synchronized void initialize() {
> > > if (!initialized) {
> > > styleMap = createStyleMap();
> > > @@ -175,7 +185,7 @@
> > > * Create a subformat for the given
> > <code>DateFormat</code> style
> > > * constant.
> > > *
> > > - * @param style
> > > + * @param style DateFormat style constant
> > > * @return a DateFormat instance.
> > > */
> > > protected abstract DateFormat
> > createSubformatInstance(int style);
> > > @@ -194,8 +204,7 @@
> > > * Set whether this metaformat can parse
> > date/time pattern formats in
> > > * addition to named formats.
> > > *
> > > - * @param handlePatterns
> > > - * the boolean handlePatterns to
> > set.
> > > + * @param handlePatterns the boolean
> > handlePatterns to set.
> > > * @return <code>this</code> for fluent
> > usage.
> > > */
> > > public DateMetaFormatSupport
> > setHandlePatterns(boolean handlePatterns) {
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -34,7 +34,8 @@
> > > *
> > > * @author Matt Benson
> > > * @since 2.4
> > > - * @version $Id$
> > > + * @version $Id: DefaultMetaFormatFactory.java
> > 592077 2007-11-05 16:47:10Z
> > > + * mbenson $
> > > */
> > > class DefaultMetaFormatFactory {
> > >
> > > @@ -59,16 +60,32 @@
> > > private static final String[] PATTERN_KEYS =
> > new String[] { DATE_KEY,
> > > TIME_KEY };
> > >
> > > + /**
> > > + * Ordered NameKeyedMetaFormat
> > > + */
> > > private static class
> > OrderedNameKeyedMetaFormat extends
> > NameKeyedMetaFormat {
> > > private static final long
> > serialVersionUID = -7688772075239431055L;
> > >
> > > private List keys;
> > >
> > > + /**
> > > + * Construct a new
> > OrderedNameKeyedMetaFormat.
> > > + *
> > > + * @param names String[]
> > > + * @param formats Format[]
> > > + */
> > > private
> > OrderedNameKeyedMetaFormat(String[] names, Format[]
> > formats) {
> > > super(createMap(names, formats));
> > > this.keys = Arrays.asList(names);
> > > }
> > >
> > > + /**
> > > + * Create a map from the specified
> > key/value parameters.
> > > + *
> > > + * @param names keys
> > > + * @param formats values
> > > + * @return Map
> > > + */
> > > private static Map createMap(String[]
> > names, Format[] formats) {
> > >
> > Validate.isTrue(ArrayUtils.isSameLength(names,
> > formats));
> > > HashMap result = new
> > HashMap(names.length);
> > > @@ -78,6 +95,9 @@
> > > return result;
> > > }
> > >
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > protected Iterator iterateKeys() {
> > > return keys.iterator();
> > > }
> > > @@ -86,8 +106,7 @@
> > > /**
> > > * Get a default metaformat for the specified
> > Locale.
> > > *
> > > - * @param locale
> > > - * the Locale for the resulting
> > Format instance.
> > > + * @param locale the Locale for the resulting
> > Format instance.
> > > * @return Format
> > > */
> > > public static Format getFormat(final Locale
> > locale) {
> > > @@ -106,6 +125,12 @@
> > > new
> > TimeMetaFormat(locale) }) });
> > > }
> > >
> > > + /**
> > > + * Get the default format supported by a
> > given metaformat.
> > > + *
> > > + * @param metaformat Format to handle
> > parsing.
> > > + * @return the default format, if any.
> > > + */
> > > private static Format getDefaultFormat(Format
> > metaformat) {
> > > ParsePosition pos = new ParsePosition(0);
> > > Object o = metaformat.parseObject("",
> > pos);
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -22,13 +22,16 @@
> > > import java.util.ArrayList;
> > > import java.util.Locale;
> > >
> > > +import org.apache.commons.lang.StringUtils;
> > > import org.apache.commons.lang.Validate;
> > >
> > > /**
> > > * Extends <code>MessageFormat</code> to allow
> > pluggable/additional formatting
> > > * options for embedded format elements; requires
> > a "meta-format", i.e. a
> > > * <code>Format</code> capable of parsing and
> > formatting other
> > > - * <code>Format</code>s.
> > > + * <code>Format</code>s. One shortcoming is that
> > recursive choice formats do
> > > + * not inherit knowledge of the extended
> > formatters and are limited to those
> > > + * available with
> > <code>java.text.MessageFormat</code> (patches
> > welcome).
> > > *
> > > * @author Matt Benson
> > > * @since 2.4
> > > @@ -53,14 +56,16 @@
> > > * behavior identical to a
> > <code>java.lang.MessageFormat</code> using
> > > * <code>locale</code>.
> > > *
> > > - * @param locale
> > > - * the Locale for the resulting
> > Format instance.
> > > + * @param locale the Locale for the resulting
> > Format instance.
> > > * @return Format
> > > */
> > > public static Format
> > createDefaultMetaFormat(Locale locale) {
> > > return
> > DefaultMetaFormatFactory.getFormat(locale);
> > > }
> > >
> > > + /**
> > > + * Conceptual demarcation of methods to parse
> > the pattern.
> > > + */
> > > private static class Parser {
> > > private static final String ESCAPED_QUOTE
> > = "''";
> > > private static final char START_FMT =
> > ',';
> > > @@ -68,6 +73,12 @@
> > > private static final char START_FE = '{';
> > > private static final char QUOTE = '\'';
> > >
> > > + /**
> > > + * Strip all formats from the pattern.
> > > + *
> > > + * @param pattern String to strip
> > > + * @return stripped pattern
> > > + */
> > > private String stripFormats(String
> > pattern) {
> > > StringBuffer sb = new
> > StringBuffer(pattern.length());
> > > ParsePosition pos = new
> > ParsePosition(0);
> > > @@ -98,6 +109,14 @@
> > > return sb.toString();
> > > }
> > >
> > > + /**
> > > + * Insert formats back into the pattern
> > for toPattern() support.
> > > + *
> > > + * @param pattern source
> > > + * @param formats the Formats to insert
> > > + * @param metaFormat Format to format the
> > Formats
> > > + * @return full pattern
> > > + */
> > > private String insertFormats(String
> > pattern, Format[] formats,
> > > Format metaFormat) {
> > > if (formats == null || formats.length
> > == 0) {
> > > @@ -117,8 +136,10 @@
> > > sb.append(START_FE).append(
> > >
> > readArgumentIndex(pattern, next(pos)));
> > > if (formats[fe] != null) {
> > > -
> > sb.append(START_FMT).append(
> > > -
> > metaFormat.format(formats[fe]));
> > > + String formatName =
> > metaFormat.format(formats[fe]);
> > > + if
> > (StringUtils.isNotEmpty(formatName)) {
> > > +
> > sb.append(START_FMT).append(formatName);
> > > + }
> > > }
> > > break;
> > > default:
> > > @@ -129,6 +150,13 @@
> > > return sb.toString();
> > > }
> > >
> > > + /**
> > > + * Parse the formats from the given
> > pattern.
> > > + *
> > > + * @param pattern String to parse
> > > + * @param metaFormat Format to parse the
> > Formats
> > > + * @return array of parsed Formats
> > > + */
> > > private Format[] parseFormats(String
> > pattern, Format metaFormat) {
> > > ArrayList result = new ArrayList();
> > > ParsePosition pos = new
> > ParsePosition(0);
> > > @@ -142,8 +170,8 @@
> > > readArgumentIndex(pattern,
> > next(pos));
> > > if
> > (pattern.charAt(pos.getIndex()) == START_FMT) {
> > > seekNonWs(pattern,
> > next(pos));
> > > -
> > result.add(metaFormat.parseObject(pattern, pos));
> > > }
> > > +
> > result.add(metaFormat.parseObject(pattern, pos));
> > > seekNonWs(pattern, pos);
> > > if
> > (pattern.charAt(pos.getIndex()) != END_FE) {
> > > throw new
> > IllegalArgumentException(
> > > @@ -158,6 +186,12 @@
> > > return (Format[]) result.toArray(new
> > Format[result.size()]);
> > > }
> > >
> > > + /**
> > > + * Consume whitespace from the current
> > parse position.
> > > + *
> > > + * @param pattern String to read
> > > + * @param pos current position
> > > + */
> > > private void seekNonWs(String pattern,
> > ParsePosition pos) {
> > > int len = 0;
> > > char[] buffer =
> > pattern.toCharArray();
> > > @@ -167,11 +201,24 @@
> > > } while (len > 0 && pos.getIndex() <
> > pattern.length());
> > > }
> > >
> > > + /**
> > > + * Convenience method to advance parse
> > position by 1
> > > + *
> > > + * @param pos ParsePosition
> > > + * @return <code>pos</code>
> > > + */
> > > private ParsePosition next(ParsePosition
> > pos) {
> > > pos.setIndex(pos.getIndex() + 1);
> > > return pos;
> > > }
> > >
> > > + /**
> > > + * Read the argument index from the
> > current format element
> > > + *
> > > + * @param pattern pattern to parse
> > > + * @param pos current parse position
> > > + * @return argument index as string
> > > + */
> > > private String readArgumentIndex(String
> > pattern, ParsePosition pos) {
> > > int start = pos.getIndex();
> > > for (; pos.getIndex() <
> > pattern.length(); next(pos)) {
> > > @@ -189,6 +236,16 @@
> > > "Unterminated format element
> > at position " + start);
> > > }
> > >
> > > + /**
> > > + * Consume a quoted string, adding it to
> > <code>appendTo</code> if
> > > + * specified.
> > > + *
> > > + * @param pattern pattern to parse
> > > + * @param pos current parse position
> > > + * @param appendTo optional StringBuffer
> > to append
> > > + * @param escapingOn whether to process
> > escaped quotes
> > > + * @return <code>appendTo</code>
> > > + */
> > > private StringBuffer
> > appendQuotedString(String pattern,
> > > ParsePosition pos, StringBuffer
> > appendTo, boolean escapingOn) {
> > > int start = pos.getIndex();
> > > @@ -200,8 +257,8 @@
> > > for (int i = pos.getIndex(); i <
> > pattern.length(); i++) {
> > > if (escapingOn
> > > &&
> > pattern.substring(i).startsWith(ESCAPED_QUOTE)) {
> > > - appendTo.append(c, lastHold,
> > pos.getIndex() - lastHold).append(
> > > - QUOTE);
> > > + appendTo.append(c, lastHold,
> > pos.getIndex() - lastHold)
> > > + .append(QUOTE);
> > > pos.setIndex(i +
> > ESCAPED_QUOTE.length());
> > > lastHold = pos.getIndex();
> > > continue;
> > > @@ -219,11 +276,24 @@
> > > "Unterminated quoted string
> > at position " + start);
> > > }
> > >
> > > + /**
> > > + * Consume quoted string only
> > > + *
> > > + * @param pattern pattern to parse
> > > + * @param pos current parse position
> > > + * @param escapingOn whether to process
> > escaped quotes
> > > + */
> > > private void getQuotedString(String
> > pattern, ParsePosition pos,
> > > boolean escapingOn) {
> > > appendQuotedString(pattern, pos,
> > null, escapingOn);
> > > }
> > >
> > > + /**
> > > + * Consume the entire format found at the
> > current position.
> > > + *
> > > + * @param pattern string to parse
> > > + * @param pos current parse position
> > > + */
> > > private void eatFormat(String pattern,
> > ParsePosition pos) {
> > > int start = pos.getIndex();
> > > int depth = 1;
> > > @@ -254,15 +324,28 @@
> > > private String strippedPattern;
> > >
> > > /**
> > > - * Create a new ExtendedMessageFormat.
> > > + * Create a new ExtendedMessageFormat for the
> > default locale.
> > > *
> > > - * @param pattern
> > > - * @param metaFormat
> > > - * @throws IllegalArgumentException
> > > - * if <code>metaFormat</code> is
> > <code>null</code> or in
> > > - * case of a bad pattern.
> > > + * @param pattern String
> > > + * @param metaFormat Format
> > > + * @throws IllegalArgumentException if
> > <code>metaFormat</code> is
> > > + * <code>null</code> or in case
> > of a bad pattern.
> > > */
> > > public ExtendedMessageFormat(String pattern,
> > Format metaFormat) {
> > > + this(pattern, Locale.getDefault(),
> > metaFormat);
> > > + }
> > > +
> > > + /**
> > > + * Create a new ExtendedMessageFormat.
> > > + *
> > > + * @param pattern String
> > > + * @param locale Locale
> > > + * @param metaFormat Format
> > > + * @throws IllegalArgumentException if
> > <code>metaFormat</code> is
> > > + * <code>null</code> or in case
> > of a bad pattern.
> > > + */
> > > + public ExtendedMessageFormat(String pattern,
> > Locale locale,
> > > + Format metaFormat) {
> > > /*
> > > * We have to do some acrobatics here:
> > the call to the super constructor
> > > * will invoke applyPattern(), but we
> > don't want to apply the pattern
> > > @@ -270,7 +353,7 @@
> > > * our (final) applyPattern
> > implementation, and re-call at the end of
> > > * this constructor.
> > > */
> > > - super(pattern);
> > > + super(pattern, locale);
> > > setMetaFormat(metaFormat);
> > > applyPattern(pattern);
> > > }
> > > @@ -278,8 +361,7 @@
> > > /**
> > > * Apply the specified pattern.
> > > *
> > > - * @param pattern
> > > - * pattern String
> > > + * @param pattern String
> > > */
> > > public final void applyPattern(String
> > pattern) {
> > > if (metaFormat == null) {
> > > @@ -293,20 +375,20 @@
> > > }
> > >
> > > /**
> > > - * Pre-execution hook that allows subclasses
> > to customize the behavior of
> > > - * the final applyPattern implementation.
> > > + * Pre-execution hook by means of which a
> > subclass can customize the
> > > + * behavior of the final applyPattern
> > implementation.
> > > *
> > > - * @param pattern
> > > + * @param pattern String
> > > */
> > > protected void applyPatternPre(String
> > pattern) {
> > > // noop
> > > }
> > >
> > > /**
> > > - * Post-execution hook that allows subclasses
> > to customize the behavior of
> > > - * the final applyPattern implementation.
> > > + * Post-execution hook by means of which a
> > subclass can customize the
> > > + * behavior of the final applyPattern
> > implementation.
> > > *
> > > - * @param pattern
> > > + * @param pattern String
> > > */
> > > protected void applyPatternPost(String
> > pattern) {
> > > // noop
> > > @@ -335,8 +417,7 @@
> > > * Set the meta-format. Has no effect until a
> > subsequent call to
> > > * {@link #applyPattern(String)}.
> > > *
> > > - * @param metaFormat
> > > - * the Format metaFormat to set.
> > > + * @param metaFormat the Format metaFormat to
> > set.
> > > */
> > > public synchronized void setMetaFormat(Format
> > metaFormat) {
> > > Validate.notNull(metaFormat, "metaFormat
> > is null");
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -24,7 +24,8 @@
> > > import java.util.Map;
> > >
> > > /**
> > > - * metaFormat support.
> > > + * Support class for implementing Formats that
> > parse/format other Formats, with
> > > + * specific support for interoperability with
> > ExtendedMessageFormat.
> > > *
> > > * @see ExtendedMessageFormat
> > > * @author Matt Benson
> > > @@ -40,11 +41,9 @@
> > > /**
> > > * Invert the specified Map.
> > > *
> > > - * @param map
> > > - * the Map to invert.
> > > + * @param map the Map to invert.
> > > * @return a new Map instance.
> > > - * @throws NullPointerException
> > > - * if <code>map</code> is
> > <code>null</code>.
> > > + * @throws NullPointerException if
> > <code>map</code> is <code>null</code>.
> > > */
> > > protected Map invert(Map map) {
> > > Map result = new HashMap(map.size());
> > > @@ -58,8 +57,8 @@
> > > /**
> > > * Find the end of the subformat.
> > > *
> > > - * @param source
> > > - * @param pos
> > > + * @param source String
> > > + * @param pos current parse position
> > > */
> > > protected void seekFormatElementEnd(String
> > source, ParsePosition pos) {
> > > int depth = 1;
> > > @@ -85,8 +84,7 @@
> > > /**
> > > * Advance the parse index by 1.
> > > *
> > > - * @param pos
> > > - * the ParsePosition to advance.
> > > + * @param pos the ParsePosition to advance.
> > > * @return <code>pos</code>
> > > */
> > > protected ParsePosition next(ParsePosition
> > pos) {
> > > @@ -100,10 +98,8 @@
> > > * occurs <code>pos.getErrorIndex()</code>
> > will contain a value >= zero,
> > > * indicating the index at which the parse
> > error occurred.
> > > *
> > > - * @param source
> > > - * String to parse
> > > - * @param pos
> > > - * ParsePosition marking index
> > into <code>source</code>
> > > + * @param source String to parse
> > > + * @param pos ParsePosition marking index
> > into <code>source</code>
> > > * @return Object parsed
> > > */
> > > public abstract Object parseObject(String
> > source, ParsePosition pos);
> > > @@ -112,19 +108,14 @@
> > > * Format the specified object, appending to
> > the given StringBuffer, and
> > > * optionally respecting the specified
> > FieldPosition.
> > > *
> > > - * @param obj
> > > - * the object to format
> > > - * @param toAppendTo
> > > - * the StringBuffer to which the
> > formatted object should be
> > > - * appended
> > > - * @param pos
> > > - * FieldPosition associated with
> > <code>obj</code>
> > > + * @param obj the object to format
> > > + * @param toAppendTo the StringBuffer to
> > which the formatted object should
> > > + * be appended
> > > + * @param pos FieldPosition associated with
> > <code>obj</code>
> > > * @return <code>toAppendTo</code>
> > > - * @throws NullPointerException
> > > - * if <code>toAppendTo</code> or
> > <code>pos</code> is
> > > - * <code>null</code>
> > > - * @throws IllegalArgumentException
> > > - * if unable to format
> > <code>obj</code>
> > > + * @throws NullPointerException if
> > <code>toAppendTo</code> or
> > > + * <code>pos</code> is
> > <code>null</code>
> > > + * @throws IllegalArgumentException if unable
> > to format <code>obj</code>
> > > */
> > > public abstract StringBuffer format(Object
> > obj, StringBuffer toAppendTo,
> > > FieldPosition pos);
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -50,7 +50,7 @@
> > > /**
> > > * Add a delegate format.
> > > *
> > > - * @param delegate
> > > + * @param delegate Format
> > > * @return the builder
> > > */
> > > public Builder add(Format delegate) {
> > > @@ -82,17 +82,19 @@
> > > /**
> > > * Create a new MultiFormat.
> > > *
> > > - * @param delegates
> > > + * @param delegates Formats
> > > */
> > > public MultiFormat(Format[] delegates) {
> > > setDelegates(delegates);
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > + /**
> > > + * Format <code>obj</code>; append to
> > <code>toAppendTo</code>.
> > > *
> > > - * @see
> > java.text.Format#format(java.lang.Object,
> > java.lang.StringBuffer,
> > > - * java.text.FieldPosition)
> > > + * @param obj Object to format
> > > + * @param toAppendTo StringBuffer to append
> > to
> > > + * @param pos FieldPosition
> > > + * @return <code>toAppendTo</code>
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo,
> > > FieldPosition pos) {
> > > @@ -108,11 +110,13 @@
> > > + obj);
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > + /**
> > > + * Parse an object by trying each delegate.
> > > *
> > > - * @see
> > java.text.Format#parseObject(java.lang.String,
> > > - * java.text.ParsePosition)
> > > + * @param source string
> > > + * @param pos current parse position
> > > + * @return value returned from first delegate
> > that does not encounter an
> > > + * error.
> > > */
> > > public Object parseObject(String source,
> > ParsePosition pos) {
> > > int start = pos.getIndex();
> > > @@ -133,8 +137,7 @@
> > > /**
> > > * Set the delegates.
> > > *
> > > - * @param delegates
> > > - * the Format[] delegates to set.
> > > + * @param delegates the Format[] delegates to
> > set.
> > > */
> > > public void setDelegates(Format[] delegates)
> > {
> > > Validate.noNullElements(delegates,
> > > @@ -151,6 +154,11 @@
> > > return delegates;
> > > }
> > >
> > > + /**
> > > + * Validate and return our delegates.
> > > + *
> > > + * @return delegate Formats, not null
> > > + */
> > > private Format[] getValidDelegates() {
> > > Format[] result = getDelegates();
> > > Validate.notEmpty(result, "No delegate
> > Formats configured");
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -57,8 +57,8 @@
> > > /**
> > > * Add the specified format with the
> > specified string key.
> > > *
> > > - * @param key
> > > - * @param format
> > > + * @param key String
> > > + * @param format Format
> > > * @return Builder reference to this
> > object
> > > */
> > > public Builder put(String key, Format
> > format) {
> > > @@ -80,16 +80,15 @@
> > >
> > > /**
> > > * Create a new NameKeyedMetaFormat.
> > > + *
> > > + * @param keyedFormats String->Format map.
> > > */
> > > public NameKeyedMetaFormat(Map keyedFormats)
> > {
> > > this.keyedFormats = keyedFormats;
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.MetaFormatSupport#format(java.lang.Object,
> > > - * java.lang.StringBuffer,
> > java.text.FieldPosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo,
> > > FieldPosition pos) {
> > > @@ -117,11 +116,8 @@
> > > throw new
> > IllegalArgumentException("Cannot format " + obj);
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.MetaFormatSupport#parseObject(java.lang.String,
> > > - * java.text.ParsePosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public Object parseObject(String source,
> > ParsePosition pos) {
> > > int start = pos.getIndex();
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -56,18 +56,15 @@
> > > /**
> > > * Create a new NumberMetaFormat.
> > > *
> > > - * @param locale
> > > + * @param locale Locale
> > > */
> > > public NumberMetaFormat(Locale locale) {
> > > super();
> > > this.locale = locale;
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractMetaFormat#format(java.lang.Object,
> > > - * java.lang.StringBuffer,
> > java.text.FieldPosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo,
> > > FieldPosition pos) {
> > > @@ -85,11 +82,8 @@
> > > throw new IllegalArgumentException();
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> > java.text.Format#parseObject(java.lang.String,
> > > - * java.text.ParsePosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public Object parseObject(String source,
> > ParsePosition pos) {
> > > int start = pos.getIndex();
> > > @@ -115,6 +109,9 @@
> > > return locale;
> > > }
> > >
> > > + /**
> > > + * Initialize this NumberMetaFormat.
> > > + */
> > > private synchronized void initialize() {
> > > if (subformats == null) {
> > > subformats = new HashMap();
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -41,30 +41,28 @@
> > > /**
> > > * Create a new NumberMetaFormat.
> > > *
> > > - * @param locale
> > > + * @param locale Locale
> > > */
> > > public TimeMetaFormat(Locale locale) {
> > > super(locale);
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> > > - */
> > > + /** {@inheritDoc} */
> > > protected DateFormat
> > createSubformatInstance(int style) {
> > > return DateFormat.getTimeInstance(style,
> > getLocale());
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractDateMetaFormat#createReverseStyleMap()
> > > - */
> > > + /** {@inheritDoc} */
> > > protected Map createInverseStyleMap() {
> > > Map invertMe = createStyleMap();
> > > invertMe.remove(DEFAULT);
> > > - invertMe.remove(FULL);
> > > + DateFormat longDf =
> > DateFormat.getTimeInstance(DateFormat.LONG,
> > > + getLocale());
> > > + DateFormat fullDf =
> > DateFormat.getTimeInstance(DateFormat.FULL,
> > > + getLocale());
> > > + if (fullDf.equals(longDf)) {
> > > + invertMe.remove(FULL);
> > > + }
> > > return invert(invertMe);
> > > }
> > > }
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -16,10 +16,18 @@
> > > */
> > > package org.apache.commons.lang.text;
> > >
> > > +import java.text.ChoiceFormat;
> > > import java.text.DateFormat;
> > > +import java.text.DecimalFormat;
> > > +import java.text.DecimalFormatSymbols;
> > > +import java.text.FieldPosition;
> > > +import java.text.Format;
> > > import java.text.MessageFormat;
> > > +import java.text.NumberFormat;
> > > +import java.text.SimpleDateFormat;
> > > import java.util.Calendar;
> > > import java.util.GregorianCalendar;
> > > +import java.util.Locale;
> > >
> > > import junit.framework.TestCase;
> > >
> > > @@ -32,7 +40,7 @@
> > > * @version $Id$
> > > */
> > > public abstract class AbstractMessageFormatTest
> > extends TestCase {
> > > - protected static final Object[] NUMBERS = {
> > new Double(0.1),
> > > + protected static final Double[] NUMBERS = {
> > new Double(0.1),
> > > new Double(1.1), new Double(2.1) };
> > >
> > > protected static final Object[] DATES = {
> > > @@ -43,18 +51,30 @@
> > > new GregorianCalendar(1970,
> > Calendar.MARCH, 03, 18, 45, 50)
> > > .getTime() };
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see junit.framework.TestCase#setUp()
> > > + protected Locale locale;
> > > +
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > protected void setUp() throws Exception {
> > > super.setUp();
> > > - // tests depend on Locale.US
> > > -
> > java.util.Locale.setDefault(java.util.Locale.US);
> > > + this.locale = getLocale();
> > > }
> > >
> > > - protected abstract MessageFormat
> > createMessageFormat(String pattern);
> > > + /**
> > > + * Create a MessageFormat.
> > > + * @param pattern
> > > + * @param locale
> > > + * @return
> > > + */
> > > + protected abstract MessageFormat
> > createMessageFormat(String pattern,
> > > + Locale locale);
> > > +
> > > + /**
> > > + * Get the Locale to use.
> > > + * @return
> > > + */
> > > + protected abstract Locale getLocale();
> > >
> > > protected void doAssertions(String expected,
> > String pattern, Object[] args) {
> > > doAssertions(expected, pattern, args,
> > pattern);
> > > @@ -62,235 +82,213 @@
> > >
> > > protected void doAssertions(String expected,
> > String pattern, Object[] args,
> > > String toPattern) {
> > > - MessageFormat f =
> > createMessageFormat(pattern);
> > > + MessageFormat f =
> > createMessageFormat(pattern, locale);
> > > assertEquals(expected, f.format(args));
> > > assertEquals(toPattern, f.toPattern());
> > > }
> > >
> > > - public void testPlain() {
> > > + protected void doAssertions(Format format,
> > Object[] args) {
> > > + doAssertions(format, args, null);
> > > + }
> > > +
> > > + protected void doAssertions(Format format,
> > Object[] args, String formatName) {
> > > + doAssertions(format, args, formatName,
> > null);
> > > + }
> > > +
> > > + protected void doAssertions(Format format,
> > Object[] args,
> > > + String formatName, String
> > decodeFormatName) {
> > > + StringBuffer pattern = new
> > StringBuffer();
> > > + StringBuffer expected = new
> > StringBuffer();
> > > + StringBuffer decodePattern = new
> > StringBuffer();
> > > + for (int i = 0; i < args.length; i++) {
> > > + pattern.append(i).append(":
> > {").append(i);
> > > + if (formatName != null) {
> > > +
> > pattern.append(',').append(formatName);
> > > + }
> > > + pattern.append("}; ");
> > > + expected.append(i).append(": ");
> > > + if (format != null) {
> > > + format.format(args[i], expected,
> > new FieldPosition(0));
> > > + } else {
> > > +
> > expected.append(String.valueOf(args[i]));
> > > + }
> > > + expected.append("; ");
> > > + decodePattern.append(i).append(":
> > {").append(i);
> > > + if (decodeFormatName != null ||
> > formatName != null) {
> > > + decodePattern.append(',').append(
> > > + decodeFormatName == null
> > ? formatName
> > > + :
> > decodeFormatName);
> > > + }
> > > + decodePattern.append("}; ");
> > > + }
> > > + doAssertions(expected.toString(),
> > pattern.toString(), args,
> > > + decodePattern.toString());
> > > + }
> > > +
> > > + public void testNoFormatElements() {
> > > StringBuffer pattern = new
> > StringBuffer();
> > > for (int i = 0; i < NUMBERS.length; i++)
> > {
> > > if (i > 0) {
> > > pattern.append("; ");
> > > }
> > > - pattern.append("Object
> > ").append(i).append(": ").append(NUMBERS[i]);
> > > + pattern.append(i).append(":
> > ").append(NUMBERS[i]);
> > > }
> > > String p = pattern.toString();
> > > - doAssertions(p, p, NUMBERS);
> > > + doAssertions(p, p, null);
> > > }
> > >
> > > - public void testSimple() {
> > > - doAssertions("Object 0: 0.1; Object 1:
> > 1.1; Object 2: 2.1",
> > > - "Object 0: {0}; Object 1: {1};
> > Object 2: {2}", NUMBERS);
> > > + public void testSimpleStrings() {
> > > + doAssertions(null, new Object[] { "foo",
> > "bar", "baz"}, null);
> > > + }
> > > +
> > > + public void testSimpleNumbers() {
> > > +
> > doAssertions(NumberFormat.getInstance(locale),
> > NUMBERS, null);
> > > + }
> > > +
> > > + public void testSimpleDates() {
> > > +
> >
> doAssertions(DateFormat.getDateTimeInstance(DateFormat.SHORT,
> > > + DateFormat.SHORT, locale), DATES,
> > null);
> > > }
> > >
> > > public void testNumber() {
> > > - doAssertions(
> > > - "Number 0: 0.1; Number 1: 1.1;
> > Number 2: 2.1",
> > > - "Number 0: {0,number}; Number 1:
> > {1,number}; Number 2: {2,number}",
> > > - NUMBERS);
> > > +
> > doAssertions(NumberFormat.getInstance(locale),
> > NUMBERS, "number");
> > > }
> > >
> > > public void testNumberLooseFormatting() {
> > > - doAssertions(
> > > - "Number 0: 0.1; Number 1: 1.1;
> > Number 2: 2.1",
> > > - "Number 0: {0, number }; Number
> > 1: {1, number }; Number 2: {2, number }",
> > > - NUMBERS,
> > > - "Number 0: {0,number}; Number 1:
> > {1,number}; Number 2: {2,number}");
> > > +
> > doAssertions(NumberFormat.getInstance(locale),
> > NUMBERS, " number ",
> > > + "number");
> > > }
> > >
> > > public void testInteger() {
> > > - doAssertions(
> > > - "Number 0: 0; Number 1: 1; Number
> > 2: 2",
> > > - "Number 0: {0,number,integer};
> > Number 1: {1,number,integer}; Number 2:
> > {2,number,integer}",
> > > - NUMBERS);
> > > +
> >
> doAssertions(NumberFormat.getIntegerInstance(locale),
> > NUMBERS,
> > > + "number,integer");
> > > }
> > >
> > > public void testIntegerLooseFormatting() {
> > > - doAssertions(
> > > - "Number 0: 0; Number 1: 1; Number
> > 2: 2",
> > > - "Number 0: {0, number , integer
> > }; Number 1: {1, number , integer }; Number 2: {2,
> > number , integer }",
> > > - NUMBERS,
> > > - "Number 0: {0,number,integer};
> > Number 1: {1,number,integer}; Number 2:
> > {2,number,integer}");
> > > +
> >
> doAssertions(NumberFormat.getIntegerInstance(locale),
> > NUMBERS,
> > > + " number , integer ",
> > "number,integer");
> > > }
> > >
> > > public void testCurrency() {
> > > - doAssertions(
> > > - "Number 0: $0.10; Number 1:
> > $1.10; Number 2: $2.10",
> > > - "Number 0: {0,number,currency};
> > Number 1: {1,number,currency}; Number 2:
> > {2,number,currency}",
> > > - NUMBERS);
> > > +
> >
> doAssertions(NumberFormat.getCurrencyInstance(locale),
> > NUMBERS,
> > > + "number,currency");
> > > }
> > >
> > > public void testPercent() {
> > > - doAssertions(
> > > - "Number 0: 10%; Number 1: 110%;
> > Number 2: 210%",
> > > - "Number 0: {0,number,percent};
> > Number 1: {1,number,percent}; Number 2:
> > {2,number,percent}",
> > > - NUMBERS);
> > > +
> >
> doAssertions(NumberFormat.getPercentInstance(locale),
> > NUMBERS,
> > > + "number,percent");
> > > }
> > >
> > > public void testNumberPattern() {
> > > - doAssertions(
> > > - "Number 0: 000.100; Number 1:
> > 001.100; Number 2: 002.100",
> > > - "Number 0: {0,number,#000.000};
> > Number 1: {1,number,#000.000}; Number 2:
> > {2,number,#000.000}",
> > > - NUMBERS);
> > > + doAssertions(new
> > DecimalFormat("#000.000", new DecimalFormatSymbols(
> > > + locale)), NUMBERS,
> > "number,#000.000");
> > > }
> > >
> > > public void testDate() {
> > > - doAssertions(
> > > - "Date 0: Jan 1, 1970; Date 1: Feb
> > 2, 1970; Date 2: Mar 3, 1970",
> > > - "Date 0: {0,date}; Date 1:
> > {1,date}; Date 2: {2,date}", DATES);
> > > +
> >
> doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT,
> > locale),
> > > + DATES, "date");
> > > }
> > >
> > > public void testDateLooseFormatting() {
> > > - doAssertions(
> > > - "Date 0: Jan 1, 1970; Date 1: Feb
> > 2, 1970; Date 2: Mar 3, 1970",
> > > - "Date 0: {0, date }; Date 1: {1,
> > date }; Date 2: {2, date }",
> > > - DATES, "Date 0: {0,date}; Date 1:
> > {1,date}; Date 2: {2,date}");
> > > +
> >
> doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT,
> > locale),
> > > + DATES, " date ", "date");
> > > }
> > >
> > > public void testShortDate() {
> > > - doAssertions(
> > > - "Date 0: 1/1/70; Date 1: 2/2/70;
> > Date 2: 3/3/70",
> > > - "Date 0: {0,date,short}; Date 1:
> > {1,date,short}; Date 2: {2,date,short}",
> > > - DATES);
> > > + DateFormat shortDf =
> > DateFormat.getDateInstance(DateFormat.SHORT,
> > locale);
> > > + DateFormat defaultDf =
> > DateFormat.getDateInstance(DateFormat.DEFAULT,
> > locale);
> > > + doAssertions(shortDf, DATES,
> > "date,short",
> > > + shortDf.equals(defaultDf) ?
> > "date" : "date,short");
> > > }
> > >
> > > public void testShortDateLooseFormatting() {
> > > - doAssertions(
> > > - "Date 0: 1/1/70; Date 1: 2/2/70;
> > Date 2: 3/3/70",
> > > - "Date 0: {0, date , short }; Date
> > 1: {1, date , short }; Date 2: {2, date , short
> > }",
> > > - DATES,
> > > - "Date 0: {0,date,short}; Date 1:
> > {1,date,short}; Date 2: {2,date,short}");
> > > + DateFormat shortDf =
> > DateFormat.getDateInstance(DateFormat.SHORT,
> > locale);
> > > + DateFormat defaultDf =
> > DateFormat.getDateInstance(DateFormat.DEFAULT,
> > locale);
> > > + doAssertions(shortDf, DATES, " date ,
> > short ",
> > > + shortDf.equals(defaultDf) ?
> > "date" : "date,short");
> > > }
> > >
> > > public void testMediumDate() {
> > > - doAssertions(
> > > - "Date 0: Jan 1, 1970; Date 1: Feb
> > 2, 1970; Date 2: Mar 3, 1970",
> > > - "Date 0: {0,date,medium}; Date 1:
> > {1,date,medium}; Date 2: {2,date,medium}",
> > > - DATES, "Date 0: {0,date}; Date 1:
> > {1,date}; Date 2: {2,date}");
> > > +
> >
> doAssertions(DateFormat.getDateInstance(DateFormat.MEDIUM,
> > locale),
> > > + DATES, "date,medium", "date");
> > > }
> > >
> > > public void testLongDate() {
> > > - doAssertions(
> > > - "Date 0: January 1, 1970; Date 1:
> > February 2, 1970; Date 2: March 3, 1970",
> > > - "Date 0: {0,date,long}; Date 1:
> > {1,date,long}; Date 2: {2,date,long}",
> > > - DATES);
> > > + DateFormat longDf =
> > DateFormat.getDateInstance(DateFormat.LONG, locale);
> > > + DateFormat defaultDf =
> > DateFormat.getDateInstance(DateFormat.DEFAULT,
> > > + locale);
> > > + doAssertions(longDf, DATES, "date,long",
> > > + longDf.equals(defaultDf) ? "date"
> > : "date,long");
> > > }
> > >
> > > public void testFullDate() {
> > > - doAssertions(
> > > - "Date 0: Thursday, January 1,
> > 1970; Date 1: Monday, February 2, 1970; Date 2:
> > Tuesday, March 3, 1970",
> > > - "Date 0: {0,date,full}; Date 1:
> > {1,date,full}; Date 2: {2,date,full}",
> > > - DATES);
> > > + DateFormat fullDf =
> > DateFormat.getDateInstance(DateFormat.FULL, locale);
> > > + DateFormat longDf =
> > DateFormat.getDateInstance(DateFormat.LONG, locale);
> > > + doAssertions(fullDf, DATES, "date,full",
> > > + fullDf.equals(longDf) ?
> > "date,long" : "date,full");
> > > }
> > >
> > > public void testDatePattern() {
> > > - doAssertions(
> > > - "Date 0: AD1970.1; Date 1:
> > AD1970.33; Date 2: AD1970.62",
> > > - "Date 0: {0,date,Gyyyy.D}; Date
> > 1: {1,date,Gyyyy.D}; Date 2: {2,date,Gyyyy.D}",
> > > - DATES);
> > > + doAssertions(new
> > SimpleDateFormat("Gyyyy.D", locale), DATES,
> > > + "date,Gyyyy.D");
> > > }
> > >
> > > public void testTime() {
> > > - doAssertions(
> > > - "Time 0: 12:15:20 AM; Time 1:
> > 12:30:35 PM; Time 2: 6:45:50 PM",
> > > - "Time 0: {0,time}; Time 1:
> > {1,time}; Time 2: {2,time}", DATES);
> > > +
> >
> doAssertions(DateFormat.getTimeInstance(DateFormat.DEFAULT,
> > locale),
> > > + DATES, "time");
> > > }
> > >
> > > public void testShortTime() {
> > > - doAssertions(
> > > - "Time 0: 12:15 AM; Time 1: 12:30
> > PM; Time 2: 6:45 PM",
> > > - "Time 0: {0,time,short}; Time 1:
> > {1,time,short}; Time 2: {2,time,short}",
> > > - DATES);
> > > +
> >
> doAssertions(DateFormat.getTimeInstance(DateFormat.SHORT,
> > locale),
> > > + DATES, "time,short");
> > > }
> > >
> > > public void testMediumTime() {
> > > - doAssertions(
> > > - "Time 0: 12:15:20 AM; Time 1:
> > 12:30:35 PM; Time 2: 6:45:50 PM",
> > > - "Time 0: {0,time,medium}; Time 1:
> > {1,time,medium}; Time 2: {2,time,medium}",
> > > - DATES, "Time 0: {0,time}; Time 1:
> > {1,time}; Time 2: {2,time}");
> > > +
> >
> doAssertions(DateFormat.getTimeInstance(DateFormat.MEDIUM,
> > locale),
> > > + DATES, "time,medium", "time");
> > > }
> > >
> > > public void testLongTime() {
> > > - DateFormat df =
> > DateFormat.getTimeInstance(DateFormat.LONG);
> > > - StringBuffer expected = new
> > StringBuffer();
> > > - for (int i = 0; i < DATES.length; i++) {
> > > - if (i > 0) {
> > > - expected.append("; ");
> > > - }
> > > - expected.append("Time
> > ").append(i).append(": ").append(
> > > - df.format(DATES[i]));
> > > - }
> > > - doAssertions(
> > > - expected.toString(),
> > > - "Time 0: {0,time,long}; Time 1:
> > {1,time,long}; Time 2: {2,time,long}",
> > > - DATES);
> > > +
> >
> doAssertions(DateFormat.getTimeInstance(DateFormat.LONG,
> > locale),
> > > + DATES, "time,long");
> > > }
> > >
> > > public void testFullTime() {
> > > - DateFormat df =
> > DateFormat.getTimeInstance(DateFormat.FULL);
> > > - StringBuffer expected = new
> > StringBuffer();
> > > - for (int i = 0; i < DATES.length; i++) {
> > > - if (i > 0) {
> > > - expected.append("; ");
> > > - }
> > > - expected.append("Time
> > ").append(i).append(": ").append(
> > > - df.format(DATES[i]));
> > > - }
> > > - doAssertions(
> > > - expected.toString(),
> > > - "Time 0: {0,time,full}; Time 1:
> > {1,time,full}; Time 2: {2,time,full}",
> > > - DATES,
> > > - "Time 0: {0,time,long}; Time 1:
> > {1,time,long}; Time 2: {2,time,long}");
> > > + DateFormat fullDf =
> > DateFormat.getTimeInstance(DateFormat.FULL, locale);
> > > + DateFormat longDf =
> > DateFormat.getTimeInstance(DateFormat.LONG, locale);
> > > + doAssertions(fullDf, DATES, "time,full",
> > > + fullDf.equals(longDf) ?
> > "time,long" : "time,full");
> > > }
> > >
> > > public void testTimePattern() {
> > > - doAssertions(
> > > - "Time 0: AM01520; Time 1:
> > PM123035; Time 2: PM184550",
> > > - "Time 0: {0,time,aHms}; Time 1:
> > {1,time,aHms}; Time 2: {2,time,aHms}",
> > > - DATES,
> > > - "Time 0: {0,date,aHms}; Time 1:
> > {1,date,aHms}; Time 2: {2,date,aHms}");
> > > + doAssertions(new SimpleDateFormat("aHms",
> > locale), DATES, "date,aHms");
> > > }
> > >
> > > public void testChoice() {
> > > - String choice = "0.0#x|1.0#y|2.0#z";
> > > - StringBuffer pattern = new
> > StringBuffer();
> > > - for (int i = 0; i < 3; i++) {
> > > - if (i > 0) {
> > > - pattern.append("; ");
> > > - }
> > > - pattern.append("Choice
> > ").append(i).append(": {").append(i).append(
> > > -
> > ",choice,").append(choice).append("}");
> > > - }
> > > - doAssertions("Choice 0: x; Choice 1: y;
> > Choice 2: z", pattern
> > > - .toString(), NUMBERS);
> > > + doAssertions(new
> > ChoiceFormat("0.0#x|1.0#y|2.0#z"), NUMBERS,
> > > + "choice,0.0#x|1.0#y|2.0#z");
> > > }
> > >
> > > public void testChoiceLooseFormatting() {
> > > - String choice = "0.0#x |1.0#y |2.0#z ";
> > > - StringBuffer pattern = new
> > StringBuffer();
> > > - for (int i = 0; i < 3; i++) {
> > > - if (i > 0) {
> > > - pattern.append("; ");
> > > - }
> > > - pattern.append("Choice
> > ").append(i).append(": {").append(i).append(
> > > -
> > ",choice,").append(choice).append("}");
> > > - }
> > > - doAssertions("Choice 0: x ; Choice 1: y ;
> > Choice 2: z ", pattern
> > > - .toString(), NUMBERS);
> > > + doAssertions(new ChoiceFormat("0.0#x
> > |1.0#y |2.0#z "), NUMBERS,
> > > + "choice,0.0#x |1.0#y |2.0#z ");
> > > }
> > >
> > > public void testChoiceRecursive() {
> > > - String choice =
> > "0.0#{0}|1.0#{1}|2.0#{2}";
> > > - StringBuffer pattern = new
> > StringBuffer();
> > > - for (int i = 0; i < 3; i++) {
> > > + NumberFormat nf =
> > NumberFormat.getInstance(locale);
> > > + StringBuffer choice = new StringBuffer();
> > > + StringBuffer format = new
> > StringBuffer("choice,");
> > > + for (int i = 0; i < NUMBERS.length; i++)
> > {
> > > + Double d = new
> > Double(Math.floor(NUMBERS[i].doubleValue()));
> > > if (i > 0) {
> > > - pattern.append("; ");
> > > + choice.append('|');
> > > + format.append('|');
> > > }
> > > - pattern.append("Choice
> > ").append(i).append(": {").append(i).append(
> > > -
> > ",choice,").append(choice).append("}");
> > > + choice.append(d).append('#').append(
> > > +
> > nf.format(NUMBERS[i].doubleValue()));
> > > +
> >
> format.append(d).append('#').append('{').append(i).append('}');
> > > }
> > > - doAssertions("Choice 0: 0.1; Choice 1:
> > 1.1; Choice 2: 2.1", pattern
> > > - .toString(), NUMBERS);
> > > + doAssertions(new
> > ChoiceFormat(choice.toString()), NUMBERS, format
> > > + .toString());
> > > }
> > > }
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -20,21 +20,161 @@
> > > import java.util.Locale;
> > >
> > > /**
> > > - * Baseline tests for {@link
> > ExtendedMessageFormat}
> > > + * Baseline tests for ExtendedMessageFormat
> > > *
> > > * @author Matt Benson
> > > * @since 2.4
> > > * @version $Id$
> > > */
> > > -public class ExtendedMessageFormatBaselineTest
> > extends AbstractMessageFormatTest {
> > > +public abstract class
> > ExtendedMessageFormatBaselineTest extends
> > > + AbstractMessageFormatTest {
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > + /**
> > > + * Tests for <code>Locale.US</code>
> > > *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > > + * @author mbenson
> > > */
> > > - protected MessageFormat
> > createMessageFormat(String pattern) {
> > > - return new ExtendedMessageFormat(pattern,
> >
> ExtendedMessageFormat.createDefaultMetaFormat(Locale.US));
> > > + public static class US extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.US;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.UK</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class UK extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.UK;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.GERMANY</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class DE extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.GERMANY;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.ITALY</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class IT extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.ITALY;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.JAPAN</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class JP extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.JAPAN;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.CHINA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class CN extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.CHINA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.CANADA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class CA extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.CANADA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.FRANCE</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class FR extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.FRANCE;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.KOREA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class KR extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.KOREA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.TAIWAN</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class TW extends
> > ExtendedMessageFormatBaselineTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.TAIWAN;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected MessageFormat
> > createMessageFormat(String pattern, Locale locale) {
> > > + return new ExtendedMessageFormat(pattern,
> > locale, ExtendedMessageFormat
> > > +
> > .createDefaultMetaFormat(locale));
> > > }
> > >
> > > }
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -16,11 +16,13 @@
> > > */
> > > package org.apache.commons.lang.text;
> > >
> > > +import java.text.DateFormat;
> > > import java.text.FieldPosition;
> > > import java.text.Format;
> > > import java.text.MessageFormat;
> > > import java.text.ParsePosition;
> > > import java.util.Calendar;
> > > +import java.util.Date;
> > > import java.util.GregorianCalendar;
> > > import java.util.Locale;
> > >
> > > @@ -31,22 +33,162 @@
> > > * @since 2.4
> > > * @version $Id$
> > > */
> > > -public class MessageFormatExtensionTest extends
> > AbstractMessageFormatTest {
> > > +public abstract class MessageFormatExtensionTest
> > extends
> > > + AbstractMessageFormatTest {
> > > + /**
> > > + * Tests for <code>Locale.US</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class US extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.US;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.UK</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class UK extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.UK;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.GERMANY</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class DE extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.GERMANY;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.ITALY</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class IT extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.ITALY;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.JAPAN</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class JP extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.JAPAN;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.CHINA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class CN extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.CHINA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.CANADA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class CA extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.CANADA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.FRANCE</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class FR extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.FRANCE;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.KOREA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class KR extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.KOREA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.TAIWAN</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class TW extends
> > MessageFormatExtensionTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.TAIWAN;
> > > + }
> > > + }
> > >
> > > static class ProperNameCapitalizationFormat
> > extends Format {
> > > private static final long
> > serialVersionUID = -6081911520622186866L;
> > > private static final StrMatcher MATCH =
> > StrMatcher
> > > .charSetMatcher(" ,.");
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> > java.text.Format#format(java.lang.Object,
> > > - * java.lang.StringBuffer,
> > java.text.FieldPosition)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > public StringBuffer format(Object obj,
> > StringBuffer toAppendTo,
> > > FieldPosition fpos) {
> > > - char[] buffer =
> > String.valueOf(obj).toCharArray();
> > > + if (!(obj instanceof String)) {
> > > + throw new
> > IllegalArgumentException();
> > > + }
> > > + char[] buffer = ((String)
> > obj).toCharArray();
> > > ParsePosition pos = new
> > ParsePosition(0);
> > > while (pos.getIndex() <
> > buffer.length) {
> > > char c = buffer[pos.getIndex()];
> > > @@ -91,17 +233,17 @@
> > > }
> > > }
> > >
> > > - /*
> > > - * (non-Javadoc)
> > > - *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > > + /**
> > > + * {@inheritDoc}
> > > */
> > > - protected MessageFormat
> > createMessageFormat(String pattern) {
> > > - return new ExtendedMessageFormat(pattern,
> > new MultiFormat.Builder()
> > > -
> >
> .add(ExtendedMessageFormat.createDefaultMetaFormat(Locale.US)).add(
> > > + protected MessageFormat
> > createMessageFormat(String pattern, Locale locale) {
> > > + return new ExtendedMessageFormat(pattern,
> > locale,
> > > + new MultiFormat.Builder().add(
> > > new
> > NameKeyedMetaFormat.Builder().put("properName",
> > > new
> > ProperNameCapitalizationFormat())
> > > -
> > .toNameKeyedMetaFormat()).toMultiFormat());
> > > +
> > .toNameKeyedMetaFormat()).add(
> > > +
> >
> ExtendedMessageFormat.createDefaultMetaFormat(locale))
> > > + .toMultiFormat());
> > > }
> > >
> > > public void testProperName() {
> > > @@ -111,10 +253,23 @@
> > > }
> > >
> > > public void testMixed() {
> > > - doAssertions("John Q. Public was born on
> > Thursday, January 1, 1970.",
> > > - "{0,properName} was born on
> > {1,date,full}.", new Object[] {
> > > + StringBuffer expected = new
> > StringBuffer("John Q. Public was born on ");
> > > + Date dob = new GregorianCalendar(1970,
> > Calendar.JANUARY, 01, 0, 15, 20)
> > > + .getTime();
> > > + DateFormat longDf =
> > DateFormat.getDateInstance(DateFormat.LONG, locale);
> > > + longDf.format(dob, expected, new
> > FieldPosition(0));
> > > + expected.append('.');
> > > + String pattern = "{0,properName} was born
> > on {1,date,long}.";
> > > + StringBuffer toPattern = new
> > StringBuffer(pattern);
> > > + if
> >
> (longDf.equals(DateFormat.getDateInstance(DateFormat.DEFAULT,
> > locale))) {
> > > + int idx = pattern.indexOf(",long");
> > > + toPattern.delete(idx, idx +
> > ",long".length());
> > > + }
> > > + doAssertions(expected.toString(),
> > > + pattern, new Object[] {
> > > "john q. public",
> > > new
> > GregorianCalendar(1970, Calendar.JANUARY, 01, 0,
> > > - 15, 20).getTime()
> > });
> > > + 15, 20).getTime()
> > }, toPattern.toString());
> > > }
> > > +
> > > }
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -10,13 +10,152 @@
> > > * @since 2.4
> > > * @version $Id$
> > > */
> > > -public class MessageFormatTest extends
> > AbstractMessageFormatTest {
> > > - /*
> > > - * (non-Javadoc)
> > > +public abstract class MessageFormatTest extends
> > AbstractMessageFormatTest {
> > > +
> > > + /**
> > > + * Tests for <code>Locale.US</code>
> > > *
> > > - * @see
> >
> org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > > + * @author mbenson
> > > */
> > > - protected MessageFormat
> > createMessageFormat(String pattern) {
> > > - return new MessageFormat(pattern,
> > Locale.US);
> > > + public static class US extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.US;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.UK</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class UK extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.UK;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.GERMANY</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class DE extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.GERMANY;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.ITALY</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class IT extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.ITALY;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.JAPAN</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class JP extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.JAPAN;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.CHINA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class CN extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.CHINA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.CANADA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class CA extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.CANADA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.FRANCE</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class FR extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.FRANCE;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.KOREA</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class KR extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.KOREA;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * Tests for <code>Locale.TAIWAN</code>
> > > + *
> > > + * @author mbenson
> > > + */
> > > + public static class TW extends
> > MessageFormatTest {
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected Locale getLocale() {
> > > + return Locale.TAIWAN;
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * {@inheritDoc}
> > > + */
> > > + protected MessageFormat
> > createMessageFormat(String pattern, Locale locale) {
> > > + return new MessageFormat(pattern,
> > locale);
> > > }
> > > }
> > >
> > > Modified:
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java?rev=598707&r1=598706&r2=598707&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > (original)
> > > +++
> >
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > Tue Nov 27 09:27:35 2007
> > > @@ -57,9 +57,36 @@
> > >
> > suite.addTest(StrSubstitutorTest.suite());
> > > suite.addTest(StrTokenizerTest.suite());
> > >
> > suite.addTestSuite(MultiFormatTest.class);
> > > -
> > suite.addTestSuite(MessageFormatTest.class);
> > > -
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.class);
> > > -
> >
> suite.addTestSuite(MessageFormatExtensionTest.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.US.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.UK.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.DE.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.IT.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.JP.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.CA.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.CN.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.FR.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.KR.class);
> > > +
> > suite.addTestSuite(MessageFormatTest.TW.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.US.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.UK.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.DE.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.IT.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.JP.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.CA.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.CN.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.FR.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.KR.class);
> > > +
> >
> suite.addTestSuite(ExtendedMessageFormatBaselineTest.TW.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.US.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.UK.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.DE.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.IT.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.JP.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.CA.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.CN.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.FR.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.KR.class);
> > > +
> >
> suite.addTestSuite(MessageFormatExtensionTest.TW.class);
> > > return suite;
> > > }
> > >
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org
Re: svn commit: r598707 - in /commons/proper/lang/trunk/src: java/org/apache/commons/lang/text/ test/org/apache/commons/lang/text/
Posted by Matt Benson <gu...@yahoo.com>.
I understand your concerns, Niall, and agree with you
in principle. My laxity here was due to the fact
that this entire suite of classes is new to [lang] and
I treated the change more like an extension of the
initial add. If you like I can revert the changes and
re-add more atomically.
-Matt
--- Niall Pemberton <ni...@gmail.com> wrote:
> My preference is that commits are as atomic as
> possible. These kind of
> all-in-one uber commits make it difficult to follow
> along with whats
> actually changing. IMO its especially a good idea to
> separate out the
> *noise" of javadoc/checkstyle changes from real code
> changes and in
> this case perhaps 3 commits would have been
> appropriate? Perhaps this
> sounds picky, but I believe it helps rather than
> hinders collaboration
> to work that way.
>
> Niall
>
> On Nov 27, 2007 5:27 PM, <mb...@apache.org>
> wrote:
> > Author: mbenson
> > Date: Tue Nov 27 09:27:35 2007
> > New Revision: 598707
> >
> > URL:
> http://svn.apache.org/viewvc?rev=598707&view=rev
> > Log:
> > [LANG-362] checkstyle; javadoc; extended testing
> which necessitated some refactorings
> >
> > Modified:
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> >
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> >
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -43,11 +43,8 @@
> > super();
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
> java.text.Format#format(java.lang.Object,
> java.lang.StringBuffer,
> > - * java.text.FieldPosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo,
> > FieldPosition pos) {
> > @@ -57,11 +54,8 @@
> > throw new
> IllegalArgumentException(String.valueOf(obj));
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
> java.text.Format#parseObject(java.lang.String,
> > - * java.text.ParsePosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public Object parseObject(String source,
> ParsePosition pos) {
> > int start = pos.getIndex();
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -56,8 +56,15 @@
> > }
> >
> > /**
> > - * Uses the formatter Format instance.
> > - *
> > + * Uses the formatter Format instance.
> > + *
> > + * @param obj
> > + * the object to format
> > + * @param toAppendTo
> > + * the {@link StringBuffer} to
> append to
> > + * @param pos
> > + * the FieldPosition to use (or
> ignore).
> > + * @return <code>toAppendTo</code>
> > * @see Format#format(Object, StringBuffer,
> FieldPosition)
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo, FieldPosition pos) {
> > @@ -65,8 +72,15 @@
> > }
> >
> > /**
> > - * Uses the parser Format instance.
> > - *
> > + * Uses the parser Format instance.
> > + *
> > + * @param source
> > + * the String source
> > + * @param pos
> > + * the ParsePosition containing
> the position to parse from, will
> > + * be updated according to parsing
> success (index) or failure
> > + * (error index)
> > + * @return the parsed Object
> > * @see Format#parseObject(String,
> ParsePosition)
> > */
> > public Object parseObject(String source,
> ParsePosition pos) {
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -40,17 +40,13 @@
> > /**
> > * Create a new DateMetaFormat.
> > *
> > - * @param locale
> > + * @param locale the Locale to use
> > */
> > public DateMetaFormat(Locale locale) {
> > super(locale);
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> > - */
> > + /** {@inheritDoc} */
> > protected DateFormat
> createSubformatInstance(int style) {
> > return DateFormat.getDateInstance(style,
> getLocale());
> > }
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> Tue Nov 27 09:27:35 2007
> > @@ -29,6 +29,7 @@
> >
> > /**
> > * date/time metaFormat support.
> > + *
> > * @see ExtendedMessageFormat
> > * @author Matt Benson
> > * @since 2.4
> > @@ -70,18 +71,15 @@
> > /**
> > * Create a new AbstractDateMetaFormat.
> > *
> > - * @param locale
> > + * @param locale Locale
> > */
> > public DateMetaFormatSupport(Locale locale) {
> > super();
> > this.locale = locale;
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
> java.text.Format#format(java.lang.Object,
> java.lang.StringBuffer,
> > - * java.text.FieldPosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo,
> > FieldPosition pos) {
> > @@ -98,6 +96,12 @@
> > throw new
> IllegalArgumentException(String.valueOf(obj));
> > }
> >
> > + /**
> > + * Get the subformat name for the given
> object.
> > + *
> > + * @param subformat Object
> > + * @return subformat name.
> > + */
> > private String getSubformatName(Object
> subformat) {
> > initialize();
> > if
> (reverseSubformats.containsKey(subformat)) {
> > @@ -107,11 +111,8 @@
> > return null;
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
> java.text.Format#parseObject(java.lang.String,
> > - * java.text.ParsePosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public Object parseObject(String source,
> ParsePosition pos) {
> > int start = pos.getIndex();
> > @@ -131,6 +132,12 @@
> > return null;
> > }
> >
> > + /**
> > + * Get the named subformat.
> > + *
> > + * @param subformat name
> > + * @return Format designated by
> <code>name</code>, if any
> > + */
> > private Format getSubformat(String subformat)
> {
> > initialize();
> > if (!styleMap.containsKey(subformat)) {
> > @@ -141,7 +148,7 @@
> > }
> >
> > /**
> > - * Get the locale in use by this {@link
> DateMetaFormatSupport}.
> > + * Get the locale in use by this
> DateMetaFormatSupport.
> > *
> > * @return Locale
> > */
> > @@ -149,6 +156,9 @@
> > return locale;
> > }
> >
> > + /**
> > + * Initialize this DateMetaFormatSupport.
> > + */
> > private synchronized void initialize() {
> > if (!initialized) {
> > styleMap = createStyleMap();
> > @@ -175,7 +185,7 @@
> > * Create a subformat for the given
> <code>DateFormat</code> style
> > * constant.
> > *
> > - * @param style
> > + * @param style DateFormat style constant
> > * @return a DateFormat instance.
> > */
> > protected abstract DateFormat
> createSubformatInstance(int style);
> > @@ -194,8 +204,7 @@
> > * Set whether this metaformat can parse
> date/time pattern formats in
> > * addition to named formats.
> > *
> > - * @param handlePatterns
> > - * the boolean handlePatterns to
> set.
> > + * @param handlePatterns the boolean
> handlePatterns to set.
> > * @return <code>this</code> for fluent
> usage.
> > */
> > public DateMetaFormatSupport
> setHandlePatterns(boolean handlePatterns) {
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> Tue Nov 27 09:27:35 2007
> > @@ -34,7 +34,8 @@
> > *
> > * @author Matt Benson
> > * @since 2.4
> > - * @version $Id$
> > + * @version $Id: DefaultMetaFormatFactory.java
> 592077 2007-11-05 16:47:10Z
> > + * mbenson $
> > */
> > class DefaultMetaFormatFactory {
> >
> > @@ -59,16 +60,32 @@
> > private static final String[] PATTERN_KEYS =
> new String[] { DATE_KEY,
> > TIME_KEY };
> >
> > + /**
> > + * Ordered NameKeyedMetaFormat
> > + */
> > private static class
> OrderedNameKeyedMetaFormat extends
> NameKeyedMetaFormat {
> > private static final long
> serialVersionUID = -7688772075239431055L;
> >
> > private List keys;
> >
> > + /**
> > + * Construct a new
> OrderedNameKeyedMetaFormat.
> > + *
> > + * @param names String[]
> > + * @param formats Format[]
> > + */
> > private
> OrderedNameKeyedMetaFormat(String[] names, Format[]
> formats) {
> > super(createMap(names, formats));
> > this.keys = Arrays.asList(names);
> > }
> >
> > + /**
> > + * Create a map from the specified
> key/value parameters.
> > + *
> > + * @param names keys
> > + * @param formats values
> > + * @return Map
> > + */
> > private static Map createMap(String[]
> names, Format[] formats) {
> >
> Validate.isTrue(ArrayUtils.isSameLength(names,
> formats));
> > HashMap result = new
> HashMap(names.length);
> > @@ -78,6 +95,9 @@
> > return result;
> > }
> >
> > + /**
> > + * {@inheritDoc}
> > + */
> > protected Iterator iterateKeys() {
> > return keys.iterator();
> > }
> > @@ -86,8 +106,7 @@
> > /**
> > * Get a default metaformat for the specified
> Locale.
> > *
> > - * @param locale
> > - * the Locale for the resulting
> Format instance.
> > + * @param locale the Locale for the resulting
> Format instance.
> > * @return Format
> > */
> > public static Format getFormat(final Locale
> locale) {
> > @@ -106,6 +125,12 @@
> > new
> TimeMetaFormat(locale) }) });
> > }
> >
> > + /**
> > + * Get the default format supported by a
> given metaformat.
> > + *
> > + * @param metaformat Format to handle
> parsing.
> > + * @return the default format, if any.
> > + */
> > private static Format getDefaultFormat(Format
> metaformat) {
> > ParsePosition pos = new ParsePosition(0);
> > Object o = metaformat.parseObject("",
> pos);
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -22,13 +22,16 @@
> > import java.util.ArrayList;
> > import java.util.Locale;
> >
> > +import org.apache.commons.lang.StringUtils;
> > import org.apache.commons.lang.Validate;
> >
> > /**
> > * Extends <code>MessageFormat</code> to allow
> pluggable/additional formatting
> > * options for embedded format elements; requires
> a "meta-format", i.e. a
> > * <code>Format</code> capable of parsing and
> formatting other
> > - * <code>Format</code>s.
> > + * <code>Format</code>s. One shortcoming is that
> recursive choice formats do
> > + * not inherit knowledge of the extended
> formatters and are limited to those
> > + * available with
> <code>java.text.MessageFormat</code> (patches
> welcome).
> > *
> > * @author Matt Benson
> > * @since 2.4
> > @@ -53,14 +56,16 @@
> > * behavior identical to a
> <code>java.lang.MessageFormat</code> using
> > * <code>locale</code>.
> > *
> > - * @param locale
> > - * the Locale for the resulting
> Format instance.
> > + * @param locale the Locale for the resulting
> Format instance.
> > * @return Format
> > */
> > public static Format
> createDefaultMetaFormat(Locale locale) {
> > return
> DefaultMetaFormatFactory.getFormat(locale);
> > }
> >
> > + /**
> > + * Conceptual demarcation of methods to parse
> the pattern.
> > + */
> > private static class Parser {
> > private static final String ESCAPED_QUOTE
> = "''";
> > private static final char START_FMT =
> ',';
> > @@ -68,6 +73,12 @@
> > private static final char START_FE = '{';
> > private static final char QUOTE = '\'';
> >
> > + /**
> > + * Strip all formats from the pattern.
> > + *
> > + * @param pattern String to strip
> > + * @return stripped pattern
> > + */
> > private String stripFormats(String
> pattern) {
> > StringBuffer sb = new
> StringBuffer(pattern.length());
> > ParsePosition pos = new
> ParsePosition(0);
> > @@ -98,6 +109,14 @@
> > return sb.toString();
> > }
> >
> > + /**
> > + * Insert formats back into the pattern
> for toPattern() support.
> > + *
> > + * @param pattern source
> > + * @param formats the Formats to insert
> > + * @param metaFormat Format to format the
> Formats
> > + * @return full pattern
> > + */
> > private String insertFormats(String
> pattern, Format[] formats,
> > Format metaFormat) {
> > if (formats == null || formats.length
> == 0) {
> > @@ -117,8 +136,10 @@
> > sb.append(START_FE).append(
> >
> readArgumentIndex(pattern, next(pos)));
> > if (formats[fe] != null) {
> > -
> sb.append(START_FMT).append(
> > -
> metaFormat.format(formats[fe]));
> > + String formatName =
> metaFormat.format(formats[fe]);
> > + if
> (StringUtils.isNotEmpty(formatName)) {
> > +
> sb.append(START_FMT).append(formatName);
> > + }
> > }
> > break;
> > default:
> > @@ -129,6 +150,13 @@
> > return sb.toString();
> > }
> >
> > + /**
> > + * Parse the formats from the given
> pattern.
> > + *
> > + * @param pattern String to parse
> > + * @param metaFormat Format to parse the
> Formats
> > + * @return array of parsed Formats
> > + */
> > private Format[] parseFormats(String
> pattern, Format metaFormat) {
> > ArrayList result = new ArrayList();
> > ParsePosition pos = new
> ParsePosition(0);
> > @@ -142,8 +170,8 @@
> > readArgumentIndex(pattern,
> next(pos));
> > if
> (pattern.charAt(pos.getIndex()) == START_FMT) {
> > seekNonWs(pattern,
> next(pos));
> > -
> result.add(metaFormat.parseObject(pattern, pos));
> > }
> > +
> result.add(metaFormat.parseObject(pattern, pos));
> > seekNonWs(pattern, pos);
> > if
> (pattern.charAt(pos.getIndex()) != END_FE) {
> > throw new
> IllegalArgumentException(
> > @@ -158,6 +186,12 @@
> > return (Format[]) result.toArray(new
> Format[result.size()]);
> > }
> >
> > + /**
> > + * Consume whitespace from the current
> parse position.
> > + *
> > + * @param pattern String to read
> > + * @param pos current position
> > + */
> > private void seekNonWs(String pattern,
> ParsePosition pos) {
> > int len = 0;
> > char[] buffer =
> pattern.toCharArray();
> > @@ -167,11 +201,24 @@
> > } while (len > 0 && pos.getIndex() <
> pattern.length());
> > }
> >
> > + /**
> > + * Convenience method to advance parse
> position by 1
> > + *
> > + * @param pos ParsePosition
> > + * @return <code>pos</code>
> > + */
> > private ParsePosition next(ParsePosition
> pos) {
> > pos.setIndex(pos.getIndex() + 1);
> > return pos;
> > }
> >
> > + /**
> > + * Read the argument index from the
> current format element
> > + *
> > + * @param pattern pattern to parse
> > + * @param pos current parse position
> > + * @return argument index as string
> > + */
> > private String readArgumentIndex(String
> pattern, ParsePosition pos) {
> > int start = pos.getIndex();
> > for (; pos.getIndex() <
> pattern.length(); next(pos)) {
> > @@ -189,6 +236,16 @@
> > "Unterminated format element
> at position " + start);
> > }
> >
> > + /**
> > + * Consume a quoted string, adding it to
> <code>appendTo</code> if
> > + * specified.
> > + *
> > + * @param pattern pattern to parse
> > + * @param pos current parse position
> > + * @param appendTo optional StringBuffer
> to append
> > + * @param escapingOn whether to process
> escaped quotes
> > + * @return <code>appendTo</code>
> > + */
> > private StringBuffer
> appendQuotedString(String pattern,
> > ParsePosition pos, StringBuffer
> appendTo, boolean escapingOn) {
> > int start = pos.getIndex();
> > @@ -200,8 +257,8 @@
> > for (int i = pos.getIndex(); i <
> pattern.length(); i++) {
> > if (escapingOn
> > &&
> pattern.substring(i).startsWith(ESCAPED_QUOTE)) {
> > - appendTo.append(c, lastHold,
> pos.getIndex() - lastHold).append(
> > - QUOTE);
> > + appendTo.append(c, lastHold,
> pos.getIndex() - lastHold)
> > + .append(QUOTE);
> > pos.setIndex(i +
> ESCAPED_QUOTE.length());
> > lastHold = pos.getIndex();
> > continue;
> > @@ -219,11 +276,24 @@
> > "Unterminated quoted string
> at position " + start);
> > }
> >
> > + /**
> > + * Consume quoted string only
> > + *
> > + * @param pattern pattern to parse
> > + * @param pos current parse position
> > + * @param escapingOn whether to process
> escaped quotes
> > + */
> > private void getQuotedString(String
> pattern, ParsePosition pos,
> > boolean escapingOn) {
> > appendQuotedString(pattern, pos,
> null, escapingOn);
> > }
> >
> > + /**
> > + * Consume the entire format found at the
> current position.
> > + *
> > + * @param pattern string to parse
> > + * @param pos current parse position
> > + */
> > private void eatFormat(String pattern,
> ParsePosition pos) {
> > int start = pos.getIndex();
> > int depth = 1;
> > @@ -254,15 +324,28 @@
> > private String strippedPattern;
> >
> > /**
> > - * Create a new ExtendedMessageFormat.
> > + * Create a new ExtendedMessageFormat for the
> default locale.
> > *
> > - * @param pattern
> > - * @param metaFormat
> > - * @throws IllegalArgumentException
> > - * if <code>metaFormat</code> is
> <code>null</code> or in
> > - * case of a bad pattern.
> > + * @param pattern String
> > + * @param metaFormat Format
> > + * @throws IllegalArgumentException if
> <code>metaFormat</code> is
> > + * <code>null</code> or in case
> of a bad pattern.
> > */
> > public ExtendedMessageFormat(String pattern,
> Format metaFormat) {
> > + this(pattern, Locale.getDefault(),
> metaFormat);
> > + }
> > +
> > + /**
> > + * Create a new ExtendedMessageFormat.
> > + *
> > + * @param pattern String
> > + * @param locale Locale
> > + * @param metaFormat Format
> > + * @throws IllegalArgumentException if
> <code>metaFormat</code> is
> > + * <code>null</code> or in case
> of a bad pattern.
> > + */
> > + public ExtendedMessageFormat(String pattern,
> Locale locale,
> > + Format metaFormat) {
> > /*
> > * We have to do some acrobatics here:
> the call to the super constructor
> > * will invoke applyPattern(), but we
> don't want to apply the pattern
> > @@ -270,7 +353,7 @@
> > * our (final) applyPattern
> implementation, and re-call at the end of
> > * this constructor.
> > */
> > - super(pattern);
> > + super(pattern, locale);
> > setMetaFormat(metaFormat);
> > applyPattern(pattern);
> > }
> > @@ -278,8 +361,7 @@
> > /**
> > * Apply the specified pattern.
> > *
> > - * @param pattern
> > - * pattern String
> > + * @param pattern String
> > */
> > public final void applyPattern(String
> pattern) {
> > if (metaFormat == null) {
> > @@ -293,20 +375,20 @@
> > }
> >
> > /**
> > - * Pre-execution hook that allows subclasses
> to customize the behavior of
> > - * the final applyPattern implementation.
> > + * Pre-execution hook by means of which a
> subclass can customize the
> > + * behavior of the final applyPattern
> implementation.
> > *
> > - * @param pattern
> > + * @param pattern String
> > */
> > protected void applyPatternPre(String
> pattern) {
> > // noop
> > }
> >
> > /**
> > - * Post-execution hook that allows subclasses
> to customize the behavior of
> > - * the final applyPattern implementation.
> > + * Post-execution hook by means of which a
> subclass can customize the
> > + * behavior of the final applyPattern
> implementation.
> > *
> > - * @param pattern
> > + * @param pattern String
> > */
> > protected void applyPatternPost(String
> pattern) {
> > // noop
> > @@ -335,8 +417,7 @@
> > * Set the meta-format. Has no effect until a
> subsequent call to
> > * {@link #applyPattern(String)}.
> > *
> > - * @param metaFormat
> > - * the Format metaFormat to set.
> > + * @param metaFormat the Format metaFormat to
> set.
> > */
> > public synchronized void setMetaFormat(Format
> metaFormat) {
> > Validate.notNull(metaFormat, "metaFormat
> is null");
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> Tue Nov 27 09:27:35 2007
> > @@ -24,7 +24,8 @@
> > import java.util.Map;
> >
> > /**
> > - * metaFormat support.
> > + * Support class for implementing Formats that
> parse/format other Formats, with
> > + * specific support for interoperability with
> ExtendedMessageFormat.
> > *
> > * @see ExtendedMessageFormat
> > * @author Matt Benson
> > @@ -40,11 +41,9 @@
> > /**
> > * Invert the specified Map.
> > *
> > - * @param map
> > - * the Map to invert.
> > + * @param map the Map to invert.
> > * @return a new Map instance.
> > - * @throws NullPointerException
> > - * if <code>map</code> is
> <code>null</code>.
> > + * @throws NullPointerException if
> <code>map</code> is <code>null</code>.
> > */
> > protected Map invert(Map map) {
> > Map result = new HashMap(map.size());
> > @@ -58,8 +57,8 @@
> > /**
> > * Find the end of the subformat.
> > *
> > - * @param source
> > - * @param pos
> > + * @param source String
> > + * @param pos current parse position
> > */
> > protected void seekFormatElementEnd(String
> source, ParsePosition pos) {
> > int depth = 1;
> > @@ -85,8 +84,7 @@
> > /**
> > * Advance the parse index by 1.
> > *
> > - * @param pos
> > - * the ParsePosition to advance.
> > + * @param pos the ParsePosition to advance.
> > * @return <code>pos</code>
> > */
> > protected ParsePosition next(ParsePosition
> pos) {
> > @@ -100,10 +98,8 @@
> > * occurs <code>pos.getErrorIndex()</code>
> will contain a value >= zero,
> > * indicating the index at which the parse
> error occurred.
> > *
> > - * @param source
> > - * String to parse
> > - * @param pos
> > - * ParsePosition marking index
> into <code>source</code>
> > + * @param source String to parse
> > + * @param pos ParsePosition marking index
> into <code>source</code>
> > * @return Object parsed
> > */
> > public abstract Object parseObject(String
> source, ParsePosition pos);
> > @@ -112,19 +108,14 @@
> > * Format the specified object, appending to
> the given StringBuffer, and
> > * optionally respecting the specified
> FieldPosition.
> > *
> > - * @param obj
> > - * the object to format
> > - * @param toAppendTo
> > - * the StringBuffer to which the
> formatted object should be
> > - * appended
> > - * @param pos
> > - * FieldPosition associated with
> <code>obj</code>
> > + * @param obj the object to format
> > + * @param toAppendTo the StringBuffer to
> which the formatted object should
> > + * be appended
> > + * @param pos FieldPosition associated with
> <code>obj</code>
> > * @return <code>toAppendTo</code>
> > - * @throws NullPointerException
> > - * if <code>toAppendTo</code> or
> <code>pos</code> is
> > - * <code>null</code>
> > - * @throws IllegalArgumentException
> > - * if unable to format
> <code>obj</code>
> > + * @throws NullPointerException if
> <code>toAppendTo</code> or
> > + * <code>pos</code> is
> <code>null</code>
> > + * @throws IllegalArgumentException if unable
> to format <code>obj</code>
> > */
> > public abstract StringBuffer format(Object
> obj, StringBuffer toAppendTo,
> > FieldPosition pos);
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -50,7 +50,7 @@
> > /**
> > * Add a delegate format.
> > *
> > - * @param delegate
> > + * @param delegate Format
> > * @return the builder
> > */
> > public Builder add(Format delegate) {
> > @@ -82,17 +82,19 @@
> > /**
> > * Create a new MultiFormat.
> > *
> > - * @param delegates
> > + * @param delegates Formats
> > */
> > public MultiFormat(Format[] delegates) {
> > setDelegates(delegates);
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > + /**
> > + * Format <code>obj</code>; append to
> <code>toAppendTo</code>.
> > *
> > - * @see
> java.text.Format#format(java.lang.Object,
> java.lang.StringBuffer,
> > - * java.text.FieldPosition)
> > + * @param obj Object to format
> > + * @param toAppendTo StringBuffer to append
> to
> > + * @param pos FieldPosition
> > + * @return <code>toAppendTo</code>
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo,
> > FieldPosition pos) {
> > @@ -108,11 +110,13 @@
> > + obj);
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > + /**
> > + * Parse an object by trying each delegate.
> > *
> > - * @see
> java.text.Format#parseObject(java.lang.String,
> > - * java.text.ParsePosition)
> > + * @param source string
> > + * @param pos current parse position
> > + * @return value returned from first delegate
> that does not encounter an
> > + * error.
> > */
> > public Object parseObject(String source,
> ParsePosition pos) {
> > int start = pos.getIndex();
> > @@ -133,8 +137,7 @@
> > /**
> > * Set the delegates.
> > *
> > - * @param delegates
> > - * the Format[] delegates to set.
> > + * @param delegates the Format[] delegates to
> set.
> > */
> > public void setDelegates(Format[] delegates)
> {
> > Validate.noNullElements(delegates,
> > @@ -151,6 +154,11 @@
> > return delegates;
> > }
> >
> > + /**
> > + * Validate and return our delegates.
> > + *
> > + * @return delegate Formats, not null
> > + */
> > private Format[] getValidDelegates() {
> > Format[] result = getDelegates();
> > Validate.notEmpty(result, "No delegate
> Formats configured");
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -57,8 +57,8 @@
> > /**
> > * Add the specified format with the
> specified string key.
> > *
> > - * @param key
> > - * @param format
> > + * @param key String
> > + * @param format Format
> > * @return Builder reference to this
> object
> > */
> > public Builder put(String key, Format
> format) {
> > @@ -80,16 +80,15 @@
> >
> > /**
> > * Create a new NameKeyedMetaFormat.
> > + *
> > + * @param keyedFormats String->Format map.
> > */
> > public NameKeyedMetaFormat(Map keyedFormats)
> {
> > this.keyedFormats = keyedFormats;
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.MetaFormatSupport#format(java.lang.Object,
> > - * java.lang.StringBuffer,
> java.text.FieldPosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo,
> > FieldPosition pos) {
> > @@ -117,11 +116,8 @@
> > throw new
> IllegalArgumentException("Cannot format " + obj);
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.MetaFormatSupport#parseObject(java.lang.String,
> > - * java.text.ParsePosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public Object parseObject(String source,
> ParsePosition pos) {
> > int start = pos.getIndex();
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -56,18 +56,15 @@
> > /**
> > * Create a new NumberMetaFormat.
> > *
> > - * @param locale
> > + * @param locale Locale
> > */
> > public NumberMetaFormat(Locale locale) {
> > super();
> > this.locale = locale;
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.AbstractMetaFormat#format(java.lang.Object,
> > - * java.lang.StringBuffer,
> java.text.FieldPosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo,
> > FieldPosition pos) {
> > @@ -85,11 +82,8 @@
> > throw new IllegalArgumentException();
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
> java.text.Format#parseObject(java.lang.String,
> > - * java.text.ParsePosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public Object parseObject(String source,
> ParsePosition pos) {
> > int start = pos.getIndex();
> > @@ -115,6 +109,9 @@
> > return locale;
> > }
> >
> > + /**
> > + * Initialize this NumberMetaFormat.
> > + */
> > private synchronized void initialize() {
> > if (subformats == null) {
> > subformats = new HashMap();
> >
> > Modified:
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> Tue Nov 27 09:27:35 2007
> > @@ -41,30 +41,28 @@
> > /**
> > * Create a new NumberMetaFormat.
> > *
> > - * @param locale
> > + * @param locale Locale
> > */
> > public TimeMetaFormat(Locale locale) {
> > super(locale);
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> > - */
> > + /** {@inheritDoc} */
> > protected DateFormat
> createSubformatInstance(int style) {
> > return DateFormat.getTimeInstance(style,
> getLocale());
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.AbstractDateMetaFormat#createReverseStyleMap()
> > - */
> > + /** {@inheritDoc} */
> > protected Map createInverseStyleMap() {
> > Map invertMe = createStyleMap();
> > invertMe.remove(DEFAULT);
> > - invertMe.remove(FULL);
> > + DateFormat longDf =
> DateFormat.getTimeInstance(DateFormat.LONG,
> > + getLocale());
> > + DateFormat fullDf =
> DateFormat.getTimeInstance(DateFormat.FULL,
> > + getLocale());
> > + if (fullDf.equals(longDf)) {
> > + invertMe.remove(FULL);
> > + }
> > return invert(invertMe);
> > }
> > }
> >
> > Modified:
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> Tue Nov 27 09:27:35 2007
> > @@ -16,10 +16,18 @@
> > */
> > package org.apache.commons.lang.text;
> >
> > +import java.text.ChoiceFormat;
> > import java.text.DateFormat;
> > +import java.text.DecimalFormat;
> > +import java.text.DecimalFormatSymbols;
> > +import java.text.FieldPosition;
> > +import java.text.Format;
> > import java.text.MessageFormat;
> > +import java.text.NumberFormat;
> > +import java.text.SimpleDateFormat;
> > import java.util.Calendar;
> > import java.util.GregorianCalendar;
> > +import java.util.Locale;
> >
> > import junit.framework.TestCase;
> >
> > @@ -32,7 +40,7 @@
> > * @version $Id$
> > */
> > public abstract class AbstractMessageFormatTest
> extends TestCase {
> > - protected static final Object[] NUMBERS = {
> new Double(0.1),
> > + protected static final Double[] NUMBERS = {
> new Double(0.1),
> > new Double(1.1), new Double(2.1) };
> >
> > protected static final Object[] DATES = {
> > @@ -43,18 +51,30 @@
> > new GregorianCalendar(1970,
> Calendar.MARCH, 03, 18, 45, 50)
> > .getTime() };
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see junit.framework.TestCase#setUp()
> > + protected Locale locale;
> > +
> > + /**
> > + * {@inheritDoc}
> > */
> > protected void setUp() throws Exception {
> > super.setUp();
> > - // tests depend on Locale.US
> > -
> java.util.Locale.setDefault(java.util.Locale.US);
> > + this.locale = getLocale();
> > }
> >
> > - protected abstract MessageFormat
> createMessageFormat(String pattern);
> > + /**
> > + * Create a MessageFormat.
> > + * @param pattern
> > + * @param locale
> > + * @return
> > + */
> > + protected abstract MessageFormat
> createMessageFormat(String pattern,
> > + Locale locale);
> > +
> > + /**
> > + * Get the Locale to use.
> > + * @return
> > + */
> > + protected abstract Locale getLocale();
> >
> > protected void doAssertions(String expected,
> String pattern, Object[] args) {
> > doAssertions(expected, pattern, args,
> pattern);
> > @@ -62,235 +82,213 @@
> >
> > protected void doAssertions(String expected,
> String pattern, Object[] args,
> > String toPattern) {
> > - MessageFormat f =
> createMessageFormat(pattern);
> > + MessageFormat f =
> createMessageFormat(pattern, locale);
> > assertEquals(expected, f.format(args));
> > assertEquals(toPattern, f.toPattern());
> > }
> >
> > - public void testPlain() {
> > + protected void doAssertions(Format format,
> Object[] args) {
> > + doAssertions(format, args, null);
> > + }
> > +
> > + protected void doAssertions(Format format,
> Object[] args, String formatName) {
> > + doAssertions(format, args, formatName,
> null);
> > + }
> > +
> > + protected void doAssertions(Format format,
> Object[] args,
> > + String formatName, String
> decodeFormatName) {
> > + StringBuffer pattern = new
> StringBuffer();
> > + StringBuffer expected = new
> StringBuffer();
> > + StringBuffer decodePattern = new
> StringBuffer();
> > + for (int i = 0; i < args.length; i++) {
> > + pattern.append(i).append(":
> {").append(i);
> > + if (formatName != null) {
> > +
> pattern.append(',').append(formatName);
> > + }
> > + pattern.append("}; ");
> > + expected.append(i).append(": ");
> > + if (format != null) {
> > + format.format(args[i], expected,
> new FieldPosition(0));
> > + } else {
> > +
> expected.append(String.valueOf(args[i]));
> > + }
> > + expected.append("; ");
> > + decodePattern.append(i).append(":
> {").append(i);
> > + if (decodeFormatName != null ||
> formatName != null) {
> > + decodePattern.append(',').append(
> > + decodeFormatName == null
> ? formatName
> > + :
> decodeFormatName);
> > + }
> > + decodePattern.append("}; ");
> > + }
> > + doAssertions(expected.toString(),
> pattern.toString(), args,
> > + decodePattern.toString());
> > + }
> > +
> > + public void testNoFormatElements() {
> > StringBuffer pattern = new
> StringBuffer();
> > for (int i = 0; i < NUMBERS.length; i++)
> {
> > if (i > 0) {
> > pattern.append("; ");
> > }
> > - pattern.append("Object
> ").append(i).append(": ").append(NUMBERS[i]);
> > + pattern.append(i).append(":
> ").append(NUMBERS[i]);
> > }
> > String p = pattern.toString();
> > - doAssertions(p, p, NUMBERS);
> > + doAssertions(p, p, null);
> > }
> >
> > - public void testSimple() {
> > - doAssertions("Object 0: 0.1; Object 1:
> 1.1; Object 2: 2.1",
> > - "Object 0: {0}; Object 1: {1};
> Object 2: {2}", NUMBERS);
> > + public void testSimpleStrings() {
> > + doAssertions(null, new Object[] { "foo",
> "bar", "baz"}, null);
> > + }
> > +
> > + public void testSimpleNumbers() {
> > +
> doAssertions(NumberFormat.getInstance(locale),
> NUMBERS, null);
> > + }
> > +
> > + public void testSimpleDates() {
> > +
>
doAssertions(DateFormat.getDateTimeInstance(DateFormat.SHORT,
> > + DateFormat.SHORT, locale), DATES,
> null);
> > }
> >
> > public void testNumber() {
> > - doAssertions(
> > - "Number 0: 0.1; Number 1: 1.1;
> Number 2: 2.1",
> > - "Number 0: {0,number}; Number 1:
> {1,number}; Number 2: {2,number}",
> > - NUMBERS);
> > +
> doAssertions(NumberFormat.getInstance(locale),
> NUMBERS, "number");
> > }
> >
> > public void testNumberLooseFormatting() {
> > - doAssertions(
> > - "Number 0: 0.1; Number 1: 1.1;
> Number 2: 2.1",
> > - "Number 0: {0, number }; Number
> 1: {1, number }; Number 2: {2, number }",
> > - NUMBERS,
> > - "Number 0: {0,number}; Number 1:
> {1,number}; Number 2: {2,number}");
> > +
> doAssertions(NumberFormat.getInstance(locale),
> NUMBERS, " number ",
> > + "number");
> > }
> >
> > public void testInteger() {
> > - doAssertions(
> > - "Number 0: 0; Number 1: 1; Number
> 2: 2",
> > - "Number 0: {0,number,integer};
> Number 1: {1,number,integer}; Number 2:
> {2,number,integer}",
> > - NUMBERS);
> > +
>
doAssertions(NumberFormat.getIntegerInstance(locale),
> NUMBERS,
> > + "number,integer");
> > }
> >
> > public void testIntegerLooseFormatting() {
> > - doAssertions(
> > - "Number 0: 0; Number 1: 1; Number
> 2: 2",
> > - "Number 0: {0, number , integer
> }; Number 1: {1, number , integer }; Number 2: {2,
> number , integer }",
> > - NUMBERS,
> > - "Number 0: {0,number,integer};
> Number 1: {1,number,integer}; Number 2:
> {2,number,integer}");
> > +
>
doAssertions(NumberFormat.getIntegerInstance(locale),
> NUMBERS,
> > + " number , integer ",
> "number,integer");
> > }
> >
> > public void testCurrency() {
> > - doAssertions(
> > - "Number 0: $0.10; Number 1:
> $1.10; Number 2: $2.10",
> > - "Number 0: {0,number,currency};
> Number 1: {1,number,currency}; Number 2:
> {2,number,currency}",
> > - NUMBERS);
> > +
>
doAssertions(NumberFormat.getCurrencyInstance(locale),
> NUMBERS,
> > + "number,currency");
> > }
> >
> > public void testPercent() {
> > - doAssertions(
> > - "Number 0: 10%; Number 1: 110%;
> Number 2: 210%",
> > - "Number 0: {0,number,percent};
> Number 1: {1,number,percent}; Number 2:
> {2,number,percent}",
> > - NUMBERS);
> > +
>
doAssertions(NumberFormat.getPercentInstance(locale),
> NUMBERS,
> > + "number,percent");
> > }
> >
> > public void testNumberPattern() {
> > - doAssertions(
> > - "Number 0: 000.100; Number 1:
> 001.100; Number 2: 002.100",
> > - "Number 0: {0,number,#000.000};
> Number 1: {1,number,#000.000}; Number 2:
> {2,number,#000.000}",
> > - NUMBERS);
> > + doAssertions(new
> DecimalFormat("#000.000", new DecimalFormatSymbols(
> > + locale)), NUMBERS,
> "number,#000.000");
> > }
> >
> > public void testDate() {
> > - doAssertions(
> > - "Date 0: Jan 1, 1970; Date 1: Feb
> 2, 1970; Date 2: Mar 3, 1970",
> > - "Date 0: {0,date}; Date 1:
> {1,date}; Date 2: {2,date}", DATES);
> > +
>
doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT,
> locale),
> > + DATES, "date");
> > }
> >
> > public void testDateLooseFormatting() {
> > - doAssertions(
> > - "Date 0: Jan 1, 1970; Date 1: Feb
> 2, 1970; Date 2: Mar 3, 1970",
> > - "Date 0: {0, date }; Date 1: {1,
> date }; Date 2: {2, date }",
> > - DATES, "Date 0: {0,date}; Date 1:
> {1,date}; Date 2: {2,date}");
> > +
>
doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT,
> locale),
> > + DATES, " date ", "date");
> > }
> >
> > public void testShortDate() {
> > - doAssertions(
> > - "Date 0: 1/1/70; Date 1: 2/2/70;
> Date 2: 3/3/70",
> > - "Date 0: {0,date,short}; Date 1:
> {1,date,short}; Date 2: {2,date,short}",
> > - DATES);
> > + DateFormat shortDf =
> DateFormat.getDateInstance(DateFormat.SHORT,
> locale);
> > + DateFormat defaultDf =
> DateFormat.getDateInstance(DateFormat.DEFAULT,
> locale);
> > + doAssertions(shortDf, DATES,
> "date,short",
> > + shortDf.equals(defaultDf) ?
> "date" : "date,short");
> > }
> >
> > public void testShortDateLooseFormatting() {
> > - doAssertions(
> > - "Date 0: 1/1/70; Date 1: 2/2/70;
> Date 2: 3/3/70",
> > - "Date 0: {0, date , short }; Date
> 1: {1, date , short }; Date 2: {2, date , short
> }",
> > - DATES,
> > - "Date 0: {0,date,short}; Date 1:
> {1,date,short}; Date 2: {2,date,short}");
> > + DateFormat shortDf =
> DateFormat.getDateInstance(DateFormat.SHORT,
> locale);
> > + DateFormat defaultDf =
> DateFormat.getDateInstance(DateFormat.DEFAULT,
> locale);
> > + doAssertions(shortDf, DATES, " date ,
> short ",
> > + shortDf.equals(defaultDf) ?
> "date" : "date,short");
> > }
> >
> > public void testMediumDate() {
> > - doAssertions(
> > - "Date 0: Jan 1, 1970; Date 1: Feb
> 2, 1970; Date 2: Mar 3, 1970",
> > - "Date 0: {0,date,medium}; Date 1:
> {1,date,medium}; Date 2: {2,date,medium}",
> > - DATES, "Date 0: {0,date}; Date 1:
> {1,date}; Date 2: {2,date}");
> > +
>
doAssertions(DateFormat.getDateInstance(DateFormat.MEDIUM,
> locale),
> > + DATES, "date,medium", "date");
> > }
> >
> > public void testLongDate() {
> > - doAssertions(
> > - "Date 0: January 1, 1970; Date 1:
> February 2, 1970; Date 2: March 3, 1970",
> > - "Date 0: {0,date,long}; Date 1:
> {1,date,long}; Date 2: {2,date,long}",
> > - DATES);
> > + DateFormat longDf =
> DateFormat.getDateInstance(DateFormat.LONG, locale);
> > + DateFormat defaultDf =
> DateFormat.getDateInstance(DateFormat.DEFAULT,
> > + locale);
> > + doAssertions(longDf, DATES, "date,long",
> > + longDf.equals(defaultDf) ? "date"
> : "date,long");
> > }
> >
> > public void testFullDate() {
> > - doAssertions(
> > - "Date 0: Thursday, January 1,
> 1970; Date 1: Monday, February 2, 1970; Date 2:
> Tuesday, March 3, 1970",
> > - "Date 0: {0,date,full}; Date 1:
> {1,date,full}; Date 2: {2,date,full}",
> > - DATES);
> > + DateFormat fullDf =
> DateFormat.getDateInstance(DateFormat.FULL, locale);
> > + DateFormat longDf =
> DateFormat.getDateInstance(DateFormat.LONG, locale);
> > + doAssertions(fullDf, DATES, "date,full",
> > + fullDf.equals(longDf) ?
> "date,long" : "date,full");
> > }
> >
> > public void testDatePattern() {
> > - doAssertions(
> > - "Date 0: AD1970.1; Date 1:
> AD1970.33; Date 2: AD1970.62",
> > - "Date 0: {0,date,Gyyyy.D}; Date
> 1: {1,date,Gyyyy.D}; Date 2: {2,date,Gyyyy.D}",
> > - DATES);
> > + doAssertions(new
> SimpleDateFormat("Gyyyy.D", locale), DATES,
> > + "date,Gyyyy.D");
> > }
> >
> > public void testTime() {
> > - doAssertions(
> > - "Time 0: 12:15:20 AM; Time 1:
> 12:30:35 PM; Time 2: 6:45:50 PM",
> > - "Time 0: {0,time}; Time 1:
> {1,time}; Time 2: {2,time}", DATES);
> > +
>
doAssertions(DateFormat.getTimeInstance(DateFormat.DEFAULT,
> locale),
> > + DATES, "time");
> > }
> >
> > public void testShortTime() {
> > - doAssertions(
> > - "Time 0: 12:15 AM; Time 1: 12:30
> PM; Time 2: 6:45 PM",
> > - "Time 0: {0,time,short}; Time 1:
> {1,time,short}; Time 2: {2,time,short}",
> > - DATES);
> > +
>
doAssertions(DateFormat.getTimeInstance(DateFormat.SHORT,
> locale),
> > + DATES, "time,short");
> > }
> >
> > public void testMediumTime() {
> > - doAssertions(
> > - "Time 0: 12:15:20 AM; Time 1:
> 12:30:35 PM; Time 2: 6:45:50 PM",
> > - "Time 0: {0,time,medium}; Time 1:
> {1,time,medium}; Time 2: {2,time,medium}",
> > - DATES, "Time 0: {0,time}; Time 1:
> {1,time}; Time 2: {2,time}");
> > +
>
doAssertions(DateFormat.getTimeInstance(DateFormat.MEDIUM,
> locale),
> > + DATES, "time,medium", "time");
> > }
> >
> > public void testLongTime() {
> > - DateFormat df =
> DateFormat.getTimeInstance(DateFormat.LONG);
> > - StringBuffer expected = new
> StringBuffer();
> > - for (int i = 0; i < DATES.length; i++) {
> > - if (i > 0) {
> > - expected.append("; ");
> > - }
> > - expected.append("Time
> ").append(i).append(": ").append(
> > - df.format(DATES[i]));
> > - }
> > - doAssertions(
> > - expected.toString(),
> > - "Time 0: {0,time,long}; Time 1:
> {1,time,long}; Time 2: {2,time,long}",
> > - DATES);
> > +
>
doAssertions(DateFormat.getTimeInstance(DateFormat.LONG,
> locale),
> > + DATES, "time,long");
> > }
> >
> > public void testFullTime() {
> > - DateFormat df =
> DateFormat.getTimeInstance(DateFormat.FULL);
> > - StringBuffer expected = new
> StringBuffer();
> > - for (int i = 0; i < DATES.length; i++) {
> > - if (i > 0) {
> > - expected.append("; ");
> > - }
> > - expected.append("Time
> ").append(i).append(": ").append(
> > - df.format(DATES[i]));
> > - }
> > - doAssertions(
> > - expected.toString(),
> > - "Time 0: {0,time,full}; Time 1:
> {1,time,full}; Time 2: {2,time,full}",
> > - DATES,
> > - "Time 0: {0,time,long}; Time 1:
> {1,time,long}; Time 2: {2,time,long}");
> > + DateFormat fullDf =
> DateFormat.getTimeInstance(DateFormat.FULL, locale);
> > + DateFormat longDf =
> DateFormat.getTimeInstance(DateFormat.LONG, locale);
> > + doAssertions(fullDf, DATES, "time,full",
> > + fullDf.equals(longDf) ?
> "time,long" : "time,full");
> > }
> >
> > public void testTimePattern() {
> > - doAssertions(
> > - "Time 0: AM01520; Time 1:
> PM123035; Time 2: PM184550",
> > - "Time 0: {0,time,aHms}; Time 1:
> {1,time,aHms}; Time 2: {2,time,aHms}",
> > - DATES,
> > - "Time 0: {0,date,aHms}; Time 1:
> {1,date,aHms}; Time 2: {2,date,aHms}");
> > + doAssertions(new SimpleDateFormat("aHms",
> locale), DATES, "date,aHms");
> > }
> >
> > public void testChoice() {
> > - String choice = "0.0#x|1.0#y|2.0#z";
> > - StringBuffer pattern = new
> StringBuffer();
> > - for (int i = 0; i < 3; i++) {
> > - if (i > 0) {
> > - pattern.append("; ");
> > - }
> > - pattern.append("Choice
> ").append(i).append(": {").append(i).append(
> > -
> ",choice,").append(choice).append("}");
> > - }
> > - doAssertions("Choice 0: x; Choice 1: y;
> Choice 2: z", pattern
> > - .toString(), NUMBERS);
> > + doAssertions(new
> ChoiceFormat("0.0#x|1.0#y|2.0#z"), NUMBERS,
> > + "choice,0.0#x|1.0#y|2.0#z");
> > }
> >
> > public void testChoiceLooseFormatting() {
> > - String choice = "0.0#x |1.0#y |2.0#z ";
> > - StringBuffer pattern = new
> StringBuffer();
> > - for (int i = 0; i < 3; i++) {
> > - if (i > 0) {
> > - pattern.append("; ");
> > - }
> > - pattern.append("Choice
> ").append(i).append(": {").append(i).append(
> > -
> ",choice,").append(choice).append("}");
> > - }
> > - doAssertions("Choice 0: x ; Choice 1: y ;
> Choice 2: z ", pattern
> > - .toString(), NUMBERS);
> > + doAssertions(new ChoiceFormat("0.0#x
> |1.0#y |2.0#z "), NUMBERS,
> > + "choice,0.0#x |1.0#y |2.0#z ");
> > }
> >
> > public void testChoiceRecursive() {
> > - String choice =
> "0.0#{0}|1.0#{1}|2.0#{2}";
> > - StringBuffer pattern = new
> StringBuffer();
> > - for (int i = 0; i < 3; i++) {
> > + NumberFormat nf =
> NumberFormat.getInstance(locale);
> > + StringBuffer choice = new StringBuffer();
> > + StringBuffer format = new
> StringBuffer("choice,");
> > + for (int i = 0; i < NUMBERS.length; i++)
> {
> > + Double d = new
> Double(Math.floor(NUMBERS[i].doubleValue()));
> > if (i > 0) {
> > - pattern.append("; ");
> > + choice.append('|');
> > + format.append('|');
> > }
> > - pattern.append("Choice
> ").append(i).append(": {").append(i).append(
> > -
> ",choice,").append(choice).append("}");
> > + choice.append(d).append('#').append(
> > +
> nf.format(NUMBERS[i].doubleValue()));
> > +
>
format.append(d).append('#').append('{').append(i).append('}');
> > }
> > - doAssertions("Choice 0: 0.1; Choice 1:
> 1.1; Choice 2: 2.1", pattern
> > - .toString(), NUMBERS);
> > + doAssertions(new
> ChoiceFormat(choice.toString()), NUMBERS, format
> > + .toString());
> > }
> > }
> >
> > Modified:
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> Tue Nov 27 09:27:35 2007
> > @@ -20,21 +20,161 @@
> > import java.util.Locale;
> >
> > /**
> > - * Baseline tests for {@link
> ExtendedMessageFormat}
> > + * Baseline tests for ExtendedMessageFormat
> > *
> > * @author Matt Benson
> > * @since 2.4
> > * @version $Id$
> > */
> > -public class ExtendedMessageFormatBaselineTest
> extends AbstractMessageFormatTest {
> > +public abstract class
> ExtendedMessageFormatBaselineTest extends
> > + AbstractMessageFormatTest {
> >
> > - /*
> > - * (non-Javadoc)
> > + /**
> > + * Tests for <code>Locale.US</code>
> > *
> > - * @see
>
org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > + * @author mbenson
> > */
> > - protected MessageFormat
> createMessageFormat(String pattern) {
> > - return new ExtendedMessageFormat(pattern,
>
ExtendedMessageFormat.createDefaultMetaFormat(Locale.US));
> > + public static class US extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.US;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.UK</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class UK extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.UK;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.GERMANY</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class DE extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.GERMANY;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.ITALY</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class IT extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.ITALY;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.JAPAN</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class JP extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.JAPAN;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.CHINA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class CN extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.CHINA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.CANADA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class CA extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.CANADA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.FRANCE</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class FR extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.FRANCE;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.KOREA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class KR extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.KOREA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.TAIWAN</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class TW extends
> ExtendedMessageFormatBaselineTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.TAIWAN;
> > + }
> > + }
> > +
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected MessageFormat
> createMessageFormat(String pattern, Locale locale) {
> > + return new ExtendedMessageFormat(pattern,
> locale, ExtendedMessageFormat
> > +
> .createDefaultMetaFormat(locale));
> > }
> >
> > }
> >
> > Modified:
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> Tue Nov 27 09:27:35 2007
> > @@ -16,11 +16,13 @@
> > */
> > package org.apache.commons.lang.text;
> >
> > +import java.text.DateFormat;
> > import java.text.FieldPosition;
> > import java.text.Format;
> > import java.text.MessageFormat;
> > import java.text.ParsePosition;
> > import java.util.Calendar;
> > +import java.util.Date;
> > import java.util.GregorianCalendar;
> > import java.util.Locale;
> >
> > @@ -31,22 +33,162 @@
> > * @since 2.4
> > * @version $Id$
> > */
> > -public class MessageFormatExtensionTest extends
> AbstractMessageFormatTest {
> > +public abstract class MessageFormatExtensionTest
> extends
> > + AbstractMessageFormatTest {
> > + /**
> > + * Tests for <code>Locale.US</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class US extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.US;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.UK</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class UK extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.UK;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.GERMANY</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class DE extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.GERMANY;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.ITALY</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class IT extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.ITALY;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.JAPAN</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class JP extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.JAPAN;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.CHINA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class CN extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.CHINA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.CANADA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class CA extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.CANADA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.FRANCE</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class FR extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.FRANCE;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.KOREA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class KR extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.KOREA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.TAIWAN</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class TW extends
> MessageFormatExtensionTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.TAIWAN;
> > + }
> > + }
> >
> > static class ProperNameCapitalizationFormat
> extends Format {
> > private static final long
> serialVersionUID = -6081911520622186866L;
> > private static final StrMatcher MATCH =
> StrMatcher
> > .charSetMatcher(" ,.");
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
> java.text.Format#format(java.lang.Object,
> > - * java.lang.StringBuffer,
> java.text.FieldPosition)
> > + /**
> > + * {@inheritDoc}
> > */
> > public StringBuffer format(Object obj,
> StringBuffer toAppendTo,
> > FieldPosition fpos) {
> > - char[] buffer =
> String.valueOf(obj).toCharArray();
> > + if (!(obj instanceof String)) {
> > + throw new
> IllegalArgumentException();
> > + }
> > + char[] buffer = ((String)
> obj).toCharArray();
> > ParsePosition pos = new
> ParsePosition(0);
> > while (pos.getIndex() <
> buffer.length) {
> > char c = buffer[pos.getIndex()];
> > @@ -91,17 +233,17 @@
> > }
> > }
> >
> > - /*
> > - * (non-Javadoc)
> > - *
> > - * @see
>
org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > + /**
> > + * {@inheritDoc}
> > */
> > - protected MessageFormat
> createMessageFormat(String pattern) {
> > - return new ExtendedMessageFormat(pattern,
> new MultiFormat.Builder()
> > -
>
.add(ExtendedMessageFormat.createDefaultMetaFormat(Locale.US)).add(
> > + protected MessageFormat
> createMessageFormat(String pattern, Locale locale) {
> > + return new ExtendedMessageFormat(pattern,
> locale,
> > + new MultiFormat.Builder().add(
> > new
> NameKeyedMetaFormat.Builder().put("properName",
> > new
> ProperNameCapitalizationFormat())
> > -
> .toNameKeyedMetaFormat()).toMultiFormat());
> > +
> .toNameKeyedMetaFormat()).add(
> > +
>
ExtendedMessageFormat.createDefaultMetaFormat(locale))
> > + .toMultiFormat());
> > }
> >
> > public void testProperName() {
> > @@ -111,10 +253,23 @@
> > }
> >
> > public void testMixed() {
> > - doAssertions("John Q. Public was born on
> Thursday, January 1, 1970.",
> > - "{0,properName} was born on
> {1,date,full}.", new Object[] {
> > + StringBuffer expected = new
> StringBuffer("John Q. Public was born on ");
> > + Date dob = new GregorianCalendar(1970,
> Calendar.JANUARY, 01, 0, 15, 20)
> > + .getTime();
> > + DateFormat longDf =
> DateFormat.getDateInstance(DateFormat.LONG, locale);
> > + longDf.format(dob, expected, new
> FieldPosition(0));
> > + expected.append('.');
> > + String pattern = "{0,properName} was born
> on {1,date,long}.";
> > + StringBuffer toPattern = new
> StringBuffer(pattern);
> > + if
>
(longDf.equals(DateFormat.getDateInstance(DateFormat.DEFAULT,
> locale))) {
> > + int idx = pattern.indexOf(",long");
> > + toPattern.delete(idx, idx +
> ",long".length());
> > + }
> > + doAssertions(expected.toString(),
> > + pattern, new Object[] {
> > "john q. public",
> > new
> GregorianCalendar(1970, Calendar.JANUARY, 01, 0,
> > - 15, 20).getTime()
> });
> > + 15, 20).getTime()
> }, toPattern.toString());
> > }
> > +
> > }
> >
> > Modified:
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> Tue Nov 27 09:27:35 2007
> > @@ -10,13 +10,152 @@
> > * @since 2.4
> > * @version $Id$
> > */
> > -public class MessageFormatTest extends
> AbstractMessageFormatTest {
> > - /*
> > - * (non-Javadoc)
> > +public abstract class MessageFormatTest extends
> AbstractMessageFormatTest {
> > +
> > + /**
> > + * Tests for <code>Locale.US</code>
> > *
> > - * @see
>
org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> > + * @author mbenson
> > */
> > - protected MessageFormat
> createMessageFormat(String pattern) {
> > - return new MessageFormat(pattern,
> Locale.US);
> > + public static class US extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.US;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.UK</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class UK extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.UK;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.GERMANY</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class DE extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.GERMANY;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.ITALY</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class IT extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.ITALY;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.JAPAN</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class JP extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.JAPAN;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.CHINA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class CN extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.CHINA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.CANADA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class CA extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.CANADA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.FRANCE</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class FR extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.FRANCE;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.KOREA</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class KR extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.KOREA;
> > + }
> > + }
> > +
> > + /**
> > + * Tests for <code>Locale.TAIWAN</code>
> > + *
> > + * @author mbenson
> > + */
> > + public static class TW extends
> MessageFormatTest {
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected Locale getLocale() {
> > + return Locale.TAIWAN;
> > + }
> > + }
> > +
> > + /**
> > + * {@inheritDoc}
> > + */
> > + protected MessageFormat
> createMessageFormat(String pattern, Locale locale) {
> > + return new MessageFormat(pattern,
> locale);
> > }
> > }
> >
> > Modified:
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> > URL:
>
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java?rev=598707&r1=598706&r2=598707&view=diff
> >
>
==============================================================================
> > ---
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> (original)
> > +++
>
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> Tue Nov 27 09:27:35 2007
> > @@ -57,9 +57,36 @@
> >
> suite.addTest(StrSubstitutorTest.suite());
> > suite.addTest(StrTokenizerTest.suite());
> >
> suite.addTestSuite(MultiFormatTest.class);
> > -
> suite.addTestSuite(MessageFormatTest.class);
> > -
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.class);
> > -
>
suite.addTestSuite(MessageFormatExtensionTest.class);
> > +
> suite.addTestSuite(MessageFormatTest.US.class);
> > +
> suite.addTestSuite(MessageFormatTest.UK.class);
> > +
> suite.addTestSuite(MessageFormatTest.DE.class);
> > +
> suite.addTestSuite(MessageFormatTest.IT.class);
> > +
> suite.addTestSuite(MessageFormatTest.JP.class);
> > +
> suite.addTestSuite(MessageFormatTest.CA.class);
> > +
> suite.addTestSuite(MessageFormatTest.CN.class);
> > +
> suite.addTestSuite(MessageFormatTest.FR.class);
> > +
> suite.addTestSuite(MessageFormatTest.KR.class);
> > +
> suite.addTestSuite(MessageFormatTest.TW.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.US.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.UK.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.DE.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.IT.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.JP.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.CA.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.CN.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.FR.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.KR.class);
> > +
>
suite.addTestSuite(ExtendedMessageFormatBaselineTest.TW.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.US.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.UK.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.DE.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.IT.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.JP.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.CA.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.CN.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.FR.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.KR.class);
> > +
>
suite.addTestSuite(MessageFormatExtensionTest.TW.class);
> > return suite;
> > }
> >
> >
> >
> >
>
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> dev-unsubscribe@commons.apache.org
> For additional commands, e-mail:
> dev-help@commons.apache.org
>
>
____________________________________________________________________________________
Be a better sports nut! Let your teams follow you
with Yahoo Mobile. Try it now. http://mobile.yahoo.com/sports;_ylt=At9_qDKvtAbMuh1G1SQtBI7ntAcJ
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org
Re: svn commit: r598707 - in /commons/proper/lang/trunk/src: java/org/apache/commons/lang/text/ test/org/apache/commons/lang/text/
Posted by Niall Pemberton <ni...@gmail.com>.
My preference is that commits are as atomic as possible. These kind of
all-in-one uber commits make it difficult to follow along with whats
actually changing. IMO its especially a good idea to separate out the
*noise" of javadoc/checkstyle changes from real code changes and in
this case perhaps 3 commits would have been appropriate? Perhaps this
sounds picky, but I believe it helps rather than hinders collaboration
to work that way.
Niall
On Nov 27, 2007 5:27 PM, <mb...@apache.org> wrote:
> Author: mbenson
> Date: Tue Nov 27 09:27:35 2007
> New Revision: 598707
>
> URL: http://svn.apache.org/viewvc?rev=598707&view=rev
> Log:
> [LANG-362] checkstyle; javadoc; extended testing which necessitated some refactorings
>
> Modified:
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ChoiceMetaFormat.java Tue Nov 27 09:27:35 2007
> @@ -43,11 +43,8 @@
> super();
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer,
> - * java.text.FieldPosition)
> + /**
> + * {@inheritDoc}
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition pos) {
> @@ -57,11 +54,8 @@
> throw new IllegalArgumentException(String.valueOf(obj));
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see java.text.Format#parseObject(java.lang.String,
> - * java.text.ParsePosition)
> + /**
> + * {@inheritDoc}
> */
> public Object parseObject(String source, ParsePosition pos) {
> int start = pos.getIndex();
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/CompositeFormat.java Tue Nov 27 09:27:35 2007
> @@ -56,8 +56,15 @@
> }
>
> /**
> - * Uses the formatter Format instance.
> - *
> + * Uses the formatter Format instance.
> + *
> + * @param obj
> + * the object to format
> + * @param toAppendTo
> + * the {@link StringBuffer} to append to
> + * @param pos
> + * the FieldPosition to use (or ignore).
> + * @return <code>toAppendTo</code>
> * @see Format#format(Object, StringBuffer, FieldPosition)
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
> @@ -65,8 +72,15 @@
> }
>
> /**
> - * Uses the parser Format instance.
> - *
> + * Uses the parser Format instance.
> + *
> + * @param source
> + * the String source
> + * @param pos
> + * the ParsePosition containing the position to parse from, will
> + * be updated according to parsing success (index) or failure
> + * (error index)
> + * @return the parsed Object
> * @see Format#parseObject(String, ParsePosition)
> */
> public Object parseObject(String source, ParsePosition pos) {
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormat.java Tue Nov 27 09:27:35 2007
> @@ -40,17 +40,13 @@
> /**
> * Create a new DateMetaFormat.
> *
> - * @param locale
> + * @param locale the Locale to use
> */
> public DateMetaFormat(Locale locale) {
> super(locale);
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> - */
> + /** {@inheritDoc} */
> protected DateFormat createSubformatInstance(int style) {
> return DateFormat.getDateInstance(style, getLocale());
> }
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DateMetaFormatSupport.java Tue Nov 27 09:27:35 2007
> @@ -29,6 +29,7 @@
>
> /**
> * date/time metaFormat support.
> + *
> * @see ExtendedMessageFormat
> * @author Matt Benson
> * @since 2.4
> @@ -70,18 +71,15 @@
> /**
> * Create a new AbstractDateMetaFormat.
> *
> - * @param locale
> + * @param locale Locale
> */
> public DateMetaFormatSupport(Locale locale) {
> super();
> this.locale = locale;
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer,
> - * java.text.FieldPosition)
> + /**
> + * {@inheritDoc}
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition pos) {
> @@ -98,6 +96,12 @@
> throw new IllegalArgumentException(String.valueOf(obj));
> }
>
> + /**
> + * Get the subformat name for the given object.
> + *
> + * @param subformat Object
> + * @return subformat name.
> + */
> private String getSubformatName(Object subformat) {
> initialize();
> if (reverseSubformats.containsKey(subformat)) {
> @@ -107,11 +111,8 @@
> return null;
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see java.text.Format#parseObject(java.lang.String,
> - * java.text.ParsePosition)
> + /**
> + * {@inheritDoc}
> */
> public Object parseObject(String source, ParsePosition pos) {
> int start = pos.getIndex();
> @@ -131,6 +132,12 @@
> return null;
> }
>
> + /**
> + * Get the named subformat.
> + *
> + * @param subformat name
> + * @return Format designated by <code>name</code>, if any
> + */
> private Format getSubformat(String subformat) {
> initialize();
> if (!styleMap.containsKey(subformat)) {
> @@ -141,7 +148,7 @@
> }
>
> /**
> - * Get the locale in use by this {@link DateMetaFormatSupport}.
> + * Get the locale in use by this DateMetaFormatSupport.
> *
> * @return Locale
> */
> @@ -149,6 +156,9 @@
> return locale;
> }
>
> + /**
> + * Initialize this DateMetaFormatSupport.
> + */
> private synchronized void initialize() {
> if (!initialized) {
> styleMap = createStyleMap();
> @@ -175,7 +185,7 @@
> * Create a subformat for the given <code>DateFormat</code> style
> * constant.
> *
> - * @param style
> + * @param style DateFormat style constant
> * @return a DateFormat instance.
> */
> protected abstract DateFormat createSubformatInstance(int style);
> @@ -194,8 +204,7 @@
> * Set whether this metaformat can parse date/time pattern formats in
> * addition to named formats.
> *
> - * @param handlePatterns
> - * the boolean handlePatterns to set.
> + * @param handlePatterns the boolean handlePatterns to set.
> * @return <code>this</code> for fluent usage.
> */
> public DateMetaFormatSupport setHandlePatterns(boolean handlePatterns) {
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/DefaultMetaFormatFactory.java Tue Nov 27 09:27:35 2007
> @@ -34,7 +34,8 @@
> *
> * @author Matt Benson
> * @since 2.4
> - * @version $Id$
> + * @version $Id: DefaultMetaFormatFactory.java 592077 2007-11-05 16:47:10Z
> + * mbenson $
> */
> class DefaultMetaFormatFactory {
>
> @@ -59,16 +60,32 @@
> private static final String[] PATTERN_KEYS = new String[] { DATE_KEY,
> TIME_KEY };
>
> + /**
> + * Ordered NameKeyedMetaFormat
> + */
> private static class OrderedNameKeyedMetaFormat extends NameKeyedMetaFormat {
> private static final long serialVersionUID = -7688772075239431055L;
>
> private List keys;
>
> + /**
> + * Construct a new OrderedNameKeyedMetaFormat.
> + *
> + * @param names String[]
> + * @param formats Format[]
> + */
> private OrderedNameKeyedMetaFormat(String[] names, Format[] formats) {
> super(createMap(names, formats));
> this.keys = Arrays.asList(names);
> }
>
> + /**
> + * Create a map from the specified key/value parameters.
> + *
> + * @param names keys
> + * @param formats values
> + * @return Map
> + */
> private static Map createMap(String[] names, Format[] formats) {
> Validate.isTrue(ArrayUtils.isSameLength(names, formats));
> HashMap result = new HashMap(names.length);
> @@ -78,6 +95,9 @@
> return result;
> }
>
> + /**
> + * {@inheritDoc}
> + */
> protected Iterator iterateKeys() {
> return keys.iterator();
> }
> @@ -86,8 +106,7 @@
> /**
> * Get a default metaformat for the specified Locale.
> *
> - * @param locale
> - * the Locale for the resulting Format instance.
> + * @param locale the Locale for the resulting Format instance.
> * @return Format
> */
> public static Format getFormat(final Locale locale) {
> @@ -106,6 +125,12 @@
> new TimeMetaFormat(locale) }) });
> }
>
> + /**
> + * Get the default format supported by a given metaformat.
> + *
> + * @param metaformat Format to handle parsing.
> + * @return the default format, if any.
> + */
> private static Format getDefaultFormat(Format metaformat) {
> ParsePosition pos = new ParsePosition(0);
> Object o = metaformat.parseObject("", pos);
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/ExtendedMessageFormat.java Tue Nov 27 09:27:35 2007
> @@ -22,13 +22,16 @@
> import java.util.ArrayList;
> import java.util.Locale;
>
> +import org.apache.commons.lang.StringUtils;
> import org.apache.commons.lang.Validate;
>
> /**
> * Extends <code>MessageFormat</code> to allow pluggable/additional formatting
> * options for embedded format elements; requires a "meta-format", i.e. a
> * <code>Format</code> capable of parsing and formatting other
> - * <code>Format</code>s.
> + * <code>Format</code>s. One shortcoming is that recursive choice formats do
> + * not inherit knowledge of the extended formatters and are limited to those
> + * available with <code>java.text.MessageFormat</code> (patches welcome).
> *
> * @author Matt Benson
> * @since 2.4
> @@ -53,14 +56,16 @@
> * behavior identical to a <code>java.lang.MessageFormat</code> using
> * <code>locale</code>.
> *
> - * @param locale
> - * the Locale for the resulting Format instance.
> + * @param locale the Locale for the resulting Format instance.
> * @return Format
> */
> public static Format createDefaultMetaFormat(Locale locale) {
> return DefaultMetaFormatFactory.getFormat(locale);
> }
>
> + /**
> + * Conceptual demarcation of methods to parse the pattern.
> + */
> private static class Parser {
> private static final String ESCAPED_QUOTE = "''";
> private static final char START_FMT = ',';
> @@ -68,6 +73,12 @@
> private static final char START_FE = '{';
> private static final char QUOTE = '\'';
>
> + /**
> + * Strip all formats from the pattern.
> + *
> + * @param pattern String to strip
> + * @return stripped pattern
> + */
> private String stripFormats(String pattern) {
> StringBuffer sb = new StringBuffer(pattern.length());
> ParsePosition pos = new ParsePosition(0);
> @@ -98,6 +109,14 @@
> return sb.toString();
> }
>
> + /**
> + * Insert formats back into the pattern for toPattern() support.
> + *
> + * @param pattern source
> + * @param formats the Formats to insert
> + * @param metaFormat Format to format the Formats
> + * @return full pattern
> + */
> private String insertFormats(String pattern, Format[] formats,
> Format metaFormat) {
> if (formats == null || formats.length == 0) {
> @@ -117,8 +136,10 @@
> sb.append(START_FE).append(
> readArgumentIndex(pattern, next(pos)));
> if (formats[fe] != null) {
> - sb.append(START_FMT).append(
> - metaFormat.format(formats[fe]));
> + String formatName = metaFormat.format(formats[fe]);
> + if (StringUtils.isNotEmpty(formatName)) {
> + sb.append(START_FMT).append(formatName);
> + }
> }
> break;
> default:
> @@ -129,6 +150,13 @@
> return sb.toString();
> }
>
> + /**
> + * Parse the formats from the given pattern.
> + *
> + * @param pattern String to parse
> + * @param metaFormat Format to parse the Formats
> + * @return array of parsed Formats
> + */
> private Format[] parseFormats(String pattern, Format metaFormat) {
> ArrayList result = new ArrayList();
> ParsePosition pos = new ParsePosition(0);
> @@ -142,8 +170,8 @@
> readArgumentIndex(pattern, next(pos));
> if (pattern.charAt(pos.getIndex()) == START_FMT) {
> seekNonWs(pattern, next(pos));
> - result.add(metaFormat.parseObject(pattern, pos));
> }
> + result.add(metaFormat.parseObject(pattern, pos));
> seekNonWs(pattern, pos);
> if (pattern.charAt(pos.getIndex()) != END_FE) {
> throw new IllegalArgumentException(
> @@ -158,6 +186,12 @@
> return (Format[]) result.toArray(new Format[result.size()]);
> }
>
> + /**
> + * Consume whitespace from the current parse position.
> + *
> + * @param pattern String to read
> + * @param pos current position
> + */
> private void seekNonWs(String pattern, ParsePosition pos) {
> int len = 0;
> char[] buffer = pattern.toCharArray();
> @@ -167,11 +201,24 @@
> } while (len > 0 && pos.getIndex() < pattern.length());
> }
>
> + /**
> + * Convenience method to advance parse position by 1
> + *
> + * @param pos ParsePosition
> + * @return <code>pos</code>
> + */
> private ParsePosition next(ParsePosition pos) {
> pos.setIndex(pos.getIndex() + 1);
> return pos;
> }
>
> + /**
> + * Read the argument index from the current format element
> + *
> + * @param pattern pattern to parse
> + * @param pos current parse position
> + * @return argument index as string
> + */
> private String readArgumentIndex(String pattern, ParsePosition pos) {
> int start = pos.getIndex();
> for (; pos.getIndex() < pattern.length(); next(pos)) {
> @@ -189,6 +236,16 @@
> "Unterminated format element at position " + start);
> }
>
> + /**
> + * Consume a quoted string, adding it to <code>appendTo</code> if
> + * specified.
> + *
> + * @param pattern pattern to parse
> + * @param pos current parse position
> + * @param appendTo optional StringBuffer to append
> + * @param escapingOn whether to process escaped quotes
> + * @return <code>appendTo</code>
> + */
> private StringBuffer appendQuotedString(String pattern,
> ParsePosition pos, StringBuffer appendTo, boolean escapingOn) {
> int start = pos.getIndex();
> @@ -200,8 +257,8 @@
> for (int i = pos.getIndex(); i < pattern.length(); i++) {
> if (escapingOn
> && pattern.substring(i).startsWith(ESCAPED_QUOTE)) {
> - appendTo.append(c, lastHold, pos.getIndex() - lastHold).append(
> - QUOTE);
> + appendTo.append(c, lastHold, pos.getIndex() - lastHold)
> + .append(QUOTE);
> pos.setIndex(i + ESCAPED_QUOTE.length());
> lastHold = pos.getIndex();
> continue;
> @@ -219,11 +276,24 @@
> "Unterminated quoted string at position " + start);
> }
>
> + /**
> + * Consume quoted string only
> + *
> + * @param pattern pattern to parse
> + * @param pos current parse position
> + * @param escapingOn whether to process escaped quotes
> + */
> private void getQuotedString(String pattern, ParsePosition pos,
> boolean escapingOn) {
> appendQuotedString(pattern, pos, null, escapingOn);
> }
>
> + /**
> + * Consume the entire format found at the current position.
> + *
> + * @param pattern string to parse
> + * @param pos current parse position
> + */
> private void eatFormat(String pattern, ParsePosition pos) {
> int start = pos.getIndex();
> int depth = 1;
> @@ -254,15 +324,28 @@
> private String strippedPattern;
>
> /**
> - * Create a new ExtendedMessageFormat.
> + * Create a new ExtendedMessageFormat for the default locale.
> *
> - * @param pattern
> - * @param metaFormat
> - * @throws IllegalArgumentException
> - * if <code>metaFormat</code> is <code>null</code> or in
> - * case of a bad pattern.
> + * @param pattern String
> + * @param metaFormat Format
> + * @throws IllegalArgumentException if <code>metaFormat</code> is
> + * <code>null</code> or in case of a bad pattern.
> */
> public ExtendedMessageFormat(String pattern, Format metaFormat) {
> + this(pattern, Locale.getDefault(), metaFormat);
> + }
> +
> + /**
> + * Create a new ExtendedMessageFormat.
> + *
> + * @param pattern String
> + * @param locale Locale
> + * @param metaFormat Format
> + * @throws IllegalArgumentException if <code>metaFormat</code> is
> + * <code>null</code> or in case of a bad pattern.
> + */
> + public ExtendedMessageFormat(String pattern, Locale locale,
> + Format metaFormat) {
> /*
> * We have to do some acrobatics here: the call to the super constructor
> * will invoke applyPattern(), but we don't want to apply the pattern
> @@ -270,7 +353,7 @@
> * our (final) applyPattern implementation, and re-call at the end of
> * this constructor.
> */
> - super(pattern);
> + super(pattern, locale);
> setMetaFormat(metaFormat);
> applyPattern(pattern);
> }
> @@ -278,8 +361,7 @@
> /**
> * Apply the specified pattern.
> *
> - * @param pattern
> - * pattern String
> + * @param pattern String
> */
> public final void applyPattern(String pattern) {
> if (metaFormat == null) {
> @@ -293,20 +375,20 @@
> }
>
> /**
> - * Pre-execution hook that allows subclasses to customize the behavior of
> - * the final applyPattern implementation.
> + * Pre-execution hook by means of which a subclass can customize the
> + * behavior of the final applyPattern implementation.
> *
> - * @param pattern
> + * @param pattern String
> */
> protected void applyPatternPre(String pattern) {
> // noop
> }
>
> /**
> - * Post-execution hook that allows subclasses to customize the behavior of
> - * the final applyPattern implementation.
> + * Post-execution hook by means of which a subclass can customize the
> + * behavior of the final applyPattern implementation.
> *
> - * @param pattern
> + * @param pattern String
> */
> protected void applyPatternPost(String pattern) {
> // noop
> @@ -335,8 +417,7 @@
> * Set the meta-format. Has no effect until a subsequent call to
> * {@link #applyPattern(String)}.
> *
> - * @param metaFormat
> - * the Format metaFormat to set.
> + * @param metaFormat the Format metaFormat to set.
> */
> public synchronized void setMetaFormat(Format metaFormat) {
> Validate.notNull(metaFormat, "metaFormat is null");
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MetaFormatSupport.java Tue Nov 27 09:27:35 2007
> @@ -24,7 +24,8 @@
> import java.util.Map;
>
> /**
> - * metaFormat support.
> + * Support class for implementing Formats that parse/format other Formats, with
> + * specific support for interoperability with ExtendedMessageFormat.
> *
> * @see ExtendedMessageFormat
> * @author Matt Benson
> @@ -40,11 +41,9 @@
> /**
> * Invert the specified Map.
> *
> - * @param map
> - * the Map to invert.
> + * @param map the Map to invert.
> * @return a new Map instance.
> - * @throws NullPointerException
> - * if <code>map</code> is <code>null</code>.
> + * @throws NullPointerException if <code>map</code> is <code>null</code>.
> */
> protected Map invert(Map map) {
> Map result = new HashMap(map.size());
> @@ -58,8 +57,8 @@
> /**
> * Find the end of the subformat.
> *
> - * @param source
> - * @param pos
> + * @param source String
> + * @param pos current parse position
> */
> protected void seekFormatElementEnd(String source, ParsePosition pos) {
> int depth = 1;
> @@ -85,8 +84,7 @@
> /**
> * Advance the parse index by 1.
> *
> - * @param pos
> - * the ParsePosition to advance.
> + * @param pos the ParsePosition to advance.
> * @return <code>pos</code>
> */
> protected ParsePosition next(ParsePosition pos) {
> @@ -100,10 +98,8 @@
> * occurs <code>pos.getErrorIndex()</code> will contain a value >= zero,
> * indicating the index at which the parse error occurred.
> *
> - * @param source
> - * String to parse
> - * @param pos
> - * ParsePosition marking index into <code>source</code>
> + * @param source String to parse
> + * @param pos ParsePosition marking index into <code>source</code>
> * @return Object parsed
> */
> public abstract Object parseObject(String source, ParsePosition pos);
> @@ -112,19 +108,14 @@
> * Format the specified object, appending to the given StringBuffer, and
> * optionally respecting the specified FieldPosition.
> *
> - * @param obj
> - * the object to format
> - * @param toAppendTo
> - * the StringBuffer to which the formatted object should be
> - * appended
> - * @param pos
> - * FieldPosition associated with <code>obj</code>
> + * @param obj the object to format
> + * @param toAppendTo the StringBuffer to which the formatted object should
> + * be appended
> + * @param pos FieldPosition associated with <code>obj</code>
> * @return <code>toAppendTo</code>
> - * @throws NullPointerException
> - * if <code>toAppendTo</code> or <code>pos</code> is
> - * <code>null</code>
> - * @throws IllegalArgumentException
> - * if unable to format <code>obj</code>
> + * @throws NullPointerException if <code>toAppendTo</code> or
> + * <code>pos</code> is <code>null</code>
> + * @throws IllegalArgumentException if unable to format <code>obj</code>
> */
> public abstract StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition pos);
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/MultiFormat.java Tue Nov 27 09:27:35 2007
> @@ -50,7 +50,7 @@
> /**
> * Add a delegate format.
> *
> - * @param delegate
> + * @param delegate Format
> * @return the builder
> */
> public Builder add(Format delegate) {
> @@ -82,17 +82,19 @@
> /**
> * Create a new MultiFormat.
> *
> - * @param delegates
> + * @param delegates Formats
> */
> public MultiFormat(Format[] delegates) {
> setDelegates(delegates);
> }
>
> - /*
> - * (non-Javadoc)
> + /**
> + * Format <code>obj</code>; append to <code>toAppendTo</code>.
> *
> - * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer,
> - * java.text.FieldPosition)
> + * @param obj Object to format
> + * @param toAppendTo StringBuffer to append to
> + * @param pos FieldPosition
> + * @return <code>toAppendTo</code>
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition pos) {
> @@ -108,11 +110,13 @@
> + obj);
> }
>
> - /*
> - * (non-Javadoc)
> + /**
> + * Parse an object by trying each delegate.
> *
> - * @see java.text.Format#parseObject(java.lang.String,
> - * java.text.ParsePosition)
> + * @param source string
> + * @param pos current parse position
> + * @return value returned from first delegate that does not encounter an
> + * error.
> */
> public Object parseObject(String source, ParsePosition pos) {
> int start = pos.getIndex();
> @@ -133,8 +137,7 @@
> /**
> * Set the delegates.
> *
> - * @param delegates
> - * the Format[] delegates to set.
> + * @param delegates the Format[] delegates to set.
> */
> public void setDelegates(Format[] delegates) {
> Validate.noNullElements(delegates,
> @@ -151,6 +154,11 @@
> return delegates;
> }
>
> + /**
> + * Validate and return our delegates.
> + *
> + * @return delegate Formats, not null
> + */
> private Format[] getValidDelegates() {
> Format[] result = getDelegates();
> Validate.notEmpty(result, "No delegate Formats configured");
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NameKeyedMetaFormat.java Tue Nov 27 09:27:35 2007
> @@ -57,8 +57,8 @@
> /**
> * Add the specified format with the specified string key.
> *
> - * @param key
> - * @param format
> + * @param key String
> + * @param format Format
> * @return Builder reference to this object
> */
> public Builder put(String key, Format format) {
> @@ -80,16 +80,15 @@
>
> /**
> * Create a new NameKeyedMetaFormat.
> + *
> + * @param keyedFormats String->Format map.
> */
> public NameKeyedMetaFormat(Map keyedFormats) {
> this.keyedFormats = keyedFormats;
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.MetaFormatSupport#format(java.lang.Object,
> - * java.lang.StringBuffer, java.text.FieldPosition)
> + /**
> + * {@inheritDoc}
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition pos) {
> @@ -117,11 +116,8 @@
> throw new IllegalArgumentException("Cannot format " + obj);
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.MetaFormatSupport#parseObject(java.lang.String,
> - * java.text.ParsePosition)
> + /**
> + * {@inheritDoc}
> */
> public Object parseObject(String source, ParsePosition pos) {
> int start = pos.getIndex();
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/NumberMetaFormat.java Tue Nov 27 09:27:35 2007
> @@ -56,18 +56,15 @@
> /**
> * Create a new NumberMetaFormat.
> *
> - * @param locale
> + * @param locale Locale
> */
> public NumberMetaFormat(Locale locale) {
> super();
> this.locale = locale;
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.AbstractMetaFormat#format(java.lang.Object,
> - * java.lang.StringBuffer, java.text.FieldPosition)
> + /**
> + * {@inheritDoc}
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition pos) {
> @@ -85,11 +82,8 @@
> throw new IllegalArgumentException();
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see java.text.Format#parseObject(java.lang.String,
> - * java.text.ParsePosition)
> + /**
> + * {@inheritDoc}
> */
> public Object parseObject(String source, ParsePosition pos) {
> int start = pos.getIndex();
> @@ -115,6 +109,9 @@
> return locale;
> }
>
> + /**
> + * Initialize this NumberMetaFormat.
> + */
> private synchronized void initialize() {
> if (subformats == null) {
> subformats = new HashMap();
>
> Modified: commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java (original)
> +++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/TimeMetaFormat.java Tue Nov 27 09:27:35 2007
> @@ -41,30 +41,28 @@
> /**
> * Create a new NumberMetaFormat.
> *
> - * @param locale
> + * @param locale Locale
> */
> public TimeMetaFormat(Locale locale) {
> super(locale);
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.AbstractDateMetaFormat#createSubformatInstance(int)
> - */
> + /** {@inheritDoc} */
> protected DateFormat createSubformatInstance(int style) {
> return DateFormat.getTimeInstance(style, getLocale());
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.AbstractDateMetaFormat#createReverseStyleMap()
> - */
> + /** {@inheritDoc} */
> protected Map createInverseStyleMap() {
> Map invertMe = createStyleMap();
> invertMe.remove(DEFAULT);
> - invertMe.remove(FULL);
> + DateFormat longDf = DateFormat.getTimeInstance(DateFormat.LONG,
> + getLocale());
> + DateFormat fullDf = DateFormat.getTimeInstance(DateFormat.FULL,
> + getLocale());
> + if (fullDf.equals(longDf)) {
> + invertMe.remove(FULL);
> + }
> return invert(invertMe);
> }
> }
>
> Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java (original)
> +++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/AbstractMessageFormatTest.java Tue Nov 27 09:27:35 2007
> @@ -16,10 +16,18 @@
> */
> package org.apache.commons.lang.text;
>
> +import java.text.ChoiceFormat;
> import java.text.DateFormat;
> +import java.text.DecimalFormat;
> +import java.text.DecimalFormatSymbols;
> +import java.text.FieldPosition;
> +import java.text.Format;
> import java.text.MessageFormat;
> +import java.text.NumberFormat;
> +import java.text.SimpleDateFormat;
> import java.util.Calendar;
> import java.util.GregorianCalendar;
> +import java.util.Locale;
>
> import junit.framework.TestCase;
>
> @@ -32,7 +40,7 @@
> * @version $Id$
> */
> public abstract class AbstractMessageFormatTest extends TestCase {
> - protected static final Object[] NUMBERS = { new Double(0.1),
> + protected static final Double[] NUMBERS = { new Double(0.1),
> new Double(1.1), new Double(2.1) };
>
> protected static final Object[] DATES = {
> @@ -43,18 +51,30 @@
> new GregorianCalendar(1970, Calendar.MARCH, 03, 18, 45, 50)
> .getTime() };
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see junit.framework.TestCase#setUp()
> + protected Locale locale;
> +
> + /**
> + * {@inheritDoc}
> */
> protected void setUp() throws Exception {
> super.setUp();
> - // tests depend on Locale.US
> - java.util.Locale.setDefault(java.util.Locale.US);
> + this.locale = getLocale();
> }
>
> - protected abstract MessageFormat createMessageFormat(String pattern);
> + /**
> + * Create a MessageFormat.
> + * @param pattern
> + * @param locale
> + * @return
> + */
> + protected abstract MessageFormat createMessageFormat(String pattern,
> + Locale locale);
> +
> + /**
> + * Get the Locale to use.
> + * @return
> + */
> + protected abstract Locale getLocale();
>
> protected void doAssertions(String expected, String pattern, Object[] args) {
> doAssertions(expected, pattern, args, pattern);
> @@ -62,235 +82,213 @@
>
> protected void doAssertions(String expected, String pattern, Object[] args,
> String toPattern) {
> - MessageFormat f = createMessageFormat(pattern);
> + MessageFormat f = createMessageFormat(pattern, locale);
> assertEquals(expected, f.format(args));
> assertEquals(toPattern, f.toPattern());
> }
>
> - public void testPlain() {
> + protected void doAssertions(Format format, Object[] args) {
> + doAssertions(format, args, null);
> + }
> +
> + protected void doAssertions(Format format, Object[] args, String formatName) {
> + doAssertions(format, args, formatName, null);
> + }
> +
> + protected void doAssertions(Format format, Object[] args,
> + String formatName, String decodeFormatName) {
> + StringBuffer pattern = new StringBuffer();
> + StringBuffer expected = new StringBuffer();
> + StringBuffer decodePattern = new StringBuffer();
> + for (int i = 0; i < args.length; i++) {
> + pattern.append(i).append(": {").append(i);
> + if (formatName != null) {
> + pattern.append(',').append(formatName);
> + }
> + pattern.append("}; ");
> + expected.append(i).append(": ");
> + if (format != null) {
> + format.format(args[i], expected, new FieldPosition(0));
> + } else {
> + expected.append(String.valueOf(args[i]));
> + }
> + expected.append("; ");
> + decodePattern.append(i).append(": {").append(i);
> + if (decodeFormatName != null || formatName != null) {
> + decodePattern.append(',').append(
> + decodeFormatName == null ? formatName
> + : decodeFormatName);
> + }
> + decodePattern.append("}; ");
> + }
> + doAssertions(expected.toString(), pattern.toString(), args,
> + decodePattern.toString());
> + }
> +
> + public void testNoFormatElements() {
> StringBuffer pattern = new StringBuffer();
> for (int i = 0; i < NUMBERS.length; i++) {
> if (i > 0) {
> pattern.append("; ");
> }
> - pattern.append("Object ").append(i).append(": ").append(NUMBERS[i]);
> + pattern.append(i).append(": ").append(NUMBERS[i]);
> }
> String p = pattern.toString();
> - doAssertions(p, p, NUMBERS);
> + doAssertions(p, p, null);
> }
>
> - public void testSimple() {
> - doAssertions("Object 0: 0.1; Object 1: 1.1; Object 2: 2.1",
> - "Object 0: {0}; Object 1: {1}; Object 2: {2}", NUMBERS);
> + public void testSimpleStrings() {
> + doAssertions(null, new Object[] { "foo", "bar", "baz"}, null);
> + }
> +
> + public void testSimpleNumbers() {
> + doAssertions(NumberFormat.getInstance(locale), NUMBERS, null);
> + }
> +
> + public void testSimpleDates() {
> + doAssertions(DateFormat.getDateTimeInstance(DateFormat.SHORT,
> + DateFormat.SHORT, locale), DATES, null);
> }
>
> public void testNumber() {
> - doAssertions(
> - "Number 0: 0.1; Number 1: 1.1; Number 2: 2.1",
> - "Number 0: {0,number}; Number 1: {1,number}; Number 2: {2,number}",
> - NUMBERS);
> + doAssertions(NumberFormat.getInstance(locale), NUMBERS, "number");
> }
>
> public void testNumberLooseFormatting() {
> - doAssertions(
> - "Number 0: 0.1; Number 1: 1.1; Number 2: 2.1",
> - "Number 0: {0, number }; Number 1: {1, number }; Number 2: {2, number }",
> - NUMBERS,
> - "Number 0: {0,number}; Number 1: {1,number}; Number 2: {2,number}");
> + doAssertions(NumberFormat.getInstance(locale), NUMBERS, " number ",
> + "number");
> }
>
> public void testInteger() {
> - doAssertions(
> - "Number 0: 0; Number 1: 1; Number 2: 2",
> - "Number 0: {0,number,integer}; Number 1: {1,number,integer}; Number 2: {2,number,integer}",
> - NUMBERS);
> + doAssertions(NumberFormat.getIntegerInstance(locale), NUMBERS,
> + "number,integer");
> }
>
> public void testIntegerLooseFormatting() {
> - doAssertions(
> - "Number 0: 0; Number 1: 1; Number 2: 2",
> - "Number 0: {0, number , integer }; Number 1: {1, number , integer }; Number 2: {2, number , integer }",
> - NUMBERS,
> - "Number 0: {0,number,integer}; Number 1: {1,number,integer}; Number 2: {2,number,integer}");
> + doAssertions(NumberFormat.getIntegerInstance(locale), NUMBERS,
> + " number , integer ", "number,integer");
> }
>
> public void testCurrency() {
> - doAssertions(
> - "Number 0: $0.10; Number 1: $1.10; Number 2: $2.10",
> - "Number 0: {0,number,currency}; Number 1: {1,number,currency}; Number 2: {2,number,currency}",
> - NUMBERS);
> + doAssertions(NumberFormat.getCurrencyInstance(locale), NUMBERS,
> + "number,currency");
> }
>
> public void testPercent() {
> - doAssertions(
> - "Number 0: 10%; Number 1: 110%; Number 2: 210%",
> - "Number 0: {0,number,percent}; Number 1: {1,number,percent}; Number 2: {2,number,percent}",
> - NUMBERS);
> + doAssertions(NumberFormat.getPercentInstance(locale), NUMBERS,
> + "number,percent");
> }
>
> public void testNumberPattern() {
> - doAssertions(
> - "Number 0: 000.100; Number 1: 001.100; Number 2: 002.100",
> - "Number 0: {0,number,#000.000}; Number 1: {1,number,#000.000}; Number 2: {2,number,#000.000}",
> - NUMBERS);
> + doAssertions(new DecimalFormat("#000.000", new DecimalFormatSymbols(
> + locale)), NUMBERS, "number,#000.000");
> }
>
> public void testDate() {
> - doAssertions(
> - "Date 0: Jan 1, 1970; Date 1: Feb 2, 1970; Date 2: Mar 3, 1970",
> - "Date 0: {0,date}; Date 1: {1,date}; Date 2: {2,date}", DATES);
> + doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT, locale),
> + DATES, "date");
> }
>
> public void testDateLooseFormatting() {
> - doAssertions(
> - "Date 0: Jan 1, 1970; Date 1: Feb 2, 1970; Date 2: Mar 3, 1970",
> - "Date 0: {0, date }; Date 1: {1, date }; Date 2: {2, date }",
> - DATES, "Date 0: {0,date}; Date 1: {1,date}; Date 2: {2,date}");
> + doAssertions(DateFormat.getDateInstance(DateFormat.DEFAULT, locale),
> + DATES, " date ", "date");
> }
>
> public void testShortDate() {
> - doAssertions(
> - "Date 0: 1/1/70; Date 1: 2/2/70; Date 2: 3/3/70",
> - "Date 0: {0,date,short}; Date 1: {1,date,short}; Date 2: {2,date,short}",
> - DATES);
> + DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT, locale);
> + DateFormat defaultDf = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
> + doAssertions(shortDf, DATES, "date,short",
> + shortDf.equals(defaultDf) ? "date" : "date,short");
> }
>
> public void testShortDateLooseFormatting() {
> - doAssertions(
> - "Date 0: 1/1/70; Date 1: 2/2/70; Date 2: 3/3/70",
> - "Date 0: {0, date , short }; Date 1: {1, date , short }; Date 2: {2, date , short }",
> - DATES,
> - "Date 0: {0,date,short}; Date 1: {1,date,short}; Date 2: {2,date,short}");
> + DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT, locale);
> + DateFormat defaultDf = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
> + doAssertions(shortDf, DATES, " date , short ",
> + shortDf.equals(defaultDf) ? "date" : "date,short");
> }
>
> public void testMediumDate() {
> - doAssertions(
> - "Date 0: Jan 1, 1970; Date 1: Feb 2, 1970; Date 2: Mar 3, 1970",
> - "Date 0: {0,date,medium}; Date 1: {1,date,medium}; Date 2: {2,date,medium}",
> - DATES, "Date 0: {0,date}; Date 1: {1,date}; Date 2: {2,date}");
> + doAssertions(DateFormat.getDateInstance(DateFormat.MEDIUM, locale),
> + DATES, "date,medium", "date");
> }
>
> public void testLongDate() {
> - doAssertions(
> - "Date 0: January 1, 1970; Date 1: February 2, 1970; Date 2: March 3, 1970",
> - "Date 0: {0,date,long}; Date 1: {1,date,long}; Date 2: {2,date,long}",
> - DATES);
> + DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG, locale);
> + DateFormat defaultDf = DateFormat.getDateInstance(DateFormat.DEFAULT,
> + locale);
> + doAssertions(longDf, DATES, "date,long",
> + longDf.equals(defaultDf) ? "date" : "date,long");
> }
>
> public void testFullDate() {
> - doAssertions(
> - "Date 0: Thursday, January 1, 1970; Date 1: Monday, February 2, 1970; Date 2: Tuesday, March 3, 1970",
> - "Date 0: {0,date,full}; Date 1: {1,date,full}; Date 2: {2,date,full}",
> - DATES);
> + DateFormat fullDf = DateFormat.getDateInstance(DateFormat.FULL, locale);
> + DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG, locale);
> + doAssertions(fullDf, DATES, "date,full",
> + fullDf.equals(longDf) ? "date,long" : "date,full");
> }
>
> public void testDatePattern() {
> - doAssertions(
> - "Date 0: AD1970.1; Date 1: AD1970.33; Date 2: AD1970.62",
> - "Date 0: {0,date,Gyyyy.D}; Date 1: {1,date,Gyyyy.D}; Date 2: {2,date,Gyyyy.D}",
> - DATES);
> + doAssertions(new SimpleDateFormat("Gyyyy.D", locale), DATES,
> + "date,Gyyyy.D");
> }
>
> public void testTime() {
> - doAssertions(
> - "Time 0: 12:15:20 AM; Time 1: 12:30:35 PM; Time 2: 6:45:50 PM",
> - "Time 0: {0,time}; Time 1: {1,time}; Time 2: {2,time}", DATES);
> + doAssertions(DateFormat.getTimeInstance(DateFormat.DEFAULT, locale),
> + DATES, "time");
> }
>
> public void testShortTime() {
> - doAssertions(
> - "Time 0: 12:15 AM; Time 1: 12:30 PM; Time 2: 6:45 PM",
> - "Time 0: {0,time,short}; Time 1: {1,time,short}; Time 2: {2,time,short}",
> - DATES);
> + doAssertions(DateFormat.getTimeInstance(DateFormat.SHORT, locale),
> + DATES, "time,short");
> }
>
> public void testMediumTime() {
> - doAssertions(
> - "Time 0: 12:15:20 AM; Time 1: 12:30:35 PM; Time 2: 6:45:50 PM",
> - "Time 0: {0,time,medium}; Time 1: {1,time,medium}; Time 2: {2,time,medium}",
> - DATES, "Time 0: {0,time}; Time 1: {1,time}; Time 2: {2,time}");
> + doAssertions(DateFormat.getTimeInstance(DateFormat.MEDIUM, locale),
> + DATES, "time,medium", "time");
> }
>
> public void testLongTime() {
> - DateFormat df = DateFormat.getTimeInstance(DateFormat.LONG);
> - StringBuffer expected = new StringBuffer();
> - for (int i = 0; i < DATES.length; i++) {
> - if (i > 0) {
> - expected.append("; ");
> - }
> - expected.append("Time ").append(i).append(": ").append(
> - df.format(DATES[i]));
> - }
> - doAssertions(
> - expected.toString(),
> - "Time 0: {0,time,long}; Time 1: {1,time,long}; Time 2: {2,time,long}",
> - DATES);
> + doAssertions(DateFormat.getTimeInstance(DateFormat.LONG, locale),
> + DATES, "time,long");
> }
>
> public void testFullTime() {
> - DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL);
> - StringBuffer expected = new StringBuffer();
> - for (int i = 0; i < DATES.length; i++) {
> - if (i > 0) {
> - expected.append("; ");
> - }
> - expected.append("Time ").append(i).append(": ").append(
> - df.format(DATES[i]));
> - }
> - doAssertions(
> - expected.toString(),
> - "Time 0: {0,time,full}; Time 1: {1,time,full}; Time 2: {2,time,full}",
> - DATES,
> - "Time 0: {0,time,long}; Time 1: {1,time,long}; Time 2: {2,time,long}");
> + DateFormat fullDf = DateFormat.getTimeInstance(DateFormat.FULL, locale);
> + DateFormat longDf = DateFormat.getTimeInstance(DateFormat.LONG, locale);
> + doAssertions(fullDf, DATES, "time,full",
> + fullDf.equals(longDf) ? "time,long" : "time,full");
> }
>
> public void testTimePattern() {
> - doAssertions(
> - "Time 0: AM01520; Time 1: PM123035; Time 2: PM184550",
> - "Time 0: {0,time,aHms}; Time 1: {1,time,aHms}; Time 2: {2,time,aHms}",
> - DATES,
> - "Time 0: {0,date,aHms}; Time 1: {1,date,aHms}; Time 2: {2,date,aHms}");
> + doAssertions(new SimpleDateFormat("aHms", locale), DATES, "date,aHms");
> }
>
> public void testChoice() {
> - String choice = "0.0#x|1.0#y|2.0#z";
> - StringBuffer pattern = new StringBuffer();
> - for (int i = 0; i < 3; i++) {
> - if (i > 0) {
> - pattern.append("; ");
> - }
> - pattern.append("Choice ").append(i).append(": {").append(i).append(
> - ",choice,").append(choice).append("}");
> - }
> - doAssertions("Choice 0: x; Choice 1: y; Choice 2: z", pattern
> - .toString(), NUMBERS);
> + doAssertions(new ChoiceFormat("0.0#x|1.0#y|2.0#z"), NUMBERS,
> + "choice,0.0#x|1.0#y|2.0#z");
> }
>
> public void testChoiceLooseFormatting() {
> - String choice = "0.0#x |1.0#y |2.0#z ";
> - StringBuffer pattern = new StringBuffer();
> - for (int i = 0; i < 3; i++) {
> - if (i > 0) {
> - pattern.append("; ");
> - }
> - pattern.append("Choice ").append(i).append(": {").append(i).append(
> - ",choice,").append(choice).append("}");
> - }
> - doAssertions("Choice 0: x ; Choice 1: y ; Choice 2: z ", pattern
> - .toString(), NUMBERS);
> + doAssertions(new ChoiceFormat("0.0#x |1.0#y |2.0#z "), NUMBERS,
> + "choice,0.0#x |1.0#y |2.0#z ");
> }
>
> public void testChoiceRecursive() {
> - String choice = "0.0#{0}|1.0#{1}|2.0#{2}";
> - StringBuffer pattern = new StringBuffer();
> - for (int i = 0; i < 3; i++) {
> + NumberFormat nf = NumberFormat.getInstance(locale);
> + StringBuffer choice = new StringBuffer();
> + StringBuffer format = new StringBuffer("choice,");
> + for (int i = 0; i < NUMBERS.length; i++) {
> + Double d = new Double(Math.floor(NUMBERS[i].doubleValue()));
> if (i > 0) {
> - pattern.append("; ");
> + choice.append('|');
> + format.append('|');
> }
> - pattern.append("Choice ").append(i).append(": {").append(i).append(
> - ",choice,").append(choice).append("}");
> + choice.append(d).append('#').append(
> + nf.format(NUMBERS[i].doubleValue()));
> + format.append(d).append('#').append('{').append(i).append('}');
> }
> - doAssertions("Choice 0: 0.1; Choice 1: 1.1; Choice 2: 2.1", pattern
> - .toString(), NUMBERS);
> + doAssertions(new ChoiceFormat(choice.toString()), NUMBERS, format
> + .toString());
> }
> }
>
> Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java (original)
> +++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/ExtendedMessageFormatBaselineTest.java Tue Nov 27 09:27:35 2007
> @@ -20,21 +20,161 @@
> import java.util.Locale;
>
> /**
> - * Baseline tests for {@link ExtendedMessageFormat}
> + * Baseline tests for ExtendedMessageFormat
> *
> * @author Matt Benson
> * @since 2.4
> * @version $Id$
> */
> -public class ExtendedMessageFormatBaselineTest extends AbstractMessageFormatTest {
> +public abstract class ExtendedMessageFormatBaselineTest extends
> + AbstractMessageFormatTest {
>
> - /*
> - * (non-Javadoc)
> + /**
> + * Tests for <code>Locale.US</code>
> *
> - * @see org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> + * @author mbenson
> */
> - protected MessageFormat createMessageFormat(String pattern) {
> - return new ExtendedMessageFormat(pattern, ExtendedMessageFormat.createDefaultMetaFormat(Locale.US));
> + public static class US extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.US;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.UK</code>
> + *
> + * @author mbenson
> + */
> + public static class UK extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.UK;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.GERMANY</code>
> + *
> + * @author mbenson
> + */
> + public static class DE extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.GERMANY;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.ITALY</code>
> + *
> + * @author mbenson
> + */
> + public static class IT extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.ITALY;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.JAPAN</code>
> + *
> + * @author mbenson
> + */
> + public static class JP extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.JAPAN;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.CHINA</code>
> + *
> + * @author mbenson
> + */
> + public static class CN extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.CHINA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.CANADA</code>
> + *
> + * @author mbenson
> + */
> + public static class CA extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.CANADA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.FRANCE</code>
> + *
> + * @author mbenson
> + */
> + public static class FR extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.FRANCE;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.KOREA</code>
> + *
> + * @author mbenson
> + */
> + public static class KR extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.KOREA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.TAIWAN</code>
> + *
> + * @author mbenson
> + */
> + public static class TW extends ExtendedMessageFormatBaselineTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.TAIWAN;
> + }
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + protected MessageFormat createMessageFormat(String pattern, Locale locale) {
> + return new ExtendedMessageFormat(pattern, locale, ExtendedMessageFormat
> + .createDefaultMetaFormat(locale));
> }
>
> }
>
> Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java (original)
> +++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatExtensionTest.java Tue Nov 27 09:27:35 2007
> @@ -16,11 +16,13 @@
> */
> package org.apache.commons.lang.text;
>
> +import java.text.DateFormat;
> import java.text.FieldPosition;
> import java.text.Format;
> import java.text.MessageFormat;
> import java.text.ParsePosition;
> import java.util.Calendar;
> +import java.util.Date;
> import java.util.GregorianCalendar;
> import java.util.Locale;
>
> @@ -31,22 +33,162 @@
> * @since 2.4
> * @version $Id$
> */
> -public class MessageFormatExtensionTest extends AbstractMessageFormatTest {
> +public abstract class MessageFormatExtensionTest extends
> + AbstractMessageFormatTest {
> + /**
> + * Tests for <code>Locale.US</code>
> + *
> + * @author mbenson
> + */
> + public static class US extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.US;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.UK</code>
> + *
> + * @author mbenson
> + */
> + public static class UK extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.UK;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.GERMANY</code>
> + *
> + * @author mbenson
> + */
> + public static class DE extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.GERMANY;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.ITALY</code>
> + *
> + * @author mbenson
> + */
> + public static class IT extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.ITALY;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.JAPAN</code>
> + *
> + * @author mbenson
> + */
> + public static class JP extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.JAPAN;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.CHINA</code>
> + *
> + * @author mbenson
> + */
> + public static class CN extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.CHINA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.CANADA</code>
> + *
> + * @author mbenson
> + */
> + public static class CA extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.CANADA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.FRANCE</code>
> + *
> + * @author mbenson
> + */
> + public static class FR extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.FRANCE;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.KOREA</code>
> + *
> + * @author mbenson
> + */
> + public static class KR extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.KOREA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.TAIWAN</code>
> + *
> + * @author mbenson
> + */
> + public static class TW extends MessageFormatExtensionTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.TAIWAN;
> + }
> + }
>
> static class ProperNameCapitalizationFormat extends Format {
> private static final long serialVersionUID = -6081911520622186866L;
> private static final StrMatcher MATCH = StrMatcher
> .charSetMatcher(" ,.");
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see java.text.Format#format(java.lang.Object,
> - * java.lang.StringBuffer, java.text.FieldPosition)
> + /**
> + * {@inheritDoc}
> */
> public StringBuffer format(Object obj, StringBuffer toAppendTo,
> FieldPosition fpos) {
> - char[] buffer = String.valueOf(obj).toCharArray();
> + if (!(obj instanceof String)) {
> + throw new IllegalArgumentException();
> + }
> + char[] buffer = ((String) obj).toCharArray();
> ParsePosition pos = new ParsePosition(0);
> while (pos.getIndex() < buffer.length) {
> char c = buffer[pos.getIndex()];
> @@ -91,17 +233,17 @@
> }
> }
>
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> + /**
> + * {@inheritDoc}
> */
> - protected MessageFormat createMessageFormat(String pattern) {
> - return new ExtendedMessageFormat(pattern, new MultiFormat.Builder()
> - .add(ExtendedMessageFormat.createDefaultMetaFormat(Locale.US)).add(
> + protected MessageFormat createMessageFormat(String pattern, Locale locale) {
> + return new ExtendedMessageFormat(pattern, locale,
> + new MultiFormat.Builder().add(
> new NameKeyedMetaFormat.Builder().put("properName",
> new ProperNameCapitalizationFormat())
> - .toNameKeyedMetaFormat()).toMultiFormat());
> + .toNameKeyedMetaFormat()).add(
> + ExtendedMessageFormat.createDefaultMetaFormat(locale))
> + .toMultiFormat());
> }
>
> public void testProperName() {
> @@ -111,10 +253,23 @@
> }
>
> public void testMixed() {
> - doAssertions("John Q. Public was born on Thursday, January 1, 1970.",
> - "{0,properName} was born on {1,date,full}.", new Object[] {
> + StringBuffer expected = new StringBuffer("John Q. Public was born on ");
> + Date dob = new GregorianCalendar(1970, Calendar.JANUARY, 01, 0, 15, 20)
> + .getTime();
> + DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG, locale);
> + longDf.format(dob, expected, new FieldPosition(0));
> + expected.append('.');
> + String pattern = "{0,properName} was born on {1,date,long}.";
> + StringBuffer toPattern = new StringBuffer(pattern);
> + if (longDf.equals(DateFormat.getDateInstance(DateFormat.DEFAULT, locale))) {
> + int idx = pattern.indexOf(",long");
> + toPattern.delete(idx, idx + ",long".length());
> + }
> + doAssertions(expected.toString(),
> + pattern, new Object[] {
> "john q. public",
> new GregorianCalendar(1970, Calendar.JANUARY, 01, 0,
> - 15, 20).getTime() });
> + 15, 20).getTime() }, toPattern.toString());
> }
> +
> }
>
> Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java (original)
> +++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/MessageFormatTest.java Tue Nov 27 09:27:35 2007
> @@ -10,13 +10,152 @@
> * @since 2.4
> * @version $Id$
> */
> -public class MessageFormatTest extends AbstractMessageFormatTest {
> - /*
> - * (non-Javadoc)
> +public abstract class MessageFormatTest extends AbstractMessageFormatTest {
> +
> + /**
> + * Tests for <code>Locale.US</code>
> *
> - * @see org.apache.commons.lang.text.AbstractMessageFormatTest#createMessageFormat(java.lang.String)
> + * @author mbenson
> */
> - protected MessageFormat createMessageFormat(String pattern) {
> - return new MessageFormat(pattern, Locale.US);
> + public static class US extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.US;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.UK</code>
> + *
> + * @author mbenson
> + */
> + public static class UK extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.UK;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.GERMANY</code>
> + *
> + * @author mbenson
> + */
> + public static class DE extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.GERMANY;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.ITALY</code>
> + *
> + * @author mbenson
> + */
> + public static class IT extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.ITALY;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.JAPAN</code>
> + *
> + * @author mbenson
> + */
> + public static class JP extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.JAPAN;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.CHINA</code>
> + *
> + * @author mbenson
> + */
> + public static class CN extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.CHINA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.CANADA</code>
> + *
> + * @author mbenson
> + */
> + public static class CA extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.CANADA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.FRANCE</code>
> + *
> + * @author mbenson
> + */
> + public static class FR extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.FRANCE;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.KOREA</code>
> + *
> + * @author mbenson
> + */
> + public static class KR extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.KOREA;
> + }
> + }
> +
> + /**
> + * Tests for <code>Locale.TAIWAN</code>
> + *
> + * @author mbenson
> + */
> + public static class TW extends MessageFormatTest {
> + /**
> + * {@inheritDoc}
> + */
> + protected Locale getLocale() {
> + return Locale.TAIWAN;
> + }
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + protected MessageFormat createMessageFormat(String pattern, Locale locale) {
> + return new MessageFormat(pattern, locale);
> }
> }
>
> Modified: commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java
> URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java?rev=598707&r1=598706&r2=598707&view=diff
> ==============================================================================
> --- commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java (original)
> +++ commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/TextTestSuite.java Tue Nov 27 09:27:35 2007
> @@ -57,9 +57,36 @@
> suite.addTest(StrSubstitutorTest.suite());
> suite.addTest(StrTokenizerTest.suite());
> suite.addTestSuite(MultiFormatTest.class);
> - suite.addTestSuite(MessageFormatTest.class);
> - suite.addTestSuite(ExtendedMessageFormatBaselineTest.class);
> - suite.addTestSuite(MessageFormatExtensionTest.class);
> + suite.addTestSuite(MessageFormatTest.US.class);
> + suite.addTestSuite(MessageFormatTest.UK.class);
> + suite.addTestSuite(MessageFormatTest.DE.class);
> + suite.addTestSuite(MessageFormatTest.IT.class);
> + suite.addTestSuite(MessageFormatTest.JP.class);
> + suite.addTestSuite(MessageFormatTest.CA.class);
> + suite.addTestSuite(MessageFormatTest.CN.class);
> + suite.addTestSuite(MessageFormatTest.FR.class);
> + suite.addTestSuite(MessageFormatTest.KR.class);
> + suite.addTestSuite(MessageFormatTest.TW.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.US.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.UK.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.DE.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.IT.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.JP.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.CA.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.CN.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.FR.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.KR.class);
> + suite.addTestSuite(ExtendedMessageFormatBaselineTest.TW.class);
> + suite.addTestSuite(MessageFormatExtensionTest.US.class);
> + suite.addTestSuite(MessageFormatExtensionTest.UK.class);
> + suite.addTestSuite(MessageFormatExtensionTest.DE.class);
> + suite.addTestSuite(MessageFormatExtensionTest.IT.class);
> + suite.addTestSuite(MessageFormatExtensionTest.JP.class);
> + suite.addTestSuite(MessageFormatExtensionTest.CA.class);
> + suite.addTestSuite(MessageFormatExtensionTest.CN.class);
> + suite.addTestSuite(MessageFormatExtensionTest.FR.class);
> + suite.addTestSuite(MessageFormatExtensionTest.KR.class);
> + suite.addTestSuite(MessageFormatExtensionTest.TW.class);
> return suite;
> }
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org