import pytest from collections import OrderedDict from calculate.templates.format.patch_format import PatchFormat from calculate.templates.template_engine import ParametersContainer @pytest.mark.patch class TestParsingMethods: def test_if_input_patch_document_contains_only_regular_expressions_without_any_regex_flags__it_correctly_patches_input_document(self): input_text = ''' First line Another meaningless line. TEXT&DATA ParameterName = Value Another line of endless sadness. ''' output_text = ''' First line Another meaningless line. TEXT_CONFIG ParameterName = NewValue Another line of endless sadness. ''' patch_text = '''TEXT&DATA TEXT_CONFIG ParameterName\\s*=\\s*[a-zA-Z_][a-zA-Z_0-9]* ParameterName = NewValue ''' patch_original = PatchFormat(input_text) patch_template = PatchFormat(patch_text) patch_original.join_template(patch_template) assert patch_original.document_text == output_text def test_if_input_patch_document_contains_regular_expressions_with_global_regex_flags_and_flags_as_attributes__it_correctly_patches_input_document_using_regex_flags(self): input_text = ''' #============================== Share Definitions ============================= [homes] comment = Home Directories browseable = no writable = yes # Un-comment the following and create the netlogon directory for Domain Logons [netlogon] comment = Network Logon Service path = /var/lib/samba/netlogon guest ok = yes writable = no share modes = no ''' output_text = ''' #============================== Share Definitions ============================= [homes] comment = Home Directories browseable = who knows writable = yes # Un-comment the following and create the netlogon directory for Domain Logons [netlogon] comment = Network Logon Service path = /var/lib/samba/netlogon writable = yes share modes = no ''' patch_text = r''' (\[netlogon\].*)writable\s*=\s*[a-zA-Z_][a-zA-Z_0-9]* \1writable = yes (\[homes\].*)browseable\s*=\s*[a-zA-Z_][a-zA-Z_0-9]* \1browseable = who knows (\[netlogon\].*)^\s*guest ok\s*=\s*[a-zA-Z_][a-zA-Z_0-9]*\n \1 ''' parameters = ParametersContainer({'multiline': True, 'dotall': True}) patch_original = PatchFormat(input_text, parameters=parameters) patch_template = PatchFormat(patch_text, parameters=parameters) patch_original.join_template(patch_template) assert patch_original.document_text == output_text