diff options
author | 2017-06-13 16:21:15 +0200 | |
---|---|---|
committer | 2017-06-13 17:13:28 +0200 | |
commit | 9b3f76ee2731cb951177cb2d656de8bbf0d4a4b5 (patch) | |
tree | a6bf7039ca3aeab50e48f3697d2976da9d9a93eb /src/test/java/com/google | |
parent | cec624e756d0090cda440937dd00da542d3932bd (diff) |
Also filter stderr when parse_showincludes feature is enabled
On Windows, cl.exe generates include information to stdout.
But when using the cuda compiler(nvcc.exe) to invoke cl.exe,
it's redirected to stderr.
So we need to parse the output of stderr as well.
Change-Id: I9a763a6eefa531932bf1077ef4155f6bda934240
PiperOrigin-RevId: 158842448
Diffstat (limited to 'src/test/java/com/google')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/BUILD | 1 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/cpp/ShowIncludesFilterTest.java | 22 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index e2f14af56a..e34417ee6a 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -925,6 +925,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib:bazel-main", "//src/main/java/com/google/devtools/build/lib:bazel-rules", "//src/main/java/com/google/devtools/build/lib:build-base", + "//src/main/java/com/google/devtools/build/lib:inmemoryfs", "//src/main/java/com/google/devtools/build/lib:io", "//src/main/java/com/google/devtools/build/lib:packages-internal", "//src/main/java/com/google/devtools/build/lib:util", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/ShowIncludesFilterTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/ShowIncludesFilterTest.java index 6e897d002c..a70a24ad29 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/ShowIncludesFilterTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/ShowIncludesFilterTest.java @@ -17,6 +17,9 @@ package com.google.devtools.build.lib.rules.cpp; import static com.google.common.truth.Truth.assertThat; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.devtools.build.lib.util.io.FileOutErr; +import com.google.devtools.build.lib.vfs.FileSystem; +import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; import java.io.ByteArrayOutputStream; import java.io.FilterOutputStream; import java.io.IOException; @@ -32,12 +35,16 @@ public class ShowIncludesFilterTest { private ShowIncludesFilter showIncludesFilter; private ByteArrayOutputStream output; private FilterOutputStream filterOutputStream; + private FileSystem fs; + private FileOutErr outErr; @Before - public void setUpOutputStreams() { + public void setUpOutputStreams() throws IOException { showIncludesFilter = new ShowIncludesFilter("foo.cpp"); output = new ByteArrayOutputStream(); filterOutputStream = showIncludesFilter.getFilteredOutputStream(output); + fs = new InMemoryFileSystem(); + fs.getRootDirectory().getChild("out").createDirectory(); } private byte[] getBytes(String str) { @@ -105,4 +112,17 @@ public class ShowIncludesFilterTest { filterOutputStream.flush(); assertThat(output.toString()).isEqualTo("foo.h"); } + + @Test + public void testOnFileOutErr() throws IOException { + outErr = new FileOutErr(fs.getPath("/out/stdout"), fs.getPath("/out/stderr")); + ShowIncludesFilter showIncludesFilterForStdout = new ShowIncludesFilter("foo.cpp"); + ShowIncludesFilter showIncludesFilterForStderr = new ShowIncludesFilter("foo.cpp"); + outErr.setOutputFilter(showIncludesFilterForStdout); + outErr.setErrorFilter(showIncludesFilterForStderr); + outErr.getOutputStream().write(getBytes("Note: including file: bar1.h\n")); + outErr.getErrorStream().write(getBytes("Note: including file: bar2.h\n")); + assertThat(showIncludesFilterForStdout.getDependencies()).contains("bar1.h"); + assertThat(showIncludesFilterForStderr.getDependencies()).contains("bar2.h"); + } } |