diff options
author | 2015-12-07 09:56:38 +0000 | |
---|---|---|
committer | 2015-12-07 21:17:13 +0000 | |
commit | cca703a9d74e865240ca46ce162937aa74820507 (patch) | |
tree | 054014b4a4eaf56470e33cf1fa5d6b08e93da2d9 /src/test/java/com/google/devtools | |
parent | 7c0b995fefaed48edb7284ffd29c9c1728df3949 (diff) |
Migrated base test classes to JUnit 4 and deleted their temporary *ForJunit4 versions:
devtools/build/lib/analysis/util/AnalysisTestCase.java
devtools/build/lib/analysis/util/BuildViewTestCase.java
devtools/build/lib/packages/util/PackageLoadingTestCase.java
devtools/build/lib/testutil/FoundationTestCase.java
--
MOS_MIGRATED_REVID=109560679
Diffstat (limited to 'src/test/java/com/google/devtools')
69 files changed, 182 insertions, 2595 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java index db27f876ec..f7f40c65fc 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java @@ -25,7 +25,7 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import static org.junit.Assert.fail; import com.google.devtools.build.lib.actions.util.ActionsTestUtil.NullAction; -import com.google.devtools.build.lib.analysis.util.AnalysisTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.analysis.util.TestAspects.AspectInfo; import com.google.devtools.build.lib.analysis.util.TestAspects.AspectRequiringRule; @@ -52,7 +52,7 @@ import org.junit.runners.JUnit4; * aspects can be tested even if they aren't used by regular rules. */ @RunWith(JUnit4.class) -public class AspectTest extends AnalysisTestCaseForJunit4 { +public class AspectTest extends AnalysisTestCase { private final void setRules(RuleDefinition... rules) throws Exception { ConfiguredRuleClassProvider.Builder builder = diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java index bb20661a02..860f7559b0 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java @@ -15,7 +15,7 @@ package com.google.devtools.build.lib.analysis; import com.google.common.testing.EqualsTester; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -import com.google.devtools.build.lib.analysis.util.AnalysisTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects.AttributeAspect; import com.google.devtools.build.lib.analysis.util.TestAspects.ExtraAttributeAspect; import com.google.devtools.build.lib.cmdline.Label; @@ -31,7 +31,7 @@ import org.junit.runners.JUnit4; * Tests for {@link com.google.devtools.build.lib.skyframe.AspectValue}. */ @RunWith(JUnit4.class) -public class AspectValueTest extends AnalysisTestCaseForJunit4 { +public class AspectValueTest extends AnalysisTestCase { @Test public void equality() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java index ecf0db4bfe..1340196686 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java @@ -15,7 +15,7 @@ package com.google.devtools.build.lib.analysis; import static org.junit.Assert.assertEquals; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.Path; @@ -27,7 +27,7 @@ import org.junit.runners.JUnit4; * Unit tests for {@link BlazeDirectories}. */ @RunWith(JUnit4.class) -public class BlazeDirectoriesTest extends FoundationTestCaseForJunit4 { +public class BlazeDirectoriesTest extends FoundationTestCase { @Test public void testCreatingDirectories() { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java b/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java index b19008a1de..26c7666b21 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NoSuchTargetException; @@ -34,7 +34,7 @@ import org.junit.runners.JUnit4; * Tests that check that dependency cycles are reported correctly. */ @RunWith(JUnit4.class) -public class CircularDependencyTest extends BuildViewTestCaseForJunit4 { +public class CircularDependencyTest extends BuildViewTestCase { @Test public void testOneRuleCycle() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java index b0d3c80b7a..c0d612f836 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java @@ -26,7 +26,7 @@ import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.actions.util.ActionsTestUtil.UncheckedActionConflictException; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.rules.cpp.CppHelper; import org.junit.Before; @@ -41,7 +41,7 @@ import java.util.List; * Unit tests for the {@link CompilationHelper} class. */ @RunWith(JUnit4.class) -public class CompilationHelperTest extends BuildViewTestCaseForJunit4 { +public class CompilationHelperTest extends BuildViewTestCase { private AnalysisTestUtil.CollectingAnalysisEnvironment analysisEnvironment; @Before diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java index 86421174a3..9097371374 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertEquals; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.config.CompilationMode; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; @@ -42,7 +42,7 @@ import java.util.List; * all attribute mappers. */ @RunWith(JUnit4.class) -public class ConfiguredAttributeMapperTest extends BuildViewTestCaseForJunit4 { +public class ConfiguredAttributeMapperTest extends BuildViewTestCase { /** * Returns a ConfiguredAttributeMapper bound to the given rule with the target configuration. diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java index 31e343709c..b231b7c576 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java @@ -23,7 +23,7 @@ import com.google.common.testing.NullPointerTester; import com.google.devtools.build.lib.analysis.DependencyResolver.Dependency; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; -import com.google.devtools.build.lib.analysis.util.AnalysisTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.analysis.util.TestAspects.AspectRequiringRule; import com.google.devtools.build.lib.cmdline.Label; @@ -52,7 +52,7 @@ import javax.annotation.Nullable; * easier this way. */ @RunWith(JUnit4.class) -public class DependencyResolverTest extends AnalysisTestCaseForJunit4 { +public class DependencyResolverTest extends AnalysisTestCase { private DependencyResolver dependencyResolver; @Before diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DuplicateActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DuplicateActionTest.java index 575ce3c1e7..90830c43da 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/DuplicateActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/DuplicateActionTest.java @@ -16,7 +16,7 @@ package com.google.devtools.build.lib.analysis; import static org.junit.Assert.assertFalse; -import com.google.devtools.build.lib.analysis.util.AnalysisTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,7 +26,7 @@ import org.junit.runners.JUnit4; * Tests for duplicate action detection and handling when incremental analysis is enabled. */ @RunWith(JUnit4.class) -public class DuplicateActionTest extends AnalysisTestCaseForJunit4 { +public class DuplicateActionTest extends AnalysisTestCase { @Test public void testDuplicateBuildInfoHeaderAction() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/LabelExpanderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/LabelExpanderTest.java index 7209623cd9..61335a0132 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/LabelExpanderTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/LabelExpanderTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.fail; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.testutil.Suite; @@ -37,7 +37,7 @@ import java.util.Map; */ @TestSpec(size = Suite.SMALL_TESTS) @RunWith(JUnit4.class) -public class LabelExpanderTest extends BuildViewTestCaseForJunit4 { +public class LabelExpanderTest extends BuildViewTestCase { /** * A dummy target that resolves labels and receives errors. */ diff --git a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java index a38fbfcc8f..dec63d4805 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java @@ -21,7 +21,7 @@ import com.google.common.collect.Maps; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.events.EventKind; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.vfs.PathFragment; import org.junit.Test; @@ -35,7 +35,7 @@ import java.util.Map; * Test for {@link Runfiles}. */ @RunWith(JUnit4.class) -public class RunfilesTest extends FoundationTestCaseForJunit4 { +public class RunfilesTest extends FoundationTestCase { private void checkWarning() { assertContainsEvent("obscured by a -> /workspace/a"); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLineTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLineTest.java index 3b61e4fcdf..f065df9508 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLineTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLineTest.java @@ -17,7 +17,7 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.vfs.PathFragment; import org.junit.Test; @@ -25,7 +25,7 @@ import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) -public class CustomCommandLineTest extends BuildViewTestCaseForJunit4 { +public class CustomCommandLineTest extends BuildViewTestCase { @Test public void testAddBeforeEachPath() { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/FileWriteActionTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/FileWriteActionTestCase.java index dda59a582e..b2ccbc4399 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/FileWriteActionTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/FileWriteActionTestCase.java @@ -27,7 +27,7 @@ import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.analysis.util.ActionTester; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.exec.util.TestExecutorBuilder; import com.google.devtools.build.lib.util.io.FileOutErr; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -37,7 +37,7 @@ import org.junit.Before; import java.util.Collection; -public abstract class FileWriteActionTestCase extends BuildViewTestCaseForJunit4 { +public abstract class FileWriteActionTestCase extends BuildViewTestCase { private Action action; private Artifact outputArtifact; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java index 106416f62e..388a0c140b 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTest.java @@ -35,7 +35,7 @@ import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.util.ActionTester; import com.google.devtools.build.lib.analysis.util.ActionTester.ActionCombinationFactory; import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.vfs.PathFragment; @@ -54,7 +54,7 @@ import java.util.Map; * Tests {@link SpawnAction}. */ @RunWith(JUnit4.class) -public class SpawnActionTest extends BuildViewTestCaseForJunit4 { +public class SpawnActionTest extends BuildViewTestCase { private Artifact welcomeArtifact; private Artifact destinationArtifact; private Artifact jarArtifact; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java index 0aa2c637c1..991d8b64f2 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java @@ -25,7 +25,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Executor; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.exec.util.TestExecutorBuilder; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; @@ -39,7 +39,7 @@ import org.junit.runners.JUnit4; * Tests {@link SymlinkAction}. */ @RunWith(JUnit4.class) -public class SymlinkActionTest extends BuildViewTestCaseForJunit4 { +public class SymlinkActionTest extends BuildViewTestCase { private Path input; private Artifact inputArtifact; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java index eaf2610174..62ef7f71c7 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java @@ -31,7 +31,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Su import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Template; import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.exec.util.TestExecutorBuilder; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.util.io.FileOutErr; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; @@ -48,7 +48,7 @@ import java.util.List; * Tests {@link TemplateExpansionAction}. */ @RunWith(JUnit4.class) -public class TemplateExpansionActionTest extends FoundationTestCaseForJunit4 { +public class TemplateExpansionActionTest extends FoundationTestCase { private static final String TEMPLATE = Joiner.on('\n').join("key=%key%", "value=%value%"); private static final String SPECIAL_CHARS = "Š©±½_strøget"; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/ConfigSettingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/ConfigSettingTest.java index 0c80a1d1d5..41b1ba4d1f 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/ConfigSettingTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/ConfigSettingTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.Constants; import com.google.devtools.build.lib.analysis.config.ConfigRuleClasses.ConfigSettingRule; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; @@ -42,7 +42,7 @@ import java.util.Map; * Tests for {@link ConfigSetting}. */ @RunWith(JUnit4.class) -public class ConfigSettingTest extends BuildViewTestCaseForJunit4 { +public class ConfigSettingTest extends BuildViewTestCase { private void writeSimpleExample() throws Exception { scratch.file("pkg/BUILD", diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/StampTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/StampTest.java index 1b60b034bc..28a887f01d 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/StampTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/StampTest.java @@ -15,7 +15,7 @@ package com.google.devtools.build.lib.analysis.config; import static org.junit.Assert.assertEquals; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleFactory; @@ -31,7 +31,7 @@ import org.junit.runners.JUnit4; * Tests for link stamping. */ @RunWith(JUnit4.class) -public class StampTest extends BuildViewTestCaseForJunit4 { +public class StampTest extends BuildViewTestCase { /** * Tests that link stamping is disabled for all tests that support it. */ diff --git a/src/test/java/com/google/devtools/build/lib/analysis/constraints/AbstractConstraintsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/constraints/AbstractConstraintsTest.java index 7268c22338..9b44af9493 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/constraints/AbstractConstraintsTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/constraints/AbstractConstraintsTest.java @@ -17,7 +17,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import java.util.Collection; @@ -27,7 +27,7 @@ import java.util.Set; /** * Common functionality for tests for the constraint enforcement system. */ -public abstract class AbstractConstraintsTest extends BuildViewTestCaseForJunit4 { +public abstract class AbstractConstraintsTest extends BuildViewTestCase { /** * Creates an environment group on the scratch filesystem consisting of the specified * environments and specified defaults, set via a builder-style interface. The package name diff --git a/src/test/java/com/google/devtools/build/lib/analysis/select/AbstractAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/select/AbstractAttributeMapperTest.java index 400729e7bc..e57ce2a181 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/select/AbstractAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/select/AbstractAttributeMapperTest.java @@ -34,7 +34,7 @@ import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.util.PackageFactoryApparatus; import com.google.devtools.build.lib.syntax.Type; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.Scratch; import com.google.devtools.build.lib.vfs.Path; @@ -49,7 +49,7 @@ import java.util.List; * Unit tests for {@link AbstractAttributeMapper}. */ @RunWith(JUnit4.class) -public class AbstractAttributeMapperTest extends FoundationTestCaseForJunit4 { +public class AbstractAttributeMapperTest extends FoundationTestCase { private Package pkg; protected Rule rule; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisCachingTestBase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisCachingTestBase.java index fbd8034a38..6db4202067 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisCachingTestBase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisCachingTestBase.java @@ -19,7 +19,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget; /** * Base class for analysis caching tests. */ -public abstract class AnalysisCachingTestBase extends AnalysisTestCaseForJunit4 { +public abstract class AnalysisCachingTestBase extends AnalysisTestCase { protected static final String CONFLICT_MSG = "is generated by these conflicting actions:"; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java index 247b121b97..405bc21b09 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java @@ -68,6 +68,8 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.common.options.Options; import com.google.devtools.common.options.OptionsParser; +import org.junit.Before; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -126,11 +128,9 @@ public abstract class AnalysisTestCase extends FoundationTestCase { protected AnalysisTestUtil.DummyWorkspaceStatusActionFactory workspaceStatusActionFactory; private PathPackageLocator pkgLocator; private AnalysisMock analysisMock; - protected boolean enableLoading = true; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public final void createMocks() throws Exception { analysisMock = AnalysisMock.get(); pkgLocator = new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)); directories = new BlazeDirectories(outputBase, outputBase, rootDirectory); @@ -251,7 +251,7 @@ public abstract class AnalysisTestCase extends FoundationTestCase { LoadingResult loadingResult = loadingPhaseRunner .execute(reporter, eventBus, ImmutableList.copyOf(labels), loadingOptions, - buildOptions.getAllLabels(), viewOptions.keepGoing, enableLoading, + buildOptions.getAllLabels(), viewOptions.keepGoing, isLoadingEnabled(), /*determineTests=*/false, /*callback=*/null); BuildRequestOptions requestOptions = optionsParser.getOptions(BuildRequestOptions.class); @@ -267,7 +267,7 @@ public abstract class AnalysisTestCase extends FoundationTestCase { AnalysisTestUtil.TOP_LEVEL_ARTIFACT_CONTEXT, reporter, eventBus, - enableLoading); + isLoadingEnabled()); } protected void update(FlagBuilder config, String... labels) throws Exception { @@ -363,8 +363,4 @@ public abstract class AnalysisTestCase extends FoundationTestCase { protected void clearAnalysisResult() { analysisResult = null; } - - protected void disableLoading() { - enableLoading = false; - } } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCaseForJunit4.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCaseForJunit4.java deleted file mode 100644 index 2e5397c188..0000000000 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCaseForJunit4.java +++ /dev/null @@ -1,366 +0,0 @@ -// Copyright 2015 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.analysis.util; - -import com.google.common.base.Preconditions; -import com.google.common.base.Predicates; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.Iterables; -import com.google.common.eventbus.EventBus; -import com.google.devtools.build.lib.actions.Action; -import com.google.devtools.build.lib.actions.ActionGraph; -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.BlazeDirectories; -import com.google.devtools.build.lib.analysis.BuildView; -import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult; -import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.InputFileConfiguredTarget; -import com.google.devtools.build.lib.analysis.config.BinTools; -import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; -import com.google.devtools.build.lib.analysis.config.BuildOptions; -import com.google.devtools.build.lib.analysis.config.ConfigurationFactory; -import com.google.devtools.build.lib.buildtool.BuildRequest.BuildRequestOptions; -import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.LabelSyntaxException; -import com.google.devtools.build.lib.exec.ExecutionOptions; -import com.google.devtools.build.lib.packages.PackageFactory; -import com.google.devtools.build.lib.packages.Preprocessor; -import com.google.devtools.build.lib.packages.Target; -import com.google.devtools.build.lib.packages.util.MockToolsConfig; -import com.google.devtools.build.lib.pkgcache.LegacyLoadingPhaseRunner; -import com.google.devtools.build.lib.pkgcache.LoadingOptions; -import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner; -import com.google.devtools.build.lib.pkgcache.LoadingResult; -import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; -import com.google.devtools.build.lib.pkgcache.PackageManager; -import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; -import com.google.devtools.build.lib.skyframe.DiffAwareness; -import com.google.devtools.build.lib.skyframe.PrecomputedValue; -import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; -import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; -import com.google.devtools.build.lib.skyframe.SkyframeExecutor; -import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; -import com.google.devtools.build.lib.testutil.TestConstants; -import com.google.devtools.build.lib.testutil.TestRuleClassProvider; -import com.google.devtools.build.lib.util.BlazeClock; -import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; -import com.google.devtools.build.lib.vfs.ModifiedFileSet; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.devtools.build.skyframe.SkyKey; -import com.google.devtools.common.options.Options; -import com.google.devtools.common.options.OptionsParser; - -import org.junit.Before; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -/** - * Testing framework for tests of the analysis phase that uses the BuildView and LoadingPhaseRunner - * APIs correctly (compared to {@link BuildViewTestCaseForJunit4}). - * - * <p>The intended usage pattern is to first call {@link #update} with the set of targets, and then - * assert properties of the configured targets obtained from {@link #getConfiguredTarget}. - * - * <p>This class intentionally does not inherit from {@link BuildViewTestCase}; BuildViewTestCase - * abuses the BuildView API in ways that are incompatible with the goals of this test, i.e. the - * convenience methods provided there wouldn't work here. - */ -public abstract class AnalysisTestCaseForJunit4 extends FoundationTestCaseForJunit4 { - private static final int LOADING_PHASE_THREADS = 20; - - /** All the flags that can be passed to {@link BuildView#update}. */ - public enum Flag { - KEEP_GOING - } - - /** Helper class to make it easy to enable and disable flags. */ - public static final class FlagBuilder { - private final Set<Flag> flags = new HashSet<>(); - - public FlagBuilder with(Flag flag) { - flags.add(flag); - return this; - } - - public FlagBuilder without(Flag flag) { - flags.remove(flag); - return this; - } - } - - protected BlazeDirectories directories; - protected MockToolsConfig mockToolsConfig; - - private OptionsParser optionsParser; - protected PackageManager packageManager; - private LoadingPhaseRunner loadingPhaseRunner; - private ConfigurationFactory configurationFactory; - private BuildView buildView; - - // Note that these configurations are virtual (they use only VFS) - private BuildConfigurationCollection masterConfig; - - private AnalysisResult analysisResult; - protected SkyframeExecutor skyframeExecutor = null; - protected ConfiguredRuleClassProvider ruleClassProvider; - - protected AnalysisTestUtil.DummyWorkspaceStatusActionFactory workspaceStatusActionFactory; - private PathPackageLocator pkgLocator; - private AnalysisMock analysisMock; - - @Before - public final void createMocks() throws Exception { - analysisMock = AnalysisMock.get(); - pkgLocator = new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)); - directories = new BlazeDirectories(outputBase, outputBase, rootDirectory); - workspaceStatusActionFactory = - new AnalysisTestUtil.DummyWorkspaceStatusActionFactory(directories); - - mockToolsConfig = new MockToolsConfig(rootDirectory); - analysisMock.setupMockClient(mockToolsConfig); - analysisMock.setupMockWorkspaceFiles(directories.getEmbeddedBinariesRoot()); - configurationFactory = analysisMock.createConfigurationFactory(); - - useRuleClassProvider(TestRuleClassProvider.getRuleClassProvider()); - } - - /** - * Changes the rule class provider to be used for the loading and the analysis phase. - */ - protected void useRuleClassProvider(ConfiguredRuleClassProvider ruleClassProvider) - throws Exception { - this.ruleClassProvider = ruleClassProvider; - PackageFactory pkgFactory = new PackageFactory(ruleClassProvider); - BinTools binTools = BinTools.forUnitTesting(directories, TestConstants.EMBEDDED_TOOLS); - skyframeExecutor = - SequencedSkyframeExecutor.create( - pkgFactory, - new TimestampGranularityMonitor(BlazeClock.instance()), - directories, - binTools, - workspaceStatusActionFactory, - ruleClassProvider.getBuildInfoFactories(), - ImmutableSet.<Path>of(), - ImmutableList.<DiffAwareness.Factory>of(), - Predicates.<PathFragment>alwaysFalse(), - Preprocessor.Factory.Supplier.NullSupplier.INSTANCE, - analysisMock.getSkyFunctions(directories), - getPrecomputedValues(), - ImmutableList.<SkyValueDirtinessChecker>of()); - skyframeExecutor.preparePackageLoading(pkgLocator, - Options.getDefaults(PackageCacheOptions.class).defaultVisibility, true, - 3, ruleClassProvider.getDefaultsPackageContent(), UUID.randomUUID()); - packageManager = skyframeExecutor.getPackageManager(); - loadingPhaseRunner = - new LegacyLoadingPhaseRunner(packageManager, pkgFactory.getRuleClassNames()); - buildView = new BuildView(directories, ruleClassProvider, skyframeExecutor, null); - useConfiguration(); - } - - protected ImmutableList<PrecomputedValue.Injected> getPrecomputedValues() { - return ImmutableList.of(); - } - - protected final void useConfigurationFactory(ConfigurationFactory configurationFactory) { - this.configurationFactory = configurationFactory; - } - - /** - * Sets host and target configuration using the specified options, falling back to the default - * options for unspecified ones, and recreates the build view. - */ - protected final void useConfiguration(String... args) throws Exception { - optionsParser = OptionsParser.newOptionsParser(Iterables.concat(Arrays.asList( - ExecutionOptions.class, - PackageCacheOptions.class, - BuildRequestOptions.class, - BuildView.Options.class), - ruleClassProvider.getConfigurationOptions())); - optionsParser.parse(new String[] {"--default_visibility=public" }); - optionsParser.parse(args); - } - - protected FlagBuilder defaultFlags() { - return new FlagBuilder(); - } - - protected Action getGeneratingAction(Artifact artifact) { - ensureUpdateWasCalled(); - return analysisResult.getActionGraph().getGeneratingAction(artifact); - } - - protected BuildConfigurationCollection getBuildConfigurationCollection() { - return masterConfig; - } - - protected BuildConfiguration getTargetConfiguration() { - return Iterables.getOnlyElement(masterConfig.getTargetConfigurations()); - } - - protected BuildConfiguration getHostConfiguration() { - return masterConfig.getHostConfiguration(); - } - - protected final void ensureUpdateWasCalled() { - Preconditions.checkState(analysisResult != null, "You must run update() first!"); - } - - /** - * Update the BuildView: syncs the package cache; loads and analyzes the given labels. - */ - protected void update(EventBus eventBus, FlagBuilder config, String... labels) throws Exception { - Set<Flag> flags = config.flags; - - LoadingOptions loadingOptions = Options.getDefaults(LoadingOptions.class); - loadingOptions.loadingPhaseThreads = LOADING_PHASE_THREADS; - - BuildView.Options viewOptions = optionsParser.getOptions(BuildView.Options.class); - viewOptions.keepGoing = flags.contains(Flag.KEEP_GOING); - - BuildOptions buildOptions = ruleClassProvider.createBuildOptions(optionsParser); - PackageCacheOptions packageCacheOptions = optionsParser.getOptions(PackageCacheOptions.class); - - PathPackageLocator pathPackageLocator = PathPackageLocator.create( - null, packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory); - skyframeExecutor.preparePackageLoading(pathPackageLocator, - packageCacheOptions.defaultVisibility, true, - 7, ruleClassProvider.getDefaultsPackageContent(), UUID.randomUUID()); - skyframeExecutor.invalidateFilesUnderPathForTesting(reporter, - ModifiedFileSet.EVERYTHING_MODIFIED, rootDirectory); - - LoadingResult loadingResult = loadingPhaseRunner - .execute(reporter, eventBus, ImmutableList.copyOf(labels), loadingOptions, - buildOptions.getAllLabels(), viewOptions.keepGoing, isLoadingEnabled(), - /*determineTests=*/false, /*callback=*/null); - - BuildRequestOptions requestOptions = optionsParser.getOptions(BuildRequestOptions.class); - ImmutableSortedSet<String> multiCpu = ImmutableSortedSet.copyOf(requestOptions.multiCpus); - masterConfig = skyframeExecutor.createConfigurations( - reporter, configurationFactory, buildOptions, directories, multiCpu, false); - analysisResult = - buildView.update( - loadingResult, - masterConfig, - ImmutableList.<String>of(), - viewOptions, - AnalysisTestUtil.TOP_LEVEL_ARTIFACT_CONTEXT, - reporter, - eventBus, - isLoadingEnabled()); - } - - protected void update(FlagBuilder config, String... labels) throws Exception { - update(new EventBus(), config, labels); - } - - /** - * Update the BuildView: syncs the package cache; loads and analyzes the given labels. - */ - protected void update(String... labels) throws Exception { - update(new EventBus(), defaultFlags(), labels); - } - - protected Target getTarget(String label) { - try { - return SkyframeExecutorTestUtils.getExistingTarget(skyframeExecutor, - Label.parseAbsolute(label)); - } catch (LabelSyntaxException e) { - throw new AssertionError(e); - } - } - - protected ConfiguredTarget getConfiguredTarget(String label, BuildConfiguration configuration) { - ensureUpdateWasCalled(); - return getConfiguredTargetForSkyframe(label, configuration); - } - - private ConfiguredTarget getConfiguredTargetForSkyframe(String label, - BuildConfiguration configuration) { - Label parsedLabel; - try { - parsedLabel = Label.parseAbsolute(label); - } catch (LabelSyntaxException e) { - throw new AssertionError(e); - } - return skyframeExecutor.getConfiguredTargetForTesting(reporter, parsedLabel, configuration); - } - - /** - * Returns the corresponding configured target, if it exists. Note that this will only return - * anything useful after a call to update() with the same label. - */ - protected ConfiguredTarget getConfiguredTarget(String label) { - return getConfiguredTarget(label, getTargetConfiguration()); - } - - /** - * Returns the corresponding configured target, if it exists. Note that this will only return - * anything useful after a call to update() with the same label. The label passed in must - * represent an input file. - */ - protected InputFileConfiguredTarget getInputFileConfiguredTarget(String label) { - return (InputFileConfiguredTarget) getConfiguredTarget(label, null); - } - - protected boolean hasErrors(ConfiguredTarget configuredTarget) { - return buildView.hasErrors(configuredTarget); - } - - protected Artifact getBinArtifact(String packageRelativePath, ConfiguredTarget owner) { - Label label = owner.getLabel(); - return buildView.getArtifactFactory().getDerivedArtifact( - label.getPackageFragment().getRelative(packageRelativePath), - getTargetConfiguration().getBinDirectory(), - new ConfiguredTargetKey(owner)); - } - - protected Set<SkyKey> getSkyframeEvaluatedTargetKeys() { - return buildView.getSkyframeEvaluatedTargetKeysForTesting(); - } - - protected int getTargetsVisited() { - return buildView.getTargetsVisited(); - } - - protected String getAnalysisError() { - ensureUpdateWasCalled(); - return analysisResult.getError(); - } - - protected BuildView getView() { - return buildView; - } - - protected ActionGraph getActionGraph() { - return skyframeExecutor.getActionGraph(reporter); - } - - protected AnalysisResult getAnalysisResult() { - return analysisResult; - } - - protected void clearAnalysisResult() { - analysisResult = null; - } -} diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java index cf5efa149a..25748c0a2b 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java @@ -48,7 +48,7 @@ import java.util.regex.Pattern; /** * Base class for BuildView test cases. */ -public abstract class BuildViewTestBase extends AnalysisTestCaseForJunit4 { +public abstract class BuildViewTestBase extends AnalysisTestCase { protected static int getFrequencyOfErrorsWithLocation( PathFragment path, EventCollector eventCollector) { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 9b9f575506..21d5a6658c 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -15,6 +15,12 @@ package com.google.devtools.build.lib.analysis.util; import static com.google.common.truth.Truth.assertThat; import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirstArtifactEndingWith; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import com.google.common.base.Function; import com.google.common.base.Preconditions; @@ -134,6 +140,8 @@ import com.google.devtools.common.options.Options; import com.google.devtools.common.options.OptionsParser; import com.google.devtools.common.options.OptionsParsingException; +import org.junit.Before; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.reflect.Field; @@ -176,11 +184,9 @@ public abstract class BuildViewTestCase extends FoundationTestCase { protected WorkspaceStatusAction.Factory workspaceStatusActionFactory; private MutableActionGraph mutableActionGraph; - protected boolean enableLoading = true; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public final void initializeSkyframeExecutor() throws Exception { AnalysisMock mock = getAnalysisMock(); directories = new BlazeDirectories(outputBase, outputBase, rootDirectory); binTools = BinTools.forUnitTesting(directories, TestConstants.EMBEDDED_TOOLS); @@ -1324,7 +1330,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase { Collections.unmodifiableSet(ruleClassProvider.getRuleClassMap().keySet())); LoadingResult loadingResult = runner.execute(reporter, eventBus, targets, loadingOptions, getTargetConfiguration().getAllLabels(), viewOptions.keepGoing, - enableLoading, /*determineTests=*/false, /*callback=*/null); + isLoadingEnabled(), /*determineTests=*/false, /*callback=*/null); if (!doAnalysis) { // TODO(bazel-team): What's supposed to happen in this case? return null; @@ -1337,7 +1343,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase { AnalysisTestUtil.TOP_LEVEL_ARTIFACT_CONTEXT, reporter, eventBus, - enableLoading); + isLoadingEnabled()); } protected static Predicate<Artifact> artifactNamed(final String name) { @@ -1659,8 +1665,4 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return result.build(); } - - protected void disableLoading() { - enableLoading = false; - } } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCaseForJunit4.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCaseForJunit4.java deleted file mode 100644 index 16061cba99..0000000000 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCaseForJunit4.java +++ /dev/null @@ -1,1668 +0,0 @@ -// Copyright 2015 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.analysis.util; - -import static com.google.common.truth.Truth.assertThat; -import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirstArtifactEndingWith; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import com.google.common.base.Function; -import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.base.Splitter; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import com.google.common.eventbus.EventBus; -import com.google.devtools.build.lib.actions.Action; -import com.google.devtools.build.lib.actions.ActionGraph; -import com.google.devtools.build.lib.actions.ActionInput; -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.ArtifactOwner; -import com.google.devtools.build.lib.actions.MapBasedActionGraph; -import com.google.devtools.build.lib.actions.MiddlemanFactory; -import com.google.devtools.build.lib.actions.MutableActionGraph; -import com.google.devtools.build.lib.actions.ResourceManager; -import com.google.devtools.build.lib.actions.ResourceSet; -import com.google.devtools.build.lib.actions.Root; -import com.google.devtools.build.lib.actions.util.ActionsTestUtil; -import com.google.devtools.build.lib.analysis.AnalysisEnvironment; -import com.google.devtools.build.lib.analysis.AnalysisUtils; -import com.google.devtools.build.lib.analysis.BlazeDirectories; -import com.google.devtools.build.lib.analysis.BuildView; -import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult; -import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment; -import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory; -import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper; -import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.ExtraActionArtifactsProvider; -import com.google.devtools.build.lib.analysis.ExtraActionArtifactsProvider.ExtraArtifactSet; -import com.google.devtools.build.lib.analysis.FileConfiguredTarget; -import com.google.devtools.build.lib.analysis.FileProvider; -import com.google.devtools.build.lib.analysis.FilesToRunProvider; -import com.google.devtools.build.lib.analysis.LabelAndConfiguration; -import com.google.devtools.build.lib.analysis.OutputGroupProvider; -import com.google.devtools.build.lib.analysis.PseudoAction; -import com.google.devtools.build.lib.analysis.RuleConfiguredTarget; -import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.Runfiles; -import com.google.devtools.build.lib.analysis.RunfilesProvider; -import com.google.devtools.build.lib.analysis.RunfilesSupport; -import com.google.devtools.build.lib.analysis.SourceManifestAction; -import com.google.devtools.build.lib.analysis.SymlinkTreeAction; -import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; -import com.google.devtools.build.lib.analysis.WorkspaceStatusAction; -import com.google.devtools.build.lib.analysis.actions.SpawnAction; -import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey; -import com.google.devtools.build.lib.analysis.config.BinTools; -import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; -import com.google.devtools.build.lib.analysis.config.BuildOptions; -import com.google.devtools.build.lib.analysis.config.ConfigurationFactory; -import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; -import com.google.devtools.build.lib.buildtool.BuildRequest; -import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.LabelSyntaxException; -import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import com.google.devtools.build.lib.collect.nestedset.Order; -import com.google.devtools.build.lib.events.Event; -import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.events.StoredEventHandler; -import com.google.devtools.build.lib.exec.ExecutionOptions; -import com.google.devtools.build.lib.packages.AspectParameters; -import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; -import com.google.devtools.build.lib.packages.AttributeMap; -import com.google.devtools.build.lib.packages.ConstantRuleVisibility; -import com.google.devtools.build.lib.packages.NativeAspectClass; -import com.google.devtools.build.lib.packages.NoSuchPackageException; -import com.google.devtools.build.lib.packages.NoSuchTargetException; -import com.google.devtools.build.lib.packages.OutputFile; -import com.google.devtools.build.lib.packages.PackageFactory; -import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension; -import com.google.devtools.build.lib.packages.Preprocessor; -import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.Target; -import com.google.devtools.build.lib.packages.util.MockToolsConfig; -import com.google.devtools.build.lib.pkgcache.LegacyLoadingPhaseRunner; -import com.google.devtools.build.lib.pkgcache.LoadingOptions; -import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner; -import com.google.devtools.build.lib.pkgcache.LoadingResult; -import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; -import com.google.devtools.build.lib.pkgcache.PackageManager; -import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader; -import com.google.devtools.build.lib.rules.extra.ExtraAction; -import com.google.devtools.build.lib.rules.test.BaselineCoverageAction; -import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; -import com.google.devtools.build.lib.skyframe.AspectValue; -import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; -import com.google.devtools.build.lib.skyframe.DiffAwareness; -import com.google.devtools.build.lib.skyframe.PrecomputedValue; -import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; -import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; -import com.google.devtools.build.lib.testutil.TestConstants; -import com.google.devtools.build.lib.testutil.TestRuleClassProvider; -import com.google.devtools.build.lib.util.BlazeClock; -import com.google.devtools.build.lib.util.FileType; -import com.google.devtools.build.lib.util.StringUtil; -import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; -import com.google.devtools.build.lib.vfs.FileSystemUtils; -import com.google.devtools.build.lib.vfs.ModifiedFileSet; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.devtools.build.skyframe.SkyFunction; -import com.google.devtools.common.options.Options; -import com.google.devtools.common.options.OptionsParser; -import com.google.devtools.common.options.OptionsParsingException; - -import org.junit.Before; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.lang.reflect.Field; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -/** - * Common test code that creates a BuildView instance. - */ -public abstract class BuildViewTestCaseForJunit4 extends FoundationTestCaseForJunit4 { - protected static final int LOADING_PHASE_THREADS = 20; - - protected ConfiguredRuleClassProvider ruleClassProvider; - protected ConfigurationFactory configurationFactory; - protected BuildView view; - - private SequencedSkyframeExecutor skyframeExecutor; - - protected BlazeDirectories directories; - protected BinTools binTools; - - // Note that these configurations are virtual (they use only VFS) - protected BuildConfigurationCollection masterConfig; - protected BuildConfiguration targetConfig; // "target" or "build" config - - protected OptionsParser optionsParser; - private PackageCacheOptions packageCacheOptions; - private PackageFactory pkgFactory; - - protected MockToolsConfig mockToolsConfig; - - protected WorkspaceStatusAction.Factory workspaceStatusActionFactory; - - private MutableActionGraph mutableActionGraph; - - @Before - public final void initializeSkyframeExecutor() throws Exception { - AnalysisMock mock = getAnalysisMock(); - directories = new BlazeDirectories(outputBase, outputBase, rootDirectory); - binTools = BinTools.forUnitTesting(directories, TestConstants.EMBEDDED_TOOLS); - mockToolsConfig = new MockToolsConfig(rootDirectory, false); - mock.setupMockClient(mockToolsConfig); - mock.setupMockWorkspaceFiles(directories.getEmbeddedBinariesRoot()); - - configurationFactory = mock.createConfigurationFactory(); - packageCacheOptions = parsePackageCacheOptions(); - workspaceStatusActionFactory = - new AnalysisTestUtil.DummyWorkspaceStatusActionFactory(directories); - mutableActionGraph = new MapBasedActionGraph(); - ruleClassProvider = getRuleClassProvider(); - pkgFactory = new PackageFactory(ruleClassProvider, getEnvironmentExtensions()); - skyframeExecutor = - SequencedSkyframeExecutor.create( - pkgFactory, - new TimestampGranularityMonitor(BlazeClock.instance()), - directories, - binTools, - workspaceStatusActionFactory, - ruleClassProvider.getBuildInfoFactories(), - ImmutableSet.<Path>of(), - ImmutableList.<DiffAwareness.Factory>of(), - Predicates.<PathFragment>alwaysFalse(), - getPreprocessorFactorySupplier(), - mock.getSkyFunctions(directories), - getPrecomputedValues(), - ImmutableList.<SkyValueDirtinessChecker>of()); - skyframeExecutor.preparePackageLoading( - new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)), - ConstantRuleVisibility.PUBLIC, true, 7, "", - UUID.randomUUID()); - useConfiguration(); - setUpSkyframe(); - // Also initializes ResourceManager. - ResourceManager.instance().setAvailableResources(getStartingResources()); - } - - protected AnalysisMock getAnalysisMock() { - try { - Class<?> providerClass = Class.forName(TestConstants.TEST_ANALYSIS_MOCK); - Field instanceField = providerClass.getField("INSTANCE"); - return (AnalysisMock) instanceField.get(null); - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - - /** Creates or retrieves the rule class provider used in this test. */ - protected ConfiguredRuleClassProvider getRuleClassProvider() { - return TestRuleClassProvider.getRuleClassProvider(); - } - - protected PackageFactory getPackageFactory() { - return pkgFactory; - } - - protected Iterable<EnvironmentExtension> getEnvironmentExtensions() { - return ImmutableList.<EnvironmentExtension>of(); - } - - protected ImmutableList<PrecomputedValue.Injected> getPrecomputedValues() { - return ImmutableList.of(); - } - - protected Preprocessor.Factory.Supplier getPreprocessorFactorySupplier() { - return Preprocessor.Factory.Supplier.NullSupplier.INSTANCE; - } - - protected ResourceSet getStartingResources() { - // Effectively disable ResourceManager by default. - return ResourceSet.createWithRamCpuIo(Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE); - } - - protected final BuildConfigurationCollection createConfigurations(String... args) - throws Exception { - optionsParser = OptionsParser.newOptionsParser(Iterables.concat(Arrays.asList( - ExecutionOptions.class, - BuildRequest.BuildRequestOptions.class), - ruleClassProvider.getConfigurationOptions())); - try { - List<String> configurationArgs = new ArrayList<>(); - configurationArgs.add("--experimental_extended_sanity_checks"); - configurationArgs.addAll(getAnalysisMock().getOptionOverrides()); - - optionsParser.parse(configurationArgs); - optionsParser.parse(args); - - configurationFactory.forbidSanityCheck(); - BuildOptions buildOptions = ruleClassProvider.createBuildOptions(optionsParser); - ensureTargetsVisited(buildOptions.getAllLabels().values()); - skyframeExecutor.invalidateConfigurationCollection(); - return skyframeExecutor.createConfigurations(reporter, configurationFactory, buildOptions, - directories, ImmutableSet.<String>of(), false); - } catch (InvalidConfigurationException | OptionsParsingException e) { - throw new IllegalArgumentException(e); - } - } - - protected Target getTarget(String label) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return getTarget(Label.parseAbsolute(label)); - } - - protected Target getTarget(Label label) - throws NoSuchPackageException, NoSuchTargetException, InterruptedException { - return getPackageManager().getTarget(reporter, label); - } - - private void setUpSkyframe() { - PathPackageLocator pkgLocator = PathPackageLocator.create( - null, packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory); - skyframeExecutor.preparePackageLoading(pkgLocator, - packageCacheOptions.defaultVisibility, true, - 7, ruleClassProvider.getDefaultsPackageContent(optionsParser), - UUID.randomUUID()); - skyframeExecutor.setDeletedPackages(ImmutableSet.copyOf(packageCacheOptions.deletedPackages)); - } - - protected void setPackageCacheOptions(String... options) throws Exception { - packageCacheOptions = parsePackageCacheOptions(options); - setUpSkyframe(); - } - - private PackageCacheOptions parsePackageCacheOptions(String... options) throws Exception { - OptionsParser parser = OptionsParser.newOptionsParser(PackageCacheOptions.class); - parser.parse("--default_visibility=public"); - parser.parse(options); - return parser.getOptions(PackageCacheOptions.class); - } - - /** Used by skyframe-only tests. */ - protected SequencedSkyframeExecutor getSkyframeExecutor() { - return Preconditions.checkNotNull(skyframeExecutor); - } - - protected PackageManager getPackageManager() { - return skyframeExecutor.getPackageManager(); - } - - /** - * Invalidates all existing packages. - * @throws InterruptedException - */ - protected void invalidatePackages() throws InterruptedException { - skyframeExecutor.invalidateFilesUnderPathForTesting(reporter, - ModifiedFileSet.EVERYTHING_MODIFIED, rootDirectory); - } - - /** - * Sets host and target configuration using the specified options, falling back to the default - * options for unspecified ones, and recreates the build view. - * - * @throws IllegalArgumentException - */ - protected final void useConfiguration(String... args) throws Exception { - masterConfig = createConfigurations(args); - targetConfig = getTargetConfiguration(); - createBuildView(); - } - - /** - * Creates BuildView using current hostConfig/targetConfig values. - * Ensures that hostConfig is either identical to the targetConfig or has - * 'host' short name. - */ - protected final void createBuildView() throws Exception { - Preconditions.checkNotNull(masterConfig); - Preconditions.checkState(getHostConfiguration() == getTargetConfiguration() - || getHostConfiguration().isHostConfiguration(), - "Host configuration %s is not a host configuration' " - + "and does not match target configuration %s", - getHostConfiguration(), getTargetConfiguration()); - - String defaultsPackageContent = ruleClassProvider.getDefaultsPackageContent(optionsParser); - skyframeExecutor.setupDefaultPackage(defaultsPackageContent); - skyframeExecutor.dropConfiguredTargets(); - - view = new BuildView(directories, ruleClassProvider, skyframeExecutor, null); - view.setConfigurationsForTesting(masterConfig); - - view.setArtifactRoots( - ImmutableMap.of(PackageIdentifier.createInDefaultRepo(""), rootDirectory), masterConfig); - simulateLoadingPhase(); - } - - protected CachingAnalysisEnvironment getTestAnalysisEnvironment() { - return new CachingAnalysisEnvironment(view.getArtifactFactory(), - ArtifactOwner.NULL_OWNER, /*isSystemEnv=*/true, /*extendedSanityChecks*/false, reporter, - /*skyframeEnv=*/ null, /*actionsEnabled=*/true, binTools); - } - - /** - * Allows access to the prerequisites of a configured target. This is currently used in some tests - * to reach into the internals of RuleCT for white box testing. In principle, this should not be - * used; instead tests should only assert on properties of the exposed provider instances and / or - * the action graph. - */ - protected Iterable<ConfiguredTarget> getDirectPrerequisites(ConfiguredTarget target) - throws InterruptedException { - return view.getDirectPrerequisitesForTesting(reporter, target, masterConfig); - } - - /** - * Asserts that a target's prerequisites contain the given dependency. - */ - // TODO(bazel-team): replace this method with assertThat(iterable).contains(target). - // That doesn't work now because dynamic configurations aren't yet applied to top-level targets. - // This means that getConfiguredTarget("//go:two") returns a different configuration than - // requesting "//go:two" as a dependency. So the configured targets aren't considered "equal". - // Once we apply dynamic configs to top-level targets this discrepancy will go away. - protected void assertDirectPrerequisitesContain(ConfiguredTarget target, ConfiguredTarget dep) - throws InterruptedException { - Iterable<ConfiguredTarget> prereqs = getDirectPrerequisites(target); - BuildConfiguration depConfig = dep.getConfiguration(); - for (ConfiguredTarget contained : prereqs) { - if (contained.getLabel().equals(dep.getLabel())) { - BuildConfiguration containedConfig = contained.getConfiguration(); - if (containedConfig == null && depConfig == null) { - return; - } else if (containedConfig != null - && depConfig != null - && containedConfig.cloneOptions().equals(depConfig.cloneOptions())) { - return; - } - } - } - fail("Cannot find " + target.toString() + " in " + prereqs.toString()); - } - - /** - * Asserts that two configurations are the same. - * - * <p>Historically this meant they contained the same object reference. But with upcoming dynamic - * configurations that may no longer be true (for example, they may have the same values but not - * the same {@link BuildConfiguration.Fragment}s. So this method abstracts the - * "configuration equivalency" checking into one place, where the implementation logic can evolve - * as needed. - */ - protected void assertConfigurationsEqual(BuildConfiguration config1, BuildConfiguration config2) { - // BuildOptions and crosstool files determine a configuration's content. Within the context - // of these tests only the former actually change. - assertEquals(config1.cloneOptions(), config2.cloneOptions()); - } - - /** - * Creates and returns a rule context that is equivalent to the one that was used to create the - * given configured target. - */ - protected RuleContext getRuleContext(ConfiguredTarget target) throws InterruptedException { - return view.getRuleContextForTesting( - reporter, target, new StubAnalysisEnvironment(), masterConfig); - } - - /** - * Creates and returns a rule context to use for Skylark tests that is equivalent to the one - * that was used to create the given configured target. - */ - protected RuleContext getRuleContextForSkylark(ConfiguredTarget target) - throws InterruptedException { - // TODO(bazel-team): we need this horrible workaround because CachingAnalysisEnvironment - // only works with StoredErrorEventListener despite the fact it accepts the interface - // ErrorEventListener, so it's not possible to create it with reporter. - // See BuildView.getRuleContextForTesting(). - StoredEventHandler eventHandler = new StoredEventHandler() { - @Override - public synchronized void handle(Event e) { - super.handle(e); - reporter.handle(e); - } - }; - return view.getRuleContextForTesting(target, eventHandler, masterConfig, binTools); - } - - /** - * Allows access to the prerequisites of a configured target. This is currently used in some tests - * to reach into the internals of RuleCT for white box testing. In principle, this should not be - * used; instead tests should only assert on properties of the exposed provider instances and / or - * the action graph. - */ - protected List<? extends TransitiveInfoCollection> getPrerequisites(ConfiguredTarget target, - String attributeName) throws InterruptedException { - return getRuleContext(target).getConfiguredTargetMap().get(attributeName); - } - - /** - * Allows access to the prerequisites of a configured target. This is currently used in some tests - * to reach into the internals of RuleCT for white box testing. In principle, this should not be - * used; instead tests should only assert on properties of the exposed provider instances and / or - * the action graph. - */ - protected <C extends TransitiveInfoProvider> Iterable<C> getPrerequisites(ConfiguredTarget target, - String attributeName, Class<C> classType) throws InterruptedException { - return AnalysisUtils.getProviders(getPrerequisites(target, attributeName), classType); - } - - /** - * Allows access to the prerequisites of a configured target. This is currently used in some tests - * to reach into the internals of RuleCT for white box testing. In principle, this should not be - * used; instead tests should only assert on properties of the exposed provider instances and / or - * the action graph. - */ - protected ImmutableList<Artifact> getPrerequisiteArtifacts( - ConfiguredTarget target, String attributeName) throws InterruptedException { - Set<Artifact> result = new LinkedHashSet<>(); - for (FileProvider provider : getPrerequisites(target, attributeName, FileProvider.class)) { - Iterables.addAll(result, provider.getFilesToBuild()); - } - return ImmutableList.copyOf(result); - } - - protected ActionGraph getActionGraph() { - return skyframeExecutor.getActionGraph(reporter); - } - - protected final Action getGeneratingAction(Artifact artifact) { - Preconditions.checkNotNull(artifact); - Action action = mutableActionGraph.getGeneratingAction(artifact); - if (action != null) { - return action; - } - return getActionGraph().getGeneratingAction(artifact); - } - - /** - * Returns the SpawnAction that generates an artifact. - * Implicitly assumes the action is a SpawnAction. - */ - protected final SpawnAction getGeneratingSpawnAction(Artifact artifact) { - return (SpawnAction) getGeneratingAction(artifact); - } - - protected void simulateLoadingPhase() { - try { - ensureTargetsVisited(targetConfig.getAllLabels().values()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - protected ActionsTestUtil actionsTestUtil() { - return new ActionsTestUtil(getActionGraph()); - } - - private Set<Target> getTargets(Iterable<Label> labels) throws InterruptedException, - NoSuchTargetException, NoSuchPackageException{ - Set<Target> targets = Sets.newHashSet(); - for (Label label : labels) { - targets.add(skyframeExecutor.getPackageManager().getTarget(reporter, label)); - } - return targets; - } - - // Get a MutableActionGraph for testing purposes. - protected MutableActionGraph getMutableActionGraph() { - return mutableActionGraph; - } - - protected TransitivePackageLoader makeVisitor() { - setUpSkyframe(); - return skyframeExecutor.pkgLoader(); - } - - /** - * Construct the containing package of the specified labels, and all of its transitive - * dependencies. This must be done prior to configuration, as the latter is intolerant of - * NoSuchTargetExceptions. - */ - protected boolean ensureTargetsVisited(TransitivePackageLoader visitor, - Collection<Label> targets, Collection<Label> labels, boolean keepGoing) - throws InterruptedException, NoSuchTargetException, NoSuchPackageException { - boolean success = visitor.sync(reporter, - ImmutableSet.copyOf(getTargets(targets)), - ImmutableSet.copyOf(labels), - keepGoing, - /*parallelThreads=*/4, - /*maxDepth=*/Integer.MAX_VALUE); - return success; - } - - protected boolean ensureTargetsVisited(Collection<Label> labels) - throws InterruptedException, NoSuchTargetException, NoSuchPackageException { - return ensureTargetsVisited(makeVisitor(), ImmutableSet.<Label>of(), labels, - /*keepGoing=*/false); - } - - protected boolean ensureTargetsVisited(Label label) - throws InterruptedException, NoSuchTargetException, NoSuchPackageException { - return ensureTargetsVisited(ImmutableList.of(label)); - } - - protected boolean ensureTargetsVisited(String... labels) - throws InterruptedException, NoSuchTargetException, NoSuchPackageException, - LabelSyntaxException { - List<Label> actualLabels = new ArrayList<>(); - for (String label : labels) { - actualLabels.add(Label.parseAbsolute(label)); - } - return ensureTargetsVisited(actualLabels); - } - - /** - * Returns the ConfiguredTarget for the specified label, configured for the - * "build" (aka "target") configuration. - */ - protected ConfiguredTarget getConfiguredTarget(String label) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return getConfiguredTarget(label, targetConfig); - } - - /** - * Returns the ConfiguredTarget for the specified label, using the - * given build configuration. - */ - protected ConfiguredTarget getConfiguredTarget(String label, BuildConfiguration config) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return getConfiguredTarget(Label.parseAbsolute(label), config); - } - - /** - * Returns the ConfiguredTarget for the specified label, using the - * given build configuration. - */ - protected ConfiguredTarget getConfiguredTarget(Label label, BuildConfiguration config) - throws NoSuchPackageException, NoSuchTargetException, InterruptedException { - ensureTargetsVisited(label); - return view.getConfiguredTargetForTesting(reporter, label, config); - } - - /** - * Returns the ConfiguredTarget for the specified file label, configured for - * the "build" (aka "target") configuration. - */ - protected FileConfiguredTarget getFileConfiguredTarget(String label) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return (FileConfiguredTarget) getConfiguredTarget(label, targetConfig); - } - - /** - * Returns the ConfiguredTarget for the specified label, configured for - * the "host" configuration. - */ - protected ConfiguredTarget getHostConfiguredTarget(String label) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return getConfiguredTarget(label, getHostConfiguration()); - } - - /** - * Returns the ConfiguredTarget for the specified file label, configured for - * the "host" configuration. - */ - protected FileConfiguredTarget getHostFileConfiguredTarget(String label) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return (FileConfiguredTarget) getHostConfiguredTarget(label); - } - - /** - * Create and return a configured scratch rule. - * - * @param packageName the package name ofthe rule. - * @param ruleName the name of the rule. - * @param lines the text of the rule. - * @return the configured target instance for the created rule. - * @throws IOException - * @throws Exception - */ - protected ConfiguredTarget scratchConfiguredTarget(String packageName, - String ruleName, - String... lines) - throws IOException, Exception { - return scratchConfiguredTarget(packageName, ruleName, targetConfig, lines); - } - - /** - * Create and return a scratch rule. - * - * @param packageName the package name of the rule. - * @param ruleName the name of the rule. - * @param lines the text of the rule. - * @return the rule instance for the created rule. - * @throws IOException - * @throws Exception - */ - protected Rule scratchRule(String packageName, String ruleName, String... lines) - throws Exception { - String buildFilePathString = packageName + "/BUILD"; - scratch.file(buildFilePathString, lines); - skyframeExecutor.invalidateFilesUnderPathForTesting( - reporter, - new ModifiedFileSet.Builder().modify(new PathFragment(buildFilePathString)).build(), - rootDirectory); - return (Rule) getTarget("//" + packageName + ":" + ruleName); - } - - /** - * Create and return a configured scratch rule. - * - * @param packageName the package name of the rule. - * @param ruleName the name of the rule. - * @param config the configuration to use to construct the configured rule. - * @param lines the text of the rule. - * @return the configured target instance for the created rule. - * @throws IOException - * @throws Exception - */ - protected ConfiguredTarget scratchConfiguredTarget(String packageName, - String ruleName, - BuildConfiguration config, - String... lines) - throws IOException, Exception { - Target rule = scratchRule(packageName, ruleName, lines); - if (ensureTargetsVisited(rule.getLabel())) { - return view.getConfiguredTargetForTesting(reporter, rule.getLabel(), config); - } else { - return null; - } - } - - /** - * Check that configuration of the target named 'ruleName' in the - * specified BUILD file fails with an error message ending in - * 'expectedErrorMessage'. - * - * @param packageName the package name of the generated BUILD file - * @param ruleName the rule name for the rule in the generated BUILD file - * @param expectedErrorMessage the expected error message. - * @param lines the text of the rule. - * @return the found error. - */ - protected Event checkError(String packageName, - String ruleName, - String expectedErrorMessage, - String... lines) throws Exception { - eventCollector.clear(); - reporter.removeHandler(failFastHandler); // expect errors - ConfiguredTarget target = scratchConfiguredTarget(packageName, ruleName, lines); - if (target != null) { - assertTrue("Rule '" + "//" + packageName + ":" + ruleName + "' did not contain an error", - view.hasErrors(target)); - } - return assertContainsEvent(expectedErrorMessage); - } - - /** - * Check that configuration of the target named 'ruleName' in the - * specified BUILD file reports a warning message ending in - * 'expectedWarningMessage', and that no errors were reported. - * - * @param packageName the package name of the generated BUILD file - * @param ruleName the rule name for the rule in the generated BUILD file - * @param expectedWarningMessage the expected warning message. - * @param lines the text of the rule. - * @return the found error. - */ - protected Event checkWarning(String packageName, - String ruleName, - String expectedWarningMessage, - String... lines) throws Exception { - eventCollector.clear(); - ConfiguredTarget target = scratchConfiguredTarget(packageName, ruleName, - lines); - assertFalse( - "Rule '" + "//" + packageName + ":" + ruleName + "' did contain an error", - view.hasErrors(target)); - return assertContainsEvent(expectedWarningMessage); - } - - /** - * Given a collection of Artifacts, returns a corresponding set of strings of - * the form "[root] [relpath]", such as "bin x/libx.a". Such strings make - * assertions easier to write. - * - * <p>The returned set preserves the order of the input. - */ - protected Set<String> artifactsToStrings(Iterable<Artifact> artifacts) { - return AnalysisTestUtil.artifactsToStrings(masterConfig, artifacts); - } - - /** - * Asserts that targetName's outputs are exactly expectedOuts. - * - * @param targetName The label of a rule. - * @param expectedOuts The labels of the expected outputs of the rule. - */ - protected void assertOuts(String targetName, String... expectedOuts) throws Exception { - Rule ruleTarget = (Rule) getTarget(targetName); - for (String expectedOut : expectedOuts) { - Target outTarget = getTarget(expectedOut); - if (!(outTarget instanceof OutputFile)) { - fail("Target " + outTarget + " is not an output"); - assertSame(ruleTarget, ((OutputFile) outTarget).getGeneratingRule()); - // This ensures that the output artifact is wired up in the action graph - getConfiguredTarget(expectedOut); - } - } - - Collection<OutputFile> outs = ruleTarget.getOutputFiles(); - assertEquals("Mismatched outputs: " + outs, expectedOuts.length, outs.size()); - } - - /** - * Asserts that there exists a configured target file for the given label. - */ - protected void assertConfiguredTargetExists(String label) throws Exception { - assertNotNull(getFileConfiguredTarget(label)); - } - - /** - * Assert that the first label and the second label are both generated - * by the same command. - */ - protected void assertSameGeneratingAction(String labelA, String labelB) - throws Exception { - assertSame( - "Action for " + labelA + " did not match " + labelB, - getGeneratingActionForLabel(labelA), - getGeneratingActionForLabel(labelB)); - } - - protected Artifact getSourceArtifact(PathFragment rootRelativePath, Root root) { - return view.getArtifactFactory().getSourceArtifact(rootRelativePath, root); - } - - protected Artifact getSourceArtifact(String name) { - return getSourceArtifact(new PathFragment(name), Root.asSourceRoot(rootDirectory)); - } - - /** - * Gets a derived artifact, creating it if necessary. {@code ArtifactOwner} should be a genuine - * {@link LabelAndConfiguration} corresponding to a {@link ConfiguredTarget}. If called from a - * test that does not exercise the analysis phase, the convenience methods {@link - * #getBinArtifactWithNoOwner} or {@link #getGenfilesArtifactWithNoOwner} should be used instead. - */ - protected Artifact getDerivedArtifact(PathFragment rootRelativePath, Root root, - ArtifactOwner owner) { - return view.getArtifactFactory().getDerivedArtifact(rootRelativePath, root, owner); - } - - /** - * Gets a derived Artifact for testing with path of the form - * root/owner.getPackageFragment()/packageRelativePath. - * - * @see #getDerivedArtifact(PathFragment, Root, ArtifactOwner) - */ - private Artifact getPackageRelativeDerivedArtifact(String packageRelativePath, Root root, - ArtifactOwner owner) { - return getDerivedArtifact( - owner.getLabel().getPackageFragment().getRelative(packageRelativePath), - root, owner); - } - - /** - * Gets a derived Artifact for testing in the {@link BuildConfiguration#getBinDirectory()}. This - * method should only be used for tests that do no analysis, and so there is no ConfiguredTarget - * to own this artifact. If the test runs the analysis phase, {@link - * #getBinArtifact(String, ArtifactOwner)} or its convenience methods should be - * used instead. - */ - protected Artifact getBinArtifactWithNoOwner(String rootRelativePath) { - return getDerivedArtifact(new PathFragment(rootRelativePath), targetConfig.getBinDirectory(), - ActionsTestUtil.NULL_ARTIFACT_OWNER); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getBinDirectory()} corresponding to the package of {@code owner}. So - * to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should just - * be "foo.o". - */ - protected Artifact getBinArtifact(String packageRelativePath, String owner) { - return getBinArtifact(packageRelativePath, makeLabelAndConfiguration(owner)); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getBinDirectory()} corresponding to the package of {@code owner}. So - * to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should just - * be "foo.o". - */ - protected Artifact getBinArtifact(String packageRelativePath, ConfiguredTarget owner) { - return getPackageRelativeDerivedArtifact(packageRelativePath, - owner.getConfiguration().getBinDirectory(), new ConfiguredTargetKey(owner)); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getBinDirectory()} corresponding to the package of {@code owner}, - * where the given artifact belongs to the given ConfiguredTarget together with the given Aspect. - * So to specify a file foo/foo.o owned by target //foo:foo with an aspect from FooAspect, - * {@code packageRelativePath} should just be "foo.o", and aspectOfOwner should be - * FooAspect.class. This method is necessary when an Aspect of the target, not the target itself, - * is creating an Artifact. - */ - protected Artifact getBinArtifact(String packageRelativePath, ConfiguredTarget owner, - Class<? extends ConfiguredAspectFactory> creatingAspectFactory) { - return getPackageRelativeDerivedArtifact( - packageRelativePath, - owner.getConfiguration().getBinDirectory(), - (AspectValue.AspectKey) - AspectValue.key( - owner.getLabel(), - owner.getConfiguration(), - new NativeAspectClass(creatingAspectFactory), - AspectParameters.EMPTY) - .argument()); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getBinDirectory()} corresponding to the package of {@code owner}. So - * to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should just - * be "foo.o". - */ - private Artifact getBinArtifact(String packageRelativePath, ArtifactOwner owner) { - return getPackageRelativeDerivedArtifact(packageRelativePath, targetConfig.getBinDirectory(), - owner); - } - - /** - * Gets a derived Artifact for testing in the {@link BuildConfiguration#getGenfilesDirectory()}. - * This method should only be used for tests that do no analysis, and so there is no - * ConfiguredTarget to own this artifact. If the test runs the analysis phase, {@link - * #getGenfilesArtifact(String, ArtifactOwner)} or its convenience methods should be used instead. - */ - protected Artifact getGenfilesArtifactWithNoOwner(String rootRelativePath) { - return getDerivedArtifact(new PathFragment(rootRelativePath), - targetConfig.getGenfilesDirectory(), ActionsTestUtil.NULL_ARTIFACT_OWNER); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getGenfilesDirectory()} corresponding to the package of {@code owner}. - * So to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should - * just be "foo.o". - */ - protected Artifact getGenfilesArtifact(String packageRelativePath, String owner) { - return getGenfilesArtifact(packageRelativePath, makeLabelAndConfiguration(owner)); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getGenfilesDirectory()} corresponding to the package of {@code owner}. - * So to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should - * just be "foo.o". - */ - protected Artifact getGenfilesArtifact(String packageRelativePath, ConfiguredTarget owner) { - return getGenfilesArtifact(packageRelativePath, new ConfiguredTargetKey(owner)); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getGenfilesDirectory()} corresponding to the package of {@code owner}, - * where the given artifact belongs to the given ConfiguredTarget together with the given Aspect. - * So to specify a file foo/foo.o owned by target //foo:foo with an apsect from FooAspect, - * {@code packageRelativePath} should just be "foo.o", and aspectOfOwner should be - * FooAspect.class. This method is necessary when an Apsect of the target, not the target itself, - * is creating an Artifact. - */ - protected Artifact getGenfilesArtifact(String packageRelativePath, ConfiguredTarget owner, - Class<? extends ConfiguredAspectFactory> creatingAspectFactory) { - return getPackageRelativeDerivedArtifact( - packageRelativePath, - owner.getConfiguration().getGenfilesDirectory(), - (AspectValue.AspectKey) - AspectValue.key( - owner.getLabel(), - owner.getConfiguration(), - new NativeAspectClass(creatingAspectFactory), - AspectParameters.EMPTY) - .argument()); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getGenfilesDirectory()} corresponding to the package of {@code owner}. - * So to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should - * just be "foo.o". - */ - private Artifact getGenfilesArtifact(String packageRelativePath, ArtifactOwner owner) { - return getPackageRelativeDerivedArtifact(packageRelativePath, - targetConfig.getGenfilesDirectory(), - owner); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getIncludeDirectory()} corresponding to the package of {@code owner}. - * So to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should - * just be "foo.h". - */ - protected Artifact getIncludeArtifact(String packageRelativePath, String owner) { - return getIncludeArtifact(packageRelativePath, makeLabelAndConfiguration(owner)); - } - - /** - * Gets a derived Artifact for testing in the subdirectory of the {@link - * BuildConfiguration#getIncludeDirectory()} corresponding to the package of {@code owner}. - * So to specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should - * just be "foo.h". - */ - private Artifact getIncludeArtifact(String packageRelativePath, ArtifactOwner owner) { - return getPackageRelativeDerivedArtifact(packageRelativePath, - targetConfig.getIncludeDirectory(), - owner); - } - - /** - * @return a shared artifact at the binary-root relative path {@code rootRelativePath} owned by - * {@code owner}. - * - * @param rootRelativePath the binary-root relative path of the artifact. - * @param owner the artifact's owner. - */ - protected Artifact getSharedArtifact(String rootRelativePath, ConfiguredTarget owner) { - return getDerivedArtifact(new PathFragment(rootRelativePath), targetConfig.getBinDirectory(), - new ConfiguredTargetKey(owner)); - } - - protected Action getGeneratingActionForLabel(String label) throws Exception { - return getGeneratingAction(getFileConfiguredTarget(label).getArtifact()); - } - - protected String fileName(Artifact artifact) { - return artifact.getExecPathString(); - } - - protected String fileName(FileConfiguredTarget target) { - return fileName(target.getArtifact()); - } - - protected String fileName(String name) throws Exception { - return fileName(getFileConfiguredTarget(name)); - } - - protected Path getOutputPath() { - return directories.getOutputPath(); - } - - /** - * Verifies whether the rule checks the 'srcs' attribute validity. - * - * <p>At the call site it expects the {@code packageName} to contain: - * <ol> - * <li>{@code :gvalid} - genrule that outputs a valid file</li> - * <li>{@code :ginvalid} - genrule that outputs an invalid file</li> - * <li>{@code :gmix} - genrule that outputs a mix of valid and invalid - * files</li> - * <li>{@code :valid} - rule of type {@code ruleType} that has a valid - * file, {@code :gvalid} and {@code :gmix} in the srcs</li> - * <li>{@code :invalid} - rule of type {@code ruleType} that has an invalid - * file, {@code :ginvalid} in the srcs</li> - * <li>{@code :mix} - rule of type {@code ruleType} that has a valid and an - * invalid file in the srcs</li> - * </ol> - * - * @param packageName the package where the rules under test are located - * @param ruleType rules under test types - * @param expectedTypes expected file types - */ - protected void assertSrcsValidityForRuleType(String packageName, String ruleType, - String expectedTypes) throws Exception { - reporter.removeHandler(failFastHandler); - String descriptionSingle = ruleType + " srcs file (expected " + expectedTypes + ")"; - String descriptionPlural = ruleType + " srcs files (expected " + expectedTypes + ")"; - String descriptionPluralFile = "(expected " + expectedTypes + ")"; - assertSrcsValidity(ruleType, packageName + ":valid", false, - "need at least one " + descriptionSingle, - "'" + packageName + ":gvalid' does not produce any " + descriptionPlural, - "'" + packageName + ":gmix' does not produce any " + descriptionPlural); - assertSrcsValidity(ruleType, packageName + ":invalid", true, - "file '" + packageName + ":a.foo' is misplaced here " + descriptionPluralFile, - "'" + packageName + ":ginvalid' does not produce any " + descriptionPlural); - assertSrcsValidity(ruleType, packageName + ":mix", true, - "'" + packageName + ":a.foo' does not produce any " + descriptionPlural); - } - - protected void assertSrcsValidity(String ruleType, String targetName, boolean expectedError, - String... expectedMessages) throws Exception{ - ConfiguredTarget target = getConfiguredTarget(targetName); - if (expectedError) { - assertTrue(view.hasErrors(target)); - for (String expectedMessage : expectedMessages) { - String message = "in srcs attribute of " + ruleType + " rule " + targetName + ": " - + expectedMessage; - assertContainsEvent(message); - } - } else { - assertFalse(view.hasErrors(target)); - for (String expectedMessage : expectedMessages) { - String message = "in srcs attribute of " + ruleType + " rule " + target.getLabel() + ": " - + expectedMessage; - assertDoesNotContainEvent(message); - } - } - } - - private static Label makeLabel(String label) { - try { - return Label.parseAbsolute(label); - } catch (LabelSyntaxException e) { - throw new IllegalStateException(e); - } - } - - private ConfiguredTargetKey makeLabelAndConfiguration(String label) { - return new ConfiguredTargetKey(makeLabel(label), targetConfig); - } - - protected static List<String> actionInputsToPaths(Iterable<? extends ActionInput> actionInputs) { - return ImmutableList.copyOf( - Iterables.transform(actionInputs, new Function<ActionInput, String>() { - @Override - public String apply(ActionInput actionInput) { - return actionInput.getExecPathString(); - } - })); - } - - protected String readContentAsLatin1String(Artifact artifact) throws IOException { - return new String(FileSystemUtils.readContentAsLatin1(artifact.getPath())); - } - - /** - * Asserts that the predecessor closure of the given Artifact contains the same elements as those - * in expectedPredecessors, plus the given common predecessors. Only looks at predecessors of - * the given file type. - */ - public void assertPredecessorClosureSameContents( - Artifact artifact, FileType fType, Iterable<String> common, String... expectedPredecessors) { - assertSameContentsWithCommonElements( - actionsTestUtil().predecessorClosureAsCollection(artifact, fType), - expectedPredecessors, common); - } - - /** - * Utility method for asserting that the contents of one collection are the - * same as those in a second plus some set of common elements. - */ - protected void assertSameContentsWithCommonElements(Iterable<Artifact> artifacts, - Iterable<String> common, String... expectedInputs) { - assertThat(Iterables.concat(Lists.newArrayList(expectedInputs), common)) - .containsExactlyElementsIn(ActionsTestUtil.prettyArtifactNames(artifacts)); - } - - /** - * Utility method for asserting that the contents of one collection are the - * same as those in a second plus some set of common elements. - */ - protected void assertSameContentsWithCommonElements(Iterable<String> artifacts, - String[] expectedInputs, Iterable<String> common) { - assertThat(Iterables.concat(Lists.newArrayList(expectedInputs), common)) - .containsExactlyElementsIn(artifacts); - } - - /** - * Utility method for asserting that a list contains the elements of a - * sublist. This is useful for checking that a list of arguments contains a - * particular set of arguments. - */ - protected void assertContainsSublist(List<String> list, List<String> sublist) { - assertContainsSublist(null, list, sublist); - } - - /** - * Utility method for asserting that a list contains the elements of a - * sublist. This is useful for checking that a list of arguments contains a - * particular set of arguments. - */ - protected void assertContainsSublist(String message, List<String> list, List<String> sublist) { - if (Collections.indexOfSubList(list, sublist) == -1) { - fail((message == null ? "" : (message + ' ')) - + "expected: <" + list + "> to contain sublist: <" + sublist + ">"); - } - } - - protected void assertContainsSelfEdgeEvent(String label) { - assertContainsEvent(label + " [self-edge]"); - } - - protected Iterable<Artifact> collectRunfiles(ConfiguredTarget target) { - RunfilesProvider runfilesProvider = target.getProvider(RunfilesProvider.class); - if (runfilesProvider != null) { - return runfilesProvider.getDefaultRunfiles().getAllArtifacts(); - } else { - return Runfiles.EMPTY.getAllArtifacts(); - } - } - - protected NestedSet<Artifact> getFilesToBuild(TransitiveInfoCollection target) { - return target.getProvider(FileProvider.class).getFilesToBuild(); - } - - /** - * Returns all extra actions for that target (no transitive actions), no duplicate actions. - */ - protected ImmutableList<Action> getExtraActionActions(ConfiguredTarget target) { - LinkedHashSet<Action> result = new LinkedHashSet<>(); - for (Artifact artifact : getExtraActionArtifacts(target)) { - result.add(getGeneratingAction(artifact)); - } - return ImmutableList.copyOf(result); - } - - /** - * Returns all extra actions for that target (including transitive actions). - */ - protected ImmutableList<ExtraAction> getTransitiveExtraActionActions(ConfiguredTarget target) { - ImmutableList.Builder<ExtraAction> result = new ImmutableList.Builder<>(); - for (ExtraArtifactSet set : target.getProvider(ExtraActionArtifactsProvider.class) - .getTransitiveExtraActionArtifacts()) { - for (Artifact artifact : set.getArtifacts()) { - Action action = getGeneratingAction(artifact); - if (action instanceof ExtraAction) { - result.add((ExtraAction) action); - } - } - } - return result.build(); - } - - protected ImmutableList<Action> getFilesToBuildActions(ConfiguredTarget target) { - List<Action> result = new ArrayList<>(); - for (Artifact artifact : getFilesToBuild(target)) { - Action action = getGeneratingAction(artifact); - if (action != null) { - result.add(action); - } - } - return ImmutableList.copyOf(result); - } - - protected NestedSet<Artifact> getOutputGroup( - TransitiveInfoCollection target, String outputGroup) { - OutputGroupProvider provider = target.getProvider(OutputGroupProvider.class); - return provider == null - ? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER) - : provider.getOutputGroup(outputGroup); - } - - protected NestedSet<Artifact> getExtraActionArtifacts(ConfiguredTarget target) { - return target.getProvider(ExtraActionArtifactsProvider.class).getExtraActionArtifacts(); - } - - protected Artifact getExecutable(String label) throws Exception { - return getConfiguredTarget(label).getProvider(FilesToRunProvider.class).getExecutable(); - } - - protected Artifact getExecutable(TransitiveInfoCollection target) { - return target.getProvider(FilesToRunProvider.class).getExecutable(); - } - - protected ImmutableList<Artifact> getFilesToRun(TransitiveInfoCollection target) { - return target.getProvider(FilesToRunProvider.class).getFilesToRun(); - } - - protected ImmutableList<Artifact> getFilesToRun(Label label) throws Exception { - return getConfiguredTarget(label, targetConfig) - .getProvider(FilesToRunProvider.class).getFilesToRun(); - } - - protected ImmutableList<Artifact> getFilesToRun(String label) throws Exception { - return getConfiguredTarget(label).getProvider(FilesToRunProvider.class).getFilesToRun(); - } - - protected RunfilesSupport getRunfilesSupport(String label) throws Exception { - return getConfiguredTarget(label).getProvider(FilesToRunProvider.class).getRunfilesSupport(); - } - - protected RunfilesSupport getRunfilesSupport(TransitiveInfoCollection target) { - return target.getProvider(FilesToRunProvider.class).getRunfilesSupport(); - } - - protected static Runfiles getDefaultRunfiles(ConfiguredTarget target) { - return target.getProvider(RunfilesProvider.class).getDefaultRunfiles(); - } - - protected static Runfiles getDataRunfiles(ConfiguredTarget target) { - return target.getProvider(RunfilesProvider.class).getDataRunfiles(); - } - - protected BuildConfiguration getTargetConfiguration() { - return Iterables.getOnlyElement(masterConfig.getTargetConfigurations()); - } - - protected BuildConfiguration getDataConfiguration() { - BuildConfiguration targetConfig = getTargetConfiguration(); - // TODO(bazel-team): do a proper data transition for dynamic configurations. - return targetConfig.useDynamicConfigurations() - ? targetConfig - : targetConfig.getConfiguration(ConfigurationTransition.DATA); - } - - protected BuildConfiguration getHostConfiguration() { - return masterConfig.getHostConfiguration(); - } - - /** - * Returns an attribute value retriever for the given rule for the target configuration. - - */ - protected AttributeMap attributes(RuleConfiguredTarget ct) { - return ConfiguredAttributeMapper.of(ct); - } - - protected AttributeMap attributes(ConfiguredTarget rule) { - return attributes((RuleConfiguredTarget) rule); - } - - protected AnalysisResult update(List<String> targets, - boolean keepGoing, - int loadingPhaseThreads, - boolean doAnalysis, - EventBus eventBus) throws Exception { - return update( - targets, ImmutableList.<String>of(), keepGoing, loadingPhaseThreads, doAnalysis, eventBus); - } - - protected AnalysisResult update( - List<String> targets, - List<String> aspects, - boolean keepGoing, - int loadingPhaseThreads, - boolean doAnalysis, - EventBus eventBus) - throws Exception { - - LoadingOptions loadingOptions = Options.getDefaults(LoadingOptions.class); - loadingOptions.loadingPhaseThreads = loadingPhaseThreads; - - BuildView.Options viewOptions = Options.getDefaults(BuildView.Options.class); - viewOptions.keepGoing = keepGoing; - - LoadingPhaseRunner runner = new LegacyLoadingPhaseRunner(getPackageManager(), - Collections.unmodifiableSet(ruleClassProvider.getRuleClassMap().keySet())); - LoadingResult loadingResult = runner.execute(reporter, eventBus, targets, loadingOptions, - getTargetConfiguration().getAllLabels(), viewOptions.keepGoing, - isLoadingEnabled(), /*determineTests=*/false, /*callback=*/null); - if (!doAnalysis) { - // TODO(bazel-team): What's supposed to happen in this case? - return null; - } - return view.update( - loadingResult, - masterConfig, - aspects, - viewOptions, - AnalysisTestUtil.TOP_LEVEL_ARTIFACT_CONTEXT, - reporter, - eventBus, - isLoadingEnabled()); - } - - protected static Predicate<Artifact> artifactNamed(final String name) { - return new Predicate<Artifact>() { - @Override - public boolean apply(Artifact input) { - return name.equals(input.prettyPrint()); - } - }; - } - - /** - * Utility method for tests. Converts an array of strings into a set of labels. - * - * @param strings the set of strings to be converted to labels. - * @throws LabelSyntaxException if there are any syntax errors in the strings. - */ - public static Set<Label> asLabelSet(String... strings) throws LabelSyntaxException { - return asLabelSet(ImmutableList.copyOf(strings)); - } - - /** - * Utility method for tests. Converts an array of strings into a set of labels. - * - * @param strings the set of strings to be converted to labels. - * @throws LabelSyntaxException if there are any syntax errors in the strings. - */ - public static Set<Label> asLabelSet(Iterable<String> strings) throws LabelSyntaxException { - Set<Label> result = Sets.newTreeSet(); - for (String s : strings) { - result.add(Label.parseAbsolute(s)); - } - return result; - } - - protected SpawnAction getGeneratingAction(ConfiguredTarget target, String outputName) { - return getGeneratingSpawnAction( - Iterables.find(getFilesToBuild(target), artifactNamed(outputName))); - } - - protected String getErrorMsgSingleFile(String attrName, String ruleType, String ruleName, - String depRuleName) { - return "in " + attrName + " attribute of " + ruleType + " rule " + ruleName + ": '" - + depRuleName + "' must produce a single file"; - } - - protected String getErrorMsgNoGoodFiles(String attrName, String ruleType, String ruleName, - String depRuleName) { - return "in " + attrName + " attribute of " + ruleType + " rule " + ruleName + ": '" - + depRuleName + "' does not produce any " + ruleType + " " + attrName + " files"; - } - - protected String getErrorMsgMisplacedFiles(String attrName, String ruleType, String ruleName, - String fileName) { - return "in " + attrName + " attribute of " + ruleType + " rule " + ruleName + ": file '" - + fileName + "' is misplaced here"; - } - - protected String getErrorNonExistingTarget(String attrName, String ruleType, String ruleName, - String targetName) { - return "in " + attrName + " attribute of " + ruleType + " rule " + ruleName + ": target '" - + targetName + "' does not exist"; - } - - protected String getErrorNonExistingRule(String attrName, String ruleType, String ruleName, - String targetName) { - return "in " + attrName + " attribute of " + ruleType + " rule " + ruleName + ": rule '" - + targetName + "' does not exist"; - } - - protected String getErrorMsgMisplacedRules(String attrName, String ruleType, String ruleName, - String depRuleType, String depRuleName) { - return "in " + attrName + " attribute of " + ruleType + " rule " + ruleName + ": " - + depRuleType + " rule '" + depRuleName + "' is misplaced here"; - } - - protected String getErrorMsgNonEmptyList(String attrName, String ruleType, String ruleName) { - return "non empty attribute '" + attrName + "' in '" + ruleType - + "' rule '" + ruleName + "' has to have at least one value"; - } - - protected String getErrorMsgMandatoryMissing(String attrName, String ruleType) { - return "missing value for mandatory attribute '" + attrName + "' in '" + ruleType + "' rule"; - } - - protected String getErrorMsgWrongAttributeValue(String value, String... expected) { - return String.format("has to be one of %s instead of '%s'", - StringUtil.joinEnglishList(ImmutableSet.copyOf(expected), "or", "'"), value); - } - - protected String getErrorMsgMandatoryProviderMissing(String offendingRule, String providerName) { - return String.format("'%s' does not have mandatory provider '%s'", offendingRule, providerName); - } - - /** - * Utility method for tests that result in errors early during - * package loading. Given the name of the package for the test, - * and the rules for the build file, create a scratch file, load - * the build file, and produce the package. - * @param packageName the name of the package for the build file - * @param lines the rules for the build file as an array of strings - * @return the loaded package from the populated package cache - * @throws Exception if there is an error creating the temporary files - * for the test. - */ - protected com.google.devtools.build.lib.packages.Package createScratchPackageForImplicitCycle( - String packageName, String... lines) throws Exception { - eventCollector.clear(); - reporter.removeHandler(failFastHandler); - scratch.file("" + packageName + "/BUILD", lines); - return getPackageManager() - .getPackage(reporter, PackageIdentifier.createInDefaultRepo(packageName)); - } - - /** - * A stub analysis environment. - */ - protected class StubAnalysisEnvironment implements AnalysisEnvironment { - - @Override - public void registerAction(Action... action) { - throw new UnsupportedOperationException(); - } - - @Override - public boolean hasErrors() { - return false; - } - - @Override - public Artifact getEmbeddedToolArtifact(String embeddedPath) { - throw new UnsupportedOperationException(); - } - - @Override - public Artifact getConstantMetadataArtifact(PathFragment rootRelativePath, Root root) { - throw new UnsupportedOperationException(); - } - - @Override - public EventHandler getEventHandler() { - return reporter; - } - - @Override - public MiddlemanFactory getMiddlemanFactory() { - throw new UnsupportedOperationException(); - } - - @Override - public Action getLocalGeneratingAction(Artifact artifact) { - throw new UnsupportedOperationException(); - } - - @Override - public Iterable<Action> getRegisteredActions() { - throw new UnsupportedOperationException(); - } - - @Override - public SkyFunction.Environment getSkyframeEnv() { - throw new UnsupportedOperationException(); - } - - @Override - public Artifact getFilesetArtifact(PathFragment rootRelativePath, Root root) { - throw new UnsupportedOperationException(); - } - - @Override - public Artifact getDerivedArtifact(PathFragment rootRelativePath, Root root) { - throw new UnsupportedOperationException(); - } - - @Override - public Artifact getStableWorkspaceStatusArtifact() { - throw new UnsupportedOperationException(); - } - - @Override - public Artifact getVolatileWorkspaceStatusArtifact() { - throw new UnsupportedOperationException(); - } - - @Override - public ImmutableList<Artifact> getBuildInfo(RuleContext ruleContext, BuildInfoKey key) { - throw new UnsupportedOperationException(); - } - - @Override - public ArtifactOwner getOwner() { - throw new UnsupportedOperationException(); - } - - @Override - public ImmutableSet<Artifact> getOrphanArtifacts() { - throw new UnsupportedOperationException(); - } - } - - protected Iterable<String> baselineCoverageArtifactBasenames(ConfiguredTarget target) - throws Exception { - ImmutableList.Builder<String> basenames = ImmutableList.builder(); - for (Artifact baselineCoverage : target - .getProvider(InstrumentedFilesProvider.class) - .getBaselineCoverageArtifacts()) { - BaselineCoverageAction baselineAction = - (BaselineCoverageAction) getGeneratingAction(baselineCoverage); - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - baselineAction.newDeterministicWriter(null, null).writeOutputFile(bytes); - - for (String line : new String(bytes.toByteArray(), StandardCharsets.UTF_8).split("\n")) { - if (line.startsWith("SF:")) { - String basename = line.substring(line.lastIndexOf('/') + 1); - basenames.add(basename); - } - } - } - return basenames.build(); - } - - /** - * Finds an artifact in the transitive closure of a set of other artifacts by following a path - * based on artifact name suffixes. - * - * <p>This selects the first artifact in the input set that matches the first suffix, then selects - * the first artifact in the inputs of its generating action that matches the second suffix etc., - * and repeats this until the supplied suffixes run out. - */ - protected Artifact artifactByPath(Iterable<Artifact> artifacts, String... suffixes) { - Artifact artifact = getFirstArtifactEndingWith(artifacts, suffixes[0]); - Action action = null; - for (int i = 1; i < suffixes.length; i++) { - if (artifact == null) { - if (action == null) { - throw new IllegalStateException("No suffix " + suffixes[0] + " among artifacts: " - + ActionsTestUtil.baseArtifactNames(artifacts)); - } else { - throw new IllegalStateException("No suffix " + suffixes[i] - + " among inputs of action " + action.describe() + ": " - + ActionsTestUtil.baseArtifactNames(artifacts)); - } - } - - action = getGeneratingAction(artifact); - artifacts = action.getInputs(); - artifact = getFirstArtifactEndingWith(artifacts, suffixes[i]); - } - - return artifact; - } - - /** - * Retrieves an instance of {@code PseudoAction} that is shadowed by an extra action - * @param targetLabel Label of the target with an extra action - * @param actionListenerLabel Label of the action listener - */ - protected PseudoAction<?> getPseudoActionViaExtraAction( - String targetLabel, String actionListenerLabel) throws Exception { - useConfiguration(String.format("--experimental_action_listener=%s", actionListenerLabel)); - - ConfiguredTarget target = getConfiguredTarget(targetLabel); - List<Action> actions = getExtraActionActions(target); - - assertNotNull(actions); - assertThat(actions).hasSize(2); - - ExtraAction extraAction = null; - - for (Action action : actions) { - if (action instanceof ExtraAction) { - extraAction = (ExtraAction) action; - break; - } - } - - assertNotNull(actions.toString(), extraAction); - - Action pseudoAction = extraAction.getShadowedAction(); - - assertThat(pseudoAction).isInstanceOf(PseudoAction.class); - assertEquals( - String.format("%s%s.extra_action_dummy", targetConfig.getGenfilesFragment(), - convertLabelToPath(targetLabel)), - pseudoAction.getPrimaryOutput().getExecPathString()); - - return (PseudoAction<?>) pseudoAction; - } - - /** - * Converts the given label to an output path where double slashes and colons are - * replaced with single slashes - * @param label - */ - private String convertLabelToPath(String label) { - return label.replace(':', '/').substring(1); - } - - protected Map<String, String> getSymlinkTreeManifest(Artifact outputManifest) throws Exception { - SymlinkTreeAction symlinkTreeAction = (SymlinkTreeAction) getGeneratingAction(outputManifest); - Artifact inputManifest = Iterables.getOnlyElement(symlinkTreeAction.getInputs()); - SourceManifestAction inputManifestAction = - (SourceManifestAction) getGeneratingAction(inputManifest); - // Ask the manifest to write itself to a byte array so that we can - // read its contents. - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - inputManifestAction.writeOutputFile(stream, reporter); - String contents = stream.toString(); - - // Get the file names from the manifest output. - ImmutableMap.Builder<String, String> result = ImmutableMap.builder(); - for (String line : Splitter.on('\n').split(contents)) { - int space = line.indexOf(' '); - if (space < 0) { - continue; - } - result.put(line.substring(0, space), line.substring(space + 1)); - } - - return result.build(); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/CompileOnlyTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/CompileOnlyTestCase.java index b8aa0ab22c..583d33adc5 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/CompileOnlyTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/CompileOnlyTestCase.java @@ -20,7 +20,7 @@ import com.google.devtools.build.lib.analysis.OutputGroupProvider; /** * Common code for unit tests that validate --compile_only behavior. */ -public abstract class CompileOnlyTestCase extends BuildViewTestCaseForJunit4 { +public abstract class CompileOnlyTestCase extends BuildViewTestCase { protected Artifact getArtifactByExecPathSuffix(ConfiguredTarget target, String path) { for (Artifact artifact : getOutputGroup(target, OutputGroupProvider.FILES_TO_COMPILE)) { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java index 4bf1af43d4..b4a5a37116 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java @@ -40,7 +40,7 @@ import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; import com.google.devtools.build.lib.skyframe.SkyframeExecutor; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.util.BlazeClock; @@ -68,7 +68,7 @@ import java.util.UUID; * Testing framework for tests which check ConfigurationFactory. */ @RunWith(JUnit4.class) -public abstract class ConfigurationTestCase extends FoundationTestCaseForJunit4 { +public abstract class ConfigurationTestCase extends FoundationTestCase { public static final class TestOptions extends OptionsBase { @Option(name = "multi_cpu", diff --git a/src/test/java/com/google/devtools/build/lib/exec/MiddlemanActionTest.java b/src/test/java/com/google/devtools/build/lib/exec/MiddlemanActionTest.java index 5eeba82dfa..a0eca8b55b 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/MiddlemanActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/exec/MiddlemanActionTest.java @@ -25,7 +25,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MiddlemanAction; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.testutil.Suite; import com.google.devtools.build.lib.testutil.TestSpec; @@ -42,7 +42,7 @@ import java.util.Arrays; */ @TestSpec(size = Suite.SMALL_TESTS) @RunWith(JUnit4.class) -public class MiddlemanActionTest extends BuildViewTestCaseForJunit4 { +public class MiddlemanActionTest extends BuildViewTestCase { private AnalysisTestUtil.CollectingAnalysisEnvironment analysisEnvironment; private MiddlemanFactory middlemanFactory; diff --git a/src/test/java/com/google/devtools/build/lib/exec/ParameterFileTest.java b/src/test/java/com/google/devtools/build/lib/exec/ParameterFileTest.java index 931d876542..491cf097ac 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/ParameterFileTest.java +++ b/src/test/java/com/google/devtools/build/lib/exec/ParameterFileTest.java @@ -16,7 +16,7 @@ package com.google.devtools.build.lib.exec; import static org.junit.Assert.assertEquals; import com.google.devtools.build.lib.actions.ParameterFile; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.Suite; import com.google.devtools.build.lib.testutil.TestSpec; import com.google.devtools.build.lib.vfs.PathFragment; @@ -30,7 +30,7 @@ import org.junit.runners.JUnit4; */ @TestSpec(size = Suite.SMALL_TESTS) @RunWith(JUnit4.class) -public class ParameterFileTest extends FoundationTestCaseForJunit4 { +public class ParameterFileTest extends FoundationTestCase { @Test public void testDerive() { diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java index becd17e315..6c3213491b 100644 --- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java +++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java @@ -30,7 +30,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.OutputGroupProvider; import com.google.devtools.build.lib.analysis.actions.BinaryFileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.ArtifactLocation; import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.LibraryArtifact; @@ -46,7 +46,7 @@ import javax.annotation.Nullable; /** * Provides utils for AndroidStudioInfoAspectTest. */ -abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCaseForJunit4 { +abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase { protected static final Function<ArtifactLocation, String> ARTIFACT_TO_RELATIVE_PATH = new Function<ArtifactLocation, String>() { diff --git a/src/test/java/com/google/devtools/build/lib/packages/EnvironmentGroupTest.java b/src/test/java/com/google/devtools/build/lib/packages/EnvironmentGroupTest.java index 69ad403fb6..7b8cbe8855 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/EnvironmentGroupTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/EnvironmentGroupTest.java @@ -21,7 +21,7 @@ import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.vfs.Path; @@ -35,7 +35,7 @@ import org.junit.runners.JUnit4; * {@link PackageFactoryTest}. */ @RunWith(JUnit4.class) -public class EnvironmentGroupTest extends PackageLoadingTestCaseForJunit4 { +public class EnvironmentGroupTest extends PackageLoadingTestCase { private Package pkg; private EnvironmentGroup group; diff --git a/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java b/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java index 9f79ccebaa..999da0b5ba 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Package.Builder; import com.google.devtools.build.lib.syntax.Argument; @@ -37,7 +37,7 @@ import java.util.Map; * Test for building external packages. */ @RunWith(JUnit4.class) -public class ExternalPackageTest extends BuildViewTestCaseForJunit4 { +public class ExternalPackageTest extends BuildViewTestCase { private Path workspacePath; diff --git a/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java b/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java index 4fd2245418..d32a5a1c77 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.vfs.Path; @@ -28,7 +28,7 @@ import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) -public class OutputFileTest extends PackageLoadingTestCaseForJunit4 { +public class OutputFileTest extends PackageLoadingTestCase { private PackageFactory packageFactory; private Package pkg; diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java index 979f13cc71..e906b9572e 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java @@ -25,7 +25,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,7 +35,7 @@ import org.junit.runners.JUnit4; * Tests for the {@link RuleClass.Builder}. */ @RunWith(JUnit4.class) -public class RuleClassBuilderTest extends PackageLoadingTestCaseForJunit4 { +public class RuleClassBuilderTest extends PackageLoadingTestCase { private static final RuleClass.ConfiguredTargetFactory<Object, Object> DUMMY_CONFIGURED_TARGET_FACTORY = new RuleClass.ConfiguredTargetFactory<Object, Object>() { diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java index ca7b863829..4246cddbb9 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java @@ -51,7 +51,7 @@ import com.google.devtools.build.lib.packages.Attribute.ValidityPredicate; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; import com.google.devtools.build.lib.packages.Package.Builder; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.vfs.Path; @@ -75,7 +75,7 @@ import java.util.Set; * Tests for {@link RuleClass}. */ @RunWith(JUnit4.class) -public class RuleClassTest extends PackageLoadingTestCaseForJunit4 { +public class RuleClassTest extends PackageLoadingTestCase { private static final RuleClass.ConfiguredTargetFactory<Object, Object> DUMMY_CONFIGURED_TARGET_FACTORY = new RuleClass.ConfiguredTargetFactory<Object, Object>() { @Override diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java index bca3b28777..4c25cbefeb 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java @@ -27,7 +27,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.events.Reporter; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.vfs.Path; @@ -40,7 +40,7 @@ import java.util.HashMap; import java.util.Map; @RunWith(JUnit4.class) -public class RuleFactoryTest extends PackageLoadingTestCaseForJunit4 { +public class RuleFactoryTest extends PackageLoadingTestCase { private ConfiguredRuleClassProvider provider = TestRuleClassProvider.getRuleClassProvider(); private RuleFactory ruleFactory = new RuleFactory(provider); diff --git a/src/test/java/com/google/devtools/build/lib/packages/SubincludePreprocessorTest.java b/src/test/java/com/google/devtools/build/lib/packages/SubincludePreprocessorTest.java index 23f4e7c04c..5fc46214f7 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/SubincludePreprocessorTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/SubincludePreprocessorTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.devtools.build.lib.events.Event; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.packages.util.SubincludePreprocessor; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.Mutability; @@ -41,7 +41,7 @@ import java.nio.charset.StandardCharsets; @TestSpec(size = Suite.MEDIUM_TESTS) @RunWith(JUnit4.class) -public class SubincludePreprocessorTest extends PackageLoadingTestCaseForJunit4 { +public class SubincludePreprocessorTest extends PackageLoadingTestCase { private Path packageRoot; protected SubincludePreprocessor preprocessor; protected Environment globalEnv = diff --git a/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java b/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java index 0eeba64ce9..aedc014935 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/TestTargetUtilsTest.java @@ -29,7 +29,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.ResolvedTargets; import com.google.devtools.build.lib.cmdline.TargetParsingException; import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.pkgcache.TargetProvider; import com.google.devtools.build.lib.skyframe.TestSuiteExpansionValue; import com.google.devtools.build.skyframe.EvaluationResult; @@ -44,7 +44,7 @@ import java.util.Collection; import java.util.EnumSet; @RunWith(JUnit4.class) -public class TestTargetUtilsTest extends PackageLoadingTestCaseForJunit4 { +public class TestTargetUtilsTest extends PackageLoadingTestCase { private Target test1; private Target test2; private Target test1b; diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java index 6621537ee0..17138fae9d 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension; import com.google.devtools.build.lib.packages.Preprocessor; import com.google.devtools.build.lib.packages.Rule; +import com.google.devtools.build.lib.packages.RuleVisibility; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; import com.google.devtools.build.lib.pkgcache.PackageManager; @@ -50,6 +51,8 @@ import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.common.options.OptionsParser; +import org.junit.Before; + import java.io.IOException; import java.util.Arrays; import java.util.HashSet; @@ -62,17 +65,27 @@ import java.util.UUID; */ public abstract class PackageLoadingTestCase extends FoundationTestCase { + private static final int GLOBBING_THREADS = 7; + protected ConfiguredRuleClassProvider ruleClassProvider; private SkyframeExecutor skyframeExecutor; - @Override - protected void setUp() throws Exception { - super.setUp(); - + @Before + public final void initializeSkyframeExecutor() throws Exception { ruleClassProvider = TestRuleClassProvider.getRuleClassProvider(); - skyframeExecutor = + skyframeExecutor = createSkyframeExecutor(getEnvironmentExtensions(), + Preprocessor.Factory.Supplier.NullSupplier.INSTANCE, ConstantRuleVisibility.PUBLIC, ""); + setUpSkyframe(parsePackageCacheOptions()); + } + + protected SkyframeExecutor createSkyframeExecutor( + Iterable<EnvironmentExtension> environmentExtensions, + Preprocessor.Factory.Supplier preprocessorFactorySupplier, + RuleVisibility defaultVisibility, + String defaultsPackageContents) { + SkyframeExecutor skyframeExecutor = SequencedSkyframeExecutor.create( - new PackageFactory(ruleClassProvider, getEnvironmentExtensions()), + new PackageFactory(ruleClassProvider, environmentExtensions), new TimestampGranularityMonitor(BlazeClock.instance()), new BlazeDirectories(outputBase, outputBase, rootDirectory), null, /* BinTools */ @@ -81,15 +94,15 @@ public abstract class PackageLoadingTestCase extends FoundationTestCase { ImmutableSet.<Path>of(), ImmutableList.<DiffAwareness.Factory>of(), Predicates.<PathFragment>alwaysFalse(), - Preprocessor.Factory.Supplier.NullSupplier.INSTANCE, + preprocessorFactorySupplier, ImmutableMap.<SkyFunctionName, SkyFunction>of(), ImmutableList.<PrecomputedValue.Injected>of(), ImmutableList.<SkyValueDirtinessChecker>of()); skyframeExecutor.preparePackageLoading( new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)), - ConstantRuleVisibility.PUBLIC, true, 7, "", + defaultVisibility, true, GLOBBING_THREADS, defaultsPackageContents, UUID.randomUUID()); - setUpSkyframe(parsePackageCacheOptions()); + return skyframeExecutor; } protected Iterable<EnvironmentExtension> getEnvironmentExtensions() { diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCaseForJunit4.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCaseForJunit4.java deleted file mode 100644 index 172a572610..0000000000 --- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCaseForJunit4.java +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright 2015 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.packages.util; - -import com.google.common.base.Predicates; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; -import com.google.devtools.build.lib.analysis.BlazeDirectories; -import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.LabelSyntaxException; -import com.google.devtools.build.lib.packages.ConstantRuleVisibility; -import com.google.devtools.build.lib.packages.NoSuchPackageException; -import com.google.devtools.build.lib.packages.NoSuchTargetException; -import com.google.devtools.build.lib.packages.NoSuchThingException; -import com.google.devtools.build.lib.packages.PackageFactory; -import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension; -import com.google.devtools.build.lib.packages.Preprocessor; -import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.RuleVisibility; -import com.google.devtools.build.lib.packages.Target; -import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; -import com.google.devtools.build.lib.pkgcache.PackageManager; -import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.skyframe.DiffAwareness; -import com.google.devtools.build.lib.skyframe.PrecomputedValue; -import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; -import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; -import com.google.devtools.build.lib.skyframe.SkyframeExecutor; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; -import com.google.devtools.build.lib.testutil.TestRuleClassProvider; -import com.google.devtools.build.lib.util.BlazeClock; -import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; -import com.google.devtools.build.lib.vfs.ModifiedFileSet; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.devtools.build.skyframe.SkyFunction; -import com.google.devtools.build.skyframe.SkyFunctionName; -import com.google.devtools.common.options.OptionsParser; - -import org.junit.Before; - -import java.io.IOException; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -/** - * This is a specialization of {@link FoundationTestCaseForJunit4} that's useful for - * implementing tests of the "packages" library. - */ -public abstract class PackageLoadingTestCaseForJunit4 extends FoundationTestCaseForJunit4 { - - private static final int GLOBBING_THREADS = 7; - - protected ConfiguredRuleClassProvider ruleClassProvider; - private SkyframeExecutor skyframeExecutor; - - @Before - public final void initializeSkyframeExecutor() throws Exception { - ruleClassProvider = TestRuleClassProvider.getRuleClassProvider(); - skyframeExecutor = createSkyframeExecutor(getEnvironmentExtensions(), - Preprocessor.Factory.Supplier.NullSupplier.INSTANCE, ConstantRuleVisibility.PUBLIC, ""); - setUpSkyframe(parsePackageCacheOptions()); - } - - protected SkyframeExecutor createSkyframeExecutor( - Iterable<EnvironmentExtension> environmentExtensions, - Preprocessor.Factory.Supplier preprocessorFactorySupplier, - RuleVisibility defaultVisibility, - String defaultsPackageContents) { - SkyframeExecutor skyframeExecutor = - SequencedSkyframeExecutor.create( - new PackageFactory(ruleClassProvider, environmentExtensions), - new TimestampGranularityMonitor(BlazeClock.instance()), - new BlazeDirectories(outputBase, outputBase, rootDirectory), - null, /* BinTools */ - null, /* workspaceStatusActionFactory */ - ruleClassProvider.getBuildInfoFactories(), - ImmutableSet.<Path>of(), - ImmutableList.<DiffAwareness.Factory>of(), - Predicates.<PathFragment>alwaysFalse(), - preprocessorFactorySupplier, - ImmutableMap.<SkyFunctionName, SkyFunction>of(), - ImmutableList.<PrecomputedValue.Injected>of(), - ImmutableList.<SkyValueDirtinessChecker>of()); - skyframeExecutor.preparePackageLoading( - new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)), - defaultVisibility, true, GLOBBING_THREADS, defaultsPackageContents, - UUID.randomUUID()); - return skyframeExecutor; - } - - protected Iterable<EnvironmentExtension> getEnvironmentExtensions() { - return ImmutableList.<EnvironmentExtension>of(); - } - - private void setUpSkyframe(PackageCacheOptions packageCacheOptions) { - PathPackageLocator pkgLocator = PathPackageLocator.create( - null, packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory); - skyframeExecutor.preparePackageLoading(pkgLocator, - packageCacheOptions.defaultVisibility, true, - 7, ruleClassProvider.getDefaultsPackageContent(), - UUID.randomUUID()); - skyframeExecutor.setDeletedPackages(ImmutableSet.copyOf(packageCacheOptions.deletedPackages)); - } - - private PackageCacheOptions parsePackageCacheOptions(String... options) throws Exception { - OptionsParser parser = OptionsParser.newOptionsParser(PackageCacheOptions.class); - parser.parse(new String[] { "--default_visibility=public" }); - parser.parse(options); - return parser.getOptions(PackageCacheOptions.class); - } - - protected void setPackageCacheOptions(String... options) throws Exception { - setUpSkyframe(parsePackageCacheOptions(options)); - } - - protected Target getTarget(String label) - throws NoSuchPackageException, NoSuchTargetException, - LabelSyntaxException, InterruptedException { - return getTarget(Label.parseAbsolute(label)); - } - - protected Target getTarget(Label label) - throws NoSuchPackageException, NoSuchTargetException, InterruptedException { - return getPackageManager().getTarget(reporter, label); - } - - /** - * Create and return a scratch rule. - * - * @param packageName the package name of the rule. - * @param ruleName the name of the rule. - * @param lines the text of the rule. - * @return the rule instance for the created rule. - * @throws IOException - * @throws Exception - */ - protected Rule scratchRule(String packageName, String ruleName, String... lines) - throws Exception { - scratch.file(packageName + "/BUILD", lines); - return (Rule) getTarget("//" + packageName + ":" + ruleName); - } - - /** - * A Utility method that generates build file rules for tests. - * @param rule the name of the rule class. - * @param name the name of the rule instance. - * @param body an array of strings containing the contents of the rule. - * @return a string containing the build file rule. - */ - protected String genRule(String rule, String name, String... body) { - StringBuilder buf = new StringBuilder(); - buf.append(rule); - buf.append("(name='"); - buf.append(name); - buf.append("',\n"); - for (String line : body) { - buf.append(line); - } - buf.append(")\n"); - return buf.toString(); - } - - /** - * A utility function which generates the "deps" clause for a build file - * rule from a list of targets. - * @param depTargets the list of targets. - * @return a string containing the deps clause - */ - protected static String deps(String... depTargets) { - StringBuilder buf = new StringBuilder(); - buf.append(" deps=["); - String sep = "'"; - for (String dep : depTargets) { - buf.append(sep); - buf.append(dep); - buf.append("'"); - sep = ", '"; - } - buf.append("]"); - return buf.toString(); - } - - /** - * Utility method for tests. Converts an array of strings into a set of labels. - * - * @param strings the set of strings to be converted to labels. - * @throws LabelSyntaxException if there are any syntax errors in the strings. - */ - public static Set<Label> asLabelSet(String... strings) throws LabelSyntaxException { - return asLabelSet(ImmutableList.copyOf(strings)); - } - - /** - * Utility method for tests. Converts an array of strings into a set of labels. - * - * @param strings the set of strings to be converted to labels. - * @throws LabelSyntaxException if there are any syntax errors in the strings. - */ - public static Set<Label> asLabelSet(Iterable<String> strings) throws LabelSyntaxException { - Set<Label> result = Sets.newTreeSet(); - for (String s : strings) { - result.add(Label.parseAbsolute(s)); - } - return result; - } - - protected final Set<Target> asTargetSet(String... strLabels) - throws LabelSyntaxException, NoSuchThingException, InterruptedException { - return asTargetSet(Arrays.asList(strLabels)); - } - - protected Set<Target> asTargetSet(Iterable<String> strLabels) - throws LabelSyntaxException, NoSuchThingException, InterruptedException { - Set<Target> targets = new HashSet<>(); - for (String strLabel : strLabels) { - targets.add(getTarget(strLabel)); - } - return targets; - } - - protected PackageManager getPackageManager() { - return skyframeExecutor.getPackageManager(); - } - - protected SkyframeExecutor getSkyframeExecutor() { - return skyframeExecutor; - } - - /** - * Invalidates all existing packages below the usual rootDirectory. Must be called _after_ the - * files are modified. - * - * @throws InterruptedException - */ - protected void invalidatePackages() throws InterruptedException { - skyframeExecutor.invalidateFilesUnderPathForTesting( - reporter, ModifiedFileSet.EVERYTHING_MODIFIED, rootDirectory); - } - - protected String getErrorMsgNonEmptyList(String attrName, String ruleType, String ruleName) { - return "non empty attribute '" + attrName + "' in '" + ruleType - + "' rule '" + ruleName + "' has to have at least one value"; - } -} diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProviderTest.java index d0e4c2e40a..bd2f4ce929 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProviderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProviderTest.java @@ -17,7 +17,7 @@ import static com.google.common.truth.Truth.assertThat; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.testutil.TestConstants; import org.junit.Test; @@ -28,7 +28,7 @@ import org.junit.runners.JUnit4; * Tests for Skylark providers for cpp rules. */ @RunWith(JUnit4.class) -public class CcSkylarkApiProviderTest extends BuildViewTestCaseForJunit4 { +public class CcSkylarkApiProviderTest extends BuildViewTestCase { private CcSkylarkApiProvider getApi(String label) throws Exception { RuleConfiguredTarget rule = (RuleConfiguredTarget) getConfiguredTarget(label); return (CcSkylarkApiProvider) rule.get(CcSkylarkApiProvider.NAME); diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java index 6cca877891..5d3696ea0f 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java @@ -16,7 +16,7 @@ package com.google.devtools.build.lib.rules.cpp; import static com.google.common.truth.Truth.assertThat; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,7 +26,7 @@ import org.junit.runners.JUnit4; * Unit tests for the {@code cc_toolchain_suite} rule. */ @RunWith(JUnit4.class) -public class CcToolchainSuiteTest extends BuildViewTestCaseForJunit4 { +public class CcToolchainSuiteTest extends BuildViewTestCase { @Test public void testSmoke() throws Exception { scratch.file("cc/BUILD", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java index 9099dbd721..5765536907 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java @@ -14,7 +14,7 @@ package com.google.devtools.build.lib.rules.cpp; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import org.junit.Test; import org.junit.runner.RunWith; @@ -24,7 +24,7 @@ import org.junit.runners.JUnit4; * Tests for toolchain features. */ @RunWith(JUnit4.class) -public class CcToolchainTest extends BuildViewTestCaseForJunit4 { +public class CcToolchainTest extends BuildViewTestCase { @Test public void testModuleMapAttribute() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcTransitiveGeneratedHeaderDepsTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcTransitiveGeneratedHeaderDepsTest.java index d749a763a1..0b5e802b60 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcTransitiveGeneratedHeaderDepsTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcTransitiveGeneratedHeaderDepsTest.java @@ -26,7 +26,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Ordering; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.vfs.PathFragment; @@ -47,7 +47,7 @@ import java.util.Set; * headers DAG which hangs off of cc_library nodes. */ @RunWith(JUnit4.class) -public class CcTransitiveGeneratedHeaderDepsTest extends BuildViewTestCaseForJunit4 { +public class CcTransitiveGeneratedHeaderDepsTest extends BuildViewTestCase { @Before public final void writeFiles() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContextTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContextTest.java index 16f4b85583..75b86e6336 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContextTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContextTest.java @@ -20,7 +20,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.testing.EqualsTester; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import org.junit.Before; import org.junit.Test; @@ -31,7 +31,7 @@ import org.junit.runners.JUnit4; * Tests for {@link CppCompilationContext}. */ @RunWith(JUnit4.class) -public class CppCompilationContextTest extends BuildViewTestCaseForJunit4 { +public class CppCompilationContextTest extends BuildViewTestCase { @Before public final void createBuildFile() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java index 9c3b480e1d..679d75de8d 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java @@ -30,7 +30,7 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.util.ActionTester; import com.google.devtools.build.lib.analysis.util.ActionTester.ActionCombinationFactory; import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.rules.cpp.CppLinkAction.Builder; @@ -47,7 +47,7 @@ import org.junit.runners.JUnit4; * Tests for {@link CppLinkAction}. */ @RunWith(JUnit4.class) -public class CppLinkActionTest extends BuildViewTestCaseForJunit4 { +public class CppLinkActionTest extends BuildViewTestCase { private RuleContext createDummyRuleContext() throws Exception { return view.getRuleContextForTesting(reporter, scratchConfiguredTarget( "dummyRuleContext", "dummyRuleContext", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java index 5ce4417e72..fa0cc94f7b 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java @@ -30,7 +30,7 @@ import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.util.AnalysisMock; -import com.google.devtools.build.lib.analysis.util.AnalysisTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool; @@ -51,7 +51,7 @@ import java.util.Collections; * Tests for {@link CppConfigurationLoader}. */ @RunWith(JUnit4.class) -public class CrosstoolConfigurationLoaderTest extends AnalysisTestCaseForJunit4 { +public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase { private static final Collection<String> NO_FEATURES = Collections.emptySet(); private CppConfiguration create(CppConfigurationLoader loader, String... args) throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java index 11c1d84d35..f70a2fca75 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertNull; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileConfiguredTarget; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.util.FileType; import org.junit.Test; @@ -34,7 +34,7 @@ import java.util.Arrays; * Tests for {@link Filegroup}. */ @RunWith(JUnit4.class) -public class FilegroupConfiguredTargetTest extends BuildViewTestCaseForJunit4 { +public class FilegroupConfiguredTargetTest extends BuildViewTestCase { @Test public void testGroup() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesActionTest.java index b3407342b3..c383aed4aa 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/java/WriteBuildInfoPropertiesActionTest.java @@ -16,7 +16,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.assertEquals; import com.google.common.base.Joiner; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,7 +29,7 @@ import java.io.IOException; * Tests for {@link WriteBuildInfoPropertiesAction} utilities methods */ @RunWith(JUnit4.class) -public class WriteBuildInfoPropertiesActionTest extends FoundationTestCaseForJunit4 { +public class WriteBuildInfoPropertiesActionTest extends FoundationTestCase { private static final Joiner LINE_JOINER = Joiner.on("\r\n"); private static final Joiner LINEFEED_JOINER = Joiner.on("\n"); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java index 45d6996d27..83c8775ca1 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java @@ -23,7 +23,7 @@ import com.google.common.testing.EqualsTester; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.PathFragment; @@ -49,7 +49,7 @@ import java.util.concurrent.atomic.AtomicReference; * Tests for {@link ContainingPackageLookupFunction}. */ @RunWith(JUnit4.class) -public class ContainingPackageLookupFunctionTest extends FoundationTestCaseForJunit4 { +public class ContainingPackageLookupFunctionTest extends FoundationTestCase { private AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages; private MemoizingEvaluator evaluator; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java index 81c0bf4b15..17eb2a11bd 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java @@ -36,7 +36,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.packages.FilesetEntry.SymlinkBehavior; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; @@ -71,7 +71,7 @@ import javax.annotation.Nullable; /** Tests for {@link FilesetEntryFunction}. */ @RunWith(JUnit4.class) -public final class FilesetEntryFunctionTest extends FoundationTestCaseForJunit4 { +public final class FilesetEntryFunctionTest extends FoundationTestCase { private TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance()); private MemoizingEvaluator evaluator; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java index ec3ed2489e..f35577ff92 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java @@ -25,7 +25,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.packages.ConstantRuleVisibility; @@ -66,7 +66,7 @@ import javax.annotation.Nullable; * indirectly in several other places. */ @RunWith(JUnit4.class) -public class PackageFunctionTest extends BuildViewTestCaseForJunit4 { +public class PackageFunctionTest extends BuildViewTestCase { private CustomInMemoryFs fs = new CustomInMemoryFs(new ManualClock()); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java index 554bd3308b..6b540e5dcb 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java @@ -30,7 +30,7 @@ import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.PackageLookupValue.ErrorReason; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; @@ -59,7 +59,7 @@ import java.util.concurrent.atomic.AtomicReference; * Tests for {@link PackageLookupFunction}. */ @RunWith(JUnit4.class) -public class PackageLookupFunctionTest extends FoundationTestCaseForJunit4 { +public class PackageLookupFunctionTest extends FoundationTestCase { private AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages; private MemoizingEvaluator evaluator; private SequentialBuildDriver driver; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java index 107f577552..2224036350 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertTrue; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.vfs.PathFragment; @@ -36,7 +36,7 @@ import java.io.IOException; /** Tests for {@link PrepareDepsOfPatternsFunction}. */ @RunWith(JUnit4.class) -public class PrepareDepsOfPatternsFunctionSmartNegationTest extends BuildViewTestCaseForJunit4 { +public class PrepareDepsOfPatternsFunctionSmartNegationTest extends BuildViewTestCase { private static SkyKey getKeyForLabel(Label label) { // Note that these tests used to look for TargetMarker SkyKeys before TargetMarker was diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java index 9c872cf26e..43c37e901e 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionTest.java @@ -21,7 +21,7 @@ import static org.junit.Assert.assertTrue; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.NoSuchTargetException; @@ -38,7 +38,7 @@ import java.io.IOException; /** Tests for {@link com.google.devtools.build.lib.skyframe.PrepareDepsOfPatternsFunction}. */ @RunWith(JUnit4.class) -public class PrepareDepsOfPatternsFunctionTest extends BuildViewTestCaseForJunit4 { +public class PrepareDepsOfPatternsFunctionTest extends BuildViewTestCase { private static SkyKey getKeyForLabel(Label label) { // Note that these tests used to look for TargetMarker SkyKeys before TargetMarker was diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java index 0fbb4ecbc3..4a7431e5ae 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunctionTest.java @@ -22,7 +22,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.pkgcache.FilteringPolicies; @@ -46,7 +46,7 @@ import java.io.IOException; * Tests for {@link PrepareDepsOfTargetsUnderDirectoryFunction}. Insert excuses here. */ @RunWith(JUnit4.class) -public class PrepareDepsOfTargetsUnderDirectoryFunctionTest extends BuildViewTestCaseForJunit4 { +public class PrepareDepsOfTargetsUnderDirectoryFunctionTest extends BuildViewTestCase { private SkyframeExecutor skyframeExecutor; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java index 05fdbc742e..8f47c7e5a5 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java @@ -32,7 +32,7 @@ import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFileFactory; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.TraversalRequest; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.Path; @@ -67,7 +67,7 @@ import java.util.regex.Pattern; /** Tests for {@link RecursiveFilesystemTraversalFunction}. */ @RunWith(JUnit4.class) -public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTestCaseForJunit4 { +public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTestCase { private TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance()); private RecordingEvaluationProgressReceiver progressReceiver; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java index 8b0cc1bf59..6fe7661e87 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunctionTest.java @@ -22,7 +22,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; @@ -47,7 +47,7 @@ import org.junit.runners.JUnit4; * are a couple of corner cases we need to test directly. */ @RunWith(JUnit4.class) -public class RecursivePkgFunctionTest extends BuildViewTestCaseForJunit4 { +public class RecursivePkgFunctionTest extends BuildViewTestCase { private SkyframeExecutor skyframeExecutor; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgKeyTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgKeyTest.java index 2e5df9e9a1..61ec920061 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgKeyTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursivePkgKeyTest.java @@ -16,7 +16,7 @@ package com.google.devtools.build.lib.skyframe; import static org.junit.Assert.fail; import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName; import com.google.devtools.build.lib.skyframe.RecursivePkgValue.RecursivePkgKey; @@ -30,7 +30,7 @@ import org.junit.runners.JUnit4; /** Tests for {@link RecursivePkgKey}. */ @RunWith(JUnit4.class) -public class RecursivePkgKeyTest extends BuildViewTestCaseForJunit4 { +public class RecursivePkgKeyTest extends BuildViewTestCase { private SkyKey buildRecursivePkgKey( RepositoryName repository, diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java index 45d8cd8087..ab1cc035fe 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java @@ -32,7 +32,7 @@ import com.google.devtools.build.lib.packages.NoSuchThingException; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Target; -import com.google.devtools.build.lib.packages.util.PackageLoadingTestCaseForJunit4; +import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.packages.util.PreprocessorUtils; import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader; import com.google.devtools.build.lib.testutil.ManualClock; @@ -53,7 +53,7 @@ import java.util.Set; import javax.annotation.Nullable; -abstract public class SkyframeLabelVisitorTestCase extends PackageLoadingTestCaseForJunit4 { +abstract public class SkyframeLabelVisitorTestCase extends PackageLoadingTestCase { // Convenience constants, so test args are readable vs true/false protected static final boolean KEEP_GOING = true; protected static final boolean EXPECT_ERROR = true; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java index 8c2087f323..606e140fa6 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.packages.ConstantRuleVisibility; import com.google.devtools.build.lib.packages.Rule; @@ -40,7 +40,7 @@ import java.util.UUID; * of the imports of their respective definition SkylarkEnvironments. */ @RunWith(JUnit4.class) -public class SkylarkFileContentHashTests extends BuildViewTestCaseForJunit4 { +public class SkylarkFileContentHashTests extends BuildViewTestCase { @Before public final void createFiles() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java index 0682d79156..3f8d1d1630 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.ConstantRuleVisibility; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; @@ -39,7 +39,7 @@ import java.util.UUID; * Tests for SkylarkImportLookupFunction. */ @RunWith(JUnit4.class) -public class SkylarkImportLookupFunctionTest extends BuildViewTestCaseForJunit4 { +public class SkylarkImportLookupFunctionTest extends BuildViewTestCase { @Before public final void preparePackageLoading() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java index 6a8fbccf06..bfaddc9337 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertTrue; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.packages.BuildFileNotFoundException; @@ -51,7 +51,7 @@ import java.util.Map; * that isn't easily mockable. So our testing strategy is to make hacky calls to SkyframeExecutor. */ @RunWith(JUnit4.class) -public class TargetMarkerFunctionTest extends BuildViewTestCaseForJunit4 { +public class TargetMarkerFunctionTest extends BuildViewTestCase { private SkyframeExecutor skyframeExecutor; private CustomInMemoryFs fs = new CustomInMemoryFs(); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java index ef8fc9964f..a9697d8e9b 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java @@ -43,7 +43,7 @@ import com.google.devtools.build.lib.buildtool.SkyframeBuilder; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.testutil.FoundationTestCaseForJunit4; +import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.util.AbruptExitException; import com.google.devtools.build.lib.util.BlazeClock; @@ -82,7 +82,7 @@ import javax.annotation.Nullable; /** * The common code that's shared between various builder tests. */ -public abstract class TimestampBuilderTestCase extends FoundationTestCaseForJunit4 { +public abstract class TimestampBuilderTestCase extends FoundationTestCase { private static final SkyKey OWNER_KEY = new SkyKey(SkyFunctions.ACTION_LOOKUP, "OWNER"); protected static final ActionLookupValue.ActionLookupKey ALL_OWNER = diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java index 66630c837e..91afbfaae7 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.bazel.rules.BazelRulesModule; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.NoSuchTargetException; @@ -47,7 +47,7 @@ import java.io.IOException; * Test for {@link WorkspaceFileFunction}. */ @RunWith(JUnit4.class) -public class WorkspaceFileFunctionTest extends BuildViewTestCaseForJunit4 { +public class WorkspaceFileFunctionTest extends BuildViewTestCase { private WorkspaceFileFunction skyFunc; private FakeFileValue fakeWorkspaceFileValue; diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java index c9adfac551..3ea5106c69 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java @@ -23,7 +23,7 @@ import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.SkylarkProviders; import com.google.devtools.build.lib.analysis.ViewCreationFailedException; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; @@ -38,7 +38,7 @@ import javax.annotation.Nullable; * Tests for Skylark aspects */ @RunWith(JUnit4.class) -public class SkylarkAspectsTest extends BuildViewTestCaseForJunit4 { +public class SkylarkAspectsTest extends BuildViewTestCase { @Test public void testAspect() throws Exception { scratch.file( diff --git a/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java b/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java index 9aa07753dd..670029feb1 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java @@ -21,7 +21,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCaseForJunit4; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.PackageFactory.PackageContext; import com.google.devtools.build.lib.rules.SkylarkModules; @@ -35,7 +35,7 @@ import org.junit.Before; /** * A class to contain the common functionality for Skylark tests. */ -public abstract class SkylarkTestCase extends BuildViewTestCaseForJunit4 { +public abstract class SkylarkTestCase extends BuildViewTestCase { // We don't have multiple inheritance, so we fake it. protected EvaluationTestCase ev; diff --git a/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCase.java b/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCase.java index d781cbf67b..02b361979a 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCase.java @@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.testutil; +import static org.junit.Assert.fail; + import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventCollector; import com.google.devtools.build.lib.events.EventHandler; @@ -23,15 +25,15 @@ import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; -import junit.framework.TestCase; +import org.junit.After; +import org.junit.Before; import java.util.Set; /** - * This is a specialization of {@link TestCase} that's useful for implementing tests of the - * "foundation" library. + * A helper class for implementing tests of the "foundation" library. */ -public abstract class FoundationTestCase extends TestCase { +public abstract class FoundationTestCase { protected Path rootDirectory; @@ -62,19 +64,33 @@ public abstract class FoundationTestCase extends TestCase { } }; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public final void initializeFileSystemAndDirectories() throws Exception { scratch = new Scratch(createFileSystem(), "/workspace"); outputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/"); rootDirectory = scratch.dir("/workspace"); scratch.file(rootDirectory.getRelative("WORKSPACE").getPathString()); actionOutputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/action_out/"); + } + + @Before + public final void initializeLogging() throws Exception { eventCollector = new EventCollector(EventKind.ERRORS_AND_WARNINGS); reporter = new Reporter(eventCollector); reporter.addHandler(failFastHandler); } + @After + public final void clearInterrupts() throws Exception { + Thread.interrupted(); // Clear any interrupt pending against this thread, + // so that we don't cause later tests to fail. + } + + // To be overriden by sub classes if they want to disable loading. + protected boolean isLoadingEnabled() { + return true; + } + /** * Creates the file system; override to inject FS behavior. */ @@ -82,14 +98,6 @@ public abstract class FoundationTestCase extends TestCase { return new InMemoryFileSystem(BlazeClock.instance()); } - @Override - protected void tearDown() throws Exception { - Thread.interrupted(); // Clear any interrupt pending against this thread, - // so that we don't cause later tests to fail. - - super.tearDown(); - } - // Mix-in assertions: protected void assertNoEvents() { diff --git a/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java b/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java deleted file mode 100644 index 08688b13f6..0000000000 --- a/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2014 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.testutil; - -import static org.junit.Assert.fail; - -import com.google.devtools.build.lib.events.Event; -import com.google.devtools.build.lib.events.EventCollector; -import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.events.EventKind; -import com.google.devtools.build.lib.events.Reporter; -import com.google.devtools.build.lib.util.BlazeClock; -import com.google.devtools.build.lib.vfs.FileSystem; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; - -import org.junit.After; -import org.junit.Before; - -import java.util.Set; - -/** - * A helper class for implementing tests of the "foundation" library. - */ -public abstract class FoundationTestCaseForJunit4 { - - protected Path rootDirectory; - - protected Path outputBase; - - protected Path actionOutputBase; - - // May be overridden by subclasses: - protected Reporter reporter; - protected EventCollector eventCollector; - protected Scratch scratch; - - // Individual tests can opt-out of this handler if they expect an error, by - // calling reporter.removeHandler(failFastHandler). - protected static final EventHandler failFastHandler = new EventHandler() { - @Override - public void handle(Event event) { - if (EventKind.ERRORS.contains(event.getKind())) { - fail(event.toString()); - } - } - }; - - protected static final EventHandler printHandler = new EventHandler() { - @Override - public void handle(Event event) { - System.out.println(event); - } - }; - - @Before - public final void initializeFileSystemAndDirectories() throws Exception { - scratch = new Scratch(createFileSystem(), "/workspace"); - outputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/"); - rootDirectory = scratch.dir("/workspace"); - scratch.file(rootDirectory.getRelative("WORKSPACE").getPathString()); - actionOutputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/action_out/"); - } - - @Before - public final void initializeLogging() throws Exception { - eventCollector = new EventCollector(EventKind.ERRORS_AND_WARNINGS); - reporter = new Reporter(eventCollector); - reporter.addHandler(failFastHandler); - } - - @After - public final void clearInterrupts() throws Exception { - Thread.interrupted(); // Clear any interrupt pending against this thread, - // so that we don't cause later tests to fail. - } - - // To be overriden by sub classes if they want to disable loading. - protected boolean isLoadingEnabled() { - return true; - } - - /** - * Creates the file system; override to inject FS behavior. - */ - protected FileSystem createFileSystem() { - return new InMemoryFileSystem(BlazeClock.instance()); - } - - // Mix-in assertions: - - protected void assertNoEvents() { - MoreAsserts.assertNoEvents(eventCollector); - } - - protected Event assertContainsEvent(String expectedMessage) { - return MoreAsserts.assertContainsEvent(eventCollector, - expectedMessage); - } - - protected Event assertContainsEvent(String expectedMessage, Set<EventKind> kinds) { - return MoreAsserts.assertContainsEvent(eventCollector, - expectedMessage, - kinds); - } - - protected void assertContainsEventWithFrequency(String expectedMessage, - int expectedFrequency) { - MoreAsserts.assertContainsEventWithFrequency(eventCollector, expectedMessage, - expectedFrequency); - } - - protected void assertDoesNotContainEvent(String expectedMessage) { - MoreAsserts.assertDoesNotContainEvent(eventCollector, - expectedMessage); - } - - protected Event assertContainsEventWithWordsInQuotes(String... words) { - return MoreAsserts.assertContainsEventWithWordsInQuotes( - eventCollector, words); - } - - protected void assertContainsEventsInOrder(String... expectedMessages) { - MoreAsserts.assertContainsEventsInOrder(eventCollector, expectedMessages); - } -} |