blob: d53a0ba5b82b2ea0344d71eb8eda460d78c74abb [file] [log] [blame]
/*
* 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 tests.support;
import java.text.AttributedCharacterIterator;
import java.text.FieldPosition;
import java.text.Format;
import java.text.AttributedCharacterIterator.Attribute;
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("Test " + count + ": incorrect formatted text", text,
buffer.toString());
}
assertEquals("Test " + count + ": incorrect begin index for field "
+ field, begin, pos.getBeginIndex());
assertEquals("Test " + count + ": incorrect end index for field"
+ field, end, pos.getEndIndex());
}
protected void t_Format(int count, Object object, Format format,
Vector<FieldContainer> expectedResults) {
// System.out.println(format.format(object));
Vector<FieldContainer> results = findFields(format.formatToCharacterIterator(object));
assertTrue("Test " + count
+ ": Format returned incorrect CharacterIterator for "
+ format.format(object), compare(results, expectedResults));
}
/**
* compares two vectors regardless of the order of their elements
*/
protected static boolean compare(Vector<FieldContainer> vector1, Vector<FieldContainer> vector2) {
return vector1.size() == vector2.size() && vector1.containsAll(vector2);
}
/**
* 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;
}
protected static class FieldContainer {
int start, end;
AttributedCharacterIterator.Attribute attribute;
Object value;
// called from support_decimalformat and support_simpledateformat tests
public FieldContainer(int start, int end,
AttributedCharacterIterator.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));
}
}
}