Работа с indexPathsForSelectedRows UITableView
Я не уверен, как я могу реализовать это мой макет UITableView
объект отвечает правильно для indexPathsForSelectedRows
, В моем приложении пользователь может (в состоянии редактирования) выбирать ячейки в табличном представлении, которое представляет файлы / папки данного каталога. Как только пользователь выбирает элемент папки, ранее выбранные элементы файлов должны быть отменены. Мой тест (с использованием OCHamcrest/OCMockito) выглядит следующим образом.
- (void)test_tableViewwillSelectRowAtIndexPath_DeselectsPreviouslySelectedCells
{
// given
[given(self.mockTableView.editing) willReturnBool:YES];
// when
[self.sut tableView:self.mockTableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:SectionIdFile]];
[self.sut tableView:self.mockTableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:SectionIdFolder]];
// then
}
Проблема в том, что я могу проверить, выбран ли элемент файла, но не могу запросить у mockTableView его выбранные строки. Может ли кто-нибудь сказать мне, как справиться с этим? Должен ли я записать tableView:selectRowAtIndexPath:animated:scrollPosition:
звонит сам и дает правильный ответ, когда tableView запрашивают эту информацию?
1 ответ
Как mockTableView не может записывать (как в реальном UITableView
) indexPath для выбранной ячейки, вы должны убедиться, что фиктивный объект возвращает правильный ответ для этого метода. Так что в моем случае тест выглядит сейчас так.
- (void)test_tableViewwillSelectRowAtIndexPath_DeselectsPreviouslySelectedCellsForSectionIdFile
{
// given
[given(self.mockTableView.editing) willReturnBool:YES];
NSArray *selectedRows = @[[NSIndexPath indexPathForRow:0 inSection:SectionIdFile], [NSIndexPath indexPathForRow:1 inSection:SectionIdFile]];
[given([self.mockTableView indexPathsForSelectedRows]) willReturn:selectedRows];
// when
[self.sut tableView:self.sut.myTableView willSelectRowAtIndexPath:selectedRows[0]];
[self.sut tableView:self.sut.myTableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:SectionIdFolder]];
// then
[verify(self.mockTableView) deselectRowAtIndexPath:selectedRows[0] animated:YES];
[verify(self.mockTableView) deselectRowAtIndexPath:selectedRows[1] animated:YES];
}