- 새 ui_template_native_menu.ts — 주소 /^[bm]\d/ · 글 입력 칸(input · textarea · contenteditable · 읽기 전용 포함) 제외 · preventDefault 만(우리 메뉴 그대로) - main.ts 공용 진입 한 줄 · cad_host.ts iframe load 때 같은 함수 - 「브라우저 메뉴 그대로 둔다」 주석 셋 바로잡음(B04 지도 · B05 배수 · 3D) - 시험 test_common_native_menu.py (PLAN 39-9a) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UoSr2sqvYtBf1dtQdus88s
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""브라우저 기본 오른쪽 클릭 메뉴 막기(PLAN 39-9a) 회귀검증 — 글 입력 칸 판정 · 막기 · 꺼짐 · 대상 주소.
|
|
|
|
Node 헬퍼(`helper_common_native_menu.cjs`)가 `ui_template/ui_template_native_menu.ts` 를 트랜스파일해
|
|
가짜 창 · 가짜 요소로 돌리고, 여기서 값을 판정함.
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import subprocess
|
|
|
|
import pytest
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def results():
|
|
proc = subprocess.run(
|
|
["node", os.path.join(HERE, "helper_common_native_menu.cjs")],
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
timeout=60,
|
|
)
|
|
assert proc.returncode == 0, proc.stderr
|
|
return json.loads(proc.stdout)
|
|
|
|
|
|
def test_글_입력_칸만_살림(results):
|
|
e = results["editable"]
|
|
assert e["input"] and e["inputNoType"] and e["number"] and e["readonly"]
|
|
assert e["textarea"] and e["editable"]
|
|
assert not (e["div"] or e["canvas"] or e["checkbox"] or e["range"])
|
|
assert not (e["textNode"] or e["none"])
|
|
|
|
|
|
def test_입력_칸_밖은_막음(results):
|
|
b = results["blocked"]
|
|
assert b["div"] and b["canvas"] and b["checkbox"]
|
|
assert not (b["input"] or b["readonly"] or b["textarea"] or b["editable"])
|
|
|
|
|
|
def test_꺼지면_안_막고_이벤트는_안_멈춤(results):
|
|
assert results["off"] is False
|
|
assert results["stopped"] is False # 우리 메뉴 듣기가 그대로 돌아야 함
|
|
assert results["listener"] == [["contextmenu", True]] # 창 캡처 단계
|
|
|
|
|
|
def test_대상_주소는_B_M_만(results):
|
|
r = results["routes"]
|
|
assert r["b01-account"] and r["b05-profile"] and r["b11-loading"]
|
|
assert r["m01-master-data"] and r["m02-master-template"]
|
|
assert not (r["a01-home"] or r["a06-login"] or r["bogus"])
|