/**
* Copyright (C) 2016 Red Hat, Inc. and/or its affiliates.
*
* 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 org.jboss.errai.ioc.unit.test;
import static org.jboss.errai.ioc.rebind.ioc.graph.api.DependencyGraphBuilder.InjectableType.Producer;
import static org.jboss.errai.ioc.rebind.ioc.graph.api.DependencyGraphBuilder.InjectableType.Type;
import static org.junit.Assert.assertEquals;
import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Named;
import org.jboss.errai.codegen.meta.MetaClass;
import org.jboss.errai.codegen.meta.MetaClassFactory;
import org.jboss.errai.ioc.rebind.ioc.graph.api.Qualifier;
import org.jboss.errai.ioc.rebind.ioc.graph.api.QualifierFactory;
import org.jboss.errai.ioc.rebind.ioc.graph.impl.DefaultQualifierFactory;
import org.jboss.errai.ioc.rebind.ioc.graph.impl.FactoryNameGenerator;
import org.jboss.errai.ioc.unit.res.CustomQualifier;
import org.jboss.errai.ioc.unit.res.SomeClass.SomeInnerClass;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author Max Barkley <mbarkley@redhat.com>
*/
public class FactoryNameGeneratorTest {
private FactoryNameGenerator generator;
private final QualifierFactory qualFactory = new DefaultQualifierFactory();
private final MetaClass object = MetaClassFactory.get(Object.class);
private final Qualifier defaultQualifier = qualFactory.forDefault();
@Before
public void setup() {
generator = new FactoryNameGenerator();
}
@Test
public void typeWithDefaultQualifiers() throws Exception {
final String generated = generator.generateFor(object, defaultQualifier, Type);
assertEquals("Type_factory__j_l_Object__quals__j_e_i_Any_j_e_i_Default", generated);
}
@Test
public void producerWithDefaultQualifiers() throws Exception {
final String generated = generator.generateFor(object, defaultQualifier, Producer);
assertEquals("Producer_factory__j_l_Object__quals__j_e_i_Any_j_e_i_Default", generated);
}
@Test
public void typeWithNamedQualifier() throws Exception {
final Qualifier namedQualifier = qualFactory.forSource(() -> new Annotation[] { new Named() {
@Override
public Class<? extends Annotation> annotationType() {
return Named.class;
}
@Override
public String value() {
return "foo";
}
}});
final String generated = generator.generateFor(object, namedQualifier, Type);
assertEquals("Type_factory__j_l_Object__quals__j_e_i_Any_j_e_i_Default_j_i_Named", generated);
}
@Test
public void typeWithCustomQualifier() throws Exception {
final Qualifier customQualifier = qualFactory.forSource(() -> new Annotation[] { new CustomQualifier() {
@Override
public Class<? extends Annotation> annotationType() {
return CustomQualifier.class;
}
}});
final String generated = generator.generateFor(object, customQualifier, Type);
assertEquals("Type_factory__j_l_Object__quals__j_e_i_Any_o_j_e_i_u_r_CustomQualifier", generated);
}
@Test
public void staticInnerTypeWithDefaultQualifiers() throws Exception {
final String generated = generator.generateFor(MetaClassFactory.get(SomeInnerClass.class), defaultQualifier, Type);
assertEquals("Type_factory__o_j_e_i_u_r_SomeClass_SomeInnerClass__quals__j_e_i_Any_j_e_i_Default", generated);
}
@Test
public void multipleCallsProduceDifferentNames() throws Exception {
final Set<String> names = new HashSet<>();
final int CALLS = 100;
for (int i = 0; i < 100; i++) {
names.add(generator.generateFor(object, defaultQualifier, Type));
}
assertEquals(CALLS, names.size());
}
}