/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.citrus.springext.impl;
import static com.alibaba.citrus.springext.ContributionType.*;
import static com.alibaba.citrus.test.TestUtil.*;
import static com.alibaba.citrus.util.CollectionUtil.*;
import static org.junit.Assert.*;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import com.alibaba.citrus.test.runner.TestNameAware;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(TestNameAware.class)
public class ContributionKeyTests {
private ContributionKey key;
@Test
public void create() {
try {
new ContributionKey(null, null);
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("name"));
}
try {
new ContributionKey("name", null);
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("type"));
}
new ContributionKey("name", BEAN_DEFINITION_PARSER);
}
@Test
public void getNameAndType() {
key = new ContributionKey("myname", BEAN_DEFINITION_PARSER);
assertEquals("myname", key.getName());
assertEquals(BEAN_DEFINITION_PARSER, key.getType());
}
@Test
public void hashCodeAndEquals() {
assertHashCodeAndEquals(new ContributionKey("myname", BEAN_DEFINITION_PARSER), new ContributionKey("myname",
BEAN_DEFINITION_PARSER), true);
assertHashCodeAndEquals(new ContributionKey("myname", BEAN_DEFINITION_DECORATOR), new ContributionKey("myname",
BEAN_DEFINITION_DECORATOR), true);
assertHashCodeAndEquals(new ContributionKey("myname", BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE),
new ContributionKey("myname", BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE), true);
assertHashCodeAndEquals(new ContributionKey("myname", BEAN_DEFINITION_PARSER), new ContributionKey("myname",
BEAN_DEFINITION_DECORATOR), false);
assertHashCodeAndEquals(new ContributionKey("myname", BEAN_DEFINITION_DECORATOR), new ContributionKey("myname",
BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE), false);
assertHashCodeAndEquals(new ContributionKey("myname", BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE),
new ContributionKey("myname", BEAN_DEFINITION_PARSER), false);
}
private void assertHashCodeAndEquals(ContributionKey key1, ContributionKey key2, boolean equals) {
assertNotSame(key1, key2);
assertEquals(key1, key1);
assertEquals(key2, key2);
if (equals) {
assertEquals(key1, key2);
assertEquals(key1.hashCode(), key2.hashCode());
} else {
assertFalse(key1.equals(key2));
assertFalse(key1.hashCode() == key2.hashCode());
}
}
@Test
public void compare() {
List<ContributionKey> keys = createArrayList();
keys.add(new ContributionKey("ccc", BEAN_DEFINITION_PARSER));
keys.add(new ContributionKey("bbb", BEAN_DEFINITION_PARSER));
keys.add(new ContributionKey("aaa", BEAN_DEFINITION_PARSER));
keys.add(new ContributionKey("aaa", BEAN_DEFINITION_DECORATOR));
keys.add(new ContributionKey("bbb", BEAN_DEFINITION_DECORATOR));
keys.add(new ContributionKey("ccc", BEAN_DEFINITION_DECORATOR));
keys.add(new ContributionKey("ccc", BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE));
keys.add(new ContributionKey("aaa", BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE));
keys.add(new ContributionKey("bbb", BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE));
Collections.sort(keys);
Iterator<ContributionKey> i = keys.iterator();
assertEquals("ContributionKey[aaa, BEAN_DEFINITION_PARSER]", i.next().toString());
assertEquals("ContributionKey[aaa, BEAN_DEFINITION_DECORATOR]", i.next().toString());
assertEquals("ContributionKey[aaa, BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE]", i.next().toString());
assertEquals("ContributionKey[bbb, BEAN_DEFINITION_PARSER]", i.next().toString());
assertEquals("ContributionKey[bbb, BEAN_DEFINITION_DECORATOR]", i.next().toString());
assertEquals("ContributionKey[bbb, BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE]", i.next().toString());
assertEquals("ContributionKey[ccc, BEAN_DEFINITION_PARSER]", i.next().toString());
assertEquals("ContributionKey[ccc, BEAN_DEFINITION_DECORATOR]", i.next().toString());
assertEquals("ContributionKey[ccc, BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE]", i.next().toString());
assertFalse(i.hasNext());
}
@Test
public void toString_() {
assertEquals("ContributionKey[myname, BEAN_DEFINITION_PARSER]", new ContributionKey("myname",
BEAN_DEFINITION_PARSER).toString());
assertEquals("ContributionKey[myname, BEAN_DEFINITION_DECORATOR]", new ContributionKey("myname",
BEAN_DEFINITION_DECORATOR).toString());
assertEquals("ContributionKey[myname, BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE]", new ContributionKey("myname",
BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE).toString());
}
}