@Test
  public void testFilterWithNamedAndCachedFactory() throws Exception {
    Collection<FilterDescription> filterDescriptions = new ArrayList<FilterDescription>();
    filterDescriptions.add(
        new FilterDescription(
            null,
            DummyTokenFilterFactory.class.getCanonicalName(),
            LOWER_CASE_FACTORY_ID,
            true,
            null));

    TokenStream filteredTokenStream = filterBuilder.filter(tokenStream, filterDescriptions);
    assertEquals(LowerCaseFilter.class, filteredTokenStream.getClass());
    Map<String, TokenFilterFactory> cachedFactories = filterBuilder.getCachedFactories();
    assertEquals(LOWER_CASE_FACTORY_ID, cachedFactories.keySet().iterator().next());
    assertTrue(cachedFactories.get(LOWER_CASE_FACTORY_ID) instanceof DummyTokenFilterFactory);

    // test caching
    filterDescriptions = new ArrayList<FilterDescription>();
    filterDescriptions.add(new FilterDescription(null, null, LOWER_CASE_FACTORY_ID, true, null));
    TokenFilterFactory factory = createMock(TokenFilterFactory.class);
    expect(factory.createTokenFilter(tokenStream, null)).andReturn(null);
    replay(factory);

    cachedFactories.put(LOWER_CASE_FACTORY_ID, factory);
    filterBuilder.filter(tokenStream, filterDescriptions);
    verify(factory);
  }
  @Test
  public void testFilterWithPredefinedFactory() throws Exception {
    Map<String, TokenFilterFactory> predifinedFactories = new HashMap<String, TokenFilterFactory>();

    // test caching
    Collection<FilterDescription> filterDescriptions = new ArrayList<FilterDescription>();
    filterDescriptions.add(new FilterDescription(null, null, LOWER_CASE_FACTORY_ID, true, null));
    TokenFilterFactory factory = createMock(TokenFilterFactory.class);
    expect(factory.createTokenFilter(tokenStream, null)).andReturn(null);
    replay(factory);

    predifinedFactories.put(LOWER_CASE_FACTORY_ID, factory);
    filterBuilder = new FilterBuilder(predifinedFactories);
    filterBuilder.filter(tokenStream, filterDescriptions);
    verify(factory);
  }