Skip to content

Conversation

@sfaqer
Copy link
Owner

@sfaqer sfaqer commented Nov 21, 2025

closes: #11

Summary by CodeRabbit

Примечания к выпуску

  • Новые функции

    • Улучшено формирование тестовых наборов с поддержкой новой схемы именования.
    • Добавлена гибкость при указании имени файла теста через новый опциональный параметр.
  • Чинки

    • Обновлена логика преобразования имён тестовых наборов для корректного соответствия новым соглашениям об именовании.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Nov 21, 2025

Прохождение

Добавлена переменная с регулярным выражением для обработки имён классов, обновлена логика формирования имён тестовых наборов с заменой префикса с oneunit_testcase_ на oneunit_testsuite_, добавлен новый тестовый набор и расширена процедура проверки с параметром для имени файла.

Изменения

Когорта / Файлы Описание
Переменная регулярного выражения
src/core/internal/Классы/ЗаготовкаТестирование.os
Добавлена переменная РегулярноеВыражениеИмяКласса и её инициализация для преобразования имён классов в имена тестовых наборов.
Логика формирования имён
src/core/internal/Классы/ОпределениеТестНабора.os
Изменено целевое значение замены при вычислении _Имя: теперь используется oneunit_testsuite_ вместо oneunit_testcase_.
Новая тестовая система
tests/fixtures/1_Тест-Набор.Со+Странным^Именем_1,.os
Добавлен новый файл с экспортируемой процедурой Тест() и процедурой ПриСозданииОбъекта() для проверки обработки необычных имён.
Расширение модуля обнаружения
tests/Обнаружитель.os
Добавлен параметр ИмяФайла к процедуре ПроверитьТестНабор(), расширена логика формирования пути к файлу, добавлена новая область тестирования __Тест_Набор_Со_Странным_Именем_1_.

Диаграмма последовательности

sequenceDiagram
    participant Test as Тестовая система
    participant Discovery as Обнаружитель
    participant Suite as ОпределениеТестНабора
    participant Template as ЗаготовкаТестирование
    
    Test->>Discovery: ПроверитьТестНабор(Набор, Имя, ..., ИмяФайла="")
    activate Discovery
    alt ИмяФайла пуст
        Discovery->>Discovery: ИмяФайла = Имя
    end
    Discovery->>Discovery: Путь = Путь_к_файлу + ".os"
    Discovery->>Suite: Создание объекта тестовой системы
    activate Suite
    Suite->>Template: Получить РегулярноеВыражениеИмяКласса
    activate Template
    Template->>Template: Выполнить замену oneunit_testsuite_ на ""
    Template-->>Suite: Обновлённое имя (_Имя)
    deactivate Template
    Suite-->>Discovery: Объект тестового набора готов
    deactivate Suite
    Discovery-->>Test: Проверка завершена
    deactivate Discovery
Loading

Оценка усилий рецензирования

🎯 3 (Умеренная) | ⏱️ ~25 минут

  • Требуют внимания:
    • Изменение префикса oneunit_testcase_oneunit_testsuite_ может влиять на совместимость с существующими тестовыми наборами
    • Логика по умолчанию для ИмяФайла требует проверки корректности формирования пути во всех сценариях
    • Новый тестовый набор с необычным именем должен корректно обрабатываться регулярным выражением в ЗаготовкаТестирование.os
    • Взаимодействие между компонентами при работе с новым параметром

Стихотворение

Кролик слышит в тестах звон,
Вот префиксов смена — он!
С testsuite_ пришли беда и благодать,
Теперь с файлами проще дело стало уж считать,
Имена причудливые вмиг приручены! 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Название PR точно описывает основное изменение: исправление ошибки при регистрации тестовых наборов из файлов с невалидными идентификаторами.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch bugfix/11

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/core/internal/Классы/ЗаготовкаТестирование.os (1)

8-8: Санитизация имени файла через РегулярноеВыражениеИмяКласса выглядит корректной

Логика формирования имени набора
"oneunit_testsuite_" + РегулярноеВыражениеИмяКласса.Заменить(Тест.ИмяБезРасширения, "_")
хорошо решает задачу: все символы, не подходящие под «идентификатор» (включая первый недопустимый символ), заменяются на _, при этом буквы (латиница/кириллица), цифры и _ сохраняются. Это даёт ожидаемое имя вида __Тест_Набор_Со_Странным_Именем_1_ для нового тестового файла и согласуется с проверками в tests/Обнаружитель.os.

В качестве небольшого улучшения можно:

  • Добавить короткий комментарий рядом с инициализацией РегулярноеВыражениеИмяКласса, поясняющий, что первый альтернативный блок паттерна отвечает за первый символ, а второй — за все последующие.
  • (Опционально) Сделать переменную локальной в ПриИнициализацииПоделки или ПриСозданииОбъекта, если нет планов переиспользования её в других процедурах модуля.

Also applies to: 27-29, 109-110

tests/Обнаружитель.os (2)

19-19: Обновлённое ожидаемое количество наборов (15) соответствует добавленному тестовому файлу

Увеличение ожидаемого количества дочерних элементов плана тестов до 15 логично с учётом нового набора __Тест_Набор_Со_Странным_Именем_1_. Важно не забывать поддерживать это значение в актуальном состоянии при дальнейшем добавлении/удалении фикстур.


1163-1171: Новый параметр ИмяФайла и проверка типа тест-набора корректно покрывают кейс «имя файла ≠ имя набора»

Изменения в ПроверитьТестНабор:

  • расширение сигнатуры до
    ...(ТестНабор, Имя, Теги, Таймаут, Условия, ЖизненныйЦикл, ЭтоОдиночка = Ложь, ПроверятьТестНабор = Истина, ИмяФайла = "")
  • установка ИмяФайла = Имя, если он не задан явно;
  • вычисление Путь через ИмяФайла + ".os";
  • проверка типа ТестНабор.ТестНабор() на "oneunit_testsuite_" + Имя

