/******************************************************************************* * 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.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; 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.wsdl.controller.SIFormPageController; import org.eclipse.wst.sse.sieditor.ui.v2.wsdl.detailspages.OperationDetailsPage; import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.OperationNode; 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.IOperation; import org.eclipse.wst.sse.sieditor.model.wsdl.api.OperationType; public class TestOperationDetailsPage { private Shell shell; private IManagedForm managedForm; @Before public void setUp() throws Exception { final Display display = Display.getDefault(); managedForm = createNiceMock(IManagedForm.class); shell = new Shell(display); } @After public void tearDown() throws Exception { managedForm = null; shell = null; } @Test public void testSelectionChanged() { final SIFormPageController controller = createNiceMock(SIFormPageController.class); replay(controller); final String FAULT_NAME = "faultName"; final String FAULT_DOC = "faultDocumentation"; final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getName()).andReturn(FAULT_NAME).atLeastOnce(); expect(operation.getDocumentation()).andReturn(FAULT_DOC).atLeastOnce(); expect(operation.getOperationStyle()).andReturn(OperationType.REQUEST_RESPONSE).atLeastOnce(); replay(operation); final OperationNode faultNode = new OperationNode(null, operation , null); final IStructuredSelection selection = createMock(IStructuredSelection.class); expect(selection.size()).andReturn(1); expect(selection.getFirstElement()).andReturn(faultNode); replay(selection); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.selectionChanged(null, selection); assertEquals(FAULT_NAME, page.getNameTextControl().getText()); assertEquals(FAULT_DOC, page.getDocumentationSection().getDocumentationText()); assertEquals(OperationType.REQUEST_RESPONSE.toString(), page.getTypeCombo().getText()); assertEquals(OperationType.REQUEST_RESPONSE, page.getInitialOpStyle()); assertFalse(page.isDirty()); verify(operation); } @Test public void testDocumentationTextFocusLost() { managedForm.dirtyStateChanged(); replay(managedForm); final String DOC = "faultDocumentation"; final String NEW_DOC = "newfaultDocumentation"; final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getDocumentation()).andReturn(DOC).atLeastOnce(); replay(operation); final OperationNode operationNode = new OperationNode(null, operation , null); final SIFormPageController controller = createNiceMock(SIFormPageController.class); controller.editDocumentation(operationNode, NEW_DOC); replay(controller); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.setTreeNode(operationNode); page.setInput(operation); page.getDocumentationSection().update(NEW_DOC); //on the first keystroak on a thext field - the editor should be marked dirty assertEquals(true,page.isDirty()); page.documentationTextModified(); page.documentationTextFocusLost(); assertFalse(page.isDirty()); verify(operation); verify(managedForm); verify(controller); } @Test public void testisStale() { final String DOC = "faultDocumentation"; final String NEW_DOC = DOC+"new"; final String NAME = "name"; final String NEW_NAME = NAME+"new"; final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getDocumentation()).andReturn(DOC).atLeastOnce(); expect(operation.getName()).andReturn(NAME).atLeastOnce(); expect(operation.getOperationStyle()).andReturn(OperationType.REQUEST_RESPONSE).atLeastOnce(); replay(operation); OperationNode operationNode = new OperationNode(null, operation , null); final SIFormPageController controller = createNiceMock(SIFormPageController.class); replay(controller); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.setTreeNode(operationNode); page.setInput(operation); page.getNameTextControl().setText(NAME); page.getDocumentationSection().update(DOC); page.getTypeCombo().select(0); assertFalse(page.isStale()); verify(operation); //stale because of the OpType final IOperation typeFailInput = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(typeFailInput.getOperationStyle()).andReturn(OperationType.ASYNCHRONOUS); replay(typeFailInput); page.setInput(typeFailInput); assertEquals(true, page.isStale()); verify(typeFailInput); //stale because of the Doc final IOperation docFailInput = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(docFailInput.getOperationStyle()).andReturn(OperationType.REQUEST_RESPONSE); expect(docFailInput.getDocumentation()).andReturn(NEW_DOC).times(1); replay(docFailInput); page.setInput(docFailInput); assertEquals(true, page.isStale()); verify(docFailInput); //stale because of the Name final IOperation nameFailInput = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(nameFailInput.getName()).andReturn(NEW_NAME); replay(nameFailInput); operationNode = new OperationNode(null, nameFailInput, null); page.setTreeNode(operationNode); assertEquals(true, page.isStale()); verify(nameFailInput); } @Test public void testTypeComboSelectionListener() { final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getOperationStyle()).andReturn(OperationType.REQUEST_RESPONSE).atLeastOnce(); replay(operation); final OperationNode operationNode = new OperationNode(null, operation , null); final SIFormPageController controller = createNiceMock(SIFormPageController.class); replay(controller); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.setTreeNode(operationNode); page.setInput(operation); assertFalse(page.isDirty()); // 1 = OperationType.ASYNCHRONOUS page.getTypeCombo().select(1); page.getTypeCombo().notifyListeners(SWT.Selection, new Event()); assertTrue(page.isDirty()); verify(operation); verify(controller); } @Test public void testTypeComboFocusListener() { final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getOperationStyle()).andReturn(OperationType.REQUEST_RESPONSE).atLeastOnce(); replay(operation); final OperationNode operationNode = new OperationNode(null, operation , null); final SIFormPageController controller = createNiceMock(SIFormPageController.class); controller.editOperationTypeTriggered(operationNode, OperationType.ASYNCHRONOUS); replay(controller); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.setTreeNode(operationNode); page.setInput(operation); assertFalse(page.isDirty()); // 1 = OperationType.ASYNCHRONOUS page.getTypeCombo().select(1); page.getTypeCombo().notifyListeners(SWT.Selection, new Event()); assertTrue(page.isDirty()); page.getTypeCombo().notifyListeners(SWT.FocusOut, new Event()); verify(operation); verify(controller); } @Test public void testNameControlFocusListener() { final String NAME = "faultName"; final String NEW_NAME = "new" + NAME; final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getName()).andReturn(NAME).atLeastOnce(); replay(operation); final OperationNode operationNode = new OperationNode(null, operation , null); final SIFormPageController controller = createNiceMock(SIFormPageController.class); replay(controller); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.setTreeNode(operationNode); page.setInput(operation); assertFalse(page.isDirty()); page.getNameTextControl().setText(NEW_NAME); assertTrue(page.isDirty()); page.getNameTextControl().notifyListeners(SWT.FocusOut, new Event()); assertFalse(page.isDirty()); verify(operation); verify(controller); } @Test public void testModifyTextListener() { final String NAME = "faultName"; final String NEW_NAME = "new" + NAME; final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); expect(operation.getName()).andReturn(NAME).atLeastOnce(); replay(operation); final OperationNode faultNode = new OperationNode(null, operation , null); final SIFormPageController controller = createNiceMock(SIFormPageController.class); replay(controller); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.setTreeNode(faultNode); page.setInput(operation); assertFalse(page.isDirty()); page.getNameTextControl().setText(NEW_NAME); assertTrue(page.isDirty()); verify(operation); verify(controller); } @Test public void testReadOnlySet() { final IOperation operation = EasymockModelUtils.createIOperationTypeMockFromSameModel(); final SIFormPageController controller = createNiceMock(SIFormPageController.class); expect(controller.isResourceReadOnly()).andReturn(Boolean.valueOf(false)).atLeastOnce(); replay(controller); final String OPERATION_NAME = "operationName"; final String OPERATION_DOC = "operationDocumentation"; expect(operation.getName()).andReturn(OPERATION_NAME).atLeastOnce(); expect(operation.getDocumentation()).andReturn(OPERATION_DOC).atLeastOnce(); expect(operation.getOperationStyle()).andReturn(OperationType.REQUEST_RESPONSE).atLeastOnce(); replay(operation); final OperationNode operationNode = new OperationNode(null, operation , null); final IStructuredSelection selection = new StructuredSelection(operationNode); final OperationDetailsPageExposer page = new OperationDetailsPageExposer(controller); page.initialize(managedForm); page.createContents(shell); page.selectionChanged(null, selection); assertTrue(page.getNameTextControl().getEditable()); assertTrue(page.getTypeCombo().getEnabled()); verify(controller); reset(controller); expect(controller.isResourceReadOnly()).andReturn(Boolean.valueOf(true)).atLeastOnce(); expect(controller.isPartOfEdittedDocument(operation)).andReturn(Boolean.valueOf(true)).anyTimes(); replay(controller); page.selectionChanged(null, selection); assertFalse(page.getNameTextControl().getEditable()); assertFalse(page.getTypeCombo().getEnabled()); verify(operation,controller); verify(controller); reset(controller); expect(controller.isResourceReadOnly()).andReturn(Boolean.valueOf(true)).anyTimes(); expect(controller.isPartOfEdittedDocument(operation)).andReturn(Boolean.valueOf(true)).anyTimes(); replay(controller); page.selectionChanged(null, selection); assertFalse(page.getNameTextControl().getEditable()); assertFalse(page.getTypeCombo().getEnabled()); verify(operation,controller); } private class OperationDetailsPageExposer extends OperationDetailsPage { public OperationDetailsPageExposer(final SIFormPageController controller) { super(controller); } public Text getNameTextControl() { return nameTextControl; } public DocumentationSection getDocumentationSection() { return documentationSection; } public CCombo getTypeCombo() { return typeCombo; } public OperationType getInitialOpStyle() { return initialOpStyle; } public void setTreeNode(final OperationNode newTreeNode) { treeNode = newTreeNode; } public void setInput(final IOperation newOperation) { input = newOperation; } } }