blob: 623591b11d54a71838841298f447c28c2bc699b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Simeon Andreev and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Simeon Andreev - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.internal.watson;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.events.ResourceComparator;
import org.eclipse.core.internal.resources.ResourceInfo;
import org.eclipse.core.internal.watson.ElementTree;
import org.eclipse.core.runtime.IPath;
/**
* Tests for
* {@link ElementTree#hasChanges(ElementTree, ElementTree, org.eclipse.core.internal.watson.IElementComparator, boolean)}
* while using
* {@link org.eclipse.core.internal.events.ResourceComparator#getBuildComparator()}.
*/
public class ElementTreeHasChangesTest extends WatsonTest implements IPathConstants {
public ElementTreeHasChangesTest() {
super(null);
}
public ElementTreeHasChangesTest(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite(ElementTreeHasChangesTest.class);
return suite;
}
/**
* Test hasChanges() without any changes to the tree.
*/
public void testNoChanges() {
ElementTree oldTree = createTree(solution, project1, project2, file1);
ElementTree newTree = newTree(oldTree);
boolean hasChanges = hasChanges(oldTree, newTree);
assertFalse("expected no changes to be detected if the tree was not changed", hasChanges);
}
/**
* Test hasChanges() after adding an element to the tree.
*/
public void testAddElement() {
ElementTree oldTree = createTree(solution, project1, project2, file1);
ElementTree newTree = newTree(oldTree);
add(newTree, folder1);
boolean hasChanges = hasChanges(oldTree, newTree);
assertTrue("expected changes to be detected after adding an element to the tree", hasChanges);
}
/**
* Test hasChanges() after removing an element from the tree.
*/
public void testRemoveElement() {
ElementTree oldTree = createTree(solution, project1, project2, file1);
ElementTree newTree = newTree(oldTree);
remove(newTree, file1);
boolean hasChanges = hasChanges(oldTree, newTree);
assertTrue("expected changes to be detected after removing an element from the tree", hasChanges);
}
/**
* Test hasChanges() after adding and then removing an element to and from the
* tree.
*/
public void testAddAndRemoveElement() {
ElementTree oldTree = createTree(solution, project1, project2, file1);
ElementTree newTree = newTree(oldTree);
add(newTree, folder1);
remove(newTree, folder1);
boolean hasChanges = hasChanges(oldTree, newTree);
assertTrue("expected changes to be detected after adding and removing the same element to and from the tree",
hasChanges);
}
/**
* Test hasChanges() after changing the data of an element.
*/
public void testChangeElementData() {
IPath[] elements1 = { solution, project1, project2, file1 };
ElementTree oldTree = createTree(elements1);
ElementTree newTree = newTree(oldTree);
newTree.setElementData(file1, "different data");
boolean hasChanges = hasChanges(oldTree, newTree);
assertTrue("expected changes to be detected after changing the data of a tree element", hasChanges);
}
/**
* Test hasChanges() after changing the data of a the tree, so that the build
* comparator detects a change.
*/
public void testChangeTreeData() {
IPath[] elements1 = { solution, project1, project2, file1 };
ElementTree oldTree = createTree(elements1);
incrementCharsetGenerationCount(oldTree);
ElementTree newTree = newTree(oldTree);
incrementCharsetGenerationCount(newTree);
boolean hasChanges = hasChanges(oldTree, newTree);
assertTrue("expected changes to be detected after changing the data of the tree", hasChanges);
}
private static boolean hasChanges(ElementTree oldTree, ElementTree newTree) {
return ElementTree.hasChanges(oldTree, newTree, ResourceComparator.getBuildComparator(), true);
}
private static ElementTree createTree(IPath... paths) {
ElementTree tree = new ElementTree();
for (IPath path : paths) {
add(tree, path);
}
return tree;
}
private static void incrementCharsetGenerationCount(ElementTree tree) {
Object treeData = tree.getTreeData();
ResourceInfo resourceInfo;
if (treeData instanceof ResourceInfo) {
resourceInfo = (ResourceInfo) treeData;
} else {
resourceInfo = new ResourceInfo();
tree.setTreeData(resourceInfo);
}
resourceInfo.incrementCharsetGenerationCount();
}
private static ElementTree newTree(ElementTree oldTree) {
return oldTree.newEmptyDelta();
}
private static void add(ElementTree tree, IPath path) {
tree.createElement(path, path.lastSegment());
}
private static void remove(ElementTree tree, IPath path) {
tree.deleteElement(path);
}
}