public void TracePath_Tests() { var path = new TreePath(); Assert.AreEqual(path.Value, string.Empty); path.Push("Call"); Assert.AreEqual(path.Value, "Call"); path.Push("Service"); Assert.AreEqual(path.Value, "Call/Service"); path.Pop(); Assert.AreEqual(path.Value, "Call"); path.Pop(); Assert.AreEqual(path.Value, string.Empty); }
/// <summary> /// Извлечение событий по пути /// </summary> /// <param name="path">путь</param> /// <returns></returns> public IEnumerable <TraceEvent> ByPath(string path) { var tracePath = new TreePath(); int prevLevel = -1; foreach (var node in Flatten()) { if (node.Level > prevLevel) { tracePath.Push(node.Value.Name); } else if (node.Level < prevLevel) { tracePath.Pop(prevLevel - node.Level); } if (tracePath.Value == path) { yield return(node.Value); } prevLevel = node.Level; } }