/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.test.fwk.mvp.ui;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.fwk.mvp.ui.IView;
import org.eclipse.wst.sse.sieditor.fwk.mvp.ui.IViewListener;
import org.eclipse.wst.sse.sieditor.fwk.mvp.ui.ViewDelegate;
/**
*
*/
@SuppressWarnings("nls")
public class ViewDelegateTest {
private final class MockViewListener implements IViewListener {
private boolean isViewCreatedCalled;
private boolean isViewDisposeCalled;
private IView viewCreatedArgument;
private IView viewDisposeArgument;
public void viewCreated(final IView view) {
viewCreatedArgument = view;
isViewCreatedCalled = true;
}
public void viewDispose(final IView view) {
viewDisposeArgument = view;
isViewDisposeCalled = true;
viewDelegate.removeViewListener(this);
}
}
private IView view;
private ViewDelegate viewDelegate;
private MockViewListener viewListener1;
private MockViewListener viewListener2;
@Before
public void setUp() throws Exception {
view = createMock(IView.class);
viewDelegate = new ViewDelegate(view);
// viewListener1 = createMock(IViewListener.class);
// viewListener2 = createMock(IViewListener.class);
viewListener1 = new MockViewListener();
viewListener2 = new MockViewListener();
}
@Test
public void testAddGetRemove() {
assertTrue(viewDelegate.getViewListeners().isEmpty());
assertTrue(viewDelegate.addViewListener(viewListener1));
assertTrue(viewDelegate.addViewListener(createMock(IViewListener.class)));
assertTrue(viewDelegate.addViewListener(createMock(IViewListener.class)));
assertEquals(3, viewDelegate.getViewListeners().size());
assertTrue(viewDelegate.removeViewListener(viewListener1));
assertFalse(viewDelegate.removeViewListener(createMock(IViewListener.class)));
assertEquals(2, viewDelegate.getViewListeners().size());
try {
viewDelegate.getViewListeners().add(viewListener1);
fail("UnsupportedOperationException expected!");
} catch (final UnsupportedOperationException e) { // That is expected!
}
}
@Test
public void testNotifyViewCreated() {
// viewListener1.viewCreated(Arguments.any(viewArgument));
// replay(viewListener1);
// viewListener2.viewCreated(Arguments.any(viewArgument));
// replay(viewListener2);
viewDelegate.addViewListener(viewListener1);
viewDelegate.addViewListener(viewListener2);
viewDelegate.notifyViewCreated();
assertTrue(viewListener1.isViewCreatedCalled);
assertSame(view, viewListener1.viewCreatedArgument);
assertTrue(viewListener2.isViewCreatedCalled);
assertSame(view, viewListener2.viewCreatedArgument);
// verify(viewListener1);
// verify(viewListener2);
}
@Test
public void testNotifyViewDispose() {
// viewListener1.viewDispose(Arguments.any(viewArgument));
// replay(viewListener1);
// viewListener2.viewDispose(Arguments.any(viewArgument));
// replay(viewListener2);
expect(view.removeViewListener(isA(IViewListener.class))).andReturn(true);
expectLastCall().times(2);
replay(view);
viewDelegate.addViewListener(viewListener1);
viewDelegate.addViewListener(viewListener2);
viewDelegate.notifyViewDispose();
assertTrue(viewListener1.isViewDisposeCalled);
assertSame(view, viewListener1.viewDisposeArgument);
assertTrue(viewListener2.isViewDisposeCalled);
assertSame(view, viewListener2.viewDisposeArgument);
// verify(viewListener1);
// verify(viewListener2);
}
@Test(expected = IllegalArgumentException.class)
public void testViewDelegate() {
new ViewDelegate(null);
}
}