2013-06-18 3 views
0

Я не уверен, как я могу реализовать, что мой макет UITableView отвечает правильно на indexPathsForSelectedRows. В моем приложении пользователь может (в состоянии редактирования) выбирать ячейки в представлении таблицы, представляющие файлы/папки данного каталога. Как только пользователь выбирает элемент папки, ранее выбранные файлы должны быть отменены. Мой тест (с использованием OCHamcrest/OCMockito) выглядит следующим образом.Работа с индексом UITableViewPathsForSelectedRows

- (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 запрашивает эту информацию?

+0

Почему вы не можете запрашивать выбранные строки? вы уже пытались использовать метод indexPathsForSelectedRows', и он вернул нуль? – geo

+0

Задание mockTableView для выбранных строк всегда возвращает nil, но он должен возвращать массив с помощью indexPath, предоставленного в первом вызове, для параметра willSelectRowAtIndexPath. –

ответ

0

Поскольку mockTableView не может записывать (как реальный UITableView) индексную ячейку выбранной ячейки, вы должны убедиться, что макет возвращает правильный ответ для этого метода. Так что в моем случае тест теперь выглядит вот так.

- (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]; 
}