1 using System.Collections.Generic;
\r
3 using System.Xml.Linq;
\r
4 using CoverageFramework.Element.Decorator;
\r
5 using CoverageFramework.Element.Selector;
\r
6 using CoverageFramework.Model;
\r
7 using CoverageFramework.Utility;
\r
10 namespace CoverageFramework.Embedder
\r
12 public class ConditionCoverageEmbedder
\r
14 private int _iBranch;
\r
16 public void Embed(XElement root, IXElementRangeSelector ifRangeSelector, IXElementRangeSelector condRangeSelector, ITaggedXElementDecorator covDec, ITagger tagger, IDictionary<string, CoverageInfomation> covInfos)
\r
18 ifRangeSelector.Select(root)
\r
19 .ForEach(ifCondBlock => {
\r
20 var ifPos = CodePositionUtil.CreateCodePosition(ifCondBlock);
\r
22 ifCondBlock.SelectMany(e_ => condRangeSelector.Select(e_))
\r
23 .ForEach((target, iCondition) => {
\r
24 var targetList = target.ToList();
\r
25 var key = "cond," + (_iBranch++) + ">" + iCondition;
\r
26 var pos = CodePositionUtil.CreateCodePosition(targetList);
\r
27 covInfos[key] = new CoverageInfomation(ifPos, pos, tagger.Generate(targetList));
\r
30 var prev = targetList[0].PreviousNode;
\r
33 // 要素の複製防止のために削除して,同じ位置に挿入し直す
\r
34 targetList.Remove();
\r
35 prev.AddAfterSelf(covDec.Generate(targetList, key));
\r
39 var parent = targetList[0].Parent;
\r
40 // 要素の複製防止のために削除して,同じ位置に挿入し直す
\r
41 targetList.Remove();
\r
42 parent.AddFirst(covDec.Generate(targetList, key));
\r
48 public void Embed(XElement root, IXElementSelector ifSelector, IXElementSelector condSelector, ITaggedXElementDecorator covDec, ITagger tagger, IDictionary<string, CoverageInfomation> covInfos)
\r
50 ifSelector.Select(root)
\r
51 .ForEach(ifCondition => {
\r
52 var ifPos = CodePositionUtil.CreateCodePosition(ifCondition);
\r
54 condSelector.Select(ifCondition)
\r
55 .ForEach((target, iCondition) => {
\r
56 var key = "cond," + (_iBranch++) + ">" + iCondition;
\r
57 var pos = CodePositionUtil.CreateCodePosition(target);
\r
58 covInfos[key] = new CoverageInfomation(ifPos, pos, tagger.Generate(target));
\r
61 var prev = target.PreviousNode;
\r
64 // 要素の複製防止のために削除して,同じ位置に挿入し直す
\r
66 prev.AddAfterSelf(covDec.Generate(new[] { target }, key));
\r
70 var parent = target.Parent;
\r
71 // 要素の複製防止のために削除して,同じ位置に挿入し直す
\r
73 parent.AddFirst(covDec.Generate(new[] { target }, key));
\r