Работа с 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];
}
Другие вопросы по тегам