Browse Source

KERNEL-3521 添加FineKit依赖

remotes/1611766341912730171/master
lucian 4 years ago
parent
commit
34ba599b1c
  1. 16
      src/main/java/com/fanruan/api/cal/formula/Formula.java
  2. 22
      src/main/java/com/fanruan/api/cluster/ClusterBridgeKit.java
  3. 19
      src/main/java/com/fanruan/api/cluster/state/MachineKit.java
  4. 20
      src/main/java/com/fanruan/api/concurrent/NamedThreadFactory.java
  5. 30
      src/main/java/com/fanruan/api/conf/xml/XmlColConf.java
  6. 22
      src/main/java/com/fanruan/api/conf/xml/XmlConf.java
  7. 17
      src/main/java/com/fanruan/api/conf/xml/XmlHolderKit.java
  8. 12
      src/main/java/com/fanruan/api/decision/CommonKit.java
  9. 26
      src/main/java/com/fanruan/api/decision/monitor/RuntimeMemScoreKit.java
  10. 10
      src/main/java/com/fanruan/api/decision/store/StateHubManager.java
  11. 17
      src/main/java/com/fanruan/api/design/mainframe/HyperlinkGroupPaneAction.java
  12. 22
      src/main/java/com/fanruan/api/design/ui/component/UIHeadGroup.java
  13. 44
      src/main/java/com/fanruan/api/design/ui/component/UIRadioButton.java
  14. 19
      src/main/java/com/fanruan/api/design/ui/component/table/model/DesignModelAdapter.java
  15. 12
      src/main/java/com/fanruan/api/design/ui/table/AbstractPropertyTable.java
  16. 18
      src/main/java/com/fanruan/api/design/util/GUICoreKit.java
  17. 14
      src/main/java/com/fanruan/api/design/work/FormHyperlinkGroupPane.java
  18. 18
      src/main/java/com/fanruan/api/design/work/SelectImagePane.java
  19. 419
      src/main/java/com/fanruan/api/design/work/WidgetPropertyPane.java
  20. 18
      src/main/java/com/fanruan/api/image/general/ImageWithSuffix.java
  21. 9
      src/main/java/com/fanruan/api/report/cell/CellImage.java
  22. 22
      src/main/java/com/fanruan/api/report/cell/FloatElement.java
  23. 4
      src/main/java/com/fanruan/api/util/ArrayKit.java
  24. 18
      src/main/java/com/fanruan/api/util/AssistKit.java
  25. 19
      src/main/java/com/fanruan/api/util/FineCollectionKit.java
  26. 10
      src/main/java/com/fanruan/api/util/GeneralKit.java
  27. 39
      src/main/java/com/fanruan/api/util/HyperKit.java
  28. 50
      src/test/java/com/fanruan/api/cluster/ClusterBridgeKitTest.java
  29. 44
      src/test/java/com/fanruan/api/cluster/state/MachineKitTest.java
  30. 62
      src/test/java/com/fanruan/api/conf/xml/XmlHolderKitTest.java
  31. 59
      src/test/java/com/fanruan/api/decision/CommonKitTest.java
  32. 28
      src/test/java/com/fanruan/api/decision/monitor/RuntimeMemScoreKitTest.java
  33. 12
      src/test/java/com/fanruan/api/util/ArrayKitTest.java
  34. 17
      src/test/java/com/fanruan/api/util/AssistKitTest.java
  35. 23
      src/test/java/com/fanruan/api/util/FineCollectionKitTest.java
  36. 7
      src/test/java/com/fanruan/api/util/GeneralKitTest.java
  37. 62
      src/test/java/com/fanruan/api/util/HyperKitTest.java

16
src/main/java/com/fanruan/api/cal/formula/Formula.java

@ -0,0 +1,16 @@
package com.fanruan.api.cal.formula;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class Formula extends com.fr.base.Formula {
public Formula() {
super();
}
public Formula(String content) {
super(content);
}
}

22
src/main/java/com/fanruan/api/cluster/ClusterBridgeKit.java

@ -0,0 +1,22 @@
package com.fanruan.api.cluster;
import com.fr.cluster.ClusterBridge;
import com.fr.cluster.core.ClusterView;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class ClusterBridgeKit {
public static ClusterView getView() {
return ClusterBridge.getView();
}
public static boolean isClusterMode() {
return ClusterBridge.isClusterMode();
}
}

19
src/main/java/com/fanruan/api/cluster/state/MachineKit.java

@ -0,0 +1,19 @@
package com.fanruan.api.cluster.state;
import com.fr.cluster.engine.core.jchannel.MachineMarker;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class MachineKit {
public static String currentID() {
return MachineMarker.currentID();
}
public static String currentName() {
return MachineMarker.currentName();
}
}

20
src/main/java/com/fanruan/api/concurrent/NamedThreadFactory.java

@ -0,0 +1,20 @@
package com.fanruan.api.concurrent;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class NamedThreadFactory extends com.fr.concurrent.NamedThreadFactory {
public NamedThreadFactory(Class<?> aClass) {
super(aClass);
}
public NamedThreadFactory(String s) {
super(s);
}
public NamedThreadFactory(String s, boolean b) {
super(s, b);
}
}

30
src/main/java/com/fanruan/api/conf/xml/XmlColConf.java

