1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.testFramework.fixtures;
4 import com.intellij.openapi.diagnostic.Logger;
5 import com.intellij.openapi.projectRoots.SdkType;
6 import com.intellij.testFramework.LightProjectDescriptor;
7 import com.intellij.testFramework.builders.ModuleFixtureBuilder;
8 import com.intellij.testFramework.fixtures.impl.IdeaTestFixtureFactoryImpl;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.annotations.Nullable;
12 import java.nio.file.Path;
13 import java.util.function.Predicate;
16 * This is to be provided by the test framework and not by plugin authors.
18 public abstract class IdeaTestFixtureFactory {
19 private static final IdeaTestFixtureFactory ourInstance = new IdeaTestFixtureFactoryImpl();
22 public static IdeaTestFixtureFactory getFixtureFactory() {
27 * @param aClass test fixture builder interface class
28 * @param implClass implementation class, should have a constructor which takes {@link TestFixtureBuilder} as an argument.
30 public abstract <T extends ModuleFixtureBuilder<?>> void registerFixtureBuilder(@NotNull Class<T> aClass, @NotNull Class<? extends T> implClass);
32 public abstract void registerFixtureBuilder(@NotNull Class<? extends ModuleFixtureBuilder<?>> aClass, @NotNull String implClassName);
35 public TestFixtureBuilder<IdeaProjectTestFixture> createFixtureBuilder(@NotNull String name) {
36 return createFixtureBuilder(name, false);
39 public abstract @NotNull TestFixtureBuilder<IdeaProjectTestFixture> createFixtureBuilder(@NotNull String name, boolean isDirectoryBasedProject);
41 public abstract TestFixtureBuilder<IdeaProjectTestFixture> createFixtureBuilder(@NotNull String name, @Nullable Path projectPath, boolean isDirectoryBasedProject);
44 public abstract TestFixtureBuilder<IdeaProjectTestFixture> createLightFixtureBuilder(@NotNull String projectName);
47 public abstract TestFixtureBuilder<IdeaProjectTestFixture> createLightFixtureBuilder(@Nullable LightProjectDescriptor projectDescriptor,
48 @NotNull String projectName);
50 * @deprecated Use {@link #createLightFixtureBuilder(LightProjectDescriptor, String)} instead
52 @Deprecated(forRemoval = true)
53 public TestFixtureBuilder<IdeaProjectTestFixture> createLightFixtureBuilder(@Nullable LightProjectDescriptor projectDescriptor) {
54 String message = "Use createLightFixtureBuilder(LightProjectDescriptor, String) instead";
55 Logger.getInstance(IdeaTestFixtureFactory.class).warn(new RuntimeException(message));
56 return createLightFixtureBuilder(projectDescriptor, message);
60 public abstract CodeInsightTestFixture createCodeInsightFixture(@NotNull IdeaProjectTestFixture projectFixture);
63 public abstract CodeInsightTestFixture createCodeInsightFixture(@NotNull IdeaProjectTestFixture projectFixture, @NotNull TempDirTestFixture tempDirFixture);
66 public abstract TempDirTestFixture createTempDirTestFixture();
69 public abstract BareTestFixture createBareFixture();
72 public abstract SdkTestFixture createSdkFixture(@NotNull SdkType sdkType, @NotNull Predicate<? super String> versionFilter);