blob: f998e20eb3faded5a8f7dcd2df71fe6b5159f420 [file] [log] [blame]
/*
* 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.incremental.artifacts;
import com.intellij.util.PathUtil;
import org.jetbrains.jps.model.artifact.JpsArtifact;
import org.jetbrains.jps.model.artifact.elements.JpsCompositePackagingElement;
import org.jetbrains.jps.model.artifact.elements.JpsPackagingElement;
import org.jetbrains.jps.model.artifact.elements.JpsPackagingElementFactory;
import static com.intellij.util.io.TestFileSystemBuilder.fs;
import static org.jetbrains.jps.incremental.artifacts.LayoutElementTestUtil.root;
/**
* @author nik
*/
public class RebuildArtifactOnConfigurationChangeTest extends ArtifactBuilderTestCase {
public void testAddRoot() {
String dir1 = PathUtil.getParentPath(createFile("dir1/a.txt", "a"));
String dir2 = PathUtil.getParentPath(createFile("dir2/b.txt", "b"));
JpsArtifact a = addArtifact(root().dirCopy(dir1));
buildAll();
assertOutput(a, fs().file("a.txt", "a"));
a.getRootElement().addChild(JpsPackagingElementFactory.getInstance().createDirectoryCopy(dir2));
buildAll();
assertOutput(a, fs().file("a.txt", "a").file("b.txt", "b"));
assertDeletedAndCopied("out/artifacts/a/a.txt", "dir1/a.txt", "dir2/b.txt");
buildAllAndAssertUpToDate();
}
public void testRemoveRoot() {
String file1 = createFile("dir1/a.txt", "a");
String file2 = createFile("dir2/b.txt", "b");
JpsArtifact a = addArtifact(root().parentDirCopy(file1).parentDirCopy(file2));
buildAll();
assertOutput(a, fs().file("a.txt", "a").file("b.txt", "b"));
a.getRootElement().removeChild(a.getRootElement().getChildren().get(0));
buildAll();
assertOutput(a, fs().file("b.txt", "b"));
buildAllAndAssertUpToDate();
}
public void testChangeOutput() {
String file = createFile("dir/a.txt");
JpsArtifact a = addArtifact(root().parentDirCopy(file));
buildAll();
String oldOutput = a.getOutputPath();
assertNotNull(oldOutput);
assertOutput(oldOutput, fs().file("a.txt"));
String newOutput = PathUtil.getParentPath(oldOutput) + "/a2";
a.setOutputPath(newOutput);
buildAll();
assertOutput(newOutput, fs().file("a.txt"));
assertOutput(oldOutput, fs());
buildAllAndAssertUpToDate();
}
public void testChangeConfiguration() {
String file = createFile("d/a.txt", "a");
JpsArtifact a = addArtifact(root().parentDirCopy(file));
buildAll();
assertOutput(a, fs().file("a.txt", "a"));
a.setRootElement(root().dir("dir").parentDirCopy(file).buildElement());
buildAll();
assertOutput(a, fs().dir("dir").file("a.txt", "a"));
buildAllAndAssertUpToDate();
}
public void testAddRootChangingRootIndices() {
String file1 = createFile("d1/a/b/1.txt");
String file2 = createFile("d2/x/y/2.txt");
JpsArtifact a = addArtifact(root().fileCopy(file1).fileCopy(file2));
buildAll();
assertOutput(a, fs().file("1.txt").file("2.txt"));
JpsCompositePackagingElement root = a.getRootElement();
assertEquals(2, root.getChildren().size());
JpsPackagingElement last = root.getChildren().get(1);
root.removeChild(last);
String file3 = createFile("d3/1/2/3.txt");
root.addChild(JpsPackagingElementFactory.getInstance().createFileCopy(file3, null));
root.addChild(last);
buildAll();
assertOutput(a, fs().file("1.txt").file("2.txt").file("3.txt"));
}
}