@ -0,0 +1,30 @@
package com.fanruan.api.conf.xml;
import java.util.Collection;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class XmlColConf<T extends Collection> extends com.fr.config.holder.impl.xml.XmlColConf<Collection> {
public XmlColConf(String s, Collection collection, Class aClass) {
super(s, collection, aClass);
}
public XmlColConf(Collection collection, Class aClass) {
super(collection, aClass);
}
public XmlColConf(Collection collection, Class aClass, boolean b) {
super(collection, aClass, b);
}
public XmlColConf(Collection collection, Class aClass, String s) {
super(collection, aClass, s);
}
public XmlColConf(Collection collection, Class aClass, String s, boolean b) {
super(collection, aClass, s, b);
}
}

22
src/main/java/com/fanruan/api/conf/xml/XmlConf.java

@ -0,0 +1,22 @@
package com.fanruan.api.conf.xml;
import com.fr.stable.xml.XMLable;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class XmlConf<T extends XMLable> extends com.fr.config.holder.impl.xml.XmlConf<XMLable> {
public XmlConf(String s, XMLable xmLable, Class aClass) {
super(s, xmLable, aClass);
}
public XmlConf(XMLable xmLable, Class aClass) {
super(xmLable, aClass);
}
public XmlConf(XMLable xmLable, Class aClass, String s) {
super(xmLable, aClass, s);
}
}

17
src/main/java/com/fanruan/api/conf/xml/XmlHolderKit.java

@ -1,9 +1,8 @@
package com.fanruan.api.conf.xml;
import com.fr.config.holder.Conf;
import com.fr.config.holder.impl.xml.XmlConf;
import com.fr.stable.xml.XMLable;
import java.util.Collection;
/**
* @author richie
* @version 10.0
@ -14,13 +13,21 @@ public class XmlHolderKit {
/**
* 创建一个要写入配置的xml多项
* @param <T> 类型
* @param t 配置对象
* @param clazz 类型
* @param xmlTag xml标签
* @param <T> 类型
* @return 配置对象
*/
public static <T extends XMLable> Conf<T> obj(T t, Class<T> clazz, String xmlTag) {
return new XmlConf(t, clazz, xmlTag);
public static <T extends XMLable> XmlConf<T> obj(T t, Class<T> clazz, String xmlTag) {
return new XmlConf<T>(t, clazz, xmlTag);
}
public static <T extends XMLable> XmlColConf<Collection<T>> collection(Collection<T> t, Class<T> clazz) {
return collection(t,clazz,true);
}
public static <T extends XMLable> XmlColConf<Collection<T>> collection(Collection<T> t, Class<T> clazz, boolean order) {
return new XmlColConf<Collection<T>>(t, clazz, order);
}
}

12
src/main/java/com/fanruan/api/decision/CommonKit.java

@ -7,6 +7,7 @@ import com.fr.base.ServerConfig;
import com.fr.decision.webservice.utils.DecisionServiceConstants;
import com.fr.stable.StringUtils;
import java.awt.Image;
/**
* @author richie
* @version 10.0
@ -51,4 +52,15 @@ public class CommonKit {
return StringKit.EMPTY;
}
/**
* 将图片对象用指定的格式输出成base64编码表示的字符串
*
* @param im 图片对象
* @param format 要输出的格式
* @return 表示图片的base64编码的字符串
*/
public static String encode(Image im, String format) {
return Base64.encode(im, format);
}
}

26
src/main/java/com/fanruan/api/decision/monitor/RuntimeMemScoreKit.java

@ -0,0 +1,26 @@
package com.fanruan.api.decision.monitor;
import com.fr.decision.system.monitor.gc.load.RuntimeMemScoreProvider;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class RuntimeMemScoreKit {
//计算中止分值
public static int getBalancePromoterScore() {
return RuntimeMemScoreProvider.getBalancePromoterScore();
}
//释放会话分值
public static int getReleasePromoterScore() {
return RuntimeMemScoreProvider.getReleasePromoterScore();
}
//分发得分
public static int getLoadScore() {
return RuntimeMemScoreProvider.getLoadScore();
}
}

10
src/main/java/com/fanruan/api/decision/store/StateHubManager.java

@ -0,0 +1,10 @@
package com.fanruan.api.decision.store;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class StateHubManager extends com.fr.store.StateHubManager {
}

17
src/main/java/com/fanruan/api/design/mainframe/HyperlinkGroupPaneAction.java

@ -0,0 +1,17 @@
package com.fanruan.api.design.mainframe;
import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider;
import com.fr.design.mainframe.HyperlinkGroupPaneActionImpl;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class HyperlinkGroupPaneAction {
public static HyperlinkGroupPaneActionProvider getInstance() {
return HyperlinkGroupPaneActionImpl.getInstance();
}
}

22
src/main/java/com/fanruan/api/design/ui/component/UIHeadGroup.java

@ -0,0 +1,22 @@
package com.fanruan.api.design.ui.component;
import javax.swing.Icon;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class UIHeadGroup extends com.fr.design.gui.ibutton.UIHeadGroup {
public UIHeadGroup(String[] strings) {
super(strings);
}
public UIHeadGroup(Icon[] icons) {
super(icons);
}
public UIHeadGroup(Icon[] icons, String[] strings) {
super(icons, strings);
}
}

44
src/main/java/com/fanruan/api/design/ui/component/UIRadioButton.java

