diff --git a/plugins/coverage/coverage.iml b/plugins/coverage/coverage.iml
index 79aabd8b9788..c6cf45e25c90 100644
--- a/plugins/coverage/coverage.iml
+++ b/plugins/coverage/coverage.iml
@@ -4,6 +4,7 @@
+
@@ -31,6 +32,7 @@
+
+
-
-
+
\ No newline at end of file
diff --git a/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java b/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java
index f4896b7695be..3366fa1c0c32 100644
--- a/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java
+++ b/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java
@@ -72,6 +72,10 @@ import java.util.*;
public class JavaCoverageEngine extends CoverageEngine {
private static final Logger LOG = Logger.getInstance(JavaCoverageEngine.class.getName());
+ public static JavaCoverageEngine getInstance() {
+ return Extensions.findExtension(EP_NAME, JavaCoverageEngine.class);
+ }
+
@Override
public boolean isApplicableTo(@Nullable final RunConfigurationBase conf) {
if (conf instanceof CommonJavaRunConfigurationParameters) {
diff --git a/plugins/coverage/testSrc/com/intellij/coverage/PackageAnnotatorTest.java b/plugins/coverage/testSrc/com/intellij/coverage/PackageAnnotatorTest.java
new file mode 100644
index 000000000000..7998c1ac2bb0
--- /dev/null
+++ b/plugins/coverage/testSrc/com/intellij/coverage/PackageAnnotatorTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * 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.intellij.coverage;
+
+import com.intellij.openapi.application.PluginPathManager;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.ex.ProjectManagerEx;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.JavaPsiFacade;
+import com.intellij.psi.PsiPackage;
+import com.intellij.testFramework.ModuleTestCase;
+import com.intellij.util.containers.hash.HashMap;
+
+import java.io.File;
+import java.util.Map;
+
+/**
+ * @author yole
+ */
+public class PackageAnnotatorTest extends ModuleTestCase {
+ private static String getTestDataPath() {
+ return PluginPathManager.getPluginHomePath("coverage") + "/testData/simple";
+ }
+
+ @Override
+ protected void setUpProject() throws Exception {
+ String testDataPath = getTestDataPath();
+ myProject = ProjectManagerEx.getInstanceEx().loadProject(testDataPath);
+ ProjectManagerEx.getInstanceEx().openTestProject(myProject);
+ runStartupActivities();
+ }
+
+ public void testSimple() {
+ File coverageFile = new File(getTestDataPath(), "simple$foo_in_simple.coverage");
+ IDEACoverageRunner runner = CoverageRunner.getInstance(IDEACoverageRunner.class);
+ CoverageFileProvider fileProvider = new DefaultCoverageFileProvider(coverageFile);
+ CoverageSuite suite =
+ JavaCoverageEngine.getInstance().createCoverageSuite(runner, "Simple", fileProvider, null, -1, null, false, false, false);
+ CoverageSuitesBundle bundle = new CoverageSuitesBundle(suite);
+ PsiPackage psiPackage = JavaPsiFacade.getInstance(myProject).findPackage("foo");
+ PackageAnnotator annotator = new PackageAnnotator(psiPackage);
+ PackageAnnotationConsumer consumer = new PackageAnnotationConsumer();
+ annotator.annotate(bundle, consumer);
+ PackageAnnotator.ClassCoverageInfo fooClassCoverage = consumer.myClassCoverageInfo.get("foo.FooClass");
+ assertNotNull(fooClassCoverage);
+ }
+
+ private static class PackageAnnotationConsumer implements PackageAnnotator.Annotator {
+ private final Map myDirectoryCoverage =
+ new HashMap();
+ private final Map myPackageCoverage =
+ new HashMap();
+ private final Map myFlatPackageCoverage =
+ new HashMap();
+ private final Map myClassCoverageInfo =
+ new HashMap();
+
+ public void annotateSourceDirectory(VirtualFile virtualFile, PackageAnnotator.PackageCoverageInfo packageCoverageInfo, Module module) {
+ myDirectoryCoverage.put(virtualFile, packageCoverageInfo);
+ }
+
+ public void annotateTestDirectory(VirtualFile virtualFile, PackageAnnotator.PackageCoverageInfo packageCoverageInfo, Module module) {
+ myDirectoryCoverage.put(virtualFile, packageCoverageInfo);
+ }
+
+ public void annotatePackage(String packageQualifiedName, PackageAnnotator.PackageCoverageInfo packageCoverageInfo) {
+ myPackageCoverage.put(packageQualifiedName, packageCoverageInfo);
+ }
+
+ public void annotatePackage(String packageQualifiedName, PackageAnnotator.PackageCoverageInfo packageCoverageInfo, boolean flatten) {
+ (flatten ? myFlatPackageCoverage : myPackageCoverage).put(packageQualifiedName, packageCoverageInfo);
+ }
+
+ public void annotateClass(String classQualifiedName, PackageAnnotator.ClassCoverageInfo classCoverageInfo) {
+ myClassCoverageInfo.put(classQualifiedName, classCoverageInfo);
+ }
+ }
+}
+