дают:

  • полную обратную совместимость для старых тестов (когда ИмяФайла не передаётся — путь остаётся прежним),
  • возможность явно указать имя файла, отличное от логического имени набора (что и нужно для невалидных идентификаторов),
  • согласованность с новой схемой имён классов (oneunit_testsuite_ + санитизированное имя).

Сама реализация выглядит чистой и читабельной, без лишних побочных эффектов.

Also applies to: 1180-1181

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6f54a9a and 440871d.

📒 Files selected for processing (4)
  • src/core/internal/Классы/ЗаготовкаТестирование.os (3 hunks)
  • src/core/internal/Классы/ОпределениеТестНабора.os (1 hunks)
  • tests/fixtures/1_Тест-Набор.Со+Странным^Именем_1,.os (1 hunks)
  • tests/Обнаружитель.os (3 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: test (dev) / build (ubuntu-latest, dev)
  • GitHub Check: test (default) / build (windows-latest, default)
🔇 Additional comments (2)
tests/fixtures/1_Тест-Набор.Со+Странным^Именем_1,.os (1)

1-8: Фикстура выглядит корректной и минимальной

Структура файла (экспортируемый тест и пустой конструктор набора с &ТестовыйНабор/&Порядок) соответствует ожидаемому шаблону и хорошо подходит для проверки обнаружения наборов с «странными» именами файлов.

src/core/internal/Классы/ОпределениеТестНабора.os (1)

122-123: Префикс oneunit_testsuite_ согласован с новой логикой генерации имён

Замена префикса на "oneunit_testsuite_" при вычислении _Имя выравнивает представление тестового набора с тем, как оно теперь формируется в ЗаготовкаТестирование.os. Это делает Имя() и строковое представление объекта согласованными с проверкой типа в ПроверитьТестНабор ("oneunit_testsuite_" + Имя).

С учётом добавленных тестов в tests/Обнаружитель.os изменение выглядит корректным.

Comment on lines +1121 to +1157
Copy link

@coderabbitai coderabbitai bot Nov 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Вызов ПроверитьТестНабор с голыми , , выглядит как ошибка и может не работать как ожидается

В новом блоке для набора __Тест_Набор_Со_Странным_Именем_1_ вызов:

ПроверитьТестНабор(
    ...,
    Карты.ИзЭлементов(
        "ПередВсеми", Списки.ИзЭлементов(),
        "ПередКаждым", Списки.ИзЭлементов(),
        "ПослеВсех", Списки.ИзЭлементов(),
        "ПослеКаждого", Списки.ИзЭлементов()
    ),
    ,
    ,
    "1_Тест-Набор.Со+Странным^Именем_1,"
);

содержит два пустых аргумента (, ,), что выглядит как опечатка/незавершённое редактирование и делает намерение вызова неочевидным. Судя по сигнатуре процедуры, цель — использовать значения по умолчанию для параметров ЭтоОдиночка и ПроверятьТестНабор, но при этом передать ненулевой ИмяФайла.

Рекомендуемый вариант — явно передать нужный последний параметр, например:

ПроверитьТестНабор(
    ...,
    Карты.ИзЭлементов(
        "ПередВсеми", Списки.ИзЭлементов(),
        "ПередКаждым", Списки.ИзЭлементов(),
        "ПослеВсех", Списки.ИзЭлементов(),
        "ПослеКаждого", Списки.ИзЭлементов()
    ),
    ИмяФайла = "1_Тест-Набор.Со+Странным^Именем_1,"
);

или, если принципиально позиционный вызов, – явно указать флаги:

    ...,
    Карты.ИзЭлементов(...),
    Ложь,
    Истина,
    "1_Тест-Набор.Со+Странным^Именем_1,"
);

Так вызов станет однозначным и не будет зависеть от трактовки «пустых» параметров.

🤖 Prompt for AI Agents
tests/Обнаружитель.os lines 1121-1157: The call to ПроверитьТестНабор includes
two empty positional arguments (`, ,`) which is ambiguous and likely a typo;
replace them with explicit arguments so the intent is clear — either supply the
missing boolean flags positionally (e.g. Ложь, Истина) followed by the filename,
or use a named parameter for the filename (e.g. ИмяФайла =
"1_Тест-Набор.Со+Странным^Именем_1,") so the call is unambiguous and
compiles/behaves as intended.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кролик, OneScript не поддерживает именованные параметры

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sfaqer, спасибо за разъяснение! Понял, что OneScript не поддерживает именованные параметры.

В этом случае использование пустых позиционных аргументов (, ,) для пропуска необязательных параметров ЭтоОдиночка и ПроверятьТестНабор (чтобы они приняли значения по умолчанию) и передачи последнего параметра ИмяФайла является корректным подходом для OneScript. Приношу извинения за путаницу в моём первоначальном комментарии.

Код написан правильно для данной платформы! 🐰

/)/)

(^.^)
(")_(") благодарю за уточнение!


✏️ Learnings added
Learnt from: sfaqer
Repo: sfaqer/OneUnit PR: 16
File: tests/Обнаружитель.os:1121-1157
Timestamp: 2025-11-21T04:58:16.916Z
Learning: OneScript does not support named parameters. To skip optional parameters while providing later ones, use empty positional arguments (e.g., `Функция(Required1, Required2, , , OptionalLast)`) to apply default values.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@sfaqer sfaqer merged commit 15bb971 into master Nov 21, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Баг обработки тестовых наборов с именем содержащим "." или "-"

2 participants