Ejemplo n.º 1
0
        public void ParseFunctions_ParseBody_CallsNextFunctionWhenInputIsNotBodyComment()
        {
            // Arrange
            var text = new StringBuilder()
                       .AppendLine("Lorem ipsum dolor sit amet, consectetur adipiscing")
                       .AppendLine("elit, sed do eiusmod tempor incididunt ut labore et")
                       .AppendLine("dolore magna aliqua. Ut enim ad minim veniam, quis")
                       .ToString();
            var buffer    = Encoding.ASCII.GetBytes(text);
            var memStream = new MemoryStream(buffer);
            var reader    = new StreamReader(memStream);
            var state     = new ParseBody_TestState();
            var context   = new ParseContext(reader, state)
            {
                Input = "Anything but # Body"
            };

            var numCallsMadeToNextFunction = 0;

            Task next()
            {
                numCallsMadeToNextFunction++;
                return(Task.CompletedTask);
            }

            // Act
            ParseFunctions.ParseBody(context, next).Wait();

            // Assert
            Assert.IsNull(state.Body);
            Assert.AreEqual(1, numCallsMadeToNextFunction);
        }
Ejemplo n.º 2
0
        public void ParseFunctions_ReadLine_SetsInputAndCallsNextFunction()
        {
            // Arrange

            // Note that the string being used here has some extra white
            // space around it.
            var buffer    = Encoding.ASCII.GetBytes("  Lorem ipsum ");
            var memStream = new MemoryStream(buffer);
            var reader    = new StreamReader(memStream);
            var state     = new object();
            var context   = new ParseContext(reader, state);

            var numCallsMadeToNextFunction = 0;

            Task next()
            {
                numCallsMadeToNextFunction++;
                return(Task.CompletedTask);
            }

            // Act
            ParseFunctions.ReadLine(context, next).Wait();

            // Assert

            // Note that the expected value is a trimmed version of the one
            // used above to create the buffer variable.
            Assert.AreEqual("Lorem ipsum", context.Input);
            Assert.AreEqual(1, numCallsMadeToNextFunction);
        }
Ejemplo n.º 3
0
    public void LoadMap()
    {
        string fileContent = string.IsNullOrEmpty(fileLevelPath) ? defaultLevelFile.text :
                             System.IO.File.ReadAllText(fileLevelPath);

        char[,] bitmap = ParseFunctions.ParseLevelString(fileContent);
        NavigationManager.Instance.SetMap(bitmap, wallFlag);
        GenerateMap(bitmap);
    }
Ejemplo n.º 4
0
        public void ParseFunctions_ReadLine_ThrowsOnNullParseContext()
        {
            // Arrange
            ParseContext nullParseContext = null;

            Task next() => Task.CompletedTask;

            // Act
            ParseFunctions.ReadLine(nullParseContext, next);
        }
Ejemplo n.º 5
0
        public void ParseFunctions_ParseBody_ThrowsOnNullParseContext()
        {
            // Arrange
            ParseContext nullParseContext = null;

            Task next() => Task.CompletedTask;

            // Act
            ParseFunctions.ParseBody(nullParseContext, next).Wait();
        }
Ejemplo n.º 6
0
        public void ParseFunctions_IgnoreCommentsAndBlankLines_ThrowsOnNullParseContext()
        {
            // Arrange
            ParseContext nullParseContext = null;

            Task next() => Task.CompletedTask;

            // Act
            ParseFunctions.IgnoreCommentsAndBlankLines(nullParseContext, next).Wait();
        }
Ejemplo n.º 7
0
        public void ParseFunctions_ReadLine_ThrowsOnNullNextFunction()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new object();
            var context = new ParseContext(reader, state);

            Func <Task> nullNextFunction = null;

            // Act
            ParseFunctions.ReadLine(context, nullNextFunction);
        }
Ejemplo n.º 8
0
        public void ParseFunctions_IgnoreCommentsAndBlankLines_ThrowsOnNullNextFunction()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new object();
            var context = new ParseContext(reader, state);

            Func <Task> nullNextFunction = null;

            // Act
            ParseFunctions.IgnoreCommentsAndBlankLines(context, nullNextFunction).Wait();
        }
Ejemplo n.º 9
0
        public void ParseFunctions_ParseSetting_ThrowsWhenInputContainsAnWhiteSpaceValue()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new ParseSetting_TestState();
            var context = new ParseContext(reader, state)
            {
                Input = "SettingField1: \t   "
            };

            Task next() => Task.CompletedTask;

            // Act
            ParseFunctions.ParseSetting(context, next);
        }
Ejemplo n.º 10
0
        public void ParseFunctions_ParseSetting_FailsWhenInputDoesNotContainANameAndValue()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new ParseSetting_TestState();
            var context = new ParseContext(reader, state)
            {
                Input = "SettingField1 Lorem ipsum"
            };

            Task next() => Task.CompletedTask;

            // Act
            ParseFunctions.ParseSetting(context, next);
        }
