/*******************************************************************************
* 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.internal.validators;
import static com.rcpcompany.test.utils.EMFTestUtils.*;
import static com.rcpcompany.test.utils.ui.UITestUtils.*;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import com.rcpcompany.uibindings.IManager;
import com.rcpcompany.uibindings.tests.shop.Shop;
import com.rcpcompany.uibindings.tests.shop.ShopFactory;
import com.rcpcompany.uibindings.tests.shop.ShopItem;
import com.rcpcompany.uibindings.validators.ConstraintValidatorAdapter;
import com.rcpcompany.uibindings.validators.EValidatorAdapter;
import com.rcpcompany.uibindings.validators.IValidatorAdapterManager;
/**
* Tests the basic functionality of {@link ValidatorAdapterManager}.
*
* @author Tonny Madsen, The RCP Company
*/
public class ValidationAdapterManagerTest {
private Shop myShop;
private ShopItem myItem;
@Before
public void reset() {
IValidatorAdapterManager.Factory.getManager().reset();
myShop = ShopFactory.eINSTANCE.createShop();
myItem = ShopFactory.eINSTANCE.createShopItem();
myItem.setName("no name");
myItem.setPrice(200f);
myItem.setShop(myShop);
}
@Test
public void testSingleton() {
final ValidatorAdapterManager manager = (ValidatorAdapterManager) IValidatorAdapterManager.Factory.getManager();
assertNotNull(manager);
assertEquals(manager, IValidatorAdapterManager.Factory.getManager());
assertEquals(manager, IManager.Factory.getManager().getService(ValidatorAdapterManager.class));
}
@Test
public void addRemoveValidatorAdapters() {
final EValidatorAdapter validationAdapter = new EValidatorAdapter();
final EValidatorAdapter altValidationAdapter = new EValidatorAdapter();
final ValidatorAdapterManager vam = (ValidatorAdapterManager) IValidatorAdapterManager.Factory.getManager();
final int initValidationAdapters = vam.myValidationRoots.size();
final int initShopAdapterCount = myShop.eAdapters().size();
final int initItemAdapterCount = myItem.eAdapters().size();
/*
* Add adapter: one more root and one more adapter on all objects
*/
vam.addRoot(myShop, validationAdapter);
assertEquals(initValidationAdapters + 1, vam.myValidationRoots.size());
final int shopAdapterCount = myShop.eAdapters().size();
final int itemAdapterCount = myItem.eAdapters().size();
assertTrue(initShopAdapterCount < shopAdapterCount);
assertTrue(initItemAdapterCount < itemAdapterCount);
/*
* Add extra adapter: no change
*/
vam.addRoot(myShop, altValidationAdapter);
assertEquals(initValidationAdapters + 1, vam.myValidationRoots.size());
assertAdapters(shopAdapterCount, myShop);
assertAdapters(itemAdapterCount, myItem);
/*
* remove adapter: no change
*/
vam.removeRoot(myShop, altValidationAdapter);
assertEquals(initValidationAdapters + 1, vam.myValidationRoots.size());
assertAdapters(shopAdapterCount, myShop);
assertAdapters(itemAdapterCount, myItem);
/*
* remove last adapter: root and adapters removed
*/
vam.removeRoot(myShop, validationAdapter);
assertEquals(initValidationAdapters, vam.myValidationRoots.size());
assertAdapters(initShopAdapterCount, myShop);
assertAdapters(initItemAdapterCount, myItem);
/*
* Add two adapters: root and adapters added again
*/
vam.addRoot(myShop, validationAdapter);
vam.addRoot(myShop, altValidationAdapter);
assertEquals(initValidationAdapters + 1, vam.myValidationRoots.size());
assertAdapters(shopAdapterCount, myShop);
assertAdapters(itemAdapterCount, myItem);
/*
* remove all adapters: root and adapters removed
*/
vam.removeRoot(myShop);
assertEquals(initValidationAdapters, vam.myValidationRoots.size());
assertAdapters(initShopAdapterCount, myShop);
assertAdapters(initItemAdapterCount, myItem);
}
/**
* Tests {@link IValidatorAdapterManager#executeWithoutValidation(Runnable)}
*/
@Test
public void testWithoutValidation1() {
testOneWithoutValidation(false);
}
/**
* Tests {@link IValidatorAdapterManager#executeWithoutValidation(Runnable)}
*/
@Test
public void testWithoutValidation2() {
testOneWithoutValidation(true);
}
/**
*
*/
private void testOneWithoutValidation(boolean setBeforeRunnable) {
final int VD = IManager.Factory.getManager().getValidationDelay();
final ValidatorAdapterManager vam = (ValidatorAdapterManager) IValidatorAdapterManager.Factory.getManager();
vam.addRoot(myShop, new ConstraintValidatorAdapter());
sleep(2 * VD);
assertEquals(0, vam.getUnboundMessages().size());
if (setBeforeRunnable) {
myItem.setPrice(-2.0f);
}
vam.executeWithoutValidation(new Runnable() {
@Override
public void run() {
assertEquals(0, vam.getUnboundMessages().size());
myItem.setPrice(-1.0f);
sleep(2 * VD);
assertEquals(0, vam.getUnboundMessages().size());
}
});
assertEquals(0, vam.getUnboundMessages().size());
sleep(2 * VD);
assertEquals(1, vam.getUnboundMessages().size());
}
}