blob: d20baf05c501b1429df82b9bd4a50fd07fabe263 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence;
import java.io.IOException;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWsDomLoadListener;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.WsDOMLoadCanceledException;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.JaxWsWorkspaceResource;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.Jee5WsDomRuntimeExtension;
import org.eclipse.jst.ws.jaxws.testutils.IWaitCondition;
import org.eclipse.jst.ws.jaxws.testutils.assertions.Assertions;
import org.eclipse.jst.ws.jaxws.testutils.jmock.Mock;
import org.eclipse.jst.ws.jaxws.testutils.jmock.MockObjectTestCase;
/**
* Tests for Jee5WsDomRuntimeExtension
*
* @author Georgi Vachkov
*/
public class Jee5WsDomRuntimeExtensionTest extends MockObjectTestCase
{
private Jee5WsDomRuntimeExtension extension;
public void setUp() throws Exception
{
extension = new Jee5WsDomRuntimeExtension();
}
public void testGetDOMCreateNotCalled() throws WsDOMLoadCanceledException
{
assertNull(extension.getDOM());
}
public void testLoadListenerStartFinishCalled() throws Exception
{
final Mock<IWsDomLoadListener> loadListenerMock = mock(IWsDomLoadListener.class);
loadListenerMock.expects(once()).method("started");
loadListenerMock.expects(once()).method("finished");
extension.addLoadListener(loadListenerMock.proxy());
extension.createDOM(null);
}
public void testRemoveLoadListener() throws Exception
{
final IWsDomLoadListener loadListener = (IWsDomLoadListener) mock(IWsDomLoadListener.class).proxy();
extension.addLoadListener(loadListener);
extension.removeLoadListener(loadListener);
extension.createDOM(null);
}
public void testLoadCanceled() throws Exception
{
final IProgressMonitor monitor = new NullProgressMonitor();
monitor.setCanceled(true);
final Mock<IWsDomLoadListener> loadListenerMock = mock(IWsDomLoadListener.class);
loadListenerMock.expects(once()).method("started");
loadListenerMock.expects(once()).method("finished");
extension = new Jee5WsDomRuntimeExtension() {
@Override
protected JaxWsWorkspaceResource createResource() {
return new JaxWsWorkspaceResource(javaModel()) {
@Override
public boolean isLoadCnaceled() {
return true;
}
@Override
public void startSynchronizing() {
fail("startSynchronizing should not be called in this case");
}
};
}
};
extension.addLoadListener(loadListenerMock.proxy());
try {
extension.createDOM(monitor);
fail("WsDOMLoadCanceledException not thrown az expected");
} catch (WsDOMLoadCanceledException _) {
// nothing to do here
}
}
public void testStartSynchronizingCalledIfLoadNotCanceled() throws Exception {
final boolean[] startSyncCalled = { false };
extension = new Jee5WsDomRuntimeExtension() {
@Override
protected JaxWsWorkspaceResource createResource() {
return new JaxWsWorkspaceResource(javaModel()) {
@Override
public void startSynchronizing() {
startSyncCalled[0] = true;
}
};
}
};
extension.createDOM(new NullProgressMonitor());
assertTrue("Start syncronization was not started even the load wasa not canceled", startSyncCalled[0]);
}
public void testCreateDOMBlocksWhenCalled() throws Exception
{
final boolean[] doLoadStarted = { false };
final boolean[] doLoadFinished = { false };
extension = new Jee5WsDomRuntimeExtension() {
@Override
protected JaxWsWorkspaceResource createResource() {
return new JaxWsWorkspaceResource(javaModel()) {
@Override
protected void doLoad(final Map<?, ?> options) throws IOException {
doLoadStarted[0] = true;
try {
Thread.sleep(400);
} catch (InterruptedException e) {
throw new IOException(e.getLocalizedMessage());
}
super.doLoad(options);
doLoadFinished[0] = true;
}
};
}
};
new Thread(){
@Override
public void run() {
try {
extension.createDOM(new NullProgressMonitor());
} catch (IOException e) {
fail(e.getMessage());
} catch (WsDOMLoadCanceledException e) {
fail(e.getMessage());
}
}
}.start();
Assertions.waitAssert(new IWaitCondition() {public boolean checkCondition() {
return doLoadStarted[0];
}}, "Loading from another thread not started");
extension.createDOM(new NullProgressMonitor());
assertTrue("Start syncronization was not started even the load was not canceled", doLoadFinished[0]);
}
}