diff options
Diffstat (limited to 'src/test/java/com/google/devtools/build')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuntimeTest.java | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuntimeTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuntimeTest.java new file mode 100644 index 0000000000..1a7d460ed0 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuntimeTest.java @@ -0,0 +1,163 @@ +// Copyright 2017 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.bazel.rules.python; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.devtools.build.lib.actions.util.ActionsTestUtil; +import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Unit tests for {@link BazelPyRuntime}. + */ +@RunWith(JUnit4.class) +public final class BazelPyRuntimeTest extends BuildViewTestCase { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Before + public final void setup() throws Exception { + scratch.file( + "py/BUILD", + "py_runtime(", + " name='py-2.7',", + " files = [", + " 'py-2.7/bin/python',", + " 'py-2.7/lib/libpython2.7.a',", + " ],", + " interpreter='py-2.7/bin/python',", + ")", + "", + "py_runtime(", + " name='py-3.6',", + " files = [],", + " interpreter_path='/opt/pyenv/versions/3.6.0/bin/python',", + ")", + "", + "py_runtime(", + " name='err-interpreter-and-path-both-set',", + " files = [],", + " interpreter='py-2.7/bin/python',", + " interpreter_path='/opt/pyenv/versions/3.6.0/bin/python',", + ")", + "", + "py_runtime(", + " name='err-interpreter-and-path-both-unset',", + " files = [],", + ")", + "", + "py_runtime(", + " name='err-path-not-absolute',", + " files = [],", + " interpreter_path='py-2.7/bin/python',", + ")", + "", + "py_runtime(", + " name='err-non-empty-files-with-path-absolute',", + " files = [", + " 'py-err/bin/python',", + " 'py-err/lib/libpython2.7.a',", + " ],", + " interpreter_path='/opt/pyenv/versions/3.6.0/bin/python',", + ")" + ); + + } + + @Test + public void testCheckedInPyRuntime() throws Exception { + useConfiguration("--python_top=//py:py-2.7"); + ConfiguredTarget target = getConfiguredTarget("//py:py-2.7"); + + assertThat( + ActionsTestUtil.prettyArtifactNames( + target.getProvider(BazelPyRuntimeProvider.class).files())) + .containsExactly("py/py-2.7/bin/python", "py/py-2.7/lib/libpython2.7.a"); + assertThat( + target.getProvider(BazelPyRuntimeProvider.class).interpreter().getExecPathString()) + .isEqualTo("py/py-2.7/bin/python"); + assertThat(target.getProvider(BazelPyRuntimeProvider.class).interpreterPath()) + .isEqualTo(""); + } + + @Test + public void testAbsolutePathPyRuntime() throws Exception { + useConfiguration("--python_top=//py:py-3.6"); + ConfiguredTarget target = getConfiguredTarget("//py:py-3.6"); + + assertThat( + ActionsTestUtil.prettyArtifactNames( + target.getProvider(BazelPyRuntimeProvider.class).files())) + .isEmpty(); + assertThat( + target.getProvider(BazelPyRuntimeProvider.class).interpreter()) + .isNull(); + assertThat(target.getProvider(BazelPyRuntimeProvider.class).interpreterPath()) + .isEqualTo("/opt/pyenv/versions/3.6.0/bin/python"); + } + + @Test + public void testErrorWithInterpreterAndPathBothSet() throws Exception { + useConfiguration("--python_top=//py:err-interpreter-and-path-both-set"); + try { + getConfiguredTarget("//py:err-interpreter-and-path-both-set"); + } catch (Error e) { + assertThat(e.getMessage()) + .contains("interpreter and interpreter_path cannot be set at the same time."); + } + } + + @Test + public void testErrorWithInterpreterAndPathBothUnset() throws Exception { + useConfiguration("--python_top=//py:err-interpreter-and-path-both-unset"); + try { + getConfiguredTarget("//py:err-interpreter-and-path-both-unset"); + } catch (Error e) { + assertThat(e.getMessage()) + .contains("interpreter and interpreter_path cannot be empty at the same time."); + } + } + + @Test + public void testErrorWithPathNotAbsolute() throws Exception { + useConfiguration("--python_top=//py:err-path-not-absolute"); + try { + getConfiguredTarget("//py:err-path-not-absolute"); + } catch (Error e) { + assertThat(e.getMessage()) + .contains("must be an absolute path."); + } + } + + @Test + public void testPyRuntimeWithError() throws Exception { + useConfiguration("--python_top=//py:err-non-empty-files-with-path-absolute"); + try { + getConfiguredTarget("//py:err-non-empty-files-with-path-absolute"); + } catch (Error e) { + assertThat(e.getMessage()) + .contains("interpreter with an absolute path requires files to be empty."); + } + } + +} |