/*
* 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.forms.adf.engine.shared.formGeneration.layout;
import java.util.LinkedHashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.forms.adf.service.definitions.layout.LayoutColumnDefinition;
import org.kie.workbench.common.forms.adf.service.definitions.layout.LayoutSettings;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.ext.layout.editor.api.editor.LayoutColumn;
import org.uberfire.ext.layout.editor.api.editor.LayoutComponent;
import org.uberfire.ext.layout.editor.api.editor.LayoutRow;
import org.uberfire.ext.layout.editor.api.editor.LayoutTemplate;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class LayoutGeneratorTest {
private LayoutGenerator generator = new LayoutGenerator();
private Map<LayoutComponent, LayoutSettings> settingsMap = new LinkedHashMap<>();
@Before
public void initTest() {
settingsMap.put(mock(LayoutComponent.class),
new LayoutSettings());
settingsMap.put(mock(LayoutComponent.class),
new LayoutSettings());
settingsMap.put(mock(LayoutComponent.class),
new LayoutSettings());
settingsMap.put(mock(LayoutComponent.class),
new LayoutSettings());
settingsMap.put(mock(LayoutComponent.class),
new LayoutSettings());
settingsMap.put(mock(LayoutComponent.class),
new LayoutSettings());
}
@Test
public void testSimpleVerticalLayout() {
LayoutColumnDefinition[] structure = new LayoutColumnDefinition[]{
new LayoutColumnDefinition()
};
generator.init(structure);
settingsMap.entrySet().forEach(entry -> generator.addComponent(entry.getKey(),
entry.getValue()));
LayoutTemplate result = generator.build();
assertNotNull(result);
assertNotNull(result.getRows());
assertEquals(settingsMap.size(),
result.getRows().size());
result.getRows().forEach(row -> {
checkSingleColumnRow(row);
});
}
@Test
public void testTwoColumnsLayout() {
LayoutColumnDefinition[] structure = new LayoutColumnDefinition[]{
new LayoutColumnDefinition(),
new LayoutColumnDefinition()
};
generator.init(structure);
settingsMap.entrySet().forEach(entry -> generator.addComponent(entry.getKey(),
entry.getValue()));
LayoutTemplate result = generator.build();
assertNotNull(result);
assertNotNull(result.getRows());
assertEquals(settingsMap.size() / 2,
result.getRows().size());
result.getRows().forEach(row -> {
checkTwoColumnsRow(row);
});
}
@Test
public void testTwoColumnsLayoutWithSpans() {
LayoutComponent component = mock(LayoutComponent.class);
when(component.getDragTypeName()).thenReturn("span");
LayoutSettings settings = new LayoutSettings();
settings.setHorizontalSpan(2);
settingsMap.put(component,
settings);
component = mock(LayoutComponent.class);
when(component.getDragTypeName()).thenReturn("span");
settingsMap.put(component,
settings);
LayoutColumnDefinition[] structure = new LayoutColumnDefinition[]{
new LayoutColumnDefinition(),
new LayoutColumnDefinition()
};
generator.init(structure);
settingsMap.entrySet().forEach(entry -> generator.addComponent(entry.getKey(),
entry.getValue()));
LayoutTemplate result = generator.build();
assertNotNull(result);
assertNotNull(result.getRows());
assertEquals(settingsMap.size() / 2 + 1,
result.getRows().size());
result.getRows().forEach(row -> {
assertNotNull(row);
assertNotNull(row.getLayoutColumns());
LayoutComponent layoutComponent = row.getLayoutColumns().get(0).getLayoutComponents().get(0);
if ("span".equals(layoutComponent.getDragTypeName())) {
checkSingleColumnRow(row);
} else {
checkTwoColumnsRow(row);
}
});
}
@Test
public void testTwoColumnsWithWraps() {
LayoutComponent component = mock(LayoutComponent.class);
when(component.getDragTypeName()).thenReturn("wrap");
LayoutSettings settings = new LayoutSettings();
settings.setWrap(true);
settingsMap.put(component,
settings);
component = mock(LayoutComponent.class);
when(component.getDragTypeName()).thenReturn("wrap");
settingsMap.put(component,
settings);
LayoutColumnDefinition[] structure = new LayoutColumnDefinition[]{
new LayoutColumnDefinition(),
new LayoutColumnDefinition()
};
generator.init(structure);
settingsMap.entrySet().forEach(entry -> generator.addComponent(entry.getKey(),
entry.getValue()));
LayoutTemplate result = generator.build();
assertNotNull(result);
assertNotNull(result.getRows());
assertEquals(settingsMap.size() / 2 + 1,
result.getRows().size());
result.getRows().forEach(row -> {
assertNotNull(row);
assertNotNull(row.getLayoutColumns());
LayoutComponent layoutComponent = row.getLayoutColumns().get(0).getLayoutComponents().get(0);
if ("wrap".equals(layoutComponent.getDragTypeName())) {
checkTwoColumnsRowWraps(row);
} else {
checkTwoColumnsRow(row);
}
});
}
protected void checkSingleColumnRow(LayoutRow row) {
assertNotNull(row);
assertNotNull(row.getLayoutColumns());
assertEquals(1,
row.getLayoutColumns().size());
LayoutColumn column = row.getLayoutColumns().get(0);
assertNotNull(column);
assertEquals("12",
column.getSpan());
assertNotNull(column.getLayoutComponents());
assertEquals(1,
column.getLayoutComponents().size());
assertTrue(settingsMap.containsKey(column.getLayoutComponents().get(0)));
}
protected void checkTwoColumnsRow(LayoutRow row) {
assertNotNull(row);
assertNotNull(row.getLayoutColumns());
assertEquals(2,
row.getLayoutColumns().size());
row.getLayoutColumns().forEach(column -> {
assertNotNull(column);
assertEquals("6",
column.getSpan());
assertNotNull(column.getLayoutComponents());
assertEquals(1,
column.getLayoutComponents().size());
assertTrue(settingsMap.containsKey(column.getLayoutComponents().get(0)));
});
}
protected void checkTwoColumnsRowWraps(LayoutRow row) {
assertNotNull(row);
assertNotNull(row.getLayoutColumns());
assertEquals(2,
row.getLayoutColumns().size());
LayoutColumn column = row.getLayoutColumns().get(0);
assertNotNull(column);
assertEquals("6",
column.getSpan());
assertNotNull(column.getLayoutComponents());
assertEquals(1,
column.getLayoutComponents().size());
assertTrue(settingsMap.containsKey(column.getLayoutComponents().get(0)));
// the first element is wrapped so check if the next column is empty
column = row.getLayoutColumns().get(1);
assertNotNull(column);
assertEquals("6",
column.getSpan());
assertNotNull(column.getLayoutComponents());
assertNotNull(column.getLayoutComponents());
assertEquals(0,
column.getLayoutComponents().size());
}
}