diff --git a/src/coverlet.core/Reporters/OpenCoverReporter.cs b/src/coverlet.core/Reporters/OpenCoverReporter.cs
index b2da83746..24f4b4867 100644
--- a/src/coverlet.core/Reporters/OpenCoverReporter.cs
+++ b/src/coverlet.core/Reporters/OpenCoverReporter.cs
@@ -25,6 +25,8 @@ public string Format(CoverageResult result)
int numSequencePoints = 0, numClasses = 0, numMethods = 0;
int visitedSequencePoints = 0, visitedClasses = 0, visitedMethods = 0;
+ int i = 1;
+
foreach (var mod in result.Modules)
{
XmlElement module = xml.CreateElement("Module");
@@ -44,10 +46,8 @@ public string Format(CoverageResult result)
module.AppendChild(name);
XmlElement files = xml.CreateElement("Files");
- XmlElement classes = xml.CreateElement("Classes");
-
- int i = 1;
-
+ XmlElement classes = xml.CreateElement("Classes");
+
foreach (var doc in mod.Value)
{
XmlElement file = xml.CreateElement("File");
diff --git a/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs b/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs
index 9127aabf9..d41db5c81 100644
--- a/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs
+++ b/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs
@@ -10,6 +10,34 @@ public void TestFormat()
{
CoverageResult result = new CoverageResult();
result.Identifier = Guid.NewGuid().ToString();
+
+ result.Modules = new Modules();
+ result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments());
+
+ OpenCoverReporter reporter = new OpenCoverReporter();
+ Assert.NotEqual(string.Empty, reporter.Format(result));
+ }
+
+ [Fact]
+ public void TestFilesHaveUniqueIdsOverMultipleModules()
+ {
+ CoverageResult result = new CoverageResult();
+ result.Identifier = Guid.NewGuid().ToString();
+
+ result.Modules = new Modules();
+ result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments());
+ result.Modules.Add("Some.Other.Module", CreateSecondDocuments());
+
+ OpenCoverReporter reporter = new OpenCoverReporter();
+ var xml = reporter.Format(result);
+ Assert.NotEqual(string.Empty, xml);
+
+ Assert.Contains(@"", xml);
+ Assert.Contains(@"", xml);
+ }
+
+ private static Documents CreateFirstDocuments()
+ {
Lines lines = new Lines();
lines.Add(1, 1);
lines.Add(2, 0);
@@ -19,11 +47,25 @@ public void TestFormat()
classes.Add("Coverlet.Core.Reporters.Tests.OpenCoverReporterTests", methods);
Documents documents = new Documents();
documents.Add("doc.cs", classes);
- result.Modules = new Modules();
- result.Modules.Add("module", documents);
+ return documents;
+ }
- OpenCoverReporter reporter = new OpenCoverReporter();
- Assert.NotEqual(string.Empty, reporter.Format(result));
+ private static Documents CreateSecondDocuments()
+ {
+ Lines lines = new Lines();
+ lines.Add(1, 1);
+ lines.Add(2, 0);
+
+ Methods methods = new Methods();
+ methods.Add("System.Void Some.Other.Module.TestClass.TestMethod()", lines);
+
+ Classes classes2 = new Classes();
+ classes2.Add("Some.Other.Module.TestClass", methods);
+
+ var documents = new Documents();
+ documents.Add("TestClass.cs", classes2);
+
+ return documents;
}
}
}
\ No newline at end of file