//[TestMethod] public void VivadoCommandRecordTest() { var log = new VivadoCommandLog(); var paramTypes = new List <string>() { "[-optional_flag]", "[<optional_name> <arg>]", "<required_value>", "[<patterns>...]", "<required_name> <arg>", "[<optional_value>]", }; var fixes = new VivadoTCLFixes(); foreach (var p in paramTypes) { var lines = new List <string>() { "test_command", "Syntax", $"test_command {p}" }; var record = new VivadoCommandRecord(log, fixes, "test_command", new VivdoCommandTextLines() { Lines = lines }); } }
public VivadoCommandRecord(VivadoCommandLog log, VivadoTCLFixes fixes, string name, VivdoCommandTextLines commandData) { _log = log; _fixes = fixes; CommandData = commandData; Name = name; var lines = commandData.Lines; var orderedSections = new VivadoCommandRecordSection[] { new VivadoCommandRecordSection(name, OnCommand), new VivadoCommandRecordSection("Syntax", OnSyntax), new VivadoCommandRecordSection("Returns", OnReturns), new VivadoCommandRecordSection("Usage", OnUsage), new VivadoCommandRecordSection("Categories", OnCategories), new VivadoCommandRecordSection("Description", OnDescription), new VivadoCommandRecordSection("Arguments", OnArguments), new VivadoCommandRecordSection("Examples", OnExamples), new VivadoCommandRecordSection("See Also", OnSeeAlso), }; // make sure that sections are in expected order var indexes = orderedSections .Select(s => new { name = s.SectionName, index = lines.IndexOf(s.SectionName) }) .Where(s => s.index != -1) .ToList(); for (var idx = 0; idx < indexes.Count - 1; idx++) { var thisSection = indexes[idx]; var nextSection = indexes[idx + 1]; if (thisSection.index > nextSection.index) { throw new Exception($"Command {name}: Section {thisSection.name} is expected to be before {nextSection.name}"); } } // process sections var existingSections = orderedSections.Where(s => indexes.Any(i => i.name == s.SectionName)).ToList(); for (var idx = 0; idx < existingSections.Count; idx++) { var thisSection = existingSections[idx]; var nextSection = existingSections.Skip(idx + 1).FirstOrDefault(); var text = BaseGenerator.between(lines, thisSection.SectionName, nextSection?.SectionName); thisSection.Handler(text); } }