// 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 void assertComparisonContractNotViolated(@NotNull List values, @NotNull Comparator comparator, @NotNull Equality 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)); } } } } } }