package de.unioninvestment.eai.portal.portlet.crud.scripting.category;
import static java.util.Arrays.asList;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import groovy.lang.GString;
import groovy.lang.GroovyShell;
import org.codehaus.groovy.runtime.GStringImpl;
import org.junit.Before;
import org.junit.Test;
public class GStringCategoryTest {
private GString gsWithNestedNumber;
private GString gsWithNestedNumberWithoutTrailingString;
private GroovyShell shell;
@Before
public void prepare() {
shell = new GroovyShell();
gsWithNestedNumber = (GString) shell.evaluate(" def x=1; \"x = $x\" ");
// for better understanding
assertThat(asList(gsWithNestedNumber.getStrings()),
equalTo(asList("x = ", "")));
gsWithNestedNumberWithoutTrailingString = new GStringImpl(
new Object[] { 1 }, new String[] { "x = " });
}
@Test
public void shouldKeepOtherGStringsAsIs() {
assertThat(GStringCategory.flatten(gsWithNestedNumber),
is(gsWithNestedNumber));
}
@Test
public void shouldFlattenNestedGString() {
shell.setProperty("gsWithNestedNumber", gsWithNestedNumber);
GString gs = (GString) shell
.evaluate(" \"text is '$gsWithNestedNumber'\" ");
GString result = GStringCategory.flatten(gs);
assertThat(asList(result.getStrings()),
equalTo(asList("text is 'x = ", "'")));
assertThat(asList(result.getValues()), equalTo(asList((Object) 1)));
}
@Test
public void shouldFlattenNestedGStringWithoutTrailingString() {
shell.setProperty("gsWithNestedNumberWithoutTrailingString",
gsWithNestedNumberWithoutTrailingString);
GString gs = (GString) shell
.evaluate(" \"text is '$gsWithNestedNumberWithoutTrailingString'\" ");
GString result = GStringCategory.flatten(gs);
assertThat(asList(result.getStrings()),
equalTo(asList("text is 'x = ", "'")));
assertThat(asList(result.getValues()), equalTo(asList((Object) 1)));
}
@Test
public void shouldFlattenTwoNestedGStrings() {
shell.setProperty("gsWithNestedNumber", gsWithNestedNumber);
GString gs = (GString) shell
.evaluate(" \"two times '$gsWithNestedNumber','$gsWithNestedNumber'\" ");
GString result = GStringCategory.flatten(gs);
assertThat(asList(result.getStrings()),
equalTo(asList("two times 'x = ", "','x = ", "'")));
assertThat(asList(result.getValues()), equalTo(asList((Object) 1, 1)));
}
@Test
public void shouldFlattenMinimalGString() {
GString nested = StringCategory.toGString("1,2,3");
shell.setProperty("nested", nested);
GString gs = (GString) shell.evaluate(" \"field in ($nested)\" ");
GString result = GStringCategory.flatten(gs);
assertThat(asList(result.getStrings()),
equalTo(asList("field in (1,2,3)")));
assertThat(result.getValueCount(), is(0));
}
@Test
public void shouldConvertGStringToSqlString() {
GString test = (GString) shell
.evaluate(" String a='Test'; \"select * from TEST where a = $a\" ");
assertThat(GStringCategory.toSqlString(test),
is("select * from TEST where a = 'Test'"));
}
}