@Test public void testGetMatchingAppleTestBuildTarget() throws CmdLineException, IOException { BuildTarget libraryTarget = BuildTargetFactory.newInstance("//foo:lib"); TargetNode<?> libraryNode = AppleLibraryBuilder.createBuilder(libraryTarget) .setSrcs( Optional.of( ImmutableSortedSet.of(SourceWithFlags.of(new FakeSourcePath("foo/foo.m"))))) .build(); BuildTarget testTarget = BuildTargetFactory.newInstance("//foo:xctest"); TargetNode<?> testNode = AppleTestBuilder.createBuilder(testTarget) .setExtension(Either.<AppleBundleExtension, String>ofLeft(AppleBundleExtension.XCTEST)) .setSrcs( Optional.of( ImmutableSortedSet.of(SourceWithFlags.of(new FakeSourcePath("foo/testfoo.m"))))) .setDeps(Optional.of(ImmutableSortedSet.of(libraryTarget))) .build(); ImmutableSet<TargetNode<?>> nodes = ImmutableSet.of(libraryNode, testNode); TargetGraph targetGraph = TargetGraphFactory.newInstance(nodes); // No target depends on the referenced file. SortedMap<String, TargetNode<?>> matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("foo/bar.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertTrue(matchingBuildRules.isEmpty()); // Both AppleLibrary nodes, AppleBundle, and AppleTest match the referenced file. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("foo/foo.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals(ImmutableSet.of("//foo:lib", "//foo:xctest"), matchingBuildRules.keySet()); // The test AppleLibrary, AppleBundle and AppleTest match the referenced file. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("foo/testfoo.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals(ImmutableSet.of("//foo:xctest"), matchingBuildRules.keySet()); }
@Test public void testDetectTestChanges() throws CmdLineException, IOException { BuildTarget libraryTarget = BuildTargetFactory.newInstance("//foo:lib"); BuildTarget libraryTestTarget1 = BuildTargetFactory.newInstance("//foo:xctest1"); BuildTarget libraryTestTarget2 = BuildTargetFactory.newInstance("//foo:xctest2"); BuildTarget testLibraryTarget = BuildTargetFactory.newInstance("//testlib:testlib"); BuildTarget testLibraryTestTarget = BuildTargetFactory.newInstance("//testlib:testlib-xctest"); TargetNode<?> libraryNode = AppleLibraryBuilder.createBuilder(libraryTarget) .setSrcs( Optional.of( ImmutableSortedSet.of(SourceWithFlags.of(new FakeSourcePath("foo/foo.m"))))) .setTests(Optional.of(ImmutableSortedSet.of(libraryTestTarget1, libraryTestTarget2))) .build(); TargetNode<?> libraryTestNode1 = AppleTestBuilder.createBuilder(libraryTestTarget1) .setExtension(Either.<AppleBundleExtension, String>ofLeft(AppleBundleExtension.XCTEST)) .setSrcs( Optional.of( ImmutableSortedSet.of( SourceWithFlags.of(new FakeSourcePath("foo/testfoo1.m"))))) .setDeps(Optional.of(ImmutableSortedSet.of(libraryTarget))) .build(); TargetNode<?> libraryTestNode2 = AppleTestBuilder.createBuilder(libraryTestTarget2) .setExtension(Either.<AppleBundleExtension, String>ofLeft(AppleBundleExtension.XCTEST)) .setSrcs( Optional.of( ImmutableSortedSet.of( SourceWithFlags.of(new FakeSourcePath("foo/testfoo2.m"))))) .setDeps(Optional.of(ImmutableSortedSet.of(testLibraryTarget))) .build(); TargetNode<?> testLibraryNode = AppleLibraryBuilder.createBuilder(testLibraryTarget) .setSrcs( Optional.of( ImmutableSortedSet.of( SourceWithFlags.of(new FakeSourcePath("testlib/testlib.m"))))) .setTests(Optional.of(ImmutableSortedSet.of(testLibraryTestTarget))) .build(); TargetNode<?> testLibraryTestNode = AppleTestBuilder.createBuilder(testLibraryTestTarget) .setExtension(Either.<AppleBundleExtension, String>ofLeft(AppleBundleExtension.XCTEST)) .setSrcs( Optional.of( ImmutableSortedSet.of( SourceWithFlags.of(new FakeSourcePath("testlib/testlib-test.m"))))) .setDeps(Optional.of(ImmutableSortedSet.of(testLibraryTarget))) .build(); ImmutableSet<TargetNode<?>> nodes = ImmutableSet.of( libraryNode, libraryTestNode1, libraryTestNode2, testLibraryNode, testLibraryTestNode); TargetGraph targetGraph = TargetGraphFactory.newInstance(nodes); // No target depends on the referenced file. SortedMap<String, TargetNode<?>> matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("foo/bar.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), true, "BUCK"); assertTrue(matchingBuildRules.isEmpty()); // Test1, test2 and the library depend on the referenced file. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("foo/testfoo1.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), true, "BUCK"); assertEquals(ImmutableSet.of("//foo:lib", "//foo:xctest1"), matchingBuildRules.keySet()); // Test1, test2 and the library depend on the referenced file. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("foo/testfoo2.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), true, "BUCK"); assertEquals( ImmutableSet.of("//foo:lib", "//foo:xctest1", "//foo:xctest2"), matchingBuildRules.keySet()); // Library, test1, test2, test library and its test depend on the referenced file. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("testlib/testlib.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), true, "BUCK"); assertEquals( ImmutableSet.of( "//foo:lib", "//foo:xctest1", "//foo:xctest2", "//testlib:testlib", "//testlib:testlib-xctest"), matchingBuildRules.keySet()); // Library, test1, test2, test library and its test depend on the referenced file. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("testlib/testlib-test.m"))), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), true, "BUCK"); assertEquals( ImmutableSet.of( "//foo:lib", "//foo:xctest1", "//foo:xctest2", "//testlib:testlib", "//testlib:testlib-xctest"), matchingBuildRules.keySet()); }