/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.control.gui.plugin;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.xml.parsers.ParserConfigurationException;
import net.codjo.agent.UserId;
import net.codjo.control.gui.ControlGuiContext;
import net.codjo.control.gui.data.DetailData;
import net.codjo.control.gui.data.QuarantineGuiData;
import net.codjo.control.gui.data.QuarantineGuiDataList;
import net.codjo.gui.toolkit.LabelledItemPanel;
import net.codjo.mad.client.request.Result;
import net.codjo.mad.client.request.Row;
import net.codjo.mad.common.structure.DefaultStructureReader;
import net.codjo.mad.common.structure.StructureReader;
import net.codjo.mad.common.structure.TableStructure;
import net.codjo.mad.gui.request.DetailDataSource;
import net.codjo.xml.XmlException;
import org.uispec4j.Button;
import org.uispec4j.Panel;
import org.uispec4j.UISpecTestCase;
import org.uispec4j.Window;
import org.xml.sax.SAXException;
public class DefaultQuarantineDetailWindowTest extends UISpecTestCase {
private DefaultQuarantineDetailWindow detailWindow;
private QuarantineGuiData guiData;
private StructureReader reader;
private QuarantineManager manager;
@Override
protected void setUp() throws Exception {
reader = getReader();
manager = new QuarantineManager(QuarantineManager.class.getResource("QuarantineGuiTest.xml"),
UserId.createId("login", "pwd"));
}
private DetailDataSource getDataSource(int quarantineNb)
throws IOException, ParserConfigurationException, SAXException {
Result result = new Result();
result.addRow(new Row(Collections.singletonMap("errorType", "10")));
ControlGuiContext ctxt = new ControlGuiContext();
DetailDataSource dataSource = new DetailDataSource(ctxt);
dataSource.setLoadResult(result);
guiData = (QuarantineGuiData)manager.getList().getDataList().toArray()[quarantineNb];
ctxt.putProperty(DefaultQuarantineWindow.QUARANTINE_GUI_DATA, guiData);
ctxt.putProperty("TEST_STRUCTURE_READER", getReader());
return dataSource;
}
private StructureReader getReader()
throws IOException, ParserConfigurationException, SAXException {
reader = new DefaultStructureReader(getClass().getResourceAsStream("StructureDef.xml"));
return reader;
}
public void test_benchmarkQuarantineDetailWindow() throws Exception {
detailWindow = new DefaultQuarantineDetailWindow(getDataSource(0));
Button forceButton = new Window(detailWindow).getButton("Forcer");
assertEquals("Forcer", forceButton.getLabel());
assertEquals("Quarantaine des benchs", detailWindow.getTitle());
JTabbedPane tabbedPane = detailWindow.getMainTabbedPane();
assertEquals(1, tabbedPane.getTabCount());
Collection fieldsInGui = guiData.getDetail().getFields();
assertEquals(2, fieldsInGui.size());
LabelledItemPanel labelledItemPanel = (LabelledItemPanel)tabbedPane.getComponentAt(0);
Panel labelPanel = new Panel(labelledItemPanel);
assertEquals("Code ptf", labelPanel.getTextBox("Quarantaine des benchs_Code ptf.label").getText());
assertEquals("Code du bench", labelPanel.getTextBox("Quarantaine des benchs_Code du bench.label").getText());
assertEquals(800.0, detailWindow.getPreferredSize().getWidth());
assertEquals(600.0, detailWindow.getPreferredSize().getHeight());
}
public void test_emetteurQuarantineDetailWindow() throws Exception {
detailWindow = new DefaultQuarantineDetailWindow(getDataSource(3));
assertEquals("Detail quarantaine des emetteurs", detailWindow.getTitle());
detailWindow.declareFields(getDataSource(3));
JTabbedPane tabbedPane = detailWindow.getMainTabbedPane();
assertEquals(2, tabbedPane.getTabCount());
assertEquals("Caracteristiques", tabbedPane.getComponentAt(0).getName());
assertEquals("Audit", tabbedPane.getComponentAt(1).getName());
LabelledItemPanel labelledItemPanel = (LabelledItemPanel)tabbedPane.getComponentAt(0);
assertEquals(2, countNumberOfTextField(labelledItemPanel));
labelledItemPanel = (LabelledItemPanel)tabbedPane.getComponentAt(1);
assertEquals(3, countNumberOfTextField(labelledItemPanel));
assertEquals(484.0, detailWindow.getPreferredSize().getWidth());
assertEquals(490.0, detailWindow.getPreferredSize().getHeight());
}
public void test_compareFields() throws Exception {
QuarantineGuiDataList list = manager.getList();
for (QuarantineGuiData qGuiData : list.getDataList()) {
TableStructure table = reader.getTableBySqlName(qGuiData.getQuarantine());
compare(table, qGuiData);
}
}
private void compare(TableStructure table, QuarantineGuiData qGuiData) throws Exception {
DetailData detailData = qGuiData.getDetail();
if (detailData != null && detailData.getFields() != null) {
Collection fieldsInGui = detailData.getFields();
for (Object key : table.getFieldsByJavaKey().keySet()) {
String field = (String)key;
if ("quarantineId".equals(field)) {
continue;
}
assertTrue("Le champ " + field
+ " de la Quarantaine devrait etre affich� dans l'�cran d�tail >"
+ qGuiData.getName() + "<", fieldsInGui.contains(field));
}
}
}
private int countNumberOfTextField(LabelledItemPanel labelledItemPanel) {
int number = 0;
Component[] liste = labelledItemPanel.getComponents();
for (Component component : liste) {
if (component instanceof JTextField) {
number++;
}
}
return number;
}
private static DetailDataSource getDataSourceChiotte(int quarantineNb)
throws IOException, ParserConfigurationException, SAXException, XmlException {
Result result = new Result();
result.addRow(new Row(Collections.singletonMap("errorType", "10")));
ControlGuiContext ctxt = new ControlGuiContext();
DetailDataSource dataSource = new DetailDataSource(ctxt);
dataSource.setLoadResult(result);
QuarantineManager manager =
new QuarantineManager(QuarantineManager.class.getResource("QuarantineGuiTest.xml"),
UserId.createId("login", "pwd"));
QuarantineGuiData guiData = (QuarantineGuiData)manager.getList().getDataList().toArray()[quarantineNb];
ctxt.putProperty(DefaultQuarantineWindow.QUARANTINE_GUI_DATA, guiData);
ctxt.putProperty("TEST_STRUCTURE_READER",
new DefaultStructureReader(DefaultQuarantineDetailWindowTest.class.getResourceAsStream(
"StructureDef.xml")));
return dataSource;
}
public static void main(String[] args) throws Exception {
DetailDataSource dataSourceChiotte = getDataSourceChiotte(0);
DefaultQuarantineDetailWindow window = new DefaultQuarantineDetailWindow(dataSourceChiotte);
assertEquals("Quarantaine des benchs", window.getTitle());
JFrame frame = new JFrame("Test Renderer");
frame.getContentPane().add(window.getMainTabbedPane());
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}