dfcea75d1126ed42623638d6f022c32c04ba6522
[idea/community.git] / java / compiler / tests / com / intellij / compiler / artifacts / PackagingValidationTestCase.java
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.compiler.artifacts;
3
4 import com.intellij.openapi.util.text.StringUtil;
5 import com.intellij.packaging.artifacts.Artifact;
6 import com.intellij.packaging.artifacts.ArtifactType;
7 import com.intellij.packaging.elements.CompositePackagingElement;
8 import com.intellij.packaging.elements.PackagingElement;
9 import com.intellij.packaging.impl.ui.ArtifactProblemsHolderBase;
10 import com.intellij.packaging.ui.ArtifactProblemQuickFix;
11 import com.intellij.util.containers.ContainerUtil;
12 import org.jetbrains.annotations.NotNull;
13 import org.jetbrains.annotations.Nullable;
14
15 import java.util.*;
16
17 public abstract class PackagingValidationTestCase extends PackagingElementsTestCase {
18   protected PackagingValidationTestCase() {
19     mySetupModule = true;
20   }
21
22   protected MockArtifactProblemsHolder validate(CompositePackagingElement<?> root, final ArtifactType artifactType) {
23     final MockArtifactProblemsHolder validationManager = new MockArtifactProblemsHolder();
24     final Artifact artifact = addArtifact("artifact", artifactType, root);
25     artifactType.checkRootElement(root, artifact, validationManager);
26     return validationManager;
27   }
28
29
30   protected class MockArtifactProblemsHolder extends ArtifactProblemsHolderBase {
31     private final List<String> myProblems = new ArrayList<>();
32     private final Map<String, ArtifactProblemQuickFix[]> myQuickFixes = new HashMap<>();
33
34     public MockArtifactProblemsHolder() {
35       super(new MockPackagingEditorContext(new MockArtifactsStructureConfigurableContext(), null));
36     }
37
38     @Override
39     public void registerError(@NotNull String message,
40                               @NotNull String problemTypeId,
41                               @Nullable List<PackagingElement<?>> pathToPlace,
42                               ArtifactProblemQuickFix @NotNull ... quickFixes) {
43       myProblems.add(message);
44       myQuickFixes.put(message, quickFixes);
45     }
46
47     @Override
48     public void registerWarning(@NotNull String message,
49                                 @NotNull String problemTypeId, @Nullable List<PackagingElement<?>> pathToPlace,
50                                 ArtifactProblemQuickFix @NotNull ... quickFixes) {
51       registerError(message, problemTypeId, pathToPlace, quickFixes);
52     }
53
54     public void assertNoProblems() {
55       assertProblems();
56     }
57
58     public void assertProblems(String... expectedMessages) {
59       Set<String> expected = ContainerUtil.set(expectedMessages);
60       outer:
61       for (String problem : myProblems) {
62         for (String message : expected) {
63           if (problem.contains(message)) {
64             expected.remove(message);
65             continue outer;
66           }
67         }
68         fail("Unexpected problem: " + problem);
69       }
70       if (!expected.isEmpty()) {
71         fail("The following problems are not reported: " + StringUtil.join(expected, "; "));
72       }
73     }
74   }
75 }