diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index a5a59acc86..f4554069e3 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -429,10 +429,14 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo xCreators.add(this); int componentCount = getComponentCount(); for (int i = 0; i < componentCount; i++) { - XCreator xCreator = (XCreator) getComponent(i); - //获取真实的 creator - XCreator realCreator = xCreator.getXCreator(); - realCreator.traversalNameRelatedXCreators(xCreators); + + Component component = getComponent(i); + if (component instanceof XCreator) { + XCreator xCreator = (XCreator) component; + //获取真实的 creator + XCreator realCreator = xCreator.getXCreator(); + realCreator.traversalNameRelatedXCreators(xCreators); + } } } diff --git a/designer-form/src/test/java/com/fr/design/designer/beans/models/AddingModelTest.java b/designer-form/src/test/java/com/fr/design/designer/beans/models/AddingModelTest.java index a6bd823008..7f17ef3a22 100644 --- a/designer-form/src/test/java/com/fr/design/designer/beans/models/AddingModelTest.java +++ b/designer-form/src/test/java/com/fr/design/designer/beans/models/AddingModelTest.java @@ -1,32 +1,45 @@ package com.fr.design.designer.beans.models; +import com.fr.base.chart.BaseChartCollection; import com.fr.config.dao.DaoContext; 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.designer.creator.CRPropertyDescriptor; +import com.fr.design.designer.creator.XChartEditor; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWTitleLayout; import com.fr.design.designer.creator.cardlayout.XWCardLayout; +import com.fr.design.gui.chart.MiddleChartComponent; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.module.DesignModuleFactory; import com.fr.form.main.Form; import com.fr.form.ui.ChartEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WTitleLayout; +import com.fr.stable.core.PropertyChangeListener; import org.easymock.EasyMock; import org.junit.After; 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; import javax.swing.JComponent; import java.awt.Dimension; import java.awt.Rectangle; import java.beans.IntrospectionException; +@PrepareForTest({DesignModuleFactory.class}) +@PowerMockIgnore({"com.sun.*", "javax.*", "com.fr.jvm.assist.*"}) +@RunWith(PowerMockRunner.class) public class AddingModelTest { @Before @@ -99,7 +112,7 @@ public class AddingModelTest { FormDesigner mock = EasyMock.mock(FormDesigner.class); EasyMock.expect(mock.getTarget()).andReturn(form).anyTimes(); EasyMock.replay(mock); - + WCardLayout wCardLayout = new WCardLayout(20, 20); XWCardLayout xwCardLayout = new XWCardLayout(wCardLayout, new Dimension(40, 40)); AddingModel addingModel = new AddingModel(mock, xwCardLayout); @@ -113,6 +126,53 @@ public class AddingModelTest { } + @Test + public void testInstantiateCreator_containsNotXCreator() throws Exception { + + Form form = EasyMock.mock(Form.class); + EasyMock.expect(form.isNameExist("cardlayout")).andReturn(true).once(); + EasyMock.expect(form.isNameExist("cardlayout0")).andReturn(true).once(); + EasyMock.expect(form.isNameExist(EasyMock.anyString())).andReturn(false).anyTimes(); + EasyMock.replay(form); + + FormDesigner mock = EasyMock.mock(FormDesigner.class); + EasyMock.expect(mock.getTarget()).andReturn(form).anyTimes(); + EasyMock.replay(mock); + + PowerMock.mockStaticPartial(DesignModuleFactory.class, "getChartComponent"); + EasyMock.expect(DesignModuleFactory.getChartComponent(EasyMock.anyObject(BaseChartCollection.class))).andReturn(new MiddleChartComponent() { + @Override + public void populate(BaseChartCollection cc) { + + } + + @Override + public BaseChartCollection update() { + return null; + } + + @Override + public void reset() { + + } + + @Override + public void addStopEditingListener(PropertyChangeListener list) { + + } + }).anyTimes(); + PowerMock.replayAll(); + + Dimension dimension = new Dimension(20, 20); + + ChartEditor chartEditor1 = new ChartEditor(); + XCreator xCreator1 = new XChartEditor(chartEditor1, dimension); + + + AddingModel chartModel = new AddingModel(mock, xCreator1); + Assert.assertEquals("chart", xCreator1.toData().getWidgetName()); + } + private static class DemoCreator extends XCreator { private String widgetName;