import org.junit.rules.TemporaryFolder; //导入方法依赖的package包/类
@Test
public void sanitizeSymlinkedWorkingDirectory() throws InterruptedException, IOException {
TemporaryFolder folder = new TemporaryFolder();
folder.create();
ProjectFilesystem filesystem =
TestProjectFilesystems.createProjectFilesystem(folder.getRoot().toPath());
// Setup up a symlink to our working directory.
Path symlinkedRoot = folder.getRoot().toPath().resolve("symlinked-root");
java.nio.file.Files.createSymbolicLink(symlinkedRoot, tmp.getRoot());
// Run the build, setting PWD to the above symlink. Typically, this causes compilers to use
// the symlinked directory, even though it's not the right project root.
BuildTarget target = BuildTargetFactory.newInstance("//:simple#default,static");
workspace
.runBuckCommandWithEnvironmentOverridesAndContext(
tmp.getRoot(),
Optional.empty(),
ImmutableMap.of("PWD", symlinkedRoot.toString()),
"build",
target.getFullyQualifiedName())
.assertSuccess();
// Verify that we still sanitized this path correctly.
Path lib = workspace.getPath(BuildTargets.getGenPath(filesystem, target, "%s/libsimple.a"));
String contents = Files.asByteSource(lib.toFile()).asCharSource(Charsets.ISO_8859_1).read();
assertFalse(lib.toString(), contents.contains(tmp.getRoot().toString()));
assertFalse(lib.toString(), contents.contains(symlinkedRoot.toString()));
folder.delete();
}