static int ProcessContext(Config config, int errorThreshold, bool warningIsError) { var validator = new MarkdownContextValidator(config); int markdownFiles = 0; Stack <string> directories = new Stack <string>(); directories.Push(config.RootWorkingDirectory); while (directories.Count > 0) { string directory = directories.Pop(); foreach (var dir in Directory.GetDirectories(directory)) { directories.Push(dir); validator.AddEntity(dir); } foreach (var file in Directory.GetFiles(directory)) { if (IsMarkdownFile(file)) { markdownFiles++; validator.AddMarkdownFile(file, ReadTextFile(file)); } else { validator.AddEntity(file); } } } Console.WriteLine("Validating {0} markdown files", markdownFiles); return(Validate(validator, errorThreshold, warningIsError)); }
static ValidationReportProvider() { var config = new Config(RootDirectory); config.WebIO.RequestTimeout = 3500; Validator = new MarkdownContextValidator(config); }
static int Validate(MarkdownContextValidator validator, int errorThreshold, bool warningIsError) { CancellationTokenSource tokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(1)); var report = validator.ValidateFully(tokenSource.Token); if (tokenSource.IsCancellationRequested) { WriteLine("Failed to validate within a minute. This indicates a problem with a parser.", ConsoleColor.Red); return(1); } WriteLine("Validation complete.", ConsoleColor.Green); if (report.WarningCount == 0) { WriteLine("No problems found.", ConsoleColor.Green); return(0); } Console.WriteLine(); PrintWarnings(report); int errorCount = warningIsError ? report.WarningCount : report.ErrorCount; return(errorCount <= errorThreshold ? 0 : 1); }
static void Main(string[] args) { Validator = new MarkdownContextValidator(); Validator.AddMarkdownFile("Test.md", ""); Server = new WebSocketServer(6300, true) { SslConfiguration = new ServerSslConfiguration( new X509Certificate2(@"C:\xampp\apache\conf\ssl.pfx\markdown-validator.ml.pfx")) }; Server.AddWebSocketService <MarkdownBehaviour>("/"); Server.Start(); while (true) { Thread.Sleep(10000); } }
private void Init() { _validator = new MarkdownContextValidator(new Config(string.Empty)); List <string> files = new List <string>(); Stack <string> directories = new Stack <string>(); directories.Push(Environment.CurrentDirectory); while (directories.Count > 0) { string directory = directories.Pop(); foreach (var dir in Directory.GetDirectories(directory)) { directories.Push(dir); _validator.AddEntity(dir); } foreach (var file in Directory.GetFiles(directory)) { if (IsMarkdownFile(file)) { files.Add(file); } else { _validator.AddEntity(file); } } } Parallel.ForEach(files, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, file => { string source = File.ReadAllText(file); _validator.AddMarkdownFile(file, source); }); }
public static void Fuzz(int iterations, int stringSizeMin, int stringSizeMax, string alphabet, string fileAlphabet, int maxFileNameLength) { MarkdownContextValidator validator = new MarkdownContextValidator(); Random seedRandom = new Random(); #if RELEASE try { #endif int concurrent = 4; int localIterations = iterations / concurrent; Task[] tasks = new Task[concurrent]; for (int t = 0; t < concurrent; t++) { Random random = new Random(seedRandom.Next()); tasks[t] = Task.Run(() => { char[] stringChars = new string(' ', stringSizeMax).ToCharArray(); for (int i = 0; i < localIterations; i++) { if (i % 100 == 99) { validator.Validate(); } try { int fileNameLength = 1 + random.Next(maxFileNameLength); stringChars[random.Next(fileNameLength)] = fileAlphabet[random.Next(fileAlphabet.Length)]; string fileName = new string(stringChars, 0, fileNameLength); int stringLength = random.Next(stringSizeMin, stringSizeMax); stringChars[random.Next(stringLength)] = alphabet[random.Next(alphabet.Length)]; string randomString = new string(stringChars, 0, stringLength); if (i % 100 == 0) { if (!validator.UpdateMarkdownFile(fileName, randomString)) { validator.AddMarkdownFile(fileName, randomString); } } else { fileName = Guid.NewGuid() + fileName; validator.AddMarkdownFile(fileName, randomString); } } catch (ArgumentException ae) when(ae.Message.EndsWith("is not a child path of the root working directory of the context", StringComparison.Ordinal)) { } catch (PathTooLongException) { } } }); } Task.WaitAll(tasks); #if RELEASE } catch { Console.WriteLine("Failed"); Console.ReadLine(); } #endif }
public RollingContextTest(Config configuration) { configuration = configuration ?? new Config(string.Empty); Validator = new MarkdownContextValidator(configuration); }
public void ValidationReport_Equals_Empty() { var validator = new MarkdownContextValidator(); Assert.Equal(validator.Validate(), validator.ValidateFully()); }