package fr.adrienbrault.idea.symfony2plugin.tests.stubs;
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerParameter;
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerService;
import fr.adrienbrault.idea.symfony2plugin.stubs.ContainerCollectionResolver;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import org.jetbrains.yaml.YAMLFileType;
import java.io.File;
import java.util.Set;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see fr.adrienbrault.idea.symfony2plugin.stubs.ContainerCollectionResolver
*/
public class ContainerCollectionResolverTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.configureByText("foo1.yml", "" +
"parameters:\n" +
" bar: foo\n" +
"\n" +
"services:\n" +
" foo:\n" +
" class: DateTime\n" +
" foo_slash:\n" +
" class: \\DateTime\n" +
" foo_UPPER:\n" +
" class: \\DateTime\n" +
" foo_datetime:\n" +
" class: \\DateTime\n"
);
myFixture.configureByText("foo2.yml", "" +
"services:\n" +
" foo_datetime:\n" +
" class: \\DateTimeInterface\n"
);
myFixture.configureByText("foo3.yml", "" +
"services:\n" +
" foo_datetime:\n" +
" class: DateTimeInterface\n"
);
myFixture.configureByText("foo4.yml", "" +
"parameters:\n" +
" bar: foo\n" +
"\n" +
"services:\n" +
" foo_datetime:\n" +
" class: %bar%\n"
);
myFixture.copyFileToProject("ContainerBuilder.php");
myFixture.copyFileToProject("decorator.services.xml");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testCaseInsensitiveService() {
assertEquals("DateTime", ContainerCollectionResolver.getService(getProject(), "foo").getClassName());
assertEquals("DateTime", ContainerCollectionResolver.getService(getProject(), "foo_upper").getClassName());
assertEquals("DateTime", ContainerCollectionResolver.getService(getProject(), "Foo").getClassName());
assertTrue(ContainerCollectionResolver.hasServiceNames(getProject(), "foo"));
assertTrue(ContainerCollectionResolver.hasServiceNames(getProject(), "Foo"));
}
public void testCaseInsensitiveParameter() {
assertTrue(ContainerCollectionResolver.getParameterNames(getProject()).contains("Bar"));
assertTrue(ContainerCollectionResolver.getParameterNames(getProject()).contains("bar"));
}
public void testThatLeadingSlashIsStripped() {
assertEquals("DateTime", ContainerCollectionResolver.getService(getProject(), "foo_slash").getClassName());
}
public void testThatDuplicateClassNamesProvidesVariantsAndResolvesParameter() {
ContainerService results = ContainerCollectionResolver.getService(getProject(), "foo_datetime");
Set<String> classNames = results.getClassNames();
assertSize(3, classNames);
assertTrue(classNames.contains("DateTime"));
assertTrue(classNames.contains("DateTimeInterface"));
assertTrue(classNames.contains("foo"));
}
public void testThatAliasedServiceIsEqualWithMainService() {
myFixture.configureByText(YAMLFileType.YML, "" +
"services:\n" +
" foo_as_alias:\n" +
" alias: foo\n" +
" foo:\n" +
" class: DateTime\n"
);
assertTrue(ContainerCollectionResolver.hasServiceNames(getProject(), "foo_as_alias"));
assertTrue(ContainerCollectionResolver.hasServiceNames(getProject(), "foo"));
assertEquals("DateTime", ContainerCollectionResolver.getService(getProject(), "foo_as_alias").getClassName());
assertEquals("DateTime", ContainerCollectionResolver.getService(getProject(), "foo").getClassName());
}
public void testThatContainerBuilderParameterAreCollected() {
assertContainsElements(ContainerCollectionResolver.getParameterNames(getProject()), "container.builder.parameter");
ContainerParameter containerParameter = ContainerCollectionResolver.getParameters(getProject()).get("container.builder.parameter");
assertNotNull(containerParameter);
assertTrue(containerParameter.isWeak());
}
public void testThatDecoratedServiceProvidesInner() {
ContainerService service = ContainerCollectionResolver.getService(getProject(), "espend.my_next_foo.inner");
assertNotNull(service);
assertEquals("espend\\MyFirstFoo", service.getClassName());
assertEquals("espend.my_next_foo.inner", service.getName());
service = ContainerCollectionResolver.getService(getProject(), "espend.my_bar_customer_inner.inner_foo");
assertNotNull(service);
assertEquals("espend\\MyNextFoo", service.getClassName());
assertEquals("espend.my_bar_customer_inner.inner_foo", service.getName());
assertEquals(true, service.isPrivate());
assertEquals(true, service.isWeak());
}
}