1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package tests.support; 19 20 import java.text.AttributedCharacterIterator; 21 import java.text.FieldPosition; 22 import java.text.Format; 23 import java.text.AttributedCharacterIterator.Attribute; 24 import java.util.Iterator; 25 import java.util.Vector; 26 import junit.framework.TestCase; 27 28 public class Support_Format extends TestCase { 29 30 protected String text; 31 Support_Format(String p1)32 public Support_Format(String p1) { 33 super(p1); 34 } 35 t_FormatWithField(int count, Format format, Object object, String text, Format.Field field, int begin, int end)36 protected void t_FormatWithField(int count, Format format, Object object, 37 String text, Format.Field field, int begin, int end) { 38 StringBuffer buffer = new StringBuffer(); 39 FieldPosition pos = new FieldPosition(field); 40 format.format(object, buffer, pos); 41 42 // System.out.println(buffer); 43 // System.out.println(pos); 44 45 if (text == null) { 46 assertEquals("Test " + count + ": incorrect formatted text", 47 this.text, buffer.toString()); 48 } else { 49 assertEquals("Test " + count + ": incorrect formatted text", text, 50 buffer.toString()); 51 } 52 53 assertEquals("Test " + count + ": incorrect begin index for field " 54 + field, begin, pos.getBeginIndex()); 55 assertEquals("Test " + count + ": incorrect end index for field" 56 + field, end, pos.getEndIndex()); 57 } 58 t_Format(int count, Object object, Format format, Vector<FieldContainer> expectedResults)59 protected void t_Format(int count, Object object, Format format, 60 Vector<FieldContainer> expectedResults) { 61 // System.out.println(format.format(object)); 62 Vector<FieldContainer> results = findFields(format.formatToCharacterIterator(object)); 63 assertTrue("Test " + count 64 + ": Format returned incorrect CharacterIterator for " 65 + format.format(object), compare(results, expectedResults)); 66 } 67 68 /** 69 * compares two vectors regardless of the order of their elements 70 */ compare(Vector<FieldContainer> vector1, Vector<FieldContainer> vector2)71 protected static boolean compare(Vector<FieldContainer> vector1, Vector<FieldContainer> vector2) { 72 return vector1.size() == vector2.size() && vector1.containsAll(vector2); 73 } 74 75 /** 76 * finds attributes with regards to char index in this 77 * AttributedCharacterIterator, and puts them in a vector 78 * 79 * @param iterator 80 * @return a vector, each entry in this vector are of type FieldContainer , 81 * which stores start and end indexes and an attribute this range 82 * has 83 */ findFields(AttributedCharacterIterator iterator)84 protected static Vector<FieldContainer> findFields(AttributedCharacterIterator iterator) { 85 Vector<FieldContainer> result = new Vector<FieldContainer>(); 86 while (iterator.getIndex() != iterator.getEndIndex()) { 87 int start = iterator.getRunStart(); 88 int end = iterator.getRunLimit(); 89 90 Iterator<Attribute> it = iterator.getAttributes().keySet().iterator(); 91 while (it.hasNext()) { 92 AttributedCharacterIterator.Attribute attribute = it.next(); 93 Object value = iterator.getAttribute(attribute); 94 result.add(new FieldContainer(start, end, attribute, value)); 95 // System.out.println(start + " " + end + ": " + attribute + ", 96 // " + value ); 97 // System.out.println("v.add(new FieldContainer(" + start +"," + 98 // end +"," + attribute+ "," + value+ "));"); 99 } 100 iterator.setIndex(end); 101 } 102 return result; 103 } 104 105 protected static class FieldContainer { 106 int start, end; 107 108 AttributedCharacterIterator.Attribute attribute; 109 110 Object value; 111 112 // called from support_decimalformat and support_simpledateformat tests FieldContainer(int start, int end, AttributedCharacterIterator.Attribute attribute)113 public FieldContainer(int start, int end, 114 AttributedCharacterIterator.Attribute attribute) { 115 this(start, end, attribute, attribute); 116 } 117 118 // called from support_messageformat tests FieldContainer(int start, int end, Attribute attribute, int value)119 public FieldContainer(int start, int end, Attribute attribute, int value) { 120 this(start, end, attribute, new Integer(value)); 121 } 122 123 // called from support_messageformat tests FieldContainer(int start, int end, Attribute attribute, Object value)124 public FieldContainer(int start, int end, Attribute attribute, 125 Object value) { 126 this.start = start; 127 this.end = end; 128 this.attribute = attribute; 129 this.value = value; 130 } 131 132 @Override equals(Object obj)133 public boolean equals(Object obj) { 134 if (!(obj instanceof FieldContainer)) { 135 return false; 136 } 137 138 FieldContainer fc = (FieldContainer) obj; 139 return (start == fc.start && end == fc.end 140 && attribute == fc.attribute && value.equals(fc.value)); 141 } 142 } 143 } 144