/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.broadcast.common;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
/**
* Test du <code>Context</code>.
*/
public class ContextTest extends TestCase {
private Map<String, Object> params;
/**
* Test que l'on peut connecter deux contextes.
*/
public void test_connectTo() {
// Creation du contexte initial
Map<String, Object> initial = new HashMap<String, Object>();
initial.put("var.a", "A");
initial.put("var.b", "B");
Context initCtxt = new Context(initial);
// Creation du contexte courant
Map<String, Object> current = new HashMap<String, Object>();
current.put("var.a", "OVERRIDED by current");
current.put("autre", "AUTRE");
Context currentCtxt = new Context(current);
// Connecte au contexte initial
currentCtxt.connectTo(initCtxt);
// CurrentCtxt est la fusion des 2 ctxt
assertEquals(3, currentCtxt.getParameters().size());
assertEquals("OVERRIDED by current", currentCtxt.getParameters().get("var.a"));
assertEquals("B", currentCtxt.getParameters().get("var.b"));
assertEquals("AUTRE", currentCtxt.getParameters().get("autre"));
// initCtxt est inchang�
assertEquals(initial, initCtxt.getParameters());
}
/**
* Test que getParameter fonctionne et lance une exception si le parametre est indefini.
*/
public void test_getParameter() {
Context ctxt = new Context(params);
assertEquals("A", ctxt.getParameter("var.a"));
try {
ctxt.getParameter("unknown");
fail("Le parametre unknown n'est pas definit");
}
catch (Exception ex) {
}
ctxt.putParameter("temp", null);
assertNull(ctxt.getParameter("temp"));
}
/**
* Test que les paramtres sont bien protege par le contexte.
*/
public void test_getParameters() {
Context ctxt = new Context(params);
assertTrue(params != ctxt.getParameters());
assertEquals(params, ctxt.getParameters());
Map<String, Object> copyDeParams = new HashMap<String, Object>(params);
params.clear();
assertEquals(copyDeParams, ctxt.getParameters());
}
public void test_hasParameter() {
Context ctxt = new Context(params);
assertTrue(ctxt.hasParameter("var.a"));
assertTrue(!ctxt.hasParameter("unknown"));
ctxt.putParameter("unknown", "xxx");
assertTrue(ctxt.hasParameter("unknown"));
}
/**
* Test que le contexte accepte la definition de nouvelle variable.
*/
public void test_put_newParameter() {
Context ctxt = new Context(params);
ctxt.putParameter("var.x", "x");
assertEquals("le x et B", ctxt.replaceVariables("le $var.x$ et $var.b$"));
}
/**
* Test que le contexte accepte la re-definition de nouvelle variable.
*/
public void test_put_newParameter_override() {
Context ctxt = new Context(params);
ctxt.putParameter("var.x", "x");
ctxt.putParameter("var.x", "y");
assertEquals("le y et B", ctxt.replaceVariables("le $var.x$ et $var.b$"));
}
/**
* Test que le contexte refuse la re-definition de variable d'origine. Une variable d'origine est une
* variable definit a la creation du contexte.
*/
public void test_put_override_immutable_Parameter() {
Context ctxt = new Context(params);
try {
ctxt.putParameter("var.a", "x");
fail("La surdefinition de la variable est interdite car le ctxte"
+ " est construite avec une definition de var.a");
}
catch (Exception ex) {
}
assertEquals("le A et B", ctxt.replaceVariables("le $var.a$ et $var.b$"));
}
/**
* Test que le contexte remplace correctement les parties variables.
*/
public void test_replaceVariables() {
Context initCtxt = new Context(params);
Map<String, Object> current = new HashMap<String, Object>();
current.put("today", new Date());
Context ctxt = new Context(current);
ctxt.connectTo(initCtxt);
assertEquals("le A et B", ctxt.replaceVariables("le $var.a$ et $var.b$"));
}
/**
* Test que le contexte remplace correctement les parties variables r�cursivement.
*/
public void test_replaceVariables_recursivly() {
Context initCtxt = new Context(params);
Map<String, Object> current = new HashMap<String, Object>();
current.put("concat", "$var.a$.$var.b$");
Context ctxt = new Context(current);
ctxt.connectTo(initCtxt);
assertEquals("A.B", ctxt.replaceVariables("$concat$"));
}
/**
* Teste le remplacement des variables du fichier templateFile par les valeurs appropri�es.
*
* @throws Exception Description of the Exception
*/
public void test_replaceVariables_File() throws Exception {
File templateFile = new File("$var.a$/aFile");
File expectedFile = new File("A/aFile");
Context initCtxt = new Context(params);
assertEquals(expectedFile, initCtxt.replaceVariables(templateFile));
}
@Override
protected void setUp() throws java.lang.Exception {
params = new HashMap<String, Object>();
params.put("var.a", "A");
params.put("var.b", "B");
}
}