python / test_protected_text.py
import ast
import copy
from pathlib import Path
import server
from protected_text import TRANSLATIONS, protected_block
from review import build_review, _cell
def test_all_current_rule_conditions_and_impacts_have_reviewed_translations():
tree = ast.parse(Path(server.__file__).read_text(encoding='utf-8-sig'))
texts = set()
for node in ast.walk(tree):
if isinstance(node, ast.Call) and isinstance(node.func, ast.Name) and node.func.id == '_finding':
conditions, impact = node.args[5:7]
if isinstance(conditions, ast.List):
texts.update(ast.literal_eval(conditions))
if isinstance(impact, ast.Constant):
texts.add(impact.value)
if isinstance(node, ast.Assign):
names = [t.id for t in node.targets if isinstance(t, ast.Name)]
if 'rules' in names and isinstance(node.value, ast.Dict):
for rule in ast.literal_eval(node.value).values():
texts.update(rule[2])
texts.add(rule[3])
if 'conditions' in names and isinstance(node.value, ast.List):
texts.update(ast.literal_eval(node.value))
assert texts
assert texts <= TRANSLATIONS.keys(), texts - TRANSLATIONS.keys()
def test_unknown_rule_text_is_preserved_and_escaped_without_guessed_translation():
finding = {'required_conditions': ['<script>|[instruction](url)'],
'conditional_impact': {'level': 'high', 'description': 'NEW RULE'}}
block, status = protected_block(finding, '高', _cell)
assert status == 'untranslated_source_preserved'
assert '日本語定型文未登録' in block and 'NEW RULE' in block
assert '<script>' not in block and '[instruction](url)' not in block
def test_captured_rules_keep_source_and_deterministic_japanese_without_network():
import json
for name in ('hoju', 'base'):
report = json.loads((Path(__file__).parent / 'evaluation' / f'{name}.json').read_text(encoding='utf-8'))
original = copy.deepcopy(report)
review, _ = build_review(report, render_markdown=False)
assert original == report
assert all(row['translation_status'] == 'reviewed' for row in review['finding_rows'])
mutable = next(row for row in review['finding_rows'] if row['finding'] == 'sri_mutable_url')
assert '侵害の有無は未確認です。' in mutable['protected_markdown']
assert '有害' not in mutable['protected_markdown']
assert '固定された整合性' in mutable['protected_markdown']
assert review == build_review(report, render_markdown=False)[0]
python / test_protected_text.py
import ast
import copy
from pathlib import Path
import server
from protected_text import TRANSLATIONS, protected_block
from review import build_review, _cell
def test_all_current_rule_conditions_and_impacts_have_reviewed_translations():
tree = ast.parse(Path(server.__file__).read_text(encoding='utf-8-sig'))
texts = set()
for node in ast.walk(tree):
if isinstance(node, ast.Call) and isinstance(node.func, ast.Name) and node.func.id == '_finding':
conditions, impact = node.args[5:7]
if isinstance(conditions, ast.List):
texts.update(ast.literal_eval(conditions))
if isinstance(impact, ast.Constant):
texts.add(impact.value)
if isinstance(node, ast.Assign):
names = [t.id for t in node.targets if isinstance(t, ast.Name)]
if 'rules' in names and isinstance(node.value, ast.Dict):
for rule in ast.literal_eval(node.value).values():
texts.update(rule[2])
texts.add(rule[3])
if 'conditions' in names and isinstance(node.value, ast.List):
texts.update(ast.literal_eval(node.value))
assert texts
assert texts <= TRANSLATIONS.keys(), texts - TRANSLATIONS.keys()
def test_unknown_rule_text_is_preserved_and_escaped_without_guessed_translation():
finding = {'required_conditions': ['<script>|[instruction](url)'],
'conditional_impact': {'level': 'high', 'description': 'NEW RULE'}}
block, status = protected_block(finding, '高', _cell)
assert status == 'untranslated_source_preserved'
assert '日本語定型文未登録' in block and 'NEW RULE' in block
assert '<script>' not in block and '[instruction](url)' not in block
def test_captured_rules_keep_source_and_deterministic_japanese_without_network():
import json
for name in ('hoju', 'base'):
report = json.loads((Path(__file__).parent / 'evaluation' / f'{name}.json').read_text(encoding='utf-8'))
original = copy.deepcopy(report)
review, _ = build_review(report, render_markdown=False)
assert original == report
assert all(row['translation_status'] == 'reviewed' for row in review['finding_rows'])
mutable = next(row for row in review['finding_rows'] if row['finding'] == 'sri_mutable_url')
assert '侵害の有無は未確認です。' in mutable['protected_markdown']
assert '有害' not in mutable['protected_markdown']
assert '固定された整合性' in mutable['protected_markdown']
assert review == build_review(report, render_markdown=False)[0]