@ -0,0 +1,44 @@
package com.fanruan.api.design.ui.component;
import javax.swing.Action;
import javax.swing.Icon;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/20
*/
public class UIRadioButton extends com.fr.design.gui.ibutton.UIRadioButton {
public UIRadioButton() {
super();
}
public UIRadioButton(Icon icon) {
super(icon);
}
public UIRadioButton(Action action) {
super(action);
}
public UIRadioButton(Icon icon, boolean selected) {
super(icon, selected);
}
public UIRadioButton(String text) {
super(text);
}
public UIRadioButton(String text, boolean selected) {
super(text, selected);
}
public UIRadioButton(String text, Icon icon) {
super(text, icon);
}
public UIRadioButton(String text, Icon icon, boolean selected) {
super(text, icon, selected);
}
}

19
src/main/java/com/fanruan/api/design/ui/component/table/model/DesignModelAdapter.java

@ -0,0 +1,19 @@
package com.fanruan.api.design.ui.component.table.model;
import com.fr.base.io.BaseBook;
import com.fr.design.mainframe.JTemplateProvider;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public abstract class DesignModelAdapter<T extends BaseBook, S extends JTemplateProvider<T>> extends com.fr.design.DesignModelAdapter {
public DesignModelAdapter(JTemplateProvider jTemplateProvider) {
super(jTemplateProvider);
}
public static DesignModelAdapter<?, ?> getCurrentModelAdapter() {
return DesignModelAdapter.getCurrentModelAdapter();
}
}

12
src/main/java/com/fanruan/api/design/ui/table/AbstractPropertyTable.java

@ -0,0 +1,12 @@
package com.fanruan.api.design.ui.table;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public abstract class AbstractPropertyTable extends com.fr.design.gui.itable.AbstractPropertyTable {
public AbstractPropertyTable() {
super();
}
}

18
src/main/java/com/fanruan/api/design/util/GUICoreKit.java

@ -121,6 +121,24 @@ public class GUICoreKit {
return FRGUIPaneFactory.createBorderLayout_S_Pane();
}
/**
* 创建纵向内置boxlayout的面板
*
* @return JPanel对象
*/
public static JPanel createYAXISBoxInnerContainerPane() {
return FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
}
/**
* 创建一个边框布局
*
* @return BorderLayout对象
*/
public static LayoutManager createBorderLayout() {
return FRGUIPaneFactory.createBorderLayout();
}
/**
* 设置一个窗口居中
*/

14
src/main/java/com/fanruan/api/design/work/FormHyperlinkGroupPane.java

@ -0,0 +1,14 @@
package com.fanruan.api.design.work;
import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class FormHyperlinkGroupPane extends com.fr.design.gui.xpane.FormHyperlinkGroupPane {
protected FormHyperlinkGroupPane(HyperlinkGroupPaneActionProvider hyperlinkGroupPaneActionProvider) {
super(hyperlinkGroupPaneActionProvider);
}
}

18
src/main/java/com/fanruan/api/design/work/SelectImagePane.java

@ -0,0 +1,18 @@
package com.fanruan.api.design.work;
import com.fanruan.api.report.cell.CellImage;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class SelectImagePane extends com.fr.design.report.SelectImagePane {
public SelectImagePane() {
super();
}
public CellImage update() {
return (CellImage) super.update();
}
}

419
src/main/java/com/fanruan/api/design/work/WidgetPropertyPane.java

