Helper routines for generating source code
This includes "signing" source to detect modifications, and maintaining user-modified sections. Hooray!
This commit is contained in:
parent
0243b0bf77
commit
4941cd049c
2 changed files with 217 additions and 0 deletions
110
tests/test_generated_source.py
Normal file
110
tests/test_generated_source.py
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
import parser.generated_source as generated_source
|
||||
|
||||
|
||||
def test_signature():
|
||||
input_source = f"""
|
||||
This is a random thing.
|
||||
|
||||
Put your slug here: {generated_source.signature_token()}
|
||||
|
||||
Here are some more things:
|
||||
|
||||
- Machine Generated
|
||||
- More Machine Gnerated
|
||||
{generated_source.begin_manual_section('foo')}
|
||||
- You can edit here!
|
||||
{generated_source.end_manual_section()}
|
||||
- But not here.
|
||||
{generated_source.begin_manual_section('bar')}
|
||||
- You can edit here too!
|
||||
{generated_source.end_manual_section()}
|
||||
- Also not here.
|
||||
"""
|
||||
signed = generated_source.sign_generated_source(input_source)
|
||||
assert signed != input_source
|
||||
assert generated_source.is_signed(signed)
|
||||
assert generated_source.validate_signature(signed)
|
||||
|
||||
|
||||
def test_manual_changes():
|
||||
input_source = f"""
|
||||
This is a random thing.
|
||||
|
||||
Put your slug here: {generated_source.signature_token()}
|
||||
|
||||
Here are some more things:
|
||||
|
||||
- Machine Generated
|
||||
- More Machine Gnerated
|
||||
{generated_source.begin_manual_section('foo')}
|
||||
- XXXXX
|
||||
{generated_source.end_manual_section()}
|
||||
- But not here.
|
||||
"""
|
||||
signed = generated_source.sign_generated_source(input_source)
|
||||
modified = signed.replace("XXXXX", "YYYYY")
|
||||
assert modified != signed
|
||||
|
||||
assert generated_source.is_signed(modified)
|
||||
assert generated_source.validate_signature(modified)
|
||||
|
||||
|
||||
def test_bad_changes():
|
||||
input_source = f"""
|
||||
This is a random thing.
|
||||
|
||||
Put your slug here: {generated_source.signature_token()}
|
||||
|
||||
Here are some more things:
|
||||
|
||||
- Machine Generated
|
||||
- More Machine Gnerated
|
||||
{generated_source.begin_manual_section('foo')}
|
||||
- XXXXX
|
||||
{generated_source.end_manual_section()}
|
||||
- ZZZZZ
|
||||
"""
|
||||
signed = generated_source.sign_generated_source(input_source)
|
||||
modified = signed.replace("ZZZZZ", "YYYYY")
|
||||
assert modified != signed
|
||||
|
||||
assert generated_source.is_signed(modified)
|
||||
assert not generated_source.validate_signature(modified)
|
||||
|
||||
|
||||
def test_merge_changes():
|
||||
original_source = f"""
|
||||
A
|
||||
// {generated_source.begin_manual_section('foo')}
|
||||
B
|
||||
// {generated_source.end_manual_section()}
|
||||
C
|
||||
// {generated_source.begin_manual_section('bar')}
|
||||
D
|
||||
// {generated_source.end_manual_section()}
|
||||
"""
|
||||
new_source = f"""
|
||||
E
|
||||
// {generated_source.begin_manual_section('bar')}
|
||||
F
|
||||
// {generated_source.end_manual_section()}
|
||||
// {generated_source.begin_manual_section('foo')}
|
||||
G
|
||||
// {generated_source.end_manual_section()}
|
||||
H
|
||||
"""
|
||||
|
||||
merged = generated_source.merge_existing(original_source, new_source)
|
||||
assert (
|
||||
merged
|
||||
== f"""
|
||||
E
|
||||
// {generated_source.begin_manual_section('bar')}
|
||||
D
|
||||
// {generated_source.end_manual_section()}
|
||||
// {generated_source.begin_manual_section('foo')}
|
||||
B
|
||||
// {generated_source.end_manual_section()}
|
||||
H
|
||||
"""
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue