Helper routines for generating source code

This includes "signing" source to detect modifications, and
maintaining user-modified sections. Hooray!
This commit is contained in:
John Doty 2024-09-06 11:50:17 -07:00
parent 0243b0bf77
commit 4941cd049c
2 changed files with 217 additions and 0 deletions

View 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
"""
)