public void Parse_line_with_invalid_starting_chars_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("** Strange Line **");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_chapter_reference_must_go_in_order()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1 First\r\n3:1 Third?");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_chapter_reference_not_starting_with_1_must_throw(string chapterNum)
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n" + chapterNum + ":1 Zeroth chapter.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
 private static IBible CreateBible(string bibleText =
     "B:Job\r\n1:1 First verse\r\n1:2 Second VERSE!\r\n2:1 Third Verse.\r\n2:2 Isn't a verse")
 {
     var parser = new BibleParser();
     var encodedString = Encoding.ASCII.GetBytes(bibleText);
     var str = new MemoryStream(encodedString);
     return parser.Parse(str);
 }
        public void Parse_with_Pre_Verse_with_next_chapter_should_parse()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1 First\r\nPre 2: Second.");

            var bible = parser.Parse(stream);

            Assert.That(bible.Books[BookName.Job].Chapters[1].Verses[0].IsPreVerse, Is.True);
        }
        public void Parse_with_Pre_Verse_with_no_book_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("Pre 1: First, but with no book.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_Pre_Verse_should_parse()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\nPre 1:Pre verse content.");

            var bible = parser.Parse(stream);

            Assert.That(bible.Books[BookName.Job].Chapters[0].Verses[0].IsPreVerse,
                Is.True);
        }
        public void Parse_with_Pre_Verse_with_chapter_not_next_chapter_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1 First\r\nPre 1: Incorrect.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_verse_with_internal_spaces_should_remove_spaces()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1   A  verse   with   internal   spaces  removed.  ");

            var bible = parser.Parse(stream);

            var bibleText = bible.Books[BookName.Job].Chapters[0].Verses[0].Text;
            Assert.That(bibleText, Is.EqualTo("A verse with internal spaces removed."));
        }
        public void Parse_with_Post_Verse_without_chapter_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\nPost: Post data.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_verse_reference_with_invalid_verse_number_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1ST First");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_verse_reference_not_starting_with_1_must_throw(string verseNum)
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:" + verseNum + " Zeroth verse.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_invalid_book_name_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:NotABookName");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_multiple_Post_Verse_in_same_chapter_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1 Data\r\nPost: Post\r\nPost: Post2");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_duplicate_book_names_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Genesis\r\nB:Genesis");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_blank_lines_should_return_Bible()
        {
            var parser = new BibleParser();
            var stream = StringToStream("\r\nB:Genesis\r\n\r\n1:1 Verse 1");

            var bible = parser.Parse(stream);

            Assert.That(bible.Books[BookName.Genesis].Chapters[0].Verses[0].Text,
                        Is.EqualTo("Verse 1"));
        }
        public void Parse_verse_with_no_space_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Titus\r\n1:1NoSpaceHere.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_verse_data_after_Post_Verse_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1 Data\r\nPost: Post\r\n1:3 More data");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_pre_verse_data_with_additional_verses_should_parse()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\nPre 1: Pre verse data.\r\n1:1 More verse data.");

            var bible = parser.Parse(stream);

            var chapter = bible.Books[BookName.Job].Chapters[0];
            var preVerseText = chapter.Verses[0].Text;
            var verseText = chapter.Verses[1].Text;
            Assert.That(preVerseText, Is.EqualTo("Pre verse data."));
            Assert.That(verseText, Is.EqualTo("More verse data."));
        }
        private static void Exercise_Parse_TestData(Action<IBible> assert)
        {
            var parser = new BibleParser();
            var stream = StringToStream(TestData);

            var bible = parser.Parse(stream);

            assert(bible);
        }
        public void Parse_with_Post_Verse_should_parse()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1:1 First\r\nPost: Post data.");

            var bible = parser.Parse(stream);

            Assert.That(bible.Books[BookName.Job].Chapters[0].Verses[1].IsPostVerse,
                        Is.True);
        }
        public void Parse_with_no_book_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("1:1 In the beginning God created the heaven and the earth.");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_verse_reference_with_no_colon_should_throw()
        {
            var parser = new BibleParser();
            var stream = StringToStream("B:Job\r\n1*1 First");

            Assert.Throws<ParseException>(() => parser.Parse(stream));
        }
        public void Parse_with_no_data_should_return_empty_Bible()
        {
            var parser = new BibleParser();
            var stream = StringToStream("");

            var bible = parser.Parse(stream);

            Assert.That(bible.Books.Count, Is.EqualTo(0));
        }
Beispiel #25
0
        private static bool ParseBible(out IBible bible)
        {
            bible = null;

            var args = Environment.GetCommandLineArgs();
            if (args.Length < 2)
            {
                ShowHelp();
                return false;
            }
            var fileName = args[1];

            if (!File.Exists(fileName))
            {
                Console.WriteLine("Input file '{0}' not found.", fileName);
                return false;
            }

            try
            {
                var parser = new BibleParser();
                using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read,
                    FileShare.Read))
                {
                    bible = parser.Parse(stream);
                    return true;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed to parse input file:");
                Console.WriteLine(ex.Message);
                return false;
            }
        }