package org.societies.useragent.decisionmaking.test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.atLeastOnce;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.framework.BundleContext;
import org.springframework.osgi.context.BundleContextAware;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.*;
import java.util.concurrent.*;
import org.societies.api.internal.personalisation.model.IOutcome;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
import org.societies.api.internal.useragent.conflict.ConflictResolutionRule;
import org.societies.api.internal.useragent.feedback.IUserFeedback;
import org.societies.api.internal.useragent.model.ExpProposalContent;
import org.societies.api.internal.useragent.model.ExpProposalType;
import org.societies.useragent.conflict.ConflictResolutionManager;
import org.societies.useragent.decisionmaking.DecisionMaker;
import org.societies.useragent.decisionmaking.DecisionMakingCallback;
import org.societies.api.internal.useragent.model.ExpProposalContent;
import org.societies.api.internal.useragent.model.ExpProposalType;
import org.societies.api.internal.useragent.model.ImpProposalContent;
import org.societies.api.internal.useragent.model.ImpProposalType;
import junit.framework.TestCase;
public class DecsionMakerGUIMockitoTest{
private IOutcome intent;
private IOutcome preference;
private ConflictResolutionManager mock;
private DecisionMaker classUnderTest;
private ServiceResourceIdentifier id;
private IUserFeedback GUI;
private BundleContext ctxB;
@Before
public void setUp() throws Exception {
// creat mocked class
mock = mock(ConflictResolutionManager.class);
intent=mock(IOutcome.class);
ctxB=mock(BundleContext.class);
preference=mock(IOutcome.class);
id=mock(ServiceResourceIdentifier.class);
GUI=new MockUF();
// creat an instance of your tested class
classUnderTest = new DecisionMaker();
// set mock class to the test class
classUnderTest.setManager(mock);
classUnderTest.setFeedbackHandler(GUI);
classUnderTest.setBundleContext(ctxB);
}
@After
public void tearDown() throws Exception{
intent=null;
preference=null;
mock = null;
ctxB=null;
classUnderTest = null;
}
@Test
public void collaborationCallTest() throws Exception {
// set mock class Behavior
try{
String value$1=UUID.randomUUID().toString();
String value$2=UUID.randomUUID().toString();
String name="hi";
when(intent.getvalue()).thenReturn(value$1);
when(intent.getparameterName()).thenReturn(name);
when(intent.getServiceID()).thenReturn(id);
when(intent.toString()).thenReturn("StringOfIntent");
when(preference.getvalue()).thenReturn(value$1);
when(preference.getparameterName()).thenReturn(name);
when(preference.getServiceID()).thenReturn(id);
//when(intent.getServiceID()).thenReturn(UUID.randomUUID().toString());
when(preference.getvalue()).thenReturn(value$2);
when(mock.resolveConflict(intent, preference)).thenReturn(null);
// call the method of your class under test
List<IOutcome> intents=new ArrayList<IOutcome>();
List<IOutcome> preferences=new ArrayList<IOutcome>();
intents.add(intent);
preferences.add(preference);
// classUnderTest.setFeedbackHandler(GUI);
classUnderTest.makeDecision(intents, preferences);
// then check whether the mock call has been as expected
verify(intent, atLeastOnce()).getServiceID();
verify(intent, atLeastOnce()).getparameterName();
verify(intent, atLeastOnce()).getvalue();
verify(preference, atLeastOnce()).getServiceID();
verify(preference, atLeastOnce()).getparameterName();
verify(preference, atLeastOnce()).getvalue();
// verify(preference).getServiceID();
verify(mock, atLeastOnce()).resolveConflict(intent, preference);
}catch(Exception e){
}
// System.err.println("Haoyi Test");
/*examing GUI's behavior requires on the equals function of GUI lib*/
// List<String> options=new ArrayList<String>();
// options.add(intent.toString());
// options.add(preference.toString());
// ExpProposalContent epc=new ExpProposalContent("Conflict Detected!",
// options.toArray(new String[options.size()]));
// HashSet<IOutcome> pres=new HashSet<IOutcome>();
// pres.add(preference);
// verify(GUI).getExplicitFB(ExpProposalType.RADIOLIST, epc, new DecisionMakingCallback(classUnderTest,intent,pres));
}
}