Exemple #1
0
 private static (string originFilename, int originLineNumber) MapLineNumber(int lineNumber, string[] csSourceText)
 {
     for (var i = lineNumber; i >= 1; i--)
     {
         if (OriginLabels.TryParse(csSourceText[i - 1], out var originFilename, out var originStartLineNumber))
         {
             return(originFilename,
                    originStartLineNumber + (lineNumber - i) - 1);
         }
     }
     throw new InvalidOperationException($"Missing //#origin label for line number {lineNumber}!");
 }
Exemple #2
0
        static string[] Render_section(string[] csTemplate, Sourcecode csrunSection)
        {
            var regionStartLineNumber = csTemplate.Select((line, index) => new { LineNumber = index + 1, Text = line })
                                        .First(line => line.Text.IndexOf(Regionname()) >= 0)
                                        .LineNumber;
            var csBeforeSection = csTemplate.Take(regionStartLineNumber);
            var csAfterSection  = csTemplate.Skip(regionStartLineNumber);

            var originLabels = new OriginLabels(csrunSection.Filename, csrunSection.OriginLineNumber);

            return(csBeforeSection.Concat(new[] { originLabels.StartLabel })
                   .Concat(Render_source())
                   .Concat(new[] { originLabels.EndLabel })
                   .Concat(csAfterSection)
                   .ToArray());


            string Regionname()
            {
                switch (csrunSection.Section)
                {
                case Sourcecode.Sections.CSRunMain: return("#region main");

                case Sourcecode.Sections.CSRunFunctions: return("#region functions");

                case Sourcecode.Sections.CSRunTest: return("#region test");

                default: throw new InvalidOperationException($"Cannot render section type {csrunSection.Section}!");
                }
            }

            string[] Render_source()
            {
                switch (csrunSection.Section)
                {
                case Sourcecode.Sections.CSRunTest:
                    return(new[] { $"[NUnit.Framework.Test(Description=\"{csrunSection.Label}\")]public void {CreateTestMethodName()}()" + "{" }
                           .Concat(csrunSection.Text)
                           .Concat(new[] { "}" })
                           .ToArray());

                default: return(csrunSection.Text);
                }


                string CreateTestMethodName() => $"Test{Guid.NewGuid().ToString().Replace("-", "")}";
            }
        }