package net.codjo.segmentation.gui.plugin; import java.io.StringReader; import java.rmi.RemoteException; import junit.framework.TestCase; import net.codjo.mad.client.plugin.MadConnectionPluginMock; import net.codjo.mad.client.request.RequestIdManager; import net.codjo.mad.client.request.util.ServerWrapper; import net.codjo.mad.client.request.util.ServerWrapperFactory; import net.codjo.mad.gui.base.DefaultGuiConfiguration; import net.codjo.mad.gui.base.GuiConfiguration; import net.codjo.mad.gui.framework.LocalGuiContext; import net.codjo.mad.gui.plugin.MadGuiPlugin; import net.codjo.mad.gui.request.Preference; import net.codjo.mad.gui.request.PreferenceFactory; import net.codjo.plugin.common.ApplicationCore; import net.codjo.security.common.api.User; import net.codjo.segmentation.gui.SegmentationGuiContext; import net.codjo.workflow.gui.plugin.WorkflowGuiPlugin; import org.mockito.Mockito; import org.picocontainer.MutablePicoContainer; import org.xml.sax.InputSource; import static net.codjo.mad.gui.request.PreferenceFactory.getPreference; /** * */ public class SegmentationGuiPluginTest extends TestCase { static final String PREFERENCE = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" + "<preferenceList xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:noNamespaceSchemaLocation=\"http://preference.xsd\">\n" + " <preference id=\"ClassificationWindow\"\n" + " detailWindowClassName=\"net.codjo.segmentation.gui.settings.ClassificationStructureLogic\">\n" + " <selectAll>selectAllClassification</selectAll>\n" + " <column fieldName=\"id\" label=\"Secret Id\" preferredSize=\"20\"/>\n" + " <hidden>\n" + " <column fieldName=\"hiddenColumn\" label=\"Hidden Column\" preferredSize=\"2000\"/>\n" + " </hidden>\n" + " </preference>\n" + " <preference id=\"ClassificationWizardWindow\"\n" + " detailWindowClassName=\"net.codjo.segmentation.gui.settings.ClassificationStructureLogic\">\n" + " <selectAll>selectAllClassification</selectAll>\n" + " <column fieldName=\"id\" label=\"Secret Id\" preferredSize=\"20\"/>\n" + " <hidden>\n" + " <column fieldName=\"hiddenColumn\" label=\"Hidden Column\" preferredSize=\"2000\"/>\n" + " </hidden>\n" + " </preference>\n" + " <preference id=\"ClassificationStructureWindow\"\n" + " detailWindowClassName=\"net.codjo.segmentation.gui.settings.ClassificationStructureLogic\">\n" + " <selectAll>selectAllClassification</selectAll>\n" + " <column fieldName=\"id\" label=\"Secret Id\" preferredSize=\"20\"/>\n" + " <hidden>\n" + " <column fieldName=\"hiddenColumn\" label=\"Hidden Column\" preferredSize=\"2000\"/>\n" + " </hidden>\n" + " </preference>\n" + "</preferenceList>"; private MadGuiPlugin madGuiPlugin; private GuiConfiguration guiConfiguration; private SegmentationGuiContext guiContext; private SegmentationGuiPlugin segmentationGuiPlugin; @Override public void setUp() throws Exception { RequestIdManager.getInstance().reset(); PreferenceFactory.initFactory(); PreferenceFactory.loadMapping(new InputSource(new StringReader(PREFERENCE))); initServerWrapperMock(); initGuiContextMock(); initGuiConfigurationMock(); initMadGuiPluginMock(); segmentationGuiPlugin = new SegmentationGuiPlugin(Mockito.mock(ApplicationCore.class), madGuiPlugin, new WorkflowGuiPlugin()); } @Override public void tearDown() { RequestIdManager.getInstance().reset(); PreferenceFactory.clearPreferences(); } public void testPreferenceCustomization() throws Exception { segmentationGuiPlugin.getConfiguration() .setClassificationPreferenceId("MySpecialClassificationWindow"); segmentationGuiPlugin.getConfiguration() .setClassificationAnomalyPreferenceId("MyAnomalyPreferenceId"); segmentationGuiPlugin.initGui(guiConfiguration); Preference preference = PreferenceFactory.getPreference("ClassificationWindow"); assertEquals( "The lib preference must be extended with the column coming from the application preference", 2, preference.getColumns().size()); assertEquals( "The lib preference must be extended with the hidden column coming from the application preference", 2, preference.getHiddenColumns().size()); assertEquals("id", preference.getColumns().get(0).getFieldName()); assertEquals("myId", preference.getColumns().get(1).getFieldName()); assertEquals("hiddenColumn", preference.getHiddenColumns().get(0).getFieldName()); assertEquals("myHiddenColumn", preference.getHiddenColumns().get(1).getFieldName()); } private void initGuiContextMock() { User user = Mockito.mock(User.class); Mockito.when(user.isAllowedTo(Mockito.anyString())).thenReturn(false); guiContext = new SegmentationGuiContext(); guiContext.setUser(user); } private void initGuiConfigurationMock() throws Exception { guiConfiguration = new DefaultGuiConfiguration( Mockito.mock(MutablePicoContainer.class), guiContext, Mockito.mock(LocalGuiContext.class)); } private void initMadGuiPluginMock() throws Exception { madGuiPlugin = new MadGuiPlugin(new MadConnectionPluginMock()); madGuiPlugin.initGui(guiConfiguration); } private void initServerWrapperMock() throws RemoteException { ServerWrapper serverWrapper = Mockito.mock(ServerWrapper.class); ServerWrapperFactory.setPrototype(serverWrapper); Mockito.when(serverWrapper.copy()).thenReturn(serverWrapper); Mockito.when(serverWrapper.sendWaitResponse(Mockito.anyString(), Mockito.anyLong())) .thenReturn( "<?xml version=\"1.0\"?><results><result request_id='1'><row><field name=\"result\"><![CDATA[<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" + "<structure></structure>]]></field></row></result></results>"); } }