Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
                }
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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();
                }
            }
        }