1 /*******************************************************************************
2 * Copyright (c) 2014 Obeo.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * Obeo - initial API and implementation
10 *******************************************************************************/
11 package org
.eclipse
.emf
.compare
.uml2
.rcp
.ui
.tests
.groups
;
13 import static com
.google
.common
.base
.Predicates
.alwaysTrue
;
15 import com
.google
.common
.collect
.Lists
;
17 import java
.io
.IOException
;
18 import java
.util
.List
;
19 import java
.util
.regex
.Pattern
;
21 import org
.eclipse
.emf
.common
.notify
.AdapterFactory
;
22 import org
.eclipse
.emf
.compare
.postprocessor
.BasicPostProcessorDescriptorImpl
;
23 import org
.eclipse
.emf
.compare
.postprocessor
.IPostProcessor
.Descriptor
.Registry
;
24 import org
.eclipse
.emf
.compare
.postprocessor
.PostProcessorDescriptorRegistryImpl
;
25 import org
.eclipse
.emf
.compare
.provider
.spec
.CompareItemProviderAdapterFactorySpec
;
26 import org
.eclipse
.emf
.compare
.rcp
.ui
.internal
.structuremergeviewer
.filters
.impl
.CascadingDifferencesFilter
;
27 import org
.eclipse
.emf
.compare
.rcp
.ui
.internal
.structuremergeviewer
.filters
.impl
.EmptyMatchedResourcesFilter
;
28 import org
.eclipse
.emf
.compare
.rcp
.ui
.internal
.structuremergeviewer
.filters
.impl
.IdenticalElementsFilter
;
29 import org
.eclipse
.emf
.compare
.rcp
.ui
.internal
.structuremergeviewer
.filters
.impl
.PseudoConflictsFilter
;
30 import org
.eclipse
.emf
.compare
.rcp
.ui
.internal
.structuremergeviewer
.groups
.impl
.BasicDifferenceGroupImpl
;
31 import org
.eclipse
.emf
.compare
.rcp
.ui
.internal
.structuremergeviewer
.groups
.provider
.TreeItemProviderAdapterFactorySpec
;
32 import org
.eclipse
.emf
.compare
.rcp
.ui
.structuremergeviewer
.groups
.IDifferenceGroup
;
33 import org
.eclipse
.emf
.compare
.tests
.framework
.AbstractInputData
;
34 import org
.eclipse
.emf
.compare
.uml2
.internal
.postprocessor
.UMLPostProcessor
;
35 import org
.eclipse
.emf
.compare
.uml2
.internal
.provider
.custom
.UMLCompareCustomItemProviderAdapterFactory
;
36 import org
.eclipse
.emf
.compare
.uml2
.internal
.provider
.decorator
.UMLCompareItemProviderDecoratorAdapterFactory
;
37 import org
.eclipse
.emf
.compare
.uml2
.rcp
.ui
.internal
.structuremergeviewer
.filters
.UMLRefinedElementsFilter
;
38 import org
.eclipse
.emf
.ecore
.resource
.Resource
;
39 import org
.eclipse
.emf
.edit
.provider
.ReflectiveItemProviderAdapterFactory
;
40 import org
.eclipse
.emf
.edit
.tree
.TreeNode
;
41 import org
.eclipse
.uml2
.uml
.edit
.providers
.UMLItemProviderAdapterFactory
;
42 import org
.junit
.Before
;
43 import org
.junit
.Test
;
46 * Tests the order of the differences the way they would be displayed in the structure merge viewer for UML
49 * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
51 public class UMLDifferencesOrderTest
extends AbstractDifferenceOrderTest
{
53 private ExpectedResultData expectedResult
;
57 public void before() throws IOException
{
59 getFilter().removeFilter(new CascadingDifferencesFilter());
60 getFilter().removeFilter(new PseudoConflictsFilter());
61 getFilter().removeFilter(new EmptyMatchedResourcesFilter());
62 getFilter().removeFilter(new IdenticalElementsFilter());
63 expectedResult
= new ExpectedResultData();
67 protected NotifierScopeProvider
getInput() {
68 return new DataInput();
72 protected List
<AdapterFactory
> getAdaptersFactory() {
73 return Lists
.<AdapterFactory
> newArrayList(new CompareItemProviderAdapterFactorySpec(),
74 new TreeItemProviderAdapterFactorySpec(), new UMLCompareCustomItemProviderAdapterFactory(),
75 new UMLItemProviderAdapterFactory(), new UMLCompareItemProviderDecoratorAdapterFactory(),
76 new ReflectiveItemProviderAdapterFactory());
80 protected Registry
<?
> getPostProcessorRegistry() {
81 PostProcessorDescriptorRegistryImpl
<Object
> postProcessorRegistry
= new PostProcessorDescriptorRegistryImpl
<Object
>();
82 BasicPostProcessorDescriptorImpl descriptor
= new BasicPostProcessorDescriptorImpl(
83 new UMLPostProcessor(), Pattern
.compile("http://www.eclipse.org/uml2/\\d.0.0/UML"), null); //$NON-NLS-1$
84 postProcessorRegistry
.put(UMLPostProcessor
.class.getName(), descriptor
);
85 return postProcessorRegistry
;
89 * Tests the structured representation of UML differences without the UML refine filter activated.
94 public void testDiffOrder() throws IOException
{
95 UMLRefinedElementsFilter umlRefineFilter
= new UMLRefinedElementsFilter();
96 getFilter().removeFilter(umlRefineFilter
);
98 IDifferenceGroup group
= new BasicDifferenceGroupImpl(getComparison(), alwaysTrue(),
99 getCrossReferenceAdapter());
100 List
<?
extends TreeNode
> roots
= group
.getChildren();
101 // Uncomment the following lines to reserialize the expected model
102 // TestWriterHelper writerHelper = createTestHelper();
103 // writerHelper.createExpectedModel("PATH_TO_MODEL_FILE/expectedResult.nodes", roots,false);
105 compareTree(expectedResult
.getExpectedResultWithoutFilter(), roots
, false);
110 * Tests the structured representation of UML differences with the UML refine filter activated.
112 * @throws IOException
115 public void testDiffOrderWithUMLRefineFilter() throws IOException
{
116 UMLRefinedElementsFilter umlRefineFilter
= new UMLRefinedElementsFilter();
117 getFilter().addFilter(umlRefineFilter
);
119 IDifferenceGroup group
= new BasicDifferenceGroupImpl(getComparison(), alwaysTrue(),
120 getCrossReferenceAdapter());
121 List
<?
extends TreeNode
> roots
= group
.getChildren();
122 // Uncomment the following lines to reserialize the expected model
123 // TestWriterHelper writerHelper = createTestHelper();
124 // writerHelper.createExpectedModel("PATH_TO_MODEL_FILE/expectedResultWithUMLRefineElement.nodes",
127 compareTree(expectedResult
.getExpectedResultWithFilter(), roots
, false);
132 * Input data for this test.
134 * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
136 private static class DataInput
extends AbstractInputData
implements NotifierScopeProvider
{
138 public Resource
getLeft() throws IOException
{
139 return loadFromClassLoader("data/a1/left.uml");//$NON-NLS-1$
142 public Resource
getOrigin() throws IOException
{
143 return loadFromClassLoader("data/a1/origin.uml");//$NON-NLS-1$
146 public Resource
getRight() throws IOException
{
147 return loadFromClassLoader("data/a1/right.uml");//$NON-NLS-1$
152 * Expected result data.
154 * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a>
156 private static class ExpectedResultData
extends AbstractInputData
{
158 public Resource
getExpectedResultWithoutFilter() throws IOException
{
159 return loadFromClassLoader("data/a1/expectedResultWithoutUMLRefineElementFilter.nodes"); //$NON-NLS-1$
162 public Resource
getExpectedResultWithFilter() throws IOException
{
163 return loadFromClassLoader("data/a1/expectedResultWithUMLRefineElementFilter.nodes"); //$NON-NLS-1$