zapretgui/tests/test_winws2_language_tokens.py
loop-uh 796ace7d3d
All checks were successful
Zapret source guards / validate (push) Successful in 8s
Редактор пресета Zapret 2 подсказывает опции и Lua-функции, подчёркивает ошибки и предлагает быстрые исправления
- profile/winws2_language: справочник всех опций winws2 (long_options[] из
  zapret2/nfq2/nfqws.c с платформами) и всех Lua-функций поставляемых
  lua-файлов с аргументами; разбор текста так же, как его делит запуск
  (launch_args_from_preset_text) и читает getopt winws2; проверка с точным
  местом ошибки, исправления, подсказки при наборе, описания при наведении.
- Проверка только читает текст: исправления применяются лишь по выбору
  пользователя одним шагом отмены, пресет остаётся точкой истины.
- CodeEditor: волнистое подчёркивание, точки у номеров строк и метки на
  полосе справа, список подсказок внутри редактора (Ctrl+Пробел, Enter, Esc),
  Ctrl+. и меню правой кнопки с исправлениями, F8/Shift+F8 по проблемам.
- Файлы из пресета и реестр фейков проверяются в фоновом потоке.
- Строка статуса пресета: счётчик ошибок и текст проблемы строки курсора.
- То же для текста профиля на странице настройки профиля (Zapret 2).
- Тесты сверяют справочники с исходниками zapret2 и lua-файлами на 100%.
2026-09-28 17:49:56 +03:00

46 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Редактор делит текст пресета на аргументы ровно так же, как запуск.
Если деление расходится, редактор покажет «всё верно» на пресете, который
winws2 прочитает иначе. Эталон — ``launch_args_from_preset_text``.
"""
from __future__ import annotations
from pathlib import Path
import sys
import unittest
PROJECT_SRC = Path(__file__).resolve().parents[1] / "src"
if str(PROJECT_SRC) not in sys.path:
sys.path.insert(0, str(PROJECT_SRC))
BUILTIN_WINWS2 = PROJECT_SRC / "presets" / "builtin" / "winws2"
class Winws2TokensTests(unittest.TestCase):
def assert_same_as_launch(self, text: str) -> None:
from profile.winws2_language.tokens import document_lines, tokenize
from winws_runtime.runners.preset_runner_support import launch_args_from_preset_text
tokens = tokenize(text)
self.assertEqual([token.text for token in tokens], launch_args_from_preset_text(text))
lines = document_lines(text)
for token in tokens:
self.assertEqual(lines[token.line][token.start:token.end], token.text)
def test_inline_options_bom_comments_and_crlf(self) -> None:
self.assert_same_as_launch(
"--wf-tcp-out=443\r\n# comment --new\r\n --filter-tcp=443 --hostlist=lists/a b.txt\r\n"
"\r\n--name=Имя с пробелами (CDN)\r\nstray value\r\n--lua-desync=fake:blob=x --lua-desync=pass\r\n"
)
def test_all_builtin_presets(self) -> None:
paths = sorted(BUILTIN_WINWS2.glob("*.txt"))
self.assertTrue(paths)
for path in paths:
with self.subTest(preset=path.name):
self.assert_same_as_launch(path.read_text(encoding="utf-8"))
if __name__ == "__main__":
unittest.main()