### Question:
FusionIndexUpdater extends FusionIndexBase<IndexUpdater> implements IndexUpdater { @Override public void process( IndexEntryUpdate<?> update ) throws IndexEntryConflictException { switch ( update.updateMode() ) { case ADDED: instanceSelector.select( slotSelector.selectSlot( update.values(), GROUP_OF ) ).process( update ); break; case CHANGED: IndexUpdater from = instanceSelector.select( slotSelector.selectSlot( update.beforeValues(), GROUP_OF ) ); IndexUpdater to = instanceSelector.select( slotSelector.selectSlot( update.values(), GROUP_OF ) ); if ( from == to ) { from.process( update ); } else { from.process( IndexEntryUpdate.remove( update.getEntityId(), update.indexKey(), update.beforeValues() ) ); to.process( IndexEntryUpdate.add( update.getEntityId(), update.indexKey(), update.values() ) ); } break; case REMOVED: instanceSelector.select( slotSelector.selectSlot( update.values(), GROUP_OF ) ).process( update ); break; default: throw new IllegalArgumentException( "Unknown update mode" ); } } FusionIndexUpdater( SlotSelector slotSelector, LazyInstanceSelector<IndexUpdater> instanceSelector ); @Override void process( IndexEntryUpdate<?> update ); @Override void close();  }### Answer:
@Test public void shouldInstantiatePartLazilyForSpecificValueGroupUpdates() throws IOException, IndexEntryConflictException { EnumMap<IndexSlot,Value[]> values = FusionIndexTestHelp.valuesByGroup(); for ( IndexSlot i : IndexSlot.values() ) { if ( updaters.get( i ) != SwallowingIndexUpdater.INSTANCE ) { Value value = values.get( i )[0]; fusionIndexUpdater.process( add( value ) ); for ( IndexSlot j : IndexSlot.values() ) { if ( updaters.get( j ) != SwallowingIndexUpdater.INSTANCE ) { if ( i == j ) { verify( updaters.get( i ) ).process( any( IndexEntryUpdate.class ) ); } else { verifyNoMoreInteractions( updaters.get( j ) ); } } } } initiateMocks(); } }