forked from fanruan/finekit
Kalven
5 years ago
27 changed files with 570 additions and 186 deletions
@ -0,0 +1,21 @@ |
|||||||
|
package com.fanruan.api.base; |
||||||
|
|
||||||
|
import com.fr.base.Parameter; |
||||||
|
import com.fr.base.ParameterHelper; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/30 |
||||||
|
*/ |
||||||
|
public class ParameterHelperKit { |
||||||
|
/** |
||||||
|
* 从字符串中分析中有哪些需要的参数 |
||||||
|
* @param text 待分析字符串 |
||||||
|
* @param hasColumnRow 是否需要分析格子类型的参数 |
||||||
|
* @return 字符串中包含的参数集合 |
||||||
|
*/ |
||||||
|
public static Parameter[] analyze4Parameters(String text, boolean hasColumnRow) { |
||||||
|
return ParameterHelper.analyze4Parameters(text, hasColumnRow); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fanruan.api.base; |
||||||
|
|
||||||
|
/** |
||||||
|
* 使用script语言的脚本公式 |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/30 |
||||||
|
*/ |
||||||
|
public class ScriptFormula extends com.fr.base.ScriptFormula { |
||||||
|
public ScriptFormula() { |
||||||
|
super(); |
||||||
|
} |
||||||
|
|
||||||
|
public ScriptFormula(String text) { |
||||||
|
super(text); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fanruan.api.cal; |
||||||
|
|
||||||
|
import com.fr.script.ScriptFactory; |
||||||
|
|
||||||
|
import javax.script.ScriptEngine; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/30 |
||||||
|
*/ |
||||||
|
public class ScriptFactoryKit { |
||||||
|
/** |
||||||
|
* 单例模式,获取ScriptEngine对象 |
||||||
|
* @return ScriptEngine对象 |
||||||
|
*/ |
||||||
|
public static ScriptEngine newSingletonScriptEngine() { |
||||||
|
return ScriptFactory.newSingletonScriptEngine(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fanruan.api.cal.namespace; |
||||||
|
|
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class ParameterMapNameSpace { |
||||||
|
/** |
||||||
|
* 根据参数映射创建一个参数命名空间 |
||||||
|
* @param map 参数名和参数值的映射 |
||||||
|
* @return 参数命名空间 |
||||||
|
*/ |
||||||
|
public static com.fr.base.ParameterMapNameSpace create(Map map) { |
||||||
|
return com.fr.base.ParameterMapNameSpace.create(map); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.fanruan.api.cal.namespace; |
||||||
|
|
||||||
|
import com.fr.report.core.namespace.SimpleCellValueNameSpace; |
||||||
|
|
||||||
|
public class SimpleCellValueNameSpaceKit { |
||||||
|
/** |
||||||
|
* 单例模式,SimpleCellValueNameSpace |
||||||
|
* @return SimpleCellValueNameSpace实例对象 |
||||||
|
*/ |
||||||
|
public static SimpleCellValueNameSpace getInstance() { |
||||||
|
return SimpleCellValueNameSpace.getInstance(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package com.fanruan.api.design.ui.component; |
||||||
|
|
||||||
|
/** |
||||||
|
* 可以存放按钮组件的容器 |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/30 |
||||||
|
*/ |
||||||
|
public abstract class UIRadioPane<T> extends com.fr.design.gui.frpane.UIRadioPane<T> { |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package com.fanruan.api.design.ui.component.textarea; |
||||||
|
|
||||||
|
/** |
||||||
|
* 公式输入的文本框 |
||||||
|
*/ |
||||||
|
public class RSyntaxTextArea extends com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea { |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
package com.fanruan.api.design.ui.container; |
||||||
|
|
||||||
|
/** |
||||||
|
* 对基本的容器做了进一步封装,提供了通用的方法 |
||||||
|
* @param <T> |
||||||
|
*/ |
||||||
|
public abstract class FurtherBasicBeanPane<T> extends com.fr.design.beans.FurtherBasicBeanPane<T> { |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package com.fanruan.api.design.ui.container; |
||||||
|
|
||||||
|
/** |
||||||
|
* 存放历史模板的列表容器 |
||||||
|
*/ |
||||||
|
public class HistoryTemplateListPane extends com.fr.design.file.HistoryTemplateListPane { |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fanruan.api.design.ui.container; |
||||||
|
|
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用于输入参数的容器 |
||||||
|
*/ |
||||||
|
public class ParameterInputPane extends com.fr.design.parameter.ParameterInputPane { |
||||||
|
public ParameterInputPane(ParameterProvider[] parameters) { |
||||||
|
super(parameters); |
||||||
|
} |
||||||
|
|
||||||
|
public ParameterInputPane(ParameterProvider[] parameters, boolean allowBlank) { |
||||||
|
super(parameters, allowBlank); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.fanruan.api.design.ui.dialog; |
||||||
|
|
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 对话框的抽象类 |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/30 |
||||||
|
*/ |
||||||
|
public abstract class BasicDialog extends com.fr.design.dialog.BasicDialog { |
||||||
|
public BasicDialog(Frame frame) { |
||||||
|
super(frame); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicDialog(Dialog dialog) { |
||||||
|
super(dialog); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicDialog(Frame frame, BasicPane pane) { |
||||||
|
super(frame, pane); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicDialog(Dialog dialog, BasicPane pane) { |
||||||
|
super(dialog, pane); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicDialog(Frame frame, BasicPane pane, boolean isNeedButtonPane) { |
||||||
|
super(frame, pane, isNeedButtonPane); |
||||||
|
} |
||||||
|
|
||||||
|
public BasicDialog(Dialog dialog, BasicPane pane, boolean isNeedButtonPane) { |
||||||
|
super(dialog, pane, isNeedButtonPane); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.fanruan.api.design.ui.layout; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
|
||||||
|
public class FRGUIPaneFactoryKit { |
||||||
|
/** |
||||||
|
* 创建边框面板S |
||||||
|
* @return JPanel对象 |
||||||
|
*/ |
||||||
|
public static JPanel createBorderLayout_S_Pane() { |
||||||
|
return com.fr.design.layout.FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建一个靠左流式布局,正常流式内嵌 |
||||||
|
* @return JPanel对象 |
||||||
|
*/ |
||||||
|
public static JPanel createNormalFlowInnerContainer_S_Pane() { |
||||||
|
return com.fr.design.layout.FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建一个边框布局 |
||||||
|
* @return LayoutManager对象 |
||||||
|
*/ |
||||||
|
public static LayoutManager createBorderLayout() { |
||||||
|
return com.fr.design.layout.FRGUIPaneFactory.createBorderLayout(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.fanruan.api.design.ui.list; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 支持键盘输入快速查找项的JList |
||||||
|
*/ |
||||||
|
public class QuickList extends com.fr.design.gui.ilist.QuickList { |
||||||
|
public QuickList(ListModel listModel) { |
||||||
|
super(listModel); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fanruan.api.design.ui.mainframe; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.DesignerFrame; |
||||||
|
|
||||||
|
public class DesignerContextKit { |
||||||
|
/** |
||||||
|
* 单例模式,返回DesignerFrame对象 |
||||||
|
* @return DesignerFrame对象 |
||||||
|
*/ |
||||||
|
public static DesignerFrame getDesignerFrame() { |
||||||
|
return DesignerContext.getDesignerFrame(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package com.fanruan.api.io; |
||||||
|
|
||||||
|
/** |
||||||
|
* 需要进行XML读写的类,该类是数据源类的一个子类 |
||||||
|
*/ |
||||||
|
public abstract class IOFile extends com.fr.base.io.IOFile { |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fanruan.api.macro; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/30 |
||||||
|
*/ |
||||||
|
public class ProductConstants { |
||||||
|
/** |
||||||
|
* 详细的产品名字 |
||||||
|
*/ |
||||||
|
public static final String PRODUCT_NAME = com.fr.stable.ProductConstants.PRODUCT_NAME; |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package com.fanruan.api.structure; |
||||||
|
|
||||||
|
/** |
||||||
|
* 表达式 |
||||||
|
*/ |
||||||
|
public class Expression extends com.fr.stable.script.Expression { |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fanruan.api.structure; |
||||||
|
|
||||||
|
/** |
||||||
|
* 公式, 公式中可以运用已有的各种函数进行复杂的运算 |
||||||
|
*/ |
||||||
|
public class Formula extends com.fr.base.Formula { |
||||||
|
public Formula() { |
||||||
|
super(); |
||||||
|
} |
||||||
|
|
||||||
|
public Formula(String text) { |
||||||
|
super(text); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.fanruan.api.structure; |
||||||
|
|
||||||
|
/** |
||||||
|
* 参数,参数是可以动态赋值的对象 |
||||||
|
*/ |
||||||
|
public class Parameter extends com.fr.base.Parameter { |
||||||
|
public Parameter() { |
||||||
|
super(); |
||||||
|
} |
||||||
|
|
||||||
|
public Parameter(String text) { |
||||||
|
super(text); |
||||||
|
} |
||||||
|
|
||||||
|
public Parameter(String name, Object value) { |
||||||
|
super(name, value); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fanruan.api.util; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
|
||||||
|
import java.util.Locale; |
||||||
|
|
||||||
|
public class ContextKit { |
||||||
|
/** |
||||||
|
* 返回国际化区属 |
||||||
|
* @return 国际化后区域属性 |
||||||
|
*/ |
||||||
|
@Deprecated |
||||||
|
public static Locale getLocale() { |
||||||
|
return FRContext.getLocale(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fanruan.api.util; |
||||||
|
|
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
public class InterKit { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取国际化文本,已过时 |
||||||
|
* @param text |
||||||
|
* @return 国际化文本字符串 |
||||||
|
*/ |
||||||
|
public static String getLocText(String text) { |
||||||
|
return Inter.getLocText(text); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.fanruan.api.base; |
||||||
|
|
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/31 |
||||||
|
*/ |
||||||
|
public class ParameterHelperKitTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void analyze4Parameters() { |
||||||
|
ParameterProvider p[] = ParameterHelperKit.analyze4Parameters("var a1 = '${A1}';\n" + |
||||||
|
"return \"A1的值\" + (a1 > 10 ? \"大于10\" : \"小于等于10\");",false); |
||||||
|
assertEquals(p[0].getValue(),""); |
||||||
|
} |
||||||
|
} |
@ -1,186 +1,186 @@ |
|||||||
package com.fanruan.api.session; |
//package com.fanruan.api.session;
|
||||||
|
//
|
||||||
import com.fanruan.api.Prepare; |
//import com.fanruan.api.Prepare;
|
||||||
import com.fr.general.web.ParameterConstants; |
//import com.fr.general.web.ParameterConstants;
|
||||||
import com.fr.invoke.Reflect; |
//import com.fr.invoke.Reflect;
|
||||||
import com.fr.stable.StringUtils; |
//import com.fr.stable.StringUtils;
|
||||||
import com.fr.stable.web.SessionProvider; |
//import com.fr.stable.web.SessionProvider;
|
||||||
import com.fr.stable.web.SessionSource; |
//import com.fr.stable.web.SessionSource;
|
||||||
import com.fr.stable.web.Weblet; |
//import com.fr.stable.web.Weblet;
|
||||||
import com.fr.web.core.RemoteAddressManager; |
//import com.fr.web.core.RemoteAddressManager;
|
||||||
import com.fr.web.core.SessionPoolManager; |
//import com.fr.web.core.SessionPoolManager;
|
||||||
import com.fr.web.session.SessionIDInfo; |
//import com.fr.web.session.SessionIDInfo;
|
||||||
import com.fr.web.utils.WebUtils; |
//import com.fr.web.utils.WebUtils;
|
||||||
import org.easymock.EasyMock; |
//import org.easymock.EasyMock;
|
||||||
import org.easymock.IAnswer; |
//import org.easymock.IAnswer;
|
||||||
import org.easymock.IMocksControl; |
//import org.easymock.IMocksControl;
|
||||||
import org.junit.Assert; |
//import org.junit.Assert;
|
||||||
import org.junit.Test; |
//import org.junit.Test;
|
||||||
import org.junit.runner.RunWith; |
//import org.junit.runner.RunWith;
|
||||||
import org.powermock.api.easymock.PowerMock; |
//import org.powermock.api.easymock.PowerMock;
|
||||||
import org.powermock.core.classloader.annotations.PrepareForTest; |
//import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; |
//import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
|
||||||
import org.powermock.modules.junit4.PowerMockRunner; |
//import org.powermock.modules.junit4.PowerMockRunner;
|
||||||
import org.powermock.reflect.Whitebox; |
//import org.powermock.reflect.Whitebox;
|
||||||
|
//
|
||||||
import javax.servlet.http.HttpServletRequest; |
//import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.HashMap; |
//import java.util.HashMap;
|
||||||
import java.util.HashSet; |
//import java.util.HashSet;
|
||||||
import java.util.List; |
//import java.util.List;
|
||||||
import java.util.Map; |
//import java.util.Map;
|
||||||
import java.util.Set; |
//import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap; |
//import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ExecutorService; |
//import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors; |
//import java.util.concurrent.Executors;
|
||||||
|
//
|
||||||
import static org.junit.Assert.assertEquals; |
//import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse; |
//import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull; |
//import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertTrue; |
//import static org.junit.Assert.assertTrue;
|
||||||
|
//
|
||||||
/** |
///**
|
||||||
* @author richie |
// * @author richie
|
||||||
* @version 10.0 |
// * @version 10.0
|
||||||
* Created by richie on 2019-08-09 |
// * Created by richie on 2019-08-09
|
||||||
*/ |
// */
|
||||||
@RunWith(PowerMockRunner.class) |
//@RunWith(PowerMockRunner.class)
|
||||||
@PrepareForTest({SessionPoolManager.class, WebUtils.class}) |
//@PrepareForTest({SessionPoolManager.class, WebUtils.class})
|
||||||
@SuppressStaticInitializationFor({"com.fr.web.core.SessionPoolManager"}) |
//@SuppressStaticInitializationFor({"com.fr.web.core.SessionPoolManager"})
|
||||||
public class SessionKitTest extends Prepare { |
//public class SessionKitTest extends Prepare {
|
||||||
|
//
|
||||||
private static final long MIN_ACCESS_INTERVAL = 900; |
// private static final long MIN_ACCESS_INTERVAL = 900;
|
||||||
private int taskCount = 0; |
// private int taskCount = 0;
|
||||||
private Map<String, SessionProvider> sessions = new HashMap<String, SessionProvider>(); |
// private Map<String, SessionProvider> sessions = new HashMap<String, SessionProvider>();
|
||||||
|
//
|
||||||
@Test |
// @Test
|
||||||
public void testGenerateSession() throws Exception { |
// public void testGenerateSession() throws Exception {
|
||||||
final SessionIDInfo sessionInfo = new MockSession("session"); |
// final SessionIDInfo sessionInfo = new MockSession("session");
|
||||||
final Map<String, Object> params = new HashMap<String, Object>(); |
// final Map<String, Object> params = new HashMap<String, Object>();
|
||||||
PowerMock.mockStatic(SessionPoolManager.class); |
// PowerMock.mockStatic(SessionPoolManager.class);
|
||||||
PowerMock.mockStatic(WebUtils.class); |
// PowerMock.mockStatic(WebUtils.class);
|
||||||
IMocksControl control = EasyMock.createControl(); |
// IMocksControl control = EasyMock.createControl();
|
||||||
final HttpServletRequest request = control.createMock(HttpServletRequest.class); |
// final HttpServletRequest request = control.createMock(HttpServletRequest.class);
|
||||||
EasyMock.expect(WebUtils.getIpAddr(request)).andReturn("127.0.0.1").anyTimes(); |
// EasyMock.expect(WebUtils.getIpAddr(request)).andReturn("127.0.0.1").anyTimes();
|
||||||
EasyMock.expect(WebUtils.getHTTPRequestParameter(request, ParameterConstants.OP)).andReturn("view").anyTimes(); |
// EasyMock.expect(WebUtils.getHTTPRequestParameter(request, ParameterConstants.OP)).andReturn("view").anyTimes();
|
||||||
EasyMock.expect(WebUtils.parameters4SessionIDInforContainMPCache(request)).andReturn(params).anyTimes(); |
// EasyMock.expect(WebUtils.parameters4SessionIDInforContainMPCache(request)).andReturn(params).anyTimes();
|
||||||
final Weblet weblet = control.createMock(Weblet.class); |
// final Weblet weblet = control.createMock(Weblet.class);
|
||||||
EasyMock.expect(weblet.isSessionOccupy()).andReturn(false).anyTimes(); |
// EasyMock.expect(weblet.isSessionOccupy()).andReturn(false).anyTimes();
|
||||||
EasyMock.expect(weblet.createSessionIDInfor(request, "127.0.0.1", params)).andReturn(sessionInfo).anyTimes(); |
// EasyMock.expect(weblet.createSessionIDInfor(request, "127.0.0.1", params)).andReturn(sessionInfo).anyTimes();
|
||||||
EasyMock.expect(addSessionIDInfo(sessionInfo)).andReturn(sessionInfo.getSessionID()).anyTimes(); |
// EasyMock.expect(addSessionIDInfo(sessionInfo)).andReturn(sessionInfo.getSessionID()).anyTimes();
|
||||||
EasyMock.expect(SessionPoolManager.generateSessionID(request, null, weblet)).andAnswer(new IAnswer<String>() { |
// EasyMock.expect(SessionPoolManager.generateSessionID(request, null, weblet)).andAnswer(new IAnswer<String>() {
|
||||||
@Override |
// @Override
|
||||||
public String answer() throws Throwable { |
// public String answer() throws Throwable {
|
||||||
SessionProvider sessionIDInfor = weblet.createSessionIDInfor(request, "127.0.0.1", params); |
// SessionProvider sessionIDInfor = weblet.createSessionIDInfor(request, "127.0.0.1", params);
|
||||||
String sessionID = addSessionIDInfo(sessionIDInfor); |
// String sessionID = addSessionIDInfo(sessionIDInfor);
|
||||||
if (weblet.isSessionOccupy()) { |
// if (weblet.isSessionOccupy()) {
|
||||||
assert sessionID != null; |
// assert sessionID != null;
|
||||||
RemoteAddressManager.add("127.0.0.1", sessionID); |
// RemoteAddressManager.add("127.0.0.1", sessionID);
|
||||||
} |
// }
|
||||||
return sessionID; |
// return sessionID;
|
||||||
} |
// }
|
||||||
}).anyTimes(); |
// }).anyTimes();
|
||||||
control.replay(); |
// control.replay();
|
||||||
PowerMock.replayAll(); |
// PowerMock.replayAll();
|
||||||
sessionInfo.setSource(SessionSource.SINGLE); |
// sessionInfo.setSource(SessionSource.SINGLE);
|
||||||
SessionPoolManager.generateSessionID(request, null, weblet); |
// SessionPoolManager.generateSessionID(request, null, weblet);
|
||||||
Assert.assertSame(sessionInfo.getSource(), SessionSource.SINGLE); |
// Assert.assertSame(sessionInfo.getSource(), SessionSource.SINGLE);
|
||||||
sessionInfo.setSource(SessionSource.INTEGRATION); |
// sessionInfo.setSource(SessionSource.INTEGRATION);
|
||||||
SessionPoolManager.generateSessionID(request, null, weblet); |
// SessionPoolManager.generateSessionID(request, null, weblet);
|
||||||
Assert.assertSame(sessionInfo.getSource(), SessionSource.INTEGRATION); |
// Assert.assertSame(sessionInfo.getSource(), SessionSource.INTEGRATION);
|
||||||
|
//
|
||||||
} |
// }
|
||||||
|
//
|
||||||
@Test |
// @Test
|
||||||
public void testAddDelayTask() { |
// public void testAddDelayTask() {
|
||||||
String sessionID = "test"; |
// String sessionID = "test";
|
||||||
sessions.put("test", new MockSession("test")); |
// sessions.put("test", new MockSession("test"));
|
||||||
for (int i = 0; i < 100; i++) { |
// for (int i = 0; i < 100; i++) {
|
||||||
accessSession(sessionID); |
// accessSession(sessionID);
|
||||||
} |
// }
|
||||||
Assert.assertEquals(1, this.taskCount); |
// Assert.assertEquals(1, this.taskCount);
|
||||||
for (int i = 0; i < 2; i++) { |
// for (int i = 0; i < 2; i++) {
|
||||||
try { |
// try {
|
||||||
Thread.sleep(1000); |
// Thread.sleep(1000);
|
||||||
} catch (InterruptedException e) { |
// } catch (InterruptedException e) {
|
||||||
//do nothing
|
// //do nothing
|
||||||
} |
// }
|
||||||
accessSession(sessionID); |
// accessSession(sessionID);
|
||||||
} |
// }
|
||||||
Assert.assertEquals(3, this.taskCount); |
// Assert.assertEquals(3, this.taskCount);
|
||||||
} |
// }
|
||||||
|
//
|
||||||
private void accessSession(String sessionId) { |
// private void accessSession(String sessionId) {
|
||||||
if (StringUtils.isBlank(sessionId)) { |
// if (StringUtils.isBlank(sessionId)) {
|
||||||
return; |
// return;
|
||||||
} |
// }
|
||||||
|
//
|
||||||
SessionProvider sessionIDInfor = sessions.get(sessionId); |
// SessionProvider sessionIDInfor = sessions.get(sessionId);
|
||||||
if (sessionIDInfor != null) { |
// if (sessionIDInfor != null) {
|
||||||
long accessInterval = System.currentTimeMillis() - sessionIDInfor.getLastAccessTime(); |
// long accessInterval = System.currentTimeMillis() - sessionIDInfor.getLastAccessTime();
|
||||||
sessionIDInfor.updateTime(); |
// sessionIDInfor.updateTime();
|
||||||
if (accessInterval > MIN_ACCESS_INTERVAL) { |
// if (accessInterval > MIN_ACCESS_INTERVAL) {
|
||||||
taskCount++; |
// taskCount++;
|
||||||
} |
// }
|
||||||
} |
// }
|
||||||
} |
// }
|
||||||
|
//
|
||||||
@Test |
// @Test
|
||||||
public void testGetAllSession() { |
// public void testGetAllSession() {
|
||||||
Whitebox.setInternalState( |
// Whitebox.setInternalState(
|
||||||
SessionPoolManager.class, |
// SessionPoolManager.class,
|
||||||
"sessionIDMap", |
// "sessionIDMap",
|
||||||
new ConcurrentHashMap<String, SessionProvider>() |
// new ConcurrentHashMap<String, SessionProvider>()
|
||||||
); |
// );
|
||||||
Whitebox.setInternalState(SessionPoolManager.class, "sessionToDelete", new HashSet<String>()); |
// Whitebox.setInternalState(SessionPoolManager.class, "sessionToDelete", new HashSet<String>());
|
||||||
Map<String, SessionProvider> sessionIDMap = Reflect.on(SessionPoolManager.class).get("sessionIDMap"); |
// Map<String, SessionProvider> sessionIDMap = Reflect.on(SessionPoolManager.class).get("sessionIDMap");
|
||||||
String sessionID1 = "Test1"; |
// String sessionID1 = "Test1";
|
||||||
sessionIDMap.put(sessionID1, new MockSession(sessionID1)); |
// sessionIDMap.put(sessionID1, new MockSession(sessionID1));
|
||||||
sessionIDMap.put("Test2", new MockSession("Test2")); |
// sessionIDMap.put("Test2", new MockSession("Test2"));
|
||||||
closeSession(sessionID1); |
// closeSession(sessionID1);
|
||||||
List<SessionProvider> list = SessionPoolManager.getAllSession(SessionProvider.class); |
// List<SessionProvider> list = SessionPoolManager.getAllSession(SessionProvider.class);
|
||||||
assertEquals(1, list.size()); |
// assertEquals(1, list.size());
|
||||||
assertEquals("Test2", list.get(0).getSessionID()); |
// assertEquals("Test2", list.get(0).getSessionID());
|
||||||
assertNotNull(SessionKit.getSession("Test2")); |
// assertNotNull(SessionKit.getSession("Test2"));
|
||||||
} |
// }
|
||||||
|
//
|
||||||
@Test |
// @Test
|
||||||
public void testHasSessionID() { |
// public void testHasSessionID() {
|
||||||
Whitebox.setInternalState( |
// Whitebox.setInternalState(
|
||||||
SessionPoolManager.class, |
// SessionPoolManager.class,
|
||||||
"sessionIDMap", |
// "sessionIDMap",
|
||||||
new ConcurrentHashMap<String, SessionProvider>() |
// new ConcurrentHashMap<String, SessionProvider>()
|
||||||
); |
// );
|
||||||
Whitebox.setInternalState(SessionPoolManager.class, "sessionToDelete", new HashSet<String>()); |
// Whitebox.setInternalState(SessionPoolManager.class, "sessionToDelete", new HashSet<String>());
|
||||||
Map<String, SessionProvider> sessionIDMap = Reflect.on(SessionPoolManager.class).get("sessionIDMap"); |
// Map<String, SessionProvider> sessionIDMap = Reflect.on(SessionPoolManager.class).get("sessionIDMap");
|
||||||
String sessionID1 = "Test1"; |
// String sessionID1 = "Test1";
|
||||||
sessionIDMap.put(sessionID1, new MockSession(sessionID1)); |
// sessionIDMap.put(sessionID1, new MockSession(sessionID1));
|
||||||
sessionIDMap.put("Test2", new MockSession("Test2")); |
// sessionIDMap.put("Test2", new MockSession("Test2"));
|
||||||
closeSession(sessionID1); |
// closeSession(sessionID1);
|
||||||
assertFalse(SessionPoolManager.hasSessionID(sessionID1)); |
// assertFalse(SessionPoolManager.hasSessionID(sessionID1));
|
||||||
assertTrue(SessionPoolManager.hasSessionID("Test2")); |
// assertTrue(SessionPoolManager.hasSessionID("Test2"));
|
||||||
} |
// }
|
||||||
|
//
|
||||||
private void closeSession(final String sessionID) { |
// private void closeSession(final String sessionID) {
|
||||||
final Set<String> sessionToDelete = Reflect.on(SessionPoolManager.class).get("sessionToDelete"); |
// final Set<String> sessionToDelete = Reflect.on(SessionPoolManager.class).get("sessionToDelete");
|
||||||
sessionToDelete.add(sessionID); |
// sessionToDelete.add(sessionID);
|
||||||
ExecutorService closeSessionPool = Executors.newFixedThreadPool(1); |
// ExecutorService closeSessionPool = Executors.newFixedThreadPool(1);
|
||||||
closeSessionPool.submit(new Runnable() { |
// closeSessionPool.submit(new Runnable() {
|
||||||
@Override |
// @Override
|
||||||
public void run() { |
// public void run() {
|
||||||
try { |
// try {
|
||||||
//模拟删除session对象的过程
|
// //模拟删除session对象的过程
|
||||||
Thread.sleep(1000); |
// Thread.sleep(1000);
|
||||||
} catch (InterruptedException e) { |
// } catch (InterruptedException e) {
|
||||||
//do nothing
|
// //do nothing
|
||||||
} |
// }
|
||||||
synchronized (SessionPoolManager.class) { |
// synchronized (SessionPoolManager.class) {
|
||||||
sessionToDelete.remove(sessionID); |
// sessionToDelete.remove(sessionID);
|
||||||
} |
// }
|
||||||
} |
// }
|
||||||
}); |
// });
|
||||||
} |
// }
|
||||||
|
//
|
||||||
private String addSessionIDInfo(SessionProvider sessionIDInfo) { |
// private String addSessionIDInfo(SessionProvider sessionIDInfo) {
|
||||||
return Reflect.on(SessionPoolManager.class).call("addSessionIDInfor", sessionIDInfo).get(); |
// return Reflect.on(SessionPoolManager.class).call("addSessionIDInfor", sessionIDInfo).get();
|
||||||
} |
// }
|
||||||
} |
//}
|
@ -0,0 +1,20 @@ |
|||||||
|
package com.fanruan.api.util; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import java.util.Locale; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Kalven |
||||||
|
* @version 10.0 |
||||||
|
* Created by Kalven on 2019/8/31 |
||||||
|
*/ |
||||||
|
public class ContextKitTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getLocale() { |
||||||
|
assertEquals(ContextKit.getLocale(), Locale.CHINA); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue