| package com.intellij.compiler.artifacts; |
| |
| import com.intellij.compiler.BaseCompilerTestCase; |
| import com.intellij.openapi.module.Module; |
| import com.intellij.openapi.roots.DependencyScope; |
| import com.intellij.openapi.roots.libraries.Library; |
| import com.intellij.openapi.util.io.FileUtil; |
| import com.intellij.openapi.vfs.JarFileSystem; |
| import com.intellij.openapi.vfs.LocalFileSystem; |
| import com.intellij.openapi.vfs.VfsUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.packaging.artifacts.Artifact; |
| import com.intellij.packaging.artifacts.ArtifactType; |
| import com.intellij.packaging.artifacts.ModifiableArtifactModel; |
| import com.intellij.packaging.elements.CompositePackagingElement; |
| import com.intellij.packaging.impl.artifacts.PlainArtifactType; |
| import com.intellij.util.io.TestFileSystemBuilder; |
| import com.intellij.util.io.TestFileSystemItem; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.io.File; |
| import java.io.IOException; |
| |
| import static com.intellij.compiler.artifacts.ArtifactsTestCase.commitModel; |
| |
| /** |
| * @author nik |
| */ |
| public abstract class ArtifactCompilerTestCase extends BaseCompilerTestCase { |
| |
| protected void deleteArtifact(final Artifact artifact) { |
| final ModifiableArtifactModel model = getArtifactManager().createModifiableModel(); |
| model.removeArtifact(artifact); |
| commitModel(model); |
| } |
| |
| protected Artifact addArtifact(TestPackagingElementBuilder builder) { |
| return addArtifact("a", builder); |
| } |
| |
| protected Artifact addArtifact(final String name, TestPackagingElementBuilder builder) { |
| return addArtifact(name, builder.build()); |
| } |
| |
| protected Artifact addArtifact(String name, final CompositePackagingElement<?> root) { |
| return addArtifact(name, PlainArtifactType.getInstance(), root); |
| } |
| |
| protected Artifact addArtifact(final String name, final ArtifactType type, final CompositePackagingElement<?> root) { |
| return getArtifactManager().addArtifact(name, type, root); |
| } |
| |
| protected Library addProjectLibrary(final @Nullable Module module, final String name, final VirtualFile... jars) { |
| return addProjectLibrary(module, name, DependencyScope.COMPILE, jars); |
| } |
| |
| protected Library addProjectLibrary(final @Nullable Module module, final String name, final DependencyScope scope, |
| final VirtualFile... jars) { |
| return PackagingElementsTestCase.addProjectLibrary(myProject, module, name, scope, jars); |
| } |
| |
| protected TestPackagingElementBuilder root() { |
| return TestPackagingElementBuilder.root(myProject); |
| } |
| |
| protected TestPackagingElementBuilder archive(String name) { |
| return TestPackagingElementBuilder.archive(myProject, name); |
| } |
| |
| protected CompilationLog compileProject() { |
| return make(getArtifactManager().getArtifacts()); |
| } |
| |
| protected void changeFileInJar(String jarPath, String pathInJar) throws Exception { |
| final VirtualFile jarFile = LocalFileSystem.getInstance().findFileByPath(jarPath); |
| assertNotNull(jarFile); |
| final VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(jarFile); |
| assertNotNull(jarRoot); |
| VirtualFile jarEntry = jarRoot.findFileByRelativePath(pathInJar); |
| assertNotNull(jarEntry); |
| assertNotNull(jarFile); |
| changeFile(jarFile); |
| jarFile.refresh(false, false); |
| |
| jarEntry = jarRoot.findFileByRelativePath(pathInJar); |
| assertNotNull(jarEntry); |
| } |
| |
| protected static TestFileSystemBuilder fs() { |
| return TestFileSystemItem.fs(); |
| } |
| |
| public static void assertNoOutput(Artifact artifact) { |
| final String outputPath = artifact.getOutputPath(); |
| assertNotNull("output path not specified for " + artifact.getName(), outputPath); |
| assertFalse(new File(FileUtil.toSystemDependentName(outputPath)).exists()); |
| } |
| |
| public static void assertEmptyOutput(Artifact a1) throws IOException { |
| assertOutput(a1, ArtifactCompilerTestCase.fs()); |
| } |
| |
| public static void assertOutput(Artifact artifact, TestFileSystemBuilder item) { |
| final VirtualFile outputFile = getOutputDir(artifact); |
| outputFile.refresh(false, true); |
| item.build().assertDirectoryEqual(VfsUtil.virtualToIoFile(outputFile)); |
| } |
| |
| protected static VirtualFile getOutputDir(Artifact artifact) { |
| final String output = artifact.getOutputPath(); |
| assertNotNull("output path not specified for " + artifact.getName(), output); |
| final VirtualFile outputFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(output); |
| assertNotNull("output file not found " + output, outputFile); |
| return outputFile; |
| } |
| } |