public void TestWriteOverlappingCycles() { const string cycleMarkerPrefix = "X"; var gc = new GlobalContext(); WorkingGraph graph = gc.CurrentGraph; var a = graph.CreateItem(ItemType.SIMPLE, "a"); var b = graph.CreateItem(ItemType.SIMPLE, "b"); var c = graph.CreateItem(ItemType.SIMPLE, "c"); var d = graph.CreateItem(ItemType.SIMPLE, "d"); var e = graph.CreateItem(ItemType.SIMPLE, "e"); List <Dependency> dependencies = CreateDependenciesAndFindCycles(gc, a, b, c, d, e, keepOnlyCyclesOption: false, markerPrefix: cycleMarkerPrefix); using (var s = new MemoryStream()) { var w = new FlatPathWriter(); w.RenderToStreamForUnitTests(gc, dependencies, s, cycleMarkerPrefix + "* -sm"); string result = Encoding.ASCII.GetString(s.ToArray()); Assert.AreEqual(@"-- X0 SIMPLE:a'X0 SIMPLE:c'X1 SIMPLE:d SIMPLE:e <= SIMPLE:a'X0 $ -- X1 SIMPLE:c'X1 SIMPLE:d <= SIMPLE:c'X1 $", result.Trim()); } }
public void TestSimpleFlatPathWriterForOnePath() { var gc = new GlobalContext { IgnoreCase = true }; WorkingGraph graph = gc.CurrentGraph; ItemType t3 = ItemType.New("T3(ShortName:MiddleName:LongName)"); var RegexPathMarker = "P0"; Item a = graph.CreateItem(t3, "a:aa:aaa".Split(':')); a.MarkPathElement(RegexPathMarker, 0, isStart: false, isEnd: false, isMatchedByCountSymbol: false, isLoopBack: false); Item b = graph.CreateItem(t3, "b:bb:bbb".Split(':')); b.SetMarker(RegexPathMarker, 1); var d = CreateDependency(graph, a, b, RegexPathMarker, true, true, false, false); Dependency[] dependencies = { d }; using (var s = new MemoryStream()) { var w = new FlatPathWriter(); w.RenderToStreamForUnitTests(gc, dependencies, s, "P*"); string result = Encoding.ASCII.GetString(s.ToArray()); Assert.AreEqual(@"-- P0 a:aa:aaa b:bb:bbb $", result.Trim()); } }
private static string FindPathsAndWriteFlat(GlobalContext gc, IEnumerable<Dependency> dependencies, string markerPrefix, string transformOptions) { var pm = new OLDPathMarker(); pm.Configure(gc, "", false); var transformedDependencies = new List<Dependency>(); pm.Transform(gc, dependencies, transformOptions, transformedDependencies, s => null); string result; using (var s = new MemoryStream()) { var w = new FlatPathWriter(); w.RenderToStreamForUnitTests(gc, transformedDependencies, s, $"{markerPrefix}* -sm"); result = Encoding.ASCII.GetString(s.ToArray()); } return result; }
public void TestWriteLaterCycle() { const string cycleMarkerPrefix = "C"; List <Dependency> dependencies = FindLaterCycle(cycleMarkerPrefix); var gc = new GlobalContext(); using (var s = new MemoryStream()) { var w = new FlatPathWriter(); w.RenderToStreamForUnitTests(gc, dependencies, s, cycleMarkerPrefix + "* -sm"); string result = Encoding.ASCII.GetString(s.ToArray()); Assert.AreEqual(@"-- C0 SIMPLE:c'C0 SIMPLE:d SIMPLE:e <= SIMPLE:c'C0 $", result.Trim()); } }
public void TestBackProjectSmallCycle() { ItemType generic2 = ItemType.Generic(2, ignoreCase: false); var gc = new GlobalContext(); WorkingGraph graph = gc.CurrentGraph; Item a1 = graph.CreateItem(generic2, "a:1"); Item b1 = graph.CreateItem(generic2, "b:1"); Item a2 = graph.CreateItem(generic2, "a:2"); Item b2 = graph.CreateItem(generic2, "b:2"); Item b3 = graph.CreateItem(generic2, "b:3"); var deps = new[] { Dep(graph, a1, b1), Dep(graph, b1, a2), Dep(graph, b2, a2), Dep(graph, a1, b3) }; List <Dependency> backProjectedDeps = ProjectMarkCyclesAndBackProject(deps, gc); Assert.IsTrue(Find(backProjectedDeps, a1, b1).MarkersContain("C0")); Assert.IsTrue(Find(backProjectedDeps, a1, b3).MarkersContain("C0")); Assert.IsTrue(Find(backProjectedDeps, b1, a2).MarkersContain("C0")); Assert.IsTrue(Find(backProjectedDeps, b2, a2).MarkersContain("C0")); var pw = new FlatPathWriter(); using (var t = DisposingFile.CreateTempFileWithTail(".txt")) { pw.Render(gc, backProjectedDeps, $"{{ {FlatPathWriter.PathMarkerOption} C* }}".Replace(" ", Environment.NewLine), new WriteTarget(t.FileName, append: false, limitLinesForConsole: 100), ignoreCase: false); using (var sr = new StreamReader(t.FileName)) { var o = sr.ReadToEnd(); //Console.WriteLine(o); Assert.IsTrue(o.Contains("a:1")); Assert.IsTrue(o.Contains("<= a:2 $")); } } }