/** 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<Path> inputs = MorePaths.asPaths(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)); }
@Test public void testGetAndroidBootclasspathSupplierWithAndroidPlatformTarget() { BuildContext.Builder builder = BuildContext.builder(); // Set to non-null values. builder.setActionGraph(createMock(ActionGraph.class)); builder.setStepRunner(createMock(StepRunner.class)); builder.setProjectFilesystem(createMock(ProjectFilesystem.class)); builder.setArtifactCache(createMock(ArtifactCache.class)); builder.setJavaPackageFinder(createMock(JavaPackageFinder.class)); builder.setEventBus(BuckEventBusFactory.newInstance()); AndroidPlatformTarget androidPlatformTarget = createMock(AndroidPlatformTarget.class); List<Path> entries = ImmutableList.of( Paths.get("add-ons/addon-google_apis-google-15/libs/effects.jar"), Paths.get("add-ons/addon-google_apis-google-15/libs/maps.jar"), Paths.get("add-ons/addon-google_apis-google-15/libs/usb.jar")); expect(androidPlatformTarget.getBootclasspathEntries()).andReturn(entries); replay(androidPlatformTarget); builder.setAndroidBootclasspathForAndroidPlatformTarget(Optional.of(androidPlatformTarget)); BuildContext context = builder.build(); Supplier<String> androidBootclasspathSupplier = context.getAndroidBootclasspathSupplier(); String androidBootclasspath = MorePaths.pathWithUnixSeparators(androidBootclasspathSupplier.get()); assertEquals( "add-ons/addon-google_apis-google-15/libs/effects.jar:" + "add-ons/addon-google_apis-google-15/libs/maps.jar:" + "add-ons/addon-google_apis-google-15/libs/usb.jar", androidBootclasspath); // Call get() again to ensure that the underlying getBootclasspathEntries() is not called again // to verify that memoization is working as expected. androidBootclasspathSupplier.get(); verify(androidPlatformTarget); }
@Test public void verifyInputsWithoutOwnersAreCorrectlyReported() throws CmdLineException { // All files will be directories now FakeProjectFilesystem filesystem = new FakeProjectFilesystem() { @Override public File getFileForRelativePath(String pathRelativeToProjectRoot) { return new ExistingFile(getProjectRoot(), pathRelativeToProjectRoot); } }; // Empty graph MutableDirectedGraph<BuildRule> mutableGraph = new MutableDirectedGraph<BuildRule>(); DependencyGraph graph = new DependencyGraph(mutableGraph); // Inputs that should be treated as existing files String[] args = new String[] { "java/somefolder/badfolder/somefile.java", "java/somefolder/perfect.java", "com/test/subtest/random.java" }; ImmutableSortedSet<Path> inputs = MorePaths.asPaths(Arrays.asList(args)); // 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.owners.isEmpty()); assertTrue(report.nonFileInputs.isEmpty()); assertTrue(report.nonExistentInputs.isEmpty()); assertEquals(inputs, report.inputsWithNoOwners); }