/*******************************************************************************
* Copyright (c) 2006-2013 The RCP Company 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:
* The RCP Company - initial API and implementation
*******************************************************************************/
package com.rcpcompany.uibindings.extests.utils;
import static org.junit.Assert.*;
import java.util.Collections;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.junit.Test;
import com.rcpcompany.uibinding.tests.model.SubTestObject;
import com.rcpcompany.uibinding.tests.model.TestModelFactory;
import com.rcpcompany.uibinding.tests.model.TestModelPackage;
import com.rcpcompany.uibinding.tests.model.TestObject;
import com.rcpcompany.uibindings.IManager;
import com.rcpcompany.uibindings.participants.AbstractDeleteParticipant;
import com.rcpcompany.uibindings.participants.IDeleteParticipantContext;
/**
* Tests {@link com.rcpcompany.uibindings.IDeleteParticipant}.
*
* @author Tonny Madsen, The RCP Company
*/
public class DeleteParticipantTest {
/*
* Here to provoke load of the test model...
*/
private static EClass to = TestModelPackage.Literals.TEST_OBJECT;
private static TestObject myTestObject;
private static SubTestObject mySubTestObject;
public static boolean myCanDeleteTestObjectResult = true;
public static int myCanDeleteTestObjectCalled = 0;
public static boolean myCanDeleteSubTestObjectResult = true;
public static int myCanDeleteSubTestObjectCalled = 0;
public static boolean myQueryUser = true;
public static final IManager M = IManager.Factory.getManager();
public static final EditingDomain ED = M.getEditingDomain();
/**
* Tests that the correct participants are found and executed.
*/
@Test
public void testSuperObjectParticipantUtil() {
myTestObject = TestModelFactory.eINSTANCE.createTestObject();
mySubTestObject = null;
// --------------
myCanDeleteTestObjectResult = false;
myCanDeleteSubTestObjectResult = false;
myCanDeleteTestObjectCalled = 0;
myCanDeleteSubTestObjectCalled = 0;
myQueryUser = false;
Command c = M.deleteObjects(ED, Collections.singletonList(myTestObject), myQueryUser);
assertEquals(myCanDeleteTestObjectResult, c != null && c.canExecute());
assertEquals(1, myCanDeleteTestObjectCalled);
assertEquals(0, myCanDeleteSubTestObjectCalled);
// --------------
myCanDeleteTestObjectResult = false;
myCanDeleteSubTestObjectResult = false;
myCanDeleteTestObjectCalled = 0;
myCanDeleteSubTestObjectCalled = 0;
myQueryUser = true;
c = M.deleteObjects(ED, Collections.singletonList(myTestObject), myQueryUser);
assertEquals(myCanDeleteTestObjectResult, c != null && c.canExecute());
assertEquals(1, myCanDeleteTestObjectCalled);
assertEquals(0, myCanDeleteSubTestObjectCalled);
// --------------
myCanDeleteTestObjectResult = true;
myCanDeleteSubTestObjectResult = false;
myCanDeleteTestObjectCalled = 0;
myCanDeleteSubTestObjectCalled = 0;
myQueryUser = false;
c = M.deleteObjects(ED, Collections.singletonList(myTestObject), myQueryUser);
assertEquals(myCanDeleteTestObjectResult, c != null && c.canExecute());
assertEquals(1, myCanDeleteTestObjectCalled);
assertEquals(0, myCanDeleteSubTestObjectCalled);
}
/**
* Tests that the correct participants are found and executed.
*/
@Test
public void testSubObjectParticipantUtil() {
mySubTestObject = TestModelFactory.eINSTANCE.createSubTestObject();
myTestObject = mySubTestObject;
// --------------
myCanDeleteTestObjectResult = false;
myCanDeleteSubTestObjectResult = false;
myCanDeleteTestObjectCalled = 0;
myCanDeleteSubTestObjectCalled = 0;
myQueryUser = false;
Command c = M.deleteObjects(ED, Collections.singletonList(mySubTestObject), myQueryUser);
assertEquals(myCanDeleteSubTestObjectResult, c != null && c.canExecute());
assertEquals(1, myCanDeleteSubTestObjectCalled);
assertEquals(0, myCanDeleteTestObjectCalled);
// --------------
myCanDeleteTestObjectResult = true;
myCanDeleteSubTestObjectResult = false;
myCanDeleteTestObjectCalled = 0;
myCanDeleteSubTestObjectCalled = 0;
myQueryUser = false;
c = M.deleteObjects(ED, Collections.singletonList(myTestObject), myQueryUser);
assertEquals(myCanDeleteTestObjectResult && myCanDeleteSubTestObjectResult, c != null && c.canExecute());
assertEquals(1, myCanDeleteSubTestObjectCalled);
assertEquals(0, myCanDeleteTestObjectCalled);
// --------------
myCanDeleteTestObjectResult = true;
myCanDeleteSubTestObjectResult = true;
myCanDeleteTestObjectCalled = 0;
myCanDeleteSubTestObjectCalled = 0;
myQueryUser = false;
c = M.deleteObjects(ED, Collections.singletonList(myTestObject), myQueryUser);
assertEquals(myCanDeleteTestObjectResult && myCanDeleteSubTestObjectResult, c != null && c.canExecute());
assertEquals(1, myCanDeleteSubTestObjectCalled);
assertEquals(1, myCanDeleteTestObjectCalled);
}
public static class TestObjectDeleteParticipant extends AbstractDeleteParticipant {
@Override
public boolean canDelete(IDeleteParticipantContext context) {
assertNotNull(context);
assertEquals(myTestObject, context.getElement());
assertEquals(myQueryUser, context.canQueryUser());
assertEquals(ED, context.getEditingDomain());
myCanDeleteTestObjectCalled++;
return myCanDeleteTestObjectResult;
}
}
public static class SubTestObjectDeleteParticipant extends AbstractDeleteParticipant {
@Override
public boolean canDelete(IDeleteParticipantContext context) {
assertNotNull(context);
assertEquals(mySubTestObject, context.getElement());
assertEquals(myQueryUser, context.canQueryUser());
assertEquals(ED, context.getEditingDomain());
myCanDeleteSubTestObjectCalled++;
return myCanDeleteSubTestObjectResult;
}
}
}