@Test
  public void testMixedEntries() {
    final SortBuilder builder =
        new SortBuilder(
            SortBy.DATABASE,
            SortBy.DOC_ID_DECREASING,
            new SortBuilder(),
            new SortBuilder(
                SortBy.DATABASE,
                SortBy.AUTN_RANK,
                new SortBuilder(SortBy.DOC_ID_INCREASING, SortBy.DATABASE, SortBy.DATE),
                SortBy.DATABASE));

    assertEquals("database+dociddecreasing+autnrank+docidincreasing+date", builder.toString());
    assertEquals(5, builder.size());
    assertFalse(builder.isEmpty());

    final Iterator<SortBy> iterator = builder.iterator();

    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DATABASE, iterator.next());
    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DOC_ID_DECREASING, iterator.next());
    assertTrue(iterator.hasNext());
    assertEquals(SortBy.AUTN_RANK, iterator.next());
    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DOC_ID_INCREASING, iterator.next());
    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DATE, iterator.next());
    assertFalse(iterator.hasNext());
  }
  @Test
  public void testFromSortBy() {
    final SortBuilder builder = SortBuilder.from(SortBy.CLUSTER);

    assertEquals("cluster", builder.toString());
    assertEquals(1, builder.size());
  }
  @Test
  public void testEmptySortBuilder() {
    final SortBuilder builder = new SortBuilder();

    assertEquals("", builder.toString());
    assertEquals(0, builder.size());
    assertTrue(builder.isEmpty());
    assertFalse(builder.iterator().hasNext());
  }
  @Test
  public void testFromBuilder() {
    final SortBuilder original = new SortBuilder(SortBy.REVERSE_DATE);
    final SortBuilder builder = SortBuilder.from(original);

    assertSame(original, builder);
    assertEquals("reversedate", builder.toString());
    assertEquals(1, builder.size());
  }
  @Test
  public void testSingleEntrySortBuilder() {
    final SortBuilder builder = new SortBuilder(SortBy.DATABASE);

    assertEquals("database", builder.toString());
    assertEquals(1, builder.size());
    assertFalse(builder.isEmpty());

    final Iterator<SortBy> iterator = builder.iterator();

    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DATABASE, iterator.next());
    assertFalse(iterator.hasNext());
  }
  @Test
  public void testTwoEntriesSortBuilder() {
    final SortBuilder builder = new SortBuilder(SortBy.DATABASE, SortBy.DOC_ID_DECREASING);

    assertEquals("database+dociddecreasing", builder.toString());
    assertEquals(2, builder.size());
    assertFalse(builder.isEmpty());

    final Iterator<SortBy> iterator = builder.iterator();

    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DATABASE, iterator.next());
    assertTrue(iterator.hasNext());
    assertEquals(SortBy.DOC_ID_DECREASING, iterator.next());
    assertFalse(iterator.hasNext());
  }