use of com.facebook.buck.apple.xcode.xcodeproj.PBXProject in project buck by facebook.
the class ProjectGeneratorTest method testAppleLibraryHeaderGroupsWithMappedHeaders.
@Test
public void testAppleLibraryHeaderGroupsWithMappedHeaders() throws IOException {
BuildTarget privateGeneratedTarget = BuildTarget.builder(rootPath, "//foo", "generated1.h").build();
BuildTarget publicGeneratedTarget = BuildTarget.builder(rootPath, "//foo", "generated2.h").build();
TargetNode<?, ?> privateGeneratedNode = ExportFileBuilder.newExportFileBuilder(privateGeneratedTarget).build();
TargetNode<?, ?> publicGeneratedNode = ExportFileBuilder.newExportFileBuilder(publicGeneratedTarget).build();
BuildTarget buildTarget = BuildTarget.builder(rootPath, "//foo", "lib").build();
TargetNode<?, ?> node = AppleLibraryBuilder.createBuilder(buildTarget).setSrcs(ImmutableSortedSet.of()).setHeaders(ImmutableSortedMap.of("any/name.h", new FakeSourcePath("HeaderGroup1/foo.h"), "different/name.h", new FakeSourcePath("HeaderGroup2/baz.h"), "one/more/name.h", new DefaultBuildTargetSourcePath(privateGeneratedTarget))).setExportedHeaders(ImmutableSortedMap.of("yet/another/name.h", new FakeSourcePath("HeaderGroup1/bar.h"), "and/one/more.h", new DefaultBuildTargetSourcePath(publicGeneratedTarget))).build();
ProjectGenerator projectGenerator = createProjectGeneratorForCombinedProject(ImmutableSet.of(node, privateGeneratedNode, publicGeneratedNode));
projectGenerator.createXcodeProjects();
PBXProject project = projectGenerator.getGeneratedProject();
PBXGroup targetGroup = project.getMainGroup().getOrCreateChildGroupByName(buildTarget.getFullyQualifiedName());
PBXGroup sourcesGroup = targetGroup.getOrCreateChildGroupByName("Sources");
assertThat(sourcesGroup.getChildren(), hasSize(3));
PBXGroup group1 = (PBXGroup) Iterables.get(sourcesGroup.getChildren(), 0);
assertEquals("HeaderGroup1", group1.getName());
assertThat(group1.getChildren(), hasSize(2));
PBXFileReference fileRefFoo = (PBXFileReference) Iterables.get(group1.getChildren(), 0);
assertEquals("bar.h", fileRefFoo.getName());
PBXFileReference fileRefBar = (PBXFileReference) Iterables.get(group1.getChildren(), 1);
assertEquals("foo.h", fileRefBar.getName());
PBXGroup group2 = (PBXGroup) Iterables.get(sourcesGroup.getChildren(), 1);
assertEquals("HeaderGroup2", group2.getName());
assertThat(group2.getChildren(), hasSize(1));
PBXFileReference fileRefBaz = (PBXFileReference) Iterables.get(group2.getChildren(), 0);
assertEquals("baz.h", fileRefBaz.getName());
PBXGroup group3 = (PBXGroup) Iterables.get(sourcesGroup.getChildren(), 2);
assertEquals("foo", group3.getName());
assertThat(group3.getChildren(), hasSize(2));
PBXFileReference fileRefGenerated1 = (PBXFileReference) Iterables.get(group3.getChildren(), 0);
assertEquals("generated1.h", fileRefGenerated1.getName());
PBXFileReference fileRefGenerated2 = (PBXFileReference) Iterables.get(group3.getChildren(), 1);
assertEquals("generated2.h", fileRefGenerated2.getName());
// There should be no PBXHeadersBuildPhase in the 'Buck header map mode'.
PBXTarget target = assertTargetExistsAndReturnTarget(project, "//foo:lib");
assertEquals(0, target.getBuildPhases().stream().filter(input -> input instanceof PBXHeadersBuildPhase).count());
List<Path> headerSymlinkTrees = projectGenerator.getGeneratedHeaderSymlinkTrees();
assertThat(headerSymlinkTrees, hasSize(2));
assertEquals("buck-out/gen/_p/CwkbTNOBmb-pub", headerSymlinkTrees.get(0).toString());
assertThatHeaderSymlinkTreeContains(Paths.get("buck-out/gen/_p/CwkbTNOBmb-pub"), ImmutableMap.of("yet/another/name.h", "HeaderGroup1/bar.h", "and/one/more.h", "foo/generated2.h"));
assertEquals("buck-out/gen/_p/CwkbTNOBmb-priv", headerSymlinkTrees.get(1).toString());
assertThatHeaderSymlinkTreeContains(Paths.get("buck-out/gen/_p/CwkbTNOBmb-priv"), ImmutableMap.of("any/name.h", "HeaderGroup1/foo.h", "different/name.h", "HeaderGroup2/baz.h", "one/more/name.h", "foo/generated1.h"));
}
use of com.facebook.buck.apple.xcode.xcodeproj.PBXProject in project buck by facebook.
the class ProjectGeneratorTest method testAppleBundleRuleWithCustomXcodeProductType.
@Test
public void testAppleBundleRuleWithCustomXcodeProductType() throws IOException {
BuildTarget sharedLibraryTarget = BuildTarget.builder(rootPath, "//dep", "shared").addFlavors(CxxDescriptionEnhancer.SHARED_FLAVOR).build();
TargetNode<?, ?> sharedLibraryNode = AppleLibraryBuilder.createBuilder(sharedLibraryTarget).setConfigs(ImmutableSortedMap.of("Debug", ImmutableMap.of())).build();
BuildTarget buildTarget = BuildTarget.builder(rootPath, "//foo", "custombundle").build();
TargetNode<?, ?> node = AppleBundleBuilder.createBuilder(buildTarget).setExtension(Either.ofLeft(AppleBundleExtension.FRAMEWORK)).setInfoPlist(new FakeSourcePath("Info.plist")).setBinary(sharedLibraryTarget).setXcodeProductType(Optional.of("com.facebook.buck.niftyProductType")).build();
ProjectGenerator projectGenerator = createProjectGeneratorForCombinedProject(ImmutableSet.of(sharedLibraryNode, node), ImmutableSet.of());
projectGenerator.createXcodeProjects();
PBXProject project = projectGenerator.getGeneratedProject();
PBXTarget target = assertTargetExistsAndReturnTarget(project, "//foo:custombundle");
assertEquals(target.getProductType(), ProductType.of("com.facebook.buck.niftyProductType"));
assertThat(target.isa(), equalTo("PBXNativeTarget"));
PBXFileReference productReference = target.getProductReference();
assertEquals("custombundle.framework", productReference.getName());
assertEquals(Optional.of("wrapper.framework"), productReference.getExplicitFileType());
ImmutableMap<String, String> settings = getBuildSettings(buildTarget, target, "Debug");
assertEquals("framework", settings.get("WRAPPER_EXTENSION"));
}
use of com.facebook.buck.apple.xcode.xcodeproj.PBXProject in project buck by facebook.
the class ProjectGeneratorTest method generatedProjectConfigurationListIsUnionOfAllTargetConfigurations.
/**
* The project configurations should have named entries corresponding to every existing target
* configuration for targets in the project.
*/
@Test
public void generatedProjectConfigurationListIsUnionOfAllTargetConfigurations() throws IOException {
BuildTarget buildTarget1 = BuildTarget.builder(rootPath, "//foo", "rule1").build();
TargetNode<?, ?> node1 = AppleLibraryBuilder.createBuilder(buildTarget1).setConfigs(ImmutableSortedMap.of("Conf1", ImmutableMap.of(), "Conf2", ImmutableMap.of())).build();
BuildTarget buildTarget2 = BuildTarget.builder(rootPath, "//foo", "rule2").build();
TargetNode<?, ?> node2 = AppleLibraryBuilder.createBuilder(buildTarget2).setConfigs(ImmutableSortedMap.of("Conf2", ImmutableMap.of(), "Conf3", ImmutableMap.of())).build();
ProjectGenerator projectGenerator = createProjectGeneratorForCombinedProject(ImmutableSet.of(node1, node2));
projectGenerator.createXcodeProjects();
PBXProject generatedProject = projectGenerator.getGeneratedProject();
Map<String, XCBuildConfiguration> configurations = generatedProject.getBuildConfigurationList().getBuildConfigurationsByName().asMap();
assertThat(configurations, hasKey("Conf1"));
assertThat(configurations, hasKey("Conf2"));
assertThat(configurations, hasKey("Conf3"));
}
use of com.facebook.buck.apple.xcode.xcodeproj.PBXProject in project buck by facebook.
the class ProjectGeneratorTest method testAppleLibraryHeaderGroupsWithHeaderSymlinkTrees.
@Test
public void testAppleLibraryHeaderGroupsWithHeaderSymlinkTrees() throws IOException {
BuildTarget buildTarget = BuildTarget.builder(rootPath, "//foo", "lib").build();
TargetNode<?, ?> node = AppleLibraryBuilder.createBuilder(buildTarget).setSrcs(ImmutableSortedSet.of()).setHeaders(ImmutableSortedSet.of(new FakeSourcePath("HeaderGroup1/foo.h"), new FakeSourcePath("HeaderGroup2/baz.h"))).setExportedHeaders(ImmutableSortedSet.of(new FakeSourcePath("HeaderGroup1/bar.h"))).build();
ProjectGenerator projectGenerator = createProjectGeneratorForCombinedProject(ImmutableSet.of(node));
projectGenerator.createXcodeProjects();
PBXProject project = projectGenerator.getGeneratedProject();
PBXGroup targetGroup = project.getMainGroup().getOrCreateChildGroupByName(buildTarget.getFullyQualifiedName());
PBXGroup sourcesGroup = targetGroup.getOrCreateChildGroupByName("Sources");
assertThat(sourcesGroup.getChildren(), hasSize(2));
PBXGroup group1 = (PBXGroup) Iterables.get(sourcesGroup.getChildren(), 0);
assertEquals("HeaderGroup1", group1.getName());
assertThat(group1.getChildren(), hasSize(2));
PBXFileReference fileRefFoo = (PBXFileReference) Iterables.get(group1.getChildren(), 0);
assertEquals("bar.h", fileRefFoo.getName());
PBXFileReference fileRefBar = (PBXFileReference) Iterables.get(group1.getChildren(), 1);
assertEquals("foo.h", fileRefBar.getName());
PBXGroup group2 = (PBXGroup) Iterables.get(sourcesGroup.getChildren(), 1);
assertEquals("HeaderGroup2", group2.getName());
assertThat(group2.getChildren(), hasSize(1));
PBXFileReference fileRefBaz = (PBXFileReference) Iterables.get(group2.getChildren(), 0);
assertEquals("baz.h", fileRefBaz.getName());
// There should be no PBXHeadersBuildPhase in the 'Buck header map mode'.
PBXTarget target = assertTargetExistsAndReturnTarget(project, "//foo:lib");
assertEquals(0, target.getBuildPhases().stream().filter(input -> input instanceof PBXHeadersBuildPhase).count());
List<Path> headerSymlinkTrees = projectGenerator.getGeneratedHeaderSymlinkTrees();
assertThat(headerSymlinkTrees, hasSize(2));
assertEquals("buck-out/gen/_p/CwkbTNOBmb-pub", headerSymlinkTrees.get(0).toString());
assertThatHeaderSymlinkTreeContains(Paths.get("buck-out/gen/_p/CwkbTNOBmb-pub"), ImmutableMap.of("lib/bar.h", "HeaderGroup1/bar.h"));
assertEquals("buck-out/gen/_p/CwkbTNOBmb-priv", headerSymlinkTrees.get(1).toString());
assertThatHeaderSymlinkTreeContains(Paths.get("buck-out/gen/_p/CwkbTNOBmb-priv"), ImmutableMap.<String, String>builder().put("lib/foo.h", "HeaderGroup1/foo.h").put("lib/baz.h", "HeaderGroup2/baz.h").put("foo.h", "HeaderGroup1/foo.h").put("bar.h", "HeaderGroup1/bar.h").put("baz.h", "HeaderGroup2/baz.h").build());
}
use of com.facebook.buck.apple.xcode.xcodeproj.PBXProject in project buck by facebook.
the class ProjectGeneratorTest method testCreateDirectoryStructure.
@Test
public void testCreateDirectoryStructure() throws IOException {
BuildTarget buildTarget1 = BuildTarget.builder(rootPath, "//foo/bar", "target1").build();
TargetNode<?, ?> node1 = AppleLibraryBuilder.createBuilder(buildTarget1).build();
BuildTarget buildTarget2 = BuildTarget.builder(rootPath, "//foo/foo", "target2").build();
TargetNode<?, ?> node2 = AppleLibraryBuilder.createBuilder(buildTarget2).build();
ProjectGenerator projectGenerator = createProjectGeneratorForCombinedProject(ImmutableSet.of(node1, node2), ImmutableSet.of(ProjectGenerator.Option.CREATE_DIRECTORY_STRUCTURE, ProjectGenerator.Option.USE_SHORT_NAMES_FOR_TARGETS));
projectGenerator.createXcodeProjects();
PBXProject project = projectGenerator.getGeneratedProject();
PBXGroup mainGroup = project.getMainGroup();
PBXGroup groupFoo = null;
for (PBXReference reference : mainGroup.getChildren()) {
if (reference instanceof PBXGroup && "foo".equals(reference.getName())) {
groupFoo = (PBXGroup) reference;
}
}
assertNotNull("Project should have a group called foo", groupFoo);
assertEquals("foo", groupFoo.getName());
assertThat(groupFoo.getChildren(), hasSize(2));
PBXGroup groupFooBar = (PBXGroup) Iterables.get(groupFoo.getChildren(), 0);
assertEquals("bar", groupFooBar.getName());
assertThat(groupFooBar.getChildren(), hasSize(1));
PBXGroup groupFooFoo = (PBXGroup) Iterables.get(groupFoo.getChildren(), 1);
assertEquals("foo", groupFooFoo.getName());
assertThat(groupFooFoo.getChildren(), hasSize(1));
PBXGroup groupFooBarTarget1 = (PBXGroup) Iterables.get(groupFooBar.getChildren(), 0);
assertEquals("target1", groupFooBarTarget1.getName());
PBXGroup groupFooFooTarget2 = (PBXGroup) Iterables.get(groupFooFoo.getChildren(), 0);
assertEquals("target2", groupFooFooTarget2.getName());
}
Aggregations