Ejemplo n.º 11
0
        public void ParseFunctions_ParseSetting_SetsFieldValueOnStateObject()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new ParseSetting_TestState();
            var context = new ParseContext(reader, state)
            {
                Input = "SettingField1: Lorem ipsum: dolor"
            };

            Task next() => Task.CompletedTask;

            // Act
            ParseFunctions.ParseSetting(context, next);

            // Assert
            Assert.AreEqual("Lorem ipsum: dolor", state.SettingField1);
        }
Ejemplo n.º 12
0
        public void ParseFunctions_IgnoreCommentsAndBlankLines_CallsNextForNonCommentNonWhiteSpaceValues()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new object();
            var context = new ParseContext(reader, state)
            {
                Input = "Lorem ipsum"
            };

            var numCallsMadeToNextFunction = 0;

            Task next()
            {
                numCallsMadeToNextFunction++;
                return(Task.CompletedTask);
            }

            // Act
            ParseFunctions.IgnoreCommentsAndBlankLines(context, next).Wait();

            // Assert
            Assert.AreEqual(1, numCallsMadeToNextFunction);
        }
Ejemplo n.º 13
0
        public void ParseFunctions_IgnoreCommentsAndBlankLines_DoesNotCallNextOnEmptyString()
        {
            // Arrange
            var reader  = new StreamReader(new MemoryStream());
            var state   = new object();
            var context = new ParseContext(reader, state)
            {
                Input = string.Empty
            };

            var numCallsMadeToNextFunction = 0;

            Task next()
            {
                numCallsMadeToNextFunction++;
                return(Task.CompletedTask);
            }

            // Act
            ParseFunctions.IgnoreCommentsAndBlankLines(context, next).Wait();

            // Assert
            Assert.AreEqual(0, numCallsMadeToNextFunction);
        }
Ejemplo n.º 14
0
        private CPlayerUpdate ParsePlayerCareerInSquadByCompetition(CompetitorData competitorData, KeyValuePair <string, KeyValuePair <string, string> > season,
                                                                    HtmlNode dataRow, ScanType scanType, out string link, string chosenLeague = null)
        {
            var ath = CreateUpdateAthleteObject();

            var infoRow = dataRow.ChildNodes.Where(rp => rp.Name == "td").ToArray();

            var rawLink = dataRow.SelectSingleNode(dataRow.XPath + "//td[contains(@class,'name large-link')]/a/.");

            link = rawLink != null?rawLink.GetAttributeValue("href", "") : null;

            var cr = ParseFunctions.ParseCareerRecord(infoRow);

            if (cr != null)
            {
                ath.Name = ParseFunctions.ParseValue(dataRow, dataRow.XPath + "//td[contains(@class,'name')]/a/.");
                var rawJersey = ParseFunctions.ParseValue(dataRow,
                                                          dataRow.XPath + "//td[contains(@class,'shirtnumber')]/.");

                var jersey = -1;
                if (int.TryParse(rawJersey, out jersey))
                {
                    ath.JerseyNum = jersey;
                }

                var rawAge = ParseFunctions.ParseValue(dataRow, dataRow.XPath + "//td[contains(@class,'age')]/.");

                var age = -1;
                if (int.TryParse(rawAge, out age))
                {
                    ath.DOB = new DateTime(DateTime.Today.AddYears(-1 * age).Year, 1, 1);
                }

                var rawPosition = dataRow.SelectSingleNode(dataRow.XPath + "//td[contains(@class,'position')]/span/.");

                var position = -1;
                if (rawPosition != null)
                {
                    var strPosition = rawPosition.GetAttributeValue("title", "");

                    if (!string.IsNullOrEmpty(strPosition))
                    {
                        position = ParseFunctions.ParsePosition(strPosition);
                    }
                }

                var rawNationalityContainer =
                    dataRow.SelectSingleNode(dataRow.XPath + "//td[contains(@class,'flag')]/span/.");

                var rawNationality = rawNationalityContainer.GetAttributeValue("class", "");

                if (rawNationality != null)
                {
                    var m = _nationalityRgx.Match(rawNationality);
                    if (m.Success)
                    {
                        ath.Nationality = m.Groups["cntry"].Value.Trim();
                    }
                }

                if (scanType != ScanType.DailyGames && competitorData.CompetitionData == null)
                {
                    return(null);
                }

                var currentCompetition = scanType == ScanType.DailyGames
                    ? competitorData.NextScan.CompetitionData.Name
                    : competitorData.CompetitionData.Name;

                var currentCompetitionCountry = scanType == ScanType.DailyGames
                    ? competitorData.NextScan.CompetitionData.Country
                    : competitorData.CompetitionData.Country;

                if (string.IsNullOrEmpty(chosenLeague))
                {
                    ath.Competition = competitorData.CompetitionData == null
                        ? currentCompetition
                        : competitorData.CompetitionData.Name;
                }
                else
                {
                    ath.Competition = chosenLeague;
                }
                ath.Country    = competitorData.CompetitionData == null ? currentCompetitionCountry : competitorData.CompetitionData.Country;
                ath.Competitor = competitorData.Name;
                ath.Position   = position;

                string statisticsCompetition = season.Key;
                string statisticsCountry     = currentCompetition == season.Key ? currentCompetitionCountry : season.Key;

                var athleteStatisticsUpdate = new CAthleteStatisticsUpdate(cr)
                {
                    Season      = new ParsableValue <int>(season.Value.Value),
                    Country     = new ParsableValue <int>(statisticsCountry),
                    Competition = new ParsableValue <string>("A")
                };

                ath.Statistics = new List <CAthleteStatisticsUpdate>()
                {
                    athleteStatisticsUpdate
                };
            }

            return(ath);
        }
