// test that only the listener listening with the current transaction gets the event.
final SimpleFeature feature = roadFeatures[0];
store1.removeFeatures(factory.id(Collections.singleton(factory.featureId(feature.getID()))));
assertEquals(1, listener1.events.size());
assertEquals(0, listener2.events.size());
FeatureEvent event = listener1.getEvent(0);
assertEquals(feature.getBounds(), event.getBounds());
assertEquals(FeatureEvent.FEATURES_REMOVED, event.getEventType());
// test that commit only sends events to listener2.
listener1.events.clear();
listener2.events.clear();
store1.getTransaction().commit();
assertEquals(0, listener1.events.size());
assertEquals(3, listener2.events.size());
event = listener2.getEvent(0);
assertEquals(feature.getBounds(), event.getBounds());
assertEquals(FeatureEvent.FEATURES_REMOVED, event.getEventType());
// test add same as modify
listener1.events.clear();
listener2.events.clear();
store1.addFeatures(DataUtilities.collection(feature));
assertEquals(1, listener1.events.size());
event = listener1.getEvent(0);
assertEquals(feature.getBounds(), event.getBounds());
assertEquals(FeatureEvent.FEATURES_ADDED, event.getEventType());
assertEquals(0, listener2.events.size());
// test that rollback only sends events to listener1.
listener1.events.clear();
listener2.events.clear();
store1.getTransaction().rollback();
assertEquals(1, listener1.events.size());
event = listener1.getEvent(0);
assertNull(event.getBounds());
assertEquals(FeatureEvent.FEATURES_CHANGED, event.getEventType());
assertEquals(0, listener2.events.size());
// this is how Auto_commit is supposed to work
listener1.events.clear();
listener2.events.clear();
store2.addFeatures(DataUtilities.collection(feature));
assertEquals(1, listener1.events.size());
event = listener1.getEvent(0);
assertEquals(feature.getBounds(), event.getBounds());
assertEquals(FeatureEvent.FEATURES_ADDED, event.getEventType());
assertEquals(0, listener2.events.size());
}