diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 91d67edf8..65ed9fc17 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -44,6 +44,7 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; +import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.general.log.Log4jConfig; @@ -75,6 +76,7 @@ import javax.swing.ButtonGroup; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFileChooser; +import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; @@ -248,7 +250,7 @@ public class PreferencePane extends BasicPane { private JProgressBar gcProgressBar; private Timer gcProgressTimer; private UIButton gcOkButton = new UIButton(i18nText("Fine-Design_Report_OK")); - + private UIRadioButton previewResolutionBtnS; private UIRadioButton previewResolutionBtnM; @@ -278,7 +280,7 @@ public class PreferencePane extends BasicPane { JPanel generalPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); UIScrollPane generalScrollPane = patchScroll(generalPane); jtabPane.addTab(i18nText("Fine-Design_Basic_General"), generalScrollPane); - + JPanel advancePane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); UIScrollPane adviceScrollPane = patchScroll(advancePane); jtabPane.addTab(i18nText("Fine-Design_Basic_Advanced"), adviceScrollPane); @@ -293,7 +295,7 @@ public class PreferencePane extends BasicPane { //配置面板作为vcs总面板的一张卡片 vcsParentPane.add(vcsScrollPane, VcsMovePanel.SETTING); jtabPane.addTab(i18nText("Fine-Design_Vcs_Title"), vcsParentPane); - + contentPane.add(jtabPane, BorderLayout.NORTH); createFunctionPane(generalPane); @@ -310,7 +312,7 @@ public class PreferencePane extends BasicPane { createLogPane(advancePane); createLanPane(generalPane); - + createStartupPagePane(generalPane); createLengthPane(advancePane); @@ -376,7 +378,7 @@ public class PreferencePane extends BasicPane { designerStartupOption.add(cloudAnalyticsDelayCheckBox); advancePane.add(designerStartupOption); } - + private JPanel createImageExportSettingPane() { previewResolutionBtnS = new UIRadioButton(i18nText("Fine-Design_Image_Export_SD"), true); previewResolutionBtnM = new UIRadioButton(i18nText("Fine-Design_Image_Export_HD")); @@ -412,7 +414,7 @@ public class PreferencePane extends BasicPane { generalPanelWithScroll.setPreferredSize(new Dimension(generalPane.getWidth(), 600)); return generalPanelWithScroll; } - + private void createVcsSettingPane(JPanel generalPane,JPanel parentPane, CardLayout cardLayout) { //迁移面板 movePanel = createMovePane(cardLayout, parentPane); @@ -639,7 +641,7 @@ public class PreferencePane extends BasicPane { private void createEditPane(JPanel generalPane) { //samuel:编辑器设置 - JPanel editPane = FRGUIPaneFactory.createTitledBorderPane(i18nText("Fine-Design_Basic_Editor_Preference")); + JPanel editPane = FRGUIPaneFactory.createTopVerticalTitledBorderPane(i18nText("Fine-Design_Basic_Editor_Preference")); generalPane.add(editPane); //设置是否支持将字符串编辑为公式 @@ -649,7 +651,6 @@ public class PreferencePane extends BasicPane { //是否默认转化 defaultStringToFormulaBox = new UICheckBox(i18nText("Fine-Design_Basic_Always")); - editPane.add(defaultStringToFormulaBox); //不支持转化则不能默认执行 supportStringToFormulaBox.addActionListener(new ActionListener() { @Override @@ -661,7 +662,12 @@ public class PreferencePane extends BasicPane { keyStrokePane.add(new UILabel(i18nText("Fine-Design_Basic_Support_Auto_Complete_Shortcut") + ":"), BorderLayout.WEST); shortCutLabel = new UILabel(); keyStrokePane.add(shortCutLabel, BorderLayout.CENTER); - editPane.add(keyStrokePane); + keyStrokePane.setBorder(new EmptyBorder(0, 10,0,0)); + + JPanel defaultExecutePane = new JPanel(FRGUIPaneFactory.createLeftZeroVgapNormalHgapLayout()); + defaultExecutePane.add(defaultStringToFormulaBox); + defaultExecutePane.add(keyStrokePane); + editPane.add(defaultExecutePane); shortCutLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index c8f7281a3..1357b4835 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -690,6 +690,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } + public void hideAllPopupDialog() { + for (PropertyItem item : propertyItemMap.values()) { + item.popToFrame(); + } + } + + private void resetPropertyIcons() { for (PropertyItem item : propertyItemMap.values()) { item.resetButtonIcon(); diff --git a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java index 35e2090d9..13b4cdc75 100644 --- a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java +++ b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java @@ -15,7 +15,6 @@ import com.fr.web.socketio.WebSocketEndpoint; import com.fr.workspace.WorkContext; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; -import org.apache.catalina.Wrapper; import org.apache.catalina.loader.WebappLoader; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.webresources.StandardRoot; @@ -81,10 +80,6 @@ public class FineEmbedServerActivator extends Activator { String contextPath = "/" + ProductConstants.getAppFolderName(); final Context context = tomcat.addContext(contextPath, docBase); context.setResources(new StandardRoot(context)); - Wrapper servlet = Tomcat.addServlet(context, "DruidStatView", "com.fr.third.alibaba.druid.support.http.StatViewServlet"); - context.addServletMappingDecoded("/druid/*", "DruidStatView"); - servlet.setLoadOnStartup(1); - servlet.setOverridable(true); Tomcat.initWebappDefaults(context); //覆盖tomcat的WebAppClassLoader context.setLoader(new FRTomcatLoader()); diff --git a/designer-base/src/test/java/com/fr/design/ExtraDesignClassManagerTest.java b/designer-base/src/test/java/com/fr/design/ExtraDesignClassManagerTest.java index 8d996611e..1377e3942 100644 --- a/designer-base/src/test/java/com/fr/design/ExtraDesignClassManagerTest.java +++ b/designer-base/src/test/java/com/fr/design/ExtraDesignClassManagerTest.java @@ -6,8 +6,8 @@ import com.fr.config.dao.impl.LocalEntityDao; import com.fr.config.dao.impl.LocalXmlEntityDao; import com.fr.design.fun.ToolbarItemProvider; import com.fr.design.gui.core.WidgetOption; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.JVirtualTemplate; import com.fr.general.ModuleContext; import com.fr.report.restriction.CellCountRestriction; import com.fr.report.restriction.ReportRestrictionScene; @@ -17,6 +17,11 @@ import com.fr.stable.module.Module; import junit.framework.TestCase; import org.easymock.EasyMock; import org.junit.Assert; +import org.junit.runner.RunWith; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import java.util.HashSet; import java.util.Set; @@ -26,9 +31,15 @@ import java.util.Set; * @version 10.0 * Created by zack on 2019/9/17 */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({Toolkit.class}) +@PowerMockIgnore("javax.swing.*") public class ExtraDesignClassManagerTest extends TestCase { @Override protected void setUp() throws Exception { + PowerMock.mockStatic(Toolkit.class); + EasyMock.expect(Toolkit.i18nText(EasyMock.anyString())).andReturn("test").anyTimes(); + PowerMock.replayAll(); DaoContext.setEntityDao(new LocalEntityDao()); DaoContext.setClassHelperDao(new LocalClassHelperDao()); DaoContext.setXmlEntityDao(new LocalXmlEntityDao()); @@ -38,7 +49,7 @@ public class ExtraDesignClassManagerTest extends TestCase { public void testGetWebOption() { try { - final JTemplate jTemplate = new JVirtualTemplate(null); + final JTemplate jTemplate = EasyMock.mock(JTemplate.class); ToolbarItemProvider item = EasyMock.mock(ToolbarItemProvider.class); ToolbarItemProvider item1 = EasyMock.mock(ToolbarItemProvider.class); EasyMock.expect(item.accept(jTemplate)).andReturn(false).anyTimes(); diff --git a/designer-base/src/test/java/com/fr/design/extra/PluginUtilsTest.java b/designer-base/src/test/java/com/fr/design/extra/PluginUtilsTest.java index bbb809ebf..a77a91cd5 100644 --- a/designer-base/src/test/java/com/fr/design/extra/PluginUtilsTest.java +++ b/designer-base/src/test/java/com/fr/design/extra/PluginUtilsTest.java @@ -17,7 +17,7 @@ public class PluginUtilsTest { Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "9.0").get()); Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "9~").get()); Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "10").get()); - Assert.assertFalse(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "11").get()); + Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "11").get()); } } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/JFormSliderPaneTest.java b/designer-base/src/test/java/com/fr/design/mainframe/JFormSliderPaneTest.java index 697bc8938..5853b1009 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/JFormSliderPaneTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/JFormSliderPaneTest.java @@ -1,14 +1,32 @@ package com.fr.design.mainframe; +import com.fr.base.ScreenResolution; +import com.fr.design.i18n.Toolkit; import com.fr.invoke.Reflect; +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.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; /** * Created by kerry on 2020-07-28 */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({Toolkit.class}) +@PowerMockIgnore("javax.swing.*") public class JFormSliderPaneTest { + @Before + public void setUp() throws Exception { + PowerMock.mockStatic(Toolkit.class); + EasyMock.expect(Toolkit.i18nText(EasyMock.anyString())).andReturn("test").anyTimes(); + PowerMock.replayAll(); + } @Test public void testGetPreferredValue() { diff --git a/designer-base/src/test/java/com/fr/design/menu/SnapChatMenuDefTest.java b/designer-base/src/test/java/com/fr/design/menu/SnapChatMenuDefTest.java index 298f51a4c..277e7101b 100644 --- a/designer-base/src/test/java/com/fr/design/menu/SnapChatMenuDefTest.java +++ b/designer-base/src/test/java/com/fr/design/menu/SnapChatMenuDefTest.java @@ -5,6 +5,7 @@ import com.fr.config.dao.impl.LocalClassHelperDao; import com.fr.config.dao.impl.LocalEntityDao; import com.fr.config.dao.impl.LocalXmlEntityDao; import com.fr.design.actions.UpdateAction; +import com.fr.design.i18n.Toolkit; import com.fr.design.notification.SnapChatAllTypes; import com.fr.design.notification.SnapChatConfig; import com.fr.stable.xml.XMLableReader; @@ -29,13 +30,14 @@ import java.awt.event.ActionEvent; import java.util.HashMap; @RunWith(PowerMockRunner.class) -@PrepareForTest({SnapChatConfig.class, SnapChatUpdateAction.class}) +@PrepareForTest({Toolkit.class, SnapChatConfig.class, SnapChatUpdateAction.class}) @PowerMockIgnore({"javax.crypto.*","javax.net.ssl.*","sun.security.ssl.*","com.sun.*"}) public class SnapChatMenuDefTest { @Before public void before() throws Exception { - + PowerMock.mockStatic(Toolkit.class); + EasyMock.expect(Toolkit.i18nText(EasyMock.anyString())).andReturn("test").anyTimes(); DaoContext.setXmlEntityDao(new LocalXmlEntityDao()); DaoContext.setClassHelperDao(new LocalClassHelperDao()); DaoContext.setEntityDao(new LocalEntityDao()); @@ -46,7 +48,6 @@ public class SnapChatMenuDefTest { @Test public void testAddShortCut() throws Exception { - PowerMock.suppress(MemberMatcher.constructor(UpdateAction.class)); SnapChatConfig snapChatConfig = EasyMock.partialMockBuilder(SnapChatConfig.class) .addMockedMethod("readXML") diff --git a/designer-base/src/test/java/com/fr/design/os/impl/SupportOSImplTest.java b/designer-base/src/test/java/com/fr/design/os/impl/SupportOSImplTest.java index ee0804d36..d49ab5e07 100644 --- a/designer-base/src/test/java/com/fr/design/os/impl/SupportOSImplTest.java +++ b/designer-base/src/test/java/com/fr/design/os/impl/SupportOSImplTest.java @@ -1,11 +1,15 @@ package com.fr.design.os.impl; import com.fr.general.GeneralContext; +import com.fr.third.org.apache.commons.math3.analysis.function.Pow; import junit.framework.TestCase; import org.junit.Assert; import org.junit.Test; import java.util.Locale; + +import org.junit.runner.RunWith; +import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; /** @@ -13,6 +17,7 @@ import org.powermock.reflect.Whitebox; * @version 10.0 * Created by hades on 2020/1/16 */ +@RunWith(PowerMockRunner.class) public class SupportOSImplTest extends TestCase { @Test diff --git a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java index 333580f1a..73c668969 100644 --- a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java @@ -41,18 +41,6 @@ public class DesignerPushUpdateManagerTest { assertSame(m1, m2); } - @Test - public void testIsAutoPushUpdateSupported() { - // 中文环境 + 本地设计 -> true - DesignerPushUpdateManager pushUpdateManager = DesignerPushUpdateManager.getInstance(); - assertEquals(true, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", true, true).get()); - - // 非中文环境 || 远程设计 -> false - assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", false, true).get()); - assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", true, false).get()); - assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", false, false).get()); - } - @Test public void testSkipCurrentPushVersion() { DesignerPushUpdateManager pushUpdateManager = DesignerPushUpdateManager.getInstance(); diff --git a/designer-base/src/test/java/com/fr/design/upm/UpmUtilsTest.java b/designer-base/src/test/java/com/fr/design/upm/UpmUtilsTest.java index 5d96a6f0b..bef25e857 100644 --- a/designer-base/src/test/java/com/fr/design/upm/UpmUtilsTest.java +++ b/designer-base/src/test/java/com/fr/design/upm/UpmUtilsTest.java @@ -44,10 +44,11 @@ public class UpmUtilsTest { GeneralContext.setLocale(Locale.CHINA); Map map4Tpl = UpmUtils.renderMap(); - Assert.assertEquals(map4Tpl.size(), 3); + Assert.assertEquals(map4Tpl.size(), 4); Assert.assertEquals(map4Tpl.get("version"), "1.0"); Assert.assertEquals(map4Tpl.get("new_version"), "2.0"); Assert.assertEquals(map4Tpl.get("language"), "zh_CN"); + Assert.assertEquals(map4Tpl.get("designer_version"), "Fine-Core_Basic_About_No_Build"); EasyMock.verify(serverPreferenceConfig, cloudCenter); diff --git a/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java b/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java index 256abeeca..dcb21f799 100644 --- a/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java +++ b/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java @@ -3,20 +3,32 @@ package com.fr.design.utils.gui; import com.fr.design.gui.core.UITextComponent; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.general.GeneralContext; import com.fr.stable.StringUtils; +import org.easymock.EasyMock; 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.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import javax.swing.Icon; import java.awt.Component; import java.awt.Graphics; +import java.util.Locale; import static org.junit.Assert.*; /** * Created by plough on 2019/1/11. */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({Toolkit.class}) +@PowerMockIgnore("javax.swing.*") public class UIComponentUtilsTest { private static final String HTML_TAG_TPL = ""; private static final String HTML_TAG = ""; @@ -30,6 +42,9 @@ public class UIComponentUtilsTest { @Before public void setUp() { + PowerMock.mockStatic(Toolkit.class); + EasyMock.expect(Toolkit.i18nText(EasyMock.anyString())).andReturn("test").anyTimes(); + PowerMock.replayAll(); textButton = new UIButton("hello"); emptyTextButton = new UIButton(StringUtils.EMPTY); iconButton = new UIButton(createMockIcon()); @@ -37,13 +52,13 @@ public class UIComponentUtilsTest { textLabel = new UILabel("hello"); emptyTextLabel = new UILabel(StringUtils.EMPTY); iconLabel = new UILabel(createMockIcon()); + GeneralContext.setLocale(Locale.US); } @Test public void testSetLineWrap() { UITextComponent[] noWrapComps = {emptyTextButton, emptyTextLabel, iconButton, iconLabel}; UITextComponent[] wrapComps = {textLabel, textButton}; - for (UITextComponent comp : wrapComps) { UIComponentUtils.setLineWrap(comp); assertTrue(isLineWrapped(comp)); diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java index fca3f89b6..8861d6fcb 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java @@ -6,7 +6,9 @@ package com.fr.design.designer.creator; import com.fr.base.BaseUtils; import com.fr.base.ScreenResolution; import com.fr.base.Style; +import com.fr.design.designer.properties.mobile.NumberEditorMobilePropertyUI; import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.mainframe.widget.editors.InChangeBooleanEditor; import com.fr.design.mainframe.widget.editors.SpinnerMaxNumberEditor; import com.fr.design.mainframe.widget.editors.SpinnerMinNumberEditor; @@ -102,8 +104,8 @@ public class XNumberEditor extends XWrapperedFieldEditor { return "number_field_16.png"; } -// @Override -// public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { -// return new WidgetPropertyUIProvider[]{new NumberEditorMobilePropertyUI(this)}; -// } + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{new NumberEditorMobilePropertyUI(this)}; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java b/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java index f3d6214bf..29de6c9d0 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java @@ -3,7 +3,9 @@ */ package com.fr.design.designer.creator; +import com.fr.design.designer.properties.mobile.PasswordMobilePropertyUI; import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.ibutton.UIPasswordField; import com.fr.design.mainframe.widget.editors.RegexEditor; import com.fr.design.mainframe.widget.editors.WidgetValueEditor; @@ -68,8 +70,8 @@ public class XPassword extends XWrapperedFieldEditor { (CRPropertyDescriptor[]) ArrayUtils.addAll(sup, new CRPropertyDescriptor[]{regex, waterMark}); } -// @Override -// public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { -// return new WidgetPropertyUIProvider[]{new PasswordMobilePropertyUI(this)}; -// } + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{new PasswordMobilePropertyUI(this)}; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java b/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java index e5702c81f..88d0391ce 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java @@ -6,7 +6,9 @@ package com.fr.design.designer.creator; import com.fr.base.BaseUtils; import com.fr.base.ScreenResolution; import com.fr.base.Style; +import com.fr.design.designer.properties.mobile.TextAreaMobilePropertyUI; import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.mainframe.widget.editors.RegexEditor; import com.fr.design.mainframe.widget.editors.WidgetValueEditor; import com.fr.design.mainframe.widget.renderer.RegexCellRencerer; @@ -83,9 +85,9 @@ public class XTextArea extends XWrapperedFieldEditor { return "text_area_16.png"; } -// @Override -// public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { -// return new WidgetPropertyUIProvider[]{new TextAreaMobilePropertyUI(this)}; -// } + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{new TextAreaMobilePropertyUI(this)}; + } } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TextEditorMobileDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TextEditorMobileDefinePane.java index 4c23bc1c7..3c9ae5020 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TextEditorMobileDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TextEditorMobileDefinePane.java @@ -3,6 +3,7 @@ package com.fr.design.widget.ui.designer.mobile; import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.widget.ui.designer.mobile.component.MobileTextEditSettingPane; import com.fr.design.widget.ui.designer.mobile.component.MobileTextFieldInputSettingPane; import com.fr.form.ui.TextEditor; @@ -30,10 +31,8 @@ public class TextEditorMobileDefinePane extends BaseTextEditorMobileDefinePane { @Override protected void initSettingPane(JPanel container) { inputSettingPane = new MobileTextFieldInputSettingPane(); - /// 延期,屏蔽入口 -/// textSettingPane = new MobileTextEditSettingPane(); + textSettingPane = new MobileTextEditSettingPane(); container.add(inputSettingPane); -/// container.add(textSettingPane); } @@ -41,7 +40,7 @@ public class TextEditorMobileDefinePane extends BaseTextEditorMobileDefinePane { public void populate(FormDesigner designer) { TextEditor textEditor = (TextEditor) getxCreator().toData(); inputSettingPane.populateBean(textEditor.getMobileScanCodeAttr()); -/// textSettingPane.populateBean(textEditor.getMobileTextEditAttr()); + textSettingPane.populateBean(textEditor.getMobileTextEditAttr()); this.bindListeners2Widgets(); } @@ -49,7 +48,7 @@ public class TextEditorMobileDefinePane extends BaseTextEditorMobileDefinePane { public void update() { TextEditor textEditor = (TextEditor) getxCreator().toData(); inputSettingPane.updateBean(textEditor.getMobileScanCodeAttr()); -/// textSettingPane.updateBean(textEditor.getMobileTextEditAttr()); + textSettingPane.updateBean(textEditor.getMobileTextEditAttr()); DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); } diff --git a/designer-form/src/test/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapterTest.java b/designer-form/src/test/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapterTest.java index 4d378f641..ce4a8c824 100644 --- a/designer-form/src/test/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapterTest.java +++ b/designer-form/src/test/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapterTest.java @@ -7,15 +7,28 @@ import com.fr.config.dao.impl.LocalXmlEntityDao; import com.fr.design.designer.creator.XButton; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.i18n.Toolkit; import com.fr.form.ui.Button; import com.fr.form.ui.container.WAbsoluteLayout; import java.awt.Dimension; import junit.framework.TestCase; +import org.easymock.EasyMock; import org.junit.Assert; +import org.junit.runner.RunWith; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +@RunWith(PowerMockRunner.class) +@PrepareForTest({Toolkit.class}) +@PowerMockIgnore("javax.swing.*") public class FRAbsoluteLayoutAdapterTest extends TestCase { @Override protected void setUp() throws Exception { + PowerMock.mockStatic(Toolkit.class); + EasyMock.expect(Toolkit.i18nText(EasyMock.anyString())).andReturn("test").anyTimes(); + PowerMock.replayAll(); DaoContext.setEntityDao(new LocalEntityDao()); DaoContext.setClassHelperDao(new LocalClassHelperDao()); DaoContext.setXmlEntityDao(new LocalXmlEntityDao()); diff --git a/designer-form/src/test/java/com/fr/design/fit/PXReportLengthUNITTest.java b/designer-form/src/test/java/com/fr/design/fit/PXReportLengthUNITTest.java index 1bbfc3a0a..5c41bdef3 100644 --- a/designer-form/src/test/java/com/fr/design/fit/PXReportLengthUNITTest.java +++ b/designer-form/src/test/java/com/fr/design/fit/PXReportLengthUNITTest.java @@ -1,6 +1,7 @@ package com.fr.design.fit; import com.fr.base.ScreenResolution; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.PXReportLengthUNIT; import com.fr.stable.unit.FU; import org.easymock.EasyMock; @@ -15,11 +16,14 @@ import org.powermock.modules.junit4.PowerMockRunner; * Created by kerry on 2020-04-24 */ @RunWith(PowerMockRunner.class) -@PrepareForTest(ScreenResolution.class) +@PrepareForTest({ScreenResolution.class, Toolkit.class}) public class PXReportLengthUNITTest { @Test public void testUnitText() { + PowerMock.mockStatic(Toolkit.class); + EasyMock.expect(Toolkit.i18nText(EasyMock.anyString())).andReturn("test").anyTimes(); + PowerMock.replayAll(); PXReportLengthUNIT pxReportLengthUNIT = new PXReportLengthUNIT(); Assert.assertEquals(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Px"), pxReportLengthUNIT.unitText()); } diff --git a/designer-form/src/test/java/com/fr/design/preview/DeveloperPreviewTest.java b/designer-form/src/test/java/com/fr/design/preview/DeveloperPreviewTest.java index 624e34e59..c77869113 100644 --- a/designer-form/src/test/java/com/fr/design/preview/DeveloperPreviewTest.java +++ b/designer-form/src/test/java/com/fr/design/preview/DeveloperPreviewTest.java @@ -17,7 +17,7 @@ public class DeveloperPreviewTest { DeveloperPreview formPreview = new DeveloperPreview(); Map map = formPreview.parametersForPreview(); Assert.assertEquals(1, map.size()); - Assert.assertEquals("developer_preview", map.get(ParameterConstants.OP)); + Assert.assertEquals("editable_preview", map.get(ParameterConstants.OP)); } @Test diff --git a/designer-form/src/test/java/com/fr/design/preview/FormAdaptivePreviewTest.java b/designer-form/src/test/java/com/fr/design/preview/FormAdaptivePreviewTest.java index 4972568b4..72ab19e6c 100644 --- a/designer-form/src/test/java/com/fr/design/preview/FormAdaptivePreviewTest.java +++ b/designer-form/src/test/java/com/fr/design/preview/FormAdaptivePreviewTest.java @@ -12,14 +12,6 @@ import java.util.Map; * Created by kerry on 2020-04-24 */ public class FormAdaptivePreviewTest { - @Test - public void testParametersForPreview() { - FormAdaptivePreview formPreview = new FormAdaptivePreview(); - Map map = formPreview.parametersForPreview(); - Assert.assertEquals(1, map.size()); - Assert.assertEquals("form_adaptive", map.get(ParameterConstants.OP)); - } - @Test public void testAccept() { FormAdaptivePreview formPreview = new FormAdaptivePreview(); diff --git a/designer-realize/src/main/java/com/fr/design/widget/WidgetMobilePaneFactory.java b/designer-realize/src/main/java/com/fr/design/widget/WidgetMobilePaneFactory.java index 6f0b0d5e7..eef3477c9 100644 --- a/designer-realize/src/main/java/com/fr/design/widget/WidgetMobilePaneFactory.java +++ b/designer-realize/src/main/java/com/fr/design/widget/WidgetMobilePaneFactory.java @@ -4,8 +4,14 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.CellWidgetOptionProvider; import com.fr.design.widget.mobile.WidgetMobilePane; import com.fr.design.widget.ui.mobile.MultiFileEditorMobilePane; +import com.fr.design.widget.ui.mobile.NumberEditorMobilePane; +import com.fr.design.widget.ui.mobile.PasswordMobilePane; +import com.fr.design.widget.ui.mobile.TextAreaMobilePane; import com.fr.design.widget.ui.mobile.TextEditorMobilePane; import com.fr.form.ui.MultiFileEditor; +import com.fr.form.ui.NumberEditor; +import com.fr.form.ui.Password; +import com.fr.form.ui.TextArea; import com.fr.form.ui.TextEditor; import com.fr.form.ui.Widget; import com.fr.general.GeneralContext; @@ -29,10 +35,9 @@ public class WidgetMobilePaneFactory { static { mobilePaneMap.put(MultiFileEditor.class, MultiFileEditorMobilePane.class); mobilePaneMap.put(TextEditor.class, TextEditorMobilePane.class); - /// 此版本不发布,先屏蔽入口 -/// mobilePaneMap.put(TextArea.class, TextAreaMobilePane.class); -/// mobilePaneMap.put(NumberEditor.class, NumberEditorMobilePane.class); -/// mobilePaneMap.put(Password.class, PasswordMobilePane.class); + mobilePaneMap.put(TextArea.class, TextAreaMobilePane.class); + mobilePaneMap.put(NumberEditor.class, NumberEditorMobilePane.class); + mobilePaneMap.put(Password.class, PasswordMobilePane.class); mobilePluginPaneMap.putAll(ExtraDesignClassManager.getInstance().getCellWidgetMobileOptionsMap()); GeneralContext.listenPluginRunningChanged(new PluginEventListener() { diff --git a/designer-realize/src/main/java/com/fr/design/widget/ui/mobile/TextEditorMobilePane.java b/designer-realize/src/main/java/com/fr/design/widget/ui/mobile/TextEditorMobilePane.java index 345da2fee..7c836389d 100644 --- a/designer-realize/src/main/java/com/fr/design/widget/ui/mobile/TextEditorMobilePane.java +++ b/designer-realize/src/main/java/com/fr/design/widget/ui/mobile/TextEditorMobilePane.java @@ -37,7 +37,7 @@ public class TextEditorMobilePane extends WidgetMobilePane { settingPane = new MobileTextFieldInputSettingPane(); textSettingPane = new MobileTextEditSettingPane(); container.add(settingPane); -/// container.add(textSettingPane); + container.add(textSettingPane); this.add(new UIExpandablePane(Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, container), BorderLayout.NORTH); } diff --git a/designer-realize/src/test/java/com.fr/design/mainframe/JFileTest.java b/designer-realize/src/test/java/com.fr/design/mainframe/JFileTest.java index 573670d42..1651043f7 100644 --- a/designer-realize/src/test/java/com.fr/design/mainframe/JFileTest.java +++ b/designer-realize/src/test/java/com.fr/design/mainframe/JFileTest.java @@ -1,5 +1,10 @@ package com.fr.design.mainframe; +import com.fr.base.theme.FormTheme; +import com.fr.base.theme.FormThemeConfig; +import com.fr.base.theme.ReportThemeConfig; +import com.fr.base.theme.TemplateTheme; +import com.fr.base.theme.TemplateThemeConfig; import com.fr.config.dao.DaoContext; import com.fr.config.dao.impl.LocalClassHelperDao; import com.fr.config.dao.impl.LocalEntityDao; @@ -7,8 +12,11 @@ import com.fr.config.dao.impl.LocalXmlEntityDao; import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase; import com.fr.form.main.Form; import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.container.OccupiedLayout; +import com.fr.form.ui.container.WFitLayout; import com.fr.general.ImageWithSuffix; import com.fr.general.ModuleContext; +import com.fr.invoke.Reflect; import com.fr.main.impl.WorkBook; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.CellImage; @@ -17,13 +25,26 @@ import com.fr.report.restriction.ReportRestrictionScene; import com.fr.report.worksheet.FormElementCase; import com.fr.report.worksheet.WorkSheet; import com.fr.restriction.Restrictions; +import com.fr.stable.StringUtils; import com.fr.stable.module.Module; import com.fr.start.MainDesigner; +import com.fr.third.guava.collect.Lists; +import com.fr.transaction.WorkerCallBack; import junit.framework.TestCase; +import org.easymock.EasyMock; import org.junit.Assert; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.swing.*") public class JFileTest extends TestCase { @Override protected void setUp() throws Exception { @@ -45,6 +66,7 @@ public class JFileTest extends TestCase { ImageWithSuffix imageWithSuffix = ImageWithSuffix.build(new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB), "jpg"); CellImage cellImage = new CellImage(); cellImage.setImage(imageWithSuffix); + mockJCreateConfigEnv(ReportThemeConfig.getInstance()); JWorkBook jWorkBook = new JWorkBook(workBook, "text"); jWorkBook.setPictureElem(cellElement, cellImage); Assert.assertEquals(imageWithSuffix, cellElement.getValue()); @@ -61,9 +83,24 @@ public class JFileTest extends TestCase { ImageWithSuffix imageWithSuffix = ImageWithSuffix.build(new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB), "jpg"); CellImage cellImage = new CellImage(); cellImage.setImage(imageWithSuffix); - JForm jForm = new JForm(); + mockJCreateConfigEnv(FormThemeConfig.getInstance()); + form.setContainer(new WFitLayout()); + JForm jForm = new JForm(form); jForm.setTarget(form); jForm.setPictureElem(cellElement, cellImage); Assert.assertEquals(imageWithSuffix, cellElement.getValue()); } + + private void mockJCreateConfigEnv(TemplateThemeConfig instance) { + Reflect.on(instance).field("themeName4NewTemplate").call("set", "test"); + TemplateThemeConfig.OrderedNameList list = new TemplateThemeConfig.OrderedNameList(); + list.setThemeNames(Lists.newArrayList("test")); + Reflect.on(instance).field("themeNameList").call("set", list); + TemplateTheme testTheme = new FormTheme(); + testTheme.setDark(false); + testTheme.setName("test"); + Map testMap = new HashMap<>(); + testMap.put("test", testTheme); + Reflect.on(instance).call("put", "test", testTheme, true); + } } \ No newline at end of file