org.gradle.api.tasks.diagnostics.TaskReportTaskTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2008 the original author or authors.
*
* 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.gradle.api.tasks.diagnostics;
import org.gradle.api.Rule;
import org.gradle.api.Task;
import org.gradle.api.internal.project.DefaultProject;
import org.gradle.api.internal.project.ProjectInternal;
import org.gradle.api.internal.tasks.TaskContainerInternal;
import org.gradle.api.tasks.TaskDependency;
import org.gradle.api.tasks.diagnostics.internal.TaskDetails;
import org.gradle.api.tasks.diagnostics.internal.TaskReportRenderer;
import org.gradle.test.fixtures.file.TestNameTestDirectoryProvider;
import org.gradle.util.JUnit4GroovyMockery;
import org.gradle.util.Path;
import org.gradle.util.TestUtil;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
import org.jmock.Expectations;
import org.jmock.Sequence;
import org.jmock.api.Action;
import org.jmock.api.Invocation;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
import java.util.List;
import static org.gradle.util.WrapUtil.*;
@RunWith(JMock.class)
public class TaskReportTaskTest {
private final JUnit4Mockery context = new JUnit4GroovyMockery();
private final TaskReportRenderer renderer = context.mock(TaskReportRenderer.class);
private final ProjectInternal project = context.mock(DefaultProject.class);
private final TaskContainerInternal taskContainer = context.mock(TaskContainerInternal.class);
private final TaskContainerInternal implicitTasks = context.mock(TaskContainerInternal.class);
private TaskReportTask task;
@org.junit.Rule
public TestNameTestDirectoryProvider temporaryFolder = new TestNameTestDirectoryProvider();
@Before
public void setup() {
context.checking(new Expectations(){{
allowing(project).absoluteProjectPath("list");
will(returnValue(":path"));
allowing(project).getTasks();
will(returnValue(taskContainer));
allowing(project).getConvention();
will(returnValue(null));
allowing(project).getAllprojects();
will(returnValue(toSet(project)));
allowing(project).getSubprojects();
will(returnValue(toSet()));
}});
task = TestUtil.create(temporaryFolder).task(TaskReportTask.class);
task.setRenderer(renderer);
}
@Test
public void groupsTasksByTaskGroupAndPassesTasksToTheRenderer() throws IOException {
context.checking(new Expectations() {{
Task task1 = task("a", "group a");
Task task2 = task("b", "group b");
Task task3 = task("c");
Task task4 = task("d", "group b", task3);
List testDefaultTasks = toList("defaultTask1", "defaultTask2");
allowing(project).getDefaultTasks();
will(returnValue(testDefaultTasks));
allowing(taskContainer).realize();
allowing(taskContainer).size();
will(returnValue(4));
allowing(taskContainer).iterator();
will(returnIterator(toLinkedSet(task2, task3, task4, task1)));
allowing(implicitTasks).iterator();
will(returnIterator(toLinkedSet()));
allowing(taskContainer).getRules();
will(returnValue(toList()));
Sequence sequence = context.sequence("seq");
one(renderer).showDetail(false);
inSequence(sequence);
one(renderer).addDefaultTasks(testDefaultTasks);
inSequence(sequence);
one(renderer).startTaskGroup("group a");
inSequence(sequence);
one(renderer).addTask(with(isTask(task1)));
inSequence(sequence);
one(renderer).startTaskGroup("group b");
inSequence(sequence);
one(renderer).addTask(with(isTask(task2)));
inSequence(sequence);
one(renderer).addTask(with(isTask(task4)));
inSequence(sequence);
one(renderer).completeTasks();
inSequence(sequence);
}});
task.generate(project);
}
@Test
public void passesEachRuleToRenderer() throws IOException {
context.checking(new Expectations() {{
Rule rule1 = context.mock(Rule.class);
Rule rule2 = context.mock(Rule.class);
List defaultTasks = toList();
allowing(project).getDefaultTasks();
will(returnValue(defaultTasks));
allowing(taskContainer).realize();
allowing(taskContainer).size();
will(returnValue(0));
allowing(taskContainer).iterator();
will(returnIterator(toLinkedSet()));
allowing(implicitTasks).iterator();
will(returnIterator(toLinkedSet()));
one(taskContainer).getRules();
will(returnValue(toList(rule1, rule2)));
Sequence sequence = context.sequence("seq");
one(renderer).showDetail(false);
inSequence(sequence);
one(renderer).addDefaultTasks(defaultTasks);
inSequence(sequence);
one(renderer).completeTasks();
inSequence(sequence);
one(renderer).addRule(rule1);
inSequence(sequence);
one(renderer).addRule(rule2);
inSequence(sequence);
}});
task.generate(project);
}
private Matcher isTask(final Task task) {
return new BaseMatcher() {
public boolean matches(Object o) {
TaskDetails other = (TaskDetails) o;
return other.getPath().equals(Path.path(task.getName()));
}
public void describeTo(Description description) {
description.appendText("is ").appendValue(task);
}
};
}
private Task task(String name) {
return task(name, null);
}
private Task task(final String name, final String taskGroup, final Task... dependencies) {
final Task task = context.mock(Task.class);
context.checking(new Expectations() {{
allowing(task).getName();
will(returnValue(name));
allowing(task).getPath();
will(returnValue(':' + name));
allowing(task).getProject();
will(returnValue(project));
allowing(project).relativeProjectPath(':' + name);
will(returnValue(name));
allowing(task).getGroup();
will(returnValue(taskGroup));
allowing(task).compareTo(with(Matchers.notNullValue(Task.class)));
will(new Action() {
public Object invoke(Invocation invocation) throws Throwable {
Task other = (Task) invocation.getParameter(0);
return name.compareTo(other.getName());
}
public void describeTo(Description description) {
description.appendText("compare to");
}
});
TaskDependency dependency = context.mock(TaskDependency.class);
allowing(task).getTaskDependencies();
will(returnValue(dependency));
allowing(dependency).getDependencies(task);
will(returnValue(toSet(dependencies)));
}});
return task;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy