Adds support for iOS colorsets.

Bug: None
Change-Id: Icaf2e8969753fc7717fae79821a530f765d3e688
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/5240
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: Brett Wilson <brettw@google.com>
Commit-Queue: Brett Wilson <brettw@google.com>
diff --git a/tools/gn/bundle_data.cc b/tools/gn/bundle_data.cc
index 095e989..3af92d2 100644
--- a/tools/gn/bundle_data.cc
+++ b/tools/gn/bundle_data.cc
@@ -34,7 +34,7 @@
   if (source.ends_with("/Contents.json") && dir.ends_with(".xcassets")) {
     is_file_from_asset_catalog = true;
   } else if (dir.ends_with(".appiconset") || dir.ends_with(".imageset") ||
-             dir.ends_with(".launchimage")) {
+             dir.ends_with(".launchimage") || dir.ends_with(".colorset")) {
     dir = FindDirNoTrailingSeparator(dir);
     is_file_from_asset_catalog = dir.ends_with(".xcassets");
   }
diff --git a/tools/gn/ninja_bundle_data_target_writer_unittest.cc b/tools/gn/ninja_bundle_data_target_writer_unittest.cc
index 5b1a4ba..f2ec6c5 100644
--- a/tools/gn/ninja_bundle_data_target_writer_unittest.cc
+++ b/tools/gn/ninja_bundle_data_target_writer_unittest.cc
@@ -22,6 +22,8 @@
   bundle_data.sources().push_back(
       SourceFile("//foo/Foo.xcassets/Contents.json"));
   bundle_data.sources().push_back(
+      SourceFile("//foo/Foo.xcassets/foo.colorset/Contents.json"));
+  bundle_data.sources().push_back(
       SourceFile("//foo/Foo.xcassets/foo.imageset/Contents.json"));
   bundle_data.sources().push_back(
       SourceFile("//foo/Foo.xcassets/foo.imageset/FooIcon-29.png"));
@@ -44,6 +46,7 @@
       "../../foo/input1.txt "
       "../../foo/input2.txt "
       "../../foo/Foo.xcassets/Contents.json "
+      "../../foo/Foo.xcassets/foo.colorset/Contents.json "
       "../../foo/Foo.xcassets/foo.imageset/Contents.json "
       "../../foo/Foo.xcassets/foo.imageset/FooIcon-29.png "
       "../../foo/Foo.xcassets/foo.imageset/FooIcon-29@2x.png "
diff --git a/tools/gn/ninja_create_bundle_target_writer_unittest.cc b/tools/gn/ninja_create_bundle_target_writer_unittest.cc
index af7a7f5..51c982c 100644
--- a/tools/gn/ninja_create_bundle_target_writer_unittest.cc
+++ b/tools/gn/ninja_create_bundle_target_writer_unittest.cc
@@ -186,6 +186,8 @@
   bundle_data.sources().push_back(
       SourceFile("//foo/Foo.xcassets/Contents.json"));
   bundle_data.sources().push_back(
+      SourceFile("//foo/Foo.xcassets/foo.colorset/Contents.json"));
+  bundle_data.sources().push_back(
       SourceFile("//foo/Foo.xcassets/foo.imageset/Contents.json"));
   bundle_data.sources().push_back(
       SourceFile("//foo/Foo.xcassets/foo.imageset/FooIcon-29.png"));
@@ -290,6 +292,8 @@
   bundle_data2.sources().push_back(
       SourceFile("//foo/Foo.xcassets/Contents.json"));
   bundle_data2.sources().push_back(
+      SourceFile("//foo/Foo.xcassets/foo.colorset/Contents.json"));
+  bundle_data2.sources().push_back(
       SourceFile("//foo/Foo.xcassets/foo.imageset/Contents.json"));
   bundle_data2.sources().push_back(
       SourceFile("//foo/Foo.xcassets/foo.imageset/FooIcon-29.png"));
@@ -321,6 +325,18 @@
   bundle_data3.visibility().SetPublic();
   ASSERT_TRUE(bundle_data3.OnResolved(&err));
 
+  Target bundle_data4(setup.settings(), Label(SourceDir("//biz/"), "assets"));
+  bundle_data4.set_output_type(Target::BUNDLE_DATA);
+  bundle_data4.sources().push_back(
+      SourceFile("//biz/Biz.xcassets/Contents.json"));
+  bundle_data4.sources().push_back(
+      SourceFile("//biz/Biz.xcassets/biz.colorset/Contents.json"));
+  bundle_data4.action_values().outputs() = SubstitutionList::MakeForTest(
+      "{{bundle_resources_dir}}/{{source_file_part}}");
+  bundle_data4.SetToolchain(setup.toolchain());
+  bundle_data4.visibility().SetPublic();
+  ASSERT_TRUE(bundle_data4.OnResolved(&err));
+
   Target create_bundle(
       setup.settings(),
       Label(SourceDir("//baz/"), "bar", setup.toolchain()->label().dir(),
@@ -331,6 +347,7 @@
   create_bundle.private_deps().push_back(LabelTargetPair(&bundle_data1));
   create_bundle.private_deps().push_back(LabelTargetPair(&bundle_data2));
   create_bundle.private_deps().push_back(LabelTargetPair(&bundle_data3));
+  create_bundle.private_deps().push_back(LabelTargetPair(&bundle_data4));
   create_bundle.private_deps().push_back(LabelTargetPair(action.get()));
   create_bundle.bundle_data().product_type().assign("com.apple.product-type");
   create_bundle.bundle_data().set_partial_info_plist(
@@ -343,9 +360,9 @@
   writer.Run();
 
   const char expected[] =
-      "build obj/baz/bar.inputdeps.stamp: stamp obj/foo/assets.stamp "
-      "obj/foo/bar.stamp obj/foo/data.stamp obj/qux/info_plist.stamp "
-      "obj/quz/assets.stamp\n"
+      "build obj/baz/bar.inputdeps.stamp: stamp obj/biz/assets.stamp "
+      "obj/foo/assets.stamp obj/foo/bar.stamp obj/foo/data.stamp "
+      "obj/qux/info_plist.stamp obj/quz/assets.stamp\n"
       "build bar.bundle/Contents/Info.plist: copy_bundle_data "
       "../../qux/qux-Info.plist || obj/baz/bar.inputdeps.stamp\n"
       "build bar.bundle/Contents/Resources/input1.txt: copy_bundle_data "
@@ -354,11 +371,11 @@
       "../../foo/input2.txt || obj/baz/bar.inputdeps.stamp\n"
       "build obj/baz/bar.xcassets.inputdeps.stamp: stamp "
       "obj/foo/assets.stamp "
-      "obj/quz/assets.stamp\n"
+      "obj/quz/assets.stamp obj/biz/assets.stamp\n"
       "build bar.bundle/Contents/Resources/Assets.car | "
       "baz/bar/bar_partial_info.plist: compile_xcassets "
-      "../../foo/Foo.xcassets "
-      "../../quz/Quz.xcassets | obj/baz/bar.xcassets.inputdeps.stamp || "
+      "../../foo/Foo.xcassets ../../quz/Quz.xcassets "
+      "../../biz/Biz.xcassets | obj/baz/bar.xcassets.inputdeps.stamp || "
       "obj/baz/bar.inputdeps.stamp\n"
       "  product_type = com.apple.product-type\n"
       "  partial_info_plist = baz/bar/bar_partial_info.plist\n"