diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/naming/DeclarativeQualifiedNameConverterTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/naming/DeclarativeQualifiedNameConverterTest.java index 3a3014a17..c67c3e764 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/naming/DeclarativeQualifiedNameConverterTest.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/naming/DeclarativeQualifiedNameConverterTest.java @@ -8,12 +8,16 @@ package org.eclipse.xtext.naming; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; /** * @author Jan Koehnlein - Initial contribution and API */ public class DeclarativeQualifiedNameConverterTest extends Assert { + @Rule + public ExpectedException thrown = ExpectedException.none(); @Test public void testQualifiedNameConverter() throws Exception { IQualifiedNameConverter qualifiedNameConverter = new IQualifiedNameConverter.DefaultImpl() { @@ -25,13 +29,50 @@ public class DeclarativeQualifiedNameConverterTest extends Assert { QualifiedName qn = QualifiedName.create("foo", "bar", "baz"); assertEquals("foo!bar!baz", qualifiedNameConverter.toString(qn)); assertEquals(qn, qualifiedNameConverter.toQualifiedName("foo!bar!baz")); - try { - qualifiedNameConverter.toQualifiedName(null); - fail("Exception expected"); - } catch(IllegalArgumentException e) {} - try { - qualifiedNameConverter.toQualifiedName(""); - fail("Exception expected"); - } catch(IllegalArgumentException e) {} + + + qualifiedNameConverter = new IQualifiedNameConverter.DefaultImpl() { + @Override + public String getDelimiter() { + return " "; + } + }; + assertEquals("foo bar baz", qualifiedNameConverter.toString(qn)); + assertEquals(qn, qualifiedNameConverter.toQualifiedName("foo bar baz")); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage("Qualified name cannot be null"); + qualifiedNameConverter.toQualifiedName(null); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage("Qualified name cannot be empty"); + qualifiedNameConverter.toQualifiedName(""); } + + @Test public void testQualifiedNameConverter_emptyDelimiter() throws Exception { + IQualifiedNameConverter qualifiedNameConverter = new IQualifiedNameConverter.DefaultImpl() { + @Override + public String getDelimiter() { + return ""; + } + }; + + QualifiedName qn = QualifiedName.create("foo", "bar", "baz"); + assertEquals("foobarbaz", qualifiedNameConverter.toString(qn)); + assertEquals(QualifiedName.create("foobarbaz"), qualifiedNameConverter.toQualifiedName("foobarbaz")); + } + + @Test public void testQualifiedNameConverter_nullDelimiter() throws Exception { + IQualifiedNameConverter qualifiedNameConverter = new IQualifiedNameConverter.DefaultImpl() { + @Override + public String getDelimiter() { + return null; + } + }; + QualifiedName qn = QualifiedName.create("foo", "bar", "baz"); + assertEquals("foonullbarnullbaz", qualifiedNameConverter.toString(qn)); + assertEquals(QualifiedName.create("foobarbaz"), qualifiedNameConverter.toQualifiedName("foobarbaz")); + + } + } diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/naming/IQualifiedNameConverter.java b/org.eclipse.xtext/src/org/eclipse/xtext/naming/IQualifiedNameConverter.java index 0d8070c81..c6dac7220 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/naming/IQualifiedNameConverter.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/naming/IQualifiedNameConverter.java @@ -11,6 +11,7 @@ import java.util.List; import org.eclipse.xtext.util.Strings; +import com.google.common.base.Preconditions; import com.google.inject.ImplementedBy; import com.google.inject.Singleton; @@ -53,15 +54,14 @@ public interface IQualifiedNameConverter { */ @Override public QualifiedName toQualifiedName(String qualifiedNameAsString) { - if (qualifiedNameAsString == null) - throw new IllegalArgumentException("Qualified name cannot be null"); - if (qualifiedNameAsString.equals("")) - throw new IllegalArgumentException("Qualified name cannot be empty"); - if (Strings.isEmpty(getDelimiter())) + Preconditions.checkArgument(qualifiedNameAsString != null, "Qualified name cannot be null"); + Preconditions.checkArgument(!qualifiedNameAsString.isEmpty(), "Qualified name cannot be empty"); + String delimiter = getDelimiter(); + if (Strings.isEmpty(delimiter)) return QualifiedName.create(qualifiedNameAsString); - List segs = getDelimiter().length() == 1 - ? Strings.split(qualifiedNameAsString, getDelimiter().charAt(0)) - : Strings.split(qualifiedNameAsString, getDelimiter()); + List segs = delimiter.length() == 1 + ? Strings.split(qualifiedNameAsString, delimiter.charAt(0)) + : Strings.split(qualifiedNameAsString, delimiter); return QualifiedName.create(segs); }