[GN] Add unit tests for Xcode objects: exercise class instantiations.

This CL adds unit test files for Xcode objects in
tools/gn/xcode_object.h, and specifically exercises class
instantiations and tests that it doesn't crash.

Bug: 742258
Change-Id: I234b0e643e718edf09a011c390c70c1d5ed0743f
Reviewed-on: https://chromium-review.googlesource.com/572702
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Yuke Liao <liaoyuke@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#487912}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: b1ff6ba517e5df483388550ebe07c3fe3c691413
diff --git a/tools/gn/BUILD.gn b/tools/gn/BUILD.gn
index bd1901c..ecd84ac 100644
--- a/tools/gn/BUILD.gn
+++ b/tools/gn/BUILD.gn
@@ -338,6 +338,7 @@
     "visibility_unittest.cc",
     "visual_studio_utils_unittest.cc",
     "visual_studio_writer_unittest.cc",
+    "xcode_object_unittest.cc",
     "xml_element_writer_unittest.cc",
   ]
 
diff --git a/tools/gn/xcode_object_unittest.cc b/tools/gn/xcode_object_unittest.cc
new file mode 100644
index 0000000..512f552
--- /dev/null
+++ b/tools/gn/xcode_object_unittest.cc
@@ -0,0 +1,94 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "tools/gn/xcode_object.h"
+
+#include "base/memory/ptr_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// Tests that instantiating Xcode objects doesn't crash.
+TEST(XcodeObject, InstantiatePBXSourcesBuildPhase) {
+  PBXSourcesBuildPhase pbx_sources_build_phase;
+}
+
+TEST(XcodeObject, InstantiatePBXFrameworksBuildPhase) {
+  PBXFrameworksBuildPhase pbx_frameworks_build_phase;
+}
+
+TEST(XcodeObject, InstantiatePBXShellScriptBuildPhase) {
+  PBXShellScriptBuildPhase pbx_shell_script_build_phase("name", "shell_script");
+}
+
+TEST(XcodeObject, InstantiatePBXGroup) {
+  PBXGroup pbx_group("/dir1/dir2", "group");
+}
+
+TEST(XcodeObject, InstantiatePBXProject) {
+  PBXProject pbx_project("project", "config", "out/build", PBXAttributes());
+}
+
+TEST(XcodeObject, InstantiatePBXFileReference) {
+  PBXFileReference pbx_file_reference("test.cc", "sources/tools/test.cc",
+                                      "sourcecode.cpp.cpp");
+}
+
+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);
+}
+
+TEST(XcodeObject, InstantiatePBXAggregateTarget) {
+  PBXAggregateTarget pbx_aggregate_target("target_name", "shell_script",
+                                          "config_name", PBXAttributes());
+}
+
+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);
+}
+
+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);
+}
+
+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));
+}
+
+TEST(XcodeObject, InstantiateXCBuildConfiguration) {
+  XCBuildConfiguration xc_build_configuration("config_name", PBXAttributes());
+}
+
+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);
+}