package com.intellij.javascript.karma.tree;
import com.intellij.execution.filters.AbstractFileHyperlinkFilter;
import com.intellij.execution.filters.Filter;
import com.intellij.execution.testframework.sm.runner.TestProxyFilterProvider;
import com.intellij.javascript.karma.KarmaConfig;
import com.intellij.javascript.karma.filter.KarmaBrowserErrorFilter;
import com.intellij.javascript.karma.filter.KarmaSourceMapStacktraceFilter;
import com.intellij.javascript.karma.server.KarmaServer;
import com.intellij.javascript.testFramework.util.BrowserStacktraceFilters;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class KarmaTestProxyFilterProvider implements TestProxyFilterProvider {
private final Project myProject;
private final KarmaServer myKarmaServer;
public KarmaTestProxyFilterProvider(@NotNull Project project, @NotNull KarmaServer karmaServer) {
myProject = project;
myKarmaServer = karmaServer;
}
@Nullable
@Override
public Filter getFilter(@NotNull String nodeType, @NotNull String nodeName, @Nullable String nodeArguments) {
KarmaConfig config = myKarmaServer.getKarmaConfig();
String baseDir = config != null ? config.getBasePath() : null;
if ("browser".equals(nodeType)) {
AbstractFileHyperlinkFilter browserFilter = BrowserStacktraceFilters.createFilter(nodeName, myProject, baseDir);
if (browserFilter != null) {
return new KarmaSourceMapStacktraceFilter(myProject, baseDir, browserFilter);
}
}
if ("browserError".equals(nodeType)) {
return getBrowserErrorFilter();
}
return null;
}
@Nullable
private Filter getBrowserErrorFilter() {
KarmaConfig karmaConfig = myKarmaServer.getKarmaConfig();
if (karmaConfig != null) {
return new KarmaBrowserErrorFilter(myProject, karmaConfig);
}
return null;
}
}