fix TraceFileNameProvider on windows

This commit is contained in:
Stefan Oehme 2015-07-09 15:38:47 +02:00
parent e3bd95a4f6
commit 0b32cc48cb
2 changed files with 67 additions and 3 deletions

View file

@ -9,21 +9,25 @@ package org.eclipse.xtext.generator.trace;
import java.util.regex.Pattern;
import com.google.common.base.CharMatcher;
/**
* @author Moritz Eysholdt - Initial contribution and API
*/
public class TraceFileNameProvider {
private static final CharMatcher SEPARATOR_MATCHER = CharMatcher.anyOf("/\\");
public static final String TRACE_FILE_EXTENSION = "._trace";
private static final Pattern TRACE_FILE_NAME_PATTERN = Pattern.compile(".*/?\\..+\\._trace$");
private static final Pattern TRACE_FILE_NAME_PATTERN = Pattern.compile(".*\\..+\\._trace$");
public boolean isTraceFileName(String traceFileName) {
return TRACE_FILE_NAME_PATTERN.matcher(traceFileName).matches();
}
public String getTraceFromJava(String javaFileName) {
int i = javaFileName.lastIndexOf('/');
int i = SEPARATOR_MATCHER.lastIndexIn(javaFileName);
if (i < 0)
return "." + javaFileName + TRACE_FILE_EXTENSION;
else
@ -31,7 +35,7 @@ public class TraceFileNameProvider {
}
public String getJavaFromTrace(String traceFileName) {
int i = traceFileName.lastIndexOf('/');
int i = SEPARATOR_MATCHER.lastIndexIn(traceFileName);
if (i < 0)
return traceFileName.substring(1, traceFileName.length() - TRACE_FILE_EXTENSION.length());
else

View file

@ -0,0 +1,60 @@
/*******************************************************************************
* Copyright (c) 2015 itemis AG (http://www.itemis.eu) 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
*******************************************************************************/
package org.eclipse.xtext.generator.trace
import org.junit.Test
import static org.junit.Assert.*
class TraceFileNameProviderTest {
val nameProvider = new TraceFileNameProvider
@Test
def testTraceFileNameOnWindows() {
assertTrue(nameProvider.isTraceFileName("C:\\workspace\\.Foo.java._trace"))
}
@Test
def testTraceFileNameOnUnix() {
assertTrue(nameProvider.isTraceFileName("/workspace/.Foo.java._trace"))
}
@Test
def testTraceFromJavaSimple() {
val trace = nameProvider.getTraceFromJava("Foo.java")
assertEquals(".Foo.java._trace", trace)
}
@Test
def testTraceFromJavaOnWindows() {
val trace = nameProvider.getTraceFromJava("C:\\workspace\\Foo.java")
assertEquals("C:\\workspace\\.Foo.java._trace", trace)
}
@Test
def testTraceFromJavaOnUnix() {
val trace = nameProvider.getTraceFromJava("/workspace/Foo.java")
assertEquals("/workspace/.Foo.java._trace", trace)
}
@Test
def testJavaFromTraceSimple() {
val java = nameProvider.getJavaFromTrace(".Foo.java._trace")
assertEquals("Foo.java", java)
}
@Test
def testJavaFromTraceOnWindows() {
val java = nameProvider.getJavaFromTrace("C:\\workspace\\.Foo.java._trace")
assertEquals("C:\\workspace\\Foo.java", java)
}
@Test
def testJavaFromTraceOnUnix() {
val java = nameProvider.getJavaFromTrace("/workspace/.Foo.java._trace")
assertEquals("/workspace/Foo.java", java)
}
}