private async Task YamlCommand(string cmd) { int start = cmd.IndexOf(YAML_START); int end = cmd.IndexOf(YAML_END, start + 3); if (start == -1 || end == -1 || end == start) { return; } string errMsg = string.Empty; string substring = cmd.Substring(start, (end - start)); string errorMessage = string.Empty; bool result = ValidateYaml.Validate(substring, out errorMessage); // mentioned users string mentionedUsers = base.MentionUsers(); var embed = new EmbedBuilder(); if (result == true) { embed.WithTitle(":thumbsup:"); embed.WithColor(Helper.GetRandomColor()); embed.AddField("yaml?", mentionedUsers + "Now, That's the perfectly valid YAML I'm talking about!"); } else { embed.WithTitle(":thumbsdown:"); embed.WithColor(Color.DarkRed); embed.AddField("yaml?", mentionedUsers + string.Format("Invalid YAML! Error: {1}", errorMessage)); } await ReplyAsync("", false, embed); }
public static void Run() { var validator = new Validator(); var tests = ValidateYaml.Load(); Console.WriteLine("========================="); Console.WriteLine("Tweets"); Console.WriteLine("========================="); foreach (var test in tests.Tweets) { Console.WriteLine(test.Description); var result = validator.IsValidTweet(test.Text); if (result != test.Expected) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("Lengths"); Console.WriteLine("========================="); foreach (var test in tests.Lengths) { Console.WriteLine(test.Description); var result = validator.GetTweetLength(test.Text); if (result != test.Expected) { Debugger.Break(); } } }
public static async Task ReactToYaml(string content, SocketCommandContext context) { if (!(content.Contains(YAML_START) || content.Contains(YAML_END))) { return; } int start = content.IndexOf(YAML_START); int end = content.IndexOf(YAML_END, start + 3); if (start == -1 || end == -1 || end == start) { return; } string errMsg = string.Empty; string substring = content.Substring(start, (end - start)); bool yamlCheck = ValidateYaml.Validate(substring, out errMsg); if (yamlCheck) { var okEmoji = new Emoji(GOOD_YAML); await context.Message.AddReactionAsync(okEmoji); } else { var errorEmoji = new Emoji(BAD_YAML); await context.Message.AddReactionAsync(errorEmoji); } }
public static void Run() { var extractor = new Extractor(); var extractTests = ExtractYaml.Load(); var validateTests = ValidateYaml.Load(); Console.WriteLine("========================="); Console.WriteLine("Mentions"); Console.WriteLine("========================="); foreach (var test in extractTests.Mentions) { Console.WriteLine(test.Description); var result = extractor.ExtractMentionedScreenNames(test.Text) .ConvertAll(x => test.Text.Substring(x.StartIndex + 1, x.Length - 1)); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("MentionsWithIndices"); Console.WriteLine("========================="); foreach (var test in extractTests.MentionsWithIndices) { Console.WriteLine(test.Description); var result = extractor.ExtractMentionedScreenNames(test.Text) .ConvertAll(x => new MentionsWithIndicesExpected { ScreenName = test.Text.Substring(x.StartIndex + 1, x.Length - 1), Indices = new[] { x.StartIndex, x.StartIndex + x.Length } }); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("MentionsOrListsWithIndices"); Console.WriteLine("========================="); foreach (var test in extractTests.MentionsOrListsWithIndices) { Console.WriteLine(test.Description); var result = extractor.ExtractMentionsOrLists(test.Text) .ConvertAll(x => { var s = test.Text.Substring(x.StartIndex + 1, x.Length - 1).Split(new[] { '/' }, 2, StringSplitOptions.RemoveEmptyEntries); return(new MentionsOrListsWithIndicesExpected { ScreenName = s[0], ListSlug = s.Length == 2 ? "/" + s[1] : "", Indices = new[] { x.StartIndex, x.StartIndex + x.Length } }); }); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("Replies"); Console.WriteLine("========================="); foreach (var test in extractTests.Replies) { Console.WriteLine(test.Description); var result = extractor.ExtractReplyScreenName(test.Text); if (result != test.Expected) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("Urls"); Console.WriteLine("========================="); foreach (var test in extractTests.Urls) { Console.WriteLine(test.Description); var result = extractor.ExtractUrls(test.Text) .ConvertAll(x => test.Text.Substring(x.StartIndex, x.Length)); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("UrlsWithIndices"); Console.WriteLine("========================="); foreach (var test in extractTests.UrlsWithIndices) { Console.WriteLine(test.Description); var result = extractor.ExtractUrls(test.Text) .ConvertAll(x => new UrlsWithIndicesExpected { Url = test.Text.Substring(x.StartIndex, x.Length), Indices = new[] { x.StartIndex, x.StartIndex + x.Length } }); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("Hashtags"); Console.WriteLine("========================="); foreach (var test in extractTests.Hashtags) { Console.WriteLine(test.Description); var result = extractor.ExtractHashtags(test.Text, true) .ConvertAll(x => test.Text.Substring(x.StartIndex + 1, x.Length - 1)); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("HashtagsWithIndices"); Console.WriteLine("========================="); foreach (var test in extractTests.HashtagsWithIndices) { Console.WriteLine(test.Description); var result = extractor.ExtractHashtags(test.Text, true) .ConvertAll(x => new HashtagsWithIndicesExpected { Hashtag = test.Text.Substring(x.StartIndex + 1, x.Length - 1), Indices = new[] { x.StartIndex, x.StartIndex + x.Length } }); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("Cashtags"); Console.WriteLine("========================="); foreach (var test in extractTests.Cashtags) { Console.WriteLine(test.Description); var result = extractor.ExtractCashtags(test.Text) .ConvertAll(x => test.Text.Substring(x.StartIndex + 1, x.Length - 1)); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("CashtagsWithIndices"); Console.WriteLine("========================="); foreach (var test in extractTests.CashtagsWithIndices) { Console.WriteLine(test.Description); var result = extractor.ExtractCashtags(test.Text) .ConvertAll(x => new CashtagsWithIndicesExpected { Cashtag = test.Text.Substring(x.StartIndex + 1, x.Length - 1), Indices = new[] { x.StartIndex, x.StartIndex + x.Length } }); if (!result.SequenceEqual(test.Expected)) { Debugger.Break(); } } Console.WriteLine(); Console.WriteLine("========================="); Console.WriteLine("Validation"); Console.WriteLine("========================="); foreach (var test in validateTests.Usernames) { Console.WriteLine(test.Description); var result = extractor.ExtractMentionedScreenNames(test.Text); if ((result.Count == 1 && result[0].Length == test.Text.Length) != test.Expected) { Debugger.Break(); } } foreach (var test in validateTests.Lists) { Console.WriteLine(test.Description); var result = extractor.ExtractMentionsOrLists(test.Text) .FindAll(x => test.Text.Substring(x.StartIndex, x.Length).IndexOf('/') >= 0); if ((result.Count == 1 && result[0].Length == test.Text.Length) != test.Expected) { Debugger.Break(); } } foreach (var test in validateTests.Hashtags) { Console.WriteLine(test.Description); var result = extractor.ExtractHashtags(test.Text, false); if ((result.Count == 1 && result[0].Length == test.Text.Length) != test.Expected) { Debugger.Break(); } } foreach (var test in validateTests.Urls) { switch (test.Description) { case "Valid url: port and userinfo": case "Valid url: ipv4": case "Valid url: ipv6": continue; // ツイートしても無効だしふざけんな💢💢💢💢 case "Valid url: sub delims and question marks": case "Valid url: trailing hyphen": continue; // 最後の1文字は含まれねーよクソが } Console.WriteLine(test.Description); var result = extractor.ExtractUrls(test.Text); if ((result.Count == 1 && result[0].Length == test.Text.Length) != test.Expected) { Debugger.Break(); } } foreach (var test in validateTests.UrlsWithoutProtocol) { Console.WriteLine(test.Description); var result = extractor.ExtractUrls(test.Text); if ((result.Count == 1 && result[0].Length == test.Text.Length) != test.Expected) { Debugger.Break(); } } }