org.gradle.api.internal.file.collections.DefaultConfigurableFileCollectionTest 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 2009 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.internal.file.collections;
import groovy.lang.Closure;
import org.gradle.api.Task;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.file.FileCollectionInternal;
import org.gradle.api.internal.file.FileResolver;
import org.gradle.api.internal.tasks.TaskResolver;
import org.gradle.api.tasks.TaskDependency;
import org.gradle.test.fixtures.file.TestNameTestDirectoryProvider;
import org.gradle.testfixtures.internal.NativeServicesTestFixture;
import org.gradle.util.JUnit4GroovyMockery;
import org.gradle.util.TestUtil;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import static org.gradle.util.Matchers.isEmpty;
import static org.gradle.util.WrapUtil.*;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
@RunWith(JMock.class)
public class DefaultConfigurableFileCollectionTest {
private final JUnit4Mockery context = new JUnit4GroovyMockery();
@Rule
public TestNameTestDirectoryProvider tmpDir = new TestNameTestDirectoryProvider();
private final FileResolver resolverMock = context.mock(FileResolver.class);
private final TaskResolver taskResolverStub = context.mock(TaskResolver.class);
private final DefaultConfigurableFileCollection collection = new DefaultConfigurableFileCollection(resolverMock,
taskResolverStub);
@Before
public void setUp() {
NativeServicesTestFixture.initialize();
}
@Test
public void resolvesSpecifiedFilesUseFileResolver() {
final File file1 = new File("1");
final File file2 = new File("2");
DefaultConfigurableFileCollection collection = new DefaultConfigurableFileCollection(resolverMock, taskResolverStub, "a", "b");
context.checking(new Expectations() {{
oneOf(resolverMock).resolve("a");
will(returnValue(file1));
oneOf(resolverMock).resolve("b");
will(returnValue(file2));
}});
assertThat(collection.getFrom(), equalTo(toLinkedSet((Object) "a", "b")));
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canAddPathsToTheCollection() {
collection.from("src1", "src2");
assertThat(collection.getFrom(), equalTo(toLinkedSet((Object) "src1", "src2")));
}
@Test
public void canSetThePathsOfTheCollection() {
collection.from("ignore-me");
collection.setFrom("src1", "src2");
assertThat(collection.getFrom(), equalTo(toLinkedSet((Object) "src1", "src2")));
collection.setFrom(toList("a", "b"));
assertThat(collection.getFrom(), equalTo(toLinkedSet((Object) toList("a", "b"))));
}
@Test
public void resolvesSpecifiedPathsUseFileResolver() {
final File file1 = new File("1");
final File file2 = new File("2");
DefaultConfigurableFileCollection collection = new DefaultConfigurableFileCollection(resolverMock, taskResolverStub, "src1",
"src2");
context.checking(new Expectations() {{
oneOf(resolverMock).resolve("src1");
will(returnValue(file1));
oneOf(resolverMock).resolve("src2");
will(returnValue(file2));
}});
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canUseAClosureToSpecifyTheContentsOfTheCollection() {
final File file1 = new File("1");
final File file2 = new File("2");
context.checking(new Expectations() {{
allowing(resolverMock).resolve('a');
will(returnValue(file1));
allowing(resolverMock).resolve('b');
will(returnValue(file2));
}});
List files = toList('a');
Closure closure = TestUtil.returns(files);
collection.from(closure);
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1)));
files.add('b');
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canUseAClosureToSpecifyASingleFile() {
Closure closure = TestUtil.returns('a');
final File file = new File("1");
collection.from(closure);
context.checking(new Expectations() {{
oneOf(resolverMock).resolve('a');
will(returnValue(file));
}});
assertThat(collection.getFiles(), equalTo(toLinkedSet(file)));
}
@Test
public void closureCanReturnNull() {
Closure closure = TestUtil.returns(null);
collection.from(closure);
assertThat(collection.getFiles(), isEmpty());
}
@Test
public void canUseACollectionToSpecifyTheContentsOfTheCollection() {
final File file1 = new File("1");
final File file2 = new File("2");
context.checking(new Expectations() {{
allowing(resolverMock).resolve("src1");
will(returnValue(file1));
allowing(resolverMock).resolve("src2");
will(returnValue(file2));
}});
List files = toList("src1");
collection.from(files);
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1)));
files.add("src2");
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canUseAnArrayToSpecifyTheContentsOfTheCollection() {
final File file1 = new File("1");
final File file2 = new File("2");
context.checking(new Expectations() {{
allowing(resolverMock).resolve("src1");
will(returnValue(file1));
allowing(resolverMock).resolve("src2");
will(returnValue(file2));
}});
collection.from((Object) toArray("src1", "src2"));
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canUseNestedObjectsToSpecifyTheContentsOfTheCollection() {
final File file1 = new File("1");
final File file2 = new File("2");
context.checking(new Expectations() {{
allowing(resolverMock).resolve("src1");
will(returnValue(file1));
allowing(resolverMock).resolve("src2");
will(returnValue(file2));
}});
collection.from(TestUtil.toClosure("{[{['src1', { ['src2'] as String[] }]}]}"));
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canUseAFileCollectionToSpecifyTheContentsOfTheCollection() {
final File file1 = new File("1");
final File file2 = new File("2");
final FileCollectionInternal src = context.mock(FileCollectionInternal.class);
collection.from(src);
context.checking(new Expectations() {{
oneOf(src).getFiles();
will(returnValue(toLinkedSet(file1)));
}});
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1)));
context.checking(new Expectations() {{
oneOf(src).getFiles();
will(returnValue(toLinkedSet(file1, file2)));
}});
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void canUseACallableToSpecifyTheContentsOfTheCollection() throws Exception {
final File file1 = new File("1");
final File file2 = new File("2");
final Callable callable = context.mock(Callable.class);
context.checking(new Expectations() {{
oneOf(callable).call();
will(returnValue(toList("src1", "src2")));
allowing(resolverMock).resolve("src1");
will(returnValue(file1));
allowing(resolverMock).resolve("src2");
will(returnValue(file2));
}});
collection.from(callable);
assertThat(collection.getFiles(), equalTo(toLinkedSet(file1, file2)));
}
@Test
public void callableCanReturnNull() throws Exception {
final Callable callable = context.mock(Callable.class);
context.checking(new Expectations() {{
oneOf(callable).call();
will(returnValue(null));
}});
collection.from(callable);
assertThat(collection.getFiles(), isEmpty());
}
@Test
public void resolveAddsEachSourceObjectAndBuildDependencies() {
final FileCollectionResolveContext resolveContext = context.mock(FileCollectionResolveContext.class);
final FileCollectionResolveContext nestedContext = context.mock(FileCollectionResolveContext.class);
final FileCollection fileCollectionMock = context.mock(FileCollection.class);
collection.from("file");
collection.from(fileCollectionMock);
context.checking(new Expectations() {{
oneOf(resolveContext).push(resolverMock);
will(returnValue(nestedContext));
oneOf(nestedContext).add(collection.getFrom());
}});
collection.visitContents(resolveContext);
}
@Test
public void canGetAndSetTaskDependencies() {
assertThat(collection.getBuiltBy(), isEmpty());
collection.builtBy("a");
collection.builtBy("b");
collection.from("f");
assertThat(collection.getBuiltBy(), equalTo(toSet((Object) "a", "b")));
collection.setBuiltBy(toList("c"));
assertThat(collection.getBuiltBy(), equalTo(toSet((Object) "c")));
final Task task = context.mock(Task.class);
context.checking(new Expectations() {{
allowing(resolverMock).resolve("f");
will(returnValue(new File("f")));
allowing(taskResolverStub).resolveTask("c");
will(returnValue(task));
}});
assertThat(collection.getBuildDependencies().getDependencies(null), equalTo((Set) toSet(task)));
}
@Test
public void taskDependenciesContainsUnionOfDependenciesOfNestedFileCollectionsPlusOwnDependencies() {
final FileCollectionInternal fileCollectionMock = context.mock(FileCollectionInternal.class);
collection.from(fileCollectionMock);
collection.from("f");
collection.builtBy("b");
final Task taskA = context.mock(Task.class, "a");
final Task taskB = context.mock(Task.class, "b");
context.checking(new Expectations() {{
allowing(resolverMock).resolve("f");
will(returnValue(new File("f")));
TaskDependency dependency = context.mock(TaskDependency.class);
allowing(fileCollectionMock).getBuildDependencies();
will(returnValue(dependency));
allowing(dependency).getDependencies(null);
will(returnValue(toSet(taskA)));
allowing(taskResolverStub).resolveTask("b");
will(returnValue(taskB));
}});
assertThat(collection.getBuildDependencies().getDependencies(null), equalTo((Set) toSet(taskA, taskB)));
}
@Test
public void hasSpecifiedDependenciesWhenEmpty() {
collection.builtBy("task");
final Task task = context.mock(Task.class);
context.checking(new Expectations(){{
allowing(taskResolverStub).resolveTask("task");
will(returnValue(task));
}});
assertThat(collection.getBuildDependencies().getDependencies(null), equalTo((Set) toSet(task)));
assertThat(collection.getAsFileTree().getBuildDependencies().getDependencies(null), equalTo((Set) toSet(task)));
assertThat(collection.getAsFileTree().matching(TestUtil.TEST_CLOSURE).getBuildDependencies().getDependencies(null), equalTo((Set) toSet(task)));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy