/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.guiceyfruit;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.internal.Lists;
import com.google.inject.matcher.Matchers;
import java.util.Collection;
import junit.framework.TestCase;
import org.hamcrest.Matcher;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
/** @version $Revision: 1.1 $ */
public class InjectorsTest extends TestCase {
public void testMatchers() throws Exception {
Injector injector = Guice.createInjector(new MyModule());
assertMatches(Injectors.getInstancesOf(injector, A.class), hasSize(2));
assertMatches(Injectors.getInstancesOf(injector, B.class), hasSize(1));
assertMatches(Injectors.getInstancesOf(injector, C.class), hasSize(1));
assertMatches(Injectors.getInstancesOf(injector,
Matchers.subclassesOf(C.class).and(Matchers.annotatedWith(Blue.class))), hasSize(1));
}
public static class MyModule extends AbstractModule {
protected void configure() {
bind(C.class);
bind(B.class);
}
}
public static class A {
public String name = "A";
}
public static class B extends A {
public B() {
name = "B";
}
}
@Blue
public static class C extends A {
public C() {
name = "C";
}
}
// TODO hack to get around generics issue with hamcrest
private void assertMatches(Collection<?> set, Matcher<Collection<Object>> matcher) {
Collection<Object> list = Lists.newArrayList(set);
assertThat(list, matcher);
}
}