public void Merge_MergeClassWithOneFileAndOneMethodMetric_FileIsStored() { var assembly = new Assembly("C:\\test\\TestAssembly.dll"); var sut = new Class("Test", assembly); var classToMerge = new Class("Test", assembly); var file = new CodeFile("C:\\temp\\Program.cs", new int[0]); var methodMetric = new MethodMetric("Test"); classToMerge.AddFile(file); classToMerge.AddMethodMetric(methodMetric); sut.Merge(classToMerge); Assert.AreEqual(file, sut.Files.First(), "Not equal"); Assert.AreEqual(1, sut.Files.Count(), "Wrong number of classes"); Assert.AreEqual(methodMetric, sut.MethodMetrics.First(), "Not equal"); Assert.AreEqual(1, sut.MethodMetrics.Count(), "Wrong number of method metrics"); }
/// <summary> /// Extracts the metrics from the given <see cref="XElement">XElements</see>. /// </summary> /// <param name="methods">The methods.</param> /// <param name="class">The class.</param> private static void SetMethodMetrics(IEnumerable<XElement> methods, Class @class) { foreach (var methodGroup in methods.GroupBy(m => m.Element("Name").Value)) { var method = methodGroup.First(); // Exclude properties and lambda expressions if (method.Attribute("skippedDueTo") != null || method.HasAttributeWithValue("isGetter", "true") || method.HasAttributeWithValue("isSetter", "true") || Regex.IsMatch(methodGroup.Key, "::<.+>.+__")) { continue; } var metrics = new[] { new Metric( "Cyclomatic Complexity", methodGroup.Max(m => int.Parse(m.Attribute("cyclomaticComplexity").Value, CultureInfo.InvariantCulture))), new Metric( "Sequence Coverage", methodGroup.Max(m => decimal.Parse(m.Attribute("sequenceCoverage").Value, CultureInfo.InvariantCulture))), new Metric( "Branch Coverage", methodGroup.Max(m => decimal.Parse(m.Attribute("branchCoverage").Value, CultureInfo.InvariantCulture))) }; @class.AddMethodMetric(new MethodMetric(methodGroup.Key, metrics)); } }
/// <summary> /// Extracts the metrics from the given <see cref="XElement">XElements</see>. /// </summary> /// <param name="methods">The methods.</param> /// <param name="class">The class.</param> private static void SetMethodMetrics(IEnumerable<XElement> methods, Class @class) { foreach (var method in methods) { string methodName = method.Attribute("name").Value; // Exclude properties and lambda expressions if (methodName.StartsWith("get_", StringComparison.Ordinal) || methodName.StartsWith("set_", StringComparison.Ordinal) || Regex.IsMatch(methodName, "<.+>.+__")) { continue; } var metrics = new[] { new Metric( "Blocks covered", int.Parse(method.Attribute("blocks_covered").Value, CultureInfo.InvariantCulture)), new Metric( "Blocks not covered", int.Parse(method.Attribute("blocks_not_covered").Value, CultureInfo.InvariantCulture)) }; @class.AddMethodMetric(new MethodMetric(methodName, metrics)); } }
/// <summary> /// Extracts the metrics from the given <see cref="XElement">XElements</see>. /// </summary> /// <param name="methods">The methods.</param> /// <param name="class">The class.</param> private static void SetMethodMetrics(IEnumerable<XElement> methods, Class @class) { foreach (var methodGroup in methods.GroupBy(m => m.Element("Name").Value)) { var method = methodGroup.First(); // Exclude properties and lambda expressions if (method.Attribute("skippedDueTo") != null || method.HasAttributeWithValue("isGetter", "true") || method.HasAttributeWithValue("isSetter", "true") || Regex.IsMatch(methodGroup.Key, "::<.+>.+__")) { continue; } string methodName = Regex.Replace( methodGroup.Key, MethodRegex, m => string.Format(CultureInfo.InvariantCulture, "{0}({1})", m.Groups["MethodName"].Value, m.Groups["Arguments"].Value.Length > 0 ? "..." : string.Empty)); var metrics = new[] { new Metric( "Cyclomatic Complexity", methodGroup.Max(m => int.Parse(m.Attribute("cyclomaticComplexity").Value, CultureInfo.InvariantCulture))), new Metric( "Sequence Coverage", methodGroup.Max(m => int.Parse(m.Attribute("sequenceCoverage").Value, CultureInfo.InvariantCulture))), new Metric( "Branch Coverage", methodGroup.Max(m => int.Parse(m.Attribute("branchCoverage").Value, CultureInfo.InvariantCulture))) }; @class.AddMethodMetric(new MethodMetric(methodName, metrics)); } }