示例#1
0
 def test_apply_diff(self):
     diff = {'204': {'text': [('delete', 0, 2), ('insert', 4, 'AAB')],
                     'op': ''}}
     da = diff_applier.DiffApplier(diff, None)
     da.apply_diff('acbd', '204')
     new_text = da.get_text()
     self.assertEquals('<del>ac</del>bd<ins>AAB</ins>', new_text)
示例#2
0
    def test_tree_changes_new_section(self):
        diff = {'9999-25': {'op': 'added',
                            'node': {'text': 'Some Text',
                                     'node_type': 'REGTEXT',
                                     'label': ['9999', '25'],
                                     'children': []}}}
        old_tree = {}
        da = diff_applier.DiffApplier(diff, '9999-25')
        da.tree_changes(old_tree)

        self.assertEqual(old_tree['label'], ['9999', '25'])
 def test_process_node_title_diff(self):
     builder = HTMLBuilder(None, None, None)
     diff = {
         '204': {
             'title': [('delete', 0, 2), ('insert', 4, 'AAC')],
             'text': [('delete', 0, 2), ('insert', 4, 'AAB')],
             'op': ''
         }
     }
     da = diff_applier.DiffApplier(diff, None)
     node = {"label_id": "204", "title": "abcd", 'node_type': APPENDIX}
     builder.diff_applier = da
     builder.process_node_title(node)
     self.assertEqual('<del>ab</del>cd<ins>AAC</ins>', node['header'])
示例#4
0
    def test_add_nodes_empty_tree(self):
        tree = {}
        new_node = {
            'text': 'new node text',
            'children': [],
            'label_id': '204-2',
            'label': ['204', '2'],
            'node_type': REGTEXT
        }
        da = diff_applier.DiffApplier({}, None)
        adds = tree_builder.AddQueue()
        adds.insert_all([('204-2', new_node)])

        da.add_nodes_to_tree(tree, adds)
 def test_process_node_title_section_space_diff(self):
     """" Diffs and sections spaces need to place nicely together. """
     builder = HTMLBuilder(None, None, None)
     diff = {'204': {'title': [('delete', 7, 9), ('insert', 10, 'AAC')],
                     'text':  [('delete', 0, 2), ('insert', 4, 'AAB')],
                     'op': ''}}
     da = diff_applier.DiffApplier(diff, None)
     node = {
         "label_id": u"204",
         "title": u"§ 101.6 abcd",
         'node_type': APPENDIX
     }
     builder.diff_applier = da
     builder.process_node_title(node)
     self.assertEqual(
         u'§&nbsp;101.6<del> a</del>b<ins>AAC</ins>cd', node['header'])
示例#6
0
    def test_add_nodes_child_ops(self):
        """If we don't know the correct order of children, attempt to use data
        from `child_ops`"""
        def mk_node(section):
            return {
                'label': ['100', section],
                'node_type': 'regtext',
                'children': []
            }

        node_1, node_2 = mk_node('1'), mk_node('2')
        node_2a, node_3 = mk_node('2a'), mk_node('3')
        original = {
            'label': ['100'],
            'node_type': 'regtext',
            'children': [node_1, node_2]
        }

        diff = {
            '100': {
                'op':
                diff_applier.DiffApplier.MODIFIED_OP,
                'child_ops': [[diff_applier.DiffApplier.EQUAL, 0, 1],
                              [diff_applier.DiffApplier.DELETE, 1, 2],
                              [diff_applier.DiffApplier.INSERT, 1, ['100-2a']],
                              [diff_applier.DiffApplier.INSERT, 2, ['100-3']]]
            },
            '100-2': {
                'op': diff_applier.DiffApplier.DELETED_OP
            },
            '100-2a': {
                'op': diff_applier.DiffApplier.ADDED_OP,
                'node': node_2a
            },
            '100-3': {
                'op': diff_applier.DiffApplier.ADDED_OP,
                'node': node_3
            }
        }

        adds = tree_builder.AddQueue()
        adds.insert_all([('100-2a', node_2a), ('100-3', node_3)])

        da = diff_applier.DiffApplier(diff, None)
        da.add_nodes_to_tree(original, adds)
        self.assertEqual(original['child_labels'],
                         ['100-1', '100-2', '100-2a', '100-3'])
