summaryrefslogtreecommitdiffstats
path: root/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_Format.java
diff options
context:
space:
mode:
Diffstat (limited to 'harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_Format.java')
-rw-r--r--harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_Format.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_Format.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_Format.java
new file mode 100644
index 0000000..493e27e
--- /dev/null
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/text/Support_Format.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.tests.java.text;
+
+import java.text.AttributedCharacterIterator;
+import java.text.FieldPosition;
+import java.text.Format;
+import java.text.AttributedCharacterIterator.Attribute;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Vector;
+import junit.framework.TestCase;
+
+public class Support_Format extends TestCase {
+
+ protected String text;
+
+ public Support_Format(String p1) {
+ super(p1);
+ }
+
+ protected void t_FormatWithField(int count, Format format, Object object,
+ String text, Format.Field field, int begin, int end) {
+ StringBuffer buffer = new StringBuffer();
+ FieldPosition pos = new FieldPosition(field);
+ format.format(object, buffer, pos);
+
+ // System.out.println(buffer);
+ // System.out.println(pos);
+
+ if (text == null) {
+ assertEquals("Test " + count + ": incorrect formatted text", this.text, buffer.toString());
+ } else {
+ assertEquals(text, buffer.toString());
+ }
+
+ if (begin != pos.getBeginIndex() || end != pos.getEndIndex()) {
+ assertEquals(field + " " + begin + ".." + end,
+ pos.getFieldAttribute() + " " + pos.getBeginIndex() + ".." + pos.getEndIndex());
+ }
+ }
+
+ protected void t_Format(int count, Object object, Format format, Vector<FieldContainer> expectedResults) {
+ Vector<FieldContainer> results = findFields(format.formatToCharacterIterator(object));
+ assertEquals("size mismatch\n" +
+ format.format(object) + "\n" +
+ "expectedResults=" + expectedResults + "\n" +
+ " results=" + results, expectedResults.size(), results.size());
+ for (int i = 0; i < results.size(); ++i) {
+ if (!results.contains(expectedResults.get(i))) {
+ fail("didn't find expected result " + expectedResults.get(i) + "\n" +
+ "expectedResults=" + expectedResults + "\n" +
+ " results=" + results);
+ }
+ }
+ }
+
+ /**
+ * finds attributes with regards to char index in this
+ * AttributedCharacterIterator, and puts them in a vector
+ *
+ * @param iterator
+ * @return a vector, each entry in this vector are of type FieldContainer,
+ * which stores start and end indexes and an attribute this range has
+ */
+ protected static Vector<FieldContainer> findFields(AttributedCharacterIterator iterator) {
+ Vector<FieldContainer> result = new Vector<FieldContainer>();
+ while (iterator.getIndex() != iterator.getEndIndex()) {
+ int start = iterator.getRunStart();
+ int end = iterator.getRunLimit();
+
+ Iterator<Attribute> it = iterator.getAttributes().keySet().iterator();
+ while (it.hasNext()) {
+ AttributedCharacterIterator.Attribute attribute = it.next();
+ Object value = iterator.getAttribute(attribute);
+ result.add(new FieldContainer(start, end, attribute, value));
+ // System.out.println(start + " " + end + ": " + attribute + ",
+ // " + value );
+ // System.out.println("v.add(new FieldContainer(" + start +"," +
+ // end +"," + attribute+ "," + value+ "));");
+ }
+ iterator.setIndex(end);
+ }
+ return result;
+ }
+
+ static class FieldContainer {
+ final int start;
+ final int end;
+ final Attribute attribute;
+ final Object value;
+
+ // called from Support_DecimalFormat and Support_SimpleDateFormat tests
+ public FieldContainer(int start, int end, Attribute attribute) {
+ this(start, end, attribute, attribute);
+ }
+
+ // called from Support_MessageFormat tests
+ public FieldContainer(int start, int end, Attribute attribute, int value) {
+ this(start, end, attribute, new Integer(value));
+ }
+
+ // called from Support_MessageFormat tests
+ public FieldContainer(int start, int end, Attribute attribute, Object value) {
+ this.start = start;
+ this.end = end;
+ this.attribute = attribute;
+ this.value = value;
+ }
+
+ @Override public boolean equals(Object obj) {
+ if (!(obj instanceof FieldContainer)) {
+ return false;
+ }
+
+ FieldContainer fc = (FieldContainer) obj;
+ return (start == fc.start && end == fc.end && attribute == fc.attribute && value.equals(fc.value));
+ }
+
+ @Override public String toString() {
+ return "FC[" + start + ".." + end + ",attribute=" + attribute + ",value=" + value + "]";
+ }
+ }
+}