| // Copyright 2000-2019 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. |
| package com.intellij.testFramework; |
| |
| import com.intellij.configurationStore.StateStorageManagerKt; |
| import com.intellij.execution.ExecutionException; |
| import com.intellij.execution.configurations.GeneralCommandLine; |
| import com.intellij.execution.process.ProcessIOExecutorService; |
| import com.intellij.execution.process.ProcessOutput; |
| import com.intellij.execution.util.ExecUtil; |
| import com.intellij.ide.DataManager; |
| import com.intellij.ide.IdeEventQueue; |
| import com.intellij.ide.fileTemplates.FileTemplateManager; |
| import com.intellij.ide.fileTemplates.impl.FileTemplateManagerImpl; |
| import com.intellij.ide.util.treeView.AbstractTreeBuilder; |
| import com.intellij.ide.util.treeView.AbstractTreeNode; |
| import com.intellij.ide.util.treeView.AbstractTreeStructure; |
| import com.intellij.ide.util.treeView.AbstractTreeUi; |
| import com.intellij.openapi.Disposable; |
| import com.intellij.openapi.actionSystem.*; |
| import com.intellij.openapi.actionSystem.ex.ActionUtil; |
| import com.intellij.openapi.application.Application; |
| import com.intellij.openapi.application.ModalityState; |
| import com.intellij.openapi.application.impl.ApplicationImpl; |
| import com.intellij.openapi.application.impl.LaterInvocator; |
| import com.intellij.openapi.editor.Document; |
| import com.intellij.openapi.extensions.*; |
| import com.intellij.openapi.fileEditor.FileDocumentManager; |
| import com.intellij.openapi.fileEditor.impl.LoadTextUtil; |
| import com.intellij.openapi.fileTypes.FileTypes; |
| import com.intellij.openapi.paths.WebReference; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.project.ex.ProjectManagerEx; |
| import com.intellij.openapi.ui.Queryable; |
| import com.intellij.openapi.util.ActionCallback; |
| import com.intellij.openapi.util.Comparing; |
| import com.intellij.openapi.util.Disposer; |
| import com.intellij.openapi.util.SystemInfo; |
| import com.intellij.openapi.util.io.FileUtil; |
| import com.intellij.openapi.util.io.FileUtilRt; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vfs.LocalFileSystem; |
| import com.intellij.openapi.vfs.VfsUtilCore; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.openapi.vfs.VirtualFileFilter; |
| import com.intellij.openapi.vfs.ex.temp.TempFileSystem; |
| import com.intellij.psi.PsiElement; |
| import com.intellij.psi.PsiRecursiveElementWalkingVisitor; |
| import com.intellij.psi.PsiReference; |
| import com.intellij.rt.execution.junit.FileComparisonFailure; |
| import com.intellij.testFramework.fixtures.IdeaTestExecutionPolicy; |
| import com.intellij.ui.tree.AsyncTreeModel; |
| import com.intellij.util.*; |
| import com.intellij.util.concurrency.AppExecutorUtil; |
| import com.intellij.util.concurrency.AppScheduledExecutorService; |
| import com.intellij.util.io.Decompressor; |
| import com.intellij.util.lang.JavaVersion; |
| import com.intellij.util.ui.UIUtil; |
| import com.intellij.util.ui.tree.TreeUtil; |
| import gnu.trove.Equality; |
| import junit.framework.AssertionFailedError; |
| import org.jetbrains.annotations.Contract; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.concurrency.AsyncPromise; |
| import org.jetbrains.concurrency.Promise; |
| |
| import javax.swing.*; |
| import javax.swing.tree.TreeModel; |
| import javax.swing.tree.TreePath; |
| import java.awt.*; |
| import java.awt.event.InvocationEvent; |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.OutputStream; |
| import java.io.PrintStream; |
| import java.lang.reflect.Method; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.nio.charset.Charset; |
| import java.util.List; |
| import java.util.*; |
| import java.util.concurrent.CopyOnWriteArrayList; |
| import java.util.concurrent.TimeUnit; |
| import java.util.concurrent.atomic.AtomicBoolean; |
| import java.util.function.Function; |
| import java.util.function.Predicate; |
| import java.util.jar.JarFile; |
| import java.util.stream.Collectors; |
| import java.util.stream.Stream; |
| |
| import static com.intellij.openapi.application.ApplicationManager.getApplication; |
| import static org.junit.Assert.*; |
| |
| /** |
| * @author yole |
| */ |
| @SuppressWarnings({"UseOfSystemOutOrSystemErr", "TestOnlyProblems"}) |
| public class PlatformTestUtil { |
| public static <T> void assertComparisonContractNotViolated(@NotNull List<? extends T> values, |
| @NotNull Comparator<? super T> comparator, |
| @NotNull Equality<? super T> equality) { |
| for (int i1 = 0; i1 < values.size(); i1++) { |
| for (int i2 = i1; i2 < values.size(); i2++) { |
| T value1 = values.get(i1); |
| T value2 = values.get(i2); |
| |
| int result12 = comparator.compare(value1, value2); |
| int result21 = comparator.compare(value2, value1); |
| if (equality.equals(value1, value2)) { |
| assertEquals(String.format("Equal, but not 0: '%s' - '%s'", value1, value2), 0, result12); |
| assertEquals(String.format("Equal, but not 0: '%s' - '%s'", value2, value1), 0, result21); |
| } |
| else { |
| if (result12 == 0) fail(String.format("Not equal, but 0: '%s' - '%s'", value1, value2)); |
| if (result21 == 0) fail(String.format("Not equal, but 0: '%s' - '%s'", value2, value1)); |
| if (Integer.signum(result12) == Integer.signum(result21)) { |
| fail(String.format("Not symmetrical: '%s' - '%s'", value1, value2)); |
| } |
| } |
| |
| for (int i3 = i2; i3 < values.size(); i3++) { |
| T value3 = values.get(i3); |
| |
| int result23 = comparator.compare(value2, value3); |
| int result31 = comparator.compare(value3, value1); |
| |
| if (!isTransitive(result12, result23, result31)) { |
| fail(String.format("Not transitive: '%s' - '%s' - '%s'", value1, value2, value3)); |
| } |
| } |
| } |
| } |
| } |
| } |