示例#7
0
    def test_add_nodes_to_tree(self):
        tree = self.build_tree()

        new_node = {
            'text': 'child text',
            'children': [],
            'label_id': '204-2',
            'label': ['204', '2'],
            'node_type': REGTEXT
        }

        da = diff_applier.DiffApplier({}, None)
        adds = tree_builder.AddQueue()
        adds.insert_all([('204-2', new_node)])

        da.add_nodes_to_tree(tree, adds)
        self.assertEqual(len(tree['children']), 2)
        self.assertEqual(tree['children'][0], new_node)
示例#8
0
    def test_new_regtext_changes(self, get_appliers, ApiReader):
        """We can add a whole new section without explosions"""
        amendments = [{'instruction': '3. Add subpart M',
                       'changes': [
                           ['111-Subpart-M', [{'node': {
                               'label': ['111', 'Subpart', 'M'],
                               'title': 'A New Subpart',
                               'child_labels': ['111-42', '111-43',
                                                '111-44', '111-45']}}]],
                           ['111-42', [{'some': 'thing'}]],
                           ['111-43', [{'some': 'thing'}]],
                           ['111-44', [{'some': 'thing'}]],
                           ['111-45', [{'some': 'thing'}]]]},
                      {'instruction': '4. Unrelated'}]
        version_info = {'111': {'left': '234-567', 'right': '8675-309'}}

        # Section did not exist before
        ApiReader.return_value.regulation.return_value = None
        diff = {'111-44': {'op': 'added', 'node': {
            'text': 'New node text', 'node_type': 'regtext',
            'label': ['111', '44']}}}
        get_appliers.return_value = (
            layers_applier.InlineLayersApplier(),
            layers_applier.ParagraphLayersApplier(),
            layers_applier.SearchReplaceLayersApplier(),
            diff_applier.DiffApplier(diff, '111-44'))

        result = preamble.CFRChangesView.regtext_changes_context(
            amendments, version_info, '111-44', '8675-309', 0)
        self.assertEqual(result['instructions'], ['3. Add subpart M'])
        self.assertEqual(result['tree']['marked_up'],
                         '<ins>New node text</ins>')
        self.assertEqual(1, len(result['subparts']))
        subpart_info = result['subparts'][0]
        self.assertEqual('M', subpart_info.letter)
        self.assertEqual('A New Subpart', subpart_info.title)
        self.assertEqual(2, subpart_info.idx)
        self.assertEqual(4, len(subpart_info.urls))
        self.assertIn('111-42', subpart_info.urls[0])
        self.assertIn('111-43', subpart_info.urls[1])
        self.assertIn('111-44', subpart_info.urls[2])
        self.assertIn('111-45', subpart_info.urls[3])
示例#9
0
    def test_set_child_labels_reorder(self):
        """Nodes which have been _moved_ should be ordered in their final
        resting position"""
        node1 = {'label': ['1', '1'], 'node_type': 'regtext', 'children': []}
        node2 = {'label': ['1', '2'], 'node_type': 'regtext', 'children': []}
        root = {
            'label': ['1'],
            'node_type': 'regtext',
            'children': [node1, node2]
        }

        diff = {
            '1': {
                'op':
                diff_applier.DiffApplier.MODIFIED_OP,
                'child_ops':
                [[diff_applier.DiffApplier.DELETE, 0, 2],
                 [diff_applier.DiffApplier.INSERT, 0, ['1-2', '1-1']]]
            }
        }

        da = diff_applier.DiffApplier(diff, None)
        da.set_child_labels(root)
        self.assertEqual(root['child_labels'], ['1-2', '1-1'])
示例#10
0
 def test_delete_all(self):
     da = diff_applier.DiffApplier({}, None)
     original = 'abcd'
     deleted = da.delete_all(original)
     self.assertEqual('<del>abcd</del>', deleted)
示例#11
0
 def create_diff_applier(self):
     diff = {'some': 'diff'}
     da = diff_applier.DiffApplier(diff, None)
     text = "abcd"
     da.deconstruct_text(text)
     return da
示例#12
0
 def test_create_applier(self):
     diff = {'some': 'diff'}
     da = diff_applier.DiffApplier(diff, None)
     self.assertEquals(da.diff, diff)