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
18package org.apache.harmony.text.tests.java.text;
19
20import java.text.AttributedCharacterIterator;
21import java.text.AttributedCharacterIterator.Attribute;
22import java.io.ByteArrayInputStream;
23import java.io.ByteArrayOutputStream;
24import java.io.NotSerializableException;
25import java.io.IOException;
26import java.io.ObjectInputStream;
27import java.io.ObjectOutputStream;
28import java.util.Locale;
29import java.text.Annotation;
30
31public class AttributedCharacterIteratorAttributeTest extends junit.framework.TestCase {
32
33	/**
34     * @tests java.text.AttributedCharacterIterator$Attribute()
35     */
36	public void test_constructor() {
37		MyAttribute attribute = new MyAttribute("attribute");
38
39		assertEquals("Attribute has wrong name", "attribute", attribute.getExposedName());
40
41		attribute = new MyAttribute(null);
42		assertEquals("Attribute has wrong name", null, attribute.getExposedName());
43	}
44
45	/**
46	 * @tests java.text.AttributedCharacterIterator.Attribute#equals(Object)
47	 */
48	public void test_equals() {
49
50		assertTrue(Attribute.LANGUAGE.equals(Attribute.LANGUAGE));
51
52		assertFalse(Attribute.LANGUAGE.equals(Attribute.READING));
53
54		MyAttribute attribute = new MyAttribute("test");
55
56		assertTrue(attribute.equals(attribute));
57
58		/* this implementation of equals should only return true
59		 * if the same objects */
60		assertFalse(attribute.equals(new MyAttribute("test")));
61
62		attribute = new MyAttribute(null);
63		assertFalse(attribute.equals(new MyAttribute(null)));
64	}
65
66	 /**
67     * @tests java.text.AttributedCharacterIterator$Attribute#readResolve()
68     */
69    public void test_readResolve() {
70        // test for method java.lang.Object readResolve()
71
72        ObjectOutputStream out = null;
73        ObjectInputStream in = null;
74        try {
75            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
76            out = new ObjectOutputStream(bytes);
77
78            AttributedCharacterIterator.Attribute dattribute, dattribute2;
79            MyAttribute attribute;
80
81            // a regular instance of DateFormat.Field
82            dattribute = AttributedCharacterIterator.Attribute.LANGUAGE;
83
84            // a subclass instance with null name
85            attribute = new MyAttribute(null);
86
87            out.writeObject(dattribute);
88            try {
89                out.writeObject(attribute);
90            } catch (NotSerializableException e) {
91            }
92
93            in = new ObjectInputStream(new ByteArrayInputStream(bytes
94                    .toByteArray()));
95
96            try {
97                dattribute2 = (AttributedCharacterIterator.Attribute) in.readObject();
98                assertSame("resolved incorrectly", dattribute, dattribute2);
99            } catch (IllegalArgumentException e) {
100                fail("Unexpected IllegalArgumentException: " + e);
101            }
102
103        } catch (IOException e) {
104            fail("unexpected IOException" + e);
105        } catch (ClassNotFoundException e) {
106            fail("unexpected ClassNotFoundException" + e);
107        } finally {
108            try {
109                if (out != null)
110                    out.close();
111                if (in != null)
112                    in.close();
113            } catch (IOException e) {
114            }
115        }
116    }
117
118    /**
119     * @tests java.text.AttributedCharacterIterator$Attribute#LANGUAGE
120     * java.text.AttributedCharacterIterator$Attribute#READING
121     * java.text.AttributedCharacterIterator$Attribute#INPUT_METHOD_SEGMENT
122     */
123	public void test_fields() {
124
125        // Just check that the fields are accessible as all
126        // methods are protected
127		Attribute language = Attribute.LANGUAGE;
128		Attribute reading = Attribute.READING;
129		Attribute inputMethodSegment = Attribute.INPUT_METHOD_SEGMENT;
130	}
131
132	protected void setUp() {
133	}
134
135	protected void tearDown() {
136	}
137
138	class MyAttribute extends AttributedCharacterIterator.Attribute {
139		protected MyAttribute(String name) {
140			super(name);
141		}
142
143		public Object getExposedName() {
144			return this.getName();
145		}
146	}
147}