/** Verify that owners are correctly detected: - one owner, multiple inputs, json output */ @Test public void verifyInputsWithOneOwnerAreCorrectlyReportedInJson() throws CmdLineException, IOException { // All files will be directories now FakeProjectFilesystem filesystem = new FakeProjectFilesystem() { @Override public File getFileForRelativePath(String pathRelativeToProjectRoot) { return new ExistingFile(getProjectRoot(), pathRelativeToProjectRoot); } }; // Create inputs String[] args = new String[] { "java/somefolder/badfolder/somefile.java", "java/somefolder/perfect.java", "com/test/subtest/random.java" }; ImmutableSortedSet<Path> inputs = MorePaths.asPaths(ImmutableSortedSet.copyOf(args)); // Build rule that owns all inputs BuildTarget target = new BuildTarget("//base/name", "name"); BuildRule ownerRule = new StubBuildRule(target, inputs); // Create graph MutableDirectedGraph<BuildRule> mutableGraph = new MutableDirectedGraph<BuildRule>(); mutableGraph.addNode(ownerRule); DependencyGraph graph = new DependencyGraph(mutableGraph); // Create options AuditOwnerOptions options = getOptions(args); // Create command under test AuditOwnerCommand command = createAuditOwnerCommand(filesystem); // Generate report and verify nonFileInputs are filled in as expected. AuditOwnerCommand.OwnersReport report = command.generateOwnersReport(graph, options); command.printOwnersOnlyJsonReport(report); String expectedJson = Joiner.on("") .join( "{", "\"com/test/subtest/random.java\":[\"//base/name:name\"],", "\"java/somefolder/badfolder/somefile.java\":[\"//base/name:name\"],", "\"java/somefolder/perfect.java\":[\"//base/name:name\"]", "}"); assertEquals(expectedJson, console.getTextWrittenToStdOut()); assertEquals("", console.getTextWrittenToStdErr()); }
/** Verify that owners are correctly detected: - inputs that belong to multiple targets */ @Test public void verifyInputsWithMultipleOwnersAreCorrectlyReported() throws CmdLineException { // All files will be directories now FakeProjectFilesystem filesystem = new FakeProjectFilesystem() { @Override public File getFileForRelativePath(String pathRelativeToProjectRoot) { return new ExistingFile(getProjectRoot(), pathRelativeToProjectRoot); } }; // Create inputs String[] args = new String[] { "java/somefolder/badfolder/somefile.java", "java/somefolder/perfect.java", "com/test/subtest/random.java" }; ImmutableSortedSet<InputRule> inputs = InputRule.inputPathsAsInputRules(ImmutableSortedSet.copyOf(args)); // Build rule that owns all inputs BuildTarget target1 = BuildTargetFactory.newInstance("//base/name1", "name1"); BuildTarget target2 = BuildTargetFactory.newInstance("//base/name2", "name2"); BuildRule owner1Rule = new StubBuildRule(target1, inputs); BuildRule owner2Rule = new StubBuildRule(target2, inputs); // Create graph MutableDirectedGraph<BuildRule> mutableGraph = new MutableDirectedGraph<BuildRule>(); mutableGraph.addNode(owner1Rule); mutableGraph.addNode(owner2Rule); DependencyGraph graph = new DependencyGraph(mutableGraph); // Create options AuditOwnerOptions options = getOptions(args); // Create command under test AuditOwnerCommand command = createAuditOwnerCommand(filesystem); // Generate report and verify nonFileInputs are filled in as expected. AuditOwnerCommand.OwnersReport report = command.generateOwnersReport(graph, options); assertTrue(report.nonFileInputs.isEmpty()); assertTrue(report.nonExistentInputs.isEmpty()); assertTrue(report.inputsWithNoOwners.isEmpty()); assertTrue(report.owners.containsKey(owner1Rule)); assertTrue(report.owners.containsKey(owner2Rule)); assertEquals(owner1Rule.getInputs(), report.owners.get(owner1Rule)); assertEquals(owner2Rule.getInputs(), report.owners.get(owner2Rule)); }