• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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