package cn.org.rapid_framework.generator.util;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import junit.framework.TestCase;
import freemarker.template.Configuration;
/**
* @author badqiu
*/
public class StringHelperTest extends TestCase {
public void testToUnderscoreName() {
assertEquals(null,StringHelper.toUnderscoreName(null));
assertEquals("",StringHelper.toUnderscoreName(""));
assertEquals(" ",StringHelper.toUnderscoreName(" "));
assertEquals(" u",StringHelper.toUnderscoreName(" u"));
assertEquals("a",StringHelper.toUnderscoreName("A"));
assertEquals("user",StringHelper.toUnderscoreName("User"));
assertEquals("user_foo",StringHelper.toUnderscoreName("userFoo"));
assertEquals("user_foo",StringHelper.toUnderscoreName("UserFoo"));
assertEquals("user_foo_bar",StringHelper.toUnderscoreName("userFooBar"));
assertEquals("_user",StringHelper.toUnderscoreName("_user"));
assertEquals("user_foo_bar_foo_b_ar",StringHelper.toUnderscoreName("user_foo_bar_Foo_BAr"));
assertEquals("user_foo",StringHelper.toUnderscoreName("user_Foo"));
assertEquals("user_foo_up",StringHelper.toUnderscoreName("user_FooUp"));
assertEquals("user",StringHelper.toUnderscoreName("user"));
assertEquals("user_foo_bar_user_info",StringHelper.toUnderscoreName("userFooBar_UserInfo"));
assertEquals("user__info",StringHelper.toUnderscoreName("user__Info"));
assertEquals("user_info",StringHelper.toUnderscoreName("USER_INFO"));
assertEquals("user",StringHelper.toUnderscoreName("USER"));
assertEquals("u_se_r",StringHelper.toUnderscoreName("uSeR"));
assertEquals("user",StringHelper.toUnderscoreName("user"));
assertEquals("中",StringHelper.toUnderscoreName("中"));
assertEquals("中_se_r",StringHelper.toUnderscoreName("中SeR"));
assertEquals("level1_channel",StringHelper.toUnderscoreName("LEVEL1_CHANNEL"));
assertEquals("Level1Channel",StringHelper.makeAllWordFirstLetterUpperCase(StringHelper.toUnderscoreName("LEVEL1_CHANNEL")));
}
public void test_unescapeXml() {
assertEquals(">",StringHelper.unescapeXml(">"));
assertEquals("& ",StringHelper.unescapeXml("& "));
assertEquals(null,StringHelper.unescapeXml(null));
assertEquals("\"",StringHelper.unescapeXml("""));
assertEquals("'",StringHelper.unescapeXml("'"));
assertEquals("123< 456 < &",StringHelper.unescapeXml("123< 456 < &"));
}
public void test_escapeXml() {
assertEquals(">",StringHelper.escapeXml(">"));
assertEquals("& ",StringHelper.escapeXml("& "));
assertEquals(null,StringHelper.escapeXml(null));
assertEquals(""",StringHelper.escapeXml("\""));
assertEquals("'",StringHelper.escapeXml("'"));
assertEquals("123< 456 < &",StringHelper.escapeXml("123< 456 < &"));
}
public void test_indexOfRegex() {
String str = "select * from order \n by blog";
int i = StringHelper.indexOfByRegex(str, "order\\s+by");
assertEquals("select * from ",str.substring(0,i));
str = "select * from order \n blog";
i = StringHelper.indexOfByRegex(str, "order\\s+by");
assertEquals(-1,i);
}
public void testContains() {
assertTrue(StringHelper.contains("badqiu", "adq"));
assertTrue(StringHelper.contains("badqiu", "ADQ"));
assertTrue(StringHelper.contains("badqiu", "abc","dqi"));
assertFalse(StringHelper.contains(null,"blog"));
assertFalse(StringHelper.contains("badqiu", "ddd","ggg"));
try {
String NULL = null;
assertFalse(StringHelper.contains("bad",NULL));
fail();
}catch(Exception e) {}
}
public void test_getExtention() {
assertEquals("123",StringHelper.getExtension("abc.123"));
assertEquals("123",StringHelper.getExtension(".123"));
assertEquals("",StringHelper.getExtension("."));
assertEquals(null,StringHelper.getExtension(null));
assertEquals(null,StringHelper.getExtension("abc123"));
}
// public void testPerformance() {
// ProfileUtils.printCostTime("underscoreName", new Runnable() {
// public void run() {
// for(int i = 0; i < 1000000; i++ ) {
// assertEquals("level1_channel",underscoreName("level1Channel"));
// }
// }
// });
// ProfileUtils.printCostTime("underscoreNameOld", new Runnable() {
// public void run() {
// for(int i = 0; i < 1000000; i++ ) {
// assertEquals("level_1_channel",underscoreNameOld("level1Channel"));
// }
// }
// });
//
//
// System.out.println(underscoreName("level1channel"));
// }
private String underscoreName(String name) {
StringBuffer result = new StringBuffer();
if (name != null && name.length() > 0) {
result.append(Character.toLowerCase(name.charAt(0)));
for (int i = 1; i < name.length(); i++) {
char s = name.charAt(i);
if(Character.isDigit(s)) {
result.append(s);
}else
if (Character.isUpperCase(s)) {
result.append("_");
result.append(Character.toLowerCase(s));
}
else {
result.append(s);
}
}
}
return result.toString();
}
private String underscoreNameOld(String name) {
StringBuffer result = new StringBuffer();
if (name != null && name.length() > 0) {
result.append(name.substring(0, 1).toLowerCase());
for (int i = 1; i < name.length(); i++) {
String s = name.substring(i, i + 1);
if (s.equals(s.toUpperCase())) {
result.append("_");
result.append(s.toLowerCase());
}
else {
result.append(s);
}
}
}
return result.toString();
}
public void test() {
for(Object s : System.getProperties().keySet()) {
System.out.println(s+"="+System.getProperty(s.toString()));
}
}
public void testRemovePrefix() {
assertEquals(null,StringHelper.removePrefix(null, "java.lang."));
assertEquals("Integer",StringHelper.removePrefix("java.lang.Integer", "java.lang."));
assertEquals("user",StringHelper.removePrefix("t_user", "t_",true));
assertEquals("user",StringHelper.removePrefix("T_user", "t_",true));
assertEquals("T_user",StringHelper.removePrefix("T_user", "t_",false));
}
public void testContailsCount() {
assertEquals(StringHelper.containsCount(" ? ? ? ", "?"),3);
assertEquals(StringHelper.containsCount(null, "?"),0);
assertEquals(StringHelper.containsCount("????", "?"),4);
assertEquals(StringHelper.containsCount("? ?", "?"),2);
assertEquals(StringHelper.containsCount("kakaka", "ka"),3);
assertEquals(StringHelper.containsCount("kakabka", "kab"),1);
assertEquals(StringHelper.containsCount("kakabkakab", "kab"),2);
}
public void test_removeIbatisOrderBy() {
assertEquals(StringHelper.removeIbatisOrderBy("a order by username"),"a");
assertEquals(StringHelper.removeIbatisOrderBy("a order by username bbb"),"a");
assertEquals(StringHelper.removeIbatisOrderBy("<isNotEmpty property='orderby'>order by username desc</isNotEmpty>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isNotEmpty property='orderby'>\norder\nby username desc\n</isNotEmpty>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isNotEmpty property='orderby'>\nOrder\tbY username desc\n</isNotEmpty>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isNotEmpty property='orderby'>\nOrder\tbY\nusername desc\n</isNotEmpty>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<abc property='orderby'>\nOrder\tbY\nusername desc\n</abc>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isNotEmpty property='orderby'>Order bYusername desc\n</isNotEmpty>"),"<isNotEmpty property='orderby'>Order bYusername desc\n</isNotEmpty>");
assertEquals(StringHelper.removeIbatisOrderBy("<isEqual prepend='order by' property='orderby' compareValue='PAY'>\nusername desc</isEqual>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isEqual prepend='order by' property='orderby' compareValue='PAY'>\nusername desc\n</isEqual>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isEqual prepend=' order by ' property='orderby' compareValue='PAY'>\nusername desc\n</isEqual>"),"");
assertEquals(StringHelper.removeIbatisOrderBy("<isEqual prepend='order1 by' property='orderby' compareValue='PAY'>\nusername desc\n</isEqual>"),"<isEqual prepend='order1 by' property='orderby' compareValue='PAY'>\nusername desc\n</isEqual>");
assertEquals(StringHelper.removeIbatisOrderBy("a order1 by username"),"a order1 by username");
}
public void test_insertAfter() {
assertEquals("1 2 3 \n 4 5abc 6",StringHelper.insertAfter("1 2 3 \n 4 5 6", "5", "abc"));
}
public void test_insertBefore() {
assertEquals("1 2 3 \n 4 abc5 6",StringHelper.insertBefore("1 2 3 \n 4 5 6", "5", "abc"));
}
public void test_appendReplacement() {
Pattern p = Pattern.compile("(\\d+)(\\w+)");
Matcher m = p.matcher("jjj123www");
m.find();
StringBuffer sb = new StringBuffer();
m.appendReplacement(sb, "|$2|");
assertEquals("jjj|www|",sb.toString());
}
public void test_appendReplacement_with_escape_doler_char() {
Pattern p = Pattern.compile("(\\d+)(\\w+)");
Matcher m = p.matcher("jjj123www");
m.find();
StringBuffer sb = new StringBuffer();
StringHelper.appendReplacement(m,sb, "|$2|");
assertEquals("jjj|$2|",sb.toString());
}
public void test_remove_crlf() {
// new StringTokenizer("\t\n\r\f")
String[] array = StringHelper.tokenizeToStringArray("abc \r\f\n\t123\nbb", "\t\n\r\f");
assertEquals("abc 123 bb",StringHelper.join(array," "));
// assertEquals("abc 123","abc \n\t123".replace('\n', ' '));
}
public void test_remove_order_by() {
assertEquals("select * from user",StringHelper.removeIbatisOrderBy("select * from user order by username").trim());
assertEquals("select * from user",StringHelper.removeIbatisOrderBy("select * from user \n <if test=''>\norder by username\n</if>").trim());
assertEquals("select * from user \n <if test='abc <> 123'>\n</if>",StringHelper.removeIbatisOrderBy("select * from user \n <if test='abc <> 123'>\norder by username\n</if>").trim());
assertEquals("select * from user",StringHelper.removeIbatisOrderBy("select * from user \n <isNotEmpty prepend='order by'>\nusername\n</isNotEmpty>").trim());
assertEquals("select * from user",StringHelper.removeIbatisOrderBy("select * from user \n <isNotEmpty prepend='order by'>username</isNotEmpty>").trim());
assertEquals("select * from user",StringHelper.removeIbatisOrderBy("select * from user \n <if test=''>order by username</if>").trim());
}
public void test_insertTokenIntoSelectSql() {
assertEquals("select /* SELECT-FROM-USER */ * from user",StringHelper.insertTokenIntoSelectSql("select * from user", " /* SELECT-FROM-USER */ "));
assertEquals("select /* SELECT-FROM-USER */ * from user",StringHelper.insertTokenIntoSelectSql("select * from user", " /* SELECT-FROM-USER */ "));
assertEquals("select /* SELECT-FROM-USER */ count(*) from user where 1=$123$",StringHelper.insertTokenIntoSelectSql("select count(*) from user where 1=$123$", " /* SELECT-FROM-USER */ "));
assertEquals("delete from count(*) from user where 1=$123$",StringHelper.insertTokenIntoSelectSql("delete from count(*) from user where 1=$123$", " /* SELECT-FROM-USER */ "));
}
public void testToJavaClassName_with_alipay_dalgen_rule() {
// assertEquals("dalgen是这种规则",StringHelper.toJavaClassName("d_create"),"DCreate"); //TODO dalgen是这种规则
}
public void test_toJavaClassName() {
assertEquals(StringHelper.toJavaClassName("customers",false),"Customers");
assertEquals(StringHelper.toJavaClassName("customers",true),"Customer");
}
public void test_FreemarkerHelper() {
Map model = new HashMap();
model.put("package", "com/company");
model.put("module", "app");
assertEquals("src/com/company",FreemarkerHelper.processTemplateString("src/${package}", model, new Configuration()));
assertEquals("src/com/company/app",FreemarkerHelper.processTemplateString("src/${package}/${module}", model, new Configuration()));
model.put("module", "");
assertEquals("src/com/company//username.java",FreemarkerHelper.processTemplateString("src/${package}/${module}/username.java", model, new Configuration()));
}
}