@ -0,0 +1,419 @@
package com.fanruan.api.design.work;
import com.fanruan.api.design.ui.component.UIHeadGroup;
import com.fanruan.api.design.ui.component.UILabel;
import com.fanruan.api.design.ui.container.UIScrollPane;
import com.fanruan.api.design.ui.table.AbstractPropertyTable;
import com.fanruan.api.design.util.GUICoreKit;
import com.fanruan.api.util.ArrayKit;
import com.fanruan.api.util.IOKit;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.constants.UIConstants;
import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.XComponent;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWAbsoluteLayout;
import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.designer.properties.EventPropertyTable;
import com.fr.design.designer.properties.mobile.MobileBookMarkPropertyUI;
import com.fr.design.designer.properties.mobile.MobileStylePropertyUI;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.mainframe.BaseFormDesigner;
import com.fr.design.mainframe.BaseWidgetPropertyPane;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormDockView;
import com.fr.design.mainframe.FormSelection;
import com.fr.design.mainframe.widget.ui.FormWidgetCardPane;
import com.fr.design.widget.ui.designer.mobile.MobileWidgetDefinePane;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* 控件属性表绘制
* Modified by fanglei
*/
public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane {
private static final int PADDING = 10;
private static final int PADDING_M = 12;
private FormWidgetCardPane formWidgetCardPane; // 控件的属性表
private EventPropertyTable eventTable; // 控件的事件表
private List<AbstractPropertyTable> widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab
private List<MobileWidgetDefinePane> mobileExtraPropertyPanes; // 保存9.0设计器下移动端拓展的属性tab,舍弃JTable
private FormDesigner designer; // 当前designer
private UIScrollPane psp; // 用来装载属性表table的容器
private JPanel wsp; // 装载移动端tab的容器,包括移动端属性表和控件拓展的移动端属性表
private UIHeadGroup tabsHeaderIconPane;
private XComponent lastAffectedCreator;
public static WidgetPropertyPane getInstance() {
if (HOLDER.singleton == null) {
HOLDER.singleton = new WidgetPropertyPane();
}
return HOLDER.singleton;
}
public static WidgetPropertyPane getInstance(FormDesigner formEditor) {
HOLDER.singleton.setEditingFormDesigner(formEditor);
HOLDER.singleton.refreshDockingView();
return HOLDER.singleton;
}
private static class HOLDER {
private static WidgetPropertyPane singleton = new WidgetPropertyPane();
}
private WidgetPropertyPane() {
setLayout(GUICoreKit.createBorderLayout());
}
@Override
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Control_Setting");
}
@Override
public String getViewTitle() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Property_Table");
}
@Override
public Icon getViewIcon() {
return IOKit.readIcon("/com/fr/design/images/m_report/attributes.png");
}
@Override
/**
* 绘制属性表tab
*/
public void refreshDockingView() {
designer = this.getEditingFormDesigner();
removeAll();
if (designer == null) {
clearDockingView();
return;
}
widgetPropertyTables = new ArrayList<AbstractPropertyTable>();
mobileExtraPropertyPanes = new ArrayList<>();
//依次创建属性表、事件表、移动端表,再将它们整合到TabPane中去
this.createPropertyTable();
this.createEventTable();
this.createMobileWidgetTable();
this.createTabPane();
this.initTables();
}
/**
* 初始化属性表事件表移动端拓展的属性表
*/
private void initTables() {
formWidgetCardPane.populate();
eventTable.refresh();
if (mobileExtraPropertyPanes != null) {
for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) {
extraPane.initPropertyGroups(designer);
}
}
if (widgetPropertyTables != null) {
for (AbstractPropertyTable propertyTable : widgetPropertyTables) {
propertyTable.initPropertyGroups(designer);
}
}
}
/**
* 创建属性表table
*/
private void createPropertyTable() {
formWidgetCardPane = new FormWidgetCardPane(designer);
designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(formWidgetCardPane));
psp = new UIScrollPane(formWidgetCardPane); // 用来装载属性表table
psp.setBorder(null);
}
/**
* 创建事件表事件选项卡不是JTable
*/
private void createEventTable() {
eventTable = new EventPropertyTable(designer);
designer.addDesignerEditListener(new EventPropertyDesignerAdapter(eventTable));
}
/**
* 创建移动端控件列表
*/
private void createMobileWidgetTable() {
//加上表头后,这里不再使用borderLayout布局,而采用BoxLayout布局
wsp = GUICoreKit.createYAXISBoxInnerContainerPane();
wsp.setBorder(null);
designer.addDesignerEditListener(new MobileWidgetDesignerAdapter());
//获取拓展移动端属性tab
WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders();
addWidgetAttr(widgetAttrProviders);
}
/**
* 将属性表事件表移动端控件列表整合到TabPane里面去
*/
private void createTabPane() {
initTabPane();
}
/**
* 获取当前控件扩展的属性tab
* 来源有两个:
* 1, 各个控件从各自的Xcreator里扩展例如手机重布局的tab就是从Xcreator中扩展的;
* 2, 所有的控件从插件里扩展.
*
* @return 扩展的tab
*/
private WidgetPropertyUIProvider[] getExtraPropertyUIProviders() {
FormSelection selection = designer.getSelectionModel().getSelection();
WidgetPropertyUIProvider[] embeddedPropertyUIProviders = null;
XCreator xCreator = selection.getSelectedCreator();
if (selection != null && xCreator != null) {
embeddedPropertyUIProviders = selection.getSelectedCreator().getWidgetPropertyUIProviders();
if(!designer.getDesignerMode().isFormParameterEditor()) {
if (!xCreator.acceptType(XWAbsoluteLayout.class, XWFitLayout.class)) {
embeddedPropertyUIProviders = ArrayKit.insert(0, embeddedPropertyUIProviders, new MobileBookMarkPropertyUI(xCreator));
}
if (xCreator.supportMobileStyle()) {
embeddedPropertyUIProviders = ArrayKit.insert(0, embeddedPropertyUIProviders, new MobileStylePropertyUI(xCreator));
}
}
}
Set<WidgetPropertyUIProvider> set = ExtraDesignClassManager.getInstance().getArray(WidgetPropertyUIProvider.XML_TAG);
return ArrayKit.addAll(embeddedPropertyUIProviders, set.toArray(new WidgetPropertyUIProvider[set.size()]));
}
/**
* 判断是将拓展的tab放入属性表还是将原来的tab放入属性表
*
* @param widgetAttrProviders 拓展的tab
*/
private void addWidgetAttr(WidgetPropertyUIProvider[] widgetAttrProviders) {
if (widgetAttrProviders.length == 0) { // 判断有没有拓展的tab,提示"无可用配置项"
wsp.add(getUnavailablePane());
} else {
for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) {
MobileWidgetDefinePane extraPane = (MobileWidgetDefinePane) widgetAttrProvider.createWidgetAttrPane();
if (extraPane != null) {
extraPane.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, PADDING, PADDING_M));
mobileExtraPropertyPanes.add(extraPane);
wsp.add(extraPane);
}
AbstractPropertyTable propertyTable = (AbstractPropertyTable) widgetAttrProvider.createWidgetAttrTable();
if (propertyTable != null) {
widgetPropertyTables.add(propertyTable);
designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(formWidgetCardPane));
UIScrollPane uiScrollPane = new UIScrollPane(propertyTable);
wsp.add(uiScrollPane);
}
}
}
}
// "无可用配置项"面板
private JPanel getUnavailablePane() {
JPanel panel = GUICoreKit.createBorderLayoutPane();
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No_Settings_Available"));
label.setHorizontalAlignment(SwingConstants.CENTER);
panel.add(label);
return panel;
}
private void initTabPane() {
final String[] tabTitles = new String[]{
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Properties"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Widget_Mobile_Terminal")
};
final CardLayout tabbedPane = new CardLayout();
final JPanel center = new JPanel(tabbedPane);
center.add(formWidgetCardPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Properties"));
center.add(eventTable, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"));
center.add(wsp, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Widget_Mobile_Terminal"));
this.add(center, BorderLayout.CENTER);
tabsHeaderIconPane = new UIHeadGroup(tabTitles) {
@Override
public void tabChanged(int index) {
//切换的时候再populate
if (index == 1) {
eventTable.populateNameObjects();
} else if (index == 2) {
if (mobileExtraPropertyPanes != null) {
for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) {
extraPane.populate(designer);
}
}
}
tabbedPane.show(center, tabTitles[index]);
}
};
tabsHeaderIconPane.setNeedLeftRightOutLine(true);
tabsHeaderIconPane.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, UIConstants.SHADOW_GREY));
this.add(tabsHeaderIconPane, BorderLayout.NORTH);
}
/**
* 选中的组件是否在参数面板里
*
* @param designer 设计器
* @return 是则返回true
*/
public boolean hasSelectParaPane(FormDesigner designer) {
XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator();
if (xCreator == null) {
xCreator = designer.getRootComponent();
}
XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator);
boolean xCreatorAccept = xCreator.acceptType(XWParameterLayout.class);
boolean containerAccept = container != null && container.acceptType(XWParameterLayout.class);
return xCreatorAccept || containerAccept;
}
@Override
public void setEditingFormDesigner(BaseFormDesigner editor) {
FormDesigner fd = (FormDesigner) editor;
super.setEditingFormDesigner(fd);
}
private void clearDockingView() {
formWidgetCardPane = null;
eventTable = null;
if (widgetPropertyTables != null) {
widgetPropertyTables.clear();
}
JScrollPane psp = new JScrollPane();
psp.setBorder(null);
this.add(psp, BorderLayout.CENTER);
}
/**
* 属性表监听界面事件(编辑删除选中改变大小)
*/
private class WidgetPropertyDesignerAdapter implements DesignerEditListener {
FormWidgetCardPane formWidgetCardPane;
WidgetPropertyDesignerAdapter(FormWidgetCardPane formWidgetCardPane) {
this.formWidgetCardPane = formWidgetCardPane;
}
@Override
public void fireCreatorModified(DesignerEvent evt) {
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED) {
formWidgetCardPane.populate();
} else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
// 防止多次触发
if (lastAffectedCreator != null && lastAffectedCreator == evt.getAffectedCreator()) {
return;
}
lastAffectedCreator = evt.getAffectedCreator();
refreshDockingView();
formWidgetCardPane.populate();
}
}
@Override
public boolean equals(Object o) {
return o instanceof WidgetPropertyDesignerAdapter;
}
}
/**
* 事件表监听界面事件编辑选中
*/
private class EventPropertyDesignerAdapter implements DesignerEditListener {
EventPropertyTable propertyTable;
EventPropertyDesignerAdapter(EventPropertyTable eventTable) {
this.propertyTable = eventTable;
}
@Override
public void fireCreatorModified(DesignerEvent evt) {
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED) {
propertyTable.refresh();
} else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
// 防止多次触发
if (lastAffectedCreator != null && lastAffectedCreator == evt.getAffectedCreator()) {
return;
}
lastAffectedCreator = evt.getAffectedCreator();
propertyTable.refresh();
}
}
@Override
public boolean equals(Object o) {
return o instanceof EventPropertyDesignerAdapter;
}
}
/**
* 移动端属性表监听界面事件改变大小编辑选中增加控件
*/
private class MobileWidgetDesignerAdapter implements DesignerEditListener {
MobileWidgetDesignerAdapter() {
}
/**
* 响应界面改变事件
*
* @param evt 事件
*/
public void fireCreatorModified(DesignerEvent evt) {
int[] validEventIds = {DesignerEvent.CREATOR_RESIZED, DesignerEvent.CREATOR_EDITED,
DesignerEvent.CREATOR_SELECTED, DesignerEvent.CREATOR_ADDED, DesignerEvent.CREATOR_ORDER_CHANGED};
boolean isValid = false;
for (int validEventId : validEventIds) {
if (evt.getCreatorEventID() == validEventId) {
isValid = true;
break;
}
}
if (!isValid) {
return;
}
if (mobileExtraPropertyPanes != null) {
for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) {
extraPane.populate(designer);
}
}
}
@Override
public boolean equals(Object o) {
return o instanceof MobileWidgetDesignerAdapter;
}
}
@Override
public Location preferredLocation() {
return Location.WEST_BELOW;
}
}

