1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-12-28 21:09:06 +02:00

- удалил сценарий добавления тестов

- обновил зависимости
This commit is contained in:
Maximov Valery 2023-04-18 16:18:55 +03:00
parent 6270d12531
commit 0f7d3f2342
9 changed files with 6 additions and 703 deletions

View File

@ -35,7 +35,6 @@
В комплекте присутствуют следующие сценарии обработки файлов:
- `ДобавлениеПробеловПередКлючевымиСловами` - добавляет отсутствующие пробелы перед ключевыми словами в файлах модулей. На данный момент обрабатывается только ключевое слово `Экспорт`.
- `ДобавлениеТестовВРасширение` - добавляет отсутствующие сценарии в расширение с unit-тестами. [См. подробнее](/docs/ДобавлениеТестовВРасширение.md)
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`.
- `ИсправлениеНеКаноническогоНаписания` - исправляет неканоничное написание ключевых слов в модулях.
- `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`).

View File

@ -1,14 +0,0 @@
# Сценарий `ДобавлениеТестовВРасширение`
Добавляет отсутствующие сценарии тестов в расширение с unit-тестами для всех экспортных методов.
Обрабатываются:
- общие модули
- модули менеджеров
- модули объектов
- модули наборов записей
Поддерживаются только исходные файлы в формате EDT.
Публичный репозиторий тестового расширения и документация по нему находятся в разработке.

View File

@ -41,7 +41,6 @@ y
y
y
y
y
local
n
"""
@ -54,7 +53,6 @@ n
"КаталогЛокальныхСценариев": "local",
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ДобавлениеТестовВРасширение.os",
"ЗапретИспользованияПерейти.os",
"ИсправлениеНеКаноническогоНаписания.os",
"КорректировкаXMLФорм.os",

View File

@ -40,7 +40,7 @@
Установленные настройки: Базовые настройки
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ДобавлениеТестовВРасширение.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ОтключениеРазрешенияИзменятьФорму.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиИнструкцийПрепроцессора.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,СортировкаСоставаПодсистем.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ОтключениеРазрешенияИзменятьФорму.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиИнструкцийПрепроцессора.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,СортировкаСоставаПодсистем.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
ОтключенныеСценарии =
НастройкиСценариев = Соответствие
ОтключениеПолнотекстовогоПоиска = Соответствие

View File

@ -4,13 +4,13 @@
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
Описание.Имя(ИмяПродукта)
.ВерсияСреды("1.5.0.178")
.ВерсияСреды("1.8.1")
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
.ЗависитОт("logos", "1.3.0")
.ЗависитОт("logos", "1.4.0")
.ЗависитОт("cmdline", "1.0.0")
.ЗависитОт("1bdd", "1.9.0")
.ЗависитОт("gitrunner", "1.6.0")
.ЗависитОт("v8runner", "1.8.0")
.ЗависитОт("1bdd", "1.13.0")
.ЗависитОт("gitrunner", "1.7.0")
.ЗависитОт("v8runner", "1.8.2")
.ЗависитОт("v8unpack", "1.0.4")
.ВключитьФайл("src")
.ВключитьФайл("v8config.json")

View File

@ -1,460 +0,0 @@
Перем Лог;
Перем ЗаголовокЛога;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ДобавлениеТестовВРасширение";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги / файлы, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
ЗаголовокЛога = СтрШаблон("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если Не ЗначениеЗаполнено(КаталогИсходныхФайлов) Тогда
ВызватьИсключение ЗаголовокЛога + ": не заполнен параметр 'КаталогИсходныхФайлов'";
КонецЕсли;
Если Не ЗначениеЗаполнено(ДополнительныеПараметры.КаталогРепозитория) Тогда
ВызватьИсключение ЗаголовокЛога + ": не заполнен параметр 'ДополнительныеПараметры.КаталогРепозитория'";
КонецЕсли;
Если Не ИспользуетсяФорматEDT(КаталогИсходныхФайлов) Тогда
Лог.Отладка(ЗаголовокЛога + ": это не формат EDT в каталоге исходных файлов '%1'", КаталогИсходныхФайлов);
Возврат Ложь;
КонецЕсли;
Если Не ИспользуетсяРасширениеСТестами(ДополнительныеПараметры.КаталогРепозитория) Тогда
Лог.Отладка(ЗаголовокЛога + ": нет расширения с тестами в каталоге репозитория 'tests'");
Возврат Ложь;
КонецЕсли;
Если Не АнализируемыйФайл.Существует()
Или Не ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл)
Или ТипыФайлов.ЭтоФайлЧастьТеста(АнализируемыйФайл, ДополнительныеПараметры.КаталогРепозитория) Тогда
Лог.Отладка(ЗаголовокЛога + ": это не файл исходников проекта");
Возврат Ложь;
КонецЕсли;
МетодыМодуля = МетодыМодуля(
АнализируемыйФайл.ПолноеИмя,
"^\s*?(?:Процедура|Функция|Procedure|Function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\([^\)]*?\)\s*?(?:Экспорт|Export)");
Если МетодыМодуля.Количество() = 0 Тогда
Лог.Отладка(ЗаголовокЛога + ": нет экспортных методов в файле исходников");
Возврат Ложь;
КонецЕсли;
МетаИнформацияФайла = МетаинформацияФайла(КаталогИсходныхФайлов, АнализируемыйФайл);
Если МетаИнформацияФайла = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Лог.Информация(ЗаголовокЛога);
Возврат ТестыОбновлены(ДополнительныеПараметры, МетаИнформацияФайла, МетодыМодуля);
КонецФункции
Функция ИспользуетсяФорматEDT(КаталогИсходныхФайлов)
ФайлОписанияКонфигурации = Новый Файл(ОбъединитьПути(КаталогИсходныхФайлов, ОтносительныйПутьФайлаОписанияКонфигурацииEDT()));
Возврат ФайлОписанияКонфигурации.Существует();
КонецФункции
Функция ИспользуетсяРасширениеСТестами(КаталогРепозитория)
ФайлОписанияКонфигурации = Новый Файл(ОбъединитьПути(КаталогРепозитория, "tests", ОтносительныйПутьФайлаОписанияКонфигурацииEDT()));
Возврат ФайлОписанияКонфигурации.Существует();
КонецФункции
Функция ОтносительныйПутьФайлаОписанияКонфигурацииEDT()
Возврат ОбъединитьПути("src", "Configuration", "Configuration.mdo");
КонецФункции
Функция МетодыМодуля(ИмяФайла, Паттерн)
Методы = Новый Массив();
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если ПустаяСтрока(ТекстМодуля) Тогда
Возврат Методы;
КонецЕсли;
ШаблонПоиска = Новый РегулярноеВыражение(Паттерн);
ШаблонПоиска.Многострочный = Истина;
ШаблонПоиска.ИгнорироватьРегистр = Истина;
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
Для Каждого Совпадение Из Совпадения Цикл
Методы.Добавить(Совпадение.Группы[1].Значение);
КонецЦикла;
Возврат Методы;
КонецФункции
Функция МетаинформацияФайла(КаталогИсходныхФайлов, АнализируемыйФайл)
ФайлКаталогИсходников = Новый Файл(КаталогИсходныхФайлов);
КраткийПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ФайлКаталогИсходников.ПолноеИмя, "");
Если СтрНачинаетсяС(КраткийПуть, ПолучитьРазделительПути()) Тогда
КраткийПуть = Сред(КраткийПуть, 2);
КонецЕсли;
СоставКраткогоПутиКФайлу = СтрРазделить(КраткийПуть, ПолучитьРазделительПути());
ОжидаемоеКоличествоУровней = 4; // src\<КаталогТипаМетаданных>\<ИмяОбъектаМетаданных>\<ФайлИсходников>
Если СоставКраткогоПутиКФайлу.Количество() < ОжидаемоеКоличествоУровней Тогда
Лог.Отладка(ЗаголовокЛога + ": неизвестное расположение в каталоге исходных файлов");
Возврат Неопределено;
КонецЕсли;
КаталогТипаМетаданных = СоставКраткогоПутиКФайлу[1];
ЭлементСписка = МетаданныеКонфигурации.КаталогиТиповМетаданных().НайтиПоЗначению(КаталогТипаМетаданных);
Если ЭлементСписка = Неопределено Тогда
Лог.Отладка(ЗаголовокЛога + ": не удалось определить тип объекта метаданных '%1'", КаталогТипаМетаданных);
Возврат Неопределено;
КонецЕсли;
ТипМетаданных = ЭлементСписка.Представление;
ЭлементСписка = МетаданныеКонфигурации.КаталогиТиповМетаданныхДляТестов().НайтиПоЗначению(КаталогТипаМетаданных);
Если ЭлементСписка = Неопределено Тогда
Лог.Отладка(ЗаголовокЛога + ": тесты не генерируются для типа метаданных '%1' ", КаталогТипаМетаданных);
Возврат Неопределено;
КонецЕсли;
КраткоеПредставлениеТипаМетаданных = ЭлементСписка.Представление;
ИмяОбъектаМетаданных = СоставКраткогоПутиКФайлу[2];
ИмяТестовогоМодуля = СтрШаблон("%1_%2", КраткоеПредставлениеТипаМетаданных, ИмяОбъектаМетаданных);
Метаинформация = Новый Структура();
Метаинформация.Вставить("ТипМетаданных", ТипМетаданных);
Метаинформация.Вставить("КраткоеПредставление", КраткоеПредставлениеТипаМетаданных);
Метаинформация.Вставить("ИмяТестовогоМодуля", ИмяТестовогоМодуля);
Метаинформация.Вставить("Глобальный", Ложь);
Метаинформация.Вставить("Клиент", Ложь);
Метаинформация.Вставить("Сервер", Ложь);
Если ТипыФайлов.ЭтоОбщийМодуль(АнализируемыйФайл, КаталогИсходныхФайлов) Тогда
// src\CommonModules\ОбщийМодуль\Module.bsl
ФайлОписания = Новый Файл(ОбъединитьПути(АнализируемыйФайл.Путь, ИмяОбъектаМетаданных + ".mdo"));
Если ФайлОписания.Существует() Тогда
ТекстОписания = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписания.ПолноеИмя);
Метаинформация.Глобальный = СтрНайти(ТекстОписания, "<global>true</global>") <> 0;
Метаинформация.Клиент = СтрНайти(ТекстОписания, "<clientManagedApplication>true</clientManagedApplication>") <> 0;
Метаинформация.Сервер = СтрНайти(ТекстОписания, "<server>true</server>") <> 0;
Иначе
ВызватьИсключение СтрШаблон(ЗаголовокЛога + ": не найден файл описания общего модуля");
КонецЕсли;
ИначеЕсли ТипыФайлов.ЭтоМодульМенеджера(АнализируемыйФайл) Тогда
// src\Catalogs\Справочник\ManagerModule.bsl
Метаинформация.Сервер = Истина;
Метаинформация.ИмяТестовогоМодуля = СтрШаблон("%1_%2", Метаинформация.ИмяТестовогоМодуля, "ММ");
ИначеЕсли ТипыФайлов.ЭтоМодульОбъекта(АнализируемыйФайл) Тогда
// src\Catalogs\Справочник\ObjectModule.bsl
Метаинформация.Сервер = Истина;
Метаинформация.ИмяТестовогоМодуля = СтрШаблон("%1_%2", Метаинформация.ИмяТестовогоМодуля, "МО");
ИначеЕсли ТипыФайлов.ЭтоМодульНабораЗаписей(АнализируемыйФайл) Тогда
// src\InformationRegisters\Регистр\RecordSetModule.bsl
Метаинформация.Сервер = Истина;
Метаинформация.ИмяТестовогоМодуля = СтрШаблон("%1_%2", Метаинформация.ИмяТестовогоМодуля, "МНЗ");
Иначе
Лог.Отладка(ЗаголовокЛога + ": неподходящий тип исходного файла");
Возврат Неопределено;
КонецЕсли;
Возврат Метаинформация;
КонецФункции
Функция ТестыОбновлены(ДополнительныеПараметры, МетаИнформацияФайла, Методы)
ИзмененныеФайлы = Новый Массив();
КаталогТестов = ОбъединитьПути(ДополнительныеПараметры.КаталогРепозитория, "tests");
КаталогМодулей = ОбъединитьПути(КаталогТестов, "src", "CommonModules");
ПутьФайлаМодуляТеста = ОбъединитьПути(КаталогМодулей, МетаИнформацияФайла.ИмяТестовогоМодуля, "Module.bsl");
ФайлМодуляТеста = Новый Файл(ПутьФайлаМодуляТеста);
Если Не ФайлМодуляТеста.Существует() Тогда
// Добавление общего модуля в расширение.
ФайлКаталогаМодуляТеста = Новый Файл(ФайлМодуляТеста.Путь);
Если Не ФайлКаталогаМодуляТеста.Существует() Тогда
СоздатьКаталог(ФайлКаталогаМодуляТеста.ПолноеИмя);
КонецЕсли;
// Описание модуля.
ПутьФайлаОписанияТеста = ОбъединитьПути(
КаталогМодулей,
МетаИнформацияФайла.ИмяТестовогоМодуля,
МетаИнформацияФайла.ИмяТестовогоМодуля + ".mdo");
ОписаниеМодуля = СтрШаблон(
ШаблонОписанияТеста(),
Строка(Новый УникальныйИдентификатор()),
МетаИнформацияФайла.ИмяТестовогоМодуля,
XMLСтрока(МетаИнформацияФайла.Клиент),
XMLСтрока(МетаИнформацияФайла.Сервер));
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(ОписаниеМодуля);
ТекстовыйДокумент.Записать(ПутьФайлаОписанияТеста, КодировкаТекста.UTF8);
// Текст модуля.
ТекстыТеста = ТекстыТеста(Методы, МетаИнформацияФайла);
ТекстМодуля = СтрШаблон(
ШаблонТестовогоМодуля(),
СтрСоединить(ТекстыТеста.ИсполняемыеСценарии, Символы.ПС),
СтрСоединить(ТекстыТеста.ТестовыеМетоды, Символы.ПС + Символы.ПС));
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(ТекстМодуля);
ТекстовыйДокумент.Записать(ПутьФайлаМодуляТеста, КодировкаТекста.UTF8);
// Описание конфигурации тестов.
ПутьФайлаОписанияРасширенияТестов = ОбъединитьПути(КаталогТестов, "src", "Configuration", "Configuration.mdo");
ТекстОписанияРасширенияТестов = ФайловыеОперации.ПрочитатьТекстФайла(ПутьФайлаОписанияРасширенияТестов);
ТекстОписанияРасширенияТестов = СтрЗаменить(
ТекстОписанияРасширенияТестов,
"</mdclass:Configuration>",
СтрШаблон(
" <commonModules>CommonModule.%1</commonModules>
|</mdclass:Configuration>",
МетаИнформацияФайла.ИмяТестовогоМодуля));
ФайловыеОперации.ЗаписатьТекстФайла(ПутьФайлаОписанияРасширенияТестов, ТекстОписанияРасширенияТестов);
ИзмененныеФайлы.Добавить(ПутьФайлаОписанияТеста);
ИзмененныеФайлы.Добавить(ПутьФайлаМодуляТеста);
ИзмененныеФайлы.Добавить(ПутьФайлаОписанияРасширенияТестов);
Лог.Информация("Добавлен модуль тестов '%1'", ПутьФайлаМодуляТеста);
Иначе
// Добавление отсутствующих сценариев в тестовый модуль.
НовыеМетоды = НовыйМетодыМодуляТестов(ПутьФайлаМодуляТеста, МетаИнформацияФайла, Методы);
Если НовыеМетоды.Количество() = 0 Тогда
Лог.Отладка(ЗаголовокЛога + ": все экспортные методы тестов уже есть в модуле '%1'", ПутьФайлаМодуляТеста);
Возврат Ложь;
КонецЕсли;
ДанныеТеста = ТекстыТеста(НовыеМетоды, МетаИнформацияФайла);
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьФайлаМодуляТеста);
ТекстМодуля = СтрЗаменить(
ТекстМодуля,
" Возврат ИсполняемыеСценарии;",
СтрШаблон(
"%1
| Возврат ИсполняемыеСценарии;", СтрСоединить(ДанныеТеста.ИсполняемыеСценарии, Символы.ПС)));
ТекстМодуля = СтрЗаменить(
ТекстМодуля,
"#Область Тесты
|",
СтрШаблон(
"#Область Тесты
|
|%1
|",
СтрСоединить(ДанныеТеста.ТестовыеМетоды, Символы.ПС + Символы.ПС)));
ФайловыеОперации.ЗаписатьТекстФайла(ПутьФайлаМодуляТеста, ТекстМодуля);
ИзмененныеФайлы.Добавить(ПутьФайлаМодуляТеста);
Лог.Информация("Обновлен модуль тестов '%1'", ПутьФайлаМодуляТеста);
КонецЕсли;
Для Каждого ИмяФайла Из ИзмененныеФайлы Цикл
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(ИмяФайла);
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(ИмяФайла);
КонецЦикла;
Возврат Истина;
КонецФункции
Функция ШаблонОписанияТеста()
Возврат
"<?xml version=""1.0"" encoding=""UTF-8""?>
|<mdclass:CommonModule xmlns:mdclass=""http://g5.1c.ru/v8/dt/metadata/mdclass"" uuid=""%1"">
| <name>%2</name>
| <synonym>
| <key>ru</key>
| <value>%2</value>
| </synonym>
| <clientManagedApplication>%3</clientManagedApplication>
| <server>%4</server>
|</mdclass:CommonModule>";
КонецФункции
Функция ШаблонТестовогоМодуля()
Возврат
"/////////////////////////////////////////////////////////////////////////////////
|// Экспортные процедуры-тесты
|/////////////////////////////////////////////////////////////////////////////////
|
|#Область ТестыAPI
|
|// ИсполняемыеСценарии
|// Сервисный метод для получения списка тестовых методов
|// Параметры:
|// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|// Возвращаемое значение:
|// Массив - Имена методов тестов
|Функция ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
| ИсполняемыеСценарии = Новый Массив;
|%1
| Возврат ИсполняемыеСценарии;
|
|КонецФункции
|
|#КонецОбласти
|
|#Область Тесты
|
|%2
|
|#КонецОбласти
|
|/////////////////////////////////////////////////////////////////////////////////
|// Процедуры и функции, составляющие внутреннюю реализацию модуля
|/////////////////////////////////////////////////////////////////////////////////
|
|#Область СлужебныеПроцедурыИФункции
|#КонецОбласти
|";
КонецФункции
Функция ШаблонМетодаТеста()
Возврат
"// @unit-test:%1
|Процедура %3(Фреймворк, ВыполнитьВТранзакцииСОтменой = Истина) Экспорт
|
|#Если Сервер Тогда
| Если ВыполнитьВТранзакцииСОтменой Тогда
|
| TestsWrapper.ВыполнитьТестВТранзакции(
| Метаданные.ОбщиеМодули.%2,
| ""%3"",
| Фреймворк);
|
| Возврат;
|
| КонецЕсли;
|#КонецЕсли
|
| ВызватьИсключение ""Тест '%2.%3' не реализован"";
|
|КонецПроцедуры";
КонецФункции
Функция НовыйМетодыМодуляТестов(ПутьФайлаМодуляТеста, МетаИнформацияФайла, МетодыМодуляИсходников)
МетодыМодуляТестов = МетодыМодуля(
ПутьФайлаМодуляТеста,
"^\/\/\s*?\@unit-test\:.*?\n(?:Процедура|Procedure)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\([^\)]*?\)\s*?(?:Экспорт|Export)");
Если МетодыМодуляТестов.Количество() = 0 Тогда
ВызватьИсключение СтрШаблон(ЗаголовокЛога + ": нет экспортных методов в модуле '%1'", ПутьФайлаМодуляТеста);
КонецЕсли;
НовыеМетоды = Новый Массив();
Для каждого Метод Из МетодыМодуляИсходников Цикл
ТестовыйМетод = ?(МетаИнформацияФайла.Глобальный, "Глобальный", "") + Метод;
Если МетодыМодуляТестов.Найти(ТестовыйМетод) = Неопределено Тогда
НовыеМетоды.Добавить(Метод);
КонецЕсли;
КонецЦикла;
Возврат НовыеМетоды;
КонецФункции
Функция ТекстыТеста(Методы, МетаИнформацияФайла)
ТекстыТеста = Новый Структура();
ТекстыТеста.Вставить("ИсполняемыеСценарии", Новый Массив());
ТекстыТеста.Вставить("ТестовыеМетоды", Новый Массив());
Для каждого Метод Из Методы Цикл
ИмяМетода = ?(МетаИнформацияФайла.Глобальный, "Глобальный", "") + Метод;
ТекстыТеста.ИсполняемыеСценарии.Добавить(СтрШаблон(" ИсполняемыеСценарии.Добавить(""%1"");", ИмяМетода));
ТекстыТеста.ТестовыеМетоды.Добавить(
СтрШаблон(ШаблонМетодаТеста(),
МетаИнформацияФайла.ТипМетаданных,
МетаИнформацияФайла.ИмяТестовогоМодуля,
ИмяМетода));
КонецЦикла;
Возврат ТекстыТеста;
КонецФункции

View File

@ -32,8 +32,6 @@
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов");
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы");
Возврат ВсеТесты;
@ -404,222 +402,6 @@
#КонецОбласти
#Область ДобавлениеТестовВРасширение
Процедура ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы() Экспорт
ОбъектСценария = ПолучитьСценарий("ДобавлениеТестовВРасширение.os");
// Проверка параметров сценария.
ДополнительныеПараметры = Новый Структура("Лог, КаталогРепозитория, ТекущийКаталогИсходныхФайлов", Лог);
ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(Новый Файл(ПолучитьИмяВременногоФайла()));
ПараметрыМетода.Добавить("");
ПараметрыМетода.Добавить(ДополнительныеПараметры);
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение("не заполнен параметр 'КаталогИсходныхФайлов'");
ПараметрыМетода[1] = ПараметрыМетода[0].Путь;
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение("не заполнен параметр 'ДополнительныеПараметры.КаталогРепозитория'");
////////////////////////////////////////////////////////////////////////////////
// Проверка репозитория.
КаталогРепозитория = МенеджерВременныхФайлов.СоздатьКаталог();
КаталогКонфигурации = ОбъединитьПути(КаталогРепозитория, "configuration");
КаталогИсходников = ОбъединитьПути(КаталогКонфигурации, "src");
СоздатьКаталог(КаталогКонфигурации);
ФС.КопироватьСодержимоеКаталога(ОбъединитьПути(КаталогТестовыхФикстур(), "cf-edt", "configuration"), КаталогКонфигурации);
ПодходящийФайл = Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonModules", "ОбщийМодульКлиентЧастичноПокрытый", "Module.bsl"));
Ожидаем.Что(ПодходящийФайл.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ПодходящийФайл.ПолноеИмя)).ЭтоИстина();
ДополнительныеПараметры = ПолучитьДополнительныеНастройки(КаталогРепозитория, КаталогКонфигурации);
////////////////////////////////////////////////////////////////////////////////
НастройкиНеEDT = Новый Массив();
НастройкиНеEDT.Добавить("v8configФорматКонфигуратора.json");
НастройкиНеEDT.Добавить("v8configФорматНеправильный.json");
НастройкиНеEDT.Добавить("v8configФорматПоУмолчанию.json");
Для каждого НастройкаНеEDT Из НастройкиНеEDT Цикл
ИспользоватьТестовуюНастройку(КаталогРепозитория, НастройкаНеEDT);
Результат = ОбъектСценария.ОбработатьФайл(
ПодходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался файл, вопреки настройке '%1'", НастройкаНеEDT);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
КонецЦикла;
////////////////////////////////////////////////////////////////////////////////
ИспользоватьТестовуюНастройку(КаталогРепозитория, "v8configФорматEDT.json");
Результат = ОбъектСценария.ОбработатьФайл(
ПодходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = "Обработался файл при отсутствии тестового расширения";
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
// Проверка файла.
КаталогТестов = ОбъединитьПути(КаталогРепозитория, "tests");
КаталогИсходниковТестов = ОбъединитьПути(КаталогТестов, "src");
ФС.КопироватьСодержимоеКаталога(ОбъединитьПути(КаталогТестовыхФикстур(), "cf-edt", "tests"), КаталогТестов);
НеподходящиеФайлы = Новый Массив();
НеподходящиеФайлы.Добавить(Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonModules", "ОбщийМодульКлиентЧастичноПокрытый", "ОбщийМодульКлиентЧастичноПокрытый.mdo")));
НеподходящиеФайлы.Добавить(Новый Файл(ОбъединитьПути(КаталогИсходниковТестов, "CommonModules", "ОМ_ОбщийМодульКлиентЧастичноПокрытый", "Module.bsl")));
НеподходящиеФайлы.Добавить(Новый Файл(ПолучитьИмяВременногоФайла("bsl")));
Ожидаем.Что(НеподходящиеФайлы[0].Существует(), СтрШаблон("Отсутствует файл-пример '%1'", НеподходящиеФайлы[0].ПолноеИмя)).ЭтоИстина();
Ожидаем.Что(НеподходящиеФайлы[1].Существует(), СтрШаблон("Отсутствует файл-пример '%1'", НеподходящиеФайлы[1].ПолноеИмя)).ЭтоИстина();
Для каждого НеподходящийФайл Из НеподходящиеФайлы Цикл
Результат = ОбъектСценария.ОбработатьФайл(
НеподходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался неподходящий файл '%1'", НастройкаНеEDT);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
КонецЦикла;
////////////////////////////////////////////////////////////////////////////////
ФайлБезЭкспортныхМетодов = Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonModules", "ОбщийМодульБезЭкспортных", "Module.bsl"));
Ожидаем.Что(ФайлБезЭкспортныхМетодов.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ФайлБезЭкспортныхМетодов.ПолноеИмя)).ЭтоИстина();
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Записать(ФайлБезЭкспортныхМетодов.ПолноеИмя, КодировкаТекста.UTF8);
Результат = ОбъектСценария.ОбработатьФайл(
ФайлБезЭкспортныхМетодов,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался модуль без экспортных методов '%1'", ФайлБезЭкспортныхМетодов.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
Ожидаем.Что(ПодходящийФайл.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ПодходящийФайл.ПолноеИмя)).ЭтоИстина();
КаталогНеизвестногоОбъектаМетаданных = ОбъединитьПути(КаталогИсходников, "НеизвестныйТипМетаданных", "ИмяОбъекта");
СоздатьКаталог(КаталогНеизвестногоОбъектаМетаданных);
ПутьФайлаНеизвестногоОбъектаМетаданных = ОбъединитьПути(КаталогНеизвестногоОбъектаМетаданных, "Module.bsl");
КопироватьФайл(ПодходящийФайл.ПолноеИмя, ПутьФайлаНеизвестногоОбъектаМетаданных);
ФайлНеизвестногоОбъектаМетаданных = Новый Файл(ПутьФайлаНеизвестногоОбъектаМетаданных);
Результат = ОбъектСценария.ОбработатьФайл(
ФайлНеизвестногоОбъектаМетаданных,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался файл неизвестного объекта метаданных '%1'", ФайлНеизвестногоОбъектаМетаданных.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
ФайлНеподходящегоТипаМетаданных = Новый Файл(ОбъединитьПути(КаталогИсходников, "CommonForms", "ОбщаяФорма1", "Module.bsl"));
Ожидаем.Что(ФайлНеподходящегоТипаМетаданных.Существует(), СтрШаблон("Отсутствует файл-пример '%1'", ФайлНеподходящегоТипаМетаданных.ПолноеИмя)).ЭтоИстина();
Результат = ОбъектСценария.ОбработатьФайл(
ФайлНеподходящегоТипаМетаданных,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Обработался файл неподходящего объекта метаданных '%1'", ФайлНеизвестногоОбъектаМетаданных.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоЛожь();
////////////////////////////////////////////////////////////////////////////////
// Контроль корректности проведенных проверок.
Результат = ОбъектСценария.ОбработатьФайл(
ПодходящийФайл,
ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов,
ДополнительныеПараметры);
Сообщение = СтрШаблон("Не обработался подходящий файл '%1'", ПодходящийФайл.ПолноеИмя);
Ожидаем.Что(Результат, Сообщение).ЭтоИстина();
////////////////////////////////////////////////////////////////////////////////
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов() Экспорт
// Подготовка "репозитория".
КаталогРепозитория = МенеджерВременныхФайлов.СоздатьКаталог();
ИспользоватьТестовуюНастройку(КаталогРепозитория, "v8configФорматEDT.json");
ФС.КопироватьСодержимоеКаталога(ОбъединитьПути(КаталогТестовыхФикстур(), "cf-edt"), КаталогРепозитория);
КаталогКонфигурации = ОбъединитьПути(КаталогРепозитория, "configuration");
КаталогИсходников = ОбъединитьПути(КаталогКонфигурации, "src");
КаталогТестов = ОбъединитьПути(КаталогРепозитория, "tests");
// Прогон сценария по всем файлам исходников.
ОбъектСценария = ПолучитьСценарий("ДобавлениеТестовВРасширение.os");
ДополнительныеПараметры = ПолучитьДополнительныеНастройки(КаталогРепозитория, КаталогКонфигурации);
ФайлыПроекта = НайтиФайлы(ОбъединитьПути(КаталогКонфигурации, "src"), ПолучитьМаскуВсеФайлы(), Истина);
Для каждого ФайлПроекта Из ФайлыПроекта Цикл
Если ФайлПроекта.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Результат = ОбъектСценария.ОбработатьФайл(ФайлПроекта, ДополнительныеПараметры.ТекущийКаталогИсходныхФайлов, ДополнительныеПараметры);
КонецЦикла;
// Проверка модулей тестов.
ФайлОписанияКонфигурацииТестов = Новый Файл(ОбъединитьПути(КаталогТестов, "src", "Configuration", "Configuration.mdo"));
ОписаниеКонфигурацииТестов = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписанияКонфигурацииТестов.ПолноеИмя);
КаталогОбщихМодулейТестов = ОбъединитьПути(КаталогТестов, "src", "CommonModules");
Для каждого Кейс Из КейсыПроверкиДобавленияМодулейТестов() Цикл
// Наличие модуля в исходниках.
ФайлИсходников = Новый Файл(ОбъединитьПути(КаталогИсходников, Кейс.КаталогТипаМетаданных, Кейс.ИмяМетаданных, Кейс.ИмяМодуляМетаданных));
Сообщение = СтрШаблон("Не найден файл исходников '%1'", ФайлИсходников.ПолноеИмя);
Ожидаем.Что(ФайлИсходников.Существует(), Сообщение).ЭтоИстина();
// Описание конфигурации.
СтрокаПоиска = СтрШаблон("<commonModules>CommonModule.%1</commonModules>", Кейс.ИмяТестовогоМодуля);
ЧислоВхождений = СтрЧислоВхождений(ОписаниеКонфигурацииТестов, СтрокаПоиска);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний модуля '%1' в описании конфигурации:
|%2",
Кейс.ИмяТестовогоМодуля, ОписаниеКонфигурацииТестов);
Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1);
// Описание модуля тестов.
ФайлОписанияТеста = Новый Файл(ОбъединитьПути(КаталогОбщихМодулейТестов, Кейс.ИмяТестовогоМодуля, Кейс.ИмяТестовогоМодуля + ".mdo"));
Сообщение = СтрШаблон("Не создано описание модуля тестов '%1'", ФайлОписанияТеста.ПолноеИмя);
Ожидаем.Что(ФайлОписанияТеста.Существует(), Сообщение).ЭтоИстина();
ОписаниеТеста = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписанияТеста.ПолноеИмя);
// Клиент.
СтрокаПоиска = СтрШаблон("<clientManagedApplication>%1</clientManagedApplication>", XMLСтрока(Кейс.Клиент));
ЧислоВхождений = СтрЧислоВхождений(ОписаниеТеста, СтрокаПоиска);
ЧислоВхожденийПравильное = ?(Кейс.Клиент, ЧислоВхождений = 1, ЧислоВхождений <= 1);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний контекста 'Клиент = %1' в описании модуля тестов '%2':
|%3",
Кейс.Клиент, ФайлОписанияТеста.ПолноеИмя, ОписаниеТеста);
Ожидаем.Что(ЧислоВхожденийПравильное, Сообщение).ЭтоИстина();
// Сервер.
СтрокаПоиска = СтрШаблон("<server>%1</server>", XMLСтрока(Кейс.Сервер));
ЧислоВхождений = СтрЧислоВхождений(ОписаниеТеста, СтрокаПоиска);
ЧислоВхожденийПравильное = ?(Кейс.Сервер, ЧислоВхождений = 1, ЧислоВхождений <= 1);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний контекста 'Сервер = %1' в описании модуля тестов '%2':
|%3",
Кейс.Сервер, ФайлОписанияТеста.ПолноеИмя, ОписаниеТеста);
Ожидаем.Что(ЧислоВхожденийПравильное, Сообщение).ЭтоИстина();
// Модуль тестов.
ФайлТеста = Новый Файл(ОбъединитьПути(КаталогОбщихМодулейТестов, Кейс.ИмяТестовогоМодуля, "Module.bsl"));
Сообщение = СтрШаблон("Не создан модуль тестов '%1'", ФайлТеста.ПолноеИмя);
Ожидаем.Что(ФайлТеста.Существует(), Сообщение).ЭтоИстина();
ТекстТеста = ФайловыеОперации.ПрочитатьТекстФайла(ФайлТеста.ПолноеИмя);
// Наличие исполняемого сценария.
ИмяМетодаМодуля = ?(Кейс.Глобальный, "Глобальный", "") + Кейс.ИмяМетодаМодуля;
СтрокаПоиска = СтрШаблон("ИсполняемыеСценарии.Добавить(""%1"");", ИмяМетодаМодуля);
ЧислоВхождений = СтрЧислоВхождений(ТекстТеста, СтрокаПоиска);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний исполняемого сценария '%1' в модуле тестов '%2':
|%3",
ИмяМетодаМодуля, ФайлТеста.ПолноеИмя, ТекстТеста);
Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1);
// Наличие метода.
СтрокаПоиска = СтрШаблон("Процедура %1(", ИмяМетодаМодуля);
ЧислоВхождений = СтрЧислоВхождений(ТекстТеста, СтрокаПоиска);
Сообщение = СтрШаблон(
"Неправильное количество упоминаний метода '%1' в модуле тестов '%2':
|%3",
ИмяМетодаМодуля, ФайлТеста.ПолноеИмя, ТекстТеста);
Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОтключениеРазрешенияИзменятьФорму
Процедура ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы() Экспорт

View File

@ -87,7 +87,6 @@
ОжидаемыеСценарии = Новый Массив();
ОжидаемыеСценарии.Добавить("ДобавлениеПробеловПередКлючевымиСловами.os");
ОжидаемыеСценарии.Добавить("ДобавлениеТестовВРасширение.os");
ОжидаемыеСценарии.Добавить("ЗапретИспользованияПерейти.os");
ОжидаемыеСценарии.Добавить("ИсправлениеНеКаноническогоНаписания.os");
ОжидаемыеСценарии.Добавить("КорректировкаXMLФорм.os");

View File

@ -4,7 +4,6 @@
"КаталогЛокальныхСценариев": "",
"ГлобальныеСценарии": [
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ДобавлениеТестовВРасширение.os",
"ЗапретИспользованияПерейти.os",
"ИсправлениеНеКаноническогоНаписания.os",
"КорректировкаXMLФорм.os",