Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Перем _КаталогиТестов;
Перем _ФайлыТестов;
Перем _ИскатьВПодкаталогах;
Перем РегулярноеВыражениеИмяКласса;

Процедура ПриИнициализацииПоделки(Поделка) Экспорт

Expand All @@ -24,7 +25,7 @@
Для каждого Тест Из ФайлыТестов Цикл

Путь = Тест.ПолноеИмя;
ТестовыйНабор = "oneunit_testcase_" + Тест.ИмяБезРасширения;
ТестовыйНабор = "oneunit_testsuite_" + РегулярноеВыражениеИмяКласса.Заменить(Тест.ИмяБезРасширения, "_");

ДобавитьЗавязь = Ложь;

Expand Down Expand Up @@ -105,4 +106,6 @@
_ИскатьВПодкаталогах = ИскатьВПодкаталогах;
_ФайлыТестов = СтрРазделить(ФайлыТестов, ",", Ложь);

РегулярноеВыражениеИмяКласса = Новый РегулярноеВыражение("((?<=^)[^a-zA-Z_а-яА-ЯёЁ]|[^a-zA-Z0-9_а-яА-ЯёЁ])");

КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@
"Не удалось определить путь к тестовому набору"
);

_Имя = СтрЗаменить(Определение.Имя(), "oneunit_testcase_", "");
_Имя = СтрЗаменить(Определение.Имя(), "oneunit_testsuite_", "");

_Представление = СтрШаблон(
"%1 (%2)",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
&Тест
Процедура Тест() Экспорт
КонецПроцедуры

&ТестовыйНабор
&Порядок(13)
Процедура ПриСозданииОбъекта()
КонецПроцедуры
50 changes: 46 additions & 4 deletions tests/Обнаружитель.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

// Тогда

Ожидаем.Что(ТестПлан.Дети().Количество()).Равно(14);
Ожидаем.Что(ТестПлан.Дети().Количество()).Равно(15);

#Область НаборБезКонструктора

Expand Down Expand Up @@ -1118,14 +1118,56 @@

#КонецОбласти

#Область __Тест_Набор_Со_Странным_Именем_1_

ИндексНабора = 14;

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

Ожидаем.Что(ТестПлан.Дети().Получить(ИндексНабора).Дети()).ИмеетДлину(1);

ПроверитьТест(
ТестПлан.Дети().Получить(ИндексНабора).Дети().Получить(0),
ТипыОпределенийТестов.Тест,
"Тест",
"Тест",
"__Тест_Набор_Со_Странным_Именем_1_.Тест",
ОбъединитьПути(".", "tests", "fixtures", "1_Тест-Набор.Со+Странным^Именем_1,.os"),
0,
Списки.ИзЭлементов(),
Списки.ИзЭлементов(),
0
);

#КонецОбласти
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.


#КонецОбласти

КонецПроцедуры

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

Если ПустаяСтрока(ИмяФайла) Тогда
ИмяФайла = Имя;
КонецЕсли;

Путь = ОбъединитьПути(".", "tests", "fixtures", Имя + ".os");
Путь = ОбъединитьПути(".", "tests", "fixtures", ИмяФайла + ".os");

Ожидаем.Что(ТестНабор).ИмеетТип("ОпределениеТестНабора");

Expand All @@ -1135,7 +1177,7 @@
Ожидаем.Что(Строка(ТестНабор)).Равно(Имя + " (" + Путь + ")");

Если ПроверятьТестНабор Тогда
Ожидаем.Что(ТестНабор.ТестНабор()).ИмеетТип("oneunit_testcase_" + Имя);
Ожидаем.Что(ТестНабор.ТестНабор()).ИмеетТип("oneunit_testsuite_" + Имя);
Иначе
Ожидаем.Что(ТестНабор.ТестНабор()).ЭтоНеопределено();
КонецЕсли;
Expand Down