/* * Copyright 2017 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.stunner.cm.client.canvas; import java.util.function.Consumer; import com.ait.lienzo.client.core.shape.Layer; import com.ait.lienzo.client.core.shape.wires.WiresManager; import com.ait.lienzo.client.core.shape.wires.handlers.WiresControlFactory; import com.ait.lienzo.test.LienzoMockitoTestRunner; import org.jboss.errai.ioc.client.api.ManagedInstance; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.stunner.client.lienzo.canvas.controls.connection.ConnectionAcceptorControlImpl; import org.kie.workbench.common.stunner.client.lienzo.canvas.controls.docking.DockingAcceptorControlImpl; import org.kie.workbench.common.stunner.client.lienzo.canvas.controls.pan.PanControlImpl; import org.kie.workbench.common.stunner.client.lienzo.canvas.controls.zoom.ZoomWheelControlImpl; import org.kie.workbench.common.stunner.cm.client.canvas.controls.builder.CaseManagementElementBuilderControl; import org.kie.workbench.common.stunner.cm.client.canvas.controls.builder.CaseManagementNodeBuilderControl; import org.kie.workbench.common.stunner.cm.client.canvas.controls.containment.CaseManagementContainmentAcceptorControlImpl; import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvas; import org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler; import org.kie.workbench.common.stunner.core.client.canvas.controls.actions.CanvasNameEditionControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.actions.CanvasNameEditionControlImpl; import org.kie.workbench.common.stunner.core.client.canvas.controls.builder.EdgeBuilderControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.builder.ElementBuilderControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.builder.NodeBuilderControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.builder.impl.EdgeBuilderControlImpl; import org.kie.workbench.common.stunner.core.client.canvas.controls.connection.ConnectionAcceptorControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.containment.ContainmentAcceptorControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.docking.DockingAcceptorControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.pan.PanControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.select.SelectionControl; import org.kie.workbench.common.stunner.core.client.canvas.controls.zoom.ZoomControl; import org.mockito.Mock; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(LienzoMockitoTestRunner.class) public class CaseManagementCanvasFactoryTest { private ManagedInstance<ConnectionAcceptorControl> connectionAcceptorControls; private ManagedInstance<ContainmentAcceptorControl> containmentAcceptorControls; private ManagedInstance<DockingAcceptorControl> dockingAcceptorControls; private ManagedInstance<CanvasNameEditionControl> nameEditionControls; private ManagedInstance<SelectionControl> selectionControls; private ManagedInstance<ElementBuilderControl> elementBuilderControls; private ManagedInstance<NodeBuilderControl> nodeBuilderControls; private ManagedInstance<EdgeBuilderControl> edgeBuilderControls; private ManagedInstance<ZoomControl> zoomControls; private ManagedInstance<PanControl> panControls; private ManagedInstance<AbstractCanvas> canvasInstances; private ManagedInstance<AbstractCanvasHandler> canvasHandlerInstances; @Mock private WiresControlFactory caseManagementControlFactory; @Mock private Layer layer; private WiresManager wiresManager; private CaseManagementCanvasFactory factory; @Before public void setup() { when(layer.uuid()).thenReturn("uuid"); this.wiresManager = WiresManager.get(layer); this.connectionAcceptorControls = mockManagedInstance(ConnectionAcceptorControlImpl.class); this.containmentAcceptorControls = mockManagedInstance(CaseManagementContainmentAcceptorControlImpl.class); this.dockingAcceptorControls = mockManagedInstance(DockingAcceptorControlImpl.class); this.nameEditionControls = mockManagedInstance(CanvasNameEditionControlImpl.class); this.selectionControls = mockManagedInstance(SelectionControl.class); this.elementBuilderControls = mockManagedInstance(CaseManagementElementBuilderControl.class); this.nodeBuilderControls = mockManagedInstance(CaseManagementNodeBuilderControl.class); this.edgeBuilderControls = mockManagedInstance(EdgeBuilderControlImpl.class); this.zoomControls = mockManagedInstance(ZoomWheelControlImpl.class); this.panControls = mockManagedInstance(PanControlImpl.class); this.canvasInstances = mockManagedInstance(CaseManagementCanvasPresenter.class, (c) -> when(c.getWiresManager()).thenReturn(wiresManager)); this.canvasHandlerInstances = mockManagedInstance(CaseManagementCanvasHandler.class); this.factory = new CaseManagementCanvasFactory(connectionAcceptorControls, containmentAcceptorControls, dockingAcceptorControls, nameEditionControls, selectionControls, elementBuilderControls, nodeBuilderControls, edgeBuilderControls, zoomControls, panControls, canvasInstances, canvasHandlerInstances, caseManagementControlFactory); factory.init(); } @SuppressWarnings("unchecked, unused") private <T, C extends T> ManagedInstance<T> mockManagedInstance(final Class<C> concrete) { return mockManagedInstance(concrete, (c) -> {/*Do nothing*/}); } @SuppressWarnings("unchecked, unused") private <T, C extends T> ManagedInstance<T> mockManagedInstance(final Class<C> concrete, final Consumer<C> setup) { final C mock = mock(concrete); final ManagedInstance<T> managedInstance = mock(ManagedInstance.class); when(managedInstance.get()).thenReturn(mock); setup.accept(mock); return managedInstance; } @Test public void checkCanvasHasWiresControlFactorySet() { factory.newCanvas(); assertEquals(wiresManager.getControlFactory(), caseManagementControlFactory); } }