/*******************************************************************************
* 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.ui.v2.wsdl.detailspages;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.easymock.EasyMock;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.wst.sse.sieditor.ui.v2.common.DocumentationSection;
import org.eclipse.wst.sse.sieditor.ui.v2.common.IProblemDecorator;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.ITypeDisplayer;
import org.eclipse.wst.sse.sieditor.ui.v2.factory.TreeNodeMapper;
import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdl.detailspages.ParameterDetailsPage;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.ParameterNode;
import org.eclipse.wst.sse.sieditor.test.util.EasymockModelUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IParameter;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
public class TestParameterDetailsPage {
private Shell shell;
private IManagedForm managedForm;
private ITypeDisplayer typeDisplayer;
@Before
public void setUp() throws Exception {
final Display display = Display.getDefault();
managedForm = createNiceMock(IManagedForm.class);
typeDisplayer = createNiceMock(ITypeDisplayer.class);
replay(typeDisplayer);
shell = new Shell(display);
}
@After
public void tearDown() throws Exception {
managedForm = null;
shell = null;
}
@Test
public void testSelectionChanged() {
managedForm.dirtyStateChanged();
replay(managedForm);
final SIFormPageController controller = createNiceMock(SIFormPageController.class);
expect(controller.getCommonTypesDropDownList()).andReturn(new String[] { "boolean" });
expect(controller.isShowCategoryNodes()).andReturn(true);
replay(controller);
final IType type = createNiceMock(IType.class);
replay(type);
final String NAME = "faultName";
final String DOC = "faultDocumentation";
final IParameter param = EasymockModelUtils.createIParameterTypeMockFromSameModel();
expect(param.getName()).andReturn(NAME).atLeastOnce();
expect(param.getDocumentation()).andReturn(DOC).atLeastOnce();
expect(param.getType()).andReturn(type).atLeastOnce();
ITreeNode parent = EasyMock.createNiceMock(ITreeNode.class);
replay(param, parent);
final ParameterNode paramNode = new ParameterNode(null, param, controller);
final IStructuredSelection selection = createMock(IStructuredSelection.class);
expect(selection.size()).andReturn(1);
expect(selection.getFirstElement()).andReturn(paramNode);
replay(selection);
final IProblemDecorator decorator = createMock(IProblemDecorator.class);
decorator.setModelObject(param);
decorator.updateDecorations();
replay(decorator);
final ParameterDetailsPageExposer page = new ParameterDetailsPageExposer(controller, typeDisplayer);
page.initialize(managedForm);
page.createContents(shell);
page.setProblemDecorator(decorator);
page.selectionChanged(null, selection);
assertEquals(NAME, page.getNameTextControl().getText());
assertEquals(DOC, page.getDocumentationSection().getDocumentationText());
assertFalse(page.isDirty());
assertFalse(page.getTypePropertyEditor().isStale());
verify(param);
verify(managedForm);
verify(decorator);
}
@Test
public void testDocumentationTextFocusLost() {
final String DOC = "faultDocumentation";
final String NEW_DOCTEXT = "newfaultDocumentation";
final IParameter param = EasymockModelUtils.createIParameterTypeMockFromSameModel();
expect(param.getDocumentation()).andReturn(DOC).atLeastOnce();
replay(param);
final ParameterNode paramNode = new ParameterNode(null, param, null);
final SIFormPageController controller = createNiceMock(SIFormPageController.class);
expect(controller.getCommonTypesDropDownList()).andReturn(new String[] { "boolean" });
controller.editDocumentation(paramNode, NEW_DOCTEXT);
replay(controller);
final ParameterDetailsPageExposer page = new ParameterDetailsPageExposer(controller, typeDisplayer);
page.initialize(managedForm);
page.createContents(shell);
page.setInput(param);
page.documentationTextModified();
page.getDocumentationSection().update(NEW_DOCTEXT);
page.setTreeNode(paramNode);
page.documentationTextFocusLost();
verify(param);
verify(controller);
}
@Test
public void testIsStale() {
final String NAME = "faultName";
final String DOC = "DocText";
final IType type = createNiceMock(IType.class);
replay(type);
final IParameter param = EasymockModelUtils.createIParameterTypeMockFromSameModel();
expect(param.getDocumentation()).andReturn(DOC).atLeastOnce();
expect(param.getName()).andReturn(NAME).atLeastOnce();
expect(param.getType()).andReturn(type).atLeastOnce();
replay(param);
final SIFormPageController controller = createNiceMock(SIFormPageController.class);
expect(controller.getCommonTypesDropDownList()).andReturn(new String[] { "boolean" });
expect(controller.isShowCategoryNodes()).andReturn(true);
expect(controller.getTreeNodeMapper()).andReturn(new TreeNodeMapper()).anyTimes();
replay(controller);
final ParameterNode paramNode = new ParameterNode(null, param, controller);
final ParameterDetailsPageExposer page = new ParameterDetailsPageExposer(controller, typeDisplayer);
page.initialize(managedForm);
page.createContents(shell);
page.setTreeNode(paramNode);
page.setInput(param);
page.getNameTextControl().setText(NAME);
page.getDocumentationSection().update(DOC);
page.getTypePropertyEditor().update();
assertFalse(page.isStale());
verify(param);
}
@Test
public void testModifyTextListener() {
final String NAME = "faultName";
final String NEW_NAME = "new" + NAME;
final IType type = createNiceMock(IType.class);
replay(type);
final IParameter param = EasymockModelUtils.createIParameterTypeMockFromSameModel();
expect(param.getName()).andReturn(NAME).atLeastOnce();
replay(param);
final ParameterNode paramNode = new ParameterNode(null, param, null);
final SIFormPageController controller = createNiceMock(SIFormPageController.class);
expect(controller.getCommonTypesDropDownList()).andReturn(new String[] { "boolean" });
replay(controller);
final ParameterDetailsPageExposer page = new ParameterDetailsPageExposer(controller, typeDisplayer);
page.initialize(managedForm);
page.createContents(shell);
page.setTreeNode(paramNode);
page.setInput(param);
assertFalse(page.isDirty());
page.getNameTextControl().setText(NAME);
assertFalse(page.isDirty());
page.getNameTextControl().setText(NEW_NAME);
assertTrue(page.isDirty());
verify(param);
verify(controller);
}
@Test
public void testTextFocusListener() {
final String NAME = "faultName";
final String NEW_NAME = "new" + NAME;
final IType type = createNiceMock(IType.class);
replay(type);
final IParameter param = EasymockModelUtils.createIParameterTypeMockFromSameModel();
expect(param.getName()).andReturn(NAME).atLeastOnce();
replay(param);
final ParameterNode paramNode = new ParameterNode(null, param, null);
final SIFormPageController controller = createNiceMock(SIFormPageController.class);
expect(controller.getCommonTypesDropDownList()).andReturn(new String[] { "boolean" });
controller.editItemNameTriggered(paramNode, NEW_NAME);
replay(controller);
final ParameterDetailsPageExposer page = new ParameterDetailsPageExposer(controller, typeDisplayer);
page.initialize(managedForm);
page.createContents(shell);
page.setTreeNode(paramNode);
page.setInput(param);
assertFalse(page.isDirty());
page.getNameTextControl().setText(NEW_NAME);
assertTrue(page.isDirty());
page.getNameTextControl().notifyListeners(SWT.FocusOut, new Event());
assertFalse(page.isDirty());
verify(param);
verify(controller);
}
@Test
public final void testReadOnlySet() {
managedForm.dirtyStateChanged();
replay(managedForm);
final IParameter param = EasymockModelUtils.createIParameterTypeMockFromSameModel();
final SIFormPageController controller = createNiceMock(SIFormPageController.class);
expect(controller.getCommonTypesDropDownList()).andReturn(new String[] { "boolean" });
expect(controller.isResourceReadOnly()).andReturn(Boolean.valueOf(false)).atLeastOnce();
replay(controller);
final IType type = createNiceMock(IType.class);
replay(type);
final String NAME = "faultName";
final String DOC = "faultDocumentation";
expect(param.getName()).andReturn(NAME).atLeastOnce();
expect(param.getDocumentation()).andReturn(DOC).atLeastOnce();
expect(param.getType()).andReturn(type).atLeastOnce();
ITreeNode parent = createNiceMock(ITreeNode.class);
expect(parent.getParent()).andReturn(parent);
replay(param, parent);
final boolean isReadOnlyParamNode[] = {false};
final ParameterNode paramNode = new ParameterNode(null, param, controller) {
@Override
public boolean isReadOnly() {
return isReadOnlyParamNode[0];
}
};
final IStructuredSelection selection = new StructuredSelection(paramNode);
final ParameterDetailsPageExposer page = new ParameterDetailsPageExposer(controller, typeDisplayer);
page.initialize(managedForm);
page.createContents(shell);
page.selectionChanged(null, selection);
assertTrue(page.getNameTextControl().getEditable());
verify(controller);
reset(controller);
expect(controller.isResourceReadOnly()).andReturn(Boolean.valueOf(true)).atLeastOnce();
replay(controller);
page.selectionChanged(null, selection);
assertFalse(page.getNameTextControl().getEditable());
verify(controller, param);
verify(controller);
reset(controller);
expect(controller.isResourceReadOnly()).andReturn(Boolean.valueOf(false)).anyTimes();
replay(controller);
isReadOnlyParamNode[0] = true;
page.selectionChanged(null, selection);
assertFalse(page.getNameTextControl().getEditable());
verify(controller, param);
}
private class ParameterDetailsPageExposer extends ParameterDetailsPage {
public ParameterDetailsPageExposer(final SIFormPageController controller, final ITypeDisplayer typeDisplayer) {
super(controller, typeDisplayer);
}
public Text getNameTextControl() {
return nameTextControl;
}
public DocumentationSection getDocumentationSection() {
return documentationSection;
}
public void setTreeNode(final ParameterNode newTreeNode) {
treeNode = newTreeNode;
typeEditor.setInput(treeNode);
}
public void setInput(final IParameter newFault) {
input = newFault;
}
public TypePropertyEditor getTypePropertyEditor() {
return typeEditor;
}
}
}