/*
* $Id$
*
* Janus platform is an open-source multiagent platform.
* More details on http://www.janusproject.io
*
* Copyright (C) 2014-2015 Sebastian RODRIGUEZ, Nicolas GAUD, Stéphane GALLAND.
*
* 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://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 io.janusproject.tests.util;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.util.UUID;
import io.janusproject.services.distributeddata.DMapListener;
import io.janusproject.tests.testutils.AbstractJanusTest;
import io.janusproject.util.AbstractMapView;
import io.janusproject.util.ListenerCollection;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import io.sarl.tests.api.Nullable;
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("all")
public class AbstractMapViewTest extends AbstractJanusTest {
@Nullable
private ViewMock view;
@Before
public void setUp() {
this.view = new ViewMock<String, String>();
}
@Test
public void addDMapListener_0() {
DMapListener<String, String> listener = mock(DMapListener.class);
this.view.addDMapListener(listener);
ListenerCollection<DMapListener<? super String, ? super String>> listeners = this.view.testGetListeners();
assertEquals(1, listeners.getListenerCount(DMapListener.class));
DMapListener<? super String, ? super String>[] array = listeners.getListeners(DMapListener.class);
assertNotNull(array);
assertEquals(1, array.length);
assertSame(listener, array[0]);
}
@Test
public void addDMapListener_1() {
DMapListener<String, String> listener1 = mock(DMapListener.class);
DMapListener<String, String> listener2 = mock(DMapListener.class);
this.view.addDMapListener(listener1);
this.view.addDMapListener(listener2);
ListenerCollection<DMapListener<? super String, ? super String>> listeners = this.view.testGetListeners();
assertEquals(2, listeners.getListenerCount(DMapListener.class));
DMapListener<? super String, ? super String>[] array = listeners.getListeners(DMapListener.class);
assertNotNull(array);
assertEquals(2, array.length);
if (array[0] == listener1) {
assertSame(listener2, array[1]);
} else {
assertSame(listener2, array[0]);
assertSame(listener1, array[1]);
}
}
@Test
public void removeDMapListener() {
DMapListener<String, String> listener1 = mock(DMapListener.class);
DMapListener<String, String> listener2 = mock(DMapListener.class);
this.view.addDMapListener(listener1);
this.view.addDMapListener(listener2);
this.view.removeDMapListener(listener1);
ListenerCollection<DMapListener<? super String, ? super String>> listeners = this.view.testGetListeners();
assertEquals(1, listeners.getListenerCount(DMapListener.class));
DMapListener<? super String, ? super String>[] array = listeners.getListeners(DMapListener.class);
assertNotNull(array);
assertEquals(1, array.length);
assertSame(listener2, array[0]);
}
@Test
public void fireEntryAdded() {
String key = UUID.randomUUID().toString();
String value = UUID.randomUUID().toString();
DMapListener<String, String> listener = mock(DMapListener.class);
this.view.addDMapListener(listener);
this.view.fireEntryAdded(key, value);
ArgumentCaptor<String> arg0 = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> arg1 = ArgumentCaptor.forClass(String.class);
verify(listener, times(1)).entryAdded(arg0.capture(), arg1.capture());
assertSame(key, arg0.getValue());
assertSame(value, arg1.getValue());
}
@Test
public void fireEntryRemoved() {
String key = UUID.randomUUID().toString();
String value = UUID.randomUUID().toString();
DMapListener<String, String> listener = mock(DMapListener.class);
this.view.addDMapListener(listener);
this.view.fireEntryRemoved(key, value);
ArgumentCaptor<String> arg0 = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> arg1 = ArgumentCaptor.forClass(String.class);
verify(listener, times(1)).entryRemoved(arg0.capture(), arg1.capture());
assertSame(key, arg0.getValue());
assertSame(value, arg1.getValue());
}
@Test
public void fireEntryUpdated() {
String key = UUID.randomUUID().toString();
String value = UUID.randomUUID().toString();
DMapListener<String, String> listener = mock(DMapListener.class);
this.view.addDMapListener(listener);
this.view.fireEntryUpdated(key, value);
ArgumentCaptor<String> arg0 = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> arg1 = ArgumentCaptor.forClass(String.class);
verify(listener, times(1)).entryUpdated(arg0.capture(), arg1.capture());
assertSame(key, arg0.getValue());
assertSame(value, arg1.getValue());
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
private static class ViewMock<K, V> extends AbstractMapView<K, V> {
/**
*/
public ViewMock() {
//
}
public ListenerCollection<DMapListener<? super K, ? super V>> testGetListeners() {
return this.listeners;
}
@Override
public void fireEntryAdded(K key, V value) {
super.fireEntryAdded(key, value);
}
@Override
public void fireEntryRemoved(K key, V value) {
super.fireEntryRemoved(key, value);
}
@Override
public void fireEntryUpdated(K key, V value) {
super.fireEntryUpdated(key, value);
}
}
}