/*
* Copyright 2015 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.
*
* 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.dashbuilder.displayer.client.widgets;
import java.util.Arrays;
import java.util.List;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.DisplayerSettingsFactory;
import org.dashbuilder.displayer.DisplayerSubType;
import org.dashbuilder.displayer.DisplayerType;
import org.dashbuilder.displayer.client.AbstractRendererLibrary;
import org.dashbuilder.displayer.client.Displayer;
import org.dashbuilder.displayer.client.RendererLibrary;
import org.dashbuilder.displayer.client.RendererManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.mvp.Command;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
@RunWith(MockitoJUnitRunner.class)
public class RendererSelectorTest {
@Mock
RendererSelector.RadioListView radioListView;
@Mock
RendererSelector.TabListView tabListView;
@Mock
RendererSelector.ListBoxView listBoxView;
@Mock
RendererManager rendererManager;
@Mock
Command selectCommand;
RendererLibMock gwtLib = new RendererLibMock("gwt");
RendererLibMock d3Lib = new RendererLibMock("d3");
RendererLibMock lienzoLib = new RendererLibMock("lienzo");
DisplayerSettings settings = DisplayerSettingsFactory
.newPieChartSettings()
.renderer("d3")
.buildSettings();
RendererSelector presenter;
class RendererLibMock extends AbstractRendererLibrary {
String name;
public RendererLibMock(String name) {
this.name = name;
}
@Override
public String getUUID() {
return null;
}
@Override
public String getName() {
return name;
}
@Override
public List<DisplayerType> getSupportedTypes() {
return null;
}
@Override
public List<DisplayerSubType> getSupportedSubtypes(DisplayerType displayerType) {
return null;
}
@Override
public Displayer lookupDisplayer(DisplayerSettings displayer) {
return null;
}
}
@Before
public void init() {
presenter = new RendererSelector(tabListView, listBoxView, radioListView, rendererManager);
}
@Test
public void testSingleRenderer() {
List<RendererLibrary> rendererLibs = Arrays.asList((RendererLibrary) d3Lib);
when(rendererManager.getRenderersForType(any(DisplayerType.class), any(DisplayerSubType.class))).thenReturn(rendererLibs);
when(rendererManager.getRendererForDisplayer(settings)).thenReturn(d3Lib);
presenter.init(settings, RendererSelector.SelectorType.TAB, 300, selectCommand);
verify(tabListView).setVisible(false);
verify(tabListView, never()).setWidth(anyInt());
verify(tabListView, never()).clearRendererSelector();
verify(tabListView, never()).addRendererItem(anyString());
verify(tabListView, never()).setSelectedRendererIndex(anyInt());
verifyZeroInteractions(listBoxView, radioListView);
}
@Test
public void testMultipleRenderers() {
List<RendererLibrary> rendererLibs = Arrays.asList((RendererLibrary) gwtLib, d3Lib, lienzoLib);
when(rendererManager.getRenderersForType(any(DisplayerType.class), any(DisplayerSubType.class))).thenReturn(rendererLibs);
when(rendererManager.getRendererForDisplayer(settings)).thenReturn(d3Lib);
presenter.init(settings, RendererSelector.SelectorType.LIST, 300, selectCommand);
verify(listBoxView).setVisible(true);
verify(listBoxView).setWidth(300);
verify(listBoxView).clearRendererSelector();
verify(listBoxView).addRendererItem("gwt");
verify(listBoxView).addRendererItem("d3");
verify(listBoxView).addRendererItem("lienzo");
verify(listBoxView).setSelectedRendererIndex(1);
verifyZeroInteractions(tabListView, radioListView);
}
@Test
public void testOnSelect() {
List<RendererLibrary> rendererLibs = Arrays.asList((RendererLibrary) gwtLib, d3Lib);
when(rendererManager.getRenderersForType(any(DisplayerType.class), any(DisplayerSubType.class))).thenReturn(rendererLibs);
when(rendererManager.getRendererForDisplayer(settings)).thenReturn(d3Lib);
when(rendererManager.getRendererByName(gwtLib.getName())).thenReturn(gwtLib);
when(tabListView.getRendererSelected()).thenReturn(gwtLib.getName());
presenter.init(settings, RendererSelector.SelectorType.TAB, 300, selectCommand);
presenter.onRendererSelected();
verify(selectCommand).execute();
assertEquals(presenter.getRendererLibrary(), gwtLib);
}
}