| /******************************************************************************* |
| * Copyright (c) 2013 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 API and implementation |
| *******************************************************************************/ |
| package org.eclipse.emf.parsley.dsl.tests |
| |
| import com.google.inject.Inject |
| import org.eclipse.emf.parsley.dsl.model.Model |
| import org.eclipse.xtext.resource.XtextResource |
| import org.eclipse.xtext.testing.InjectWith |
| import org.eclipse.xtext.testing.XtextRunner |
| import org.eclipse.xtext.testing.util.ParseHelper |
| import org.eclipse.xtext.util.ReplaceRegion |
| import org.eclipse.xtext.xbase.imports.ImportOrganizer |
| import org.junit.Test |
| import org.junit.runner.RunWith |
| |
| import static org.junit.Assert.* |
| |
| /** |
| * @author Lorenzo Bettini - inspired by the Xtext Domainmodel example |
| */ |
| @RunWith(XtextRunner) |
| @InjectWith(EmfParsleyDslInjectorProvider) |
| class EmfParsleyDslOrganizeImportsTest { |
| |
| @Inject extension ParseHelper<Model> |
| @Inject ImportOrganizer importOrganizer |
| |
| def protected assertIsOrganizedTo(CharSequence input, CharSequence expected) { |
| val model = parse(input.toString) |
| val changes = importOrganizer.getOrganizedImportChanges(model.eResource as XtextResource) |
| val builder = new StringBuilder(input) |
| val sortedChanges= changes.sortBy[offset] |
| var ReplaceRegion lastChange = null |
| for(it: sortedChanges) { |
| if(lastChange !== null && lastChange.endOffset > offset) |
| fail("Overlapping text edits: " + lastChange + ' and ' +it) |
| lastChange = it |
| } |
| for(it: sortedChanges.reverse) |
| builder.replace(offset, offset + length, text) |
| assertEquals(expected.toString, builder.toString) |
| } |
| |
| @Test def testTypeInLabelProvider() { |
| ''' |
| module my.test.proj { |
| labelProvider { |
| text { |
| org.eclipse.emf.ecore.EClass -> "" |
| } |
| } |
| } |
| '''.assertIsOrganizedTo(''' |
| import org.eclipse.emf.ecore.EClass |
| |
| module my.test.proj { |
| labelProvider { |
| text { |
| EClass -> "" |
| } |
| } |
| } |
| ''') |
| } |
| |
| @Test def testWithWildCard() { |
| ''' |
| import org.eclipse.emf.ecore.* |
| |
| module my.test.proj { |
| labelProvider { |
| text { |
| EClass -> "" |
| } |
| } |
| } |
| '''.assertIsOrganizedTo(''' |
| import org.eclipse.emf.ecore.EClass |
| |
| module my.test.proj { |
| labelProvider { |
| text { |
| EClass -> "" |
| } |
| } |
| } |
| ''') |
| } |
| |
| @Test def testForViewSpecification() { |
| ''' |
| import org.eclipse.ui.views.contentoutline.ContentOutline |
| |
| module my.test.proj { |
| |
| parts { |
| viewpart id { |
| viewname "View Name" |
| viewclass ContentOutline |
| } |
| } |
| } |
| '''.assertIsOrganizedTo(''' |
| import org.eclipse.ui.views.contentoutline.ContentOutline |
| |
| module my.test.proj { |
| |
| parts { |
| viewpart id { |
| viewname "View Name" |
| viewclass ContentOutline |
| } |
| } |
| } |
| ''') |
| } |
| |
| @Test def testForManyTypes() { |
| ''' |
| module my.test.proj { |
| |
| parts { |
| viewpart id { |
| viewname "View Name" |
| viewclass org.eclipse.ui.views.contentoutline.ContentOutline |
| } |
| } |
| |
| labelProvider { |
| text { |
| org.eclipse.emf.ecore.EClass -> "" |
| } |
| } |
| } |
| '''.assertIsOrganizedTo(''' |
| import org.eclipse.emf.ecore.EClass |
| import org.eclipse.ui.views.contentoutline.ContentOutline |
| |
| module my.test.proj { |
| |
| parts { |
| viewpart id { |
| viewname "View Name" |
| viewclass ContentOutline |
| } |
| } |
| |
| labelProvider { |
| text { |
| EClass -> "" |
| } |
| } |
| } |
| ''') |
| } |
| |
| } |