/*******************************************************************************
* Copyright (c) 2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.ui.test.wizard;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry;
import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
import org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.IClassBean;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IQualifier;
import org.jboss.tools.cdi.internal.core.refactoring.AddQualifiersToBeanProcessor;
import org.jboss.tools.cdi.internal.core.refactoring.ValuedQualifier;
import org.jboss.tools.cdi.ui.test.testmodel.CDIBean;
import org.jboss.tools.cdi.ui.test.testmodel.CDIInjectionPoint;
import org.jboss.tools.cdi.ui.test.testmodel.CDIProject;
import org.jboss.tools.cdi.ui.test.testmodel.CDIQualifierDeclaration;
import org.jboss.tools.cdi.ui.wizard.AddQualifiersToBeanWizard;
public class AddQualifiersToBeanWizardTest extends TestCase{
private CDIProject project;
private ArrayList<ValuedQualifier> availableCheck;
private ArrayList<ValuedQualifier> deployedCheck;
private AddQualifiersToBeanProcessor processor;
private AddQualifiersToBeanWizard wizard;
private Dialog dialog;
@Override
protected void setUp() throws Exception {
super.setUp();
project = CDIProject.defaultCDIProject;
IClassBean bean = new CDIBean(project, "org.test.FooBean");
IInjectionPoint injectionPoint = new CDIInjectionPoint(project, bean);
ArrayList<IBean> beans = new ArrayList<IBean>();
beans.add(bean);
availableCheck = new ArrayList<ValuedQualifier>();
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIConstants.NAMED_QUALIFIER_TYPE_NAME)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIConstants.NEW_QUALIFIER_TYPE_NAME)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER1)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER2)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER3)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER4)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER5)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.COMPLICATED_QUALIFIER1)));
availableCheck.add(new ValuedQualifier(project.getQualifier(CDIProject.COMPLICATED_QUALIFIER2)));
deployedCheck = new ArrayList<ValuedQualifier>();
deployedCheck.add(new ValuedQualifier(project.getQualifier(CDIConstants.ANY_QUALIFIER_TYPE_NAME)));
deployedCheck.add(new ValuedQualifier(project.getQualifier(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME)));
processor = new AddQualifiersToBeanProcessor("", injectionPoint, beans, bean);
ProcessorBasedRefactoring refactoring = new ProcessorBasedRefactoring(processor);
wizard = new AddQualifiersToBeanWizard(refactoring);
Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
RefactoringStatus fInitialConditions= processor.checkInitialConditions(new NullProgressMonitor());
if (fInitialConditions.hasFatalError()) {
for(RefactoringStatusEntry entry : fInitialConditions.getEntries()){
if(entry.getSeverity() == RefactoringStatus.FATAL)
fail("Fatal Error - "+entry.getMessage());
}
} else {
wizard.setInitialConditionCheckingStatus(fInitialConditions);
dialog= new RefactoringWizardDialog(parent, wizard);
dialog.setBlockOnOpen(false);
dialog.create();
dialog.open();
}
}
@Override
protected void tearDown() throws Exception {
dialog.close();
super.tearDown();
}
private void checkQualifierLists(List<ValuedQualifier> checkQualifiers, List<IQualifier> actualQualifiers){
for(ValuedQualifier vq : checkQualifiers){
if(!actualQualifiers.contains(vq.getQualifier()))
fail("Qualifier - "+vq.getQualifier().getSourceType().getFullyQualifiedName()+" not found");
}
for(IQualifier q : actualQualifiers){
if(!checkQualifiers.contains(new ValuedQualifier(q)))
fail("Wrong Qualifier - "+q.getSourceType().getFullyQualifiedName()+" found");
}
}
private void checkValuedQualifierLists(List<ValuedQualifier> checkQualifiers, List<ValuedQualifier> actualQualifiers){
for(ValuedQualifier vq : checkQualifiers){
if(!actualQualifiers.contains(vq))
fail("Qualifier - "+vq.getQualifier().getSourceType().getFullyQualifiedName()+" not found");
}
for(ValuedQualifier q : actualQualifiers){
if(!checkQualifiers.contains(q))
fail("Wrong Qualifier - "+q.getQualifier().getSourceType().getFullyQualifiedName()+" found");
}
}
public void testAddQualifier(){
List<IQualifier> available = wizard.getAvailableQualifiers();
checkQualifierLists(availableCheck, available);
List<ValuedQualifier> deployed = wizard.getDeployedQualifiers();
checkValuedQualifierLists(deployedCheck, deployed);
// Deploy qualifier
ValuedQualifier qualifier = new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER1));
ValuedQualifier defaultQualifier = new ValuedQualifier(project.getQualifier(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME));
wizard.deploy(qualifier);
available = wizard.getAvailableQualifiers();
availableCheck.remove(qualifier);
checkQualifierLists(availableCheck, available);
deployed = wizard.getDeployedQualifiers();
deployedCheck.add(qualifier);
deployedCheck.remove(defaultQualifier);
checkValuedQualifierLists(deployedCheck, deployed);
}
public void testAddAndRemoveQualifier(){
List<IQualifier> available = wizard.getAvailableQualifiers();
checkQualifierLists(availableCheck, available);
List<ValuedQualifier> deployed = wizard.getDeployedQualifiers();
checkValuedQualifierLists(deployedCheck, deployed);
// Deploy qualifier
ValuedQualifier qualifier = new ValuedQualifier(project.getQualifier(CDIProject.QUALIFIER2));
ValuedQualifier defaultQualifier = new ValuedQualifier(project.getQualifier(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME));
wizard.deploy(qualifier);
available = wizard.getAvailableQualifiers();
availableCheck.remove(qualifier);
checkQualifierLists(availableCheck, available);
deployed = wizard.getDeployedQualifiers();
deployedCheck.add(qualifier);
deployedCheck.remove(defaultQualifier);
checkValuedQualifierLists(deployedCheck, deployed);
// Remove qualifier
wizard.remove(qualifier);
available = wizard.getAvailableQualifiers();
availableCheck.add(qualifier);
checkQualifierLists(availableCheck, available);
deployed = wizard.getDeployedQualifiers();
deployedCheck.remove(qualifier);
deployedCheck.add(defaultQualifier);
checkValuedQualifierLists(deployedCheck, deployed);
}
public void testAddNamedQualifier(){
List<IQualifier> available = wizard.getAvailableQualifiers();
checkQualifierLists(availableCheck, available);
List<ValuedQualifier> deployed = wizard.getDeployedQualifiers();
checkValuedQualifierLists(deployedCheck, deployed);
// Deploy @Named qualifier
ValuedQualifier named = new ValuedQualifier(project.getQualifier(CDIConstants.NAMED_QUALIFIER_TYPE_NAME));
wizard.deploy(named);
available = wizard.getAvailableQualifiers();
availableCheck.remove(named);
checkQualifierLists(availableCheck, available);
deployed = wizard.getDeployedQualifiers();
deployedCheck.add(named);
checkValuedQualifierLists(deployedCheck, deployed);
}
public void testValuedQualifier(){
ValuedQualifier oneQualifier = new ValuedQualifier(project.getQualifier(CDIProject.COMPLICATED_QUALIFIER1));
String value = oneQualifier.getValue();
assertEquals("type = \"default\", realChanky = false, number = 0, bTs = 0, posibility = 0.0, ch = ' '", value);
}
public void testValuedQualifierWithDeclaration(){
ValuedQualifier anotherQualifier = new ValuedQualifier(project.getQualifier(CDIProject.COMPLICATED_QUALIFIER2), new CDIQualifierDeclaration());
String value = anotherQualifier.getValue();
assertEquals("name = \"John\", size = 5, p = 0.5, ch = 'Q', b = 6", value);
}
}