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