Source code for regulations.tests.layers_appliers_test

from unittest import TestCase
from regulations.generator.layers import layers_applier
from regulations.generator.layers import location_replace


[docs]class LayersApplierTest(TestCase):
[docs] def test_enqueue(self): applier = layers_applier.LayersApplier() element = ('abcd', 'ABCD', []) applier.enqueue(element) priority, retrieved = applier.queue.get() self.assertEquals(priority, -4) self.assertEquals(retrieved, element)
[docs] def test_list_enqueue(self): applier = layers_applier.LayersApplier() elements = [('abcd', 'ABCD', []), ('efghi', 'EFG', [12])] applier.enqueue_from_list(elements) priority, retrieved = applier.queue.get() self.assertEquals(priority, -5) self.assertEqual(elements[1], retrieved) priority, retrieved = applier.queue.get() self.assertEquals(priority, -4) self.assertEqual(elements[0], retrieved)
[docs] def test_replace_all(self): applier = layers_applier.LayersApplier() applier.text = ('Prefix test <a \nhref="url" data="test">link ' '\ntest</a> postfix text') applier.replace_all('test', 'linksecondword') replaced = ('Prefix linksecondword <a \nhref="url" data="test">link ' '\nlinksecondword</a> postfix text') self.assertEquals(applier.text, replaced)
[docs] def test_find_all_offsets(self): pattern = 'ABCD' text = 'The grey fox ABCD jumped over the fence ABCD' offsets = location_replace.LocationReplace.find_all_offsets(pattern, text) self.assertEquals(offsets, [(13, 17), (40, 44)])
[docs] def test_find_offsets_no_pattern(self): pattern = 'ABCD' text = 'The grey fox jumped over the fence' offsets = location_replace.LocationReplace.find_all_offsets(pattern, text) self.assertEquals(offsets, [])
[docs] def test_replace_at(self): text = 'The grey fox ABCD jumped ABCD over the fence ABCD' applier = layers_applier.LayersApplier() applier.text = text applier.replace_at('ABCD', '<a>ABCD</a>', [0, 2]) self.assertEquals( applier.text, 'The grey fox <a>ABCD</a> jumped ABCD over the fence <a>ABCD</a>')
[docs] def test_update_offsets(self): lr = location_replace.LocationReplace() lr.offset_starter = 5 pattern = 'ABCD' text = ('The grey <a href="link">ABCD</a> jumped over the ABCD fence ' 'on a ABCD day') lr.update_offsets(pattern, text) self.assertEqual(lr.offset_starter, 5) self.assertEqual(lr.offset_counters, [5, 6, 7]) self.assertEqual(list(lr.offsets.keys()), [5, 6, 7]) self.assertEqual(lr.offsets[5], (24, 28))
[docs] def test_update_offset_starter(self): lr = location_replace.LocationReplace() lr.offset_counters = [5, 6, 7] lr.update_offset_starter() self.assertEqual(lr.offset_starter, 8)
[docs] def test_replace_at_case_sensitive(self): original = 'state' replacement = '<a href="link_url">state</a>' locations = [0, 1, 2] applier = layers_applier.LayersApplier() applier.text = "<em>(6)</em> <dfn> Under state law. </dfn> State law." applier.replace_at(original, replacement, locations) result = (u"<em>(6)</em> <dfn> Under <a href=\"link_url\">state</a> " u"law. </dfn> State law.") self.assertEquals(applier.text, result)
[docs] def test_replace_no_original(self): original = 'federal' replacement = '<a href="link_url">state</a>' locations = [0, 1, 2] applier = layers_applier.LayersApplier() applier.text = "<em>(6)</em> <dfn> Under state law. </dfn> State law." applier.replace_at(original, replacement, locations) result = "<em>(6)</em> <dfn> Under state law. </dfn> State law." self.assertEquals(applier.text, result)
[docs] def test_replace_skip_location(self): original = 'state' replacement = '<a href="link_url">state</a>' locations = [0, 2] applier = layers_applier.LayersApplier() applier.text = ("<em>(6)</em> <dfn> Under state law. </dfn> state " "law. <dfn> state liability. </dfn>") applier.replace_at(original, replacement, locations) result = ("<em>(6)</em> <dfn> Under <a href=\"link_url\">state</a> " "law. </dfn> state law. <dfn> <a href=\"link_url\">state" "</a> liability. </dfn>") self.assertEquals(applier.text, result)
[docs] def test_apply_layers(self): # Tests same as above but from one level out. original = 'state' replacement = '<a href="link_url">state</a>' locations = [0, 2] text = ("<em>(6)</em> <dfn> Under state law. </dfn> state " "law. <dfn> state liability. </dfn>") applier = layers_applier.LayersApplier() applier.enqueue((original, replacement, locations)) applier.apply_layers(text) result = ("<em>(6)</em> <dfn> Under <a href=\"link_url\">state</a> " "law. </dfn> state law. <dfn> <a href=\"link_url\">state" "</a> liability. </dfn>") self.assertEquals(applier.text, result)
[docs] def test_apply_layers_escaping(self): # See https://github.com/eregs/regulations-site/issues/514 and # https://github.com/fecgov/fec-eregs/issues/382 # # It appears that we had a holdover step of unescaping that, thanks to # looser interpretations in Python 3.6 (specifically, ``&sec`` was # treated as a valid escape even without a trailing semicolon) started # breaking links that have a ``&section`` parameter. original = 'state' replacement = '<a href="link_url">state</a>' locations = [0, 2] text = ("<em>(6)</em> <dfn> Under state law. </dfn> state " "law. <dfn> state liability. </dfn>" "<a href='http://example.org?one=1&section2'>test</a>") applier = layers_applier.LayersApplier() applier.enqueue((original, replacement, locations)) applier.apply_layers(text) result = ("<em>(6)</em> <dfn> Under <a href=\"link_url\">state</a> " "law. </dfn> state law. <dfn> <a href=\"link_url\">state" "</a> liability. </dfn>" "<a href='http://example.org?one=1&section2'>test</a>") self.assertEquals(applier.text, result)