c7d9b9532a90702a812a609b07771b0c82574573
[idea/community.git] / java / idea-ui / testSrc / com / intellij / facet / FacetTestCase.java
1 // Copyright 2000-2018 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.facet;
3
4 import com.intellij.facet.mock.MockFacet;
5 import com.intellij.facet.mock.MockFacetConfiguration;
6 import com.intellij.facet.mock.MockSubFacetType;
7 import com.intellij.openapi.application.WriteAction;
8 import com.intellij.openapi.application.ex.PathManagerEx;
9 import com.intellij.openapi.module.Module;
10 import com.intellij.openapi.roots.ProjectModelExternalSource;
11 import com.intellij.testFramework.JavaPsiTestCase;
12 import org.jetbrains.annotations.NotNull;
13 import org.jetbrains.annotations.Nullable;
14
15 /**
16  * @author nik
17  */
18 public abstract class FacetTestCase extends JavaPsiTestCase {
19   @Override
20   protected void tearDown() throws Exception {
21     try {
22       removeAllFacets();
23     }
24     catch (Throwable e) {
25       addSuppressedException(e);
26     }
27     finally {
28       super.tearDown();
29     }
30   }
31
32   protected void removeAllFacets() {
33     final FacetManager manager = getFacetManager();
34     final ModifiableFacetModel model = manager.createModifiableModel();
35     for (Facet facet : manager.getAllFacets()) {
36       model.removeFacet(facet);
37     }
38     commit(model);
39   }
40
41   protected FacetManagerImpl getFacetManager() {
42     return (FacetManagerImpl)FacetManager.getInstance(myModule);
43   }
44
45   protected void commit(final ModifiableFacetModel model) {
46     WriteAction.runAndWait(() -> model.commit());
47   }
48
49   protected MockFacet createFacet() {
50     return createFacet("facet");
51   }
52
53   protected MockFacet createFacet(final String name) {
54     return new MockFacet(myModule, name);
55   }
56
57   protected Facet<MockFacetConfiguration> createSubFacet(MockFacet parent, final String name) {
58     return new Facet<>(MockSubFacetType.getInstance(), myModule, name, new MockFacetConfiguration(), parent);
59   }
60
61   protected void removeFacet(final Facet facet) {
62     final ModifiableFacetModel model = getFacetManager().createModifiableModel();
63     model.removeFacet(facet);
64     commit(model);
65   }
66
67   protected MockFacet addFacet() {
68     return addFacet("name");
69   }
70
71   protected MockFacet addFacet(String name) {
72     return addFacet(createFacet(name));
73   }
74
75   protected MockFacet addFacet(final MockFacet facet) {
76     return addFacet(facet, null);
77   }
78
79   protected MockFacet addFacet(final MockFacet facet, @Nullable ProjectModelExternalSource externalSource) {
80     ModifiableFacetModel model = getFacetManager().createModifiableModel();
81     model.addFacet(facet, externalSource);
82     commit(model);
83     return facet;
84   }
85
86   protected Facet<MockFacetConfiguration> addSubFacet(MockFacet parent, final String name) {
87     return addSubFacet(parent, name, null);
88   }
89
90   protected Facet<MockFacetConfiguration> addSubFacet(MockFacet parent, final String name, @Nullable ProjectModelExternalSource externalSource) {
91     ModifiableFacetModel model = getFacetManager().createModifiableModel();
92     final Facet<MockFacetConfiguration> facet = createSubFacet(parent, name);
93     model.addFacet(facet, externalSource);
94     commit(model);
95     return facet;
96   }
97
98   protected void renameFacet(final Facet facet, final String newName) {
99     final FacetManager manager = getFacetManager();
100     final ModifiableFacetModel model = manager.createModifiableModel();
101     model.rename(facet, newName);
102     commit(model);
103   }
104
105   @NotNull
106   @Override
107   protected Module loadModule(@NotNull String relativePath) {
108     return super.loadModule(PathManagerEx.getTestDataPath() + "/" + relativePath);
109   }
110 }