18
src/main/java/com/fanruan/api/image/general/ImageWithSuffix.java

@ -0,0 +1,18 @@
package com.fanruan.api.image.general;
import java.awt.Image;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class ImageWithSuffix extends com.fr.general.ImageWithSuffix {
public ImageWithSuffix(Image image, String format) {
super(image, format);
}
public ImageWithSuffix(Image image) {
super(image);
}
}

9
src/main/java/com/fanruan/api/report/cell/CellImage.java

@ -0,0 +1,9 @@
package com.fanruan.api.report.cell;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class CellImage extends com.fr.report.cell.cellattr.CellImage {
}

22
src/main/java/com/fanruan/api/report/cell/FloatElement.java

@ -0,0 +1,22 @@
package com.fanruan.api.report.cell;
import com.fr.stable.unit.UNIT;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class FloatElement extends com.fr.report.cell.FloatElement {
public FloatElement() {
super();
}
public FloatElement(Object value) {
super(value);
}
public FloatElement(UNIT leftDistance, UNIT topDistance, UNIT width, UNIT height, Object value) {
super(leftDistance, topDistance, width, height, value);
}
}

4
src/main/java/com/fanruan/api/util/ArrayKit.java

@ -120,4 +120,8 @@ public class ArrayKit {
public static int getLength(Object array) {
return ArrayUtils.getLength(array);
}
public static <T> T[] insert(final int index, final T[] array, final T... values) {
return ArrayUtils.insert(index, array, values);
}
}

