public SongSelectFile Load(string filename) { var sng = new SongSelectFile(); var fields = new List <string>(); var words = new List <string>(); var section = CcliSongFileSection.None; var lines = File.ReadAllLines(@filename); foreach (var l in lines) { var li = l.Trim(); var s = li.Split(new[] { "=" }, StringSplitOptions.None); if (s.Length > 1) { var k = s[0]; var v = s[1]; if (section == CcliSongFileSection.Content) { switch (k) { case "Title": sng.Title = v; break; case "Author": sng.Author = v; break; case "Copyright": sng.Copyright = v; break; case "Admin": sng.Admin = v; break; case "Themes": foreach (var t in v.Split(new[] { "/t" }, StringSplitOptions.RemoveEmptyEntries)) { sng.Themes.Add(t.Trim()); } break; case "Keys": sng.Key = v; break; case "Fields": fields.AddRange(v.Split(new[] { "/t" }, StringSplitOptions.RemoveEmptyEntries)); break; case "Words": words.AddRange(v.Split(new[] { "/t" }, StringSplitOptions.RemoveEmptyEntries)); break; } } } else { if (li == "[File]") { section = CcliSongFileSection.File; } else { var m = Regex.Match(li, "^\\[S A([0-9]+)\\]$"); if (m.Success) { sng.CcliIdentifier = m.Groups[1].Value; section = CcliSongFileSection.Content; } } } } if (fields.Count == 0 || fields.Count != words.Count || sng.Title == null) { throw new IncompleteSongSourceFileException(); } for (var fx = 0; fx < fields.Count; fx++) { var p = new SongSelectFile.Verse { Caption = fields[fx] }; foreach (var l in words[fx].Split(new[] { "/n" }, StringSplitOptions.RemoveEmptyEntries)) { p.Lines.Add(l); } sng.Verses.Add(p); } return(sng); }
public void LoadTest() { ISongFileReader <SongSelectFile> reader = new SongSelectFileReader(); const string filename = "Resources/ccli/Ein Lied für Gott.usr"; SongSelectFile expected = new SongSelectFile { Title = "Ein Lied für Gott" }; expected.Themes.Add("Celebration"); expected.Themes.Add("God's Attributes"); expected.Themes.Add("Love"); expected.Themes.Add("Joy"); expected.Author = "Muster, Hans"; expected.Copyright = "Gemeinfrei (Public Domain)"; expected.Admin = "Verlag ABC"; expected.Key = "E"; var part = new SongSelectFile.Verse { Caption = "Vers 1" }; part.Lines.Add("Lorem ipsum dolor sit amet,"); part.Lines.Add("consectetur adipiscing elit."); part.Lines.Add("Vivamus odio massa,"); part.Lines.Add("lacinia in mollis quis,"); part.Lines.Add("vehicula sed justo"); expected.Verses.Add(part); part = new SongSelectFile.Verse { Caption = "Vers 2" }; part.Lines.Add("Nunc cursus libero non quam lobortis"); part.Lines.Add("ac pharetra leo facilisis."); part.Lines.Add("Proin tortor tellus,"); part.Lines.Add("fermentum mattis euismod eu,"); part.Lines.Add("faucibus vel justo."); expected.Verses.Add(part); part = new SongSelectFile.Verse { Caption = "Vers 3" }; part.Lines.Add("Fusce pellentesque rhoncus felis,"); part.Lines.Add("eu convallis ante tempus a."); part.Lines.Add("Cum sociis natoque penatibus"); part.Lines.Add("et magnis dis parturient montes,"); part.Lines.Add("nascetur ridiculus mus."); expected.Verses.Add(part); SongSelectFile actual = reader.Load(filename); Assert.AreEqual(expected.Title, actual.Title, "Wrong song title"); Assert.AreEqual(expected.Title, actual.GetTitle(), "Wrong song title"); Assert.AreEqual(expected.Author, actual.Author, "Wrong song title"); Assert.AreEqual(expected.Copyright, actual.Copyright, "Wrong copyright"); Assert.AreEqual(expected.Admin, actual.Admin, "Wrong RightsManagement"); Assert.AreEqual(expected.Key, actual.Key, "Wrong key"); CollectionAssert.AreEqual(expected.Themes, actual.Themes, "Wrong themes"); Assert.AreEqual(expected.Verses.Count, actual.Verses.Count, "Verses incomplete"); for (int i = 0; i < expected.Verses.Count; i++) { Assert.AreEqual(expected.Verses[i].Caption, actual.Verses[i].Caption, "Wrong verse name in verse " + i); CollectionAssert.AreEqual(expected.Verses[i].Lines, actual.Verses[i].Lines, "Verse lines incomplete in verse " + i); } }
public void LoadTest() { SongSelectFileMapper mapper = new SongSelectFileMapper(); SongSelectFile source = new SongSelectFile { Title = "Ein Lied für Gott", Author = "Muster, Hans", Copyright = "Gemeinfrei (Public Domain)", Admin = "Verlag ABC", Key = "E" }; source.Themes.Add("Celebration"); source.Themes.Add("God's Attributes"); source.Themes.Add("Love"); source.Themes.Add("Joy"); var verse = new SongSelectFile.Verse { Caption = "Vers 1" }; verse.Lines.Add("Lorem ipsum dolor sit amet,"); verse.Lines.Add("consectetur adipiscing elit."); verse.Lines.Add("Vivamus odio massa,"); verse.Lines.Add("lacinia in mollis quis,"); verse.Lines.Add("vehicula sed justo"); source.Verses.Add(verse); verse = new SongSelectFile.Verse { Caption = "Vers 2" }; verse.Lines.Add("Nunc cursus libero non quam lobortis"); verse.Lines.Add("ac pharetra leo facilisis."); verse.Lines.Add("Proin tortor tellus,"); verse.Lines.Add("fermentum mattis euismod eu,"); verse.Lines.Add("faucibus vel justo."); source.Verses.Add(verse); verse = new SongSelectFile.Verse { Caption = "Vers 3" }; verse.Lines.Add("Fusce pellentesque rhoncus felis,"); verse.Lines.Add("eu convallis ante tempus a."); verse.Lines.Add("Cum sociis natoque penatibus"); verse.Lines.Add("et magnis dis parturient montes,"); verse.Lines.Add("nascetur ridiculus mus."); source.Verses.Add(verse); Song expected = new Song { Title = "Ein Lied für Gott" }; expected.Themes.Add("Celebration"); expected.Themes.Add("God's Attributes"); expected.Themes.Add("Love"); expected.Themes.Add("Joy"); var aut = new SongAuthor { Name = "Muster, Hans" }; expected.Authors.Add(aut); expected.Copyright = "Gemeinfrei (Public Domain)"; expected.RightsManagement = "Verlag ABC"; expected.Key = "E"; var part = new SongPart { Caption = "Vers 1" }; var slide = new SongSlide(); slide.Lines.Add("Lorem ipsum dolor sit amet,"); slide.Lines.Add("consectetur adipiscing elit."); slide.Lines.Add("Vivamus odio massa,"); slide.Lines.Add("lacinia in mollis quis,"); slide.Lines.Add("vehicula sed justo"); part.Slides.Add(slide); expected.Parts.Add(part); part = new SongPart { Caption = "Vers 2" }; slide = new SongSlide(); slide.Lines.Add("Nunc cursus libero non quam lobortis"); slide.Lines.Add("ac pharetra leo facilisis."); slide.Lines.Add("Proin tortor tellus,"); slide.Lines.Add("fermentum mattis euismod eu,"); slide.Lines.Add("faucibus vel justo."); part.Slides.Add(slide); expected.Parts.Add(part); part = new SongPart { Caption = "Vers 3" }; slide = new SongSlide(); slide.Lines.Add("Fusce pellentesque rhoncus felis,"); slide.Lines.Add("eu convallis ante tempus a."); slide.Lines.Add("Cum sociis natoque penatibus"); slide.Lines.Add("et magnis dis parturient montes,"); slide.Lines.Add("nascetur ridiculus mus."); part.Slides.Add(slide); expected.Parts.Add(part); Song actual = mapper.Map(source); Assert.AreEqual(expected.Title, actual.Title, "Wrong song title"); Assert.AreEqual(expected.Language, actual.Language, "Wrong language"); Assert.AreEqual(expected.Copyright, actual.Copyright, "Wrong copyright"); Assert.AreEqual(expected.RightsManagement, actual.RightsManagement, "Wrong RightsManagement"); Assert.AreEqual(expected.Key, actual.Key, "Wrong key"); for (int i = 0; i < expected.Themes.Count; i++) { Assert.AreEqual(expected.Themes[i], actual.Themes[i], "Wrong theme"); } for (int i = 0; i < expected.Authors.Count; i++) { Assert.AreEqual(expected.Authors[i].Name, actual.Authors[i].Name, "Wrong Author"); } Assert.AreEqual(expected.Parts.Count, actual.Parts.Count, "Parts incomplete"); for (int i = 0; i < expected.Parts.Count; i++) { Assert.AreEqual(expected.Parts[i].Caption, actual.Parts[i].Caption, "Wrong verse name in verse " + i); Assert.AreEqual(expected.Parts[i].Slides.Count, actual.Parts[i].Slides.Count, "Slides incomplete in verse " + i); for (int j = 0; j < expected.Parts[i].Slides.Count; j++) { Assert.AreEqual(expected.Parts[i].Slides[j].Lines.Count, actual.Parts[i].Slides[j].Lines.Count, "Slide lines incomplete in verse " + i + " slide " + j); for (int k = 0; k < expected.Parts[i].Slides[j].Lines.Count; k++) { Assert.AreEqual(expected.Parts[i].Slides[j].Lines[k], actual.Parts[i].Slides[j].Lines[k], "Wrong slide lyrics"); } } } }