@Test @SuppressWarnings("unchecked") public void testWriteModule() throws Exception { TargetNode<?> guavaTargetNode = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//third_party/guava:guava")) .addSrc(Paths.get("third_party/guava/src/Collections.java")) .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(); IjModuleGraph moduleGraph = IjModuleGraphTest.createModuleGraph(ImmutableSet.of(guavaTargetNode, baseTargetNode)); IjModule baseModule = IjModuleGraphTest.getModuleForTarget(moduleGraph, baseTargetNode); IjProjectTemplateDataPreparer dataPreparer = new IjProjectTemplateDataPreparer(javaPackageFinder, moduleGraph, filesystem); ContentRoot contentRoot = dataPreparer.getContentRoot(baseModule); assertEquals("file://$MODULE_DIR$/../../java/com/example/base", contentRoot.getUrl()); IjSourceFolder baseSourceFolder = contentRoot.getFolders().first(); assertEquals("sourceFolder", baseSourceFolder.getType()); assertFalse(baseSourceFolder.getIsTestSource()); assertEquals("com.example.base", baseSourceFolder.getPackagePrefix()); assertEquals("file://$MODULE_DIR$/../../java/com/example/base", baseSourceFolder.getUrl()); assertThat( dataPreparer.getDependencies(baseModule), contains( allOf( hasProperty("type", equalTo(IjDependencyListBuilder.Type.MODULE)), hasProperty( "data", equalTo( Optional.of( DependencyEntryData.builder() .setName("third_party_guava") .setScope(IjDependencyListBuilder.Scope.COMPILE) .setExported(false) .build())))), allOf(hasProperty("type", equalTo(IjDependencyListBuilder.Type.SOURCE_FOLDER))))); }
@Test public void testEmptyRootModule() throws Exception { Path baseTargetSrcFilePath = Paths.get("java/com/example/base/Base.java"); TargetNode<?> baseTargetNode = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//java/com/example/base:base")) .addSrc(baseTargetSrcFilePath) .build(); IjModuleGraph moduleGraph = IjModuleGraphTest.createModuleGraph(ImmutableSet.<TargetNode<?>>of(baseTargetNode)); IjProjectTemplateDataPreparer dataPreparer = new IjProjectTemplateDataPreparer(javaPackageFinder, moduleGraph, filesystem); assertThat( dataPreparer.getModulesToBeWritten(), containsInAnyOrder( IjModule.builder() .setModuleBasePath(Paths.get("java/com/example/base")) .setTargets(ImmutableSet.<TargetNode<?>>of(baseTargetNode)) .addFolders( IjFolder.builder() .setType(AbstractIjFolder.Type.SOURCE_FOLDER) .setPath(Paths.get("java/com/example/base")) .setInputs(ImmutableSortedSet.<Path>of(baseTargetSrcFilePath)) .setWantsPackagePrefix(true) .build()) .build(), IjModule.builder() .setModuleBasePath(Paths.get("")) .setTargets(ImmutableSet.<TargetNode<?>>of()) .build())); }
private SortedMap<String, TargetNode<?>> buildTargetNodes( ProjectFilesystem filesystem, String buildTarget) { SortedMap<String, TargetNode<?>> buildRules = Maps.newTreeMap(); BuildTarget target = BuildTargetFactory.newInstance(filesystem, buildTarget); TargetNode<?> node = JavaLibraryBuilder.createBuilder(target).build(); buildRules.put(buildTarget, node); return buildRules; }
@Test public void testClasspathTransitiveDepsBecomeFirstOrderDeps() throws Exception { BuildRuleResolver ruleResolver = new BuildRuleResolver(TargetGraph.EMPTY, new DefaultTargetNodeToBuildRuleTransformer()); BuildRule transitiveDep = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//exciting:dep")) .addSrc(Paths.get("Dep.java")) .build(ruleResolver); BuildRule dep = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//exciting:target")) .addSrc(Paths.get("Other.java")) .addDep(transitiveDep.getBuildTarget()) .build(ruleResolver); Genrule genrule = (Genrule) GenruleBuilder.newGenruleBuilder(BuildTargetFactory.newInstance("//:rule")) .setOut("out") .setCmd("$(classpath //exciting:target)") .build(ruleResolver); assertThat(genrule.getDeps(), Matchers.containsInAnyOrder(dep, transitiveDep)); }
@Test public void testHasMavenCoordinatesBuildRuleMissingCoordinates() throws Exception { BuildRule rule = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//test:no-mvn")) .build(resolver); try { expander.getMavenCoordinates(rule); fail("Expected MacroException; Rule does not contain maven coordinates"); } catch (MacroException e) { assertTrue( "Expected MacroException that indicates target does not have maven coordinates", e.getMessage().contains("does not have maven coordinates")); } }
/** Ensure that build rules with the same inputs but different deps have unique RuleKeys. */ @Test public void testRuleKeyDependsOnDeps() throws Exception { FakeProjectFilesystem filesystem = new FakeProjectFilesystem(); FileHashCache hashCache = new DefaultFileHashCache(filesystem); BuildRuleResolver ruleResolver1 = new BuildRuleResolver(TargetGraph.EMPTY, new BuildTargetNodeToBuildRuleTransformer()); BuildRuleResolver ruleResolver2 = new BuildRuleResolver(TargetGraph.EMPTY, new BuildTargetNodeToBuildRuleTransformer()); RuleKeyBuilderFactory ruleKeyBuilderFactory1 = new DefaultRuleKeyBuilderFactory(hashCache, new SourcePathResolver(ruleResolver1)); RuleKeyBuilderFactory ruleKeyBuilderFactory2 = new DefaultRuleKeyBuilderFactory(hashCache, new SourcePathResolver(ruleResolver2)); // Create a dependent build rule, //src/com/facebook/buck/cli:common. JavaLibraryBuilder builder = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//src/com/facebook/buck/cli:common")); BuildRule commonJavaLibrary = builder.build(ruleResolver1); builder.build(ruleResolver2); // Create a java_library() rule with no deps. Path mainSrc = Paths.get("src/com/facebook/buck/cli/Main.java"); filesystem.mkdirs(mainSrc.getParent()); filesystem.writeContentsToPath("hello", mainSrc); JavaLibraryBuilder javaLibraryBuilder = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//src/com/facebook/buck/cli:cli")) .addSrc(mainSrc); BuildRule libraryNoCommon = javaLibraryBuilder.build(ruleResolver1, filesystem); // Create the same java_library() rule, but with a dep on //src/com/facebook/buck/cli:common. javaLibraryBuilder.addDep(commonJavaLibrary.getBuildTarget()); BuildRule libraryWithCommon = javaLibraryBuilder.build(ruleResolver2, filesystem); // Assert that the RuleKeys are distinct. RuleKey r1 = ruleKeyBuilderFactory1.build(libraryNoCommon); RuleKey r2 = ruleKeyBuilderFactory2.build(libraryWithCommon); assertThat( "Rule keys should be distinct because the deps of the rules are different.", r1, not(equalTo(r2))); }
private BuildRule createSampleJavaBinaryRule(BuildRuleResolver ruleResolver) { // Create a java_binary that depends on a java_library so it is possible to create a // java_binary rule with a classpath entry and a main class. BuildRule javaLibrary = JavaLibraryBuilder.createBuilder( BuildTargetFactory.newInstance("//java/com/facebook/util:util")) .addSrc(Paths.get("java/com/facebook/util/ManifestGenerator.java")) .build(ruleResolver); BuildTarget buildTarget = BuildTargetFactory.newInstance("//java/com/facebook/util:ManifestGenerator"); return new JavaBinaryRuleBuilder(buildTarget) .setDeps(ImmutableSortedSet.of(javaLibrary.getBuildTarget())) .setMainClass("com.facebook.util.ManifestGenerator") .build(ruleResolver); }
@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 testHasMavenCoordinatesBuildRule() throws Exception { String mavenCoords = "org.foo:bar:1.0"; BuildRule rule = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//test:java")) .setMavenCoords(mavenCoords) .build(resolver); try { String actualCoords = expander.getMavenCoordinates(rule); assertEquals( "Return maven coordinates do not match provides ones", mavenCoords, actualCoords); } catch (MacroException e) { fail(String.format("Unexpected MacroException: %s", e.getMessage())); } }
@Test public void testExpansionOfMavenCoordinates() throws NoSuchBuildTargetException { String mavenCoords = "org.foo:bar:1.0"; BuildTarget target = BuildTargetFactory.newInstance("//:java"); JavaLibraryBuilder.createBuilder(target).setMavenCoords(mavenCoords).build(resolver); ProjectFilesystem filesystem = new FakeProjectFilesystem(); MacroHandler macroHandler = new MacroHandler(ImmutableMap.<String, MacroExpander>of("maven_coords", expander)); try { String expansion = macroHandler.expand( target, createCellRoots(filesystem), resolver, "$(maven_coords //:java)"); assertEquals("Return maven coordinates do not match provides ones", mavenCoords, expansion); } catch (MacroException e) { fail(String.format("Unexpected MacroException: %s", e.getMessage())); } }
@Test public void testShouldWarnUsersWhenThereIsNoOutputForARuleButLocationRequested() { BuildRuleResolver resolver = new BuildRuleResolver(); JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//cheese:java")) .build(resolver); BuildTarget target = BuildTargetFactory.newInstance("//cheese:cake"); ProjectFilesystem filesystem = new FakeProjectFilesystem(); MacroHandler macroHandler = new MacroHandler( ImmutableMap.<String, MacroExpander>of("location", new LocationMacroExpander())); try { macroHandler.expand( target, createCellRoots(filesystem), resolver, filesystem, "$(location //cheese:java)"); fail("Location was null. Expected HumanReadableException with helpful message."); } catch (MacroException e) { assertEquals( "expanding $(location //cheese:java): //cheese:java used" + " in location macro does not produce output", e.getMessage()); } }
@Test public void testCreatePackageLookupPahtSet() { TargetNode<?> guavaTargetNode = PrebuiltJarBuilder.createBuilder(BuildTargetFactory.newInstance("//lib:guava")) .setBinaryJar(Paths.get("lib/guava.jar")) .build(); Path sourcePath = Paths.get("java/com/src/Source.java"); Path subSourcePath = Paths.get("java/com/src/subpackage/SubSource.java"); TargetNode<?> srcTargetNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/com/src:src")) .addDep(guavaTargetNode.getBuildTarget()) .addSrc(sourcePath) .addSrc(subSourcePath) .build(); IjModuleGraph moduleGraph = IjModuleGraphTest.createModuleGraph(ImmutableSet.of(guavaTargetNode, srcTargetNode)); assertThat( IjProjectTemplateDataPreparer.createPackageLookupPathSet(moduleGraph), containsInAnyOrder(subSourcePath, sourcePath)); }
@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 public void testExcludePaths() throws Exception { /** * Fake filesystem structure .idea |- misc.xml .git |- HEAD java |- com |- BUCK |- data |- * wsad.txt |- src |- BUCK |- Source.java |- foo |- Foo.java |- src2 |- Code.java |- org |- bar * |- Bar.java lib |- BUCK |- guava.jar */ ImmutableSet<Path> paths = ImmutableSet.of( Paths.get(".idea/misc.xml"), Paths.get(".git/HEAD"), Paths.get("java/com/BUCK"), Paths.get("java/com/data/wsad.txt"), Paths.get("java/com/src/BUCK"), Paths.get("java/com/src/Source.java"), Paths.get("java/com/src/foo/Foo.java"), Paths.get("java/org/bar/Bar.java"), Paths.get("lib/BUCK"), Paths.get("lib/guava.jar")); FakeProjectFilesystem filesystemForExcludesTest = new FakeProjectFilesystem(new FakeClock(0), Paths.get(".").toAbsolutePath(), paths); TargetNode<?> guavaTargetNode = PrebuiltJarBuilder.createBuilder(BuildTargetFactory.newInstance("//lib:guava")) .setBinaryJar(Paths.get("lib/guava.jar")) .build(); TargetNode<?> srcTargetNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/com/src:src")) .addDep(guavaTargetNode.getBuildTarget()) .addSrc(Paths.get("java/com/src/Source.java")) .build(); TargetNode<?> src2TargetNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/com:src2")) .addDep(guavaTargetNode.getBuildTarget()) .addSrc(Paths.get("java/com/src2/Code.java")) .build(); TargetNode<?> rootTargetNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//:root")).build(); IjModuleGraph moduleGraph = IjModuleGraphTest.createModuleGraph( ImmutableSet.of(guavaTargetNode, srcTargetNode, src2TargetNode, rootTargetNode)); IjModule srcModule = IjModuleGraphTest.getModuleForTarget(moduleGraph, srcTargetNode); IjModule src2Module = IjModuleGraphTest.getModuleForTarget(moduleGraph, src2TargetNode); IjModule rootModule = IjModuleGraphTest.getModuleForTarget(moduleGraph, rootTargetNode); IjProjectTemplateDataPreparer dataPreparer = new IjProjectTemplateDataPreparer( javaPackageFinder, moduleGraph, filesystemForExcludesTest); assertEquals( ImmutableSet.of(Paths.get("java/com/src/foo")), distillExcludeFolders(dataPreparer.createExcludes(srcModule))); assertEquals( ImmutableSet.of(Paths.get("java/com/data")), distillExcludeFolders(dataPreparer.createExcludes(src2Module))); // In this case it's fine to exclude "lib" as there is no source code there. assertEquals( ImmutableSet.of(Paths.get(".git"), Paths.get("java/org"), Paths.get("lib")), distillExcludeFolders(dataPreparer.createExcludes(rootModule))); }
@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))))); }