diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index 4fba77d494764b..0c1d90cd8ac7b2 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -1261,6 +1261,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib:bazel-modules", "//src/main/java/com/google/devtools/build/lib:bazel-rules", "//src/main/java/com/google/devtools/build/lib:build-base", + "//src/main/java/com/google/devtools/build/lib:build-request-options", "//src/main/java/com/google/devtools/build/lib:loading-phase-threads-option", "//src/main/java/com/google/devtools/build/lib:packages", "//src/main/java/com/google/devtools/build/lib:runtime", diff --git a/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternFileSupportTest.java b/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternFileSupportTest.java new file mode 100644 index 00000000000000..e97afffdddad71 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/runtime/commands/TargetPatternFileSupportTest.java @@ -0,0 +1,103 @@ +// Copyright 2020 The Bazel Authors. All rights reserved. +// +// 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 com.google.devtools.build.lib.runtime.commands; + +import static com.google.common.truth.Truth.assertThat; +import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows; +import static org.mockito.Mockito.when; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.buildtool.BuildRequestOptions; +import com.google.devtools.build.lib.runtime.BlazeRuntime; +import com.google.devtools.build.lib.runtime.BlazeServerStartupOptions; +import com.google.devtools.build.lib.runtime.CommandEnvironment; +import com.google.devtools.build.lib.runtime.commands.TargetPatternFileSupport.TargetPatternFileSupportException; +import com.google.devtools.build.lib.testutil.Scratch; +import com.google.devtools.build.lib.testutil.TestConstants; +import com.google.devtools.common.options.OptionsParser; +import com.google.devtools.common.options.OptionsParsingException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mockito; + +/** Tests {@link TargetPatternFileSupport}. */ +@RunWith(JUnit4.class) +public class TargetPatternFileSupportTest { + + private CommandEnvironment env; + private Scratch scratch; + private OptionsParser options; + + @Before + public void setUp() throws Exception { + options = + OptionsParser.builder().optionsClasses(BuildRequestOptions.class).build(); + scratch = new Scratch(); + BlazeRuntime runtime = + new BlazeRuntime.Builder() + .setFileSystem(scratch.getFileSystem()) + .setProductName(TestConstants.PRODUCT_NAME) + .setServerDirectories( + new ServerDirectories( + scratch.resolve("/install"), + scratch.resolve("/base"), + scratch.resolve("/userRoot"))) + .setStartupOptionsProvider( + OptionsParser.builder().optionsClasses(BlazeServerStartupOptions.class).build()) + .build(); + env = Mockito.mock(CommandEnvironment.class); + when(env.getWorkingDirectory()).thenReturn(scratch.resolve("wd")); + when(env.getRuntime()).thenReturn(runtime); + } + + @Test + public void testTargetPatternFile() throws Exception { + scratch.file("/wd/patterns.txt", "//some/...\n//patterns"); + options.parse("--target_pattern_file=patterns.txt"); + + assertThat(TargetPatternFileSupport.handleTargetPatternFile(env, options)) + .isEqualTo(ImmutableList.of("//some/...", "//patterns")); + } + + @Test + public void testNoTargetPatternFile() throws TargetPatternFileSupportException { + ImmutableList patterns = ImmutableList.of("//some/...", "//patterns"); + options.setResidue(patterns); + + assertThat(TargetPatternFileSupport.handleTargetPatternFile(env, options)) + .isEqualTo(patterns); + } + + @Test + public void testSpecifyPatternAndFileThrows() throws OptionsParsingException { + options.parse("--target_pattern_file=patterns.txt"); + options.setResidue(ImmutableList.of("//some:pattern")); + + assertThrows( + TargetPatternFileSupport.TargetPatternFileSupportException.class, + () -> TargetPatternFileSupport.handleTargetPatternFile(env, options)); + } + + @Test + public void testSpecifyNonExistingFileThrows() throws OptionsParsingException { + options.parse("--target_pattern_file=patterns.txt"); + + assertThrows( + TargetPatternFileSupport.TargetPatternFileSupportException.class, + () -> TargetPatternFileSupport.handleTargetPatternFile(env, options)); + } +}