Ejemplo n.º 1
0
        public void GeneratedTextIsCorrectWithRexEngine(string pattern)
        {
            var settings = new Rex.RexSettings(pattern)
            {
                k = 1
            };
            var result = Enumerable.Range(1, 3).Select(i => Rex.RexEngine.GenerateMembers(settings).Single()).ToArray();

            Array.ForEach(result, regex => Assert.True(Regex.IsMatch(regex, pattern)));
        }
Ejemplo n.º 2
0
        public void GeneratedTextIsCorrectWithRexEngine(string pattern)
        {
            const int repeatCount = 3;
            var       settings    = new Rex.RexSettings(pattern)
            {
                k = 1
            };

            settings.seed = 102;

            var result = Enumerable.Repeat(0, repeatCount).Select(_ => Rex.RexEngine.GenerateMembers(settings).Single()).ToArray();

            Assert.All(result, regex => Assert.Matches(pattern, regex));
        }
Ejemplo n.º 3
0
        public void GeneratedTextIsCorrectWithRexEngine(string pattern)
        {
            var settings = new Rex.RexSettings(pattern)
            {
                k = 1
            };

            // Fix generated value doesn't always meet the pattern
            settings.encoding = Rex.CharacterEncoding.ASCII;

            var result = Enumerable.Repeat(0, defaultRepeatCount)
                         .Select(_ =>
            {
                var generatedValue = Rex.RexEngine.GenerateMembers(settings).Single();
                this._testOutput.WriteLine($"Generated value: {generatedValue}");
                return(generatedValue);
            })
                         .ToArray();

            Assert.All(result, regex => Assert.Matches(pattern, regex));
        }
Ejemplo n.º 4
0
 public void GeneratedTextIsCorrectWithRexEngine(string pattern)
 {
     var settings = new Rex.RexSettings(pattern) { k = 1 };
     var result = Enumerable.Range(1, 3).Select(i => Rex.RexEngine.GenerateMembers(settings).Single()).ToArray();
     Array.ForEach(result, regex => Assert.True(Regex.IsMatch(regex, pattern)));
 }
Ejemplo n.º 5
0
        private List <LocalEmote> DownloadTwitchEmotes()
        {
            var httpClient     = new WebClient();
            var webResult      = httpClient.DownloadString("https://api.twitch.tv/kraken/chat/emoticons");
            var emoticonResult = JsonConvert.DeserializeObject <EmoticonResponseContract>(webResult);
            var globalEmotes   = emoticonResult.emoticons.Where(q => q.images.Any(p => p.emoticon_set == null));

            if (!globalEmotes.Any())
            {
                return(null);
            }

            var results = new List <LocalEmote>();

            Parallel.For(0, globalEmotes.Count(), (i) =>
            {
                var emote = globalEmotes.ElementAt(i);
                using (var client = new WebClient())
                {
                    emote.images.ForEach((m) =>
                    {
                        if (m.emoticon_set == null)
                        {
                            // HTML Decode is not an option due the values being escaped in regex form, sanitize as neccesary
                            emote.regex = emote.regex.Replace(@"\&lt\;", "<");
                            emote.regex = emote.regex.Replace(@"\&gt\;", ">");
                            // Generate 100 valid values of the Regex value and pick the shortest one
                            var settings      = new Rex.RexSettings(emote.regex);
                            settings.encoding = Rex.CharacterEncoding.ASCII;
                            settings.k        = 100;

                            var minimumViableRegex = Rex.RexEngine.GenerateMembers(settings).OrderBy(s => s.Length).First();

                            client.DownloadFile(m.url, Directory.GetCurrentDirectory() + "/Emoticons/Global/" + m.url.Substring(m.url.LastIndexOf("/") + 1));
                            results.Add(new LocalEmote()
                            {
                                Name      = minimumViableRegex,
                                ImageName = string.Format("Global/{0}", m.url.Substring(m.url.LastIndexOf("/") + 1))
                            });
                        }
                    });
                }
            });
            var orderedResults = results.OrderBy(x =>
            {
                // Smiles
                if (Regex.IsMatch(x.Name, "[:|;|>|<|>]"))
                {
                    return(0);
                }

                // Text emotes
                if (Regex.IsMatch(x.Name, "[a-zA-Z]"))
                {
                    return(1);
                }

                //Everything else
                return(2);
            });

            return(orderedResults.ToList());
        }