[GN] Add a few more unit tests for Xcode objects.
This CL adds unit test files for Xcode objects in
tools/gn/xcode_object.h, and specifically tests the mapping between
a object and its class enum type and the mapping between a classe type
and its name as a string.
Bug: 742258
Change-Id: Iab70bc2f3c0eedccd427e618d74f8077dcaee5c7
Reviewed-on: https://chromium-review.googlesource.com/630699
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Yuke Liao <liaoyuke@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#497064}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: da4fc47d51d4aa4da88816fb33b255be01d95885
diff --git a/tools/gn/xcode_object_unittest.cc b/tools/gn/xcode_object_unittest.cc
index 512f552..4e04946 100644
--- a/tools/gn/xcode_object_unittest.cc
+++ b/tools/gn/xcode_object_unittest.cc
@@ -7,88 +7,319 @@
#include "base/memory/ptr_util.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace {
+
+// Instantiate a PBXSourcesBuildPhase object.
+std::unique_ptr<PBXSourcesBuildPhase> GetPBXSourcesBuildPhaseObject() {
+ std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase(
+ new PBXSourcesBuildPhase());
+ return pbx_sources_build_phase;
+}
+
+// Instantiate a PBXFrameworksBuildPhase object.
+std::unique_ptr<PBXFrameworksBuildPhase> GetPBXFrameworksBuildPhaseObject() {
+ std::unique_ptr<PBXFrameworksBuildPhase> pbx_frameworks_build_phase(
+ new PBXFrameworksBuildPhase());
+ return pbx_frameworks_build_phase;
+}
+
+// Instantiate a PBXShellScriptBuildPhase object with arbitrary names.
+std::unique_ptr<PBXShellScriptBuildPhase> GetPBXShellScriptBuildPhaseObject() {
+ std::unique_ptr<PBXShellScriptBuildPhase> pbx_shell_script_build_phase(
+ new PBXShellScriptBuildPhase("name", "shell_script"));
+ return pbx_shell_script_build_phase;
+}
+
+// Instantiate a PBXGroup object with arbitrary names.
+std::unique_ptr<PBXGroup> GetPBXGroupObject() {
+ std::unique_ptr<PBXGroup> pbx_group(new PBXGroup("/dir1/dir2", "group"));
+ return pbx_group;
+}
+
+// Instantiate a PBXProject object with arbitrary names.
+std::unique_ptr<PBXProject> GetPBXProjectObject() {
+ std::unique_ptr<PBXProject> pbx_project(
+ new PBXProject("project", "config", "out/build", PBXAttributes()));
+ return pbx_project;
+}
+
+// Instantiate a PBXFileReference object with arbitrary names.
+std::unique_ptr<PBXFileReference> GetPBXFileReferenceObject() {
+ std::unique_ptr<PBXFileReference> pbx_file_reference(new PBXFileReference(
+ "product.app", "product.app", "wrapper.application"));
+ return pbx_file_reference;
+}
+
+// Instantiate a PBXBuildFile object.
+std::unique_ptr<PBXBuildFile> GetPBXBuildFileObject(
+ const PBXFileReference* file_reference,
+ const PBXSourcesBuildPhase* build_phase) {
+ std::unique_ptr<PBXBuildFile> pbx_build_file(
+ new PBXBuildFile(file_reference, build_phase, CompilerFlags::NONE));
+ return pbx_build_file;
+}
+
+// Instantiate a PBXAggregateTarget object with arbitrary names.
+std::unique_ptr<PBXAggregateTarget> GetPBXAggregateTargetObject() {
+ std::unique_ptr<PBXAggregateTarget> pbx_aggregate_target(
+ new PBXAggregateTarget("target_name", "shell_script", "config_name",
+ PBXAttributes()));
+ return pbx_aggregate_target;
+}
+
+// Instantiate a PBXNativeTarget object with arbitrary names.
+std::unique_ptr<PBXNativeTarget> GetPBXNativeTargetObject(
+ const PBXFileReference* product_reference) {
+ std::unique_ptr<PBXNativeTarget> pbx_native_target(new PBXNativeTarget(
+ "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
+ "com.apple.product-type.application", "product_name", product_reference));
+ return pbx_native_target;
+}
+
+// Instantiate a PBXContainerItemProxy object.
+std::unique_ptr<PBXContainerItemProxy> GetPBXContainerItemProxyObject(
+ const PBXProject* project,
+ const PBXTarget* target) {
+ std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy(
+ new PBXContainerItemProxy(project, target));
+ return pbx_container_item_proxy;
+}
+
+// Instantiate a PBXTargetDependency object.
+std::unique_ptr<PBXTargetDependency> GetPBXTargetDependencyObject(
+ const PBXTarget* target,
+ std::unique_ptr<PBXContainerItemProxy> container_item_proxy) {
+ std::unique_ptr<PBXTargetDependency> pbx_target_dependency(
+ new PBXTargetDependency(target, std::move(container_item_proxy)));
+ return pbx_target_dependency;
+}
+
+// Instantiate a XCBuildConfiguration object with arbitrary names.
+std::unique_ptr<XCBuildConfiguration> GetXCBuildConfigurationObject() {
+ std::unique_ptr<XCBuildConfiguration> xc_build_configuration(
+ new XCBuildConfiguration("config_name", PBXAttributes()));
+ return xc_build_configuration;
+}
+
+// Instantiate a XCConfigurationList object with arbitrary names.
+std::unique_ptr<XCConfigurationList> GetXCConfigurationListObject(
+ const PBXObject* owner_reference) {
+ std::unique_ptr<XCConfigurationList> xc_configuration_list(
+ new XCConfigurationList("config_list_name", PBXAttributes(),
+ owner_reference));
+ return xc_configuration_list;
+}
+
+} // namespace
+
// Tests that instantiating Xcode objects doesn't crash.
TEST(XcodeObject, InstantiatePBXSourcesBuildPhase) {
- PBXSourcesBuildPhase pbx_sources_build_phase;
+ std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+ GetPBXSourcesBuildPhaseObject();
}
TEST(XcodeObject, InstantiatePBXFrameworksBuildPhase) {
- PBXFrameworksBuildPhase pbx_frameworks_build_phase;
+ std::unique_ptr<PBXFrameworksBuildPhase> pbx_frameworks_build_phase =
+ GetPBXFrameworksBuildPhaseObject();
}
TEST(XcodeObject, InstantiatePBXShellScriptBuildPhase) {
- PBXShellScriptBuildPhase pbx_shell_script_build_phase("name", "shell_script");
+ std::unique_ptr<PBXShellScriptBuildPhase> pbx_shell_script_build_phase =
+ GetPBXShellScriptBuildPhaseObject();
}
TEST(XcodeObject, InstantiatePBXGroup) {
- PBXGroup pbx_group("/dir1/dir2", "group");
+ std::unique_ptr<PBXGroup> pbx_group = GetPBXGroupObject();
}
TEST(XcodeObject, InstantiatePBXProject) {
- PBXProject pbx_project("project", "config", "out/build", PBXAttributes());
+ std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
}
TEST(XcodeObject, InstantiatePBXFileReference) {
- PBXFileReference pbx_file_reference("test.cc", "sources/tools/test.cc",
- "sourcecode.cpp.cpp");
+ std::unique_ptr<PBXFileReference> pbx_file_reference =
+ GetPBXFileReferenceObject();
}
TEST(XcodeObject, InstantiatePBXBuildFile) {
- PBXFileReference pbx_file_reference("test.cc", "sources/tools/test.cc",
- "sourcecode.cpp.cpp");
- PBXSourcesBuildPhase pbx_sources_build_phase;
- PBXBuildFile pbx_build_file(&pbx_file_reference, &pbx_sources_build_phase,
- CompilerFlags::NONE);
+ std::unique_ptr<PBXFileReference> pbx_file_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+ GetPBXSourcesBuildPhaseObject();
+ std::unique_ptr<PBXBuildFile> pbx_build_file = GetPBXBuildFileObject(
+ pbx_file_reference.get(), pbx_sources_build_phase.get());
}
TEST(XcodeObject, InstantiatePBXAggregateTarget) {
- PBXAggregateTarget pbx_aggregate_target("target_name", "shell_script",
- "config_name", PBXAttributes());
+ std::unique_ptr<PBXAggregateTarget> pbx_aggregate_target =
+ GetPBXAggregateTargetObject();
}
TEST(XcodeObject, InstantiatePBXNativeTarget) {
- PBXFileReference product_reference("product.app", "product.app",
- "wrapper.application");
- PBXNativeTarget pbx_native_target(
- "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
- "com.apple.product-type.application", "product_name", &product_reference);
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
}
TEST(XcodeObject, InstantiatePBXContainerItemProxy) {
- PBXProject pbx_project("project_name", "config_name", "out/build",
- PBXAttributes());
- PBXFileReference product_reference("product.app", "product.app",
- "wrapper.application");
- PBXNativeTarget pbx_native_target(
- "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
- "com.apple.product-type.application", "product_name", &product_reference);
- PBXContainerItemProxy pbx_container_item_proxy(&pbx_project,
- &pbx_native_target);
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+ std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+ GetPBXContainerItemProxyObject(pbx_project.get(),
+ pbx_native_target.get());
}
TEST(XcodeObject, InstantiatePBXTargetDependency) {
- PBXProject pbx_project("project_name", "config_name", "out/build",
- PBXAttributes());
- PBXFileReference product_reference("product.app", "product.app",
- "wrapper.application");
- PBXNativeTarget pbx_native_target(
- "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
- "com.apple.product-type.application", "product_name", &product_reference);
- PBXTargetDependency pbx_target_dependency(
- &pbx_native_target, base::MakeUnique<PBXContainerItemProxy>(
- &pbx_project, &pbx_native_target));
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+ GetPBXContainerItemProxyObject(pbx_project.get(),
+ pbx_native_target.get());
+ std::unique_ptr<PBXTargetDependency> pbx_target_dependency =
+ GetPBXTargetDependencyObject(pbx_native_target.get(),
+ std::move(pbx_container_item_proxy));
}
TEST(XcodeObject, InstantiateXCBuildConfiguration) {
- XCBuildConfiguration xc_build_configuration("config_name", PBXAttributes());
+ std::unique_ptr<XCBuildConfiguration> xc_build_configuration =
+ GetXCBuildConfigurationObject();
}
TEST(XcodeObject, InstantiateXCConfigurationList) {
- PBXFileReference product_reference("product.app", "product.app",
- "wrapper.application");
- PBXNativeTarget pbx_native_target(
- "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
- "com.apple.product-type.application", "product_name", &product_reference);
- XCConfigurationList xc_xcconfiguration_list(
- "config_list_name", PBXAttributes(), &pbx_native_target);
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ std::unique_ptr<XCConfigurationList> xc_configuration_list =
+ GetXCConfigurationListObject(pbx_native_target.get());
+}
+
+// Tests that the mapping between PBXObject and PBXObjectClass.
+TEST(XcodeObject, PBXSourcesBuildPhaseObjectToClass) {
+ std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+ GetPBXSourcesBuildPhaseObject();
+ EXPECT_EQ(PBXSourcesBuildPhaseClass, pbx_sources_build_phase->Class());
+}
+
+TEST(XcodeObject, PBXFrameworksBuildPhaseObjectToClass) {
+ std::unique_ptr<PBXFrameworksBuildPhase> pbx_frameworks_build_phase =
+ GetPBXFrameworksBuildPhaseObject();
+ EXPECT_EQ(PBXFrameworksBuildPhaseClass, pbx_frameworks_build_phase->Class());
+}
+
+TEST(XcodeObject, PBXShellScriptBuildPhaseObjectToClass) {
+ std::unique_ptr<PBXShellScriptBuildPhase> pbx_shell_script_build_phase =
+ GetPBXShellScriptBuildPhaseObject();
+ EXPECT_EQ(PBXShellScriptBuildPhaseClass,
+ pbx_shell_script_build_phase->Class());
+}
+
+TEST(XcodeObject, PBXGroupObjectToClass) {
+ std::unique_ptr<PBXGroup> pbx_group = GetPBXGroupObject();
+ EXPECT_EQ(PBXGroupClass, pbx_group->Class());
+}
+
+TEST(XcodeObject, PBXProjectObjectToClass) {
+ std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+ EXPECT_EQ(PBXProjectClass, pbx_project->Class());
+}
+
+TEST(XcodeObject, PBXFileReferenceObjectToClass) {
+ std::unique_ptr<PBXFileReference> pbx_file_reference =
+ GetPBXFileReferenceObject();
+ EXPECT_EQ(PBXFileReferenceClass, pbx_file_reference->Class());
+}
+
+TEST(XcodeObject, PBXBuildFileObjectToClass) {
+ std::unique_ptr<PBXFileReference> pbx_file_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+ GetPBXSourcesBuildPhaseObject();
+ std::unique_ptr<PBXBuildFile> pbx_build_file = GetPBXBuildFileObject(
+ pbx_file_reference.get(), pbx_sources_build_phase.get());
+ EXPECT_EQ(PBXBuildFileClass, pbx_build_file->Class());
+}
+
+TEST(XcodeObject, PBXAggregateTargetObjectToClass) {
+ std::unique_ptr<PBXAggregateTarget> pbx_aggregate_target =
+ GetPBXAggregateTargetObject();
+ EXPECT_EQ(PBXAggregateTargetClass, pbx_aggregate_target->Class());
+}
+
+TEST(XcodeObject, PBXNativeTargetObjectToClass) {
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ EXPECT_EQ(PBXNativeTargetClass, pbx_native_target->Class());
+}
+
+TEST(XcodeObject, PBXContainerItemProxyObjectToClass) {
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+ std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+ GetPBXContainerItemProxyObject(pbx_project.get(),
+ pbx_native_target.get());
+ EXPECT_EQ(PBXContainerItemProxyClass, pbx_container_item_proxy->Class());
+}
+
+TEST(XcodeObject, PBXTargetDependencyObjectToClass) {
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+ GetPBXContainerItemProxyObject(pbx_project.get(),
+ pbx_native_target.get());
+ std::unique_ptr<PBXTargetDependency> pbx_target_dependency =
+ GetPBXTargetDependencyObject(pbx_native_target.get(),
+ std::move(pbx_container_item_proxy));
+ EXPECT_EQ(PBXTargetDependencyClass, pbx_target_dependency->Class());
+}
+
+TEST(XcodeObject, XCBuildConfigurationObjectToClass) {
+ std::unique_ptr<XCBuildConfiguration> xc_build_configuration =
+ GetXCBuildConfigurationObject();
+ EXPECT_EQ(XCBuildConfigurationClass, xc_build_configuration->Class());
+}
+
+TEST(XcodeObject, XCConfigurationListObjectToClass) {
+ std::unique_ptr<PBXFileReference> product_reference =
+ GetPBXFileReferenceObject();
+ std::unique_ptr<PBXNativeTarget> pbx_native_target =
+ GetPBXNativeTargetObject(product_reference.get());
+ std::unique_ptr<XCConfigurationList> xc_configuration_list =
+ GetXCConfigurationListObject(pbx_native_target.get());
+ EXPECT_EQ(XCConfigurationListClass, xc_configuration_list->Class());
+}
+
+// Tests the mapping between PBXObjectClass and it's name as a string.
+TEST(XcodeObject, ClassToString) {
+ EXPECT_EQ("PBXAggregateTarget", ToString(PBXAggregateTargetClass));
+ EXPECT_EQ("PBXBuildFile", ToString(PBXBuildFileClass));
+ EXPECT_EQ("PBXAggregateTarget", ToString(PBXAggregateTargetClass));
+ EXPECT_EQ("PBXBuildFile", ToString(PBXBuildFileClass));
+ EXPECT_EQ("PBXContainerItemProxy", ToString(PBXContainerItemProxyClass));
+ EXPECT_EQ("PBXFileReference", ToString(PBXFileReferenceClass));
+ EXPECT_EQ("PBXFrameworksBuildPhase", ToString(PBXFrameworksBuildPhaseClass));
+ EXPECT_EQ("PBXGroup", ToString(PBXGroupClass));
+ EXPECT_EQ("PBXNativeTarget", ToString(PBXNativeTargetClass));
+ EXPECT_EQ("PBXProject", ToString(PBXProjectClass));
+ EXPECT_EQ("PBXSourcesBuildPhase", ToString(PBXSourcesBuildPhaseClass));
+ EXPECT_EQ("PBXTargetDependency", ToString(PBXTargetDependencyClass));
+ EXPECT_EQ("XCBuildConfiguration", ToString(XCBuildConfigurationClass));
+ EXPECT_EQ("XCConfigurationList", ToString(XCConfigurationListClass));
+ EXPECT_EQ("PBXShellScriptBuildPhase",
+ ToString(PBXShellScriptBuildPhaseClass));
}