1 package org.apache.lucene.analysis.tokenattributes;
4 * Licensed to the Apache Software Foundation (ASF) under one or more
5 * contributor license agreements. See the NOTICE file distributed with
6 * this work for additional information regarding copyright ownership.
7 * The ASF licenses this file to You under the Apache License, Version 2.0
8 * (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
20 import org.apache.lucene.index.Payload;
21 import org.apache.lucene.util.AttributeImpl;
22 import org.apache.lucene.util.LuceneTestCase;
23 import org.apache.lucene.util.AttributeSource.AttributeFactory;
24 import org.apache.lucene.util._TestUtil;
26 import java.util.Collections;
27 import java.util.HashMap;
30 public class TestSimpleAttributeImpls extends LuceneTestCase {
32 public void testFlagsAttribute() throws Exception {
33 FlagsAttributeImpl att = new FlagsAttributeImpl();
34 assertEquals(0, att.getFlags());
37 assertEquals("flags=1234", att.toString());
39 FlagsAttributeImpl att2 = (FlagsAttributeImpl) assertCloneIsEqual(att);
40 assertEquals(1234, att2.getFlags());
42 att2 = (FlagsAttributeImpl) assertCopyIsEqual(att);
43 assertEquals(1234, att2.getFlags());
46 assertEquals(0, att.getFlags());
48 _TestUtil.assertAttributeReflection(att,
49 Collections.singletonMap(FlagsAttribute.class.getName() + "#flags", att.getFlags()));
52 public void testPositionIncrementAttribute() throws Exception {
53 PositionIncrementAttributeImpl att = new PositionIncrementAttributeImpl();
54 assertEquals(1, att.getPositionIncrement());
56 att.setPositionIncrement(1234);
57 assertEquals("positionIncrement=1234", att.toString());
59 PositionIncrementAttributeImpl att2 = (PositionIncrementAttributeImpl) assertCloneIsEqual(att);
60 assertEquals(1234, att2.getPositionIncrement());
62 att2 = (PositionIncrementAttributeImpl) assertCopyIsEqual(att);
63 assertEquals(1234, att2.getPositionIncrement());
66 assertEquals(1, att.getPositionIncrement());
68 _TestUtil.assertAttributeReflection(att,
69 Collections.singletonMap(PositionIncrementAttribute.class.getName() + "#positionIncrement", att.getPositionIncrement()));
72 public void testTypeAttribute() throws Exception {
73 TypeAttributeImpl att = new TypeAttributeImpl();
74 assertEquals(TypeAttribute.DEFAULT_TYPE, att.type());
77 assertEquals("type=hallo", att.toString());
79 TypeAttributeImpl att2 = (TypeAttributeImpl) assertCloneIsEqual(att);
80 assertEquals("hallo", att2.type());
82 att2 = (TypeAttributeImpl) assertCopyIsEqual(att);
83 assertEquals("hallo", att2.type());
86 assertEquals(TypeAttribute.DEFAULT_TYPE, att.type());
88 _TestUtil.assertAttributeReflection(att,
89 Collections.singletonMap(TypeAttribute.class.getName() + "#type", att.type()));
92 public void testPayloadAttribute() throws Exception {
93 PayloadAttributeImpl att = new PayloadAttributeImpl();
94 assertNull(att.getPayload());
96 Payload pl = new Payload(new byte[]{1,2,3,4});
99 _TestUtil.assertAttributeReflection(att,
100 Collections.singletonMap(PayloadAttribute.class.getName() + "#payload", pl));
102 PayloadAttributeImpl att2 = (PayloadAttributeImpl) assertCloneIsEqual(att);
103 assertEquals(pl, att2.getPayload());
104 assertNotSame(pl, att2.getPayload());
106 att2 = (PayloadAttributeImpl) assertCopyIsEqual(att);
107 assertEquals(pl, att2.getPayload());
108 assertNotSame(pl, att2.getPayload());
111 assertNull(att.getPayload());
114 public void testOffsetAttribute() throws Exception {
115 OffsetAttributeImpl att = new OffsetAttributeImpl();
116 assertEquals(0, att.startOffset());
117 assertEquals(0, att.endOffset());
119 att.setOffset(12, 34);
120 // no string test here, because order unknown
122 _TestUtil.assertAttributeReflection(att,
123 new HashMap<String,Object>() {{
124 put(OffsetAttribute.class.getName() + "#startOffset", 12);
125 put(OffsetAttribute.class.getName() + "#endOffset", 34);
128 OffsetAttributeImpl att2 = (OffsetAttributeImpl) assertCloneIsEqual(att);
129 assertEquals(12, att2.startOffset());
130 assertEquals(34, att2.endOffset());
132 att2 = (OffsetAttributeImpl) assertCopyIsEqual(att);
133 assertEquals(12, att2.startOffset());
134 assertEquals(34, att2.endOffset());
137 assertEquals(0, att.startOffset());
138 assertEquals(0, att.endOffset());
141 public void testKeywordAttribute() {
142 AttributeImpl attrImpl = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY.createAttributeInstance(KeywordAttribute.class);
143 assertSame(KeywordAttributeImpl.class, attrImpl.getClass());
144 KeywordAttributeImpl att = (KeywordAttributeImpl) attrImpl;
145 assertFalse(att.isKeyword());
146 att.setKeyword(true);
147 assertTrue(att.isKeyword());
149 KeywordAttributeImpl assertCloneIsEqual = (KeywordAttributeImpl) assertCloneIsEqual(att);
150 assertTrue(assertCloneIsEqual.isKeyword());
151 assertCloneIsEqual.clear();
152 assertFalse(assertCloneIsEqual.isKeyword());
153 assertTrue(att.isKeyword());
155 att.copyTo(assertCloneIsEqual);
156 assertTrue(assertCloneIsEqual.isKeyword());
157 assertTrue(att.isKeyword());
159 _TestUtil.assertAttributeReflection(att,
160 Collections.singletonMap(KeywordAttribute.class.getName() + "#keyword", att.isKeyword()));
163 public static final AttributeImpl assertCloneIsEqual(AttributeImpl att) {
164 AttributeImpl clone = (AttributeImpl) att.clone();
165 assertEquals("Clone must be equal", att, clone);
166 assertEquals("Clone's hashcode must be equal", att.hashCode(), clone.hashCode());
170 public static final AttributeImpl assertCopyIsEqual(AttributeImpl att) throws Exception {
171 AttributeImpl copy = att.getClass().newInstance();
173 assertEquals("Copied instance must be equal", att, copy);
174 assertEquals("Copied instance's hashcode must be equal", att.hashCode(), copy.hashCode());