| /* |
| * Copyright 2000-2012 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.jetbrains.jps.builders.rebuild |
| |
| import com.intellij.openapi.util.io.FileUtil |
| import com.intellij.util.io.ZipUtil |
| |
| import java.util.jar.Attributes |
| import java.util.jar.Manifest |
| import java.io.File |
| import java.io.FileInputStream |
| import kotlin.test.assertTrue |
| import kotlin.test.assertEquals |
| |
| /** |
| * @author nik |
| */ |
| class ArtifactRebuildTest: JpsRebuildTestCase() { |
| fun testArtifactIncludesArchiveArtifact() { |
| val name = "artifactIncludesArchiveArtifact" |
| try { |
| doTest("$name/${name}.ipr", fs { |
| dir("artifacts") { |
| dir("data") { |
| archive("a.jar") { |
| file("a.txt") |
| } |
| } |
| } |
| }) |
| } |
| finally { |
| FileUtil.delete(File(FileUtil.toSystemDependentName(getTestDataRootPath() + "/$name/data/a.jar"))) |
| } |
| } |
| |
| fun testArtifactWithoutOutput() { |
| val outDir = FileUtil.createTempDirectory("output", "").getAbsolutePath() |
| loadProject("artifactWithoutOutput/artifactWithoutOutput.ipr", mapOf("OUTPUT_DIR" to outDir)) |
| |
| rebuild() |
| assertOutput(outDir, fs { |
| dir("artifacts") { |
| dir("main") { |
| file("data.txt") |
| file("data2.txt") |
| } |
| } |
| }) |
| } |
| |
| fun testExtractDir() { |
| doTest("extractDirTest/extractDirTest.ipr", fs { |
| dir("artifacts") { |
| dir("extractDir") { |
| file("b.txt", "b") |
| } |
| dir("extractRoot") { |
| dir("extracted") { |
| dir("dir") { |
| file("b.txt", "b") |
| } |
| file("a.txt", "a") |
| } |
| } |
| dir("packedDir") { |
| archive("packedDir.jar") { |
| file("b.txt", "b") |
| } |
| } |
| dir("packedRoot") { |
| archive("packedRoot.jar") { |
| dir("dir") { |
| file("b.txt", "b") |
| } |
| file("a.txt", "a") |
| } |
| } |
| } |
| }) |
| } |
| |
| fun testManifestInArtifact() { |
| loadAndRebuild("manifestInArtifact/manifest.ipr", mapOf()) |
| val jarFile = File(myOutputDirectory, "artifacts/simple/simple.jar") |
| assertTrue(jarFile.exists()) |
| val extracted = FileUtil.createTempDirectory("build-manifest", "") |
| ZipUtil.extract(jarFile, extracted, null) |
| val manifestFile = File(extracted, "META-INF/MANIFEST.MF") |
| assertTrue(manifestFile.exists()) |
| val manifest = Manifest(FileInputStream(manifestFile)) |
| assertEquals("MyClass", manifest.getMainAttributes()!!.getValue(Attributes.Name.MAIN_CLASS)) |
| } |
| |
| fun testOverwriteArtifacts() { |
| doTest("overwriteTest/overwriteTest.ipr", fs { |
| dir("artifacts") { |
| dir("classes") { |
| file("a.xml", "<root2/>") |
| } |
| dir("dirs") { |
| file("x.txt", "d2") |
| } |
| dir("fileCopy") { |
| dir("xxx") { |
| dir("a") { |
| file("f.txt", "b") |
| } |
| } |
| } |
| } |
| dir("production") { |
| dir("dep") { |
| file("a.xml", "<root2/>") |
| } |
| dir("overwriteTest") { |
| file("a.xml", "<root1/>") |
| } |
| } |
| }) |
| } |
| |
| fun testPathVariablesInArtifact() { |
| val externalDir = "${getTestDataRootPath()}/pathVariables/external" |
| doTest("pathVariables/pathVariables.ipr", mapOf("EXTERNAL_DIR" to externalDir), fs { |
| dir("artifacts") { |
| dir("fileCopy") { |
| dir("dir") { |
| file("file.txt", "xxx") |
| } |
| } |
| } |
| }) |
| } |
| |
| fun testModuleTestOutputElement() { |
| doTest("moduleTestOutput/moduleTestOutput.ipr", fs { |
| dir("artifacts") { |
| dir("tests") { |
| file("MyTest.class") |
| } |
| } |
| dir("production") { |
| dir("moduleTestOutput") { |
| file("MyClass.class") |
| } |
| } |
| dir("test") { |
| dir("moduleTestOutput") { |
| file("MyTest.class") |
| } |
| } |
| }) |
| } |
| } |