@Test public void testModuleIndex() throws Exception { TargetNode<?> guavaTargetNode = PrebuiltJarBuilder.createBuilder( BuildTargetFactory.newInstance("//third-party/guava:guava")) .setBinaryJar(Paths.get("third-party/guava/guava.jar")) .build(); TargetNode<?> baseTargetNode = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//java/com/example/base:base")) .addDep(guavaTargetNode.getBuildTarget()) .addSrc(Paths.get("java/com/example/base/Base.java")) .build(); TargetNode<?> baseTestsTargetNode = JavaTestBuilder.createBuilder( BuildTargetFactory.newInstance("//javatests/com/example/base:base")) .addDep(baseTargetNode.getBuildTarget()) .addSrc(Paths.get("javatests/com/example/base/Base.java")) .build(); IjModuleGraph moduleGraph = IjModuleGraphTest.createModuleGraph( ImmutableSet.of(guavaTargetNode, baseTargetNode, baseTestsTargetNode)); IjProjectTemplateDataPreparer dataPreparer = new IjProjectTemplateDataPreparer(javaPackageFinder, moduleGraph, filesystem); // Libraries don't go into the index. assertEquals( ImmutableSet.of( ModuleIndexEntry.builder() .setFileUrl("file://$PROJECT_DIR$/.idea/modules/project_root.iml") .setFilePath(Paths.get(".idea/modules/project_root.iml")) .build(), ModuleIndexEntry.builder() .setGroup("modules") .setFileUrl("file://$PROJECT_DIR$/.idea/modules/java_com_example_base.iml") .setFilePath(Paths.get(".idea/modules/java_com_example_base.iml")) .build(), ModuleIndexEntry.builder() .setGroup("modules") .setFileUrl("file://$PROJECT_DIR$/.idea/modules/javatests_com_example_base.iml") .setFilePath(Paths.get(".idea/modules/javatests_com_example_base.iml")) .build()), dataPreparer.getModuleIndexEntries()); }
@Test public void testGetMatchingBuildTargets() throws CmdLineException, IOException { BuildTarget prebuiltJarTarget = BuildTargetFactory.newInstance("//empty:empty"); TargetNode<?> prebuiltJarNode = PrebuiltJarBuilder.createBuilder(prebuiltJarTarget) .setBinaryJar(Paths.get("spoof")) .build(); BuildTarget javaLibraryTarget = BuildTargetFactory.newInstance("//javasrc:java-library"); TargetNode<?> javaLibraryNode = JavaLibraryBuilder.createBuilder(javaLibraryTarget) .addSrc(Paths.get("javasrc/JavaLibrary.java")) .addDep(prebuiltJarTarget) .build(); BuildTarget javaTestTarget = BuildTargetFactory.newInstance("//javatest:test-java-library"); TargetNode<?> javaTestNode = JavaTestBuilder.createBuilder(javaTestTarget) .addSrc(Paths.get("javatest/TestJavaLibrary.java")) .addDep(javaLibraryTarget) .build(); ImmutableSet<TargetNode<?>> nodes = ImmutableSet.of(prebuiltJarNode, javaLibraryNode, javaTestNode); TargetGraph targetGraph = TargetGraphFactory.newInstance(nodes); ImmutableSet<Path> referencedFiles; // No target depends on the referenced file. referencedFiles = ImmutableSet.of(Paths.get("excludesrc/CannotFind.java")); SortedMap<String, TargetNode<?>> matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(referencedFiles), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertTrue(matchingBuildRules.isEmpty()); // Only test-android-library target depends on the referenced file. referencedFiles = ImmutableSet.of(Paths.get("javatest/TestJavaLibrary.java")); matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(referencedFiles), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals(ImmutableSet.of("//javatest:test-java-library"), matchingBuildRules.keySet()); // The test-android-library target indirectly depends on the referenced file, // while test-java-library target directly depends on the referenced file. referencedFiles = ImmutableSet.of(Paths.get("javasrc/JavaLibrary.java")); matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(referencedFiles), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals( ImmutableSet.of("//javatest:test-java-library", "//javasrc:java-library"), matchingBuildRules.keySet()); // Verify that BUCK files show up as referenced files. referencedFiles = ImmutableSet.of(Paths.get("javasrc/BUCK")); matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(referencedFiles), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals( ImmutableSet.of("//javatest:test-java-library", "//javasrc:java-library"), matchingBuildRules.keySet()); // Output target only need to depend on one referenced file. referencedFiles = ImmutableSet.of( Paths.get("javatest/TestJavaLibrary.java"), Paths.get("othersrc/CannotFind.java")); matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(referencedFiles), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals(ImmutableSet.of("//javatest:test-java-library"), matchingBuildRules.keySet()); // If no referenced file, means this filter is disabled, we can find all targets. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.<ImmutableSet<Path>>absent(), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals( ImmutableSet.of("//javatest:test-java-library", "//javasrc:java-library", "//empty:empty"), matchingBuildRules.keySet()); // Specify java_test, java_library as type filters. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.<ImmutableSet<Path>>absent(), Optional.<ImmutableSet<BuildTarget>>absent(), Optional.of(ImmutableSet.of(JavaTestDescription.TYPE, JavaLibraryDescription.TYPE)), false, "BUCK"); assertEquals( ImmutableSet.of("//javatest:test-java-library", "//javasrc:java-library"), matchingBuildRules.keySet()); // Specify java_test, java_library, and a rule name as type filters. matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.<ImmutableSet<Path>>absent(), Optional.of(ImmutableSet.of(BuildTargetFactory.newInstance("//javasrc:java-library"))), Optional.of(ImmutableSet.of(JavaTestDescription.TYPE, JavaLibraryDescription.TYPE)), false, "BUCK"); assertEquals(ImmutableSet.of("//javasrc:java-library"), matchingBuildRules.keySet()); // Only filter by BuildTarget matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.<ImmutableSet<Path>>absent(), Optional.of(ImmutableSet.of(BuildTargetFactory.newInstance("//javasrc:java-library"))), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals(ImmutableSet.of("//javasrc:java-library"), matchingBuildRules.keySet()); // Filter by BuildTarget and Referenced Files matchingBuildRules = targetsCommand.getMatchingNodes( targetGraph, Optional.of(ImmutableSet.of(Paths.get("javatest/TestJavaLibrary.java"))), Optional.of(ImmutableSet.of(BuildTargetFactory.newInstance("//javasrc:java-library"))), Optional.<ImmutableSet<BuildRuleType>>absent(), false, "BUCK"); assertEquals(ImmutableSet.<String>of(), matchingBuildRules.keySet()); }
@Test @SuppressWarnings("unchecked") public void testDependencies() throws Exception { TargetNode<?> hamcrestTargetNode = PrebuiltJarBuilder.createBuilder( BuildTargetFactory.newInstance("//third-party/hamcrest:hamcrest")) .setBinaryJar(Paths.get("third-party/hamcrest/hamcrest.jar")) .build(); TargetNode<?> guavaTargetNode = PrebuiltJarBuilder.createBuilder( BuildTargetFactory.newInstance("//third-party/guava:guava")) .setBinaryJar(Paths.get("third-party/guava/guava.jar")) .build(); TargetNode<?> baseTargetNode = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//java/com/example/base:base")) .addDep(guavaTargetNode.getBuildTarget()) .addSrc(Paths.get("java/com/example/base/Base.java")) .build(); TargetNode<?> baseGenruleTarget = GenruleBuilder.newGenruleBuilder( BuildTargetFactory.newInstance("//java/com/example/base:genrule")) .build(); TargetNode<?> baseInlineTestsTargetNode = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//java/com/example/base:tests")) .addDep(hamcrestTargetNode.getBuildTarget()) .addSrc(Paths.get("java/com/example/base/TestBase.java")) .addSrcTarget(baseGenruleTarget.getBuildTarget()) .build(); TargetNode<?> baseTestsTargetNode = JavaTestBuilder.createBuilder( BuildTargetFactory.newInstance("//javatests/com/example/base:base")) .addDep(baseTargetNode.getBuildTarget()) .addDep(hamcrestTargetNode.getBuildTarget()) .addSrc(Paths.get("javatests/com/example/base/Base.java")) .build(); IjModuleGraph moduleGraph = IjModuleGraphTest.createModuleGraph( ImmutableSet.of( hamcrestTargetNode, guavaTargetNode, baseTargetNode, baseGenruleTarget, baseInlineTestsTargetNode, baseTestsTargetNode), ImmutableMap.<TargetNode<?>, Path>of( baseInlineTestsTargetNode, Paths.get("buck-out/baseInlineTests.jar")), Functions.constant(Optional.<Path>absent())); IjLibrary hamcrestLibrary = IjModuleGraphTest.getLibraryForTarget(moduleGraph, hamcrestTargetNode); IjLibrary guavaLibrary = IjModuleGraphTest.getLibraryForTarget(moduleGraph, guavaTargetNode); IjModule baseModule = IjModuleGraphTest.getModuleForTarget(moduleGraph, baseTargetNode); IjModule baseTestModule = IjModuleGraphTest.getModuleForTarget(moduleGraph, baseTestsTargetNode); IjProjectTemplateDataPreparer dataPreparer = new IjProjectTemplateDataPreparer(javaPackageFinder, moduleGraph, filesystem); assertEquals( IjModuleGraphTest.getModuleForTarget(moduleGraph, baseInlineTestsTargetNode), IjModuleGraphTest.getModuleForTarget(moduleGraph, baseTargetNode)); DependencyEntryData.Builder dependencyEntryBuilder = DependencyEntryData.builder().setExported(false); assertThat( dataPreparer.getDependencies(baseModule), contains( allOf( hasProperty("type", equalTo(IjDependencyListBuilder.Type.LIBRARY)), hasProperty( "data", equalTo( Optional.of( dependencyEntryBuilder .setName(guavaLibrary.getName()) .setScope(IjDependencyListBuilder.Scope.COMPILE) .build())))), allOf( hasProperty("type", equalTo(IjDependencyListBuilder.Type.LIBRARY)), hasProperty( "data", equalTo( Optional.of( dependencyEntryBuilder .setName(hamcrestLibrary.getName()) .setScope(IjDependencyListBuilder.Scope.COMPILE) .build())))), allOf(hasProperty("type", equalTo(IjDependencyListBuilder.Type.SOURCE_FOLDER))), allOf( hasProperty("type", equalTo(IjDependencyListBuilder.Type.LIBRARY)), hasProperty( "data", equalTo( Optional.of( DependencyEntryData.builder() .setExported(true) .setName("library_java_com_example_base_tests") .setScope(IjDependencyListBuilder.Scope.PROVIDED) .build())))))); assertThat( dataPreparer.getDependencies(baseTestModule), contains( allOf( hasProperty("type", equalTo(IjDependencyListBuilder.Type.MODULE)), hasProperty( "data", equalTo( Optional.of( dependencyEntryBuilder .setName(baseModule.getName()) .setScope(IjDependencyListBuilder.Scope.TEST) .build())))), allOf( hasProperty("type", equalTo(IjDependencyListBuilder.Type.LIBRARY)), hasProperty( "data", equalTo( Optional.of( dependencyEntryBuilder .setName(hamcrestLibrary.getName()) .setScope(IjDependencyListBuilder.Scope.TEST) .build())))), allOf(hasProperty("type", equalTo(IjDependencyListBuilder.Type.SOURCE_FOLDER))))); }