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