18
src/main/java/com/fanruan/api/util/AssistKit.java

@ -23,6 +23,24 @@ public class AssistKit {
return AssistUtils.equals(parm1, parm2);
}
/**
* 判断 float 类型是否相等
* <p>
* 浮点数采用尾数+阶码的编码方式类似于科学计数法的有效数字+指数的表示方式
* 二进制无法精确表示大部分的十进制小数
* <p>
* 这里首先比较该数二进制是否相等若不相等则采用近视精度比较精度可自定义
*
* @param f1 单精度浮点
* @param f2 单精度浮点
* @param delta 判断精度
* @return 是否相等
* @see #equals(float, float)
*/
public static boolean equalsFloat(float f1, float f2, float delta) {
return AssistUtils.equalsFloat(f1, f2 ,delta);
}
/**
* 判断两个Object类型数据是否相等
* @param parm1 第一个Object数据

19
src/main/java/com/fanruan/api/util/FineCollectionKit.java

@ -0,0 +1,19 @@
package com.fanruan.api.util;
import com.fr.collections.FineCollections;
import com.fr.collections.api.FineCollectionClient;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class FineCollectionKit {
public static FineCollections getFineCollections() {
return FineCollections.getInstance();
}
public static FineCollectionClient getClient() {
return FineCollections.getInstance().getClient();
}
}

10
src/main/java/com/fanruan/api/util/GeneralKit.java

@ -148,4 +148,14 @@ public class GeneralKit {
return (rgb & 0xff000000) | (gray << 16) | (gray << 8) | (gray);
}
/**
* 寻找指定名字的class文件
*
* @param className 指定的类名
* @return class类
*/
public static Class<?> classForName(String className) throws ClassNotFoundException, NoClassDefFoundError {
return StableUtils.classForName(className);
}
}

39
src/main/java/com/fanruan/api/util/HyperKit.java

@ -0,0 +1,39 @@
package com.fanruan.api.util;
import com.fr.js.HyperlinkUtils;
import com.fr.js.NameJavaScriptGroup;
import com.fr.json.JSONArray;
import com.fr.json.JSONException;
import com.fr.stable.web.Repository;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/23
*/
public class HyperKit {
/**
* 写超链的内容
*
* @param g 超级链接的集合
* @param repo
* @return JSONArray转化的字符串
* @throws JSONException JSON异常 J
*/
public static String writeJSLinkContent(NameJavaScriptGroup g, Repository repo) throws JSONException {
return HyperlinkUtils.writeJSLinkContent(g, repo);
}
/**
* 把超链转化成json
*
* @param g 超链
* @param repo
* @return json对象
* @throws JSONException JSON异常
*/
public static JSONArray createJSLink(NameJavaScriptGroup g, Repository repo) throws JSONException {
return HyperlinkUtils.createJSLink(g, repo);
}
}

50
src/test/java/com/fanruan/api/cluster/ClusterBridgeKitTest.java

@ -0,0 +1,50 @@
package com.fanruan.api.cluster;
import com.fr.cluster.ClusterBridge;
import com.fr.cluster.core.ClusterView;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClusterBridge.class)
public class ClusterBridgeKitTest {
@Test
public void testGetView() {
ClusterView view = EasyMock.mock(ClusterView.class);
PowerMock.mockStatic(ClusterBridge.class);
EasyMock.expect(ClusterBridge.getView()).andReturn(view).once();
EasyMock.expect(ClusterBridge.getView()).andReturn(null).once();
EasyMock.replay(view);
PowerMock.replay(ClusterBridge.class);
Assert.assertEquals(ClusterBridgeKit.getView(), view);
Assert.assertNull(ClusterBridgeKit.getView());
EasyMock.verify(view);
PowerMock.verify(ClusterBridge.class);
}
@Test
public void testIsClusterMode() {
PowerMock.mockStatic(ClusterBridge.class);
EasyMock.expect(ClusterBridge.isClusterMode()).andReturn(true).once();
EasyMock.expect(ClusterBridge.isClusterMode()).andReturn(false).once();
PowerMock.replay(ClusterBridge.class);
Assert.assertTrue(ClusterBridgeKit.isClusterMode());
Assert.assertFalse(ClusterBridgeKit.isClusterMode());
PowerMock.verify(ClusterBridge.class);
}
}

44
src/test/java/com/fanruan/api/cluster/state/MachineKitTest.java

