diff options
Diffstat (limited to 'src/test/java/com')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunctionTest.java | 162 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java | 8 |
2 files changed, 166 insertions, 4 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunctionTest.java new file mode 100644 index 0000000000..784c3e0707 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunctionTest.java @@ -0,0 +1,162 @@ +// Copyright 2016 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.skyframe; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; +import com.google.devtools.build.lib.skyframe.WorkspaceFileFunctionTest.FakeFileValue; +import com.google.devtools.build.lib.skyframe.WorkspaceFileFunctionTest.SkyKeyMatchers; +import com.google.devtools.build.lib.syntax.BuildFileAST; +import com.google.devtools.build.lib.testutil.TestRuleClassProvider; +import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.RootedPath; +import com.google.devtools.build.skyframe.SkyFunction; +import com.google.devtools.build.skyframe.SkyFunctionException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Matchers; +import org.mockito.Mockito; + +import java.io.IOException; +import java.util.List; + +/** + * Test for WorkspaceASTFunction. + */ +@RunWith(JUnit4.class) +public class WorkspaceASTFunctionTest extends BuildViewTestCase { + + private WorkspaceASTFunction astSkyFunc; + private FakeFileValue fakeWorkspaceFileValue; + + @Before + public final void setUp() throws Exception { + ConfiguredRuleClassProvider ruleClassProvider = TestRuleClassProvider.getRuleClassProvider(); + ConfiguredRuleClassProvider ruleClassProviderSpy = Mockito.spy(ruleClassProvider); + // Prevent returning default workspace file. + Mockito.when(ruleClassProviderSpy.getDefaultWorkspaceFile()).thenReturn(""); + astSkyFunc = new WorkspaceASTFunction(ruleClassProviderSpy); + fakeWorkspaceFileValue = new FakeFileValue(); + } + + private RootedPath createWorkspaceFile(String... contents) throws IOException { + Path workspacePath = scratch.overwriteFile("WORKSPACE", contents); + fakeWorkspaceFileValue.setSize(workspacePath.getFileSize()); + return RootedPath.toRootedPath( + workspacePath.getParentDirectory(), new PathFragment(workspacePath.getBaseName())); + } + + private SkyFunction.Environment getEnv() { + SkyFunction.Environment env = Mockito.mock(SkyFunction.Environment.class); + Mockito.when(env.getValue(Matchers.argThat(new SkyKeyMatchers(SkyFunctions.FILE)))) + .thenReturn(fakeWorkspaceFileValue); + return env; + } + + private List<BuildFileAST> getASTs(String... lines) + throws IOException, SkyFunctionException, InterruptedException { + RootedPath workspacePath = createWorkspaceFile(lines); + + WorkspaceASTValue value = + (WorkspaceASTValue) astSkyFunc.compute(WorkspaceASTValue.key(workspacePath), getEnv()); + return value.getASTs(); + } + + @Test + public void testSplitASTNoLoad() throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = getASTs("foo_bar = 1"); + assertThat(asts).hasSize(1); + assertThat(asts.get(0).getStatements()).hasSize(1); + } + + @Test + public void testSplitASTOneLoadAtTop() + throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = getASTs("load('//:foo.bzl', 'bar')", "foo_bar = 1"); + assertThat(asts).hasSize(1); + assertThat(asts.get(0).getStatements()).hasSize(2); + } + + @Test + public void testSplitASTOneLoad() throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = getASTs("foo_bar = 1", "load('//:foo.bzl', 'bar')"); + assertThat(asts).hasSize(2); + assertThat(asts.get(0).getStatements()).hasSize(1); + assertThat(asts.get(1).getStatements()).hasSize(1); + } + + @Test + public void testSplitASTTwoSuccessiveLoads() + throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = + getASTs("foo_bar = 1", "load('//:foo.bzl', 'bar')", "load('//:bar.bzl', 'foo')"); + assertThat(asts).hasSize(2); + assertThat(asts.get(0).getStatements()).hasSize(1); + assertThat(asts.get(1).getStatements()).hasSize(2); + } + + @Test + public void testSplitASTTwoSucessiveLoadsWithNonLoadStatement() + throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = + getASTs( + "foo_bar = 1", + "load('//:foo.bzl', 'bar')", + "load('//:bar.bzl', 'foo')", + "local_repository(name = 'foobar', path = '/bar/foo')"); + assertThat(asts).hasSize(2); + assertThat(asts.get(0).getStatements()).hasSize(1); + assertThat(asts.get(1).getStatements()).hasSize(3); + } + + @Test + public void testSplitASTThreeLoadsThreeSegments() + throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = + getASTs( + "foo_bar = 1", + "load('//:foo.bzl', 'bar')", + "load('//:bar.bzl', 'foo')", + "local_repository(name = 'foobar', path = '/bar/foo')", + "load('@foobar//:baz.bzl', 'bleh')"); + assertThat(asts).hasSize(3); + assertThat(asts.get(0).getStatements()).hasSize(1); + assertThat(asts.get(1).getStatements()).hasSize(3); + assertThat(asts.get(2).getStatements()).hasSize(1); + } + + @Test + public void testSplitASTThreeLoadsThreeSegmentsWithContent() + throws IOException, SkyFunctionException, InterruptedException { + List<BuildFileAST> asts = + getASTs( + "foo_bar = 1", + "load('//:foo.bzl', 'bar')", + "load('//:bar.bzl', 'foo')", + "local_repository(name = 'foobar', path = '/bar/foo')", + "load('@foobar//:baz.bzl', 'bleh')", + "bleh()"); + assertThat(asts).hasSize(3); + assertThat(asts.get(0).getStatements()).hasSize(1); + assertThat(asts.get(1).getStatements()).hasSize(3); + assertThat(asts.get(2).getStatements()).hasSize(2); + } +} 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 0f4ce405cf..208c3788c1 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 @@ -60,7 +60,7 @@ public class WorkspaceFileFunctionTest extends BuildViewTestCase { private WorkspaceASTFunction astSkyFunc; private FakeFileValue fakeWorkspaceFileValue; - private static class FakeFileValue extends FileValue { + static class FakeFileValue extends FileValue { private boolean exists; private long size; @@ -85,7 +85,7 @@ public class WorkspaceFileFunctionTest extends BuildViewTestCase { return exists; } - private void setExists(boolean exists) { + void setExists(boolean exists) { this.exists = exists; } @@ -94,7 +94,7 @@ public class WorkspaceFileFunctionTest extends BuildViewTestCase { return size; } - private void setSize(long size) { + void setSize(long size) { this.size = size; } } @@ -125,7 +125,7 @@ public class WorkspaceFileFunctionTest extends BuildViewTestCase { } // Dummy harmcrest matcher that match the function name of a skykey - private static class SkyKeyMatchers extends BaseMatcher<SkyKey> { + static class SkyKeyMatchers extends BaseMatcher<SkyKey> { private final SkyFunctionName functionName; public SkyKeyMatchers(SkyFunctionName functionName) { |