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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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");
                    }
                }
            }
        }