package com.jetbrains.lang.dart.ide.runner; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.Trinity; import junit.framework.TestCase; import org.jetbrains.annotations.NotNull; import static com.jetbrains.lang.dart.ide.runner.DartPositionInfo.Type; public class DartConsoleFilterTest extends TestCase { private static void doNegativeTest(final String text) { assertNull(DartPositionInfo.parsePositionInfo(text)); } private static void doPositiveTest(final String text, final Type type, final String highlightedText, final String pathOnUnix, final int line, final int column) { final DartPositionInfo info = DartPositionInfo.parsePositionInfo(text); assertNotNull(info); assertEquals(type, info.type); final boolean trimSlash = type == Type.FILE && SystemInfo.isWindows && pathOnUnix.startsWith("/"); assertEquals(trimSlash ? pathOnUnix.substring(1) : pathOnUnix, info.path); assertEquals(highlightedText, text.substring(info.highlightingStartIndex, info.highlightingEndIndex)); assertEquals(line, info.line); assertEquals(column, info.column); } private static void doNegativeRelativePathsFilterTest(@NotNull final String text) { assertNull(DartRelativePathsConsoleFilter.getFileRelPathLineAndColumn(text)); } private static void doPositiveRelativePathsFilterTest(final String text, final String relPath, final int line, final int column) { final Trinity<String, Integer, Integer> relPathLineAndColumn = DartRelativePathsConsoleFilter.getFileRelPathLineAndColumn(text); assertNotNull(relPathLineAndColumn); assertEquals(relPath, relPathLineAndColumn.first); assertEquals(line, relPathLineAndColumn.second.intValue()); assertEquals(column, relPathLineAndColumn.third.intValue()); } public void testPositionInfo() { doNegativeTest(""); doNegativeTest(".dart"); doNegativeTest("(.dart)"); doNegativeTest("adart:foo.dart )"); doNegativeTest("adart:foo:5"); doNegativeTest("dart:5"); doNegativeTest("package:foo/bar.darts"); doNegativeTest("packages:foo/bar.dart"); doNegativeTest("darts:foo.dart"); doNegativeTest("'darts:foo.dart'"); doNegativeTest("dart :foo.dart"); doNegativeTest("abc.dart ef.dart file:foo.dart/bar.dart_baz.dart.more"); doPositiveTest("dart:libName", Type.DART, "dart:libName", "libName", -1, -1); doPositiveTest("library 'dart:html_common' is", Type.DART, "dart:html_common", "html_common", -1, -1); doPositiveTest("packages:file:dart:libName:70: line 5 pos 9", Type.DART, "dart:libName", "libName", 69, -1); doPositiveTest("package:foo/bar.dart", Type.PACKAGE, "package:foo/bar.dart", "foo/bar.dart", -1, -1); doPositiveTest("(dart:.dart)", Type.DART, "dart:.dart", ".dart", -1, -1); doPositiveTest("'dart:a/b/c' pos 6 line 4", Type.DART, "dart:a", "a", 3, -1); doPositiveTest("x.dart (file://///a.dart:) line 05", Type.FILE, "file://///a.dart", "/a.dart", 4, -1); doPositiveTest("x 'package://///a.dart:xx:10'", Type.PACKAGE, "package://///a.dart", "/////a.dart", -1, -1); doPositiveTest("x (file:a.dart:15)", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("x (file:a.dart:15:)", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("xxx:file:a.dart : 15 : 90yyy )", Type.FILE, "file:a.dart", "a.dart", 14, 89); doPositiveTest("x (file:a.dart:15x:yy)", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("file:a.dart:15", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("file:a.dart:15z:", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("file:a.dart:15:", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("file:a.dart:15:z", Type.FILE, "file:a.dart", "a.dart", 14, -1); doPositiveTest("file:a.dart:15:5", Type.FILE, "file:a.dart", "a.dart", 14, 4); doPositiveTest("file:a.dart:15:5x", Type.FILE, "file:a.dart", "a.dart", 14, 4); doPositiveTest("file:a.dart:15:5:", Type.FILE, "file:a.dart", "a.dart", 14, 4); doPositiveTest("x (dart://a.dart:15:20)", Type.DART, "dart://a.dart", "//a.dart", 14, 19); doPositiveTest("x (package://a.dart:15:9999999999)", Type.PACKAGE, "package://a.dart", "//a.dart", 14, -1); doPositiveTest("x (package://a.dart:9999999999:5)", Type.PACKAGE, "package://a.dart", "//a.dart", -1, -1); doPositiveTest("'package:foo//bar.dart': error: line 11 pos 1: x", Type.PACKAGE, "package:foo//bar.dart", "foo//bar.dart", 10, 0); doPositiveTest("'package:foo//bar.dart': error: line 11 pos : x", Type.PACKAGE, "package:foo//bar.dart", "foo//bar.dart", 10, -1); doPositiveTest("abc.dart ef.dart file:foo.dart/bar.dart_baz.dart.more.dart", Type.FILE, "file:foo.dart/bar.dart_baz.dart.more.dart", "foo.dart/bar.dart_baz.dart.more.dart", -1, -1); doPositiveTest("file:foo.dart/bar.dart_baz.dart.more.dart,evenmore.dart", Type.FILE, "file:foo.dart/bar.dart_baz.dart.more.dart", "foo.dart/bar.dart_baz.dart.more.dart", -1, -1); } public void testRelativePathsConsoleFilter() throws Exception { doNegativeRelativePathsFilterTest(""); doNegativeRelativePathsFilterTest("foo.dart"); doNegativeRelativePathsFilterTest("foo.dart "); doNegativeRelativePathsFilterTest("foo.dart 4 "); doNegativeRelativePathsFilterTest("foo.dart 4: "); doNegativeRelativePathsFilterTest("foo.dart 4:x"); doNegativeRelativePathsFilterTest(" foo.dart 4:15"); doNegativeRelativePathsFilterTest("foo.txt 4:15"); doNegativeRelativePathsFilterTest("foo.dart 4:x"); doPositiveRelativePathsFilterTest("foo.dart 1:1", "foo.dart", 0, 0); doPositiveRelativePathsFilterTest("foo.dart line 5 pos 9:z", "foo.dart", 4, 8); doPositiveRelativePathsFilterTest("../foo\\bar.dart 4:15 x", "../foo\\bar.dart", 3, 14); doPositiveRelativePathsFilterTest("web\\foo.dart:566:1:", "web\\foo.dart", 565, 0); } }