def test_line_to_law_node(self): self.assertEqual( Article(title='第一条', children=Paragraph(title='第一項', number=1, sentence='これは第一項です。')), line_to_law_node('第一条 これは第一項です。')) self.assertEqual(Paragraph(number=2, sentence='これは第二項です。'), line_to_law_node('2 これは第二項です。')) self.assertEqual(Article(caption='(テスト)'), line_to_law_node('(テスト)')) self.assertEqual(Item(title='一の二', sentence='これは第一の二号です。'), line_to_law_node('一の二 これは第一の二号です。'))
def build_sample_law_tree(): input_nodes = [ Chapter(title='第一章'), Article(caption='テスト'), Article(title='第一条', children=[Paragraph(title='第一項', sentence='第一条第一項')]), Item(title='第一号', sentence='第一条第一項第一号'), Item(title='第二号', sentence='第一条第一項第二号'), Paragraph(title='第二項', sentence='第一条第二項'), Article(title='第二条'), Paragraph(title='第一項', sentence='第二条第一項') ] builder = LawTreeBuilder() for node in input_nodes[::-1]: builder.add(node) return builder.build()
def test_apply_replace(self): node = Paragraph(title='第一項', sentence='私はネコです') node_finder = LawNodeFinder([node]) action = parse_action_text('第一項中「ネコ」を「イヌ」に改める') apply_replace(action, node_finder) self.assertEqual('私はイヌです', node.sentence)
def test_apply_delete(self): node = Paragraph(title='第一項', sentence='私はネコです') node_finder = LawNodeFinder([node]) action = parse_action_text('第一項中「私は」及び「です」を削る') apply_delete(action, node_finder) self.assertEqual('ネコ', node.sentence)
def test_apply_add_word_fail(self): node = Paragraph(title='第一項', sentence='私はネコです') node_finder = LawNodeFinder([node]) action = parse_action_text('第一項中「サル」の下に「ザメ」を加える') with self.assertRaises(TextNotFoundError): apply_add_word(action, node_finder)
def test_apply_add_word(self): node = Paragraph(title='第一項', sentence='私はネコです') node_finder = LawNodeFinder([node]) action = parse_action_text('第一項中「ネコ」の下に「ザメ」を加える') apply_add_word(action, node_finder) self.assertEqual('私はネコザメです', node.sentence)
def test_apply_replace_multiple_fail(self): node = Paragraph(title='第一項', sentence='私はネコネコです') node_finder = LawNodeFinder([node]) action = parse_action_text('第一項中「ネコ」を「イヌ」に改める') with self.assertRaises(MultipleTextFoundError): apply_replace(action, node_finder)
def test_apply_delete_fail(self): node = Paragraph(title='第一項', sentence='私はネコです') node_finder = LawNodeFinder([node]) action = parse_action_text('第一項中「私は」及び「でした」を削る') with self.assertRaises(TextNotFoundError): apply_delete(action, node_finder) self.assertEqual('私はネコです', node.sentence) # not changed
def test_law_tree_biulder(self): input_nodes = [ Chapter(title='第一章'), Article(caption='テスト'), Article(title='第一条', children=[Paragraph(title='第一項', sentence='第一条第一項')]), Item(title='第一号', sentence='第一条第一項第一号'), Item(title='第二号', sentence='第一条第一項第二号'), Paragraph(title='第二項', sentence='第一条第二項'), Article(title='第二条'), Paragraph(title='第一項', sentence='第二条第一項') ] builder = LawTreeBuilder() for node in input_nodes[::-1]: builder.add(node) output_nodes = builder.build() self.assertEqual(1, len(output_nodes)) chapter = output_nodes[0] self.assertEqual('第一章', chapter.title) self.assertEqual(2, len(chapter.children)) article1 = chapter.children[0] self.assertEqual('第一条', article1.title) self.assertEqual('テスト', article1.caption) self.assertEqual(2, len(article1.children)) paragraph1 = article1.children[0] self.assertEqual('第一条第一項', paragraph1.sentence) self.assertEqual(2, len(paragraph1.children)) item1 = paragraph1.children[0] self.assertEqual('第一条第一項第一号', item1.sentence) self.assertEqual(0, len(item1.children)) item2 = paragraph1.children[1] self.assertEqual('第一条第一項第二号', item2.sentence) self.assertEqual(0, len(item2.children)) paragraph2 = article1.children[1] self.assertEqual('第一条第二項', paragraph2.sentence) self.assertEqual(0, len(paragraph2.children)) article2 = chapter.children[1] self.assertEqual('第二条', article2.title) self.assertEqual('', article2.caption) self.assertEqual(1, len(article2.children)) paragraph3 = article2.children[0] self.assertEqual('第二条第一項', paragraph3.sentence) self.assertEqual(0, len(paragraph3.children))
def test_law_tree_builder_add_fail(self): article = Article(title='第一条') item = Item(title='第一号') paragraph = Paragraph(title='第一項') law_tree_builder = LawTreeBuilder() law_tree_builder.add(paragraph) law_tree_builder.add(item) with self.assertRaises(ValueError): law_tree_builder.add( article ) # failed to add as multiple children exists at different hierarchy (=paragraph and item)