@ -0,0 +1,44 @@
package com.fanruan.api.cluster.state;
import com.fr.cluster.engine.core.jchannel.MachineMarker;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(MachineMarker.class)
@SuppressStaticInitializationFor("com.fr.cluster.engine.core.jchannel.MachineMarker")
public class MachineKitTest {
@Test
public void testCurrentID() {
PowerMock.mockStatic(MachineMarker.class);
EasyMock.expect(MachineMarker.currentID()).andReturn("1").anyTimes();
PowerMock.replay(MachineMarker.class);
Assert.assertEquals(MachineKit.currentID(), "1");
PowerMock.verify(MachineMarker.class);
}
@Test
public void testCurrentName() {
PowerMock.mockStatic(MachineMarker.class);
EasyMock.expect(MachineMarker.currentName()).andReturn("1").anyTimes();
PowerMock.replay(MachineMarker.class);
Assert.assertEquals(MachineKit.currentName(), "1");
PowerMock.verify(MachineMarker.class);
}
}

62
src/test/java/com/fanruan/api/conf/xml/XmlHolderKitTest.java

@ -0,0 +1,62 @@
package com.fanruan.api.conf.xml;
import java.util.ArrayList;
import java.util.List;
import com.fr.stable.xml.XMLable;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({XmlHolderKit.class})
public class XmlHolderKitTest {
@Test
public void testOjb() throws Exception {
XMLable xmlable = EasyMock.createMock(XMLable.class);
XmlConf xmlConf = EasyMock.createMock(XmlConf.class);
PowerMock.expectNew(XmlConf.class, xmlable, XMLable.class, "A").andReturn(xmlConf);
EasyMock.replay(xmlable, xmlConf);
PowerMock.replay(XmlConf.class);
Assert.assertEquals(XmlHolderKit.obj(xmlable, XMLable.class, "A"), xmlConf);
EasyMock.verify(xmlable, xmlConf);
PowerMock.verify(XmlConf.class);
}
@Test
public void testCollection() throws Exception {
XmlColConf xmlColConf1 = EasyMock.createMock(XmlColConf.class);
XmlColConf xmlColConf2 = EasyMock.createMock(XmlColConf.class);
List<XMLable> list = new ArrayList<>();
PowerMock.expectNew(XmlColConf.class, list, XMLable.class, true).andReturn(xmlColConf1).times(2);
PowerMock.expectNew(XmlColConf.class, list, XMLable.class, false).andReturn(xmlColConf2).once();
EasyMock.replay(xmlColConf1, xmlColConf2);
PowerMock.replay(XmlColConf.class);
Assert.assertEquals(XmlHolderKit.collection(list, XMLable.class), xmlColConf1);
Assert.assertEquals(XmlHolderKit.collection(list, XMLable.class, true), xmlColConf1);
Assert.assertEquals(XmlHolderKit.collection(list, XMLable.class, false), xmlColConf2);
EasyMock.verify(xmlColConf1, xmlColConf2);
PowerMock.verify(XmlColConf.class);
}
}

59
src/test/java/com/fanruan/api/decision/CommonKitTest.java

@ -0,0 +1,59 @@
package com.fanruan.api.decision;
import com.fr.base.Base64;
import com.fr.base.ServerConfig;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.UnsupportedEncodingException;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(ServerConfig.class)
public class CommonKitTest {
@Test
public void testIsDefaultPassword() {
Assert.assertTrue(CommonKit.isDefaultPasswordHolderString("********"));
}
@Test
public void testFetchDefaultPassword() {
Assert.assertEquals(CommonKit.fetchDefaultPasswordHolderString(), "********");
}
@Test
public void testGetBase64DecodeStr() throws UnsupportedEncodingException {
ServerConfig serverConfig = EasyMock.createMock(ServerConfig.class);
PowerMock.mockStatic(ServerConfig.class);
EasyMock.expect(ServerConfig.getInstance()).andReturn(serverConfig).anyTimes();
EasyMock.expect(serverConfig.getServerCharset()).andReturn("utf-8").anyTimes();
EasyMock.replay(serverConfig);
PowerMock.replay(ServerConfig.class);
String result = new String(Base64.decode("a"), "utf-8");
Assert.assertEquals(CommonKit.getBase64DecodeStr("a"), result);
Assert.assertEquals(CommonKit.getBase64DecodeStr(""), "");
EasyMock.verify(serverConfig);
PowerMock.verify(ServerConfig.class);
}
@Test
public void testEncode() {
Image im = new BufferedImage(1, 1, 1);
String result = Base64.encode(im, "");
Assert.assertEquals(result, CommonKit.encode(im, ""));
}
}

28
src/test/java/com/fanruan/api/decision/monitor/RuntimeMemScoreKitTest.java

@ -0,0 +1,28 @@
package com.fanruan.api.decision.monitor;
import com.fr.decision.system.monitor.gc.load.RuntimeMemScoreProvider;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
public class RuntimeMemScoreKitTest {
@Test
public void testGetLoadScore() {
Assert.assertEquals(RuntimeMemScoreProvider.getLoadScore(), RuntimeMemScoreKit.getLoadScore());
}
@Test
public void testGetReleasePromoterScore() {
Assert.assertEquals(RuntimeMemScoreProvider.getReleasePromoterScore(), RuntimeMemScoreKit.getReleasePromoterScore());
}
@Test
public void testGetBalancePromoterScore() {
Assert.assertEquals(RuntimeMemScoreProvider.getBalancePromoterScore(), RuntimeMemScoreKit.getBalancePromoterScore());
}
}