Ejemplo n.º 15
0
        private async Task <Dictionary <string, CPlayerUpdate> > ScanSingleCompetitor(CompetitorData competitorData,
                                                                                      ScanType scanType)
        {
            var list = new Dictionary <string, CPlayerUpdate>();

            try
            {
                var requestTime = DateTime.UtcNow;
                var fetchResult = await _innerPageParser.GetCompetitorPlayerStatBlock(competitorData.Id);

                var responseTime   = DateTime.UtcNow;
                var defaultRawData = fetchResult.HtmlDocument;

                if (defaultRawData == null)
                {
                    return(null);
                }

                string chosenLeague = string.Empty;
                var    seasonDic    =
                    ParseFunctions.ParseSeasonsSelect(defaultRawData.DocumentNode.SelectNodes("//select/optgroup/."), out chosenLeague);
                if (seasonDic == null)
                {
                    return(null);
                }

                var rawData = defaultRawData;
                if (scanType == ScanType.DailyGames &&
                    seasonDic.ContainsKey(competitorData.NextScan.CompetitionData.Name))
                {
                    requestTime = DateTime.UtcNow;
                    fetchResult =
                        await
                        _innerPageParser.GetCompetitorPlayerStatBlock(competitorData.Id,
                                                                      seasonDic[competitorData.NextScan.CompetitionData.Name].Key);

                    responseTime = DateTime.UtcNow;

                    rawData = fetchResult.HtmlDocument;
                    if (rawData == null)
                    {
                        return(null);
                    }
                }

                var table = rawData.DocumentNode.SelectSingleNode("//table[contains(@class,table)]");
                if (table == null)
                {
                    return(null);
                }

                var seasonId = table.GetAttributeValue("data-season_id", "");

                var season = seasonDic.FirstOrDefault(x => x.Value.Key == seasonId);

                var coachesNodes = defaultRawData.DocumentNode.SelectNodes("//table[@class='table squad']//tbody//tr//td[@class='name large-link']/a");

                if (coachesNodes != null)
                {
                    foreach (var coachNode in coachesNodes)
                    {
                        string coachPageLink = GetCoachPageLink(coachNode);

                        if (!string.IsNullOrWhiteSpace(coachPageLink))
                        {
                            FetchResult coachFetchResult = await _innerPageParser.GetCochCardBlock(coachPageLink);

                            HtmlDocument coachPageDoc = coachFetchResult.HtmlDocument;

                            string   nationality;
                            string   coachFullName;
                            DateTime?bornDate;
                            ParseCoachPersonalDetails(coachPageDoc, out nationality, out bornDate, out coachFullName);

                            CPlayerUpdate coachUpdate = GetCoachUpdate(competitorData, nationality, coachFullName, bornDate);

                            if (coachUpdate != null)
                            {
                                list.Add(coachPageLink, coachUpdate);
                            }
                        }
                    }
                }


                var dataRows = rawData.DocumentNode.SelectNodes("//tbody/tr");
                if (dataRows == null)
                {
                    return(null);
                }

                var index = 1;

                foreach (var row in dataRows)
                {
                    try
                    {
                        string link           = null;
                        var    cAthleteUpdate = ParsePlayerCareerInSquadByCompetition(competitorData, season, row,
                                                                                      scanType, out link, chosenLeague);
                        if (cAthleteUpdate != null)
                        {
                            if (string.IsNullOrEmpty(link))
                            {
                                link = index.ToString();
                                index++;
                            }

                            if (!list.ContainsKey(link))
                            {
                                var currentCompetition = scanType == ScanType.DailyGames && competitorData.NextScan != null
                                    ? competitorData.NextScan.CompetitionData : competitorData.CompetitionData;
                                cAthleteUpdate.WebRequestTime  = requestTime;
                                cAthleteUpdate.WebResponseTime = responseTime;
                                cAthleteUpdate.UsedProxy       = fetchResult.UsedProxy;
                                list.Add(link, cAthleteUpdate);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            catch (Exception exception)
            {
            }

            return(list);
        }