diff --git a/README.md b/README.md index 9613a20..26f4cb7 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,6 @@ В комплекте присутствуют следующие сценарии обработки файлов: - `ДобавлениеПробеловПередКлючевымиСловами` - добавляет отсутствующие пробелы перед ключевыми словами в файлах модулей. На данный момент обрабатывается только ключевое слово `Экспорт`. -- `ДобавлениеТестовВРасширение` - добавляет отсутствующие сценарии в расширение с unit-тестами. [См. подробнее](/docs/ДобавлениеТестовВРасширение.md) - `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`. - `ИсправлениеНеКаноническогоНаписания` - исправляет неканоничное написание ключевых слов в модулях. - `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`). diff --git a/docs/ДобавлениеТестовВРасширение.md b/docs/ДобавлениеТестовВРасширение.md deleted file mode 100644 index 2baea0a..0000000 --- a/docs/ДобавлениеТестовВРасширение.md +++ /dev/null @@ -1,14 +0,0 @@ -# Сценарий `ДобавлениеТестовВРасширение` - -Добавляет отсутствующие сценарии тестов в расширение с unit-тестами для всех экспортных методов. - -Обрабатываются: - -- общие модули -- модули менеджеров -- модули объектов -- модули наборов записей - -Поддерживаются только исходные файлы в формате EDT. - -Публичный репозиторий тестового расширения и документация по нему находятся в разработке. diff --git a/features/ИнтерактивнаяНастройка.feature b/features/ИнтерактивнаяНастройка.feature index dd51632..3dc78a9 100644 --- a/features/ИнтерактивнаяНастройка.feature +++ b/features/ИнтерактивнаяНастройка.feature @@ -41,7 +41,6 @@ y y y y -y local n """ @@ -54,7 +53,6 @@ n "КаталогЛокальныхСценариев": "local", "ГлобальныеСценарии": [ "ДобавлениеПробеловПередКлючевымиСловами.os", - "ДобавлениеТестовВРасширение.os", "ЗапретИспользованияПерейти.os", "ИсправлениеНеКаноническогоНаписания.os", "КорректировкаXMLФорм.os", diff --git a/features/Конфигурирование.feature b/features/Конфигурирование.feature index edf34fa..fd7688e 100644 --- a/features/Конфигурирование.feature +++ b/features/Конфигурирование.feature @@ -10,7 +10,7 @@ Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v22.11" + И Вывод команды "oscript" содержит "precommit4onec v23.04" И Вывод команды "oscript" содержит "Установленные настройки:" И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория =" И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев =" @@ -36,17 +36,15 @@ И Я сообщаю вывод команды "oscript" И Вывод команды "oscript" содержит """ - precommit4onec v22.11 + precommit4onec v23.04 Установленные настройки: Базовые настройки ИспользоватьСценарииРепозитория = Нет КаталогЛокальныхСценариев = - ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.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 ОтключенныеСценарии = НастройкиСценариев = Соответствие ОтключениеПолнотекстовогоПоиска = Соответствие - МетаданныеДляИсключения = Соответствие - src\_example.xml = Номер,ТабличнаяЧасть1.Реквизит - src\_example2.xml = + МетаданныеДляИсключения = Соответствие ПроверкаНецензурныхСлов = Соответствие ФайлСНецензурнымиСловами = НецензурныеСлова.txt РазборОтчетовОбработокРасширений = Соответствие diff --git a/features/ПростыеКоманды.feature b/features/ПростыеКоманды.feature index 86a4b8f..448ad3f 100644 --- a/features/ПростыеКоманды.feature +++ b/features/ПростыеКоманды.feature @@ -14,7 +14,7 @@ Сценарий: Получение версии продукта Когда Я выполняю команду "oscript" с параметрами "src/main.os version" Тогда Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "22.11" + И Вывод команды "oscript" содержит "23.04" И Вывод команды "oscript" не содержит "precommit4onec v" И Код возврата команды "oscript" равен 0 @@ -22,7 +22,7 @@ Когда Я выполняю команду "oscript" с параметрами "src/main.os help" Тогда Вывод команды "oscript" содержит """ - precommit4onec v22.11 + precommit4onec v23.04 Возможные команды: help - Выводит справку по командам version - Выводит версию приложения @@ -37,7 +37,7 @@ Когда Я выполняю команду "oscript" с параметрами "src/main.os" Тогда Вывод команды "oscript" содержит """ - precommit4onec v22.11 + precommit4onec v23.04 Возможные команды: help - Выводит справку по командам version - Выводит версию приложения diff --git a/features/УстановкаПрекоммита.feature b/features/УстановкаПрекоммита.feature index 6890b89..3aea64d 100644 --- a/features/УстановкаПрекоммита.feature +++ b/features/УстановкаПрекоммита.feature @@ -18,7 +18,7 @@ Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v22.11" + И Вывод команды "oscript" содержит "precommit4onec v23.04" И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан" И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit" @@ -28,14 +28,14 @@ И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v22.11" + И Вывод команды "oscript" содержит "precommit4onec v23.04" И Вывод команды "oscript" содержит "не является репозиторием git" Сценарий: Установка precommit4onec во вложенные каталоги Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v22.11" + И Вывод команды "oscript" содержит "precommit4onec v23.04" И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit" И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit" @@ -51,6 +51,6 @@ И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r" Тогда Код возврата команды "oscript" равен 0 И Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "precommit4onec v22.11" + И Вывод команды "oscript" содержит "precommit4onec v23.04" И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit" И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit" diff --git a/packagedef b/packagedef index c3a1ce1..b79ff18 100644 --- a/packagedef +++ b/packagedef @@ -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") diff --git a/src/Модули/МенеджерНастроек.os b/src/Модули/МенеджерНастроек.os index 544b5d7..bdf1ce6 100644 --- a/src/Модули/МенеджерНастроек.os +++ b/src/Модули/МенеджерНастроек.os @@ -282,7 +282,11 @@ Функция ЭтоНовый() Экспорт - Возврат Настройки().ЭтоНовый(); + Если НЕ НастройкиИнициализированы Тогда + Возврат Истина; + Иначе + Возврат Настройки().ЭтоНовый(); + КонецЕсли; КонецФункции diff --git a/src/Модули/ПараметрыПриложения.os b/src/Модули/ПараметрыПриложения.os index 847213a..b6da169 100644 --- a/src/Модули/ПараметрыПриложения.os +++ b/src/Модули/ПараметрыПриложения.os @@ -24,7 +24,7 @@ // Функция ВерсияПродукта() Экспорт - Возврат "22.11"; + Возврат "23.04"; КонецФункции // ВерсияПродукта diff --git a/src/Модули/СценарииОбработки.os b/src/Модули/СценарииОбработки.os index 2a773c9..9cb8048 100644 --- a/src/Модули/СценарииОбработки.os +++ b/src/Модули/СценарииОбработки.os @@ -3,8 +3,7 @@ ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев(); ВсеЗагруженные = Новый Массив; ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os"); - ФайлыЛокальныхСценариев = Новый Массив; - + ФайлыЛокальныхСценариев = Новый Массив; Лог = МенеджерПриложения.ПолучитьЛог(); diff --git a/src/СценарииОбработки/ДобавлениеТестовВРасширение.os b/src/СценарииОбработки/ДобавлениеТестовВРасширение.os deleted file mode 100644 index c372bb9..0000000 --- a/src/СценарииОбработки/ДобавлениеТестовВРасширение.os +++ /dev/null @@ -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")); - Если ФайлОписания.Существует() Тогда - - ТекстОписания = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписания.ПолноеИмя); - Метаинформация.Глобальный = СтрНайти(ТекстОписания, "true") <> 0; - Метаинформация.Клиент = СтрНайти(ТекстОписания, "true") <> 0; - Метаинформация.Сервер = СтрНайти(ТекстОписания, "true") <> 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"); - ТекстОписанияРасширенияТестов = ФайловыеОперации.ПрочитатьТекстФайла(ПутьФайлаОписанияРасширенияТестов); - ТекстОписанияРасширенияТестов = СтрЗаменить( - ТекстОписанияРасширенияТестов, - "", - СтрШаблон( - " CommonModule.%1 - |", - МетаИнформацияФайла.ИмяТестовогоМодуля)); - ФайловыеОперации.ЗаписатьТекстФайла(ПутьФайлаОписанияРасширенияТестов, ТекстОписанияРасширенияТестов); - - ИзмененныеФайлы.Добавить(ПутьФайлаОписанияТеста); - ИзмененныеФайлы.Добавить(ПутьФайлаМодуляТеста); - ИзмененныеФайлы.Добавить(ПутьФайлаОписанияРасширенияТестов); - - Лог.Информация("Добавлен модуль тестов '%1'", ПутьФайлаМодуляТеста); - - Иначе - - // Добавление отсутствующих сценариев в тестовый модуль. - НовыеМетоды = НовыйМетодыМодуляТестов(ПутьФайлаМодуляТеста, МетаИнформацияФайла, Методы); - Если НовыеМетоды.Количество() = 0 Тогда - - Лог.Отладка(ЗаголовокЛога + ": все экспортные методы тестов уже есть в модуле '%1'", ПутьФайлаМодуляТеста); - Возврат Ложь; - - КонецЕсли; - - ДанныеТеста = ТекстыТеста(НовыеМетоды, МетаИнформацияФайла); - ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьФайлаМодуляТеста); - ТекстМодуля = СтрЗаменить( - ТекстМодуля, - " Возврат ИсполняемыеСценарии;", - СтрШаблон( - "%1 - | Возврат ИсполняемыеСценарии;", СтрСоединить(ДанныеТеста.ИсполняемыеСценарии, Символы.ПС))); - - ТекстМодуля = СтрЗаменить( - ТекстМодуля, - "#Область Тесты - |", - СтрШаблон( - "#Область Тесты - | - |%1 - |", - СтрСоединить(ДанныеТеста.ТестовыеМетоды, Символы.ПС + Символы.ПС))); - - ФайловыеОперации.ЗаписатьТекстФайла(ПутьФайлаМодуляТеста, ТекстМодуля); - ИзмененныеФайлы.Добавить(ПутьФайлаМодуляТеста); - Лог.Информация("Обновлен модуль тестов '%1'", ПутьФайлаМодуляТеста); - - КонецЕсли; - - Для Каждого ИмяФайла Из ИзмененныеФайлы Цикл - ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(ИмяФайла); - ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(ИмяФайла); - КонецЦикла; - - Возврат Истина; - -КонецФункции - -Функция ШаблонОписанияТеста() - - Возврат - " - | - | %2 - | - | ru - | %2 - | - | %3 - | %4 - |"; - -КонецФункции - -Функция ШаблонТестовогоМодуля() - - Возврат - "///////////////////////////////////////////////////////////////////////////////// - |// Экспортные процедуры-тесты - |///////////////////////////////////////////////////////////////////////////////// - | - |#Область Тесты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"");", ИмяМетода)); - - ТекстыТеста.ТестовыеМетоды.Добавить( - СтрШаблон(ШаблонМетодаТеста(), - МетаИнформацияФайла.ТипМетаданных, - МетаИнформацияФайла.ИмяТестовогоМодуля, - ИмяМетода)); - - КонецЦикла; - - Возврат ТекстыТеста; - -КонецФункции diff --git a/src/СценарииОбработки/ЗапретИспользованияПерейти.os b/src/СценарииОбработки/ЗапретИспользованияПерейти.os index a72829b..1acd170 100644 --- a/src/СценарииОбработки/ЗапретИспользованияПерейти.os +++ b/src/СценарииОбработки/ЗапретИспользованияПерейти.os @@ -56,7 +56,7 @@ ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля); ТекстОшибки = ""; - ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?Перейти\s+?~[a-zA-ZА-Яа-я0-9_]+"); + ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?[^|]Перейти\s+?~[a-zA-ZА-Яа-я0-9_]+"); ШаблонПоиска.Многострочный = Истина; ШаблонПоиска.ИгнорироватьРегистр = Истина; @@ -65,7 +65,10 @@ Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля); Если Совпадения.Количество() Тогда - ТекстОшибки = СтрШаблон("В файле '%1' обнаружено использование Перейти (%2)", ПутьКФайлуМодуля, Совпадения.Количество()); + ТекстОшибки = СтрШаблон( + "В файле '%1' обнаружено использование Перейти (%2)", + ПутьКФайлуМодуля, + Совпадения.Количество()); Лог.Ошибка(ТекстОшибки); ВызватьИсключение ТекстОшибки; diff --git a/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os b/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os index 251a4ca..98fbd86 100644 --- a/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os +++ b/src/СценарииОбработки/ОтключениеПолнотекстовогоПоиска.os @@ -30,13 +30,6 @@ НастройкиСценария = Новый Соответствие; ПутьИРеквизиты = Новый Соответствие; - МассивРеквизитов = Новый Массив; - МассивРеквизитов.Добавить("Номер"); - МассивРеквизитов.Добавить("ТабличнаяЧасть1.Реквизит"); - - ПутьИРеквизиты.Вставить("src\_example.xml", МассивРеквизитов); - ПутьИРеквизиты.Вставить("src\_example2.xml", Новый Массив); - НастройкиСценария.Вставить("МетаданныеДляИсключения", ПутьИРеквизиты); Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария); @@ -67,10 +60,13 @@ Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда МетаданныеДляИсключения = НастройкиСценария.Получить("МетаданныеДляИсключения"); - - ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, ""); - МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть); - + Если МетаданныеДляИсключения = Неопределено Тогда + МассивРеквизитов = Неопределено; + Иначе + ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, ""); + МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть); + КонецЕсли; + Если МассивРеквизитов = Неопределено ИЛИ ЗначениеЗаполнено(МассивРеквизитов) Тогда //Неопределено - нет файла в исключении, массив не пустой - исключение только по реквизитам Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); diff --git a/src/СценарииОбработки/СортировкаСоставаПодсистем.os b/src/СценарииОбработки/СортировкаСоставаПодсистем.os index 1f0055f..4a2f3d1 100644 --- a/src/СценарииОбработки/СортировкаСоставаПодсистем.os +++ b/src/СценарииОбработки/СортировкаСоставаПодсистем.os @@ -39,8 +39,8 @@ Если АнализируемыйФайл.Существует() Тогда - Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) ИЛИ - ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда + Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) + ИЛИ ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл); @@ -57,18 +57,14 @@ КонецЕсли; - Возврат ЛОЖЬ; + Возврат Ложь; КонецФункции // ОбработатьФайл() Функция ОтсортироватьПодсистему(Знач ИмяФайла, ЭтоЕДТ) СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); - - ПоискДочерних = ?(ЭтоЕДТ, "(?:)([\w\W]+)(?:<\/content>)", "(\s+)(<[\w\W]+>)(\s+<\/Content>)"); - Регексп = Новый РегулярноеВыражение(ПоискДочерних); - Регексп.ИгнорироватьРегистр = ИСТИНА; - Регексп.Многострочный = ИСТИНА; + Регексп = РегекспСостав(ЭтоЕДТ); ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла); Если ПодчиненныеМетаданные.Количество() = 0 Тогда @@ -78,31 +74,33 @@ КонецЕсли; ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[0].Значение; - - //Тип.Объект или GUID - ПоискМетаданных = ?(ЭтоЕДТ, "^\s*<[\w]+>(?:([a-zA-Z]+)\.([а-яa-zA-ZА-Я0-9_]+)|(([a-zA-z0-9\-]+)))<\/[\w]+>", "^\s+<[\w:\s=""]+>(?:([a-zA-Z0-9_]+).([а-яa-zA-ZА-Я0-9_]+)|(([a-zA-z0-9\-]+)))<\/[\w:]+>"); - РегекспМетаданные = Новый РегулярноеВыражение(ПоискМетаданных); - РегекспМетаданные.ИгнорироватьРегистр = Истина; - РегекспМетаданные.Многострочный = Истина; - ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока); + ОбъектыМетаданныхСтроки = РегекспМетаданные(ЭтоЕДТ).НайтиСовпадения(ИсходнаяСтрока); - ОбъектыТипаПоПорядку = Новый СписокЗначений; // отдельный список с типами, нужен для того, чтобы сохранить порядок при обходе соответствия + // отдельный список с типами, нужен для того, чтобы сохранить порядок при обходе соответствия + ОбъектыТипаПоПорядку = Новый СписокЗначений; ОбъектыМетаданных = Новый Соответствие; ПоследнийТип = ""; ОбъектыТипа = Новый СписокЗначений; Для Каждого ОбъектМетаданных Из ОбъектыМетаданныхСтроки Цикл - Список = ОбъектыМетаданных.Получить(ОбъектМетаданных.Группы[1].Значение); + ТипМетаданных = ОбъектМетаданных.Группы[1].Значение; + СтрокаМетаданных = ОбъектМетаданных.Группы[0].Значение; + ИмяМетаданного = ОбъектМетаданных.Группы[2].Значение; + Если СтрНачинаетсяС(ИмяМетаданного, ".") Тогда + ИмяМетаданного = Сред(ИмяМетаданного, 2); + КонецЕсли; + + Список = ОбъектыМетаданных.Получить(ТипМетаданных); Если Список = Неопределено Тогда Список = Новый СписокЗначений; - ОбъектыМетаданных.Вставить(ОбъектМетаданных.Группы[1].Значение, Список); - ОбъектыТипаПоПорядку.Добавить(ОбъектМетаданных.Группы[1].Значение); - КонецЕсли; - + ОбъектыМетаданных.Вставить(ТипМетаданных, Список); + ОбъектыТипаПоПорядку.Добавить(ТипМетаданных); + КонецЕсли; + Если Список.НайтиПоЗначению(ОбъектМетаданных.Группы[0].Значение) = Неопределено Тогда - Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ОбъектМетаданных.Группы[2].Значение); + Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ИмяМетаданного); КонецЕсли; КонецЦикла; @@ -120,7 +118,8 @@ КонецЦикла; Если НЕ ЭтоЕДТ Тогда - СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены) + ПодчиненныеМетаданные[0].Группы[3].Значение; + СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены) + + ПодчиненныеМетаданные[0].Группы[3].Значение; КонецЕсли; Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда @@ -139,4 +138,28 @@ Возврат Истина; -КонецФункции \ No newline at end of file +КонецФункции + +Функция РегекспСостав(ЭтоЕДТ) + + ПоискДочерних = ?(ЭтоЕДТ, "(?:)([\w\W]+)(?:<\/content>)", "(\s+)(<[\w\W]+>)(\s+<\/Content>)"); + Регексп = Новый РегулярноеВыражение(ПоискДочерних); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + + Возврат Регексп; + +КонецФункции + +Функция РегекспМетаданные(ЭтоЕДТ) + + ШаблонНачало = ?(ЭтоЕДТ, "^\s*<[\w]+>", "^\s+<[\w:\s=""]+>"); + ШаблонИмяМетаданных = "([a-zA-Z]+)((?:\.(?:[а-яa-zA-ZА-Я0-9_]+))+)"; + ШаблонУИД = "(([a-zA-z0-9\-]+))"; + ПоискМетаданных = СтрШаблон("%1(?:%2|%3)<\/[\w:]+>", ШаблонНачало, ШаблонУИД, ШаблонИмяМетаданных); + Регексп = Новый РегулярноеВыражение(ПоискМетаданных); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + + Возврат Регексп; +КонецФункции diff --git a/tests/fixtures/Настройки/v8configОтключенныеСценарииПереопреденыГлобальные.json b/tests/fixtures/Настройки/v8configОтключенныеСценарииПереопреденыГлобальные.json index dc80a2a..b53d8ad 100644 --- a/tests/fixtures/Настройки/v8configОтключенныеСценарииПереопреденыГлобальные.json +++ b/tests/fixtures/Настройки/v8configОтключенныеСценарииПереопреденыГлобальные.json @@ -22,15 +22,6 @@ "УдалениеЛишнихПустыхСтрок.os" ], "НастройкиСценариев": { - "ОтключениеПолнотекстовогоПоиска": { - "МетаданныеДляИсключения": { - "src\\_example.xml": [ - "Номер", - "ТабличнаяЧасть1.Реквизит" - ], - "src\\_example2.xml": [] - } - }, "РазборОтчетовОбработокРасширений": { "ИспользоватьНастройкиПоУмолчанию": true, "ВерсияПлатформы": "" diff --git a/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml b/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml index a7a0271..6129550 100644 --- a/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml +++ b/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml @@ -25,6 +25,7 @@ 4308b2f2-9e92-486e-8c34-13c11fd5fb49 Enum.Енум7 Enum.Енум6 + ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках diff --git a/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo b/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo index 90bd8a7..cea45be 100644 --- a/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo +++ b/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo @@ -14,5 +14,6 @@ CommonModule.УведомленияПереопределяемый Catalog.ВидыУведомлений CommonModule.УведомленияСерверПовтИсп + ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках Subsystem.ПодсистемыБСП.Subsystem.ОбменСообщениями diff --git a/tests/ПроверкаСценариевОбработки.os b/tests/ПроверкаСценариевОбработки.os index f0f1047..645c2d7 100644 --- a/tests/ПроверкаСценариевОбработки.os +++ b/tests/ПроверкаСценариевОбработки.os @@ -3,6 +3,7 @@ #Использовать logos #Использовать tempfiles #Использовать fs +#Использовать ".." Перем юТест; Перем Лог; @@ -22,7 +23,6 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник"); - ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки"); @@ -32,8 +32,6 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени"); - ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы"); - ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы"); Возврат ВсеТесты; @@ -102,7 +100,7 @@ Ожидаем.Что(Результат, Истина).ЭтоИстина(); ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле); - + Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле)); ИмяФайла = "СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo"; Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "УведомленияПриИзмененииОбъектов.mdo", "Subsystems"); @@ -111,6 +109,7 @@ Ожидаем.Что(Результат, Истина).ЭтоИстина(); ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле); + Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле)); ИмяФайла = "СортировкаОбъектовВПодсистемах/ОбменСообщениями.mdo"; Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "ОбменСообщениями.mdo", "Subsystems"); @@ -120,7 +119,7 @@ Ожидаем.Что(Результат, Истина).ЭтоИстина(); ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); Ожидаем.Что(ТекстДо, Истина).Равно(ТекстПосле); - + Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле)); КонецПроцедуры @@ -403,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'", ФайлИсходников.ПолноеИмя); - Ожидаем.Что(ФайлИсходников.Существует(), Сообщение).ЭтоИстина(); - - // Описание конфигурации. - СтрокаПоиска = СтрШаблон("CommonModule.%1", Кейс.ИмяТестовогоМодуля); - ЧислоВхождений = СтрЧислоВхождений(ОписаниеКонфигурацииТестов, СтрокаПоиска); - Сообщение = СтрШаблон( - "Неправильное количество упоминаний модуля '%1' в описании конфигурации: - |%2", - Кейс.ИмяТестовогоМодуля, ОписаниеКонфигурацииТестов); - Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1); - - // Описание модуля тестов. - ФайлОписанияТеста = Новый Файл(ОбъединитьПути(КаталогОбщихМодулейТестов, Кейс.ИмяТестовогоМодуля, Кейс.ИмяТестовогоМодуля + ".mdo")); - Сообщение = СтрШаблон("Не создано описание модуля тестов '%1'", ФайлОписанияТеста.ПолноеИмя); - Ожидаем.Что(ФайлОписанияТеста.Существует(), Сообщение).ЭтоИстина(); - ОписаниеТеста = ФайловыеОперации.ПрочитатьТекстФайла(ФайлОписанияТеста.ПолноеИмя); - // Клиент. - СтрокаПоиска = СтрШаблон("%1", XMLСтрока(Кейс.Клиент)); - ЧислоВхождений = СтрЧислоВхождений(ОписаниеТеста, СтрокаПоиска); - ЧислоВхожденийПравильное = ?(Кейс.Клиент, ЧислоВхождений = 1, ЧислоВхождений <= 1); - Сообщение = СтрШаблон( - "Неправильное количество упоминаний контекста 'Клиент = %1' в описании модуля тестов '%2': - |%3", - Кейс.Клиент, ФайлОписанияТеста.ПолноеИмя, ОписаниеТеста); - Ожидаем.Что(ЧислоВхожденийПравильное, Сообщение).ЭтоИстина(); - // Сервер. - СтрокаПоиска = СтрШаблон("%1", XMLСтрока(Кейс.Сервер)); - ЧислоВхождений = СтрЧислоВхождений(ОписаниеТеста, СтрокаПоиска); - ЧислоВхожденийПравильное = ?(Кейс.Сервер, ЧислоВхождений = 1, ЧислоВхождений <= 1); - Сообщение = СтрШаблон( - "Неправильное количество упоминаний контекста 'Сервер = %1' в описании модуля тестов '%2': - |%3", - Кейс.Сервер, ФайлОписанияТеста.ПолноеИмя, ОписаниеТеста); - Ожидаем.Что(ЧислоВхожденийПравильное, Сообщение).ЭтоИстина(); - - // Модуль тестов. - ФайлТеста = Новый Файл(ОбъединитьПути(КаталогОбщихМодулейТестов, Кейс.ИмяТестовогоМодуля, "Module.bsl")); - Сообщение = СтрШаблон("Не создан модуль тестов '%1'", ФайлТеста.ПолноеИмя); - Ожидаем.Что(ФайлТеста.Существует(), Сообщение).ЭтоИстина(); - ТекстТеста = ФайловыеОперации.ПрочитатьТекстФайла(ФайлТеста.ПолноеИмя); - // Наличие исполняемого сценария. - ИмяМетодаМодуля = ?(Кейс.Глобальный, "Глобальный", "") + Кейс.ИмяМетодаМодуля; - СтрокаПоиска = СтрШаблон("ИсполняемыеСценарии.Добавить(""%1"");", ИмяМетодаМодуля); - ЧислоВхождений = СтрЧислоВхождений(ТекстТеста, СтрокаПоиска); - Сообщение = СтрШаблон( - "Неправильное количество упоминаний исполняемого сценария '%1' в модуле тестов '%2': - |%3", - ИмяМетодаМодуля, ФайлТеста.ПолноеИмя, ТекстТеста); - Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1); - // Наличие метода. - СтрокаПоиска = СтрШаблон("Процедура %1(", ИмяМетодаМодуля); - ЧислоВхождений = СтрЧислоВхождений(ТекстТеста, СтрокаПоиска); - Сообщение = СтрШаблон( - "Неправильное количество упоминаний метода '%1' в модуле тестов '%2': - |%3", - ИмяМетодаМодуля, ФайлТеста.ПолноеИмя, ТекстТеста); - Ожидаем.Что(ЧислоВхождений, Сообщение).Равно(1); - - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - - #Область ОтключениеРазрешенияИзменятьФорму Процедура ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы() Экспорт diff --git a/tests/ТестНастройкиРепозитория.os b/tests/ТестНастройкиРепозитория.os index a294907..9c359fe 100644 --- a/tests/ТестНастройкиРепозитория.os +++ b/tests/ТестНастройкиРепозитория.os @@ -87,7 +87,6 @@ ОжидаемыеСценарии = Новый Массив(); ОжидаемыеСценарии.Добавить("ДобавлениеПробеловПередКлючевымиСловами.os"); - ОжидаемыеСценарии.Добавить("ДобавлениеТестовВРасширение.os"); ОжидаемыеСценарии.Добавить("ЗапретИспользованияПерейти.os"); ОжидаемыеСценарии.Добавить("ИсправлениеНеКаноническогоНаписания.os"); ОжидаемыеСценарии.Добавить("КорректировкаXMLФорм.os"); diff --git a/v8config.json b/v8config.json index 3d79d63..db478c7 100644 --- a/v8config.json +++ b/v8config.json @@ -4,7 +4,6 @@ "КаталогЛокальныхСценариев": "", "ГлобальныеСценарии": [ "ДобавлениеПробеловПередКлючевымиСловами.os", - "ДобавлениеТестовВРасширение.os", "ЗапретИспользованияПерейти.os", "ИсправлениеНеКаноническогоНаписания.os", "КорректировкаXMLФорм.os", @@ -27,13 +26,7 @@ "ОтключенныеСценарии": [], "НастройкиСценариев": { "ОтключениеПолнотекстовогоПоиска": { - "МетаданныеДляИсключения": { - "src\\_example.xml": [ - "Номер", - "ТабличнаяЧасть1.Реквизит" - ], - "src\\_example2.xml": [] - } + "МетаданныеДляИсключения": {} }, "ПроверкаНецензурныхСлов": { "ФайлСНецензурнымиСловами": "НецензурныеСлова.txt"