blob: f55b02ec8da2ca06f1f60ecf2a7b763de8ae772a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.rt.client.extension.ui.form;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import java.util.List;
import org.eclipse.scout.commons.ClassIdentifier;
import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.extension.AbstractLocalExtensionTestCase;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateFieldsBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateFieldsBox.BottomStringField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateFieldsBox.TopStringField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateGroupsBox.BottomFieldsBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateGroupsBox.TopFieldsBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.ContributedTestField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.ExtendedForm;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.ExtendedFormExtension;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.FirstTemplateBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.FirstTemplateBox.MiddleStringField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.MainBoxStringField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.SecondTemplateBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.OrigForm;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.TemplateStringFieldExtension;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.eclipse.scout.rt.shared.extension.IExtensionRegistry;
import org.eclipse.scout.service.SERVICES;
import org.junit.Test;
public class ExtendFormWithDeepLinkingTest extends AbstractLocalExtensionTestCase {
@Test
public void testSetup() throws Exception {
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
}
@Test
public void testContributeToAllTemplateUsages() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(ContributedTestField.class, AbstractTemplateFieldsBox.class);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
}
@Test
public void testContributeOnlyToOneTemplateUsage() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(ContributedTestField.class, new ClassIdentifier(TopFieldsBox.class, AbstractTemplateFieldsBox.class), null);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
}
@Test
public void testContributeOnlyToOneNestedTemplateUsage() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(ContributedTestField.class, new ClassIdentifier(FirstTemplateBox.class, TopFieldsBox.class, AbstractTemplateFieldsBox.class), null);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
}
@Test
public void testContributeOnlyToOneNestedTemplateUsageOverSpecified() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(ContributedTestField.class, new ClassIdentifier(MultiTemplateUsageForm.class, MultiTemplateUsageForm.MainBox.class, FirstTemplateBox.class, TopFieldsBox.class, AbstractTemplateFieldsBox.class), null);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class, ContributedTestField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
}
@Test
public void testExtendAllStringFields() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(TemplateStringFieldExtension.class, AbstractStringField.class);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
form.initForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// behavior checks
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getMiddleStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
}
@Test
public void testExtendOnlyToOneTemplateUses() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(TemplateStringFieldExtension.class, new ClassIdentifier(TopFieldsBox.class, AbstractStringField.class), null);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
form.initForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// behavior checks
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertNull(form.getMiddleStringField().getValue());
assertNull(form.getFirstTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertNull(form.getFirstTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertNull(form.getSecondTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertNull(form.getSecondTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
}
@Test
public void testExtendOnlyToOneTemplateUsesOverSpecified() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(TemplateStringFieldExtension.class, new ClassIdentifier(MultiTemplateUsageForm.class, TopFieldsBox.class, AbstractStringField.class), null);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
form.initForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// behavior checks
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertNull(form.getMiddleStringField().getValue());
assertNull(form.getFirstTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertNull(form.getFirstTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertNull(form.getSecondTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertNull(form.getSecondTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
}
@Test
public void testExtendTemplate() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(TemplateStringFieldExtension.class, new ClassIdentifier(AbstractTemplateFieldsBox.class, AbstractStringField.class), null);
MultiTemplateUsageForm form = new MultiTemplateUsageForm();
form.initForm();
assertTypes(form.getMainBox().getFields(), FirstTemplateBox.class, SecondTemplateBox.class, MainBoxStringField.class);
// first template box
FirstTemplateBox firstTemplateBox = form.getFirstTemplateBox();
assertTypes(firstTemplateBox.getFields(), TopFieldsBox.class, MiddleStringField.class, BottomFieldsBox.class);
assertTypes(firstTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(firstTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// second template box
SecondTemplateBox secondTemplateBox = form.getSecondTemplateBox();
assertTypes(secondTemplateBox.getFields(), TopFieldsBox.class, BottomFieldsBox.class);
assertTypes(secondTemplateBox.getTopFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
assertTypes(secondTemplateBox.getBottomFieldsBox().getFields(), TopStringField.class, BottomStringField.class);
// behavior checks
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertNull(form.getMiddleStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getFirstTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getTopFieldsBox().getBottomStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getBottomFieldsBox().getTopStringField().getValue());
assertEquals("A", form.getSecondTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
}
@Test
public void testDeepLinkingWithExtendsAnnotationOrigForm() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(ExtendedFormExtension.class);
OrigForm form = new OrigForm();
form.initForm();
assertTypes(form.getMainBox().getFields(), OrigForm.MainBox.TopBox.class, OrigForm.MainBox.BottomBox.class);
}
@Test
public void testDeepLinkingWithExtendsAnnotationExtendedForm() throws Exception {
SERVICES.getService(IExtensionRegistry.class).register(ExtendedFormExtension.class);
ExtendedForm form = new ExtendedForm();
form.initForm();
assertTypes(form.getMainBox().getFields(), ExtendedFormExtension.DetailBox.class, OrigForm.MainBox.TopBox.class, OrigForm.MainBox.BottomBox.class);
}
protected static void assertTypes(List<?> objects, Class<?>... expectedTypes) {
assertEquals(expectedTypes.length, CollectionUtility.size(objects));
for (int i = 0; i < expectedTypes.length; i++) {
assertSame(expectedTypes[i], objects.get(i).getClass());
}
}
}