12
src/test/java/com/fanruan/api/util/ArrayKitTest.java

@ -149,4 +149,16 @@ public class ArrayKitTest extends Prepare {
Assert.assertEquals(ArrayKit.getLength(null),0);
Assert.assertEquals(ArrayKit.getLength(b),2);
}
@Test
public void testInsert() {
Integer[] array1 = new Integer[] {0, 1, 2};
Integer[] result1 = new Integer[] {0, 7, 8, 1, 2};
String[] array2 = new String[] {"1", "2"};
String[] result2 = new String[] {"3", "1", "2"};
Assert.assertEquals(ArrayKit.insert(1, array1, 7, 8), result1);
Assert.assertEquals(ArrayKit.insert(0, array2, "3"), result2);
}
}

17
src/test/java/com/fanruan/api/util/AssistKitTest.java

@ -1,6 +1,7 @@
package com.fanruan.api.util;
import com.fr.event.Null;
import com.fr.stable.AssistUtils;
import org.junit.Assert;
import org.junit.Test;
@ -65,4 +66,20 @@ public class AssistKitTest {
Assert.assertEquals(Arrays.hashCode(a), AssistKit.hashCode(s));
Assert.assertEquals(0, AssistKit.hashCode(null));
}
@Test
public void testEqualsFloat() {
float f1 = 0.6f;
float f2 = 0.6f;
float f3 = 0.6001f;
float f4 = 0.601f;
float f5 = 0.602f;
float delta = 0.001f;
Assert.assertTrue(AssistKit.equalsFloat(f1, f2, delta));
Assert.assertTrue(AssistKit.equalsFloat(f1, f3, delta));
Assert.assertTrue(AssistKit.equalsFloat(f1, f4, delta));
Assert.assertFalse(AssistKit.equalsFloat(f1, f5, delta));
}
}

23
src/test/java/com/fanruan/api/util/FineCollectionKitTest.java

@ -0,0 +1,23 @@
package com.fanruan.api.util;
import com.fr.collections.FineCollections;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
public class FineCollectionKitTest {
@Test
public void testGetClient() {
Assert.assertEquals(FineCollections.getInstance().getClient(), FineCollectionKit.getClient());
}
@Test
public void testGetInstance() {
Assert.assertEquals(FineCollections.getInstance(), FineCollectionKit.getFineCollections());
}
}

7
src/test/java/com/fanruan/api/util/GeneralKitTest.java

@ -2,6 +2,7 @@ package com.fanruan.api.util;
import com.fanruan.api.Prepare;
import com.fr.general.GeneralUtils;
import com.fr.stable.StableUtils;
import org.junit.Assert;
import org.junit.Test;
@ -73,4 +74,10 @@ public class GeneralKitTest extends Prepare {
Assert.assertEquals(GeneralKit.pathJoin(strArray), "abc/def");
}
@Test
public void testClassForName() throws ClassNotFoundException {
String className = "com.fanruan.api.util.GeneralKitTest";
Assert.assertEquals(GeneralKit.classForName(className), StableUtils.classForName(className));
}
}

62
src/test/java/com/fanruan/api/util/HyperKitTest.java

@ -0,0 +1,62 @@
package com.fanruan.api.util;
import com.fanruan.api.json.JSONKit;
import com.fr.js.HyperlinkUtils;
import com.fr.js.NameJavaScriptGroup;
import com.fr.json.JSONArray;
import com.fr.stable.web.Repository;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/3/24
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({HyperlinkUtils.class})
public class HyperKitTest {
@Test
public void testWriteJS() {
NameJavaScriptGroup g = EasyMock.createMock(NameJavaScriptGroup.class);
Repository repo = EasyMock.createMock(Repository.class);
PowerMock.mockStatic(HyperlinkUtils.class);
EasyMock.expect(HyperlinkUtils.writeJSLinkContent(g, repo)).andReturn("A").once();
EasyMock.expect(HyperlinkUtils.writeJSLinkContent(g, repo)).andReturn("B").once();
EasyMock.replay(g, repo);
PowerMock.replay(HyperlinkUtils.class);
Assert.assertEquals(HyperKit.writeJSLinkContent(g, repo), "A");
Assert.assertEquals(HyperKit.writeJSLinkContent(g, repo), "B");
EasyMock.verify(g, repo);
PowerMock.verify(HyperlinkUtils.class);
}
@Test
public void testCreateJSLink() {
JSONArray array1 = JSONKit.createJSONArray("[]");
JSONArray array2 = JSONKit.createJSONArray("[{\"1\":\"a\"}, {\"1\":\"b\"}]");
NameJavaScriptGroup g = EasyMock.createMock(NameJavaScriptGroup.class);
Repository repo = EasyMock.createMock(Repository.class);
PowerMock.mockStatic(HyperlinkUtils.class);
EasyMock.expect(HyperlinkUtils.createJSLink(g, repo)).andReturn(array1).once();
EasyMock.expect(HyperlinkUtils.createJSLink(g, repo)).andReturn(array2).once();
EasyMock.replay(g, repo);
PowerMock.replay(HyperlinkUtils.class);
Assert.assertEquals(HyperKit.createJSLink(g, repo), array1);
Assert.assertEquals(HyperKit.createJSLink(g, repo), array2);
EasyMock.verify(g, repo);
PowerMock.verify(HyperlinkUtils.class);
}
}
Loading…
Cancel
Save