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); }
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); }
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); }
public void ParseFunctions_ReadLine_ThrowsOnNullParseContext() { // Arrange ParseContext nullParseContext = null; Task next() => Task.CompletedTask; // Act ParseFunctions.ReadLine(nullParseContext, next); }
public void ParseFunctions_ParseBody_ThrowsOnNullParseContext() { // Arrange ParseContext nullParseContext = null; Task next() => Task.CompletedTask; // Act ParseFunctions.ParseBody(nullParseContext, next).Wait(); }
public void ParseFunctions_IgnoreCommentsAndBlankLines_ThrowsOnNullParseContext() { // Arrange ParseContext nullParseContext = null; Task next() => Task.CompletedTask; // Act ParseFunctions.IgnoreCommentsAndBlankLines(nullParseContext, next).Wait(); }
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); }
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(); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }