Issue 548 - Convert non-strings to strings before escaping

git-svn-id: http://google-refine.googlecode.com/svn/trunk@2463 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
Tom Morris 2012-03-14 03:06:11 +00:00
parent 2845e8d1d2
commit e97e7523b2
3 changed files with 41 additions and 4 deletions

View File

@ -47,7 +47,7 @@ import com.google.refine.grel.Function;
public class ToString implements Function {
@Override
public Object call(Properties bindings, Object[] args) {
public String call(Properties bindings, Object[] args) {
if (args.length >= 1) {
Object o1 = args[0];
if (o1 != null) {
@ -64,7 +64,7 @@ public class ToString implements Function {
}
return formatter.format(o1 instanceof Date ? ((Date) o1) : ((Calendar) o1).getTime());
} else {
return (o1 instanceof String) ? o1 : o1.toString();
return (o1 instanceof String) ? (String) o1 : o1.toString();
}
}
}

View File

@ -42,6 +42,7 @@ import org.json.JSONException;
import org.json.JSONWriter;
import com.google.refine.expr.EvalError;
import com.google.refine.expr.functions.ToString;
import com.google.refine.grel.ControlFunctionRegistry;
import com.google.refine.grel.Function;
@ -52,8 +53,17 @@ public class Escape implements Function {
if (args.length == 2) {
Object o1 = args[0];
Object o2 = args[1];
if (o1 != null && o2 != null && o1 instanceof String && o2 instanceof String) {
String s = (String) o1;
String s;
if (o1 instanceof String) {
s = (String) o1;
} else if (o1 == null) {
s = "";
} else {
// Use our own ToString so that formatting is consistent
ToString toString = new ToString();
s = toString.call(bindings,new Object[] {o1});
}
if (o2 instanceof String) {
String mode = ((String) o2).toLowerCase();
if ("html".equals(mode)) {
return StringEscapeUtils.escapeHtml(s);

View File

@ -138,4 +138,31 @@ public class ToFromConversionTests extends RefineTest {
// Calendar
// String
}
@Test
public void testEscape() {
Assert.assertNull(invoke("escape"));
Assert.assertEquals(invoke("escape",null,"xml"),"");
Assert.assertEquals(invoke("escape", "mystring", "html"),"mystring");
Assert.assertEquals(invoke("escape", "mystring", "xml"),"mystring");
Assert.assertEquals(invoke("escape", "mystring", "csv"),"mystring");
Assert.assertEquals(invoke("escape", "mystring", "url"),"mystring");
Assert.assertEquals(invoke("escape", "mystring", "javascript"),"mystring");
Assert.assertEquals(invoke("escape", 1, "html"),"1");
Assert.assertEquals(invoke("escape", 1, "xml"),"1");
Assert.assertEquals(invoke("escape", 1, "csv"),"1");
Assert.assertEquals(invoke("escape", 1, "url"),"1");
Assert.assertEquals(invoke("escape", 1, "javascript"),"1");
Assert.assertEquals(invoke("escape", Long.parseLong("1"), "html"),"1");
Assert.assertEquals(invoke("escape", Long.parseLong("1"), "xml"),"1");
Assert.assertEquals(invoke("escape", Long.parseLong("1"), "csv"),"1");
Assert.assertEquals(invoke("escape", Long.parseLong("1"), "url"),"1");
Assert.assertEquals(invoke("escape", Long.parseLong("1"), "javascript"),"1");
Assert.assertEquals(invoke("escape", Double.parseDouble("1.23"), "html"),"1.23");
Assert.assertEquals(invoke("escape", Double.parseDouble("1.23"), "xml"),"1.23");
Assert.assertEquals(invoke("escape", Double.parseDouble("1.23"), "csv"),"1.23");
Assert.assertEquals(invoke("escape", Double.parseDouble("1.23"), "url"),"1.23");
Assert.assertEquals(invoke("escape", Double.parseDouble("1.23"), "javascript"),"1.23");
}
}