/*******************************************************************************
* 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.dt;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.emf.ecore.EObject;
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.ui.forms.widgets.FormToolkit;
import org.eclipse.wst.sse.sieditor.model.api.INamedObject;
import org.eclipse.wst.sse.sieditor.model.api.IXSDModelRoot;
import org.eclipse.wst.sse.sieditor.model.generic.DuplicateException;
import org.eclipse.wst.sse.sieditor.model.generic.IllegalInputException;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.AbstractType;
import org.eclipse.wst.sse.sieditor.test.util.EasymockModelUtils;
import org.eclipse.wst.sse.sieditor.ui.v2.IFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.UIConstants;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.IDataTypesFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.ElementNode;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.SimpleTypeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.StructureTypeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.StructureDetailsSection;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDNamedComponent;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDTypeDefinition;
import org.junit.Test;
public class TestTypeNullNameAttribute {
@Test
public void testStructureDetailsSectionNameTextDoesNotChangeForNullModelObjectName() {
// Setup
final Display display = Display.getDefault();
final IDataTypesFormPageController controller = createMock(IDataTypesFormPageController.class);
final FormToolkit toolkit = new FormToolkit(display);
final IManagedForm managedForm = createMock(IManagedForm.class);
final INamedObject modelObject = createMock(INamedObject.class);
// Here the name is NULL
expect(modelObject.getName()).andReturn(null).anyTimes();
EasymockModelUtils.addComponentAndContainerCalls(modelObject, EObject.class);
replay(modelObject);
final ITreeNode node = createMock(ITreeNode.class);
expect(node.getModelObject()).andReturn(modelObject).anyTimes();
replay(node);
final StructureDetailsSectionExpose section = new StructureDetailsSectionExpose(controller, toolkit, managedForm, node);
final Shell shell = new Shell(display);
section.createContents(shell);
// Test ModifyListener for null model object name
assertFalse(section.isDirty());
final Text nameText = section.getNameText();
final Event event = new Event();
nameText.notifyListeners(SWT.Modify, event );
// do not change because nameText="" and model.name=null
assertFalse(section.isDirty());
}
@Test
public void testStructureTypeNodeGetDisplayName() {
final INamedObject modelObject = EasymockModelUtils.createINamedObjectMockFromSameModel();
expect(modelObject.getName()).andReturn(null).anyTimes();
replay(modelObject);
final StructureTypeNode node = new StructureTypeNode(modelObject, null, null);
assertEquals(UIConstants.EMPTY_STRING, node.getDisplayName());
}
@Test
public void testSimpleTypeNodeGetDisplayName() {
final INamedObject modelObject = EasymockModelUtils.createINamedObjectMockFromSameModel();
expect(modelObject.getName()).andReturn(null).anyTimes();
replay(modelObject);
final SimpleTypeNode node = new SimpleTypeNode(modelObject, null);
assertEquals(UIConstants.EMPTY_STRING, node.getDisplayName());
}
@Test
public void testElementNodeGetDisplayName() {
final IElement modelObject = EasymockModelUtils.createIElementMockFromSameModel();
expect(modelObject.getName()).andReturn(null).anyTimes();
replay(modelObject);
final ElementNode node = new ElementNode(modelObject, null, null);
assertEquals(UIConstants.EMPTY_STRING, node.getDisplayName());
}
@Test
public void testTypeIsAnonymousWithNullNameAndParentSchema() {
final IXSDModelRoot modelRoot = createMock(IXSDModelRoot.class);
final ISchema schema = createMock(ISchema.class);
final XSDSchema container = createMock(XSDSchema.class);
final XSDTypeDefinition xsdComp = createMock(XSDTypeDefinition.class);
expect(xsdComp.getContainer()).andReturn(container).anyTimes();
expect(xsdComp.getName()).andReturn(null).anyTimes();
replay(xsdComp);
final TestAbstractType type = new TestAbstractType(modelRoot, xsdComp, schema);
assertFalse(type.isAnonymous());
}
@Test
public void testTypeIsAnonymousWithNullNameAndNotParentSchema() {
final IXSDModelRoot modelRoot = createMock(IXSDModelRoot.class);
final ISchema schema = createMock(ISchema.class);
final XSDComplexTypeDefinition container = createMock(XSDComplexTypeDefinition.class);
final XSDTypeDefinition xsdComp = createMock(XSDTypeDefinition.class);
expect(xsdComp.getContainer()).andReturn(container).anyTimes();
expect(xsdComp.getName()).andReturn(null).anyTimes();
replay(xsdComp);
final TestAbstractType type = new TestAbstractType(modelRoot, xsdComp, schema);
assertTrue(type.isAnonymous());
}
private class TestAbstractType extends AbstractType {
protected TestAbstractType(final IXSDModelRoot modelRoot,
final XSDNamedComponent component, final ISchema schema) {
super(modelRoot, component, schema);
// TODO Auto-generated constructor stub
}
@Override
public IType getBaseType() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getDocumentation() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setBaseType(final IType baseType) throws ExecutionException {
// TODO Auto-generated method stub
}
@Override
public void setName(final String name) throws IllegalInputException,
DuplicateException, ExecutionException {
// TODO Auto-generated method stub
}
@Override
public void setNamespace(final String namespace)
throws IllegalInputException, ExecutionException {
// TODO Auto-generated method stub
}
}
private class StructureDetailsSectionExpose extends StructureDetailsSection {
public StructureDetailsSectionExpose(final IFormPageController controller,
final FormToolkit toolkit, final IManagedForm managedForm, final ITreeNode node) {
super(controller, toolkit, managedForm);
this.node = node;
}
public Text getNameText() {
return nameText;
}
}
}