/* * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.event; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; import org.junit.Test; import java.util.List; import java.util.concurrent.ConcurrentHashMap; public class ProgressListenerChainTest { @Test public void testProgressListenerChainNoFilters() { final ConcurrentHashMap<ProgressListener, ProgressEvent> listenerMap = new ConcurrentHashMap<ProgressListener, ProgressEvent>(); ProgressListener listener1 = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { if (listenerMap.get(this) != null) { fail("recieved unexpected event"); } else { listenerMap.put(this, progressEvent); } } }; ProgressListener listener2 = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { if (listenerMap.get(this) != null) { fail("recieved unexpected event"); } else { listenerMap.put(this, progressEvent); } } }; ProgressListenerChain chain = new ProgressListenerChain(listener1, listener2); ProgressEvent event = new ProgressEvent(0); chain.progressChanged(event); assertSame(listenerMap.get(listener1), event); assertSame(listenerMap.get(listener2), event); } @Test public void testProgressListenerChainWithFilters() { final ConcurrentHashMap<ProgressListener, ProgressEvent> listenerMap = new ConcurrentHashMap<ProgressListener, ProgressEvent>(); ProgressListener listener1 = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { if (listenerMap.get(this) != null) { fail("recieved unexpected event"); } else { listenerMap.put(this, progressEvent); } } }; ProgressListener listener2 = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { if (listenerMap.get(this) != null) { fail("recieved unexpected event"); } else { listenerMap.put(this, progressEvent); } } }; ProgressListenerChain chain = new ProgressListenerChain( new ProgressListenerChain.ProgressEventFilter() { @Override public ProgressEvent filter(ProgressEvent progressEvent) { progressEvent.setBytesTransferred(100); return progressEvent; } }, listener1, listener2); ProgressEvent event = new ProgressEvent(0); chain.progressChanged(event); assertSame(listenerMap.get(listener1), event); assertSame(listenerMap.get(listener2), event); assertEquals(listenerMap.get(listener1).getBytesTransferred(), 100); assertEquals(listenerMap.get(listener2).getBytesTransferred(), 100); } @Test public void testAddAndRemoveListeners() { ProgressListener listener1 = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { // NoOp for this test } }; ProgressListener listener2 = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { // NoOp for this test } }; ProgressListenerChain chain = new ProgressListenerChain(listener1); chain.addProgressListener(listener2); List<ProgressListener> listeners = chain.getListeners(); assertEquals(listeners.size(), 2); chain.removeProgressListener(listener1); listeners = chain.getListeners(); assertEquals(listeners.size(), 1); assertSame(listeners.get(0), listener2); } }