Exemplo n.º 1
0
        public void NotFindErrors_On_Cs_Files_Of_Folder()
        {
            var folder    = new DirectoryInfo("d:\\_work\\BasicProgramming\\");
            var filesCode = folder.GetFiles("*.cs", SearchOption.AllDirectories)
                            .Where(f => !f.Name.Equals("Settings.Designer.cs") && !f.Name.Equals("Resources.Designer.cs"))
                            .Select(f => Tuple.Create(f.FullName, f.ContentAsUtf8()));
            var failed = false;

            foreach (var tuple in filesCode)
            {
                var errors = new IndentsValidator().FindErrors(tuple.Item2);

                if (errors != null)
                {
                    failed = true;
                    Console.WriteLine(tuple.Item1);
                    Console.WriteLine(errors);
                    Console.WriteLine();
                }
            }
            if (failed)
            {
                Assert.Fail();
            }
        }
Exemplo n.º 2
0
        public void FindErrors(string filename)
        {
            var code          = IncorrectTestDataDir.GetFiles(filename).Single().ContentAsUtf8();
            var errors        = new IndentsValidator().FindErrors(code);
            var errorMessages = errors.Select(e => e.GetMessageWithPositions());

            using (ApprovalResults.ForScenario(filename))
            {
                Approvals.Verify(string.Join("\n", errorMessages));
            }
        }
Exemplo n.º 3
0
        public void NotFindErrors(string filename)
        {
            var code   = CorrectTestDataDir.GetFiles(filename).Single().ContentAsUtf8();
            var errors = new IndentsValidator().FindErrors(code);

            if (errors != null)
            {
                Console.WriteLine(errors);
            }
            errors.Should().BeNullOrEmpty();
        }
Exemplo n.º 4
0
        public void BuildHtmlWithErrors()
        {
            var folder    = new DirectoryInfo("d:\\BP1_UserCodeFiles\\");
            var filesCode = folder.GetFiles("*.json", SearchOption.AllDirectories)
                            .Where(HasBeenReviewed)
                            .Select(f => new FileInfo(NewFullNameFromOldFullNameAndExt(f.FullName, ".cs")).ContentAsUtf8());
            var          badCodesWithErrors = new Dictionary <string, List <string> >();
            const string spanStart          = "<span style=\"background-color: coral;\">";
            const string spanEnd            = "</span>";

            foreach (var code in filesCode)
            {
                var errors = new IndentsValidator().FindErrors(code);
                if (errors == null)
                {
                    continue;
                }
                var errorsLines = GroupBadLinesByErrors(errors);
                var codeLines   = code.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)
                                  .Select(l => HttpUtility.HtmlEncode(l.Replace(' ', '.').Replace("\t", "  → ")))
                                  .ToArray();
                foreach (var errorLines in errorsLines)
                {
                    var highlightenedCode = new StringBuilder("<pre><code>");
                    for (var line = 0; line < codeLines.Length; line++)
                    {
                        highlightenedCode.AppendLine(errorLines.Value.Contains(line)
                                                        ? $"{spanStart}{codeLines[line]}{spanEnd}"
                                                        : $"{codeLines[line]}");
                    }
                    if (!badCodesWithErrors.ContainsKey(errorLines.Key))
                    {
                        badCodesWithErrors[errorLines.Key] = new List <string>();
                    }
                    highlightenedCode.AppendLine("</pre></code>");
                    badCodesWithErrors[errorLines.Key].Add(highlightenedCode.ToString());
                }
            }
            var i = 0;

            foreach (var badCodesByError in badCodesWithErrors)
            {
                File.WriteAllText(
                    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Errors{i++}.html"),
                    $@"<div style=""white-space: pre;"">

{badCodesByError.Key}

{string.Join("\r\n", badCodesByError.Value.Shuffle())}
</div>",
                    Encoding.UTF8);
            }

            Dictionary <string, HashSet <int> > GroupBadLinesByErrors(List <SolutionStyleError> errors)
            {
                return(errors
                       .GroupBy(
                           error => error.Message,
                           error =>
                {
                    var result = new List <int> {
                        error.Span.StartLinePosition.Line
                    };
                    if (error.Message.Contains("Парные фигурные скобки"))
                    {
                        result.AddRange(new[]
                        {
                            error.Span.StartLinePosition.Line,
                            error.Span.EndLinePosition.Line
                        });
                    }
                    return result;
                },
                           (error, lines) => new
                {
                    Error = error,
                    BadLines = lines.SelectMany(l => l)
                })
                       .ToDictionary(g => g.Error, g => new HashSet <int>(g.BadLines)));
            }

            bool HasBeenReviewed(FileInfo f)
            {
                return(f.Name.Contains("Accepted") &&
                       new FileInfo(NewFullNameFromOldFullNameAndExt(f.FullName, ".cs")).Exists&&
                       bool.Parse(Regex.Matches(f.ContentAsUtf8(), ".*\"HasBeenReviewed\":.* (true|false),")[0].Groups[1].Value));
            }

            string NewFullNameFromOldFullNameAndExt(string oldFullName, string ext)
            {
                return(Path.Combine($"{Path.GetDirectoryName(oldFullName)}",
                                    $"{Path.GetFileNameWithoutExtension(oldFullName)}{ext}"));
            }
        }