package com.rapidminer.test;
import static com.rapidminer.test.utils.RapidAssert.assertArrayEquals;
import static junit.framework.Assert.assertEquals;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
import com.rapidminer.parameter.ParameterTypeEnumeration;
import com.rapidminer.parameter.ParameterTypeTupel;
import com.rapidminer.tools.Tools;
import com.rapidminer.tools.container.Pair;
/** Tests {@link Tools#escape(String, char, char[])} and {@link Tools#unescape(String, char, char[], char)}.
*
* @author Simon Fischer
*
*/
public class EscapeTest {
@Test
public void testEscape() {
assertEquals("test\\\\tost", Tools.escape("test\\tost", '\\', new char[0]));
assertEquals("test\\\ntost", Tools.escape("test\ntost", '\\', new char[] {'\n'}));
assertEquals("one\\.two\\.three\\.\\.five", Tools.escape("one.two.three..five", '\\', new char[] {'.'}));
}
@Test
public void testUnescape() {
List<String> result = new LinkedList<String>();
result.add("test\\tost");
assertEquals(result, Tools.unescape("test\\\\tost", '\\', new char[] {'\\'}, (char)-1));
result = new LinkedList<String>();
result.add("line1");
result.add("line.two");
result.add("");
result.add("last.line");
assertEquals(result, Tools.unescape("line1.line\\.two..last\\.line", '\\', new char[0], '.'));
}
@Test(expected=IllegalArgumentException.class)
public void testException() {
Tools.unescape("illegal\\escape character", '\\', new char[] {'a', 'b'}, (char)-1);
}
@Test
public void testParameterTypeTuple() {
//final char internalSeparator = Parameters.PAIR_SEPARATOR;
final char internalSeparator = '.';
assertArrayEquals(new String[] { "fi"+internalSeparator+"rst", "sec"+internalSeparator+"ond" }, ParameterTypeTupel.transformString2Tupel("fi\\"+internalSeparator+"rst"+internalSeparator+"sec\\"+internalSeparator+"ond"));
assertEquals("fi\\"+internalSeparator+"rst"+internalSeparator+"sec\\"+internalSeparator+"ond", ParameterTypeTupel.transformTupel2String("fi"+internalSeparator+"rst", "sec"+internalSeparator+"ond"));
assertEquals("fi\\"+internalSeparator+"rst"+internalSeparator+"sec\\"+internalSeparator+"ond", ParameterTypeTupel.transformTupel2String(new String[] { "fi"+internalSeparator+"rst", "sec"+internalSeparator+"ond" }));
assertEquals("fi\\"+internalSeparator+"rst"+internalSeparator+"sec\\"+internalSeparator+"ond", ParameterTypeTupel.transformTupel2String(new Pair<String,String>("fi"+internalSeparator+"rst", "sec"+internalSeparator+"ond")));
}
@Test
public void testParameterTypeEnumeration() {
//final char internalRecordSeparator = Parameters.RECORD_SEPARATOR;
final char internalRecordSeparator = ',';
assertArrayEquals(
new String[] {
"fi"+internalRecordSeparator+"rst",
"sec"+internalRecordSeparator+"ond",
"third"+internalRecordSeparator+"" },
ParameterTypeEnumeration.transformString2Enumeration("fi\\"+internalRecordSeparator+"rst"+internalRecordSeparator+"sec\\"+internalRecordSeparator+"ond"+internalRecordSeparator+"third\\"+internalRecordSeparator+""));
List<String> enumeration = new LinkedList<String>();
enumeration.add("fi"+internalRecordSeparator+"rst");
enumeration.add("sec"+internalRecordSeparator+"ond");
enumeration.add("third"+internalRecordSeparator+"");
assertEquals("fi\\"+internalRecordSeparator+"rst"+internalRecordSeparator+"sec\\"+internalRecordSeparator+"ond"+internalRecordSeparator+"third\\"+internalRecordSeparator+"", ParameterTypeEnumeration.transformEnumeration2String(enumeration));
}
}