Java tutorial
/* * Copyright 2013-2016 Sergey Ignatov, Alexander Zolotov, Florin Patan * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.goide.runconfig; import java.io.IOException; import java.util.List; import javax.annotation.Nonnull; import com.goide.GoCodeInsightFixtureTestCase; import com.intellij.execution.filters.Filter; import com.intellij.execution.filters.HyperlinkInfo; import com.intellij.execution.filters.OpenFileHyperlinkInfo; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.util.ThrowableComputable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; public class GoConsoleFilterTest extends GoCodeInsightFixtureTestCase { private GoConsoleFilter myFilter; @Override protected void setUp() throws Exception { super.setUp(); VirtualFile workingDirectory = createTestRoot("workingDirectory"); VirtualFile goPath = createTestRoot("goPath"); //GoApplicationLibrariesService.getInstance().setLibraryRootUrls(goPath.getUrl()); myFilter = new GoConsoleFilter(myFixture.getProject(), myFixture.getModule(), workingDirectory.getUrl()); } @Override protected void tearDown() throws Exception { myFilter = null; super.tearDown(); } public void testFileNameInParens() { doFileLineTest("Message (nestedWorkingDirectory.go) with file", 9, 34, "/src/workingDirectory/src/nestedWorkingDirectory.go", 1, 1); } public void testSimpleFileName() { doFileLineTest("nestedWorkingDirectory.go:57", 0, 28, "/src/workingDirectory/src/nestedWorkingDirectory.go", 57, 1); } public void testAbsolutePath() { doFileLineTest("\t/src/goPath/src/nestedGoPath.go:57: expected operand, found '<'", 1, 35, "/src/goPath/src/nestedGoPath.go", 57, 1); } public void testAbsolutePathWithoutColumn() { doFileLineTest("\t/src/goPath/src/nestedGoPath.go:57:1: expected operand, found '<'", 1, 37, "/src/goPath/src/nestedGoPath.go", 57, 1); } public void testAbsolutePathWithLoggingTime() { doFileLineTest("2015/03/30 09:15:13 /src/goPath/src/nestedGoPath.go:57:1: expected operand, found '<'", 20, 56, "/src/goPath/src/nestedGoPath.go", 57, 1); } public void testRelativeToWorkingDirectory() { doFileLineTest( "src/nestedWorkingDirectory.go:5:5: found packages file.go (main) and file2.go (my) in /Some/path/to/directory", 0, 33, "/src/workingDirectory/src/nestedWorkingDirectory.go", 5, 5); } public void testRelativeToGoPath() { doFileLineTest( "src/nestedGoPath.go:2: found packages file.go (main) and file2.go (my) in /Some/path/to/directory", 0, 21, "/src/goPath/src/nestedGoPath.go", 2, 1); } public void testAppEngineFullPaths() { doFileLineTest( "/var/folders/m8/8sm6vlls2cs8xdmgs16y27zh0000gn/T/tmpzNDwX9appengine-go-bin/nestedGoPath.go:5:9: error", 0, 94, "/src/goPath/src/nestedGoPath.go", 5, 9); } public void testGoGetLines() { doGoGetTest("\tgo get golang.org/x/tools/cmd/cover", 1, 36, "golang.org/x/tools/cmd/cover"); } private void doGoGetTest(@Nonnull String line, int startOffset, int endOffset, @Nonnull String packageName) { Filter.Result result = myFilter.applyFilter(line, line.length()); assertNotNull(result); HyperlinkInfo info = assertResultAndGetHyperlink(result, startOffset, endOffset); assertInstanceOf(info, GoConsoleFilter.GoGetHyperlinkInfo.class); assertEquals(packageName, ((GoConsoleFilter.GoGetHyperlinkInfo) info).getPackageName()); } private void doFileLineTest(@Nonnull String line, int startOffset, int endOffset, String targetPath, int targetLine, int targetColumn) { Filter.Result result = myFilter.applyFilter(line, line.length()); assertNotNull(result); HyperlinkInfo info = assertResultAndGetHyperlink(result, startOffset, endOffset); assertInstanceOf(info, OpenFileHyperlinkInfo.class); OpenFileDescriptor fileDescriptor = ((OpenFileHyperlinkInfo) info).getDescriptor(); assertNotNull(fileDescriptor); assertEquals(targetPath, fileDescriptor.getFile().getPath()); assertEquals("line", targetLine, fileDescriptor.getLine() + 1); assertEquals("column", targetColumn, fileDescriptor.getColumn() + 1); } @Nonnull private static HyperlinkInfo assertResultAndGetHyperlink(@Nonnull Filter.Result result, int startOffset, int endOffset) { List<Filter.ResultItem> items = result.getResultItems(); assertSize(1, items); Filter.ResultItem item = ContainerUtil.getFirstItem(items); assertNotNull(item); assertEquals("start", startOffset, item.getHighlightStartOffset()); assertEquals("end", endOffset, item.getHighlightEndOffset()); HyperlinkInfo hyperlinkInfo = item.getHyperlinkInfo(); assertNotNull(hyperlinkInfo); return hyperlinkInfo; } @Nonnull private VirtualFile createTestRoot(@Nonnull String rootName) throws IOException { return ApplicationManager.getApplication() .runWriteAction(new ThrowableComputable<VirtualFile, IOException>() { @Nonnull @Override public VirtualFile compute() throws IOException { VirtualFile workingDirectory = myFixture.getTempDirFixture().findOrCreateDir(rootName); workingDirectory.createChildData(this, rootName + ".go"); VirtualFile childDirectory = workingDirectory.createChildDirectory(this, "src"); childDirectory.createChildData(this, "nested" + Character.toUpperCase(rootName.charAt(0)) + rootName.substring(1) + ".go"); return workingDirectory; } }); } }