def test_no_matching_lines(self):
        lines = """\
>> Episode 1
Lorem ipsum.
Line 2.

>> Episode 2
Exciting ending!
What will happen next!""".splitlines()
        with self.assertRaises(ChapterError):
            get_chapters_data(lines, self.prologuename, self.chapter_strings)
    def test_chapter_on_last_line(self):
        lines = """\
>> CHAPTER 1
Lorem ipsum.
Line 2.

>> CHAPTER 2""".splitlines()
        result_linenumbers, result_items = get_chapters_data(lines, self.prologuename, self.chapter_strings)
        self.assertEqual(self.linenumbers, result_linenumbers)
        items = ["prologue\n   0", "1\n   4", "2\n   0"]
        self.assertEqual(items, result_items)
    def test_mixed_chapter_formats(self):
        lines = """\
>> CHAPTER 1
Lorem ipsum.
Line 2.

>> CHAPTER 2 - Fish
Exciting ending!
What will happen next!""".splitlines()
        result_linenumbers, result_items = get_chapters_data(lines, self.prologuename, self.chapter_strings)
        self.assertEqual(self.linenumbers, result_linenumbers)
        items = ["prologue\n   0", "1\n   4", "2 - Fish\n   6"]
        self.assertEqual(items, result_items)
 def test_default_run(self):
     result_linenumbers, result_items = \
         get_chapters_data(self.lines, self.prologuename, self.chapter_strings)
     self.assertEqual(self.linenumbers, result_linenumbers)
     self.assertEqual(self.items, result_items)
 def test_invalid_chapter_regex(self):
     chapter_strings = [
         ['>> +CHAPTER (?P<num>\\d+)( ?[:-] (?P<name>.+))?', '{num} - {name}'],
     ]
     with self.assertRaisesRegex(ChapterError, 'broken settings'):
         get_chapters_data(self.lines, self.prologuename, chapter_strings)
 def test_no_lines(self):
     with self.assertRaises(ChapterError):
         get_chapters_data([], self.prologuename, self.chapter_strings)