IDEADEV-21222
[fedora-idea.git] / source / com / intellij / testFramework / fixtures / impl / HeavyTestFixtureBuilderImpl.java
blob65ec0f972ee9adb0025c56e4fa390bcf7bccab7f
1 /*
2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
3 */
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;
19 import java.util.Map;
21 /**
22 * @author mike
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) {
30 myFixture = fixture;
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() {
54 return myFixture;
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);
61 return builder;
64 private static void loadClassConstants(final Class builderClass) {
65 try {
66 for (final Field field : builderClass.getFields()) {
67 field.get(null);
70 catch (IllegalAccessException e) {
71 throw new RuntimeException(e);