package liquibase.util;
import static org.junit.Assert.*;
import org.junit.Test;
public class StringUtilsTest {
@Test
public void noComments() {
String noComments=" Some text but no comments";
String result = StringUtils.stripComments(noComments);
assertEquals(noComments.trim(),result);
}
@Test
public void singleLineNoNewLine() {
String sql = "Some text" ;
String comment = " -- with comment";
String totalLine=sql + comment ;
String result = StringUtils.stripComments(totalLine);
assertEquals(sql,result);
}
@Test
public void singleLineNoFollowOnLine() {
String sql = "Some text" ;
String comment = " -- with comment\n";
String totalLine=sql + comment ;
String result = StringUtils.stripComments(totalLine);
assertEquals(sql.trim(),result);
}
@Test
public void singleLineMultipleComments() {
String sql = "Some text" ;
String comment = " -- with comment";
String totalLine=sql + comment + "\n"+ sql + comment ;
String result = StringUtils.stripComments(totalLine);
assertEquals(sql+"\n"+sql,result);
}
@Test
public void singleLineWithFollowupLine() {
String sql = "Some text" ;
String comment = " -- with comment";
String totalLine=sql + comment + "\n" + sql ;
String result = StringUtils.stripComments(totalLine);
assertEquals(sql + "\n" + sql,result);
}
@Test
public void multiLineOnOwnLine() {
String sql = "/*Some text\nmore text*/" ;
String result = StringUtils.stripComments(sql);
assertEquals("",result);
}
@Test
public void multiLineAfterSQL() {
String sql = "some sql";
String comment = "/*Some text\nmore text*/" ;
String total = sql + comment;
String result = StringUtils.stripComments(total);
assertEquals(sql.trim(),result);
}
@Test
public void multiLineFinishesWithTextOnLine() {
String sql = "some sql";
String comment = "/*Some text\nmore text*/" ;
String total = comment + sql;
String result = StringUtils.stripComments(total);
assertEquals(sql.trim(),result);
}
@Test
public void multiLineStartAndFinishWithSQL() {
String sql = "some sql";
String comment = "/*Some text\nmore text*/" ;
String total = sql + comment + sql;
String result = StringUtils.stripComments(total);
assertEquals(sql.trim() + sql,result);
}
@Test
public void shouldStripComments() {
String sql = "some sql";
String comment = "/*Some text\nmore text*/" ;
String total = sql + comment + sql;
String[] result = StringUtils.processMutliLineSQL(total,true, null);
assertEquals(1,result.length);
assertEquals(sql+sql,result[0]);
}
@Test
public void stripComments2() {
String sql = "insert into test_table values(1, 'hello');\n" +
"insert into test_table values(2, 'hello');\n" +
"--insert into test_table values(3, 'hello');\n" +
"insert into test_table values(4, 'hello');";
String[] result = StringUtils.processMutliLineSQL(sql, true, ";");
assertEquals(3, result.length);
}
@Test
public void shouldNotStripComments() {
String sql = "some sql";
String comment = "/*Some text\nmore text*/" ;
String total = sql + comment + sql;
String[] result = StringUtils.processMutliLineSQL(total,false, null);
assertEquals(1,result.length);
assertEquals(total,result[0]);
}
@Test
public void splitOngo() {
String sql = "some sql\ngo\nmore sql";
String[] result = StringUtils.splitSQL(sql, null);
assertEquals(2,result.length);
assertEquals("some sql",result[0]);
assertEquals("more sql",result[1]);
}
@Test
public void splitOnGO() {
String sql = "some sql\nGO\nmore sql";
String[] result = StringUtils.splitSQL(sql, null);
assertEquals(2,result.length);
assertEquals("some sql",result[0]);
assertEquals("more sql",result[1]);
}
@Test
public void multilineComment() {
String sql = "/*\n" +
"This is a test comment of SQL script\n" +
"*/\n" +
"\n" +
"Select * from Test;\n" +
"Update Test set field = 1";
String[] result = StringUtils.processMutliLineSQL(sql,true, null);
assertEquals(2,result.length);
assertEquals("Select * from Test",result[0]);
assertEquals("Update Test set field = 1",result[1]);
}
@Test
public void testSplitWithSemicolon() {
StringBuilder sb = new StringBuilder();
sb.append("select * from simple_select_statement;\n");
sb.append("insert into table ( col ) values (' value with; semicolon ');");
String[] result = StringUtils.processMutliLineSQL(sb.toString(), true, null);
assertEquals("Unexpected amount of statements returned",2, result.length);
}
@Test
public void splitWithGo() {
String testString = "SELECT *\n" +
" FROM sys.objects\n" +
" WHERE object_id = OBJECT_ID(N'[test].[currval]')\n" +
" AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')\n" +
" )\n" +
" DROP FUNCTION [test].[currval]\n" +
"go\n" +
" IF EXISTS\n" +
" (\n" +
" SELECT *\n" +
" FROM sys.objects\n" +
" WHERE object_id = OBJECT_ID(N'[test].[nextval]')\n" +
" AND type in (N'P', N'PC')\n" +
" )\n" +
" DROP PROCEDURE [test].[nextval]:";
String[] strings = StringUtils.splitSQL(testString, null);
assertEquals(2, strings.length);
}
}