| // Copyright 2022 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/ui/autofill/cells/expiration_date_edit_item.h" |
| |
| #import "base/apple/foundation_util.h" |
| #import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_styler.h" |
| #import "ios/chrome/browser/ui/autofill/cells/expiration_date_edit_item_delegate.h" |
| #import "ios/chrome/browser/ui/autofill/expiration_date_picker.h" |
| #import "testing/gtest/include/gtest/gtest.h" |
| #import "testing/gtest_mac.h" |
| #import "testing/platform_test.h" |
| #import "third_party/ocmock/OCMock/OCMock.h" |
| #import "third_party/ocmock/gtest_support.h" |
| |
| namespace { |
| |
| using ExpirationDateEditItemTest = PlatformTest; |
| |
| // Tests that the cell's text field label is properly set after calling |
| // `ConfigureCell:`. |
| TEST_F(ExpirationDateEditItemTest, ConfigureCellSetsFieldName) { |
| ExpirationDateEditItem* item = |
| [[ExpirationDateEditItem alloc] initWithType:0]; |
| NSString* field_name_label_text = @"Expiration Date"; |
| |
| item.fieldNameLabelText = field_name_label_text; |
| |
| id view = [[[item cellClass] alloc] init]; |
| ASSERT_TRUE([view isMemberOfClass:[ExpirationDateEditCell class]]); |
| |
| ExpirationDateEditCell* cell = |
| base::apple::ObjCCastStrict<ExpirationDateEditCell>(view); |
| EXPECT_EQ(0U, cell.textLabel.text.length); |
| |
| ChromeTableViewStyler* styler = [[ChromeTableViewStyler alloc] init]; |
| [item configureCell:cell withStyler:styler]; |
| EXPECT_NSEQ(field_name_label_text, cell.textLabel.text); |
| } |
| |
| // Tests that the configured cell text field is set with the formatted date and |
| // the item properties are set after a date is picked in the cell. |
| TEST_F(ExpirationDateEditItemTest, PickingDateUpdatesItemAndTextField) { |
| ExpirationDateEditItem* item = |
| [[ExpirationDateEditItem alloc] initWithType:0]; |
| id mockedDelegate = |
| OCMStrictProtocolMock(@protocol(ExpirationDateEditItemDelegate)); |
| item.delegate = mockedDelegate; |
| |
| id view = [[[item cellClass] alloc] init]; |
| ExpirationDateEditCell* cell = |
| base::apple::ObjCCastStrict<ExpirationDateEditCell>(view); |
| |
| NSString* month = @"10"; |
| NSString* year = @"9999"; |
| NSString* formatted_date = [NSString stringWithFormat:@"%@/%@", month, year]; |
| |
| EXPECT_EQ(0U, cell.textField.text.length); |
| |
| ChromeTableViewStyler* styler = [[ChromeTableViewStyler alloc] init]; |
| [item configureCell:cell withStyler:styler]; |
| |
| OCMExpect([mockedDelegate expirationDateEditItemDidChange:item]); |
| |
| cell.expirationDatePicker.onDateSelected(month, year); |
| |
| EXPECT_NSEQ(formatted_date, cell.textField.text); |
| EXPECT_NSEQ(month, item.month); |
| EXPECT_NSEQ(year, item.year); |
| |
| EXPECT_OCMOCK_VERIFY(mockedDelegate); |
| } |
| |
| // Verifies that the ExpirationDateEditCell exposes its contents to |
| // accessibility tools such as Voice Over. |
| TEST_F(ExpirationDateEditItemTest, |
| ExpirationDateEditCellIsNotAccessibilityElement) { |
| ExpirationDateEditItem* item = |
| [[ExpirationDateEditItem alloc] initWithType:0]; |
| |
| id view = [[[item cellClass] alloc] init]; |
| ASSERT_TRUE([view isMemberOfClass:[ExpirationDateEditCell class]]); |
| |
| ExpirationDateEditCell* cell = |
| base::apple::ObjCCastStrict<ExpirationDateEditCell>(view); |
| |
| ChromeTableViewStyler* styler = [[ChromeTableViewStyler alloc] init]; |
| [item configureCell:cell withStyler:styler]; |
| |
| EXPECT_FALSE(cell.isAccessibilityElement); |
| } |
| |
| } // namespace |