2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
5 package com
.intellij
.testFramework
.fixtures
.impl
;
7 import com
.intellij
.openapi
.module
.ModuleType
;
8 import com
.intellij
.openapi
.util
.Pair
;
9 import com
.intellij
.pom
.java
.LanguageLevel
;
10 import com
.intellij
.testFramework
.builders
.JavaModuleFixtureBuilder
;
11 import com
.intellij
.testFramework
.builders
.ModuleFixtureBuilder
;
12 import com
.intellij
.testFramework
.fixtures
.IdeaProjectTestFixture
;
13 import com
.intellij
.testFramework
.fixtures
.TestFixtureBuilder
;
14 import com
.intellij
.util
.containers
.FactoryMap
;
15 import com
.intellij
.util
.pico
.IdeaPicoContainer
;
16 import org
.picocontainer
.MutablePicoContainer
;
18 import java
.lang
.reflect
.Field
;
24 class HeavyTestFixtureBuilderImpl
implements TestFixtureBuilder
<IdeaProjectTestFixture
> {
25 private final FactoryMap
<Class
<?
extends ModuleFixtureBuilder
>, ModuleFixtureBuilder
> myModuleFixtureBuilderFactory
;
27 private HeavyIdeaTestFixtureImpl myFixture
;
29 public HeavyTestFixtureBuilderImpl(HeavyIdeaTestFixtureImpl fixture
, final Map
<Class
<?
extends ModuleFixtureBuilder
>, Class
<?
extends ModuleFixtureBuilder
>> providers
) {
32 final MutablePicoContainer container
= new IdeaPicoContainer();
33 container
.registerComponentInstance(this);
35 myModuleFixtureBuilderFactory
= new FactoryMap
<Class
<?
extends ModuleFixtureBuilder
>, ModuleFixtureBuilder
>() {
36 protected ModuleFixtureBuilder
create(Class
<?
extends ModuleFixtureBuilder
> key
) {
37 Class
<?
extends ModuleFixtureBuilder
> implClass
= providers
.get(key
);
38 container
.registerComponentImplementation(implClass
);
39 return (ModuleFixtureBuilder
)container
.getComponentInstanceOfType(implClass
);
44 public TestFixtureBuilder
<IdeaProjectTestFixture
> setModuleType(final ModuleType moduleType
) {
45 new Pair
<Class
<?
extends ModuleFixtureBuilder
>, Class
<?
extends ModuleFixtureBuilder
>>(JavaModuleFixtureBuilder
.class, JavaModuleFixtureBuilderImpl
.class);
46 throw new UnsupportedOperationException("setModuleType is not implemented in : " + getClass());
49 public TestFixtureBuilder
<IdeaProjectTestFixture
> setLanguageLevel(final LanguageLevel languageLevel
) {
50 throw new UnsupportedOperationException("setLanguageLevel is not implemented in : " + getClass());
53 public HeavyIdeaTestFixtureImpl
getFixture() {
57 public <M
extends ModuleFixtureBuilder
> M
addModule(final Class
<M
> builderClass
) {
58 loadClassConstants(builderClass
);
59 final M builder
= (M
)myModuleFixtureBuilderFactory
.get(builderClass
);
60 myFixture
.addModuleFixtureBuilder(builder
);
64 private static void loadClassConstants(final Class builderClass
) {
66 for (final Field field
: builderClass
.getFields()) {
70 catch (IllegalAccessException e
) {
71 throw new RuntimeException(e
);