| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/sessions/model/tab_group_util.h" |
| |
| #import "base/strings/sys_string_conversions.h" |
| #import "components/tab_groups/tab_group_color.h" |
| #import "components/tab_groups/tab_group_id.h" |
| #import "components/tab_groups/tab_group_visual_data.h" |
| #import "ios/chrome/browser/sessions/model/proto/tab_group.pb.h" |
| #import "ios/chrome/browser/sessions/model/session_tab_group.h" |
| #import "ios/chrome/browser/sessions/model/session_window_ios.h" |
| #import "testing/platform_test.h" |
| |
| // Test suite for sessions `tab_group_util` methods. |
| using TabSessionGroupUtil = PlatformTest; |
| |
| using tab_group_util::ColorForStorage; |
| using tab_group_util::ColorFromStorage; |
| using tab_group_util::DeserializedGroup; |
| using tab_groups::TabGroupId; |
| using tab_groups::TabGroupVisualData; |
| |
| // Tests the `FromSerializedValue:` method. |
| TEST_F(TabSessionGroupUtil, FromSerializedValue) { |
| TabGroupId tab_group_id = TabGroupId::GenerateNew(); |
| |
| ios::proto::TabGroupStorage group_storage; |
| ios::proto::RangeIndex& range = *group_storage.mutable_range(); |
| range.set_start(2); |
| range.set_count(3); |
| group_storage.set_title("title"); |
| group_storage.set_color( |
| tab_group_util::ColorForStorage(tab_groups::TabGroupColorId::kGrey)); |
| group_storage.set_collapsed(true); |
| tab_group_util::TabGroupIdForStorage(tab_group_id, |
| *group_storage.mutable_tab_group_id()); |
| |
| DeserializedGroup group_deserialized = |
| tab_group_util::FromSerializedValue(group_storage); |
| EXPECT_EQ(group_deserialized.range_start, 2); |
| EXPECT_EQ(group_deserialized.range_count, 3); |
| EXPECT_EQ(group_deserialized.visual_data.title(), u"title"); |
| EXPECT_EQ(group_deserialized.visual_data.color(), |
| tab_groups::TabGroupColorId::kGrey); |
| EXPECT_TRUE(group_deserialized.visual_data.is_collapsed()); |
| EXPECT_EQ(group_deserialized.tab_group_id, tab_group_id); |
| } |
| |
| // Tests the legacy `FromSerializedValue:` method. |
| TEST_F(TabSessionGroupUtil, FromSerializedValueLegacy) { |
| TabGroupId tab_group_id = TabGroupId::GenerateNew(); |
| |
| SessionTabGroup* session_tab_group = [[SessionTabGroup alloc] |
| initWithRangeStart:2 |
| rangeCount:3 |
| title:@"title" |
| colorId:static_cast<NSInteger>( |
| tab_groups::TabGroupColorId::kGrey) |
| collapsedState:YES |
| tabGroupId:tab_group_id]; |
| |
| SessionWindowIOS* session_window = |
| [[SessionWindowIOS alloc] initWithSessions:@[] |
| tabGroups:@[ session_tab_group ] |
| selectedIndex:NSNotFound]; |
| |
| DeserializedGroup group_deserialized = |
| tab_group_util::FromSerializedValue(session_window.tabGroups[0]); |
| EXPECT_EQ(group_deserialized.range_start, 2); |
| EXPECT_EQ(group_deserialized.range_count, 3); |
| EXPECT_EQ(group_deserialized.visual_data.title(), u"title"); |
| EXPECT_EQ(group_deserialized.visual_data.color(), |
| tab_groups::TabGroupColorId::kGrey); |
| EXPECT_TRUE(group_deserialized.visual_data.is_collapsed()); |
| EXPECT_EQ(group_deserialized.tab_group_id, tab_group_id); |
| } |
| |
| // Tests the `ColorForStorage:` method. |
| TEST_F(TabSessionGroupUtil, ColorForStorage) { |
| EXPECT_EQ(ColorForStorage(tab_groups::TabGroupColorId::kGrey), |
| ios::proto::TabGroupColorId::GREY); |
| EXPECT_EQ(ColorForStorage(tab_groups::TabGroupColorId::kOrange), |
| ios::proto::TabGroupColorId::ORANGE); |
| } |
| |
| // Tests the `ColorFromStorage:` method. |
| TEST_F(TabSessionGroupUtil, ColorFromStorage) { |
| EXPECT_EQ(ColorFromStorage(ios::proto::TabGroupColorId::GREY), |
| tab_groups::TabGroupColorId::kGrey); |
| EXPECT_EQ(ColorFromStorage(ios::proto::TabGroupColorId::ORANGE), |
| tab_groups::TabGroupColorId::kOrange); |
| } |