@Test
  public void shouldReturnTokensFromSearch() throws CoreTokenException {
    // Given
    final Collection<Entry> entries = new LinkedList<Entry>();
    entries.add(new LinkedHashMapEntry());
    entries.add(new LinkedHashMapEntry());

    // Slightly more fiddly mocking to provide behaviour when the mock is called.
    given(
            searchHandler.performSearch(
                any(Connection.class), any(SearchRequest.class), any(Collection.class)))
        .will(
            new Answer() {
              public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                Collection<Entry> list = (Collection<Entry>) invocationOnMock.getArguments()[2];
                list.addAll(entries);
                return null;
              }
            });

    // Ensure that the Token Conversion returns a Token
    given(tokenEntryConverter.convert(any(Entry.class), any(String[].class)))
        .willReturn(new Token(Long.toString(System.currentTimeMillis()), TokenType.SESSION));

    // When
    Iterator<Collection<Token>> results = builder.execute(mockConnection);

    // Then
    verifyZeroInteractions(tokenEntryConverter);
    assertThat(results.next().size()).isEqualTo(entries.size());
    verify(tokenEntryConverter, times(2)).convert(any(Entry.class), any(String[].class));
  }
  @Test
  public void shouldUseHandlerToPerformSearch() throws CoreTokenException, IOException {
    // Given
    Result mockResult = mock(Result.class);
    given(
            searchHandler.performSearch(
                any(Connection.class), any(SearchRequest.class), any(Collection.class)))
        .willReturn(mockResult);

    // When
    Iterator iterator = builder.executeRawResults(mockConnection, PartialToken.class);

    // Then
    verifyZeroInteractions(searchHandler);
    iterator.next();
    verify(searchHandler)
        .performSearch(eq(mockConnection), any(SearchRequest.class), any(Collection.class));
  }
 @Test(expectedExceptions = IllegalArgumentException.class)
 public void shouldPreventSettingReturnAttributesWithNullArray() {
   CoreTokenField[] fields = null;
   builder.returnTheseAttributes(fields);
 }
 @Test(expectedExceptions = IllegalArgumentException.class)
 public void shouldPreventSettingReturnAttributesWithEmptyCollection() {
   builder.returnTheseAttributes(Collections.<CoreTokenField>emptySet());
 }
 @Test(expectedExceptions = IllegalArgumentException.class)
 public void shouldPreventSettingReturnAttributesWithEmptyArray() {
   builder.returnTheseAttributes();
 }