mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-08-18 20:38:02 +08:00
clean history
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package cn.hutool.extra.emoji;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class EmojiUtilTest {
|
||||
|
||||
@Test
|
||||
public void toUnicodeTest() {
|
||||
String emoji = EmojiUtil.toUnicode(":smile:");
|
||||
Assert.assertEquals("😄", emoji);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toAliasTest() {
|
||||
String alias = EmojiUtil.toAlias("😄");
|
||||
Assert.assertEquals(":smile:", alias);
|
||||
}
|
||||
}
|
||||
62
hutool-extra/src/test/java/cn/hutool/extra/ftp/FtpTest.java
Normal file
62
hutool-extra/src/test/java/cn/hutool/extra/ftp/FtpTest.java
Normal file
@@ -0,0 +1,62 @@
|
||||
package cn.hutool.extra.ftp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.lang.Console;
|
||||
|
||||
public class FtpTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void cdTest() {
|
||||
Ftp ftp = new Ftp("looly.centos");
|
||||
|
||||
ftp.cd("/file/aaa");
|
||||
Console.log(ftp.pwd());
|
||||
|
||||
IoUtil.close(ftp);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void uploadTest() {
|
||||
Ftp ftp = new Ftp("looly.centos");
|
||||
|
||||
List<String> ls = ftp.ls("/file");
|
||||
Console.log(ls);
|
||||
|
||||
boolean upload = ftp.upload("/file/aaa", FileUtil.file("E:/qrcodeWithLogo.jpg"));
|
||||
Console.log(upload);
|
||||
|
||||
IoUtil.close(ftp);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void reconnectIfTimeoutTest() throws InterruptedException {
|
||||
Ftp ftp = new Ftp("looly.centos");
|
||||
|
||||
Console.log("打印pwd: " + ftp.pwd());
|
||||
|
||||
Console.log("休眠一段时间,然后再次发送pwd命令,抛出异常表明连接超时");
|
||||
Thread.sleep(35 * 1000);
|
||||
|
||||
try{
|
||||
Console.log("打印pwd: " + ftp.pwd());
|
||||
}catch (FtpException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Console.log("判断是否超时并重连...");
|
||||
ftp.reconnectIfTimeout();
|
||||
|
||||
Console.log("打印pwd: " + ftp.pwd());
|
||||
|
||||
IoUtil.close(ftp);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package cn.hutool.extra.mail;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 默认邮件帐户设置测试
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class MailAccountTest {
|
||||
|
||||
@Test
|
||||
public void parseSettingTest() {
|
||||
MailAccount account = GlobalMailAccount.INSTANCE.getAccount();
|
||||
account.getSmtpProps();
|
||||
|
||||
Assert.assertNotNull(account.getCharset());
|
||||
Assert.assertTrue(account.isSslEnable());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package cn.hutool.extra.mail;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
|
||||
/**
|
||||
* 邮件发送测试
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class MailTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void sendTest() {
|
||||
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/测试附件文本.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void sendTest2() {
|
||||
//附件名长度大于60时的测试
|
||||
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/6-LongLong一阶段平台建设周报2018.3.12-3.16.xlsx"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void sendHtmlTest() {
|
||||
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void sendByAccountTest() {
|
||||
MailAccount account = new MailAccount();
|
||||
account.setHost("smtp.yeah.net");
|
||||
account.setPort(465);
|
||||
account.setSslEnable(true);
|
||||
account.setFrom("hutool@yeah.net");
|
||||
account.setUser("hutool");
|
||||
account.setPass("q1w2e3");
|
||||
MailUtil.send(account, "914104645@qq.com", "测试", "<h1>邮件来自Hutool测试</h1>", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mailAccountTest() {
|
||||
MailAccount account = new MailAccount();
|
||||
account.setFrom("hutool@yeah.net");
|
||||
account.setDebug(true);
|
||||
account.defaultIfEmpty();
|
||||
Properties props = account.getSmtpProps();
|
||||
Assert.assertEquals("true", props.getProperty("mail.debug"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package cn.hutool.extra.qrcode;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Console;
|
||||
|
||||
/**
|
||||
* 二维码工具类单元测试
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class QrCodeUtilTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void generateTest() {
|
||||
QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("e:/qrcode.jpg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void generateCustomTest() {
|
||||
QrConfig config = new QrConfig();
|
||||
config.setMargin(3);
|
||||
config.setForeColor(Color.CYAN.getRGB());
|
||||
config.setBackColor(Color.GRAY.getRGB());
|
||||
config.setErrorCorrection(ErrorCorrectionLevel.H);
|
||||
QrCodeUtil.generate("https://hutool.cn/", config, FileUtil.file("e:/qrcodeCustom.jpg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void generateWithLogoTest() {
|
||||
QrCodeUtil.generate(//
|
||||
"http://hutool.cn/", //
|
||||
QrConfig.create().setImg("e:/pic/face.jpg"), //
|
||||
FileUtil.file("e:/qrcodeWithLogo.jpg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void decodeTest() {
|
||||
String decode = QrCodeUtil.decode(FileUtil.file("e:/pic/qr.png"));
|
||||
Console.log(decode);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package cn.hutool.extra.ssh;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.jcraft.jsch.Session;
|
||||
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.lang.Console;
|
||||
|
||||
/**
|
||||
* Jsch工具类单元测试
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class JschUtilTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void bindPortTest() {
|
||||
//新建会话,此会话用于ssh连接到跳板机(堡垒机),此处为10.1.1.1:22
|
||||
Session session = JschUtil.getSession("looly.centos", 22, "test", "123456");
|
||||
// 将堡垒机保护的内网8080端口映射到localhost,我们就可以通过访问http://localhost:8080/访问内网服务了
|
||||
JschUtil.bindPort(session, "172.20.12.123", 8080, 8080);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void sftpTest() {
|
||||
Session session = JschUtil.getSession("looly.centos", 22, "root", "123456");
|
||||
Sftp sftp = JschUtil.createSftp(session);
|
||||
sftp.mkDirs("/opt/test/aaa/bbb");
|
||||
Console.log("OK");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void reconnectIfTimeoutTest() throws InterruptedException {
|
||||
Session session = JschUtil.getSession("sunnyserver", 22,"mysftp","liuyang1234");
|
||||
Sftp sftp = JschUtil.createSftp(session);
|
||||
|
||||
Console.log("打印pwd: " + sftp.pwd());
|
||||
Console.log("cd / : " + sftp.cd("/"));
|
||||
Console.log("休眠一段时间,查看是否超时");
|
||||
Thread.sleep(30 * 1000);
|
||||
|
||||
try{
|
||||
// 当连接超时时,isConnected()仍然返回true,pwd命令也能正常返回,因此,利用发送cd命令的返回结果,来判断是否连接超时
|
||||
Console.log("isConnected " + sftp.getClient().isConnected());
|
||||
Console.log("打印pwd: " + sftp.pwd());
|
||||
Console.log("cd / : " + sftp.cd("/"));
|
||||
}catch (JschRuntimeException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Console.log("调用reconnectIfTimeout方法,判断是否超时并重连");
|
||||
sftp.reconnectIfTimeout();
|
||||
|
||||
Console.log("打印pwd: " + sftp.pwd());
|
||||
|
||||
IoUtil.close(sftp);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package cn.hutool.extra.template;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.beetl.core.Configuration;
|
||||
import org.beetl.core.GroupTemplate;
|
||||
import org.beetl.core.Template;
|
||||
import org.beetl.core.resource.StringTemplateResourceLoader;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.extra.template.engine.beetl.BeetlUtil;
|
||||
|
||||
/**
|
||||
* BeetlUtil单元测试
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class BeetlUtilTest {
|
||||
|
||||
@Test
|
||||
public void renderStrTest() throws IOException {
|
||||
GroupTemplate groupTemplate = BeetlUtil.createGroupTemplate(new StringTemplateResourceLoader(), Configuration.defaultConfiguration());
|
||||
Template template = BeetlUtil.getTemplate(groupTemplate, "hello,${name}");
|
||||
String result = BeetlUtil.render(template, Dict.create().set("name", "hutool"));
|
||||
|
||||
Assert.assertEquals("hello,hutool", result);
|
||||
|
||||
String renderFromStr = BeetlUtil.renderFromStr("hello,${name}", Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", renderFromStr);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
package cn.hutool.extra.template;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.extra.template.TemplateConfig.ResourceMode;
|
||||
import cn.hutool.extra.template.engine.beetl.BeetlEngine;
|
||||
import cn.hutool.extra.template.engine.enjoy.EnjoyEngine;
|
||||
import cn.hutool.extra.template.engine.freemarker.FreemarkerEngine;
|
||||
import cn.hutool.extra.template.engine.rythm.RythmEngine;
|
||||
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
|
||||
import cn.hutool.extra.template.engine.velocity.VelocityEngine;
|
||||
|
||||
/**
|
||||
* 模板引擎单元测试
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class TemplateUtilTest {
|
||||
|
||||
@Test
|
||||
public void createEngineTest() {
|
||||
// 默认模板引擎,此处为Beetl
|
||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
|
||||
Template template = engine.getTemplate("hello,${name}");
|
||||
String result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void beetlEngineTest() {
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new BeetlEngine(new TemplateConfig("templates"));
|
||||
Template template = engine.getTemplate("hello,${name}");
|
||||
String result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result);
|
||||
|
||||
// classpath中获取模板
|
||||
engine = new BeetlEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
|
||||
Template template2 = engine.getTemplate("beetl_test.btl");
|
||||
String result2 = template2.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rythmEngineTest() {
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new RythmEngine(new TemplateConfig("templates"));
|
||||
Template template = engine.getTemplate("hello,@name");
|
||||
String result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result);
|
||||
|
||||
// classpath中获取模板
|
||||
Template template2 = engine.getTemplate("rythm_test.tmpl");
|
||||
String result2 = template2.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void freemarkerEngineTest() {
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new FreemarkerEngine(new TemplateConfig("templates", ResourceMode.STRING));
|
||||
Template template = engine.getTemplate("hello,${name}");
|
||||
String result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result);
|
||||
|
||||
//ClassPath模板
|
||||
engine = new FreemarkerEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
|
||||
template = engine.getTemplate("freemarker_test.ftl");
|
||||
result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("hello,hutool", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void velocityEngineTest() {
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new VelocityEngine(new TemplateConfig("templates", ResourceMode.STRING));
|
||||
Template template = engine.getTemplate("你好,$name");
|
||||
String result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("你好,hutool", result);
|
||||
|
||||
//ClassPath模板
|
||||
engine = new VelocityEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
|
||||
template = engine.getTemplate("templates/velocity_test.vtl");
|
||||
result = template.render(Dict.create().set("name", "hutool"));
|
||||
Assert.assertEquals("你好,hutool", result);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void enjoyEngineTest() {
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new EnjoyEngine(new TemplateConfig("templates"));
|
||||
Template template = engine.getTemplate("#(x + 123)");
|
||||
String result = template.render(Dict.create().set("x", 1));
|
||||
Assert.assertEquals("124", result);
|
||||
|
||||
//ClassPath模板
|
||||
engine = new EnjoyEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
|
||||
template = engine.getTemplate("enjoy_test.etl");
|
||||
result = template.render(Dict.create().set("x", 1));
|
||||
Assert.assertEquals("124", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void thymeleafEngineTest() {
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new ThymeleafEngine(new TemplateConfig("templates"));
|
||||
Template template = engine.getTemplate("<h3 th:text=\"${message}\"></h3>");
|
||||
String result = template.render(Dict.create().set("message", "Hutool"));
|
||||
Assert.assertEquals("<h3>Hutool</h3>", result);
|
||||
|
||||
//ClassPath模板
|
||||
engine = new ThymeleafEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
|
||||
template = engine.getTemplate("thymeleaf_test.ttl");
|
||||
result = template.render(Dict.create().set("message", "Hutool"));
|
||||
Assert.assertEquals("<h3>Hutool</h3>", result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void renderToFileTest() {
|
||||
TemplateEngine engine = new BeetlEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
|
||||
Template template = engine.getTemplate("freemarker_test.ftl");
|
||||
|
||||
final Map<String, Object> bindingMap = new HashMap<>();
|
||||
bindingMap.put("name", "aa");
|
||||
File outputFile = new File("e:/test.txt");
|
||||
template.render(bindingMap, outputFile);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package cn.hutool.extra.template;
|
||||
|
||||
import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.thymeleaf.context.Context;
|
||||
import org.thymeleaf.templateresolver.StringTemplateResolver;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
|
||||
|
||||
/**
|
||||
* Thymeleaf单元测试
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class ThymeleafTest {
|
||||
|
||||
@Test
|
||||
public void thymeleafEngineTest() {
|
||||
Map<String, Object> map1 = new HashMap<>();
|
||||
map1.put("name", "a");
|
||||
|
||||
Map<String, Object> map2 = new HashMap<>();
|
||||
map2.put("name", "b");
|
||||
|
||||
// 日期测试
|
||||
Map<String, Object> map3 = new HashMap<>();
|
||||
map3.put("name", DateUtil.parse("2019-01-01"));
|
||||
|
||||
List<Map<String, Object>> list = new ArrayList<>();
|
||||
list.add(map1);
|
||||
list.add(map2);
|
||||
list.add(map3);
|
||||
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new ThymeleafEngine(new TemplateConfig());
|
||||
Template template = engine.getTemplate("<h3 th:each=\"item : ${list}\" th:text=\"${item.name}\"></h3>");
|
||||
String render = template.render(Dict.create().set("list", list));
|
||||
Assert.assertEquals("<h3>a</h3><h3>b</h3><h3>2019-01-01 00:00:00</h3>", render);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void thymeleafEngineTest2() {
|
||||
Map<String, Object> map1 = new HashMap<>();
|
||||
map1.put("name", "a");
|
||||
|
||||
Map<String, Object> map2 = new HashMap<>();
|
||||
map2.put("name", "b");
|
||||
|
||||
// 日期测试
|
||||
Map<String, Object> map3 = new HashMap<>();
|
||||
map3.put("name", DateUtil.parse("2019-01-01"));
|
||||
|
||||
List<Map<String, Object>> list = new ArrayList<>();
|
||||
list.add(map1);
|
||||
list.add(map2);
|
||||
list.add(map3);
|
||||
|
||||
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("list", list);
|
||||
|
||||
hutoolApi(map);
|
||||
thymeleaf(map);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
private static void thymeleaf(Map map) {
|
||||
org.thymeleaf.TemplateEngine templateEngine = new org.thymeleaf.TemplateEngine();
|
||||
StringTemplateResolver stringTemplateResolver = new StringTemplateResolver();
|
||||
templateEngine.addTemplateResolver(stringTemplateResolver);
|
||||
|
||||
StringWriter writer = new StringWriter();
|
||||
Context context = new Context(Locale.getDefault(), map);
|
||||
templateEngine.process("<h3 th:each=\"item : ${list}\" th:text=\"${item.name}\"></h3>", context, writer);
|
||||
|
||||
Assert.assertEquals("<h3>a</h3><h3>b</h3><h3>2019-01-01 00:00:00</h3>", writer.toString());
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private static void hutoolApi(Map map) {
|
||||
|
||||
// 字符串模板
|
||||
TemplateEngine engine = new ThymeleafEngine(new TemplateConfig());
|
||||
Template template = engine.getTemplate("<h3 th:each=\"item : ${list}\" th:text=\"${item.name}\"></h3>");
|
||||
// "<h3 th:text=\"${nestMap.nestKey}\"></h3>"
|
||||
String render = template.render(map);
|
||||
Assert.assertEquals("<h3>a</h3><h3>b</h3><h3>2019-01-01 00:00:00</h3>", render);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package cn.hutool.extra.tokenizer;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.extra.tokenizer.engine.analysis.SmartcnEngine;
|
||||
import cn.hutool.extra.tokenizer.engine.hanlp.HanLPEngine;
|
||||
import cn.hutool.extra.tokenizer.engine.ikanalyzer.IKAnalyzerEngine;
|
||||
import cn.hutool.extra.tokenizer.engine.jcseg.JcsegEngine;
|
||||
import cn.hutool.extra.tokenizer.engine.jieba.JiebaEngine;
|
||||
import cn.hutool.extra.tokenizer.engine.mmseg.MmsegEngine;
|
||||
import cn.hutool.extra.tokenizer.engine.word.WordEngine;
|
||||
|
||||
/**
|
||||
* 模板引擎单元测试
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
public class TokenizerUtilTest {
|
||||
|
||||
String text = "这两个方法的区别在于返回值";
|
||||
|
||||
@Test
|
||||
public void createEngineTest() {
|
||||
// 默认分词引擎,此处为Ansj
|
||||
TokenizerEngine engine = TokenizerUtil.createEngine();
|
||||
Result result = engine.parse(text);
|
||||
checkResult(result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hanlpTest() {
|
||||
TokenizerEngine engine = new HanLPEngine();
|
||||
Result result = engine.parse(text);
|
||||
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
|
||||
Assert.assertEquals("这 两 个 方法 的 区别 在于 返回 值", resultStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ikAnalyzerTest() {
|
||||
TokenizerEngine engine = new IKAnalyzerEngine();
|
||||
Result result = engine.parse(text);
|
||||
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
|
||||
Assert.assertEquals("这两个 方法 的 区别 在于 返回值", resultStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jcsegTest() {
|
||||
TokenizerEngine engine = new JcsegEngine();
|
||||
Result result = engine.parse(text);
|
||||
checkResult(result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jiebaTest() {
|
||||
TokenizerEngine engine = new JiebaEngine();
|
||||
Result result = engine.parse(text);
|
||||
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
|
||||
Assert.assertEquals("这 两个 方法 的 区别 在于 返回值", resultStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mmsegTest() {
|
||||
TokenizerEngine engine = new MmsegEngine();
|
||||
Result result = engine.parse(text);
|
||||
checkResult(result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void smartcnTest() {
|
||||
TokenizerEngine engine = new SmartcnEngine();
|
||||
Result result = engine.parse(text);
|
||||
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
|
||||
Assert.assertEquals("这 两 个 方法 的 区别 在于 返回 值", resultStr);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wordTest() {
|
||||
TokenizerEngine engine = new WordEngine();
|
||||
Result result = engine.parse(text);
|
||||
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
|
||||
Assert.assertEquals("这两个 方法 的 区别 在于 返回值", resultStr);
|
||||
}
|
||||
|
||||
private void checkResult(Result result) {
|
||||
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
|
||||
Assert.assertEquals("这 两个 方法 的 区别 在于 返回 值", resultStr);
|
||||
}
|
||||
}
|
||||
62
hutool-extra/src/test/resources/beetl.properties
Normal file
62
hutool-extra/src/test/resources/beetl.properties
Normal file
@@ -0,0 +1,62 @@
|
||||
#\u9ed8\u8ba4\u914d\u7f6e
|
||||
ENGINE=org.beetl.core.engine.FastRuntimeEngine
|
||||
|
||||
# \u6307\u5b9a\u4e86\u5360\u4f4d\u7b26\u53f7\uff0c\u9ed8\u8ba4\u662f${ }\uff0c\u4e5f\u53ef\u4ee5\u6307\u5b9a\u4e3a\u5176\u4ed6\u5360\u4f4d\u7b26\u3002
|
||||
DELIMITER_PLACEHOLDER_START=${
|
||||
DELIMITER_PLACEHOLDER_END=}
|
||||
|
||||
# \u6307\u5b9a\u4e86\u8bed\u53e5\u7684\u5b9a\u754c\u7b26\u53f7\uff0c\u9ed8\u8ba4\u662f<% %>\uff0c\u4e5f\u53ef\u4ee5\u6307\u5b9a\u4e3a\u5176\u4ed6\u5b9a\u754c\u7b26\u53f7
|
||||
DELIMITER_STATEMENT_START=<%
|
||||
DELIMITER_STATEMENT_END=%>
|
||||
|
||||
# \u6307\u5b9aIO\u8f93\u51fa\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u662fFALSE,\u5373\u901a\u5e38\u7684\u5b57\u7b26\u8f93\u51fa\uff0c\u5728\u8003\u8651\u9ad8\u6027\u80fd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u6210true\u3002\u8be6\u7ec6\u8bf7\u53c2\u8003\u9ad8\u7ea7\u7528\u6cd5
|
||||
DIRECT_BYTE_OUTPUT = FALSE
|
||||
|
||||
# \u6307\u5b9a\u4e86\u652f\u6301HTML\u6807\u7b7e\uff0c\u4e14\u7b26\u53f7\u4e3a#,\u9ed8\u8ba4\u914d\u7f6e\u4e0b\uff0c\u6a21\u677f\u5f15\u64ce\u8bc6\u522b<#tag ></#tag>\u8fd9\u6837\u7684\u7c7b\u4f3chtml\u6807\u7b7e\uff0c\u5e76\u80fd\u8c03\u7528\u76f8\u5e94\u7684\u6807\u7b7e\u51fd\u6570\u6216\u8005\u6a21\u677f\u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u522b\u7684\u7b26\u53f7\uff0c\u5982bg: \u5219\u8bc6\u522b<bg:
|
||||
HTML_TAG_SUPPORT = true
|
||||
HTML_TAG_FLAG = #
|
||||
|
||||
# \u6307\u5b9a\u5982\u679c\u6807\u7b7e\u5c5e\u6027\u6709var\uff0c\u5219\u8ba4\u4e3a\u662f\u9700\u8981\u7ed1\u5b9a\u53d8\u91cf\u7ed9\u6a21\u677f\u7684\u6807\u7b7e\u51fd\u6570
|
||||
HTML_TAG_BINDING_ATTRIBUTE = var
|
||||
|
||||
# \u6307\u5b9a\u5141\u8bb8\u672c\u5730Class\u76f4\u63a5\u8c03\u7528
|
||||
NATIVE_CALL = TRUE
|
||||
|
||||
# \u6307\u5b9a\u6a21\u677f\u5b57\u7b26\u96c6\u662fUTF-8
|
||||
TEMPLATE_CHARSET = UTF-8
|
||||
|
||||
# \u6307\u5b9a\u5f02\u5e38\u7684\u89e3\u6790\u7c7b\uff0c\u9ed8\u8ba4\u662fConsoleErrorHandler\uff0c\u4ed6\u5c06\u5728render\u53d1\u751f\u5f02\u5e38\u7684\u65f6\u5019\u5728\u540e\u53f0\u6253\u5370\u51fa\u9519\u8bef\u4fe1\u606f\uff08System.out)
|
||||
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
|
||||
|
||||
# \u6307\u5b9a\u4e86\u672c\u5730Class\u8c03\u7528\u7684\u5b89\u5168\u7b56\u7565
|
||||
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
|
||||
|
||||
# \u914d\u7f6e\u4e86\u662f\u5426\u8fdb\u884c\u4e25\u683cMVC\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u6b64\u5904\u8bbe\u7f6e\u4e3afalse
|
||||
MVC_STRICT = FALSE
|
||||
|
||||
#\u8d44\u6e90\u914d\u7f6e\uff0cresource\u540e\u7684\u5c5e\u6027\u53ea\u9650\u4e8e\u7279\u5b9aResourceLoader
|
||||
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
|
||||
|
||||
#classpath \u6839\u8def\u5f84
|
||||
RESOURCE.root= /
|
||||
|
||||
#\u662f\u5426\u68c0\u6d4b\u6587\u4ef6\u53d8\u5316,\u5f00\u53d1\u7528true\u5408\u9002\uff0c\u4f46\u7ebf\u4e0a\u8981\u6539\u4e3afalse
|
||||
RESOURCE.autoCheck= true
|
||||
|
||||
#\u81ea\u5b9a\u4e49\u811a\u672c\u65b9\u6cd5\u6587\u4ef6\u7684Root\u76ee\u5f55\u548c\u540e\u7f00
|
||||
RESOURCE.functionRoot = functions
|
||||
RESOURCE.functionSuffix = html
|
||||
|
||||
#\u81ea\u5b9a\u4e49\u6807\u7b7e\u6587\u4ef6Root\u76ee\u5f55\u548c\u540e\u7f00
|
||||
RESOURCE.tagRoot = htmltag
|
||||
RESOURCE.tagSuffix = tag
|
||||
|
||||
##### \u6269\u5c55 ##############
|
||||
# \u5185\u7f6e\u7684\u65b9\u6cd5
|
||||
FN.date = org.beetl.ext.fn.DateFunction
|
||||
#\u5185\u7f6e\u7684\u529f\u80fd\u5305
|
||||
FNP.strutil = org.beetl.ext.fn.StringUtil
|
||||
# \u5185\u7f6e\u7684\u9ed8\u8ba4\u683c\u5f0f\u5316\u51fd\u6570
|
||||
FTC.java.util.Date = org.beetl.ext.format.DateFormat
|
||||
# \u6807\u7b7e\u7c7b
|
||||
TAG.include= org.beetl.ext.tag.IncludeTag
|
||||
18
hutool-extra/src/test/resources/config/mail.setting
Normal file
18
hutool-extra/src/test/resources/config/mail.setting
Normal file
@@ -0,0 +1,18 @@
|
||||
# **************************************************************
|
||||
# ----- Setting File with UTF8-----
|
||||
# ----- 邮件发送功能的账户信息配置文件 -----
|
||||
# ----- 此邮箱专门注册用于Hutool发送邮件测试,为公开邮箱 -----
|
||||
# **************************************************************
|
||||
|
||||
# 邮件服务器的SMTP地址
|
||||
host = smtp.yeah.net
|
||||
# 邮件服务器的SMTP端口
|
||||
port = 465
|
||||
# 发件人(必须正确,否则发送失败)
|
||||
from = 小磊<hutool@yeah.net>
|
||||
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
|
||||
user = hutool
|
||||
# 密码
|
||||
pass = q1w2e3
|
||||
#使用 STARTTLS安全连接
|
||||
startttlsEnable = true
|
||||
@@ -0,0 +1,68 @@
|
||||
#---------------------------------------------------------------------------
|
||||
# Template for beetl.properties
|
||||
# see http://ibeetl.com/guide/beetl.html#header-c6267
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
#\u9ed8\u8ba4\u914d\u7f6e
|
||||
|
||||
#\u5f15\u64ce\u5b9e\u73b0\u7c7b\uff0c\u9ed8\u8ba4\u5373\u53ef
|
||||
ENGINE=org.beetl.core.engine.FastRuntimeEngine
|
||||
|
||||
#\u5360\u4f4d\u7b26\u53f7\u5f00\u59cb
|
||||
DELIMITER_PLACEHOLDER_START=${
|
||||
#\u5360\u4f4d\u7b26\u53f7\u7ed3\u675f
|
||||
DELIMITER_PLACEHOLDER_END=}
|
||||
|
||||
#\u8bed\u53e5\u7684\u5b9a\u754c\u7b26\u53f7\u5f00\u59cb
|
||||
DELIMITER_STATEMENT_START=<%
|
||||
#\u8bed\u53e5\u7684\u5b9a\u754c\u7b26\u53f7\u7ed3\u675f
|
||||
DELIMITER_STATEMENT_END=%>
|
||||
|
||||
#IO\u8f93\u51fa\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u662fFALSE,\u5373\u901a\u5e38\u7684\u5b57\u7b26\u8f93\u51fa\uff0c\u5728\u8003\u8651\u9ad8\u6027\u80fd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u6210true
|
||||
DIRECT_BYTE_OUTPUT = FALSE
|
||||
|
||||
#\u652f\u6301HTML\u6807\u7b7e\uff0c\u4e14\u7b26\u53f7\u4e3a#,\u9ed8\u8ba4\u914d\u7f6e\u4e0b\uff0c\u6a21\u677f\u5f15\u64ce\u8bc6\u522b<#tag ></#tag>\u8fd9\u6837\u7684\u7c7b\u4f3chtml\u6807\u7b7e\uff0c\u5e76\u80fd\u8c03\u7528\u76f8\u5e94\u7684\u6807\u7b7e\u51fd\u6570\u6216\u8005\u6a21\u677f\u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u522b\u7684\u7b26\u53f7\uff0c\u5982bg: \u5219\u8bc6\u522b<bg:
|
||||
HTML_TAG_SUPPORT = true
|
||||
HTML_TAG_FLAG = #
|
||||
|
||||
#\u6307\u5b9a\u5982\u679c\u6807\u7b7e\u5c5e\u6027\u6709var\uff0c\u5219\u8ba4\u4e3a\u662f\u9700\u8981\u7ed1\u5b9a\u53d8\u91cf\u7ed9\u6a21\u677f\u7684\u6807\u7b7e\u51fd\u6570
|
||||
HTML_TAG_BINDING_ATTRIBUTE = var
|
||||
|
||||
#\u6307\u5b9a\u5141\u8bb8\u672c\u5730Class\u76f4\u63a5\u8c03\u7528
|
||||
NATIVE_CALL = TRUE
|
||||
|
||||
#\u6307\u5b9a\u6a21\u677f\u5b57\u7b26\u96c6\u662fUTF-8
|
||||
TEMPLATE_CHARSET = UTF-8
|
||||
|
||||
#\u6307\u5b9a\u5f02\u5e38\u7684\u89e3\u6790\u7c7b\uff0c\u9ed8\u8ba4\u662fConsoleErrorHandler\uff0c\u4ed6\u5c06\u5728render\u53d1\u751f\u5f02\u5e38\u7684\u65f6\u5019\u5728\u540e\u53f0\u6253\u5370\u51fa\u9519\u8bef\u4fe1\u606f\uff08System.out)
|
||||
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
|
||||
|
||||
#\u6307\u5b9a\u4e86\u672c\u5730Class\u8c03\u7528\u7684\u5b89\u5168\u7b56\u7565
|
||||
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
|
||||
|
||||
#\u914d\u7f6e\u4e86\u662f\u5426\u8fdb\u884c\u4e25\u683cMVC\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u6b64\u5904\u8bbe\u7f6e\u4e3afalse
|
||||
MVC_STRICT = FALSE
|
||||
|
||||
|
||||
#\u9ed8\u8ba4\u4f7f\u7528\u7684\u6a21\u677f\u8d44\u6e90\u52a0\u8f7d\u5668\uff0c\u8d44\u6e90\u914d\u7f6e\uff0cresource\u540e\u7684\u5c5e\u6027\u53ea\u9650\u4e8e\u7279\u5b9aResourceLoader
|
||||
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
|
||||
#classpath \u6839\u8def\u5f84
|
||||
RESOURCE.root= /
|
||||
#\u662f\u5426\u68c0\u6d4b\u6587\u4ef6\u53d8\u5316
|
||||
RESOURCE.autoCheck= true
|
||||
#\u81ea\u5b9a\u4e49\u811a\u672c\u65b9\u6cd5\u6587\u4ef6\u7684Root\u76ee\u5f55\u548c\u540e\u7f00
|
||||
RESOURCE.functionRoot = functions
|
||||
RESOURCE.functionSuffix = html
|
||||
#\u81ea\u5b9a\u4e49\u6807\u7b7e\u6587\u4ef6Root\u76ee\u5f55\u548c\u540e\u7f00
|
||||
RESOURCE.tagRoot = htmltag
|
||||
RESOURCE.tagSuffix = tag
|
||||
|
||||
##### \u6269\u5c55 ##############
|
||||
## \u5185\u7f6e\u7684\u65b9\u6cd5
|
||||
FN.date = org.beetl.ext.fn.DateFunction
|
||||
##\u5185\u7f6e\u7684\u529f\u80fd\u5305
|
||||
FNP.strutil = org.beetl.ext.fn.StringUtil
|
||||
##\u5185\u7f6e\u7684\u9ed8\u8ba4\u683c\u5f0f\u5316\u51fd\u6570
|
||||
FTC.java.util.Date = org.beetl.ext.format.DateFormat
|
||||
## \u6807\u7b7e\u7c7b
|
||||
TAG.include= org.beetl.ext.tag.IncludeTag
|
||||
40
hutool-extra/src/test/resources/example/mail-example.setting
Normal file
40
hutool-extra/src/test/resources/example/mail-example.setting
Normal file
@@ -0,0 +1,40 @@
|
||||
# **************************************************************
|
||||
# ----- Setting File with UTF8-----
|
||||
# ----- 邮件发送功能的账户信息配置文件 -----
|
||||
# ----- 此邮箱专门注册用于Hutool发送邮件测试,为公开邮箱 -----
|
||||
# **************************************************************
|
||||
|
||||
# 邮件服务器的SMTP地址
|
||||
host = smtp.yeah.net
|
||||
# 邮件服务器的SMTP端口
|
||||
port = 465
|
||||
# 发件人(必须正确,否则发送失败)
|
||||
from = 小磊<hutool@yeah.net>
|
||||
# 用户名
|
||||
user = hutool
|
||||
# 密码
|
||||
pass = q1w2e3
|
||||
|
||||
# 是否打开调试模式,调试模式会显示与邮件服务器通信过程,默认不开启
|
||||
debug = true
|
||||
# 编码,决定了邮件正文编码和发件人、收件人、抄送人、密送人姓名中的中文编码,默认UTF-8
|
||||
charset = UTF-8
|
||||
|
||||
#使用 STARTTLS安全连接
|
||||
startttlsEnable = true
|
||||
#使用 SSL安全连接
|
||||
sslEnable = true
|
||||
# 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
|
||||
socketFactoryClass = javax.net.ssl.SSLSocketFactory
|
||||
# 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
|
||||
socketFactoryFallback = true
|
||||
# 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
|
||||
socketFactoryPort = 465
|
||||
|
||||
# 对于超长参数是否切分为多份,默认为false(国内邮箱附件不支持切分的附件名)
|
||||
splitlongparameters = false
|
||||
|
||||
# SMTP超时时长,单位毫秒,缺省值不超时
|
||||
timeout = 0
|
||||
# Socket连接超时值,单位毫秒,缺省值不超时
|
||||
connectionTimeout = 0
|
||||
52
hutool-extra/src/test/resources/example/velocity-example.vm
Normal file
52
hutool-extra/src/test/resources/example/velocity-example.vm
Normal file
@@ -0,0 +1,52 @@
|
||||
##这是一行注释,不会输出
|
||||
#*
|
||||
这是多行注释,不会输出
|
||||
多行注释
|
||||
*#
|
||||
// ---------- 1.变量赋值输出------------
|
||||
Welcome $name to Javayou.com!
|
||||
today is $date.
|
||||
tdday is $mydae.//未被定义的变量将当成字符串
|
||||
|
||||
// -----------2.设置变量值,所有变量都以$开头----------------
|
||||
#set( $iAmVariable = "good!" )
|
||||
Welcome $name to Javayou.com!
|
||||
today is $date.
|
||||
$iAmVariable
|
||||
|
||||
//-------------3.if,else判断--------------------------
|
||||
#set ($admin = "admin")
|
||||
#set ($user = "user")
|
||||
#if ($admin == $user)
|
||||
Welcome admin!
|
||||
#else
|
||||
Welcome user!
|
||||
#end
|
||||
|
||||
//--------------4.迭代数据List---------------------
|
||||
#foreach( $product in $list )
|
||||
$product
|
||||
#end
|
||||
|
||||
// ------------5.迭代数据HashSet-----------------
|
||||
#foreach($key in $hashVariable.keySet() )
|
||||
$key ‘s value: $ hashVariable.get($key)
|
||||
#end
|
||||
|
||||
//-----------6.迭代数据List Bean($velocityCount为列举序号,默认从1开始,可调整)
|
||||
#foreach ($s in $listBean)
|
||||
<$velocityCount> Address: $s.address
|
||||
#end
|
||||
|
||||
//-------------7.模板嵌套---------------------
|
||||
#foreach ($element in $list)
|
||||
#foreach ($element in $list)
|
||||
inner:This is ($velocityCount)- $element.
|
||||
#end
|
||||
outer:This is ($velocityCount)- $element.
|
||||
#end
|
||||
|
||||
//-----------8.导入其它文件,多个文件用逗号隔开(非模板静态)--------------
|
||||
#include("com/test2/test.txt")
|
||||
//-----------8.导入其它文件,多个文件用逗号隔开(模板文件)--------------
|
||||
#parse("com/test2/test.txt")
|
||||
1
hutool-extra/src/test/resources/templates/beetl_test.btl
Normal file
1
hutool-extra/src/test/resources/templates/beetl_test.btl
Normal file
@@ -0,0 +1 @@
|
||||
hello,${name}
|
||||
1
hutool-extra/src/test/resources/templates/enjoy_test.etl
Normal file
1
hutool-extra/src/test/resources/templates/enjoy_test.etl
Normal file
@@ -0,0 +1 @@
|
||||
#(x + 123)
|
||||
@@ -0,0 +1 @@
|
||||
hello,${name}
|
||||
@@ -0,0 +1,2 @@
|
||||
@args String name
|
||||
hello,@name
|
||||
@@ -0,0 +1 @@
|
||||
<h3 th:text="${message}"></h3>
|
||||
@@ -0,0 +1 @@
|
||||
你好,$name
|
||||
Reference in New Issue
Block a user