package org.netbeans.gradle.project.view;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.netbeans.gradle.model.GradleTaskID;
import static org.junit.Assert.*;
public class GradleTaskTreeTest {
private static List<GradleTaskID> toTaskIDs(String... taskNames) {
List<GradleTaskID> result = new ArrayList<>(taskNames.length);
for (String taskName: taskNames) {
result.add(new GradleTaskID(taskName, ":Project:" + taskName));
}
return result;
}
private static void assertLeaf(
GradleTaskTree tree,
String expectedCaption) {
assertEquals("caption", expectedCaption, tree.getCaption());
assertEquals("Children count", 0, tree.getChildren().size());
GradleTaskID leaf = tree.getTaskID();
assertNotNull("leaf", leaf);
assertEquals("task name", expectedCaption, leaf.getName());
}
private static void assertTasks(
GradleTaskTree tree,
String expectedCaption,
String... expectedChildren) {
assertEquals("caption", expectedCaption, tree.getCaption());
assertNull("leaf", tree.getTaskID());
List<GradleTaskTree> children = tree.getChildren();
assertEquals("Children count", expectedChildren.length, children.size());
int index = 0;
for (GradleTaskTree child: children) {
assertLeaf(child, expectedChildren[index]);
index++;
}
}
@Test(timeout = 10000)
public void testNoInfiniteLoop1() {
List<GradleTaskID> taskIDs = toTaskIDs("A");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(0, taskIDs);
assertEquals("Node count", 1, nodes.size());
assertLeaf(nodes.get(0), "A");
}
@Test(timeout = 10000)
public void testNoInfiniteLoop2() {
List<GradleTaskID> taskIDs = toTaskIDs("A", "B");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(0, taskIDs);
assertEquals("Node count", 2, nodes.size());
assertLeaf(nodes.get(0), "A");
assertLeaf(nodes.get(1), "B");
}
@Test
public void testSingleTask() {
List<GradleTaskID> taskIDs = toTaskIDs("TASK");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(5, taskIDs);
assertEquals("Node count", 1, nodes.size());
assertLeaf(nodes.get(0), "TASK");
}
@Test
public void testUnderscoreSeparated() {
List<GradleTaskID> taskIDs = toTaskIDs(
"TASK_A",
"TASK_B",
"TASK_C",
"TASK_D",
"TASK_E",
"OTHER_A",
"OTHER_B",
"OTHER_C");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(5, taskIDs);
assertEquals("Node count", 2, nodes.size());
assertTasks(nodes.get(0), "TASK",
"TASK_A",
"TASK_B",
"TASK_C",
"TASK_D",
"TASK_E");
assertTasks(nodes.get(1), "OTHER",
"OTHER_A",
"OTHER_B",
"OTHER_C");
}
@Test
public void testBasicSingleLevelSplit() {
List<GradleTaskID> taskIDs = toTaskIDs(
"",
"compileGroovy",
"compileJava",
"compileTestJava",
"compileTestGroovy",
"build",
"buildSubA",
"buildSubB");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(7, taskIDs);
assertEquals("Node count", 3, nodes.size());
assertLeaf(nodes.get(0), "");
assertTasks(nodes.get(1), "compile",
"compileGroovy",
"compileJava",
"compileTestJava",
"compileTestGroovy");
assertTasks(nodes.get(2), "build",
"build",
"buildSubA",
"buildSubB");
}
@Test
public void testMultiLevelUnderscoreSeparated() {
List<GradleTaskID> taskIDs = toTaskIDs(
"TASK__SUBA__A",
"TASK__SUBA__B",
"TASK__SUBB__A",
"TASK__SUBB__B",
"TASK__SUBB__C",
"OTHER");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(3, taskIDs);
assertEquals("Node count", 2, nodes.size());
assertLeaf(nodes.get(1), "OTHER");
GradleTaskTree subNode = nodes.get(0);
assertEquals("caption", "TASK", subNode.getCaption());
List<GradleTaskTree> subNodeChildren = subNode.getChildren();
assertEquals("Node count", 2, subNodeChildren.size());
assertTasks(subNodeChildren.get(0), "TASK__SUBA",
"TASK__SUBA__A",
"TASK__SUBA__B");
assertTasks(subNodeChildren.get(1), "TASK__SUBB",
"TASK__SUBB__A",
"TASK__SUBB__B",
"TASK__SUBB__C");
}
@Test
public void testSingleLevelNoUnnecessaryIndirection() {
List<GradleTaskID> taskIDs = toTaskIDs(
"buildApp1",
"buildApp2",
"buildLib1",
"buildLib2",
"buildLib3");
List<GradleTaskTree> nodes = GradleTaskTree.createTaskTree(4, taskIDs);
assertEquals("Node count", 2, nodes.size());
assertTasks(nodes.get(0), "buildApp",
"buildApp1",
"buildApp2");
assertTasks(nodes.get(1), "buildLib",
"buildLib1",
"buildLib2",
"buildLib3");
}
}