You've already forked precommit4onec
mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2025-06-27 00:41:06 +02:00
Merge branch 'release/22.04'
This commit is contained in:
@ -35,7 +35,6 @@
|
|||||||
В комплекте присутствуют следующие сценарии обработки файлов:
|
В комплекте присутствуют следующие сценарии обработки файлов:
|
||||||
|
|
||||||
- `ДобавлениеПробеловПередКлючевымиСловами` - добавляет отсутствующие пробелы перед ключевыми словами в файлах модулей. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
- `ДобавлениеПробеловПередКлючевымиСловами` - добавляет отсутствующие пробелы перед ключевыми словами в файлах модулей. На данный момент обрабатывается только ключевое слово `Экспорт`.
|
||||||
- `ДобавлениеТестовВРасширение` - добавляет отсутствующие сценарии в расширение с unit-тестами. [См. подробнее](/docs/ДобавлениеТестовВРасширение.md)
|
|
||||||
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`.
|
- `ЗапретИспользованияПерейти` - проверяет модуль на использование методов `Перейти`.
|
||||||
- `ИсправлениеНеКаноническогоНаписания` - исправляет неканоничное написание ключевых слов в модулях.
|
- `ИсправлениеНеКаноническогоНаписания` - исправляет неканоничное написание ключевых слов в модулях.
|
||||||
- `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`).
|
- `КорректировкаXMLФорм` - исправляет дубли индексов элементов в файлах описаний форм (могут образоваться при объединениях). Поддерживаются как файлы в формате выгрузки конфигуратора (`Form.xml`), так и в формате EDT (`Form.form`).
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
# Сценарий `ДобавлениеТестовВРасширение`
|
|
||||||
|
|
||||||
Добавляет отсутствующие сценарии тестов в расширение с unit-тестами для всех экспортных методов.
|
|
||||||
|
|
||||||
Обрабатываются:
|
|
||||||
|
|
||||||
- общие модули
|
|
||||||
- модули менеджеров
|
|
||||||
- модули объектов
|
|
||||||
- модули наборов записей
|
|
||||||
|
|
||||||
Поддерживаются только исходные файлы в формате EDT.
|
|
||||||
|
|
||||||
Публичный репозиторий тестового расширения и документация по нему находятся в разработке.
|
|
@ -41,7 +41,6 @@ y
|
|||||||
y
|
y
|
||||||
y
|
y
|
||||||
y
|
y
|
||||||
y
|
|
||||||
local
|
local
|
||||||
n
|
n
|
||||||
"""
|
"""
|
||||||
@ -54,7 +53,6 @@ n
|
|||||||
"КаталогЛокальныхСценариев": "local",
|
"КаталогЛокальныхСценариев": "local",
|
||||||
"ГлобальныеСценарии": [
|
"ГлобальныеСценарии": [
|
||||||
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
||||||
"ДобавлениеТестовВРасширение.os",
|
|
||||||
"ЗапретИспользованияПерейти.os",
|
"ЗапретИспользованияПерейти.os",
|
||||||
"ИсправлениеНеКаноническогоНаписания.os",
|
"ИсправлениеНеКаноническогоНаписания.os",
|
||||||
"КорректировкаXMLФорм.os",
|
"КорректировкаXMLФорм.os",
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
|
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os configure -global"
|
||||||
Тогда Код возврата команды "oscript" равен 0
|
Тогда Код возврата команды "oscript" равен 0
|
||||||
И Я сообщаю вывод команды "oscript"
|
И Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "oscript" содержит "precommit4onec v22.11"
|
И Вывод команды "oscript" содержит "precommit4onec v23.04"
|
||||||
И Вывод команды "oscript" содержит "Установленные настройки:"
|
И Вывод команды "oscript" содержит "Установленные настройки:"
|
||||||
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
|
И Вывод команды "oscript" содержит "ИспользоватьСценарииРепозитория ="
|
||||||
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
|
И Вывод команды "oscript" содержит "КаталогЛокальныхСценариев ="
|
||||||
@ -36,17 +36,15 @@
|
|||||||
И Я сообщаю вывод команды "oscript"
|
И Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "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
|
ФайлСНецензурнымиСловами = НецензурныеСлова.txt
|
||||||
РазборОтчетовОбработокРасширений = Соответствие
|
РазборОтчетовОбработокРасширений = Соответствие
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
Сценарий: Получение версии продукта
|
Сценарий: Получение версии продукта
|
||||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
|
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
|
||||||
Тогда Я сообщаю вывод команды "oscript"
|
Тогда Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "oscript" содержит "22.11"
|
И Вывод команды "oscript" содержит "23.04"
|
||||||
И Вывод команды "oscript" не содержит "precommit4onec v"
|
И Вывод команды "oscript" не содержит "precommit4onec v"
|
||||||
И Код возврата команды "oscript" равен 0
|
И Код возврата команды "oscript" равен 0
|
||||||
|
|
||||||
@ -22,7 +22,7 @@
|
|||||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
|
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
|
||||||
Тогда Вывод команды "oscript" содержит
|
Тогда Вывод команды "oscript" содержит
|
||||||
"""
|
"""
|
||||||
precommit4onec v22.11
|
precommit4onec v23.04
|
||||||
Возможные команды:
|
Возможные команды:
|
||||||
help - Выводит справку по командам
|
help - Выводит справку по командам
|
||||||
version - Выводит версию приложения
|
version - Выводит версию приложения
|
||||||
@ -37,7 +37,7 @@
|
|||||||
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
|
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
|
||||||
Тогда Вывод команды "oscript" содержит
|
Тогда Вывод команды "oscript" содержит
|
||||||
"""
|
"""
|
||||||
precommit4onec v22.11
|
precommit4onec v23.04
|
||||||
Возможные команды:
|
Возможные команды:
|
||||||
help - Выводит справку по командам
|
help - Выводит справку по командам
|
||||||
version - Выводит версию приложения
|
version - Выводит версию приложения
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
|
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install rep1"
|
||||||
Тогда Код возврата команды "oscript" равен 0
|
Тогда Код возврата команды "oscript" равен 0
|
||||||
И Я сообщаю вывод команды "oscript"
|
И Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "oscript" содержит "precommit4onec v22.11"
|
И Вывод команды "oscript" содержит "precommit4onec v23.04"
|
||||||
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
|
И Вывод команды "oscript" содержит "Pre-commit hook для rep1 создан"
|
||||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||||
|
|
||||||
@ -28,14 +28,14 @@
|
|||||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
|
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./"
|
||||||
Тогда Код возврата команды "oscript" равен 0
|
Тогда Код возврата команды "oscript" равен 0
|
||||||
И Я сообщаю вывод команды "oscript"
|
И Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "oscript" содержит "precommit4onec v22.11"
|
И Вывод команды "oscript" содержит "precommit4onec v23.04"
|
||||||
И Вывод команды "oscript" содержит "не является репозиторием git"
|
И Вывод команды "oscript" содержит "не является репозиторием git"
|
||||||
|
|
||||||
Сценарий: Установка precommit4onec во вложенные каталоги
|
Сценарий: Установка precommit4onec во вложенные каталоги
|
||||||
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
||||||
Тогда Код возврата команды "oscript" равен 0
|
Тогда Код возврата команды "oscript" равен 0
|
||||||
И Я сообщаю вывод команды "oscript"
|
И Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "oscript" содержит "precommit4onec v22.11"
|
И Вывод команды "oscript" содержит "precommit4onec v23.04"
|
||||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||||
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
||||||
|
|
||||||
@ -51,6 +51,6 @@
|
|||||||
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
И Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os install ./ -r"
|
||||||
Тогда Код возврата команды "oscript" равен 0
|
Тогда Код возврата команды "oscript" равен 0
|
||||||
И Я сообщаю вывод команды "oscript"
|
И Я сообщаю вывод команды "oscript"
|
||||||
И Вывод команды "oscript" содержит "precommit4onec v22.11"
|
И Вывод команды "oscript" содержит "precommit4onec v23.04"
|
||||||
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
И В каталоге ".git/hooks" репозитория "Репозиторий1" есть файл "pre-commit"
|
||||||
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
И В каталоге ".git/hooks" репозитория "Репозиторий2" есть файл "pre-commit"
|
||||||
|
10
packagedef
10
packagedef
@ -4,13 +4,13 @@
|
|||||||
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
|
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
|
||||||
|
|
||||||
Описание.Имя(ИмяПродукта)
|
Описание.Имя(ИмяПродукта)
|
||||||
.ВерсияСреды("1.5.0.178")
|
.ВерсияСреды("1.8.1")
|
||||||
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
|
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
|
||||||
.ЗависитОт("logos", "1.3.0")
|
.ЗависитОт("logos", "1.4.0")
|
||||||
.ЗависитОт("cmdline", "1.0.0")
|
.ЗависитОт("cmdline", "1.0.0")
|
||||||
.ЗависитОт("1bdd", "1.9.0")
|
.ЗависитОт("1bdd", "1.13.0")
|
||||||
.ЗависитОт("gitrunner", "1.6.0")
|
.ЗависитОт("gitrunner", "1.7.0")
|
||||||
.ЗависитОт("v8runner", "1.8.0")
|
.ЗависитОт("v8runner", "1.8.2")
|
||||||
.ЗависитОт("v8unpack", "1.0.4")
|
.ЗависитОт("v8unpack", "1.0.4")
|
||||||
.ВключитьФайл("src")
|
.ВключитьФайл("src")
|
||||||
.ВключитьФайл("v8config.json")
|
.ВключитьФайл("v8config.json")
|
||||||
|
@ -282,7 +282,11 @@
|
|||||||
|
|
||||||
Функция ЭтоНовый() Экспорт
|
Функция ЭтоНовый() Экспорт
|
||||||
|
|
||||||
Возврат Настройки().ЭтоНовый();
|
Если НЕ НастройкиИнициализированы Тогда
|
||||||
|
Возврат Истина;
|
||||||
|
Иначе
|
||||||
|
Возврат Настройки().ЭтоНовый();
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
//
|
//
|
||||||
Функция ВерсияПродукта() Экспорт
|
Функция ВерсияПродукта() Экспорт
|
||||||
|
|
||||||
Возврат "22.11";
|
Возврат "23.04";
|
||||||
|
|
||||||
КонецФункции // ВерсияПродукта
|
КонецФункции // ВерсияПродукта
|
||||||
|
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев();
|
ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев();
|
||||||
ВсеЗагруженные = Новый Массив;
|
ВсеЗагруженные = Новый Массив;
|
||||||
ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os");
|
ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os");
|
||||||
ФайлыЛокальныхСценариев = Новый Массив;
|
ФайлыЛокальныхСценариев = Новый Массив;
|
||||||
|
|
||||||
|
|
||||||
Лог = МенеджерПриложения.ПолучитьЛог();
|
Лог = МенеджерПриложения.ПолучитьЛог();
|
||||||
|
|
||||||
|
@ -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"");", ИмяМетода));
|
|
||||||
|
|
||||||
ТекстыТеста.ТестовыеМетоды.Добавить(
|
|
||||||
СтрШаблон(ШаблонМетодаТеста(),
|
|
||||||
МетаИнформацияФайла.ТипМетаданных,
|
|
||||||
МетаИнформацияФайла.ИмяТестовогоМодуля,
|
|
||||||
ИмяМетода));
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Возврат ТекстыТеста;
|
|
||||||
|
|
||||||
КонецФункции
|
|
@ -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)",
|
||||||
|
ПутьКФайлуМодуля,
|
||||||
|
Совпадения.Количество());
|
||||||
Лог.Ошибка(ТекстОшибки);
|
Лог.Ошибка(ТекстОшибки);
|
||||||
ВызватьИсключение ТекстОшибки;
|
ВызватьИсключение ТекстОшибки;
|
||||||
|
|
||||||
|
@ -30,13 +30,6 @@
|
|||||||
|
|
||||||
НастройкиСценария = Новый Соответствие;
|
НастройкиСценария = Новый Соответствие;
|
||||||
ПутьИРеквизиты = Новый Соответствие;
|
ПутьИРеквизиты = Новый Соответствие;
|
||||||
МассивРеквизитов = Новый Массив;
|
|
||||||
МассивРеквизитов.Добавить("Номер");
|
|
||||||
МассивРеквизитов.Добавить("ТабличнаяЧасть1.Реквизит");
|
|
||||||
|
|
||||||
ПутьИРеквизиты.Вставить("src\_example.xml", МассивРеквизитов);
|
|
||||||
ПутьИРеквизиты.Вставить("src\_example2.xml", Новый Массив);
|
|
||||||
|
|
||||||
НастройкиСценария.Вставить("МетаданныеДляИсключения", ПутьИРеквизиты);
|
НастройкиСценария.Вставить("МетаданныеДляИсключения", ПутьИРеквизиты);
|
||||||
|
|
||||||
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
|
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
|
||||||
@ -67,10 +60,13 @@
|
|||||||
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда
|
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда
|
||||||
|
|
||||||
МетаданныеДляИсключения = НастройкиСценария.Получить("МетаданныеДляИсключения");
|
МетаданныеДляИсключения = НастройкиСценария.Получить("МетаданныеДляИсключения");
|
||||||
|
Если МетаданныеДляИсключения = Неопределено Тогда
|
||||||
ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, "");
|
МассивРеквизитов = Неопределено;
|
||||||
МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть);
|
Иначе
|
||||||
|
ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, "");
|
||||||
|
МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Если МассивРеквизитов = Неопределено ИЛИ ЗначениеЗаполнено(МассивРеквизитов) Тогда
|
Если МассивРеквизитов = Неопределено ИЛИ ЗначениеЗаполнено(МассивРеквизитов) Тогда
|
||||||
//Неопределено - нет файла в исключении, массив не пустой - исключение только по реквизитам
|
//Неопределено - нет файла в исключении, массив не пустой - исключение только по реквизитам
|
||||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||||
|
@ -39,8 +39,8 @@
|
|||||||
|
|
||||||
Если АнализируемыйФайл.Существует() Тогда
|
Если АнализируемыйФайл.Существует() Тогда
|
||||||
|
|
||||||
Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) ИЛИ
|
Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл)
|
||||||
ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда
|
ИЛИ ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда
|
||||||
|
|
||||||
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||||
ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл);
|
ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл);
|
||||||
@ -57,18 +57,14 @@
|
|||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат ЛОЖЬ;
|
Возврат Ложь;
|
||||||
|
|
||||||
КонецФункции // ОбработатьФайл()
|
КонецФункции // ОбработатьФайл()
|
||||||
|
|
||||||
Функция ОтсортироватьПодсистему(Знач ИмяФайла, ЭтоЕДТ)
|
Функция ОтсортироватьПодсистему(Знач ИмяФайла, ЭтоЕДТ)
|
||||||
|
|
||||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||||
|
Регексп = РегекспСостав(ЭтоЕДТ);
|
||||||
ПоискДочерних = ?(ЭтоЕДТ, "(?:<content>)([\w\W]+)(?:<\/content>)", "(<Content>\s+)(<[\w\W]+>)(\s+<\/Content>)");
|
|
||||||
Регексп = Новый РегулярноеВыражение(ПоискДочерних);
|
|
||||||
Регексп.ИгнорироватьРегистр = ИСТИНА;
|
|
||||||
Регексп.Многострочный = ИСТИНА;
|
|
||||||
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
|
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
|
||||||
|
|
||||||
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
|
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
|
||||||
@ -78,31 +74,33 @@
|
|||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[0].Значение;
|
ИсходнаяСтрока = ПодчиненныеМетаданные[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].Значение) = Неопределено Тогда
|
||||||
Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ОбъектМетаданных.Группы[2].Значение);
|
Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ИмяМетаданного);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
@ -120,7 +118,8 @@
|
|||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
Если НЕ ЭтоЕДТ Тогда
|
Если НЕ ЭтоЕДТ Тогда
|
||||||
СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены) + ПодчиненныеМетаданные[0].Группы[3].Значение;
|
СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены)
|
||||||
|
+ ПодчиненныеМетаданные[0].Группы[3].Значение;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда
|
Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда
|
||||||
@ -139,4 +138,28 @@
|
|||||||
|
|
||||||
Возврат Истина;
|
Возврат Истина;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция РегекспСостав(ЭтоЕДТ)
|
||||||
|
|
||||||
|
ПоискДочерних = ?(ЭтоЕДТ, "(?:<content>)([\w\W]+)(?:<\/content>)", "(<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:]+>", ШаблонНачало, ШаблонУИД, ШаблонИмяМетаданных);
|
||||||
|
Регексп = Новый РегулярноеВыражение(ПоискМетаданных);
|
||||||
|
Регексп.ИгнорироватьРегистр = Истина;
|
||||||
|
Регексп.Многострочный = Истина;
|
||||||
|
|
||||||
|
Возврат Регексп;
|
||||||
|
КонецФункции
|
||||||
|
@ -22,15 +22,6 @@
|
|||||||
"УдалениеЛишнихПустыхСтрок.os"
|
"УдалениеЛишнихПустыхСтрок.os"
|
||||||
],
|
],
|
||||||
"НастройкиСценариев": {
|
"НастройкиСценариев": {
|
||||||
"ОтключениеПолнотекстовогоПоиска": {
|
|
||||||
"МетаданныеДляИсключения": {
|
|
||||||
"src\\_example.xml": [
|
|
||||||
"Номер",
|
|
||||||
"ТабличнаяЧасть1.Реквизит"
|
|
||||||
],
|
|
||||||
"src\\_example2.xml": []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"РазборОтчетовОбработокРасширений": {
|
"РазборОтчетовОбработокРасширений": {
|
||||||
"ИспользоватьНастройкиПоУмолчанию": true,
|
"ИспользоватьНастройкиПоУмолчанию": true,
|
||||||
"ВерсияПлатформы": ""
|
"ВерсияПлатформы": ""
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
<xr:Item xsi:type="xr:MDObjectRef">4308b2f2-9e92-486e-8c34-13c11fd5fb49</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">4308b2f2-9e92-486e-8c34-13c11fd5fb49</xr:Item>
|
||||||
<xr:Item xsi:type="xr:MDObjectRef">Enum.Енум7</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.Енум7</xr:Item>
|
||||||
<xr:Item xsi:type="xr:MDObjectRef">Enum.Енум6</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.Енум6</xr:Item>
|
||||||
|
<xr:Item xsi:type="xr:MDObjectRef">ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках</xr:Item>
|
||||||
</Content>
|
</Content>
|
||||||
</Properties>
|
</Properties>
|
||||||
<ChildObjects>
|
<ChildObjects>
|
||||||
|
@ -14,5 +14,6 @@
|
|||||||
<content>CommonModule.УведомленияПереопределяемый</content>
|
<content>CommonModule.УведомленияПереопределяемый</content>
|
||||||
<content>Catalog.ВидыУведомлений</content>
|
<content>Catalog.ВидыУведомлений</content>
|
||||||
<content>CommonModule.УведомленияСерверПовтИсп</content>
|
<content>CommonModule.УведомленияСерверПовтИсп</content>
|
||||||
|
<content>ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках</content>
|
||||||
<parentSubsystem>Subsystem.ПодсистемыБСП.Subsystem.ОбменСообщениями</parentSubsystem>
|
<parentSubsystem>Subsystem.ПодсистемыБСП.Subsystem.ОбменСообщениями</parentSubsystem>
|
||||||
</mdclass:Subsystem>
|
</mdclass:Subsystem>
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#Использовать logos
|
#Использовать logos
|
||||||
#Использовать tempfiles
|
#Использовать tempfiles
|
||||||
#Использовать fs
|
#Использовать fs
|
||||||
|
#Использовать ".."
|
||||||
|
|
||||||
Перем юТест;
|
Перем юТест;
|
||||||
Перем Лог;
|
Перем Лог;
|
||||||
@ -22,7 +23,6 @@
|
|||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек");
|
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
|
||||||
@ -32,8 +32,6 @@
|
|||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение");
|
||||||
|
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеОбрабатываетНегативныеКейсы");
|
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийДобавлениеТестовВРасширениеДобавляетИДополняетМодулиТестов");
|
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы");
|
||||||
|
|
||||||
Возврат ВсеТесты;
|
Возврат ВсеТесты;
|
||||||
@ -102,7 +100,7 @@
|
|||||||
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
||||||
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||||
Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле);
|
Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле);
|
||||||
|
Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле));
|
||||||
|
|
||||||
ИмяФайла = "СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo";
|
ИмяФайла = "СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo";
|
||||||
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "УведомленияПриИзмененииОбъектов.mdo", "Subsystems");
|
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "УведомленияПриИзмененииОбъектов.mdo", "Subsystems");
|
||||||
@ -111,6 +109,7 @@
|
|||||||
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
||||||
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
|
||||||
Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле);
|
Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле);
|
||||||
|
Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле));
|
||||||
|
|
||||||
ИмяФайла = "СортировкаОбъектовВПодсистемах/ОбменСообщениями.mdo";
|
ИмяФайла = "СортировкаОбъектовВПодсистемах/ОбменСообщениями.mdo";
|
||||||
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "ОбменСообщениями.mdo", "Subsystems");
|
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "ОбменСообщениями.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'", ФайлИсходников.ПолноеИмя);
|
|
||||||
Ожидаем.Что(ФайлИсходников.Существует(), Сообщение).ЭтоИстина();
|
|
||||||
|
|
||||||
// Описание конфигурации.
|
|
||||||
СтрокаПоиска = СтрШаблон("<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);
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
КонецПроцедуры
|
|
||||||
|
|
||||||
#КонецОбласти
|
|
||||||
|
|
||||||
|
|
||||||
#Область ОтключениеРазрешенияИзменятьФорму
|
#Область ОтключениеРазрешенияИзменятьФорму
|
||||||
|
|
||||||
Процедура ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы() Экспорт
|
Процедура ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы() Экспорт
|
||||||
|
@ -87,7 +87,6 @@
|
|||||||
|
|
||||||
ОжидаемыеСценарии = Новый Массив();
|
ОжидаемыеСценарии = Новый Массив();
|
||||||
ОжидаемыеСценарии.Добавить("ДобавлениеПробеловПередКлючевымиСловами.os");
|
ОжидаемыеСценарии.Добавить("ДобавлениеПробеловПередКлючевымиСловами.os");
|
||||||
ОжидаемыеСценарии.Добавить("ДобавлениеТестовВРасширение.os");
|
|
||||||
ОжидаемыеСценарии.Добавить("ЗапретИспользованияПерейти.os");
|
ОжидаемыеСценарии.Добавить("ЗапретИспользованияПерейти.os");
|
||||||
ОжидаемыеСценарии.Добавить("ИсправлениеНеКаноническогоНаписания.os");
|
ОжидаемыеСценарии.Добавить("ИсправлениеНеКаноническогоНаписания.os");
|
||||||
ОжидаемыеСценарии.Добавить("КорректировкаXMLФорм.os");
|
ОжидаемыеСценарии.Добавить("КорректировкаXMLФорм.os");
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
"КаталогЛокальныхСценариев": "",
|
"КаталогЛокальныхСценариев": "",
|
||||||
"ГлобальныеСценарии": [
|
"ГлобальныеСценарии": [
|
||||||
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
||||||
"ДобавлениеТестовВРасширение.os",
|
|
||||||
"ЗапретИспользованияПерейти.os",
|
"ЗапретИспользованияПерейти.os",
|
||||||
"ИсправлениеНеКаноническогоНаписания.os",
|
"ИсправлениеНеКаноническогоНаписания.os",
|
||||||
"КорректировкаXMLФорм.os",
|
"КорректировкаXMLФорм.os",
|
||||||
@ -27,13 +26,7 @@
|
|||||||
"ОтключенныеСценарии": [],
|
"ОтключенныеСценарии": [],
|
||||||
"НастройкиСценариев": {
|
"НастройкиСценариев": {
|
||||||
"ОтключениеПолнотекстовогоПоиска": {
|
"ОтключениеПолнотекстовогоПоиска": {
|
||||||
"МетаданныеДляИсключения": {
|
"МетаданныеДляИсключения": {}
|
||||||
"src\\_example.xml": [
|
|
||||||
"Номер",
|
|
||||||
"ТабличнаяЧасть1.Реквизит"
|
|
||||||
],
|
|
||||||
"src\\_example2.xml": []
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"ПроверкаНецензурныхСлов": {
|
"ПроверкаНецензурныхСлов": {
|
||||||
"ФайлСНецензурнымиСловами": "НецензурныеСлова.txt"
|
"ФайлСНецензурнымиСловами": "НецензурныеСлова.txt"
|
||||||
|
Reference in New Issue
Block a user