package net.codjo.broadcast.releasetest; import net.codjo.broadcast.common.Preferences; import net.codjo.broadcast.common.computed.ComputedField; import net.codjo.broadcast.gui.GuiField; import net.codjo.broadcast.gui.GuiPreference; import net.codjo.broadcast.gui.plugin.BroadcastGuiPlugin; import net.codjo.broadcast.gui.plugin.BroadcastGuiPluginConfiguration; import net.codjo.broadcast.server.plugin.BroadcastServerPluginConfiguration; import net.codjo.expression.help.DefaultFunctionHolderHelp; import net.codjo.expression.help.FunctionHelp; import net.codjo.mad.common.structure.DefaultStructureReader; import net.codjo.mad.common.structure.StructureReader; import net.codjo.mad.gui.base.GuiConfigurationMock; import net.codjo.mad.gui.framework.DefaultGuiContext; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.TreeSet; import junit.framework.AssertionFailedError; import junit.framework.TestCase; public abstract class BroadcastConfigurationTestCase extends TestCase { private BroadcastServerPluginConfiguration serverConfiguration; private BroadcastGuiPluginConfiguration guiConfiguration; private GuiConfigurationMock madGuiConfiguration; protected abstract BroadcastGuiPluginConfiguration createGuiConfiguration(); protected abstract BroadcastServerPluginConfiguration createServerConfiguration(); public void test_families() throws Exception { Set<String> server = new TreeSet<String>(); for (Preferences preferences : serverConfiguration.getPreferences()) { server.add(preferences.getFamily()); } Set<String> client = new TreeSet<String>(); for (GuiPreference preferences : guiConfiguration.createGuiPreferenceList(madGuiConfiguration)) { client.add(preferences.getFamily()); } assertFalse("Aucune famille server d�clar�e", server.isEmpty()); assertFalse("Aucune famille client d�clar�e", client.isEmpty()); assertListEquals("Incoh�rence sur le nombre de familles d�clar�es", server, client); } /** * Test la coherence du param�trage serveur et client pour les jointures accessibles � la diffusion. */ public void test_joinKeyNames() throws Exception { for (String family : getFamilies()) { Preferences prefServeur = getServerPreferences(family); Set<String> serverDefinedTables = new TreeSet<String>(prefServeur.getTableList()); serverDefinedTables.remove(prefServeur.getSelectionTableName()); GuiPreference preference = getGuiPreferences(family); Set<String> clientDefinedTables = new TreeSet<String>(preference.getJoinKeyLabels().keySet()); assertListEquals("Incoh�rence des jointures pour '" + family + "'", serverDefinedTables, clientDefinedTables); } } public void test_computedField() throws Exception { for (String family : getFamilies()) { Set<String> serveur = new TreeSet<String>(getComputedFieldNames(family)); Set<String> client = new TreeSet<String>(); GuiField[] guiFields = getGuiPreferences(family).getGuiFieldsFor(getComputedTableName(family)); assertNotNull("[GUI] Dans " + family + " aucune configuration pour " + getComputedTableName(family), guiFields); for (GuiField guiField : guiFields) { client.add(guiField.getFieldName()); } assertEquals(serveur, client); } } public void test_functions() throws Exception { for (String family : getFamilies()) { Set<String> server = new TreeSet<String>(getFunctionsHelp(family)); server.add("iif(condition, si-vrai, si-faux)"); server.add("outil.format(Valeur)"); Set<String> client = new TreeSet<String>(getGuiPreferences(family).getAllFunctions()); assertListEquals("Incoh�rence des fonctions d�clar�es pour '" + family + "'", server, client); } } public void test_buildSelectionComboBox() throws Exception { for (String family : getFamilies()) { assertNotNull(getGuiPreferences(family).buildSelectionComboBox()); } } private Set<String> getFunctionsHelp(String family) { Preferences preferences = getServerPreferences(family); if (preferences.getFunctionHolder() != null) { DefaultFunctionHolderHelp functionHolderHelp = new DefaultFunctionHolderHelp(preferences.getFunctionHolder()); Set<String> result = new TreeSet<String>(); for (FunctionHelp functionHelp : functionHolderHelp.getFunctionHelpList()) { result.add(functionHelp.getHelp()); } return result; } return Collections.emptySet(); } @Override protected void setUp() throws Exception { serverConfiguration = createServerConfiguration(); guiConfiguration = createGuiConfiguration(); madGuiConfiguration = new MadGuiConfigurationMock(); } private StructureReader createStructureReader() throws Exception { return new DefaultStructureReader(getClass().getResourceAsStream("/conf/structure.xml")); } private String[] getFamilies() { List<String> server = new ArrayList<String>(); for (Preferences preferences : serverConfiguration.getPreferences()) { server.add(preferences.getFamily()); } return server.toArray(new String[server.size()]); } private Set<String> getComputedFieldNames(String family) { Preferences vl = getServerPreferences(family); ComputedField[] fields = vl.getComputedFields(); Set<String> names = new TreeSet<String>(); for (ComputedField field : fields) { names.add(field.getName()); } return names; } private String getComputedTableName(String family) { return getServerPreferences(family).getComputedTableName(); } private Preferences getServerPreferences(String family) { for (Preferences preferences : serverConfiguration.getPreferences()) { if (family.equalsIgnoreCase(preferences.getFamily())) { return preferences; } } throw new IllegalArgumentException("Famille '" + family + "' inexistante c�t� serveur."); } private GuiPreference getGuiPreferences(String family) { for (GuiPreference preferences : guiConfiguration.createGuiPreferenceList(madGuiConfiguration)) { if (family.equalsIgnoreCase(preferences.getFamily())) { return preferences; } } throw new IllegalArgumentException("Famille '" + family + "' inexistante c�t� GUI."); } private void assertListEquals(String message, Set<String> serveur, Set<String> client) { // Diff Serveur -> Client List<String> diffServeurClient = new ArrayList<String>(); diffServeurClient.addAll(serveur); diffServeurClient.removeAll(client); // Diff Client -> Serveur List<String> diffClientServeur = new ArrayList<String>(); diffClientServeur.addAll(client); diffClientServeur.removeAll(serveur); // Presentation du resultat String error = message + "\n"; if (diffServeurClient.size() != 0) { error += "\tD�finit sur le serveur mais pas sur le client ! \n\t\t" + diffServeurClient + "\n"; } if (diffClientServeur.size() != 0) { error += "\tD�finit sur le client mais pas sur le serveur ! \n\t\t" + diffClientServeur + "\n"; } if (diffClientServeur.size() != 0 || diffServeurClient.size() != 0) { throw new AssertionFailedError(error + "\nSERVEUR: " + serveur + "\nCLIENT: " + client); } } private class MadGuiConfigurationMock extends GuiConfigurationMock { private StructureReader structureReader; MadGuiConfigurationMock() throws Exception { this.structureReader = createStructureReader(); DefaultGuiContext guiContext = (DefaultGuiContext)getGuiContext(); guiContext.putProperty(BroadcastGuiPlugin.BROADCAST_VTOM_PARAMETER, "to_export.txt"); } @Override public StructureReader getStructureReader() { return structureReader; } } }