def test_build_section_tree_appendix_through(self):
        line1 = u"§ 201.20 Super Awesome Section"
        line2 = "\n(a) references Model Forms A-30(a) through (b)"

        tree = reg_text.build_section_tree(line1+line2, 201)
        self.assertEqual(tree.text, "\n")
        self.assertEqual(1, len(tree.children))
    def test_build_section_tree_nonspace(self):
        line1 = u"§ 201.20. Super Awesome Section"
        line2 = "\nContents contents"

        tree = reg_text.build_section_tree(line1+line2, 201)
        self.assertEqual(line2, tree.text)
        self.assertEqual(['201', '20'], tree.label)
        self.assertEqual(line1, tree.title)
        self.assertEqual(0, len(tree.children))
 def test_build_section_tree(self):
     """Should be just like build_paragraph tree, but with a label"""
     line1 = u"§ 201.20 Super Awesome Section"
     line2 = u"\nThis (a) is a good (1) test (2) of (3) some (b) body."
     tree = reg_text.build_section_tree(line1+line2, 201)
     p_tree = reg_text.regParser.build_tree(line2, label=['201', '20'])
     self.assertEqual(p_tree.text, tree.text)
     self.assertEqual(p_tree.children, tree.children)
     self.assertEqual(['201', '20'], tree.label)
     self.assertEqual(line1, tree.title)
    def test_build_section_tree_a_or_b1(self):
        line1 = u"§ 201.20 Super Awesome Section"
        line2 = "\n(a) a (b) b (c) see paragraph (a) or (b)(1) of "
        line2 += "this section"

        tree = reg_text.build_section_tree(line1+line2, 201)
        self.assertEqual(tree.text, "\n")
        self.assertEqual(3, len(tree.children))
        child = tree.children[2]
        self.assertEqual(child.text, "(c) see paragraph (a) or (b)(1) " +
                                     "of this section")
        self.assertEqual(0, len(child.children))
    def test_build_section_tree_appendix(self):
        """Should should not break on references to appendices."""
        line1 = u"§ 201.20 Super Awesome Section"
        line2a = "\n(a) Par 1 references Q-5(b) through (d) of Appendix Q"
        line2b = "\n(a) Par 1 references Q-5(a) through (d) of Appendix Q"
        line2c = "\n(a) Par 1 references Q-5(a) of Appendix Q"

        for line2 in [line2a, line2b, line2c]:
            tree = reg_text.build_section_tree(line1+line2, 201)
            self.assertEqual(tree.text, "\n")
            self.assertEqual(1, len(tree.children))
            child = tree.children[0]
            self.assertEqual(child.text, line2[1:])
            self.assertEqual(0, len(child.children))
    def test_build_section_tree_italics_as_plaintext(self):
        line1 = u"§ 201.20 Super Awesome Section"
        line2 = "\n(a)(1)(i) paragraphs (c)(2)(ii)(A)(1) and (B) content"

        tree = reg_text.build_section_tree(line1+line2, 201)
        self.assertEqual(1, len(tree.children))
        self.assertEqual(['201', '20'], tree.label)
        tree = tree.children[0]
        self.assertEqual(1, len(tree.children))
        self.assertEqual(['201', '20', 'a'], tree.label)
        tree = tree.children[0]
        self.assertEqual(1, len(tree.children))
        self.assertEqual(['201', '20', 'a', '1'], tree.label)
        tree = tree.children[0]
        self.assertEqual(0, len(tree.children))
        self.assertEqual(['201', '20', 'a', '1', 'i'], tree.label)