blob: ecdf7c497a237a8e69ef44ff3d1de64ef1b67361 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 RCP Vision (http://www.rcp-vision.com) and others.
* 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:
* Lorenzo Bettini - Initial contribution and API
*******************************************************************************/
package org.eclipse.emf.parsley.tests
import com.google.inject.AbstractModule
import com.google.inject.Injector
import com.google.inject.Key
import com.google.inject.Module
import com.google.inject.name.Names
import com.google.inject.util.Modules
import org.eclipse.emf.ecore.EcoreFactory
import org.eclipse.emf.ecore.EcorePackage
import org.eclipse.emf.parsley.EmfParsleyConstants
import org.eclipse.emf.parsley.EmfParsleyJavaGuiceModule
import org.eclipse.emf.parsley.composite.CompositeFactory
import org.eclipse.emf.parsley.composite.TableFormComposite
import org.eclipse.emf.parsley.composite.TreeComposite
import org.eclipse.emf.parsley.composite.TreeTableFormComposite
import org.eclipse.emf.parsley.inject.parameters.CompositeParameters
import org.eclipse.emf.parsley.inject.parameters.EClassParameter
import org.eclipse.emf.parsley.junit4.AbstractEmfParsleyShellBasedTest
import org.eclipse.emf.parsley.tests.util.MockCompositeFactory
import org.eclipse.jface.viewers.ISelectionChangedListener
import org.eclipse.jface.viewers.SelectionChangedEvent
import org.eclipse.jface.viewers.StructuredSelection
import org.eclipse.swt.SWT
import org.junit.Test
import org.mockito.ArgumentCaptor
import static org.mockito.Mockito.*
class TreeTableFormCompositeTest extends AbstractEmfParsleyShellBasedTest {
var TreeTableFormComposite treeTableFormComposite
var TreeComposite mockTreeComposite
var TableFormComposite mockTableFormComposite
var ISelectionChangedListener selectionChangedListener
val type = EcorePackage.eINSTANCE.EObject
@Test def void testGetViewerReturnsTreeCompositeViewer() {
val injector = getModuleForTesting.createInjector
createSUT(injector)
treeTableFormComposite.getViewer
verify(mockTreeComposite).getViewer()
}
@Test def void testNestedMasterDetail() {
val injector = getModuleForTesting.createInjector
createSUT(injector)
val selected = triggerSelectionChanged()
verify(mockTableFormComposite).update(selected)
}
@Test def void testSashFormOrientationFlip() {
val injector = getModuleForTesting(new EmfParsleyJavaGuiceModule {
override valueTreeFormSashStyle() {
return SWT.HORIZONTAL;
}
}).createInjector
createSUT(injector)
triggerSelectionChanged()
verify(mockTableFormComposite).setSashFormOrientation(SWT.VERTICAL)
}
protected def void createSUT(Injector injector) {
// our MockCompositeFactory returns singleton mocks
val compositeFactory = injector.getInstance(CompositeFactory)
mockTreeComposite = compositeFactory.createTreeComposite(null, 0)
mockTableFormComposite = compositeFactory.createTableFormComposite(null, 0, type)
val valueCapture = ArgumentCaptor.forClass(ISelectionChangedListener);
doNothing().when(mockTreeComposite).addSelectionChangedListener(valueCapture.capture)
val sashStyle = injector.getInstance(Key.get(Integer, Names.named(EmfParsleyConstants.TREE_FORM_SASH_STYLE)))
treeTableFormComposite = new TreeTableFormComposite(new CompositeParameters(shell, SWT.NONE),
new EClassParameter(type), sashStyle, #[])
injector.injectMembers(treeTableFormComposite)
selectionChangedListener = valueCapture.value
}
def private getModuleForTesting(Module... overrides) {
val modules = newArrayList(overrides) + newArrayList(new AbstractModule() {
override protected configure() {
bind(CompositeFactory).to(MockCompositeFactory)
}
})
Modules.override(new EmfParsleyJavaGuiceModule).with(modules)
}
private def Object triggerSelectionChanged() {
val selected = EcoreFactory.eINSTANCE.createEClass
val selectionEvent = mock(SelectionChangedEvent)
when(selectionEvent.getSelection()).thenReturn(new StructuredSelection(selected))
selectionChangedListener.selectionChanged(selectionEvent)
return selected
}
}