From 05078542aa80c92422b45343500cd1658ed93e7c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Wed, 15 Jul 2026 16:31:50 +0300 Subject: [PATCH 1/9] =?UTF-8?q?chore:=20=D0=B8=D0=B3=D0=BD=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20.worktrees?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7f39705..37f48b6 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,8 @@ oscript_modules/ .vs/ +# Git +.worktrees/ + # Benchmark -BenchmarkArtifacts/ \ No newline at end of file +BenchmarkArtifacts/ From eaf3e2453650acd2eb496aef4f5aa26d1cc0ba6a Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Tue, 21 Jul 2026 14:19:15 +0300 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=D1=83=D1=87=D0=B8=D1=82=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20oscript.cfg=20=D0=BF=D1=80=D0=B8=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=83=D1=81=D0=BA=D0=B5=20=D0=B1=D0=B5=D0=BD=D1=87=D0=BC?= =?UTF-8?q?=D0=B0=D1=80=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - находить конфигурации OneScript рядом с файлами бенчмарков - подключать локальные зависимости при первичной загрузке - применять конфигурацию конкретного бенчмарка при изолированном запуске - сохранять конфигурацию для файлов без аннотации Бенчмарк --- docs/CLI.md | 1 + ...20\260\321\200\320\272\320\276\320\262.md" | 21 + src/BenchmarkOneScript/cmd/main.os | 2 +- ...1\206\320\270\320\265\320\271OneScript.os" | 164 ++++++++ ...20\277\321\203\321\201\320\272\320\260.os" | 18 + ...0\260\321\206\320\270\320\270OneScript.os" | 91 +++++ ...20\260\321\200\320\272\320\276\320\262.os" | 138 +++++++ ...21\201\321\202\320\265\320\274\321\213.os" | 27 +- ...21\202\321\200\320\276\320\272\320\270.os" | 105 +++++ ...0\260\321\206\320\270\320\270OneScript.os" | 213 ++++++++-- ...20\260\321\200\320\272\320\276\320\262.os" | 66 +-- ...20\260\321\200\320\272\320\276\320\262.os" | 51 ++- ...20\274\320\260\321\200\320\272\320\260.os" | 47 ++- ...0\260\321\202\320\276\321\200JsonBench.os" | 1 + ...20\260\321\200\320\272\320\276\320\262.os" | 1 + ...20\265\321\201\321\201\320\276\320\262.os" | 58 +++ ...1\206\320\270\320\265\320\271OneScript.os" | 295 ++++++++++++++ ...20\260\321\200\320\272\320\276\320\262.os" | 17 + ...0\260\321\206\320\270\320\270OneScript.os" | 292 +++++++++++++ ...0\260\321\206\320\270\320\270OneScript.os" | 382 ++++++++++++++++++ ...20\260\321\200\320\272\320\276\320\262.os" | 75 ++++ ...20\274\320\260\321\200\320\272\320\260.os" | 56 +++ ...20\260\321\200\320\272\320\276\320\262.os" | 149 +++++++ ...20\260\321\200\320\272\320\276\320\262.os" | 2 +- 24 files changed, 2154 insertions(+), 118 deletions(-) create mode 100644 "src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" create mode 100644 "src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" create mode 100644 "src/BenchmarkOneScript/core/common/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\214\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" create mode 100644 "src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\200\320\260\320\275\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\320\276\320\262\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.os" create mode 100644 "tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" diff --git a/docs/CLI.md b/docs/CLI.md index 0004a7c..0962b05 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -24,6 +24,7 @@ benchos run [OPTIONS] [FILE] - если передан каталог, CLI ищет в нем файлы `*.os`, а с опцией `-r` делает это рекурсивно; - если явно передан `.os`-файл без методов с `&Бенчмарк`, CLI считает, что в файле в сценарии расположен один алгоритм; - если передано несколько `.os`-файлов без методов с аннотацией `&Бенчмарк`, каждый из них запускается отдельно, а результаты объединяются в один общий отчет; +- файл `oscript.cfg`, расположенный рядом с файлом бенчмарка, используется для подключения его зависимостей и отдельного запуска; - при запуске каталога ожидаются обычные файлы бенчмарков с аннотациями. ### Опции diff --git "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" index 9e0d21b..55913ec 100644 --- "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" +++ "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" @@ -72,6 +72,27 @@ benchos run -r ./benchmarks - при запуске каталога ожидаются обычные файлы бенчмарков с аннотациями; - автозапуск файлов без `&Бенчмарк` для каталога не применяется. +### Локальные зависимости + +Команда `benchos run` учитывает файлы `oscript.cfg`, расположенные непосредственно +рядом с файлами бенчмарков. Это позволяет подключать зависимости бенчмарка из +локальных каталогов, в том числе когда команда запускается из другого каталога. + +При первичном подключении бенчмарков из найденных файлов конфигурации используются +параметры `lib.system` и `lib.additional`. Если файлов конфигурации несколько, пути +к библиотекам учитываются в порядке переданных файлов и найденных бенчмарков. + +Для изолированного запуска каждого бенчмарка применяются все параметры из файла +`oscript.cfg`, расположенного рядом именно с этим бенчмарком. Его настройки имеют +приоритет над настройками из текущего каталога и каталога программы. Пути из +`lib.system` и `lib.additional` объединяются от локальных к глобальным, а +относительные пути разрешаются относительно каталога соответствующего +`oscript.cfg`. + +То же правило действует для явно переданного `.os`-файла без аннотаций +`&Бенчмарк`: его локальная конфигурация сохраняется при подготовке временного +файла для запуска. + ### Примеры ```bash diff --git a/src/BenchmarkOneScript/cmd/main.os b/src/BenchmarkOneScript/cmd/main.os index 5bdb9c4..903106a 100644 --- a/src/BenchmarkOneScript/cmd/main.os +++ b/src/BenchmarkOneScript/cmd/main.os @@ -4,4 +4,4 @@ #Использовать "." Поделка = Новый Поделка(); -Поделка.ЗапуститьПриложение(); \ No newline at end of file +Поделка.ЗапуститьПриложение(); diff --git "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" new file mode 100644 index 0000000..271b862 --- /dev/null +++ "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" @@ -0,0 +1,164 @@ +Перем _ПутьКТочкеВходаПриложения; // Строка, Неопределено + +#Область ОбработчикиСобытий + +// Инициализирует запускатель приложения с конфигурациями OneScript. +// Точка входа определяется по расположению сценария класса при подготовке повторного запуска. +Процедура ПриСозданииОбъекта() + + _ПутьКТочкеВходаПриложения = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Перезапускает приложение с указанными файлами конфигурации OneScript. +// +// Параметры: +// ФайлыКонфигурацииOneScript - Массив из Строка - Пути к файлам oscript.cfg +// в порядке убывания приоритета +// +// Возвращаемое значение: +// Число, Неопределено - Код возврата дочернего процесса или Неопределено, +// если повторный запуск не требуется +Функция ПерезапуститьСКонфигурацией(ФайлыКонфигурацииOneScript) Экспорт + + Если ПолучитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED") = "1" Тогда + Возврат Неопределено; + КонецЕсли; + + Если Не ТребуетсяПерезапуск(ФайлыКонфигурацииOneScript) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат ЗапуститьСКонфигурацией(ФайлыКонфигурацииOneScript); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ТребуетсяПерезапуск(ФайлыКонфигурацииOneScript) + + Если ФайлыКонфигурацииOneScript.Количество() > 0 Тогда + Возврат Истина; + КонецЕсли; + + ТекущаяКонфигурация = Новый Файл(ОбъединитьПути(ТекущийКаталог(), "oscript.cfg")); + Возврат ТекущаяКонфигурация.Существует() И ТекущаяКонфигурация.ЭтоФайл(); + +КонецФункции + +Функция ЗапуститьСКонфигурацией(ФайлыКонфигурацииOneScript) + + ПутьКТочкеВхода = ПутьКТочкеВходаПриложения(); + МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript(ФайлыКонфигурацииOneScript); + ПараметрыКонфигурацииOneScript = ПараметрыКонфигурацииДляПеременнойСреды(МенеджерПараметров.Прочитать()); + + Процесс = СоздатьИЗапуститьПроцесс( + ПутьКТочкеВхода, + ТекущийКаталог(), + ПараметрыКонфигурацииOneScript + ); + + ОжидатьЗавершениеПроцесса(Процесс); + + Возврат Процесс.КодВозврата; + +КонецФункции + +Функция ПутьКТочкеВходаПриложения() + + Если _ПутьКТочкеВходаПриложения <> Неопределено Тогда + Возврат _ПутьКТочкеВходаПриложения; + КонецЕсли; + + _ПутьКТочкеВходаПриложения = Новый Файл( + ОбъединитьПути(ТекущийСценарий().Каталог, "..", "main.os") + ).ПолноеИмя; + + Возврат _ПутьКТочкеВходаПриложения; + +КонецФункции + +Функция ПараметрыКонфигурацииДляПеременнойСреды(Параметры) + + ЧастиКонфигурации = Новый Массив(); + Для Каждого Параметр Из Параметры Цикл + ЧастиКонфигурации.Добавить(СтрШаблон( + "%1=%2", + Параметр.Ключ, + ЗначениеКонфигурацииДляПеременнойСреды(Параметр.Значение) + )); + КонецЦикла; + + Возврат СтрСоединить(ЧастиКонфигурации, ";"); + +КонецФункции + +Функция ЗначениеКонфигурацииДляПеременнойСреды(Значение) + + Кавычка = """"; + ЭкранированноеЗначение = СтрЗаменить(Строка(Значение), Кавычка, Кавычка + Кавычка); + + Возврат Кавычка + ЭкранированноеЗначение + Кавычка; + +КонецФункции + +Функция СоздатьИЗапуститьПроцесс(ПутьКТочкеВхода, РабочийКаталог, ПараметрыКонфигурацииOneScript) + + ЛокаторИсполняющейСреды = Новый ЛокаторИсполняющейСреды(); + ПутьИсполняемогоФайла = ЛокаторИсполняющейСреды.НайтиИсполняемыйФайлВКаталоге(КаталогПрограммы()); + + ЧастиКоманды = Новый Массив(); + // OneScript извлекает executable до разбора аргументов и снимает только двойные кавычки. + ЧастиКоманды.Добавить( + ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки( + ПутьИсполняемогоФайла + ) + ); + ЧастиКоманды.Добавить( + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + ПутьКТочкеВхода + ) + ); + + Для Каждого Аргумент Из АргументыКоманднойСтроки Цикл + ЧастиКоманды.Добавить( + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + Аргумент + ) + ); + КонецЦикла; + + ПеременныеСредыПроцесса = ПеременныеСреды(); + ПеременныеСредыПроцесса.Вставить("BENCHOS_OSCRIPT_CONFIG_APPLIED", "1"); + ПеременныеСредыПроцесса.Вставить("OSCRIPT_CONFIG", ПараметрыКонфигурацииOneScript); + + Процесс = СоздатьПроцесс( + СтрСоединить(ЧастиКоманды, " "), + РабочийКаталог, + Ложь, + Ложь, + , + ПеременныеСредыПроцесса + ); + + Процесс.Запустить(); + + Возврат Процесс; + +КонецФункции + +Процедура ОжидатьЗавершениеПроцесса(Процесс) + + Пока Не Процесс.Завершен Цикл + Приостановить(100); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" index 85cb16e..905de89 100644 --- "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -65,14 +65,32 @@ Перем _ПарсерПараметровБенчмарковCLI; // ПарсерПараметровБенчмарковCLI +// Инициализирует команду запуска бенчмарков. &КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков") Процедура ПриСозданииОбъекта() _ПарсерПараметровБенчмарковCLI = Новый ПарсерПараметровБенчмарковCLI(); КонецПроцедуры +// Запускает бенчмарки с учетом их локальных конфигураций OneScript. &ВыполнениеКоманды Процедура Запустить() Экспорт + ФайлыКонфигурацииOneScript = Новый ЛокаторФайловКонфигурацииOneScript() + .НайтиФайлыКонфигурации( + _МассивФайлов, + _Рекурсивно + ); + + КодВозврата = Новый ЗапускательПриложенияСКонфигурациейOneScript() + .ПерезапуститьСКонфигурацией( + ФайлыКонфигурацииOneScript + ); + + Если КодВозврата <> Неопределено Тогда + ЗавершитьРаботу(КодВозврата); + Возврат; + КонецЕсли; + Настройки = ПрочитатьНастройки(); ЗапускательФайловБенчмарков = Новый ЗапускательФайловБенчмарков(_МассивФайлов, _Рекурсивно, Настройки); diff --git "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" new file mode 100644 index 0000000..c5a1d50 --- /dev/null +++ "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -0,0 +1,91 @@ +#Использовать fs + +#Область ПрограммныйИнтерфейс + +// Находит файлы конфигурации OneScript для переданных файлов и каталогов бенчмарков. +// Каждый файл возвращается один раз в порядке первого появления. Порядок определяется +// порядком элементов МассивФайлов и нормализованными полными путями файлов внутри каталога. +// +// Параметры: +// МассивФайлов - Массив из Строка - Пути к файлам и каталогам бенчмарков +// Рекурсивно - Булево - Искать файлы бенчмарков во вложенных каталогах +// +// Возвращаемое значение: +// Массив из Строка - Уникальные нормализованные полные пути к файлам oscript.cfg +// в порядке первого появления +Функция НайтиФайлыКонфигурации(МассивФайлов, Рекурсивно = Ложь) Экспорт + + ФайлыКонфигурации = Новый Массив(); + ДобавленныеФайлы = Новый Соответствие(); + РазрешательВходныхФайлов = Новый РазрешательВходныхФайловБенчмарков(); + РазрешенныеВходы = РазрешательВходныхФайлов.Разрешить(МассивФайлов, Рекурсивно); + + Для Каждого РазрешенныйВход Из РазрешенныеВходы Цикл + + Если Не РазрешенныйВход.Разрешен Тогда + Продолжить; + КонецЕсли; + + Если РазрешенныйВход.ВходнойКаталог <> Неопределено Тогда + ДобавитьФайлКонфигурации( + РазрешенныйВход.ВходнойКаталог, + ФайлыКонфигурации, + ДобавленныеФайлы + ); + КонецЕсли; + + Для Каждого ПолноеИмяФайла Из РазрешенныйВход.Файлы Цикл + ДобавитьФайлКонфигурации( + Новый Файл(ПолноеИмяФайла).Путь, + ФайлыКонфигурации, + ДобавленныеФайлы + ); + КонецЦикла; + + КонецЦикла; + + Возврат ФайлыКонфигурации; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьФайлКонфигурации(Каталог, ФайлыКонфигурации, ДобавленныеФайлы) + + ПутьККонфигурации = ФС.НормализоватьПуть(ОбъединитьПути(Каталог, "oscript.cfg")); + Если Не ФС.ФайлСуществует(ПутьККонфигурации) Тогда + Возврат; + КонецЕсли; + + КлючФайла = КлючДедупликацииФайла(ПутьККонфигурации); + Если ДобавленныеФайлы.Получить(КлючФайла) <> Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавленныеФайлы.Вставить(КлючФайла, Истина); + ФайлыКонфигурации.Добавить(ПутьККонфигурации); + +КонецПроцедуры + +Функция КлючДедупликацииФайла(ПутьКФайлу) + + Если ЭтоWindows() Тогда + Возврат НРег(ПутьКФайлу); + КонецЕсли; + + Возврат ПутьКФайлу; + +КонецФункции + +Функция ЭтоWindows() + + ТекущаяПлатформа = Новый СистемнаяИнформация().ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + +#КонецОбласти diff --git "a/src/BenchmarkOneScript/core/common/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\214\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/common/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\214\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..7c0c6ce --- /dev/null +++ "b/src/BenchmarkOneScript/core/common/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\214\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,138 @@ +#Использовать fs +#Использовать collectionos + +#Область ПрограммныйИнтерфейс + +// Разрешает входные пути к файлам и каталогам бенчмарков. +// Файлы каждого каталога возвращаются в порядке нормализованных полных путей. +// Один и тот же файл включается только для первого содержащего его входа. +// +// Параметры: +// МассивВходныхПутей - Массив из Строка - Пути к файлам и каталогам бенчмарков +// Рекурсивно - Булево - Искать *.os во вложенных каталогах +// +// Возвращаемое значение: +// Массив из Структура - Результаты разрешения входов с полями: +// ИсходныйПуть - Строка - Переданный входной путь +// Разрешен - Булево - Признак существующего файла или каталога +// ВходнойКаталог - Строка, Неопределено - Нормализованный путь входного каталога +// Файлы - Массив из Строка - Уникальные нормализованные полные пути к *.os +Функция Разрешить(МассивВходныхПутей, Рекурсивно = Ложь) Экспорт + + Результат = Новый Массив(); + ДобавленныеФайлы = Новый Соответствие(); + + Для Каждого ВходнойПуть Из МассивВходныхПутей Цикл + + Если ФС.КаталогСуществует(ВходнойПуть) Тогда + Результат.Добавить(РазрешитьКаталог(ВходнойПуть, Рекурсивно, ДобавленныеФайлы)); + Иначе + Результат.Добавить(РазрешитьФайл(ВходнойПуть, ДобавленныеФайлы)); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция РазрешитьКаталог(ВходнойПуть, Рекурсивно, ДобавленныеФайлы) + + ВходнойКаталог = ФС.НормализоватьПуть(ВходнойПуть); + НайденныеФайлы = НайтиФайлы(ВходнойКаталог, "*.os", Рекурсивно); + ПолныеИменаФайлов = ОтсортированныеПолныеИменаФайлов(НайденныеФайлы); + Файлы = УникальныеФайлы(ПолныеИменаФайлов, ДобавленныеФайлы); + + Возврат НовыйРезультатРазрешения(ВходнойПуть, Истина, ВходнойКаталог, Файлы); + +КонецФункции + +Функция РазрешитьФайл(ВходнойПуть, ДобавленныеФайлы) + + ПолноеИмяФайла = РаботаСПутямиФайловойСистемы.НайтиПолноеИмяФайлаСценария(ВходнойПуть); + Если ПолноеИмяФайла = Неопределено Тогда + Возврат НовыйРезультатРазрешения( + ВходнойПуть, + Ложь, + Неопределено, + Новый Массив() + ); + КонецЕсли; + + ПолныеИменаФайлов = Новый Массив(); + ПолныеИменаФайлов.Добавить(ПолноеИмяФайла); + Файлы = УникальныеФайлы(ПолныеИменаФайлов, ДобавленныеФайлы); + + Возврат НовыйРезультатРазрешения(ВходнойПуть, Истина, Неопределено, Файлы); + +КонецФункции + +Функция ОтсортированныеПолныеИменаФайлов(НайденныеФайлы) + + ПолныеИменаФайлов = Новый Массив(); + Для Каждого Файл Из НайденныеФайлы Цикл + ПолныеИменаФайлов.Добавить(ФС.НормализоватьПуть(Файл.ПолноеИмя)); + КонецЦикла; + + Массивы.Сортировать(ПолныеИменаФайлов, СравнениеЗначений.ПрямойПорядок()); + + Возврат ПолныеИменаФайлов; + +КонецФункции + +Функция УникальныеФайлы(ПолныеИменаФайлов, ДобавленныеФайлы) + + Результат = Новый Массив(); + + Для Каждого ПолноеИмяФайла Из ПолныеИменаФайлов Цикл + + КлючФайла = КлючДедупликацииФайла(ПолноеИмяФайла); + Если ДобавленныеФайлы.Получить(КлючФайла) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ДобавленныеФайлы.Вставить(КлючФайла, Истина); + Результат.Добавить(ПолноеИмяФайла); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция НовыйРезультатРазрешения(ИсходныйПуть, Разрешен, ВходнойКаталог, Файлы) + + Возврат Новый Структура( + "ИсходныйПуть, Разрешен, ВходнойКаталог, Файлы", + ИсходныйПуть, + Разрешен, + ВходнойКаталог, + Файлы + ); + +КонецФункции + +Функция КлючДедупликацииФайла(ПутьКФайлу) + + Если ЭтоWindows() Тогда + Возврат НРег(ПутьКФайлу); + КонецЕсли; + + Возврат ПутьКФайлу; + +КонецФункции + +Функция ЭтоWindows() + + ТекущаяПлатформа = Новый СистемнаяИнформация().ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + +#КонецОбласти diff --git "a/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index 57c7950..53f08ea 100644 --- "a/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -1,5 +1,30 @@ #Использовать fs +// Находит полный путь к файлу сценария, разрешая относительный путь и имя без расширения. +// +// Параметры: +// ИмяФайла - Строка - Путь к сценарию или его имя без расширения .os +// +// Возвращаемое значение: +// Строка - Нормализованный полный путь к найденному сценарию +// Неопределено - Если сценарий не найден +Функция НайтиПолноеИмяФайлаСценария(ИмяФайла) Экспорт + + ВариантыПутей = Новый Массив(); + ВариантыПутей.Добавить(ИмяФайла); + ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла)); + ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла + ".os")); + + Для Каждого ПолноеИмяФайла Из ВариантыПутей Цикл + Если ФС.ФайлСуществует(ПолноеИмяФайла) Тогда + Возврат ФС.НормализоватьПуть(ПолноеИмяФайла); + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + Функция ПолучитьАбсолютныйПуть(Путь, КаталогРазрешенияПутей) Экспорт Если ЭтоАбсолютныйПуть(Путь) Тогда @@ -60,4 +85,4 @@ Функция ЭтоWindows() Платформа = Новый СистемнаяИнформация().ТипПлатформы; Возврат Платформа = ТипПлатформы.Windows_x86 Или Платформа = ТипПлатформы.Windows_x86_64; -КонецФункции \ No newline at end of file +КонецФункции diff --git "a/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\200\320\260\320\275\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\320\276\320\262\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.os" "b/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\200\320\260\320\275\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\320\276\320\262\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.os" new file mode 100644 index 0000000..32a9f4d --- /dev/null +++ "b/src/BenchmarkOneScript/core/common/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\200\320\260\320\275\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\220\321\200\320\263\321\203\320\274\320\265\320\275\321\202\320\276\320\262\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.os" @@ -0,0 +1,105 @@ +#Область ПрограммныйИнтерфейс + +// Оборачивает путь к исполняемому файлу в двойные кавычки. +// +// Параметры: +// Строка - Строка - Путь к исполняемому файлу +// +// Возвращаемое значение: +// Строка +Функция ОбернутьИсполняемыйФайлВКавычки(Строка) Экспорт + + Кавычка = """"; + Возврат Кавычка + Строка + Кавычка; + +КонецФункции + +// Экранирует аргумент командной строки и оборачивает его в кавычки текущей платформы. +// +// Параметры: +// Строка - Строка - Аргумент командной строки +// +// Возвращаемое значение: +// Строка +Функция ОбернутьАргументКоманднойСтрокиВКавычки(Строка) Экспорт + + Если ЭтоWindows() Тогда + Возврат ОбернутьВКавычкиДляWindows(Строка); + КонецЕсли; + + Возврат ОбернутьВКавычкиДляUnix(Строка); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ОбернутьВКавычкиДляWindows(Строка) + + Кавычка = """"; + Результат = Кавычка; + КоличествоОбратныхКосыхЧерт = 0; + + Для Индекс = 1 По СтрДлина(Строка) Цикл + + ТекущийСимвол = Сред(Строка, Индекс, 1); + Если ТекущийСимвол = "\" Тогда + КоличествоОбратныхКосыхЧерт = КоличествоОбратныхКосыхЧерт + 1; + ИначеЕсли ТекущийСимвол = Кавычка Тогда + Результат = Результат + + ОбратныеКосыеЧерты(КоличествоОбратныхКосыхЧерт * 2 + 1) + + Кавычка; + КоличествоОбратныхКосыхЧерт = 0; + Иначе + Результат = Результат + + ОбратныеКосыеЧерты(КоличествоОбратныхКосыхЧерт) + + ТекущийСимвол; + КоличествоОбратныхКосыхЧерт = 0; + КонецЕсли; + + КонецЦикла; + + Возврат Результат + + ОбратныеКосыеЧерты(КоличествоОбратныхКосыхЧерт * 2) + + Кавычка; + +КонецФункции + +Функция ОбернутьВКавычкиДляUnix(Строка) + + ОдинарнаяКавычка = "'"; + ДвойнаяКавычка = """"; + ЭкранированнаяОдинарнаяКавычка = ОдинарнаяКавычка + + ДвойнаяКавычка + + ОдинарнаяКавычка + + ДвойнаяКавычка + + ОдинарнаяКавычка; + + Возврат ОдинарнаяКавычка + + СтрЗаменить(Строка, ОдинарнаяКавычка, ЭкранированнаяОдинарнаяКавычка) + + ОдинарнаяКавычка; + +КонецФункции + +Функция ОбратныеКосыеЧерты(Количество) + + Результат = ""; + Для Индекс = 1 По Количество Цикл + Результат = Результат + "\"; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ЭтоWindows() + + ТекущаяПлатформа = Новый СистемнаяИнформация().ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + +#КонецОбласти diff --git "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index d44074d..826cca3 100644 --- "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -1,6 +1,11 @@ +#Использовать fs #Использовать logos -Перем _ДополнительныйКаталог; // Строка +Перем _ДополнительныеФайлыКонфигурацииOneScript; // Массив +Перем _ИмяФайлаКонфигурации; // Строка +Перем _ИмяПараметраДополнительныхБиблиотек; // Строка +Перем _ИмяПараметраСистемныхБиблиотек; // Строка +Перем _УчитыватьВсеПараметрыДополнительныхФайлов; // Булево Перем _Лог; // Лог #Область ОбработчикиСобытий @@ -8,14 +13,21 @@ // Обеспечивает чтение и запись конфигурационных файлов OneScript // // Параметры: -// ДополнительныйКаталог - Строка - Дополнительный каталог для поиска файла -// oscript.cfg. Значения из этого каталога -// будут прочитаны с высоким приоритетом и -// могут переопределить настройки из других -// источников. -Процедура ПриСозданииОбъекта(ДополнительныйКаталог = "") - - _ДополнительныйКаталог = ДополнительныйКаталог; +// ДополнительныеФайлыКонфигурацииOneScript - Строка, Массив из Строка, +// ФиксированныйМассив из Строка, Неопределено - +// Пути к файлам oscript.cfg или каталогам с ними +// в порядке убывания приоритета. По умолчанию из +// этих файлов читаются только параметры lib.system +// и lib.additional. +Процедура ПриСозданииОбъекта(ДополнительныеФайлыКонфигурацииOneScript = Неопределено) + + _ИмяФайлаКонфигурации = "oscript.cfg"; + _ИмяПараметраДополнительныхБиблиотек = "lib.additional"; + _ИмяПараметраСистемныхБиблиотек = "lib.system"; + _УчитыватьВсеПараметрыДополнительныхФайлов = Ложь; + _ДополнительныеФайлыКонфигурацииOneScript = НормализоватьДополнительныеФайлыКонфигурацииOneScript( + ДополнительныеФайлыКонфигурацииOneScript + ); _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.МенеджерПараметровКонфигурацииOneScript"); КонецПроцедуры @@ -24,17 +36,31 @@ #Область ПрограммныйИнтерфейс +// Включает чтение всех параметров из дополнительных файлов oscript.cfg. +// По умолчанию из них читаются только параметры lib.system и lib.additional. +// +// Возвращаемое значение: +// МенеджерПараметровКонфигурацииOneScript - Этот объект +Функция УчитыватьВсеПараметрыДополнительныхФайлов() Экспорт + + _УчитыватьВсеПараметрыДополнительныхФайлов = Истина; + + Возврат ЭтотОбъект; + +КонецФункции + // Выполняет поиск и чтение конфигурационных файлов oscript.cfg из всех доступных источников // -// Порядок поиска файлов конфигурации: -// 1. Каталог программы +// Порядок приоритета файлов конфигурации: +// 1. Дополнительные файлы конфигурации в переданном порядке // 2. Текущий каталог -// 3. Каталог стартового сценария -// 4. Дополнительный каталог (если указан) +// 3. Каталог программы // // Особенности: -// - Настройки из файлов с более высоким приоритетом переопределяют предыдущие +// - Настройки из первого подходящего файла имеют приоритет // - Пути к библиотекам (lib.system, lib.additional) автоматически разрешаются +// - Каталоги lib.additional и lib.system из всех файлов объединяются в +// lib.additional от локального к глобальному // // Возвращаемое значение: // Соответствие @@ -51,7 +77,7 @@ // Каталог - Строка - Путь к каталогу, в котором будет создан файл oscript.cfg Процедура ЗаписатьВКаталог(Каталог) Экспорт - ПутьКФайлу = ОбъединитьПути(Каталог, "oscript.cfg"); + ПутьКФайлу = ОбъединитьПути(Каталог, _ИмяФайлаКонфигурации); ЗаписатьВФайл(ПутьКФайлу); КонецПроцедуры @@ -76,7 +102,7 @@ ЗаписьТекста.Закрыть(); _Лог.Отладка("Записаны параметры конфигурации в <%1>", ПутьКФайлу); - + КонецПроцедуры #КонецОбласти @@ -85,35 +111,124 @@ Функция НайтиИПрочитатьФайлы() - ИмяФайла = "oscript.cfg"; - - КаталогиПоиска = Новый Массив(); - КаталогиПоиска.Добавить(КаталогПрограммы()); - КаталогиПоиска.Добавить(ТекущийКаталог()); - КаталогиПоиска.Добавить(СтартовыйСценарий().Каталог); - - Если ЗначениеЗаполнено(_ДополнительныйКаталог) Тогда - КаталогиПоиска.Добавить(_ДополнительныйКаталог); - КонецЕсли; - + ИсточникиКонфигурации = СформироватьИсточникиКонфигурации(); ПрочитанныеНастройки = Новый Соответствие(); + КаталогиБиблиотек = Новый Массив(); - Для Каждого Каталог Из КаталогиПоиска Цикл + Для Каждого ИсточникКонфигурации Из ИсточникиКонфигурации Цикл - ПутьКФайлу = ОбъединитьПути(Каталог, ИмяФайла); - Если Не ФС.ФайлСуществует(ПутьКФайлу) Тогда + Если Не ФС.ФайлСуществует(ИсточникКонфигурации.ПутьКФайлу) Тогда Продолжить; КонецЕсли; - ПрочитатьКонфигурационныйФайл(ПутьКФайлу, ПрочитанныеНастройки); + НастройкиФайла = Новый Соответствие(); + ПрочитатьКонфигурационныйФайл( + ИсточникКонфигурации.ПутьКФайлу, + НастройкиФайла, + ИсточникКонфигурации.ТолькоПараметрыБиблиотек + ); + ДобавитьОтсутствующиеНастройки(ПрочитанныеНастройки, НастройкиФайла); + ДобавитьКаталогиБиблиотек( + КаталогиБиблиотек, + НастройкиФайла[_ИмяПараметраДополнительныхБиблиотек] + ); + ДобавитьКаталогиБиблиотек( + КаталогиБиблиотек, + НастройкиФайла[_ИмяПараметраСистемныхБиблиотек] + ); КонецЦикла; + Если КаталогиБиблиотек.Количество() > 0 Тогда + ПрочитанныеНастройки.Вставить( + _ИмяПараметраДополнительныхБиблиотек, + СтрСоединить(КаталогиБиблиотек, ";") + ); + КонецЕсли; + Возврат ПрочитанныеНастройки; КонецФункции -Процедура ПрочитатьКонфигурационныйФайл(ПутьКФайлу, ПрочитанныеНастройки) +Функция СформироватьИсточникиКонфигурации() + + ИсточникиКонфигурации = Новый Массив(); + Для Каждого ДополнительныйФайлКонфигурацииOneScript Из _ДополнительныеФайлыКонфигурацииOneScript Цикл + ИсточникиКонфигурации.Добавить(НовыйИсточникКонфигурации( + ДополнительныйФайлКонфигурацииOneScript, + Не _УчитыватьВсеПараметрыДополнительныхФайлов + )); + КонецЦикла; + + ИсточникиКонфигурации.Добавить(НовыйИсточникКонфигурации( + ОбъединитьПути(ТекущийКаталог(), _ИмяФайлаКонфигурации), + Ложь + )); + + ИсточникиКонфигурации.Добавить(НовыйИсточникКонфигурации( + ОбъединитьПути(КаталогПрограммы(), _ИмяФайлаКонфигурации), + Ложь + )); + + Возврат ИсточникиКонфигурации; + +КонецФункции + +Функция НовыйИсточникКонфигурации(ПутьКФайлу, ТолькоПараметрыБиблиотек) + + Возврат Новый Структура( + "ПутьКФайлу, ТолькоПараметрыБиблиотек", + ПутьКФайлу, + ТолькоПараметрыБиблиотек + ); + +КонецФункции + +Функция НормализоватьДополнительныеФайлыКонфигурацииOneScript(ДополнительныеФайлыКонфигурацииOneScript) + + НормализованныеФайлы = Новый Массив(); + + Если ДополнительныеФайлыКонфигурацииOneScript = Неопределено Тогда + Возврат НормализованныеФайлы; + КонецЕсли; + + ТипФайлов = ТипЗнч(ДополнительныеФайлыКонфигурацииOneScript); + Если ТипФайлов = Тип("Строка") Тогда + ДобавитьНормализованныйФайл(НормализованныеФайлы, ДополнительныеФайлыКонфигурацииOneScript); + ИначеЕсли ТипФайлов = Тип("Массив") Или ТипФайлов = Тип("ФиксированныйМассив") Тогда + Для Каждого ДополнительныйФайлКонфигурацииOneScript Из ДополнительныеФайлыКонфигурацииOneScript Цикл + ДобавитьНормализованныйФайл(НормализованныеФайлы, ДополнительныйФайлКонфигурацииOneScript); + КонецЦикла; + Иначе + ШаблонИсключения = "Дополнительные файлы конфигурации должны иметь тип Строка, Массив из Строка " + + "или ФиксированныйМассив из Строка, получен тип <%1>"; + ВызватьИсключение СтрШаблон( + ШаблонИсключения, + ТипФайлов + ); + КонецЕсли; + + Возврат НормализованныеФайлы; + +КонецФункции + +Процедура ДобавитьНормализованныйФайл(Файлы, ПутьКФайлу) + + Если ФС.КаталогСуществует(ПутьКФайлу) Тогда + ПутьКФайлу = ОбъединитьПути(ПутьКФайлу, _ИмяФайлаКонфигурации); + КонецЕсли; + + ПолныйПуть = ФС.НормализоватьПуть(ПутьКФайлу); + Если Файлы.Найти(ПолныйПуть) = Неопределено Тогда + Файлы.Добавить(ПолныйПуть); + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьКонфигурационныйФайл( + ПутьКФайлу, + ПрочитанныеНастройки, + ТолькоПараметрыБиблиотек = Ложь) КаталогРазрешенияПутей = Новый Файл(ПутьКФайлу).Путь; @@ -128,8 +243,14 @@ Ключ = НРег(Совпадение.Группы[1].Значение); Значение = Совпадение.Группы[2].Значение; + ЭтоПараметрБиблиотеки = Ключ = _ИмяПараметраСистемныхБиблиотек + Или Ключ = _ИмяПараметраДополнительныхБиблиотек; + + Если ТолькоПараметрыБиблиотек И Не ЭтоПараметрБиблиотеки Тогда + Продолжить; + КонецЕсли; - Если Ключ = "lib.system" Или Ключ = "lib.additional" Тогда + Если ЭтоПараметрБиблиотеки Тогда Значение = РазрешитьПутиКаталоговБиблиотекИзНастройки(Значение, КаталогРазрешенияПутей); КонецЕсли; @@ -139,13 +260,37 @@ КонецПроцедуры +Процедура ДобавитьОтсутствующиеНастройки(Приемник, Источник) + + Для Каждого Параметр Из Источник Цикл + Если Приемник[Параметр.Ключ] = Неопределено Тогда + Приемник.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьКаталогиБиблиотек(КаталогиБиблиотек, КаталогиСтрокой) + + Если Не ЗначениеЗаполнено(КаталогиСтрокой) Тогда + Возврат; + КонецЕсли; + + Для Каждого Каталог Из СтрРазделить(КаталогиСтрокой, ";", Ложь) Цикл + Если КаталогиБиблиотек.Найти(Каталог) = Неопределено Тогда + КаталогиБиблиотек.Добавить(Каталог); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + Функция РазрешитьПутиКаталоговБиблиотекИзНастройки(КаталогиСтрокой, КаталогРазрешенияПутей) Каталоги = СтрРазделить(КаталогиСтрокой, ";", Ложь); РазрешенныеКаталоги = Новый Массив(); Для Каждого Каталог Из Каталоги Цикл - АбсолютныйПуть = ПолучитьАбсолютныйПуть(Каталог, КаталогРазрешенияПутей); + АбсолютныйПуть = ПолучитьАбсолютныйПуть(СокрЛП(Каталог), КаталогРазрешенияПутей); РазрешенныеКаталоги.Добавить(АбсолютныйПуть); КонецЦикла; diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 3c8b33e..cf258e3 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,6 +1,5 @@ #Использовать fs #Использовать logos -#Использовать collectionos Перем _Лог; // Лог Перем _МассивФайлов; // Массив из Строка @@ -114,47 +113,39 @@ Функция НайтиГруппыФайловБенчмарков() ГруппыФайлов = Новый Массив(); - ДобавленныеИсходныеФайлы = Новый МножествоКарта(); ГруппаОбычныхАлгоритмов = Неопределено; + РазрешательВходныхФайлов = Новый РазрешательВходныхФайловБенчмарков(); + РазрешенныеВходы = РазрешательВходныхФайлов.Разрешить(_МассивФайлов, _Рекурсивно); - Для Каждого ИмяФайла Из _МассивФайлов Цикл + Для Каждого РазрешенныйВход Из РазрешенныеВходы Цикл - Если ФС.КаталогСуществует(ИмяФайла) Тогда - - НайденныеФайлы = НайтиФайлы(ИмяФайла, "*.os", _Рекурсивно); - - Для Каждого Файл Из НайденныеФайлы Цикл - - Если ДобавленныеИсходныеФайлы.Содержит(Файл.ПолноеИмя) Тогда - Продолжить; - КонецЕсли; + Если Не РазрешенныйВход.Разрешен Тогда + ВызватьИсключение СтрШаблон("Файл <%1> не существует", РазрешенныйВход.ИсходныйПуть); + КонецЕсли; - ДобавленныеИсходныеФайлы.Добавить(Файл.ПолноеИмя); - ГруппыФайлов.Добавить(НоваяГруппаФайловБенчмарков(МассивФайлов(Файл.ПолноеИмя), Ложь)); - + Если РазрешенныйВход.ВходнойКаталог <> Неопределено Тогда + Для Каждого ПолноеИмяФайла Из РазрешенныйВход.Файлы Цикл + ГруппыФайлов.Добавить(НоваяГруппаФайловБенчмарков(МассивФайлов(ПолноеИмяФайла), Ложь)); КонецЦикла; + Продолжить; + КонецЕсли; - Иначе + Для Каждого ПолноеИмяФайла Из РазрешенныйВход.Файлы Цикл - ПолноеИмяФайла = ПолноеИмяФайлаСценария(ИмяФайла); - Если ДобавленныеИсходныеФайлы.Содержит(ПолноеИмяФайла) Тогда + Если _ПодготовительФайлаБенчмарка.СодержитБенчмарки(ПолноеИмяФайла) Тогда + ГруппыФайлов.Добавить(НоваяГруппаФайловБенчмарков(МассивФайлов(ПолноеИмяФайла), Ложь)); Продолжить; КонецЕсли; - ДобавленныеИсходныеФайлы.Добавить(ПолноеИмяФайла); + Если ГруппаОбычныхАлгоритмов = Неопределено Тогда + ГруппаОбычныхАлгоритмов = НоваяГруппаФайловБенчмарков(Новый Массив(), Истина); + ГруппыФайлов.Добавить(ГруппаОбычныхАлгоритмов); + КонецЕсли; - Если _ПодготовительФайлаБенчмарка.СодержитБенчмарки(ПолноеИмяФайла) Тогда - ГруппыФайлов.Добавить(НоваяГруппаФайловБенчмарков(МассивФайлов(ПолноеИмяФайла), Ложь)); - Иначе - Если ГруппаОбычныхАлгоритмов = Неопределено Тогда - ГруппаОбычныхАлгоритмов = НоваяГруппаФайловБенчмарков(Новый Массив(), Истина); - ГруппыФайлов.Добавить(ГруппаОбычныхАлгоритмов); - КонецЕсли; + ГруппаОбычныхАлгоритмов.Файлы.Добавить(_ПодготовительФайлаБенчмарка.Подготовить(ПолноеИмяФайла)); - ГруппаОбычныхАлгоритмов.Файлы.Добавить(_ПодготовительФайлаБенчмарка.Подготовить(ПолноеИмяФайла)); - КонецЕсли; + КонецЦикла; - КонецЕсли; КонецЦикла; @@ -289,21 +280,4 @@ КонецПроцедуры -Функция ПолноеИмяФайлаСценария(ИмяФайла) - - ВариантыПутей = Новый Массив(); - ВариантыПутей.Добавить(ИмяФайла); - ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла)); - ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла + ".os")); - - Для Каждого ПолноеИмяФайла Из ВариантыПутей Цикл - Если ФС.ФайлСуществует(ПолноеИмяФайла) Тогда - Возврат ФС.НормализоватьПуть(ПолноеИмяФайла); - КонецЕсли; - КонецЦикла; - - ВызватьИсключение СтрШаблон("Файл <%1> не существует", ИмяФайла); - -КонецФункции - #КонецОбласти diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index a246c43..3e550ce 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -42,7 +42,10 @@ _СценарийЗапуска = Новый СценарийЗапускаБенчмарка(_ДескрипторыБенчмарков, _КонфигурацияЗапуска); КаталогРасположенияБенчмарка = Новый Файл(ПутьКФайлуБенчмарка()).Путь; - _МенеджерПараметровКонфигурации = Новый МенеджерПараметровКонфигурацииOneScript(КаталогРасположенияБенчмарка); + ПутьКФайлуКонфигурацииOneScript = ОбъединитьПути(КаталогРасположенияБенчмарка, "oscript.cfg"); + _МенеджерПараметровКонфигурации = Новый МенеджерПараметровКонфигурацииOneScript( + ПутьКФайлуКонфигурацииOneScript + ).УчитыватьВсеПараметрыДополнительныхФайлов(); _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.МенеджерПроцессовБенчмарков"); @@ -115,7 +118,16 @@ _Лог.Отладка("Строка запуска <%1>", СтрокаКоманды); Попытка - Процесс = СоздатьПроцесс(СтрокаКоманды, РабочийКаталог, Истина); + ПеременныеСредыПроцесса = Новый Соответствие(); + ПеременныеСредыПроцесса.Вставить("OSCRIPT_CONFIG", ""); + Процесс = СоздатьПроцесс( + СтрокаКоманды, + РабочийКаталог, + Истина, + Ложь, + , + ПеременныеСредыПроцесса + ); Процесс.Запустить(); Исключение УдалитьАртефакты(); @@ -133,13 +145,21 @@ Функция СформироватьСтрокуКоманды(ПутьИсполняемогоФайла, ПутьСтартовогоСценария) СтрокаКоманды = Новый Массив(); - СтрокаКоманды.Добавить(ОбернутьВКавычкиДляWindows(ПутьИсполняемогоФайла)); + СтрокаКоманды.Добавить( + ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки( + ПутьИсполняемогоФайла + ) + ); Если _ПортОтладки > 0 Тогда СтрокаКоманды.Добавить("-debug=" + Формат(_ПортОтладки, "ЧГ=")); КонецЕсли; - СтрокаКоманды.Добавить(ОбернутьВКавычки(ПутьСтартовогоСценария)); + СтрокаКоманды.Добавить( + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + ПутьСтартовогоСценария + ) + ); СтрокаКоманды = СтрСоединить(СтрокаКоманды, " "); Возврат СтрокаКоманды; @@ -332,27 +352,4 @@ _МенеджерВременныхФайлов.Удалить(); КонецПроцедуры -Функция ОбернутьВКавычки(Строка) - Кавычка = ?(ЭтоWindows(), """", "'"); - Возврат СтрШаблон("%2%1%2", Строка, Кавычка); -КонецФункции - -Функция ОбернутьВКавычкиДляWindows(Строка) - Если ЭтоWindows() Тогда - Возврат ОбернутьВКавычки(Строка); - Иначе - Возврат Строка; - КонецЕсли; -КонецФункции - -Функция ЭтоWindows() - - СистемнаяИнформация = Новый СистемнаяИнформация(); - ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы; - - Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; - -КонецФункции - #КонецОбласти diff --git "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 366a8bb..613db47 100644 --- "a/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/running/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\214\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -1,3 +1,4 @@ +#Использовать fs #Использовать tempfiles #Использовать logos @@ -31,8 +32,9 @@ // Подготавливает файл для запуска через стандартный пайплайн бенчмарков. // // Если файл уже содержит хотя бы один бенчмарк, возвращается исходный путь. -// Если бенчмарков нет, создается временный файл, в котором код модуля -// оборачивается в процедуру с аннотацией &Бенчмарк. +// Если бенчмарков нет, создается отдельный временный каталог. В него записывается +// файл с кодом модуля, обернутым в процедуру с аннотацией &Бенчмарк. Если рядом +// с исходным файлом есть oscript.cfg, его настройки записываются в тот же каталог. // // Параметры: // ПутьКФайлу - Строка - Путь к исходному файлу сценария @@ -47,7 +49,7 @@ КонецЕсли; ОписаниеАлгоритма = ОписаниеАлгоритмаИзФайла(ПутьКФайлу, СодержимоеФайла); - ПутьКВременномуФайлу = СоздатьВременныйФайлБенчмарка(ОписаниеАлгоритма); + ПутьКВременномуФайлу = СоздатьВременныйФайлБенчмарка(ОписаниеАлгоритма, ПутьКФайлу); _Лог.Отладка("Создан временный файл <%1> для запуска алгоритма из <%2>", ПутьКВременномуФайлу, ПутьКФайлу); @@ -68,7 +70,7 @@ КонецФункции -// Удаляет все временные файлы, созданные в процессе подготовки. +// Удаляет все временные файлы и каталоги, созданные в процессе подготовки. // // Метод следует вызывать после завершения запуска или при ошибке, чтобы // освободить накопленные временные ресурсы. @@ -138,15 +140,44 @@ КонецФункции -Функция СоздатьВременныйФайлБенчмарка(ОписаниеАлгоритма) +Функция СоздатьВременныйФайлБенчмарка(ОписаниеАлгоритма, ПутьКИсходномуФайлу) - ПутьКВременномуФайлу = _МенеджерВременныхФайлов.НовоеИмяФайла("os"); - ЗаписатьФайл(ПутьКВременномуФайлу, ТекстВременногоБенчмарка(ОписаниеАлгоритма)); + Каталог = _МенеджерВременныхФайлов.СоздатьКаталог(); - Возврат ПутьКВременномуФайлу; + ПутьКФайлуБенчмарка = СоздатьФайлБенчмарка(ОписаниеАлгоритма, Каталог); + СоздатьФайлКонфигурацииOneScript(ПутьКИсходномуФайлу, Каталог); + + Возврат ПутьКФайлуБенчмарка; + +КонецФункции + +Функция СоздатьФайлБенчмарка(ОписаниеАлгоритма, Каталог) + + ПутьКФайлу = ОбъединитьПути( + Каталог, + ОписаниеАлгоритма.ИмяФайла + ".os" + ); + ЗаписатьФайл(ПутьКФайлу, ТекстВременногоБенчмарка(ОписаниеАлгоритма)); + + Возврат ПутьКФайлу; КонецФункции +Процедура СоздатьФайлКонфигурацииOneScript(ПутьКИсходномуФайлу, Каталог) + + КаталогИсходногоФайла = Новый Файл(ПутьКИсходномуФайлу).Путь; + ПутьКФайлуКонфигурацииOneScript = ОбъединитьПути(КаталогИсходногоФайла, "oscript.cfg"); + + Если Не ФС.ФайлСуществует(ПутьКФайлуКонфигурацииOneScript) Тогда + Возврат; + КонецЕсли; + + МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript(ПутьКФайлуКонфигурацииOneScript); + МенеджерПараметров.УчитыватьВсеПараметрыДополнительныхФайлов(); + МенеджерПараметров.ЗаписатьВКаталог(Каталог); + +КонецПроцедуры + Функция ТекстВременногоБенчмарка(ОписаниеАлгоритма) ЧастиФайла = Новый Массив(); diff --git "a/src/BenchmarkOneScript/core/serialization/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/core/serialization/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" index 394afef..48d4e7d 100644 --- "a/src/BenchmarkOneScript/core/serialization/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" +++ "b/src/BenchmarkOneScript/core/serialization/jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -3,6 +3,7 @@ #Использовать annotations #Использовать validate +#Использовать logos #Область ОписаниеПеременных diff --git "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 112eb9e..5a14c13 100644 --- "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,6 +1,7 @@ #Использовать "../../.." #Использовать fs #Использовать 1commands +#Использовать logos Перем _Лог; // Лог diff --git "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262.os" "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262.os" new file mode 100644 index 0000000..92b0341 --- /dev/null +++ "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262.os" @@ -0,0 +1,58 @@ +#Использовать "../../.." + +#Область ПрограммныйИнтерфейс + +// Выполняет команду в тестовом процессе и объединяет его стандартный вывод и поток ошибок. +// Ожидание завершения ограничено 60 секундами. +// +// Параметры: +// СтрокаКоманды - Строка - Команда запуска процесса +// РабочийКаталог - Строка - Рабочий каталог процесса +// +// Возвращаемое значение: +// Структура: +// * КодВозврата - Число - Код возврата процесса +// * Вывод - Строка - Объединенные стандартный вывод и поток ошибок +Функция ВыполнитьКоманду(СтрокаКоманды, РабочийКаталог) Экспорт + + Процесс = СоздатьПроцесс(СтрокаКоманды, РабочийКаталог, Истина); + Процесс.Запустить(); + + Вывод = ""; + ВремяНачала = ТекущаяУниверсальнаяДата(); + Пока Не Процесс.Завершен Цикл + Приостановить(100); + Вывод = Вывод + ПрочитатьВывод(Процесс); + + Если ТекущаяУниверсальнаяДата() - ВремяНачала >= 60 Тогда + Процесс.Завершить(); + ВызватьИсключение "Превышено время ожидания завершения тестового процесса"; + КонецЕсли; + КонецЦикла; + + Вывод = Вывод + ПрочитатьВывод(Процесс); + + Возврат Новый Структура("КодВозврата, Вывод", Процесс.КодВозврата, Вывод); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПрочитатьВывод(Процесс) + + Вывод = ""; + Если Процесс.ПотокВывода.ЕстьДанные Тогда + Вывод = Вывод + Процесс.ПотокВывода.Прочитать(); + КонецЕсли; + + Если Процесс.ПотокОшибок.ЕстьДанные Тогда + Вывод = Вывод + Процесс.ПотокОшибок.Прочитать(); + КонецЕсли; + + Возврат Вывод; + +КонецФункции + +#КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" new file mode 100644 index 0000000..055f1d5 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" @@ -0,0 +1,295 @@ +// BSLLS:LineLength-off + +#Использовать asserts +#Использовать fs +#Использовать tempfiles +#Использовать "helpers" + +Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов +Перем _ИсходнаяТрассировкаЗагрузкиБиблиотек; // Строка +Перем _ИсходныйМаркерПримененияКонфигурацииOneScript; // Строка + +#Область ОбработчикиСобытий + +&Инициализация +Процедура ПередВсеми() Экспорт + + _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); + _ИсходнаяТрассировкаЗагрузкиБиблиотек = ПолучитьПеременнуюСреды("OSLIB_LOADER_TRACE"); + _ИсходныйМаркерПримененияКонфигурацииOneScript = ПолучитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED"); + УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); + +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + + _МенеджерВременныхФайлов.Удалить(); + УстановитьПеременнуюСреды("OSLIB_LOADER_TRACE", _ИсходнаяТрассировкаЗагрузкиБиблиотек); + УстановитьПеременнуюСреды( + "BENCHOS_OSCRIPT_CONFIG_APPLIED", + _ИсходныйМаркерПримененияКонфигурацииOneScript + ); + +КонецПроцедуры + +#КонецОбласти + +#Область Тесты + +&Тест +Процедура ТестДолжен_ПосчитатьЗагрузкиБиблиотекиВСклеенномВыводеПроцессов() Экспорт + + // Подготовка + Вывод = "Загружаю файл allocs.dllПриЗагрузкеБиблиотеки C:\libraries\cmd" + Символы.ПС + + "ПриЗагрузкеБиблиотеки /usr/local/lib/cmd" + Символы.ПС + + "ПриЗагрузкеБиблиотеки C:\libraries\cmd-extra"; + + // Действие + КоличествоЗагрузок = КоличествоЗагрузокБиблиотеки(Вывод, "cmd"); + + // Проверка + Ожидаем.Что(КоличествоЗагрузок).Равно(2); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_НеПерезапускатьПриложениеПриУстановленномМаркере() Экспорт + + // Подготовка + КаталогКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКФайлуКонфигурации = ОбъединитьПути(КаталогКонфигурации, "oscript.cfg"); + ЗаписатьТекст(ПутьКФайлуКонфигурации, "lib.system=."); + ФайлыКонфигурацииOneScript = Новый Массив(); + ФайлыКонфигурацииOneScript.Добавить(ПутьКФайлуКонфигурации); + КаталогКоманд = ОбъединитьПути( + ТекущийКаталог(), + "src", + "BenchmarkOneScript", + "cmd" + ); + КаталогКлассовКоманд = ОбъединитьПути(КаталогКоманд, "Классы"); + ПодключитьСценарий( + ОбъединитьПути(КаталогКлассовКоманд, "ЗапускательПриложенияСКонфигурациейOneScript.os"), + "ЗапускательПриложенияСКонфигурациейOneScript" + ); + УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", "1"); + Запускатель = Новый ЗапускательПриложенияСКонфигурациейOneScript(); + + // Действие + Результат = Запускатель.ПерезапуститьСКонфигурацией(ФайлыКонфигурацииOneScript); + + // Проверка + Ожидаем.Что(Результат).Равно(Неопределено); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОдинРазПерезапуститьRunСКонфигурациямиOneScript() Экспорт + + // Подготовка + КаталогЗапуска = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогПроекта = ФС.НормализоватьПуть(ТекущийКаталог()); + КаталогКоманд = ОбъединитьПути(КаталогПроекта, "src", "BenchmarkOneScript", "cmd"); + ПутьКСтартовомуСценарию = ФС.НормализоватьПуть(ОбъединитьПути(КаталогКоманд, "main.os")); + КаталогПервогоБенчмарка = ОбъединитьПути(КаталогЗапуска, "first benchmarks"); + КаталогВложенногоПервогоБенчмарка = ОбъединитьПути(КаталогПервогоБенчмарка, "nested"); + КаталогЗависимостейПервогоБенчмарка = ОбъединитьПути(КаталогЗапуска, "first dependencies"); + ИмяКаталогаВторогоБенчмарка = "second'benchmarks"; + КаталогВторогоБенчмарка = ОбъединитьПути(КаталогЗапуска, ИмяКаталогаВторогоБенчмарка); + КаталогЗависимостейВторогоБенчмарка = ОбъединитьПути(КаталогЗапуска, "second dependencies"); + УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); + + ЗаписатьТекст( + ОбъединитьПути(КаталогЗапуска, "oscript.cfg"), + СтрШаблон( + "lib.system=%1", + ФС.НормализоватьПуть(ОбъединитьПути(КаталогПроекта, "oscript_modules")) + ) + ); + ФС.ОбеспечитьКаталог(КаталогПервогоБенчмарка); + ЗаписатьТекст( + ОбъединитьПути(КаталогПервогоБенчмарка, "oscript.cfg"), + "systemlanguage=ru" + ); + СоздатьБенчмаркСЛокальнойЗависимостью( + КаталогВложенногоПервогоБенчмарка, + "shareddependency", + "ОбщаяЗависимость", + "ПервыйБенчмарк", + 1, + КаталогВложенногоПервогоБенчмарка, + КаталогЗависимостейПервогоБенчмарка + ); + СоздатьБенчмаркСЛокальнойЗависимостью( + КаталогВторогоБенчмарка, + "shareddependency", + "ОбщаяЗависимость", + "ВторойБенчмарк", + 2, + КаталогВторогоБенчмарка, + КаталогЗависимостейВторогоБенчмарка + ); + АргументВторогоБенчмарка = ЭкранированиеАргументовКоманднойСтроки + .ОбернутьАргументКоманднойСтрокиВКавычки( + ИмяКаталогаВторогоБенчмарка + ПолучитьРазделительПути() + ); + + СтрокаКоманды = СтрШаблон( + "%1 %2 run --recursive --iterationCount 1 --warmupCount 0 --invocationCount 1 --iterationTime 1 %3 %4", + ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки("oscript"), + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + ПутьКСтартовомуСценарию + ), + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + "first benchmarks" + ), + АргументВторогоБенчмарка + ); + УстановитьПеременнуюСреды("OSLIB_LOADER_TRACE", "1"); + + // Действие + Результат = ТестированиеПроцессов.ВыполнитьКоманду(СтрокаКоманды, КаталогЗапуска); + + // Проверка + Ожидаем.Что(Результат.КодВозврата, Результат.Вывод).Равно(0); + Ожидаем.Что(Результат.Вывод).Содержит("ПервыйБенчмарк"); + Ожидаем.Что(Результат.Вывод).Содержит("ВторойБенчмарк"); + Ожидаем.Что(Результат.Вывод).Не_().Содержит("Не удалось подключить файл бенчмарка"); + Ожидаем.Что( + КоличествоЗагрузокБиблиотеки(Результат.Вывод, "cmd"), + Результат.Вывод + ).Равно(2); + Ожидаем.Что(ПолучитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED")).Не_().Заполнено(); + +КонецПроцедуры + +&Тест +&Параметры("--help", "Приложение: benchos", 1) +&Параметры("--version", "0.9.0", 1) +Процедура ТестДолжен_НеПерезапускатьСправочнуюКоманду( + Аргумент, + ОжидаемыйВывод, + ОжидаемоеКоличествоЗагрузок +) Экспорт + + // Подготовка + КаталогЗапуска = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогПроекта = ФС.НормализоватьПуть(ТекущийКаталог()); + КаталогКоманд = ОбъединитьПути(КаталогПроекта, "src", "BenchmarkOneScript", "cmd"); + ПутьКСтартовомуСценарию = ФС.НормализоватьПуть(ОбъединитьПути(КаталогКоманд, "main.os")); + УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); + + ЗаписатьТекст( + ОбъединитьПути(КаталогЗапуска, "oscript.cfg"), + СтрШаблон( + "lib.system=%1", + ФС.НормализоватьПуть(ОбъединитьПути(КаталогПроекта, "oscript_modules")) + ) + ); + СтрокаКоманды = СтрШаблон( + "%1 %2 %3", + ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки("oscript"), + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + ПутьКСтартовомуСценарию + ), + Аргумент + ); + УстановитьПеременнуюСреды("OSLIB_LOADER_TRACE", "1"); + + // Действие + Результат = ТестированиеПроцессов.ВыполнитьКоманду(СтрокаКоманды, КаталогЗапуска); + + // Проверка + Ожидаем.Что(Результат.КодВозврата, Результат.Вывод).Равно(0); + Ожидаем.Что(Результат.Вывод).Содержит(ОжидаемыйВывод); + Ожидаем.Что(КоличествоЗагрузокБиблиотеки(Результат.Вывод, "cmd")).Равно( + ОжидаемоеКоличествоЗагрузок + ); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура СоздатьБенчмаркСЛокальнойЗависимостью( + КаталогБенчмарка, + ИмяПакета, + ИмяМодуля, + ИмяМетода, + ОжидаемоеЗначение, + КаталогКонфигурацииOneScript = Неопределено, + КаталогЛокальныхБиблиотек = Неопределено +) + + Если КаталогКонфигурацииOneScript = Неопределено Тогда + КаталогКонфигурацииOneScript = КаталогБенчмарка; + КонецЕсли; + + Если КаталогЛокальныхБиблиотек = Неопределено Тогда + КаталогЛокальныхБиблиотек = ОбъединитьПути(КаталогКонфигурацииOneScript, "oscript_modules"); + КонецЕсли; + + КаталогМодулейПакета = ОбъединитьПути(КаталогЛокальныхБиблиотек, ИмяПакета, "src", "Модули"); + ФС.ОбеспечитьКаталог(КаталогБенчмарка); + ФС.ОбеспечитьКаталог(КаталогМодулейПакета); + КопироватьФайл( + ОбъединитьПути(ТекущийКаталог(), "oscript_modules", "package-loader.os"), + ОбъединитьПути(КаталогЛокальныхБиблиотек, "package-loader.os") + ); + + ЗаписатьТекст( + ОбъединитьПути(КаталогКонфигурацииOneScript, "oscript.cfg"), + "lib.system=" + ФС.НормализоватьПуть(КаталогЛокальныхБиблиотек) + ); + ЗаписатьТекст( + ОбъединитьПути(КаталогМодулейПакета, ИмяМодуля + ".os"), + СтрШаблон( + "Функция ПолучитьЗначение() Экспорт + | Возврат %1; + |КонецФункции", + ОжидаемоеЗначение + ) + ); + ЗаписатьТекст( + ОбъединитьПути(КаталогБенчмарка, ИмяМетода + ".os"), + СтрШаблон( + "#Использовать %1 + | + |&Бенчмарк + |Процедура %2() Экспорт + | Если %3.ПолучитьЗначение() <> %4 Тогда + | ВызватьИсключение ""Локальная зависимость вернула неожиданное значение""; + | КонецЕсли; + |КонецПроцедуры", + ИмяПакета, + ИмяМетода, + ИмяМодуля, + ОжидаемоеЗначение + ) + ); + +КонецПроцедуры + +Функция КоличествоЗагрузокБиблиотеки(Вывод, ИмяБиблиотеки) + + Шаблон = СтрШаблон( + "(?im)ПриЗагрузкеБиблиотеки[ \t]+[^\r\n]*[/\\]%1\r?$", + ИмяБиблиотеки + ); + РегулярноеВыражение = Новый РегулярноеВыражение(Шаблон); + + Возврат РегулярноеВыражение.НайтиСовпадения(Вывод).Количество(); + +КонецФункции + +Процедура ЗаписатьТекст(ПутьКФайлу, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста.Записать(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 69b0425..df6fed4 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -62,6 +62,23 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_ПодготовитьЯвныйФайлБезРасширенияOS() Экспорт + + // Подготовка + ФайлыДляЗапуска = МассивФайлов("./tests/fixtures/АлгоритмБезАннотации"); + + // Действие + Сообщения = ПолучитьСообщенияПодготовителяФайлаБенчмарка(ФайлыДляЗапуска); + + // Проверка + Ожидаем.Что(Сообщения).ИмеетДлину(1); + Ожидаем.Что(Сообщения[0]).Содержит( + "для запуска алгоритма из <" + ПолныйПутьКФайлу("./tests/fixtures/АлгоритмБезАннотации.os") + ">" + ); + +КонецПроцедуры + &Тест Процедура ТестДолжен_НеПодготавливатьФайлыИзКаталогаСКлассическимиБенчмарками() Экспорт diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" new file mode 100644 index 0000000..7da88b0 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -0,0 +1,292 @@ +#Использовать asserts +#Использовать fs +#Использовать tempfiles +#Использовать "helpers" + +Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов +Перем _ИсходныйТекущийКаталог; // Строка +Перем _Локатор; // ЛокаторФайловКонфигурацииOneScript + +#Область ОбработчикиСобытий + +&Инициализация +Процедура ПередВсеми() Экспорт + + _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); + _ИсходныйТекущийКаталог = ТекущийКаталог(); + + ПутьКЛокатору = ОбъединитьПути( + _ИсходныйТекущийКаталог, + "src/BenchmarkOneScript/cmd/Классы/ЛокаторФайловКонфигурацииOneScript.os" + ); + ПодключитьСценарий( + ПутьКЛокатору, + "ЛокаторФайловКонфигурацииOneScript" + ); + _Локатор = Новый ЛокаторФайловКонфигурацииOneScript(); + +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); + _МенеджерВременныхФайлов.Удалить(); + +КонецПроцедуры + +#КонецОбласти + +#Область Тесты + +&Тест +Процедура ТестДолжен_СохранитьПриоритетФайловИУдалитьПовторы() Экспорт + + // Подготовка + ПервыйКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ВторойКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + СоздатьБенчмаркСКонфигурацией(ПервыйКаталог, "ПервыйБенчмарк.os"); + СоздатьБенчмаркСКонфигурацией(ВторойКаталог, "ВторойБенчмарк.os"); + + МассивФайлов = Новый Массив(); + МассивФайлов.Добавить(ПервыйКаталог); + МассивФайлов.Добавить(ВторойКаталог); + МассивФайлов.Добавить(ПервыйКаталог); + + // Действие + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); + + // Проверка + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(2); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(ПервыйКаталог)); + Ожидаем.Что(ФайлыКонфигурации[1]).Равно(ПутьККонфигурации(ВторойКаталог)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_НайтиКонфигурациюКаталогаБезПоискаСценариев() Экспорт + + // Подготовка + Каталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ЗаписатьТекст(ПутьККонфигурации(Каталог), ""); + + // Действие + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации( + МассивИзОдногоЗначения(Каталог) + ); + + // Проверка + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(1); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(Каталог)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_УчитыватьРегистрКаталоговСогласноПравиламПлатформы() Экспорт + + // Подготовка + КорневойКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогВНижнемРегистре = ОбъединитьПути(КорневойКаталог, "case-config"); + КаталогВВерхнемРегистре = ОбъединитьПути(КорневойКаталог, "CASE-CONFIG"); + СоздатьКаталог(КаталогВНижнемРегистре); + СоздатьБенчмаркСКонфигурацией(КаталогВНижнемРегистре, "Бенчмарк.os"); + + Если Не ЭтоWindows() Тогда + СоздатьКаталог(КаталогВВерхнемРегистре); + СоздатьБенчмаркСКонфигурацией(КаталогВВерхнемРегистре, "Бенчмарк.os"); + КонецЕсли; + + МассивФайлов = Новый Массив(); + МассивФайлов.Добавить(КаталогВНижнемРегистре); + МассивФайлов.Добавить(КаталогВВерхнемРегистре); + + // Действие + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); + + // Проверка + Если ЭтоWindows() Тогда + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(1); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(КаталогВНижнемРегистре)); + Иначе + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(2); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(КаталогВНижнемРегистре)); + Ожидаем.Что(ФайлыКонфигурации[1]).Равно(ПутьККонфигурации(КаталогВВерхнемРегистре)); + КонецЕсли; + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_НайтиКонфигурациюВложенногоБенчмаркаТолькоПриРекурсивномПоиске() Экспорт + + // Подготовка + КорневойКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ВложенныйКаталог = ОбъединитьПути(КорневойКаталог, "Вложенный"); + СоздатьКаталог(ВложенныйКаталог); + СоздатьБенчмаркСКонфигурацией(ВложенныйКаталог, "ВложенныйБенчмарк.os"); + МассивФайлов = МассивИзОдногоЗначения(КорневойКаталог); + + // Действие + ФайлыБезРекурсии = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); + ФайлыСРекурсией = _Локатор.НайтиФайлыКонфигурации(МассивФайлов, Истина); + + // Проверка + Ожидаем.Что(ФайлыБезРекурсии).ИмеетДлину(0); + Ожидаем.Что(ФайлыСРекурсией).ИмеетДлину(1); + Ожидаем.Что(ФайлыСРекурсией[0]).Равно(ПутьККонфигурации(ВложенныйКаталог)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СохранитьКонфигурациюКорневогоКаталогаПриРекурсивномПоиске() Экспорт + + // Подготовка + КорневойКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ВложенныйКаталог = ОбъединитьПути(КорневойКаталог, "Вложенный"); + СоздатьКаталог(ВложенныйКаталог); + ЗаписатьТекст(ПутьККонфигурации(КорневойКаталог), ""); + СоздатьБенчмаркСКонфигурацией(ВложенныйКаталог, "ВложенныйБенчмарк.os"); + + // Действие + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации( + МассивИзОдногоЗначения(КорневойКаталог), + Истина + ); + + // Проверка + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(2); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(КорневойКаталог)); + Ожидаем.Что(ФайлыКонфигурации[1]).Равно(ПутьККонфигурации(ВложенныйКаталог)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_УпорядочитьВложенныеФайлыКонфигурацииПоПолномуПути() Экспорт + + // Подготовка + КорневойКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПоследнийКаталог = ОбъединитьПути(КорневойКаталог, "z-last"); + СреднийКаталог = ОбъединитьПути(КорневойКаталог, "m-middle"); + ПервыйКаталог = ОбъединитьПути(КорневойКаталог, "a-first"); + СоздатьКаталог(ПоследнийКаталог); + СоздатьБенчмаркСКонфигурацией(ПоследнийКаталог, "Бенчмарк.os"); + СоздатьКаталог(СреднийКаталог); + СоздатьБенчмаркСКонфигурацией(СреднийКаталог, "Бенчмарк.os"); + СоздатьКаталог(ПервыйКаталог); + СоздатьБенчмаркСКонфигурацией(ПервыйКаталог, "Бенчмарк.os"); + + // Действие + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации( + МассивИзОдногоЗначения(КорневойКаталог), + Истина + ); + + // Проверка + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(3); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(ПервыйКаталог)); + Ожидаем.Что(ФайлыКонфигурации[1]).Равно(ПутьККонфигурации(СреднийКаталог)); + Ожидаем.Что(ФайлыКонфигурации[2]).Равно(ПутьККонфигурации(ПоследнийКаталог)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_РазрешитьЯвныйФайлБезРасширенияOS() Экспорт + + // Подготовка + КаталогБенчмарка = _МенеджерВременныхФайлов.СоздатьКаталог(); + СоздатьБенчмаркСКонфигурацией(КаталогБенчмарка, "ЯвныйБенчмарк.os"); + МассивФайлов = МассивИзОдногоЗначения("ЯвныйБенчмарк"); + + // Действие + ФайлыКонфигурации = НайтиИзКаталога(КаталогБенчмарка, МассивФайлов); + + // Проверка + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(1); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(КаталогБенчмарка)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ИгнорироватьПутиБезКонфигурацииИНесуществующиеПути() Экспорт + + // Подготовка + КаталогБенчмарков = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогЯвногоФайла = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКЯвномуФайлу = ОбъединитьПути(КаталогЯвногоФайла, "ЯвныйБенчмарк.os"); + ЗаписатьТекст(ОбъединитьПути(КаталогБенчмарков, "БенчмаркИзКаталога.os"), ""); + ЗаписатьТекст(ПутьКЯвномуФайлу, ""); + + МассивФайлов = Новый Массив(); + МассивФайлов.Добавить(КаталогБенчмарков); + МассивФайлов.Добавить(ПутьКЯвномуФайлу); + МассивФайлов.Добавить(ОбъединитьПути(КаталогБенчмарков, "НесуществующийБенчмарк")); + + // Действие + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); + + // Проверка + Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(0); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура СоздатьБенчмаркСКонфигурацией(Каталог, ИмяФайла) + + ЗаписатьТекст(ОбъединитьПути(Каталог, ИмяФайла), ""); + ЗаписатьТекст(ОбъединитьПути(Каталог, "oscript.cfg"), ""); + +КонецПроцедуры + +Процедура ЗаписатьТекст(ПутьКФайлу, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста.Записать(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Функция МассивИзОдногоЗначения(Значение) + + Результат = Новый Массив(); + Результат.Добавить(Значение); + + Возврат Результат; + +КонецФункции + +Функция НайтиИзКаталога(Каталог, МассивФайлов) + + ИсходныйТекущийКаталог = ТекущийКаталог(); + УстановитьТекущийКаталог(Каталог); + + Попытка + Результат = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); + Исключение + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + ВызватьИсключение; + КонецПопытки; + + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + + Возврат Результат; + +КонецФункции + +Функция ПутьККонфигурации(Каталог) + + Возврат ФС.НормализоватьПуть(ОбъединитьПути(Каталог, "oscript.cfg")); + +КонецФункции + +Функция ЭтоWindows() + + ТекущаяПлатформа = Новый СистемнаяИнформация().ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + +#КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" new file mode 100644 index 0000000..ade8bf4 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -0,0 +1,382 @@ +// BSLLS:LineLength-off + +#Использовать asserts +#Использовать tempfiles +#Использовать "helpers" + +Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов +Перем _ИсходныйТекущийКаталог; // Строка +Перем _ПутьКМенеджеруПараметров; // Строка +Перем _КаталогОбщейБиблиотеки; // Строка + +#Область ОбработчикиСобытий + +&Инициализация +Процедура ПередВсеми() Экспорт + + _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); + _ИсходныйТекущийКаталог = ТекущийКаталог(); + + _КаталогОбщейБиблиотеки = ОбъединитьПути( + _ИсходныйТекущийКаталог, + "src/BenchmarkOneScript/core/common" + ); + + КаталогКлассовКонфигурации = ОбъединитьПути( + _ИсходныйТекущийКаталог, + "src/BenchmarkOneScript/core/config/Классы" + ); + _ПутьКМенеджеруПараметров = ОбъединитьПути( + КаталогКлассовКонфигурации, + "МенеджерПараметровКонфигурацииOneScript.os" + ); + +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); + _МенеджерВременныхФайлов.Удалить(); + +КонецПроцедуры + +#КонецОбласти + +#Область Тесты + +&Тест +Процедура ТестДолжен_ПриниматьСтрокуИФиксированныйМассивФайловКонфигурацииOneScript() Экспорт + + // Подготовка + КаталогКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + ЗаписатьКонфигурацию( + КаталогКонфигурации, + "benchmark-system", + "benchmark-additional" + ); + + ПутьКДополнительнойКонфигурации = ПутьКФайлуКонфигурации(КаталогКонфигурации); + ФайлыКонфигурацииOneScript = Новый Массив(); + ФайлыКонфигурацииOneScript.Добавить(ПутьКДополнительнойКонфигурации); + ФиксированныеФайлыКонфигурацииOneScript = Новый ФиксированныйМассив(ФайлыКонфигурацииOneScript); + + // Действие + ПараметрыИзСтроки = Новый МенеджерПараметровКонфигурацииOneScript( + ПутьКДополнительнойКонфигурации + ).Прочитать(); + ПараметрыИзФиксированногоМассива = Новый МенеджерПараметровКонфигурацииOneScript( + ФиксированныеФайлыКонфигурацииOneScript + ).Прочитать(); + + // Проверка + ОжидаемыйСистемныйКаталог = ПолныйПуть(КаталогКонфигурации, "benchmark-system"); + Ожидаем.Что(ПараметрыИзСтроки["lib.system"]).Равно(ОжидаемыйСистемныйКаталог); + Ожидаем.Что(ПараметрыИзФиксированногоМассива["lib.system"]).Равно(ОжидаемыйСистемныйКаталог); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СохранитьПоддержкуДополнительногоКаталога() Экспорт + + // Подготовка + КаталогКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + ЗаписатьКонфигурацию( + КаталогКонфигурации, + "benchmark-system", + "benchmark-additional" + ); + + // Действие + Параметры = Новый МенеджерПараметровКонфигурацииOneScript( + КаталогКонфигурации + ).Прочитать(); + + // Проверка + Ожидаем.Что(Параметры["lib.system"]).Равно( + ПолныйПуть(КаталогКонфигурации, "benchmark-system") + ); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПриниматьНеопределенныеИПустыеДополнительныеФайлы() Экспорт + + // Подготовка + КаталогКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + ЗаписатьКонфигурацию( + КаталогКонфигурации, + "current-system", + "current-additional" + ); + УстановитьТекущийКаталог(КаталогКонфигурации); + + // Действие + ПараметрыИзНеопределенного = Новый МенеджерПараметровКонфигурацииOneScript(Неопределено).Прочитать(); + ПараметрыИзПустойСтроки = Новый МенеджерПараметровКонфигурацииOneScript("").Прочитать(); + + // Проверка + ОжидаемыйСистемныйКаталог = ПолныйПуть(КаталогКонфигурации, "current-system"); + Ожидаем.Что(ПараметрыИзНеопределенного["lib.system"]).Равно(ОжидаемыйСистемныйКаталог); + Ожидаем.Что(ПараметрыИзПустойСтроки["lib.system"]).Равно(ОжидаемыйСистемныйКаталог); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ИгнорироватьКонфигурациюСтартовогоСценария() Экспорт + + // Подготовка + КаталогСтартовогоСценария = _МенеджерВременныхФайлов.СоздатьКаталог(); + РабочийКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКСтартовомуСценарию = ОбъединитьПути(КаталогСтартовогоСценария, "main.os"); + ОтносительныйПутьИзСтартовойКонфигурации = "start-config-only-library"; + ЗаписатьТекст( + ОбъединитьПути(КаталогСтартовогоСценария, "oscript.cfg"), + "lib.additional=" + ОтносительныйПутьИзСтартовойКонфигурации + ); + ЗаписатьТекст( + ПутьКСтартовомуСценарию, + ТекстСтартовогоСценария() + ); + ПутьИзСтартовойКонфигурации = ПолныйПуть( + КаталогСтартовогоСценария, + ОтносительныйПутьИзСтартовойКонфигурации + ); + + // Действие + Результат = ВыполнитьСтартовыйСценарий( + ПутьКСтартовомуСценарию, + РабочийКаталог + ); + + // Проверка + Ожидаем.Что( + Результат.КодВозврата, + Результат.Вывод + ).Равно(0); + Ожидаем.Что(Результат.Вывод).Не_().Содержит(ПутьИзСтартовойКонфигурации); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ЧитатьИзДополнительныхФайловТолькоПутиБиблиотек() Экспорт + + // Подготовка + КаталогОсновнойКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогДополнительнойКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + ЗаписатьТекст( + ПутьКФайлуКонфигурации(КаталогОсновнойКонфигурации), + "lib.system=./current-system + |systemlanguage=ru + |current.option=current" + ); + ЗаписатьТекст( + ПутьКФайлуКонфигурации(КаталогДополнительнойКонфигурации), + "lib.system=./additional-system + |lib.additional=./additional-library + |systemlanguage=en + |additional.option=additional" + ); + УстановитьТекущийКаталог(КаталогОсновнойКонфигурации); + МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript( + ПутьКФайлуКонфигурации(КаталогДополнительнойКонфигурации) + ); + + // Действие + Параметры = МенеджерПараметров.Прочитать(); + + // Проверка + Ожидаем.Что(Параметры["lib.system"]).Равно( + ПолныйПуть(КаталогДополнительнойКонфигурации, "additional-system") + ); + Ожидаем.Что(Параметры["systemlanguage"]).Равно("ru"); + Ожидаем.Что(Параметры["current.option"]).Равно("current"); + Ожидаем.Что(Параметры["additional.option"]).Равно(Неопределено); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ЧитатьВсеПараметрыИзДополнительногоФайлаOneScript() Экспорт + + // Подготовка + КаталогОсновнойКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогДополнительнойКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + ЗаписатьТекст( + ПутьКФайлуКонфигурации(КаталогОсновнойКонфигурации), + "systemlanguage=ru + |custom.option=current" + ); + ЗаписатьТекст( + ПутьКФайлуКонфигурации(КаталогДополнительнойКонфигурации), + "systemlanguage=en + |custom.option=benchmark" + ); + УстановитьТекущийКаталог(КаталогОсновнойКонфигурации); + МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript( + ПутьКФайлуКонфигурации(КаталогДополнительнойКонфигурации) + ).УчитыватьВсеПараметрыДополнительныхФайлов(); + + // Действие + Параметры = МенеджерПараметров.Прочитать(); + + // Проверка + Ожидаем.Что(Параметры["systemlanguage"]).Равно("en"); + Ожидаем.Что(Параметры["custom.option"]).Равно("benchmark"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ДобавитьКаталогиБиблиотекИзВсехКонфигурацийПоПриоритету() Экспорт + + // Подготовка + КаталогГлобальнойКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогКонфигурацииСНизкимПриоритетом = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогКонфигурацииСВысокимПриоритетом = _МенеджерВременныхФайлов.СоздатьКаталог(); + + ЗаписатьКонфигурацию( + КаталогГлобальнойКонфигурации, + "global-system", + "global-additional" + ); + ЗаписатьКонфигурацию( + КаталогКонфигурацииСНизкимПриоритетом, + "low-system", + "low-additional" + ); + ЗаписатьКонфигурацию( + КаталогКонфигурацииСВысокимПриоритетом, + "high-system", + "high-additional" + ); + + ДополнительныеФайлыКонфигурацииOneScript = Новый Массив(); + ДополнительныеФайлыКонфигурацииOneScript.Добавить( + ПутьКФайлуКонфигурации(КаталогКонфигурацииСВысокимПриоритетом) + ); + ДополнительныеФайлыКонфигурацииOneScript.Добавить( + ПутьКФайлуКонфигурации(КаталогКонфигурацииСНизкимПриоритетом) + ); + + УстановитьТекущийКаталог(КаталогГлобальнойКонфигурации); + МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript( + ДополнительныеФайлыКонфигурацииOneScript + ); + + // Действие + Параметры = МенеджерПараметров.Прочитать(); + КаталогиБиблиотек = СтрРазделить(Параметры["lib.additional"], ";", Ложь); + + // Проверка + Ожидаем.Что(Параметры["lib.system"]).Равно( + ПолныйПуть(КаталогКонфигурацииСВысокимПриоритетом, "high-system") + ); + Ожидаем.Что(КаталогиБиблиотек.Количество()).БольшеИлиРавно(6); + Ожидаем.Что(КаталогиБиблиотек[0]).Равно( + ПолныйПуть(КаталогКонфигурацииСВысокимПриоритетом, "high-additional") + ); + Ожидаем.Что(КаталогиБиблиотек[1]).Равно( + ПолныйПуть(КаталогКонфигурацииСВысокимПриоритетом, "high-system") + ); + Ожидаем.Что(КаталогиБиблиотек[2]).Равно( + ПолныйПуть(КаталогКонфигурацииСНизкимПриоритетом, "low-additional") + ); + Ожидаем.Что(КаталогиБиблиотек[3]).Равно( + ПолныйПуть(КаталогКонфигурацииСНизкимПриоритетом, "low-system") + ); + Ожидаем.Что(КаталогиБиблиотек[4]).Равно( + ПолныйПуть(КаталогГлобальнойКонфигурации, "global-additional") + ); + Ожидаем.Что(КаталогиБиблиотек[5]).Равно( + ПолныйПуть(КаталогГлобальнойКонфигурации, "global-system") + ); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ТекстСтартовогоСценария() + + Возврат СтрШаблон( + "#Использовать ""%1"" + | + |ПодключитьСценарий(""%2"", ""МенеджерПараметровКонфигурацииOneScript""); + |МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript(); + |Параметры = МенеджерПараметров.Прочитать(); + |Сообщить(Параметры[""lib.additional""]);", + _КаталогОбщейБиблиотеки, + _ПутьКМенеджеруПараметров + ); + +КонецФункции + +Функция ВыполнитьСтартовыйСценарий(ПутьКСтартовомуСценарию, РабочийКаталог) + + СтрокаКоманды = СтрШаблон( + "%1 %2", + ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки( + ПутьКИсполняемомуФайлуOneScript() + ), + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( + ПутьКСтартовомуСценарию + ) + ); + + Возврат ТестированиеПроцессов.ВыполнитьКоманду(СтрокаКоманды, РабочийКаталог); + +КонецФункции + +Функция ПутьКИсполняемомуФайлуOneScript() + + ВариантыИмени = Новый Массив(); + ВариантыИмени.Добавить("oscript.exe"); + ВариантыИмени.Добавить("oscript"); + + Для Каждого ИмяФайла Из ВариантыИмени Цикл + ИсполняемыйФайл = Новый Файл(ОбъединитьПути(КаталогПрограммы(), ИмяФайла)); + Если ИсполняемыйФайл.Существует() И ИсполняемыйФайл.ЭтоФайл() Тогда + Возврат ИсполняемыйФайл.ПолноеИмя; + КонецЕсли; + КонецЦикла; + + ВызватьИсключение "Не найден исполняемый файл текущей версии OneScript"; + +КонецФункции + +Процедура ЗаписатьКонфигурацию(Каталог, СистемныйКаталог, ДополнительныйКаталог) + + ТекстКонфигурации = СтрШаблон( + "lib.system=%1%3lib.additional=%2", + СистемныйКаталог, + ДополнительныйКаталог, + Символы.ПС + ); + ЗаписатьТекст( + ОбъединитьПути(Каталог, "oscript.cfg"), + ТекстКонфигурации + ); + +КонецПроцедуры + +Функция ПутьКФайлуКонфигурации(Каталог) + + Возврат ОбъединитьПути(Каталог, "oscript.cfg"); + +КонецФункции + +Процедура ЗаписатьТекст(ПутьКФайлу, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста.Записать(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Функция ПолныйПуть(Каталог, ОтносительныйПуть) + + Возврат Новый Файл(ОбъединитьПути(Каталог, ОтносительныйПуть)).ПолноеИмя; + +КонецФункции + +#КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index fe9180a..aa4076d 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -3,6 +3,7 @@ #Использовать asserts #Использовать tempfiles +#Использовать 1commands #Использовать "helpers" #Использовать "fixtures/benchmarks" @@ -58,6 +59,26 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_ЗапуститьБенчмаркЧерезИсполняемыйФайлВКаталогеСПробелом() Экспорт + + // Подготовка + Тип = Тип("ПустойБенчмарк"); + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Менеджер = НовыйМенеджерПроцессов(Тип, ДескрипторыБенчмарков); + Кейс = Новый КейсБенчмарка(1, ДескрипторыБенчмарков.ПолучитьПервый()); + ИсполняющаяСреда = Новый ИсполняющаяСредаБенчмарков(); + ИсполняющаяСреда.Версия = СоздатьИсполняемыйФайлВКаталогеСПробелом(); + + // Действие + Результат = Менеджер.ЗапуститьПроцесс(Кейс, ИсполняющаяСреда); + + // Проверка + Ожидаем.Что(Результат).Заполнено(); + Ожидаем.Что(Результат.Запуски.Количество()).Равно(1); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ЗапуститьНесколькоКейсовВДочернемПроцессе() Экспорт @@ -196,6 +217,60 @@ КонецФункции +Функция СоздатьИсполняемыйФайлВКаталогеСПробелом() + + Каталог = ОбъединитьПути(_МенеджерВременныхФайлов.СоздатьКаталог(), "исполняющая среда"); + ФС.ОбеспечитьКаталог(Каталог); + + ЛокаторИсполняющейСреды = Новый ЛокаторИсполняющейСреды(); + ИсходныйИсполняемыйФайл = ЛокаторИсполняющейСреды.НайтиИсполняемыйФайлВКаталоге(КаталогПрограммы()); + + Если ЭтоWindows() Тогда + ПутьИсполняемогоФайла = ОбъединитьПути(Каталог, "oscript wrapper.bat"); + ЗаписатьКомандныйФайлДляWindows(ПутьИсполняемогоФайла, ИсходныйИсполняемыйФайл); + Иначе + ПутьИсполняемогоФайла = ОбъединитьПути(Каталог, "oscript wrapper"); + СоздатьСимволическуюСсылку(ПутьИсполняемогоФайла, ИсходныйИсполняемыйФайл); + КонецЕсли; + + Возврат ПутьИсполняемогоФайла; + +КонецФункции + +Процедура ЗаписатьКомандныйФайлДляWindows(ПутьКФайлу, ПутьКИсполняемомуФайлу) + + ТекстКоманды = "@echo off" + Символы.ПС + + """" + ПутьКИсполняемомуФайлу + """ %*"; + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8NoBOM); + ЗаписьТекста.Записать(ТекстКоманды); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +Процедура СоздатьСимволическуюСсылку(ПутьКСсылке, ПутьКИсходномуФайлу) + + Команда = Новый Команда(); + Команда.УстановитьКоманду("ln"); + Команда.ДобавитьПараметр("-s"); + Команда.ДобавитьПараметр(ПутьКИсходномуФайлу); + Команда.ДобавитьПараметр(ПутьКСсылке); + + КодВозврата = Команда.Исполнить(); + Если КодВозврата <> 0 Тогда + ВызватьИсключение СтрШаблон("Не удалось создать символическую ссылку: %1", Команда.ПолучитьВывод()); + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоWindows() + + ТекущаяПлатформа = Новый СистемнаяИнформация().ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + Функция ПолныйПутьКФайлу(ПутьКФайлу) Возврат ФС.НормализоватьПуть(ОбъединитьПути(ТекущийКаталог(), ПутьКФайлу)); КонецФункции diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 3847d95..67dec3b 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\270\321\202\320\265\320\273\321\217\320\244\320\260\320\271\320\273\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -67,6 +67,54 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_УдалитьВременныйКаталогПриОчистке() Экспорт + + // Подготовка + МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); + Подготовитель = Новый ПодготовительФайлаБенчмарка(МенеджерВременныхФайлов); + ПодготовленныйФайл = Подготовитель.Подготовить("./tests/fixtures/АлгоритмБезАннотации.os"); + ВременныйКаталог = Новый Файл(ПодготовленныйФайл).Путь; + + // Действие + Подготовитель.Очистить(); + + // Проверка + Ожидаем.Что(ФС.КаталогСуществует(ВременныйКаталог)).ЭтоЛожь(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СоздатьКонфигурациюРядомСВременнымФайломИзИсходногоКаталога() Экспорт + + // Подготовка + КаталогИсходногоФайла = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКИсходномуФайлу = ОбъединитьПути(КаталогИсходногоФайла, "АлгоритмСКонфигурацией.os"); + КаталогЛокальныхБиблиотек = ОбъединитьПути(КаталогИсходногоФайла, "oscript_modules"); + ФС.ОбеспечитьКаталог(КаталогЛокальныхБиблиотек); + ЗаписатьТекст( + ОбъединитьПути(КаталогИсходногоФайла, "oscript.cfg"), + "lib.system=./oscript_modules + |custom.option=benchmark" + ); + ЗаписатьТекст(ПутьКИсходномуФайлу, "А = 1;"); + + // Действие + ПодготовленныйФайл = _ПодготовительФайлаБенчмарка.Подготовить(ПутьКИсходномуФайлу); + + // Проверка + ПутьКПодготовленнойКонфигурации = ОбъединитьПути( + Новый Файл(ПодготовленныйФайл).Путь, + "oscript.cfg" + ); + Ожидаем.Что(ФС.ФайлСуществует(ПутьКПодготовленнойКонфигурации)).Равно(Истина); + + ТекстКонфигурации = ПрочитатьТекст(ПутьКПодготовленнойКонфигурации); + Ожидаем.Что(ТекстКонфигурации).Содержит(ФС.НормализоватьПуть(КаталогЛокальныхБиблиотек)); + Ожидаем.Что(ТекстКонфигурации).Содержит("custom.option=benchmark"); + +КонецПроцедуры + &Тест &Параметры("./tests/fixtures/benchmarks/Классы/ПустойБенчмарк.os", Истина) &Параметры("./tests/fixtures/АлгоритмБезАннотации.os", Ложь) @@ -94,4 +142,12 @@ КонецФункции +Процедура ЗаписатьТекст(ПутьКФайлу, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста.Записать(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + #КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..5b41cad --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,149 @@ +#Использовать asserts +#Использовать fs +#Использовать tempfiles +#Использовать "helpers" + +Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов +Перем _ИсходныйТекущийКаталог; // Строка + +#Область ОбработчикиСобытий + +&Инициализация +Процедура ПередВсеми() Экспорт + + _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); + _ИсходныйТекущийКаталог = ТекущийКаталог(); + +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); + _МенеджерВременныхФайлов.Удалить(); + +КонецПроцедуры + +#КонецОбласти + +#Область Тесты + +&Тест +Процедура ТестДолжен_РазрешитьЯвныйФайлБезРасширенияИОтметитьНесуществующийПуть() Экспорт + + // Подготовка + Каталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКФайлу = ОбъединитьПути(Каталог, "ЯвныйБенчмарк.os"); + ЗаписатьТекст(ПутьКФайлу, ""); + + ВходныеПути = Новый Массив(); + ВходныеПути.Добавить("ЯвныйБенчмарк"); + ВходныеПути.Добавить("НесуществующийБенчмарк"); + + // Действие + Результат = РазрешитьИзКаталога(Каталог, ВходныеПути); + + // Проверка + Ожидаем.Что(Результат).ИмеетДлину(2); + Ожидаем.Что(Результат[0].Разрешен).ЭтоИстина(); + Ожидаем.Что(Результат[0].ВходнойКаталог).Равно(Неопределено); + Ожидаем.Что(Результат[0].Файлы).ИмеетДлину(1); + Ожидаем.Что(Результат[0].Файлы[0]).Равно(ФС.НормализоватьПуть(ПутьКФайлу)); + Ожидаем.Что(Результат[1].Разрешен).ЭтоЛожь(); + Ожидаем.Что(Результат[1].Файлы).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ВернутьКорневойКаталогИОтсортированныеРекурсивныеФайлы() Экспорт + + // Подготовка + КорневойКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПервыйКаталог = ОбъединитьПути(КорневойКаталог, "a-first"); + ПоследнийКаталог = ОбъединитьПути(КорневойКаталог, "z-last"); + СоздатьКаталог(ПоследнийКаталог); + СоздатьКаталог(ПервыйКаталог); + + ПоследнийФайл = ОбъединитьПути(ПоследнийКаталог, "Бенчмарк.os"); + ПервыйФайл = ОбъединитьПути(ПервыйКаталог, "Бенчмарк.os"); + ЗаписатьТекст(ПоследнийФайл, ""); + ЗаписатьТекст(ПервыйФайл, ""); + + // Действие + Результат = Новый РазрешательВходныхФайловБенчмарков().Разрешить( + МассивИзОдногоЗначения(КорневойКаталог), + Истина + ); + + // Проверка + Ожидаем.Что(Результат).ИмеетДлину(1); + Ожидаем.Что(Результат[0].Разрешен).ЭтоИстина(); + Ожидаем.Что(Результат[0].ВходнойКаталог).Равно(ФС.НормализоватьПуть(КорневойКаталог)); + Ожидаем.Что(Результат[0].Файлы).ИмеетДлину(2); + Ожидаем.Что(Результат[0].Файлы[0]).Равно(ФС.НормализоватьПуть(ПервыйФайл)); + Ожидаем.Что(Результат[0].Файлы[1]).Равно(ФС.НормализоватьПуть(ПоследнийФайл)); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ОставитьФайлТолькоУПервогоВхода() Экспорт + + // Подготовка + Каталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьКФайлу = ОбъединитьПути(Каталог, "Бенчмарк.os"); + ЗаписатьТекст(ПутьКФайлу, ""); + + ВходныеПути = Новый Массив(); + ВходныеПути.Добавить(ПутьКФайлу); + ВходныеПути.Добавить(Каталог); + + // Действие + Результат = Новый РазрешательВходныхФайловБенчмарков().Разрешить(ВходныеПути); + + // Проверка + Ожидаем.Что(Результат).ИмеетДлину(2); + Ожидаем.Что(Результат[0].Файлы).ИмеетДлину(1); + Ожидаем.Что(Результат[1].Файлы).ИмеетДлину(0); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция РазрешитьИзКаталога(Каталог, ВходныеПути) + + ИсходныйТекущийКаталог = ТекущийКаталог(); + УстановитьТекущийКаталог(Каталог); + + Попытка + Результат = Новый РазрешательВходныхФайловБенчмарков().Разрешить(ВходныеПути); + Исключение + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + ВызватьИсключение; + КонецПопытки; + + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + + Возврат Результат; + +КонецФункции + +Функция МассивИзОдногоЗначения(Значение) + + Результат = Новый Массив(); + Результат.Добавить(Значение); + + Возврат Результат; + +КонецФункции + +Процедура ЗаписатьТекст(ПутьКФайлу, Текст) + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста.Записать(Текст); + ЗаписьТекста.Закрыть(); + +КонецПроцедуры + +#КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 2888834..e7416d5 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\260\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -179,4 +179,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file From ffbacc25c1e05c0261bc3f4e878bdce7ee48bd39 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Tue, 21 Jul 2026 14:41:28 +0300 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=D0=92=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 826cca3..0792b25 100644 --- "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -161,7 +161,7 @@ КонецЦикла; ИсточникиКонфигурации.Добавить(НовыйИсточникКонфигурации( - ОбъединитьПути(ТекущийКаталог(), _ИмяФайлаКонфигурации), + ОбъединитьПути(СтартовыйСценарий().Каталог, _ИмяФайлаКонфигурации), Ложь )); From 1f534ddacbd2b0be200f92cad097b559efc9fdda Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 12:48:47 +0300 Subject: [PATCH 4/9] =?UTF-8?q?fix:=20=D1=83=D1=87=D0=B8=D1=82=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20oscript.cfg=20=D1=82=D0=B5=D0=BA=D1=83?= =?UTF-8?q?=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\260\321\206\320\270\320\270OneScript.os" | 5 ++ ...1\206\320\270\320\265\320\271OneScript.os" | 79 ++----------------- ...0\260\321\206\320\270\320\270OneScript.os" | 66 +++++----------- 3 files changed, 30 insertions(+), 120 deletions(-) diff --git "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 0792b25..f1de9b2 100644 --- "a/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/src/BenchmarkOneScript/core/config/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -165,6 +165,11 @@ Ложь )); + ИсточникиКонфигурации.Добавить(НовыйИсточникКонфигурации( + ОбъединитьПути(ТекущийКаталог(), _ИмяФайлаКонфигурации), + Ложь + )); + ИсточникиКонфигурации.Добавить(НовыйИсточникКонфигурации( ОбъединитьПути(КаталогПрограммы(), _ИмяФайлаКонфигурации), Ложь diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" index 055f1d5..4a88ace 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" @@ -37,22 +37,6 @@ #Область Тесты -&Тест -Процедура ТестДолжен_ПосчитатьЗагрузкиБиблиотекиВСклеенномВыводеПроцессов() Экспорт - - // Подготовка - Вывод = "Загружаю файл allocs.dllПриЗагрузкеБиблиотеки C:\libraries\cmd" + Символы.ПС - + "ПриЗагрузкеБиблиотеки /usr/local/lib/cmd" + Символы.ПС - + "ПриЗагрузкеБиблиотеки C:\libraries\cmd-extra"; - - // Действие - КоличествоЗагрузок = КоличествоЗагрузокБиблиотеки(Вывод, "cmd"); - - // Проверка - Ожидаем.Что(КоличествоЗагрузок).Равно(2); - -КонецПроцедуры - &Тест Процедура ТестДолжен_НеПерезапускатьПриложениеПриУстановленномМаркере() Экспорт @@ -93,9 +77,8 @@ КаталогКоманд = ОбъединитьПути(КаталогПроекта, "src", "BenchmarkOneScript", "cmd"); ПутьКСтартовомуСценарию = ФС.НормализоватьПуть(ОбъединитьПути(КаталогКоманд, "main.os")); КаталогПервогоБенчмарка = ОбъединитьПути(КаталогЗапуска, "first benchmarks"); - КаталогВложенногоПервогоБенчмарка = ОбъединитьПути(КаталогПервогоБенчмарка, "nested"); КаталогЗависимостейПервогоБенчмарка = ОбъединитьПути(КаталогЗапуска, "first dependencies"); - ИмяКаталогаВторогоБенчмарка = "second'benchmarks"; + ИмяКаталогаВторогоБенчмарка = "second benchmarks"; КаталогВторогоБенчмарка = ОбъединитьПути(КаталогЗапуска, ИмяКаталогаВторогоБенчмарка); КаталогЗависимостейВторогоБенчмарка = ОбъединитьПути(КаталогЗапуска, "second dependencies"); УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); @@ -107,18 +90,13 @@ ФС.НормализоватьПуть(ОбъединитьПути(КаталогПроекта, "oscript_modules")) ) ); - ФС.ОбеспечитьКаталог(КаталогПервогоБенчмарка); - ЗаписатьТекст( - ОбъединитьПути(КаталогПервогоБенчмарка, "oscript.cfg"), - "systemlanguage=ru" - ); СоздатьБенчмаркСЛокальнойЗависимостью( - КаталогВложенногоПервогоБенчмарка, + КаталогПервогоБенчмарка, "shareddependency", "ОбщаяЗависимость", "ПервыйБенчмарк", 1, - КаталогВложенногоПервогоБенчмарка, + КаталогПервогоБенчмарка, КаталогЗависимостейПервогоБенчмарка ); СоздатьБенчмаркСЛокальнойЗависимостью( @@ -130,13 +108,13 @@ КаталогВторогоБенчмарка, КаталогЗависимостейВторогоБенчмарка ); - АргументВторогоБенчмарка = ЭкранированиеАргументовКоманднойСтроки - .ОбернутьАргументКоманднойСтрокиВКавычки( + АргументВторогоБенчмарка = + ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( ИмяКаталогаВторогоБенчмарка + ПолучитьРазделительПути() ); СтрокаКоманды = СтрШаблон( - "%1 %2 run --recursive --iterationCount 1 --warmupCount 0 --invocationCount 1 --iterationTime 1 %3 %4", + "%1 %2 run --iterationCount 1 --warmupCount 0 --invocationCount 1 --iterationTime 1 %3 %4", ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки("oscript"), ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( ПутьКСтартовомуСценарию @@ -164,51 +142,6 @@ КонецПроцедуры -&Тест -&Параметры("--help", "Приложение: benchos", 1) -&Параметры("--version", "0.9.0", 1) -Процедура ТестДолжен_НеПерезапускатьСправочнуюКоманду( - Аргумент, - ОжидаемыйВывод, - ОжидаемоеКоличествоЗагрузок -) Экспорт - - // Подготовка - КаталогЗапуска = _МенеджерВременныхФайлов.СоздатьКаталог(); - КаталогПроекта = ФС.НормализоватьПуть(ТекущийКаталог()); - КаталогКоманд = ОбъединитьПути(КаталогПроекта, "src", "BenchmarkOneScript", "cmd"); - ПутьКСтартовомуСценарию = ФС.НормализоватьПуть(ОбъединитьПути(КаталогКоманд, "main.os")); - УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); - - ЗаписатьТекст( - ОбъединитьПути(КаталогЗапуска, "oscript.cfg"), - СтрШаблон( - "lib.system=%1", - ФС.НормализоватьПуть(ОбъединитьПути(КаталогПроекта, "oscript_modules")) - ) - ); - СтрокаКоманды = СтрШаблон( - "%1 %2 %3", - ЭкранированиеАргументовКоманднойСтроки.ОбернутьИсполняемыйФайлВКавычки("oscript"), - ЭкранированиеАргументовКоманднойСтроки.ОбернутьАргументКоманднойСтрокиВКавычки( - ПутьКСтартовомуСценарию - ), - Аргумент - ); - УстановитьПеременнуюСреды("OSLIB_LOADER_TRACE", "1"); - - // Действие - Результат = ТестированиеПроцессов.ВыполнитьКоманду(СтрокаКоманды, КаталогЗапуска); - - // Проверка - Ожидаем.Что(Результат.КодВозврата, Результат.Вывод).Равно(0); - Ожидаем.Что(Результат.Вывод).Содержит(ОжидаемыйВывод); - Ожидаем.Что(КоличествоЗагрузокБиблиотеки(Результат.Вывод, "cmd")).Равно( - ОжидаемоеКоличествоЗагрузок - ); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index ade8bf4..55d6bc5 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -116,45 +116,12 @@ ПараметрыИзПустойСтроки = Новый МенеджерПараметровКонфигурацииOneScript("").Прочитать(); // Проверка - ОжидаемыйСистемныйКаталог = ПолныйПуть(КаталогКонфигурации, "current-system"); - Ожидаем.Что(ПараметрыИзНеопределенного["lib.system"]).Равно(ОжидаемыйСистемныйКаталог); - Ожидаем.Что(ПараметрыИзПустойСтроки["lib.system"]).Равно(ОжидаемыйСистемныйКаталог); - -КонецПроцедуры - -&Тест -Процедура ТестДолжен_ИгнорироватьКонфигурациюСтартовогоСценария() Экспорт - - // Подготовка - КаталогСтартовогоСценария = _МенеджерВременныхФайлов.СоздатьКаталог(); - РабочийКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); - ПутьКСтартовомуСценарию = ОбъединитьПути(КаталогСтартовогоСценария, "main.os"); - ОтносительныйПутьИзСтартовойКонфигурации = "start-config-only-library"; - ЗаписатьТекст( - ОбъединитьПути(КаталогСтартовогоСценария, "oscript.cfg"), - "lib.additional=" + ОтносительныйПутьИзСтартовойКонфигурации - ); - ЗаписатьТекст( - ПутьКСтартовомуСценарию, - ТекстСтартовогоСценария() - ); - ПутьИзСтартовойКонфигурации = ПолныйПуть( - КаталогСтартовогоСценария, - ОтносительныйПутьИзСтартовойКонфигурации + Ожидаем.Что(ПараметрыИзПустойСтроки.Количество()).Равно( + ПараметрыИзНеопределенного.Количество() ); - - // Действие - Результат = ВыполнитьСтартовыйСценарий( - ПутьКСтартовомуСценарию, - РабочийКаталог - ); - - // Проверка - Ожидаем.Что( - Результат.КодВозврата, - Результат.Вывод - ).Равно(0); - Ожидаем.Что(Результат.Вывод).Не_().Содержит(ПутьИзСтартовойКонфигурации); + Для Каждого Параметр Из ПараметрыИзНеопределенного Цикл + Ожидаем.Что(ПараметрыИзПустойСтроки[Параметр.Ключ]).Равно(Параметр.Значение); + КонецЦикла; КонецПроцедуры @@ -229,14 +196,14 @@ Процедура ТестДолжен_ДобавитьКаталогиБиблиотекИзВсехКонфигурацийПоПриоритету() Экспорт // Подготовка - КаталогГлобальнойКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); + КаталогТекущейКонфигурации = _МенеджерВременныхФайлов.СоздатьКаталог(); КаталогКонфигурацииСНизкимПриоритетом = _МенеджерВременныхФайлов.СоздатьКаталог(); КаталогКонфигурацииСВысокимПриоритетом = _МенеджерВременныхФайлов.СоздатьКаталог(); ЗаписатьКонфигурацию( - КаталогГлобальнойКонфигурации, - "global-system", - "global-additional" + КаталогТекущейКонфигурации, + "current-system", + "current-additional" ); ЗаписатьКонфигурацию( КаталогКонфигурацииСНизкимПриоритетом, @@ -257,7 +224,8 @@ ПутьКФайлуКонфигурации(КаталогКонфигурацииСНизкимПриоритетом) ); - УстановитьТекущийКаталог(КаталогГлобальнойКонфигурации); + УстановитьТекущийКаталог(КаталогТекущейКонфигурации); + МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript( ДополнительныеФайлыКонфигурацииOneScript ); @@ -283,11 +251,15 @@ Ожидаем.Что(КаталогиБиблиотек[3]).Равно( ПолныйПуть(КаталогКонфигурацииСНизкимПриоритетом, "low-system") ); - Ожидаем.Что(КаталогиБиблиотек[4]).Равно( - ПолныйПуть(КаталогГлобальнойКонфигурации, "global-additional") + ИндексДополнительногоКаталогаТекущейКонфигурации = КаталогиБиблиотек.Найти( + ПолныйПуть(КаталогТекущейКонфигурации, "current-additional") + ); + ИндексСистемногоКаталогаТекущейКонфигурации = КаталогиБиблиотек.Найти( + ПолныйПуть(КаталогТекущейКонфигурации, "current-system") ); - Ожидаем.Что(КаталогиБиблиотек[5]).Равно( - ПолныйПуть(КаталогГлобальнойКонфигурации, "global-system") + Ожидаем.Что(ИндексДополнительногоКаталогаТекущейКонфигурации).Больше(3); + Ожидаем.Что(ИндексСистемногоКаталогаТекущейКонфигурации).Равно( + ИндексДополнительногоКаталогаТекущейКонфигурации + 1 ); КонецПроцедуры From 5b97befbc8e7455b37b18b91af97c268a45253bd Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 13:10:10 +0300 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20Unix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/oscript.cfg | 3 +++ ...0\260\321\206\320\270\320\270OneScript.os" | 21 ++++++++++++++++++- ...0\260\321\206\320\270\320\270OneScript.os" | 6 ++++-- ...20\260\321\200\320\272\320\276\320\262.os" | 4 ++-- ...20\260\321\200\320\272\320\276\320\262.os" | 21 ++++++++++++++++++- 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 tests/oscript.cfg diff --git a/tests/oscript.cfg b/tests/oscript.cfg new file mode 100644 index 0000000..768af52 --- /dev/null +++ b/tests/oscript.cfg @@ -0,0 +1,3 @@ +lib.system = ../oscript_modules +systemlanguage = ru +lang.explicitImports = off \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 7da88b0..5898e03 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -195,13 +195,14 @@ КаталогБенчмарка = _МенеджерВременныхФайлов.СоздатьКаталог(); СоздатьБенчмаркСКонфигурацией(КаталогБенчмарка, "ЯвныйБенчмарк.os"); МассивФайлов = МассивИзОдногоЗначения("ЯвныйБенчмарк"); + ОжидаемыйПутьККонфигурации = ПутьККонфигурацииИзКаталога(КаталогБенчмарка); // Действие ФайлыКонфигурации = НайтиИзКаталога(КаталогБенчмарка, МассивФайлов); // Проверка Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(1); - Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ПутьККонфигурации(КаталогБенчмарка)); + Ожидаем.Что(ФайлыКонфигурации[0]).Равно(ОжидаемыйПутьККонфигурации); КонецПроцедуры @@ -274,6 +275,24 @@ КонецФункции +Функция ПутьККонфигурацииИзКаталога(Каталог) + + ИсходныйТекущийКаталог = ТекущийКаталог(); + УстановитьТекущийКаталог(Каталог); + + Попытка + Результат = ПутьККонфигурации(ТекущийКаталог()); + Исключение + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + ВызватьИсключение; + КонецПопытки; + + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + + Возврат Результат; + +КонецФункции + Функция ПутьККонфигурации(Каталог) Возврат ФС.НормализоватьПуть(ОбъединитьПути(Каталог, "oscript.cfg")); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 55d6bc5..2300838 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -252,11 +252,13 @@ ПолныйПуть(КаталогКонфигурацииСНизкимПриоритетом, "low-system") ); ИндексДополнительногоКаталогаТекущейКонфигурации = КаталогиБиблиотек.Найти( - ПолныйПуть(КаталогТекущейКонфигурации, "current-additional") + ФС.НормализоватьПуть("current-additional") ); ИндексСистемногоКаталогаТекущейКонфигурации = КаталогиБиблиотек.Найти( - ПолныйПуть(КаталогТекущейКонфигурации, "current-system") + ФС.НормализоватьПуть("current-system") ); + Ожидаем.Что(ИндексДополнительногоКаталогаТекущейКонфигурации).Не_().Равно(Неопределено); + Ожидаем.Что(ИндексСистемногоКаталогаТекущейКонфигурации).Не_().Равно(Неопределено); Ожидаем.Что(ИндексДополнительногоКаталогаТекущейКонфигурации).Больше(3); Ожидаем.Что(ИндексСистемногоКаталогаТекущейКонфигурации).Равно( ИндексДополнительногоКаталогаТекущейКонфигурации + 1 diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index aa4076d..08d58b0 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -252,8 +252,8 @@ Команда = Новый Команда(); Команда.УстановитьКоманду("ln"); Команда.ДобавитьПараметр("-s"); - Команда.ДобавитьПараметр(ПутьКИсходномуФайлу); - Команда.ДобавитьПараметр(ПутьКСсылке); + Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКИсходномуФайлу)); + Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКСсылке)); КодВозврата = Команда.Исполнить(); Если КодВозврата <> 0 Тогда diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 5b41cad..6ea3f91 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -39,6 +39,7 @@ ВходныеПути = Новый Массив(); ВходныеПути.Добавить("ЯвныйБенчмарк"); ВходныеПути.Добавить("НесуществующийБенчмарк"); + ОжидаемыйПутьКФайлу = ПолныйПутьИзКаталога(Каталог, "ЯвныйБенчмарк.os"); // Действие Результат = РазрешитьИзКаталога(Каталог, ВходныеПути); @@ -48,7 +49,7 @@ Ожидаем.Что(Результат[0].Разрешен).ЭтоИстина(); Ожидаем.Что(Результат[0].ВходнойКаталог).Равно(Неопределено); Ожидаем.Что(Результат[0].Файлы).ИмеетДлину(1); - Ожидаем.Что(Результат[0].Файлы[0]).Равно(ФС.НормализоватьПуть(ПутьКФайлу)); + Ожидаем.Что(Результат[0].Файлы[0]).Равно(ОжидаемыйПутьКФайлу); Ожидаем.Что(Результат[1].Разрешен).ЭтоЛожь(); Ожидаем.Что(Результат[1].Файлы).ИмеетДлину(0); @@ -111,6 +112,24 @@ #Область СлужебныеПроцедурыИФункции +Функция ПолныйПутьИзКаталога(Каталог, ОтносительныйПуть) + + ИсходныйТекущийКаталог = ТекущийКаталог(); + УстановитьТекущийКаталог(Каталог); + + Попытка + Результат = ФС.НормализоватьПуть(ОтносительныйПуть); + Исключение + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + ВызватьИсключение; + КонецПопытки; + + УстановитьТекущийКаталог(ИсходныйТекущийКаталог); + + Возврат Результат; + +КонецФункции + Функция РазрешитьИзКаталога(Каталог, ВходныеПути) ИсходныйТекущийКаталог = ТекущийКаталог(); From 39e5e1cefb1dfa2f1f46c6384d55cfe2e8e181bd Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 13:36:20 +0300 Subject: [PATCH 6/9] =?UTF-8?q?test:=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=82=D0=B5=D1=81=D1=82=20=D0=A2=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=94=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=5F=D0=97=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B8=D1=82=D1=8C=D0=91=D0=B5=D0=BD=D1=87?= =?UTF-8?q?=D0=BC=D0=B0=D1=80=D0=BA=D0=A7=D0=B5=D1=80=D0=B5=D0=B7=D0=98?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D1=8F=D0=B5=D0=BC=D1=8B=D0=B9?= =?UTF-8?q?=D0=A4=D0=B0=D0=B9=D0=BB=D0=92=D0=9A=D0=B0=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B5=D0=A1=D0=9F=D1=80=D0=BE=D0=B1=D0=B5=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\321\200\320\272\320\276\320\262.os" | 73 ------------------- 1 file changed, 73 deletions(-) diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 08d58b0..68cf811 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -59,26 +59,6 @@ КонецПроцедуры -&Тест -Процедура ТестДолжен_ЗапуститьБенчмаркЧерезИсполняемыйФайлВКаталогеСПробелом() Экспорт - - // Подготовка - Тип = Тип("ПустойБенчмарк"); - ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); - Менеджер = НовыйМенеджерПроцессов(Тип, ДескрипторыБенчмарков); - Кейс = Новый КейсБенчмарка(1, ДескрипторыБенчмарков.ПолучитьПервый()); - ИсполняющаяСреда = Новый ИсполняющаяСредаБенчмарков(); - ИсполняющаяСреда.Версия = СоздатьИсполняемыйФайлВКаталогеСПробелом(); - - // Действие - Результат = Менеджер.ЗапуститьПроцесс(Кейс, ИсполняющаяСреда); - - // Проверка - Ожидаем.Что(Результат).Заполнено(); - Ожидаем.Что(Результат.Запуски.Количество()).Равно(1); - -КонецПроцедуры - &Тест Процедура ТестДолжен_ЗапуститьНесколькоКейсовВДочернемПроцессе() Экспорт @@ -217,59 +197,6 @@ КонецФункции -Функция СоздатьИсполняемыйФайлВКаталогеСПробелом() - - Каталог = ОбъединитьПути(_МенеджерВременныхФайлов.СоздатьКаталог(), "исполняющая среда"); - ФС.ОбеспечитьКаталог(Каталог); - - ЛокаторИсполняющейСреды = Новый ЛокаторИсполняющейСреды(); - ИсходныйИсполняемыйФайл = ЛокаторИсполняющейСреды.НайтиИсполняемыйФайлВКаталоге(КаталогПрограммы()); - - Если ЭтоWindows() Тогда - ПутьИсполняемогоФайла = ОбъединитьПути(Каталог, "oscript wrapper.bat"); - ЗаписатьКомандныйФайлДляWindows(ПутьИсполняемогоФайла, ИсходныйИсполняемыйФайл); - Иначе - ПутьИсполняемогоФайла = ОбъединитьПути(Каталог, "oscript wrapper"); - СоздатьСимволическуюСсылку(ПутьИсполняемогоФайла, ИсходныйИсполняемыйФайл); - КонецЕсли; - - Возврат ПутьИсполняемогоФайла; - -КонецФункции - -Процедура ЗаписатьКомандныйФайлДляWindows(ПутьКФайлу, ПутьКИсполняемомуФайлу) - - ТекстКоманды = "@echo off" + Символы.ПС - + """" + ПутьКИсполняемомуФайлу + """ %*"; - ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8NoBOM); - ЗаписьТекста.Записать(ТекстКоманды); - ЗаписьТекста.Закрыть(); - -КонецПроцедуры - -Процедура СоздатьСимволическуюСсылку(ПутьКСсылке, ПутьКИсходномуФайлу) - - Команда = Новый Команда(); - Команда.УстановитьКоманду("ln"); - Команда.ДобавитьПараметр("-s"); - Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКИсходномуФайлу)); - Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКСсылке)); - - КодВозврата = Команда.Исполнить(); - Если КодВозврата <> 0 Тогда - ВызватьИсключение СтрШаблон("Не удалось создать символическую ссылку: %1", Команда.ПолучитьВывод()); - КонецЕсли; - -КонецПроцедуры - -Функция ЭтоWindows() - - ТекущаяПлатформа = Новый СистемнаяИнформация().ТипПлатформы; - - Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; - -КонецФункции Функция ПолныйПутьКФайлу(ПутьКФайлу) Возврат ФС.НормализоватьПуть(ОбъединитьПути(ТекущийКаталог(), ПутьКФайлу)); From 76c1bdc3cd71914253b3d591a19d46977df3cd93 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 14:10:51 +0300 Subject: [PATCH 7/9] =?UTF-8?q?tests:=20=D0=BF=D0=BE=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D1=81?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\206\320\270\320\265\320\271OneScript.os" | 55 +++++++++++++++++-- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" index 4a88ace..426732c 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" @@ -4,7 +4,9 @@ #Использовать fs #Использовать tempfiles #Использовать "helpers" +#Использовать "../src/BenchmarkOneScript/cmd" +Перем _ИсходныйТекущийКаталог; // Строка Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов Перем _ИсходнаяТрассировкаЗагрузкиБиблиотек; // Строка Перем _ИсходныйМаркерПримененияКонфигурацииOneScript; // Строка @@ -14,6 +16,7 @@ &Инициализация Процедура ПередВсеми() Экспорт + _ИсходныйТекущийКаталог = ТекущийКаталог(); _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); _ИсходнаяТрассировкаЗагрузкиБиблиотек = ПолучитьПеременнуюСреды("OSLIB_LOADER_TRACE"); _ИсходныйМаркерПримененияКонфигурацииOneScript = ПолучитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED"); @@ -21,6 +24,16 @@ КонецПроцедуры +&После +Процедура ПослеЗапускаТеста() Экспорт + + КаталогАртефактов = ".\BenchmarkArtifacts"; + + ФС.УдалитьФайлы(КаталогАртефактов); + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); + +КонецПроцедуры + &Завершение Процедура ПослеВсех() Экспорт @@ -52,11 +65,6 @@ "BenchmarkOneScript", "cmd" ); - КаталогКлассовКоманд = ОбъединитьПути(КаталогКоманд, "Классы"); - ПодключитьСценарий( - ОбъединитьПути(КаталогКлассовКоманд, "ЗапускательПриложенияСКонфигурациейOneScript.os"), - "ЗапускательПриложенияСКонфигурациейOneScript" - ); УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", "1"); Запускатель = Новый ЗапускательПриложенияСКонфигурациейOneScript(); @@ -68,6 +76,43 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_НеПерезапускатьПриложениеБезКонфигурацийOneScript() Экспорт + + // Подготовка + КаталогЗапуска = _МенеджерВременныхФайлов.СоздатьКаталог(); + ФайлыКонфигурацииOneScript = Новый Массив(); + УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); + Запускатель = Новый ЗапускательПриложенияСКонфигурациейOneScript(); + УстановитьТекущийКаталог(КаталогЗапуска); + + // Действие + Результат = Запускатель.ПерезапуститьСКонфигурацией(ФайлыКонфигурацииOneScript); + + // Проверка + Ожидаем.Что(Результат).Равно(Неопределено); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПерезапуститьПриложениеПриПереданнойКонфигурацииOneScript() Экспорт + + // Подготовка + ФайлыКонфигурацииOneScript = Новый Массив(); + ФайлыКонфигурацииOneScript.Добавить( + ОбъединитьПути(ТекущийКаталог(), "tests", "oscript.cfg") + ); + УстановитьПеременнуюСреды("BENCHOS_OSCRIPT_CONFIG_APPLIED", ""); + Запускатель = Новый ЗапускательПриложенияСКонфигурациейOneScript(); + + // Действие + Результат = Запускатель.ПерезапуститьСКонфигурацией(ФайлыКонфигурацииOneScript); + + // Проверка + Ожидаем.Что(Результат).Не_().Равно(Неопределено); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ОдинРазПерезапуститьRunСКонфигурациямиOneScript() Экспорт From 104c4965b0e61fbed7b2ac8e7ff6e9c4aaa326c7 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 14:37:04 +0300 Subject: [PATCH 8/9] =?UTF-8?q?tests:=20=D1=83=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D1=83=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\206\320\270\320\265\320\271OneScript.os" | 3 +- ...0\260\321\206\320\270\320\270OneScript.os" | 60 ++++--------------- ...0\260\321\206\320\270\320\270OneScript.os" | 34 ++--------- ...20\260\321\200\320\272\320\276\320\262.os" | 42 ++----------- 4 files changed, 24 insertions(+), 115 deletions(-) diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" index 426732c..70ab2c0 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" @@ -43,7 +43,8 @@ "BENCHOS_OSCRIPT_CONFIG_APPLIED", _ИсходныйМаркерПримененияКонфигурацииOneScript ); - + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); + КонецПроцедуры #КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 5898e03..7123789 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -2,6 +2,7 @@ #Использовать fs #Использовать tempfiles #Использовать "helpers" +#Использовать "../src/BenchmarkOneScript/cmd" Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов Перем _ИсходныйТекущийКаталог; // Строка @@ -14,19 +15,17 @@ _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); _ИсходныйТекущийКаталог = ТекущийКаталог(); - - ПутьКЛокатору = ОбъединитьПути( - _ИсходныйТекущийКаталог, - "src/BenchmarkOneScript/cmd/Классы/ЛокаторФайловКонфигурацииOneScript.os" - ); - ПодключитьСценарий( - ПутьКЛокатору, - "ЛокаторФайловКонфигурацииOneScript" - ); _Локатор = Новый ЛокаторФайловКонфигурацииOneScript(); КонецПроцедуры +&После +Процедура ПослеЗапускаТеста() Экспорт + + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); + +КонецПроцедуры + &Завершение Процедура ПослеВсех() Экспорт @@ -195,10 +194,11 @@ КаталогБенчмарка = _МенеджерВременныхФайлов.СоздатьКаталог(); СоздатьБенчмаркСКонфигурацией(КаталогБенчмарка, "ЯвныйБенчмарк.os"); МассивФайлов = МассивИзОдногоЗначения("ЯвныйБенчмарк"); - ОжидаемыйПутьККонфигурации = ПутьККонфигурацииИзКаталога(КаталогБенчмарка); - + УстановитьТекущийКаталог(КаталогБенчмарка); + ОжидаемыйПутьККонфигурации = ПутьККонфигурации(КаталогБенчмарка); + // Действие - ФайлыКонфигурации = НайтиИзКаталога(КаталогБенчмарка, МассивФайлов); + ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); // Проверка Ожидаем.Что(ФайлыКонфигурации).ИмеетДлину(1); @@ -257,42 +257,6 @@ КонецФункции -Функция НайтиИзКаталога(Каталог, МассивФайлов) - - ИсходныйТекущийКаталог = ТекущийКаталог(); - УстановитьТекущийКаталог(Каталог); - - Попытка - Результат = _Локатор.НайтиФайлыКонфигурации(МассивФайлов); - Исключение - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - ВызватьИсключение; - КонецПопытки; - - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - - Возврат Результат; - -КонецФункции - -Функция ПутьККонфигурацииИзКаталога(Каталог) - - ИсходныйТекущийКаталог = ТекущийКаталог(); - УстановитьТекущийКаталог(Каталог); - - Попытка - Результат = ПутьККонфигурации(ТекущийКаталог()); - Исключение - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - ВызватьИсключение; - КонецПопытки; - - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - - Возврат Результат; - -КонецФункции - Функция ПутьККонфигурации(Каталог) Возврат ФС.НормализоватьПуть(ОбъединитьПути(Каталог, "oscript.cfg")); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 2300838..9fbba0b 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -3,11 +3,11 @@ #Использовать asserts #Использовать tempfiles #Использовать "helpers" +#Использовать "../src/BenchmarkOneScript/cmd" Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов Перем _ИсходныйТекущийКаталог; // Строка Перем _ПутьКМенеджеруПараметров; // Строка -Перем _КаталогОбщейБиблиотеки; // Строка #Область ОбработчикиСобытий @@ -17,19 +17,12 @@ _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); _ИсходныйТекущийКаталог = ТекущийКаталог(); - _КаталогОбщейБиблиотеки = ОбъединитьПути( - _ИсходныйТекущийКаталог, - "src/BenchmarkOneScript/core/common" - ); +КонецПроцедуры - КаталогКлассовКонфигурации = ОбъединитьПути( - _ИсходныйТекущийКаталог, - "src/BenchmarkOneScript/core/config/Классы" - ); - _ПутьКМенеджеруПараметров = ОбъединитьПути( - КаталогКлассовКонфигурации, - "МенеджерПараметровКонфигурацииOneScript.os" - ); +&После +Процедура ПослеЗапускаТеста() Экспорт + + УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); КонецПроцедуры @@ -270,21 +263,6 @@ #Область СлужебныеПроцедурыИФункции -Функция ТекстСтартовогоСценария() - - Возврат СтрШаблон( - "#Использовать ""%1"" - | - |ПодключитьСценарий(""%2"", ""МенеджерПараметровКонфигурацииOneScript""); - |МенеджерПараметров = Новый МенеджерПараметровКонфигурацииOneScript(); - |Параметры = МенеджерПараметров.Прочитать(); - |Сообщить(Параметры[""lib.additional""]);", - _КаталогОбщейБиблиотеки, - _ПутьКМенеджеруПараметров - ); - -КонецФункции - Функция ВыполнитьСтартовыйСценарий(ПутьКСтартовомуСценарию, РабочийКаталог) СтрокаКоманды = СтрШаблон( diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 6ea3f91..bb1afca 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\240\320\260\320\267\321\200\320\265\321\210\320\260\321\202\320\265\320\273\321\217\320\222\321\205\320\276\320\264\320\275\321\213\321\205\320\244\320\260\320\271\320\273\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -39,10 +39,12 @@ ВходныеПути = Новый Массив(); ВходныеПути.Добавить("ЯвныйБенчмарк"); ВходныеПути.Добавить("НесуществующийБенчмарк"); - ОжидаемыйПутьКФайлу = ПолныйПутьИзКаталога(Каталог, "ЯвныйБенчмарк.os"); + + УстановитьТекущийКаталог(Каталог); + ОжидаемыйПутьКФайлу = ФС.НормализоватьПуть("ЯвныйБенчмарк.os"); // Действие - Результат = РазрешитьИзКаталога(Каталог, ВходныеПути); + Результат = Новый РазрешательВходныхФайловБенчмарков().Разрешить(ВходныеПути); // Проверка Ожидаем.Что(Результат).ИмеетДлину(2); @@ -112,42 +114,6 @@ #Область СлужебныеПроцедурыИФункции -Функция ПолныйПутьИзКаталога(Каталог, ОтносительныйПуть) - - ИсходныйТекущийКаталог = ТекущийКаталог(); - УстановитьТекущийКаталог(Каталог); - - Попытка - Результат = ФС.НормализоватьПуть(ОтносительныйПуть); - Исключение - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - ВызватьИсключение; - КонецПопытки; - - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - - Возврат Результат; - -КонецФункции - -Функция РазрешитьИзКаталога(Каталог, ВходныеПути) - - ИсходныйТекущийКаталог = ТекущийКаталог(); - УстановитьТекущийКаталог(Каталог); - - Попытка - Результат = Новый РазрешательВходныхФайловБенчмарков().Разрешить(ВходныеПути); - Исключение - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - ВызватьИсключение; - КонецПопытки; - - УстановитьТекущийКаталог(ИсходныйТекущийКаталог); - - Возврат Результат; - -КонецФункции - Функция МассивИзОдногоЗначения(Значение) Результат = Новый Массив(); From 4e24ad971ec389ec9831f2dfb66b7c770da3ae3c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Thu, 23 Jul 2026 14:52:19 +0300 Subject: [PATCH 9/9] =?UTF-8?q?tests:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D1=83=D1=82=D0=B8=20=D0=BD=D0=B0=20macOS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\200\320\260\321\206\320\270\320\265\320\271OneScript.os" | 2 +- ...1\203\321\200\320\260\321\206\320\270\320\270OneScript.os" | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" index 70ab2c0..547665a 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\217\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\265\320\271OneScript.os" @@ -44,7 +44,7 @@ _ИсходныйМаркерПримененияКонфигурацииOneScript ); УстановитьТекущийКаталог(_ИсходныйТекущийКаталог); - + КонецПроцедуры #КонецОбласти diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" index 7123789..e79aa13 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\233\320\276\320\272\320\260\321\202\320\276\321\200\320\260\320\244\320\260\320\271\320\273\320\276\320\262\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270OneScript.os" @@ -195,8 +195,8 @@ СоздатьБенчмаркСКонфигурацией(КаталогБенчмарка, "ЯвныйБенчмарк.os"); МассивФайлов = МассивИзОдногоЗначения("ЯвныйБенчмарк"); УстановитьТекущийКаталог(КаталогБенчмарка); - ОжидаемыйПутьККонфигурации = ПутьККонфигурации(КаталогБенчмарка); - + ОжидаемыйПутьККонфигурации = ФС.НормализоватьПуть("oscript.cfg"); + // Действие ФайлыКонфигурации = _Локатор.НайтиФайлыКонфигурации(МассивФайлов);