public void Given_A_File_With_Header_ExcerptBlock_And_Body_Should_Create_Object_With_Correct_Data() { var fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-6.md"); const string expectedHeader = @"--- layout: post series: name: 123 current: 2 part: test part 1 part: test part 2 part: test part 3 title: some title ---"; const string expectedExcerpt = @" Hello World, this is an excerpt "; const string expectedBody = @" Hello rest of the world, this is the body... "; var result = MarkdownFileParser.ParseDataFromFile(fileData); Assert.Equal(expectedHeader, result.Header); Assert.Equal(expectedExcerpt, result.Excerpt); Assert.Equal(expectedBody, result.Body); }
public static Post GetFileData(FileInfo file, SnowSettings snowSettings) { var rawPost = File.ReadAllText(file.FullName); var fileNameMatches = FileNameRegex.Match(file.Name); var rawSettings = string.Empty; if (!fileNameMatches.Success) { file.Name.OutputIfDebug(" - Skipping file: "); " - File does not match the format {year}-{month}-{day}-{slug}.(md|markdown)".OutputIfDebug(); return(new Post.MissingPost()); } var result = MarkdownFileParser.ParseDataFromFile(rawPost); var settings = ParseSettings(result.Header); var year = fileNameMatches.Groups["year"].Value; var month = fileNameMatches.Groups["month"].Value; var day = fileNameMatches.Groups["day"].Value; var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug(); var date = DateTime.ParseExact(year + month + day, "yyyyMMdd", CultureInfo.InvariantCulture); /// if a 'date' property is found in markdown file header, that date will be used instead of the date in the file name if (settings.ContainsKey("date")) { try { date = DateTime.Parse((string)settings["date"]); } finally { /// do nothing, let the current 'date' be as is } } var bodySerialized = Markdown.Transform(result.Body); var excerptSerialized = Markdown.Transform(result.Excerpt ?? string.Empty); var postHeader = new Post { FileName = file.Name, MarkdownHeader = rawSettings, Content = bodySerialized, ContentExcerpt = excerptSerialized, Settings = settings, Year = date.Year, Month = date.Month, Day = date.Day, Date = date, Url = slug }; postHeader.SetSnowSettings(snowSettings); postHeader.SetHeaderSettings(settings); return(postHeader); }
public void Given_A_File_With_No_Header_Should_Return_Raw_Post_And_Empty_Header() { var fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-2.md"); const string expected = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec porttitor non velit nec feugiat."; var result = MarkdownFileParser.ParseDataFromFile(fileData); Assert.Null(result.Header); Assert.Equal(expected, result.Body); }
public void Given_File_Should_Return_Tuple_With_Item2_Containing_Post() { var fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-1.md"); const string expected = @" Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec porttitor non velit nec feugiat."; var result = MarkdownFileParser.ParseDataFromFile(fileData); Assert.Equal(expected, result.Body); }
public static Page GetFileData(FileInfo file, SnowSettings snowSettings) { var rawPage = File.ReadAllText(file.FullName); var fileNameMatches = FileNameRegex.Match(file.Name); var rawSettings = string.Empty; if (!fileNameMatches.Success) { file.Name.OutputIfDebug(" - Skipping file: "); " - File does not match the format {slug}.(md|markdown)".OutputIfDebug(); return(null); } var result = MarkdownFileParser.ParseDataFromFile(rawPage); var settings = PostParser.ParseSettings(result.Header); var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug(); /// if a 'date' property is found in markdown file header, that date will be used instead of the date in the file name DateTime date = DateTime.Now; if (settings.ContainsKey("date")) { DateTime.TryParse((string)settings["date"], out date); } var markdown = new Markdown(); var bodySerialized = markdown.Transform(result.Body); var excerptSerialized = markdown.Transform(result.Excerpt ?? string.Empty); var pageHeader = new Page { FileName = file.Name, MarkdownHeader = rawSettings, Content = bodySerialized, ContentExcerpt = excerptSerialized, Settings = settings, Date = date, Url = "/" + slug }; pageHeader.SetSnowSettings(snowSettings); pageHeader.SetHeaderSettings(settings); return(pageHeader); }
public void Given_File_Should_Return_Tuple_With_Item1_Containing_Header() { var fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-1.md"); const string expected = @"--- layout: post series: name: 123 current: 1 part: test part 1 part: test part 2 part: test part 3 title: some title ---"; var result = MarkdownFileParser.ParseDataFromFile(fileData); Assert.Equal(expected, result.Header); }