| /* |
| * Copyright (c) 2009-2013, 2016 Eike Stepper (Loehne, Germany) and others. |
| * 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: |
| * Simon McDuff - initial API and implementation |
| * Eike Stepper - maintenance |
| */ |
| package org.eclipse.emf.cdo.tests.bugzilla; |
| |
| import org.eclipse.emf.cdo.CDOObject; |
| import org.eclipse.emf.cdo.eresource.CDOResource; |
| import org.eclipse.emf.cdo.session.CDOSession; |
| import org.eclipse.emf.cdo.tests.AbstractCDOTest; |
| import org.eclipse.emf.cdo.tests.model1.Order; |
| import org.eclipse.emf.cdo.transaction.CDOTransaction; |
| import org.eclipse.emf.cdo.util.CDOUtil; |
| |
| import org.eclipse.emf.ecore.EAttribute; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.ecore.EcoreFactory; |
| import org.eclipse.emf.ecore.EcorePackage; |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| |
| /** |
| * Bug 258933 - CDORevisionImpl.eIsSet() works incorrectly. |
| * |
| * @author Simon McDuff |
| */ |
| public class Bugzilla_258933_Test extends AbstractCDOTest |
| { |
| private static final Object NIL = new Object(); |
| |
| public void testBugzilla_258933() throws Exception |
| { |
| // Do not set any value to level. Because 'level' is NOT unsettable we expect isSet==false |
| testWithValue("level", NIL, false); |
| } |
| |
| public void testBugzilla_258933_SetToDefaultValue() throws Exception |
| { |
| // Set level to it's default (10). Because 'level' is NOT unsettable we expect isSet==false |
| testWithValue("level", new Integer(10), false); |
| } |
| |
| public void testBugzilla_258933_String_SetToDefaultValue() throws Exception |
| { |
| // Set level to it's default (Simon). Because 'settable' is NOT unsettable we expect isSet==false |
| testWithValue("settable", "Simon", false); |
| } |
| |
| public void testBugzilla_258933_String_SetToNull() throws Exception |
| { |
| // Set level to null. Because 'settable' is NOT unsettable and null is not the default we expect isSet==true |
| testWithValue("settable", null, true); |
| } |
| |
| public void testBugzilla_258933_String_unsettable() throws Exception |
| { |
| // Do not set any value to settable. Because 'settable' is NOT unsettable we expect isSet==false |
| testWithValue("settable", NIL, false); |
| } |
| |
| public void testBugzilla_258933_String_SetToDefaultValue_unsettable() throws Exception |
| { |
| // Set level to it's default (Simon). Because 'unsettable' is unsettable we expect isSet==true |
| testWithValue("unsettable", "Simon", true); |
| } |
| |
| public void testBugzilla_258933_String_SetToNull_unsettable() throws Exception |
| { |
| // Set level to null. Because 'unsettable' is unsettable we expect isSet==true |
| testWithValue("unsettable", null, true); |
| } |
| |
| public void testBugzilla_258933_String() throws Exception |
| { |
| // Do not set any value to unsettable. Because 'unsettable' is unsettable we expect isSet==false |
| testWithValue("unsettable", NIL, false); |
| } |
| |
| private void testWithValue(String featureName, Object initializeValue, boolean isSet) throws Exception |
| { |
| EPackage topPackage = createDynamicEPackage(); |
| |
| { |
| EPackage subpackage1 = topPackage.getESubpackages().get(0); |
| EClass class1Class = (EClass)subpackage1.getEClassifier("class1"); |
| EStructuralFeature feature = class1Class.getEStructuralFeature(featureName); |
| |
| CDOSession session = openSession(); |
| session.getPackageRegistry().putEPackage(topPackage); |
| |
| CDOTransaction transaction = session.openTransaction(); |
| EObject instance = EcoreUtil.create(class1Class); |
| if (initializeValue != NIL) |
| { |
| instance.eSet(feature, initializeValue); |
| // instance.eUnset(feature); |
| } |
| |
| assertEquals(isSet, instance.eIsSet(feature)); |
| |
| CDOResource resource = transaction.createResource(getResourcePath("/test1")); |
| resource.getContents().add(instance); |
| assertEquals(isSet, instance.eIsSet(feature)); |
| |
| transaction.commit(); |
| assertEquals(isSet, instance.eIsSet(feature)); |
| |
| session.close(); |
| } |
| |
| clearCache(getRepository().getRevisionManager()); |
| |
| CDOSession session = openSession(); |
| if (session instanceof org.eclipse.emf.cdo.net4j.CDONet4jSession) |
| { |
| ((org.eclipse.emf.cdo.net4j.CDONet4jSession)session).options().getNet4jProtocol().setTimeout(2000L); |
| } |
| |
| EPackage subpackage1 = session.getPackageRegistry().getEPackage(topPackage.getESubpackages().get(0).getNsURI()); |
| EClass class1Class = (EClass)subpackage1.getEClassifier("class1"); |
| EStructuralFeature feature = class1Class.getEStructuralFeature(featureName); |
| |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.getResource(getResourcePath("/test1")); |
| CDOObject instance = CDOUtil.getCDOObject(resource.getContents().get(0)); |
| assertEquals(isSet, instance.eIsSet(feature)); |
| |
| resource.getContents().remove(0); |
| assertEquals(isSet, instance.eIsSet(feature)); |
| |
| if (feature.isUnsettable()) |
| { |
| instance.eUnset(feature); |
| assertEquals(false, instance.eIsSet(feature)); |
| } |
| } |
| |
| public void testBugzilla_258278_List() throws Exception |
| { |
| { |
| Order order = getModel1Factory().createPurchaseOrder(); |
| assertEquals(false, order.eIsSet(getModel1Package().getOrder_OrderDetails())); |
| |
| CDOSession session = openSession(); |
| session.getPackageRegistry().putEPackage(getModel1Package()); |
| |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/test1")); |
| resource.getContents().add(order); |
| assertEquals(false, order.eIsSet(getModel1Package().getOrder_OrderDetails())); |
| |
| transaction.commit(); |
| assertEquals(false, order.eIsSet(getModel1Package().getOrder_OrderDetails())); |
| |
| session.close(); |
| } |
| |
| clearCache(getRepository().getRevisionManager()); |
| CDOSession session = openSession(); |
| |
| CDOTransaction transaction = session.openTransaction(); |
| Order instance = (Order)transaction.getResource(getResourcePath("/test1")).getContents().get(0); |
| assertEquals(false, instance.eIsSet(getModel1Package().getOrder_OrderDetails())); |
| |
| transaction.getResource(getResourcePath("/test1")).getContents().remove(0); |
| assertEquals(false, instance.eIsSet(getModel1Package().getOrder_OrderDetails())); |
| |
| instance.getOrderDetails().add(getModel1Factory().createOrderDetail()); |
| } |
| |
| private EPackage createDynamicEPackage() |
| { |
| final EcoreFactory efactory = EcoreFactory.eINSTANCE; |
| final EcorePackage epackage = EcorePackage.eINSTANCE; |
| |
| // Create a new EPackage and add the new EClasses |
| EPackage topPackage = createUniquePackage("top"); |
| EPackage subPackage1 = createUniquePackage("sub"); |
| |
| { |
| EClass schoolBookEClass = efactory.createEClass(); |
| schoolBookEClass.setName("class1"); |
| // create a new attribute for this EClass |
| EAttribute level = efactory.createEAttribute(); |
| level.setName("level"); |
| level.setEType(epackage.getEInt()); |
| level.setUnsettable(false); |
| level.setDefaultValue(new Integer(10)); |
| schoolBookEClass.getEStructuralFeatures().add(level); |
| |
| EAttribute settable = efactory.createEAttribute(); |
| settable.setName("settable"); |
| settable.setEType(epackage.getEString()); |
| level.setUnsettable(false); |
| settable.setDefaultValue(new String("Simon")); |
| schoolBookEClass.getEStructuralFeatures().add(settable); |
| |
| EAttribute unsettable = efactory.createEAttribute(); |
| unsettable.setName("unsettable"); |
| unsettable.setEType(epackage.getEString()); |
| unsettable.setUnsettable(true); |
| unsettable.setDefaultValue(new String("Simon")); |
| schoolBookEClass.getEStructuralFeatures().add(unsettable); |
| |
| subPackage1.getEClassifiers().add(schoolBookEClass); |
| } |
| |
| topPackage.getESubpackages().add(subPackage1); |
| return topPackage; |
| } |
| } |