diff --git a/README.md b/README.md index 8616a1b..f541fd8 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ В РАЗРАБОТКЕ.
Скрипт для непрерывной интеграции с использованием GitLab.
-#### ГенераторФичVA.sbsl +#### АвтоФичиVA.sbsl В РАЗРАБОТКЕ.
-Скрипт, позволяющий по шаблону сгенерировать файлы feature для использования с VanessaAutomation.
+Скрипт, позволяющий сгенерировать и запустить тесты в VanessaAutomation по шаблонам.
### Библиотеки #### ЗапускСкриптов.sbsl diff --git a/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать-Исправление.feature b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать-Исправление.feature new file mode 100644 index 0000000..dc4f069 --- /dev/null +++ b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать-Исправление.feature @@ -0,0 +1,23 @@ +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы списка документа "%ИмяОбъекта%" + Дано Открытие формы списка документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы существующего документа "%ИмяОбъекта%" + Дано Открытие формы существующего документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы нового документа "%ИмяОбъекта%" + Дано Открытие формы нового документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Перепроведение существующего документа "%ИмяОбъекта%" + Дано Перепроведение существующего документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Исправление существующего документа "%ИмяОбъекта%" + Дано Исправление существующего документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Печать существующего документа "%ИмяОбъекта%" + Дано Печать существующего документа "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать.feature b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать.feature new file mode 100644 index 0000000..474bddf --- /dev/null +++ b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать.feature @@ -0,0 +1,19 @@ +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы списка документа "%ИмяОбъекта%" + Дано Открытие формы списка документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы существующего документа "%ИмяОбъекта%" + Дано Открытие формы существующего документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы нового документа "%ИмяОбъекта%" + Дано Открытие формы нового документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Перепроведение существующего документа "%ИмяОбъекта%" + Дано Перепроведение существующего документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Печать существующего документа "%ИмяОбъекта%" + Дано Печать существующего документа "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Документы-Открытие-Создание.feature b/VA-Тесты/Шаблоны/Документы-Открытие-Создание.feature new file mode 100644 index 0000000..52d10d6 --- /dev/null +++ b/VA-Тесты/Шаблоны/Документы-Открытие-Создание.feature @@ -0,0 +1,15 @@ +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы списка документа "%ИмяОбъекта%" + Дано Открытие формы списка документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы существующего документа "%ИмяОбъекта%" + Дано Открытие формы существующего документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы нового документа "%ИмяОбъекта%" + Дано Открытие формы нового документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Перепроведение существующего документа "%ИмяОбъекта%" + Дано Перепроведение существующего документа "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Документы-Открытие.feature b/VA-Тесты/Шаблоны/Документы-Открытие.feature new file mode 100644 index 0000000..26dce44 --- /dev/null +++ b/VA-Тесты/Шаблоны/Документы-Открытие.feature @@ -0,0 +1,7 @@ +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы списка документа "%ИмяОбъекта%" + Дано Открытие формы списка документа "%ИмяОбъекта%" + +#report.feature=Документ "%ИмяОбъекта%" +Сценарий: Открытие формы существующего документа "%ИмяОбъекта%" + Дано Открытие формы существующего документа "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/ЖурналыДокументов.feature b/VA-Тесты/Шаблоны/ЖурналыДокументов.feature new file mode 100644 index 0000000..c27fdaf --- /dev/null +++ b/VA-Тесты/Шаблоны/ЖурналыДокументов.feature @@ -0,0 +1,3 @@ +#report.feature=Журнал документов "%ИмяОбъекта%" +Сценарий: Открытие формы журнала документов "%ИмяОбъекта%" + Дано Открытие формы журнала документов "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Обработки.feature b/VA-Тесты/Шаблоны/Обработки.feature new file mode 100644 index 0000000..e987efa --- /dev/null +++ b/VA-Тесты/Шаблоны/Обработки.feature @@ -0,0 +1,3 @@ +#report.feature=Обработка "%ИмяОбъекта%" +Сценарий: Открытие основной формы обработки "%ИмяОбъекта%" + Дано Открытие основной формы обработки "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/ОбщиеФормы.feature b/VA-Тесты/Шаблоны/ОбщиеФормы.feature new file mode 100644 index 0000000..8408f54 --- /dev/null +++ b/VA-Тесты/Шаблоны/ОбщиеФормы.feature @@ -0,0 +1,3 @@ +#report.feature=Общая форма "%ИмяОбъекта%" +Сценарий: Открытие общей формы "%ИмяОбъекта%" + Дано Открытие общей формы "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Отчеты.feature b/VA-Тесты/Шаблоны/Отчеты.feature new file mode 100644 index 0000000..cac7e2d --- /dev/null +++ b/VA-Тесты/Шаблоны/Отчеты.feature @@ -0,0 +1,3 @@ +#report.feature=Отчет "%ИмяОбъекта%" +Сценарий: Формирование отчета "%ИмяОбъекта%" + Дано Формирование отчета "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Справочники-Открытие-Создание-Печать.feature b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание-Печать.feature new file mode 100644 index 0000000..7c17b8f --- /dev/null +++ b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание-Печать.feature @@ -0,0 +1,19 @@ +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы списка справочника "%ИмяОбъекта%" + Дано Открытие формы списка справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы существующего элемента справочника "%ИмяОбъекта%" + Дано Открытие формы существующего элемента справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы нового элемента справочника "%ИмяОбъекта%" + Дано Открытие формы нового элемента справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Перезапись существующего элемента справочника "%ИмяОбъекта%" + Дано Перезапись существующего элемента справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Печать существующего элемента справочника "%ИмяОбъекта%" + Дано Печать существующего элемента справочника "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Справочники-Открытие-Создание.feature b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание.feature new file mode 100644 index 0000000..9b1bd29 --- /dev/null +++ b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание.feature @@ -0,0 +1,15 @@ +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы списка справочника "%ИмяОбъекта%" + Дано Открытие формы списка справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы существующего элемента справочника "%ИмяОбъекта%" + Дано Открытие формы существующего элемента справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы нового элемента справочника "%ИмяОбъекта%" + Дано Открытие формы нового элемента справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Перезапись существующего элемента справочника "%ИмяОбъекта%" + Дано Перезапись существующего элемента справочника "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Справочники-Открытие.feature b/VA-Тесты/Шаблоны/Справочники-Открытие.feature new file mode 100644 index 0000000..4f9b26e --- /dev/null +++ b/VA-Тесты/Шаблоны/Справочники-Открытие.feature @@ -0,0 +1,7 @@ +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы списка справочника "%ИмяОбъекта%" + Дано Открытие формы списка справочника "%ИмяОбъекта%" + +#report.feature=Справочник "%ИмяОбъекта%" +Сценарий: Открытие формы существующего элемента справочника "%ИмяОбъекта%" + Дано Открытие формы существующего элемента справочника "%ИмяОбъекта%" diff --git a/VA-Тесты/Шаблоны/Шапка.feature b/VA-Тесты/Шаблоны/Шапка.feature new file mode 100644 index 0000000..114aa94 --- /dev/null +++ b/VA-Тесты/Шаблоны/Шапка.feature @@ -0,0 +1,10 @@ +#language: ru + +@tree + +#report.story=Пользователь "%ПредставлениеПользователя%" +Функциональность: Тесты под пользователем "%ПредставлениеПользователя%" + +Контекст: + Дано я подключаю TestClient "%ПредставлениеПользователя%" логин "%ИмяПользователя%" пароль "%ПарольПользователя%" + И я закрыл все окна клиентского приложения diff --git a/VA-Тесты/Шаги/kapral.epf b/VA-Тесты/Шаги/kapral.epf new file mode 100644 index 0000000..25370d0 Binary files /dev/null and b/VA-Тесты/Шаги/kapral.epf differ diff --git a/VA-Тесты/Шаги/Документы.feature b/VA-Тесты/Шаги/Документы.feature new file mode 100644 index 0000000..ab85298 --- /dev/null +++ b/VA-Тесты/Шаги/Документы.feature @@ -0,0 +1,120 @@ +#language: ru + +@tree +@ExportScenarios + +Функциональность: Проверка Документов + +Сценарий: Открытие формы списка документа "ИмяДокумента" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "Документ.[ИмяДокумента]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму списка документа "ИмяДокумента" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть форму списка документа [ИмяДокумента]" + И я закрыл все окна клиентского приложения + +Сценарий: Открытие формы существующего документа "ИмяДокумента" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "Документ.[ИмяДокумента]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов" + Если '$СписокДокументов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$" + И я закрыл все окна клиентского приложения + +Сценарий: Открытие формы нового документа "ИмяДокумента" + Дано я закрыл все окна клиентского приложения + + Если нет права "ИнтерактивноеДобавление" к объекту "Документ.[ИмяДокумента]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму документа "ИмяДокумента" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть основную форму документа [ИмяДокумента]" + И я закрыл все окна клиентского приложения + +Сценарий: Перепроведение существующего документа "ИмяДокумента" + Дано я закрыл все окна клиентского приложения + + Если нет права "ИнтерактивноеДобавление" к объекту "Документ.[ИмяДокумента]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов" + Если '$СписокДокументов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$" + И я нажимаю на кнопку "Провести и закрыть" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось перепровести документ $НавигационнаяСсылкаДокумента$" + Если в текущем окне есть сообщения пользователю Тогда + Тогда я вызываю исключение с текстом сообщения + И я закрыл все окна клиентского приложения + +Сценарий: Исправление существующего документа "ИмяДокумента" + Дано я закрыл все окна клиентского приложения + + Если нет права "ИнтерактивноеДобавление" к объекту "Документ.[ИмяДокумента]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов" + Если '$СписокДокументов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$" + И я нажимаю на гиперссылку с именем "Исправить" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось исправить документ $НавигационнаяСсылкаДокумента$" + Тогда открылось окно "*(создание)" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось дождаться создания исправленного документа $НавигационнаяСсылкаДокумента$" + И я нажимаю на кнопку "Провести" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось записать и провести документ-исправление" + Если в текущем окне есть сообщения пользователю Тогда + Тогда я вызываю исключение с текстом сообщения + И я нажимаю на кнопку "Пометить на удаление / Снять пометку" + Затем Если появилось окно диалога я нажимаю на кнопку "Да" + И я закрыл все окна клиентского приложения + +Сценарий: Печать существующего документа "ИмяДокумента" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "Документ.[ИмяДокумента]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я получаю список команд печати для объекта метаданных "Документ.[ИмяДокумента]" в переменную "СписокПечатныхФорм" + Если '$СписокПечатныхФорм$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов" + Если '$СписокДокументов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$" + И для каждого значения "ПечатнаяФормаОбъекта" из массива "$СписокПечатныхФорм$" + Тогда я запоминаю значение выражения '$ПечатнаяФормаОбъекта$.Представление' в переменную "НаименованиеПечатнойФормы" + Если элемент с заголовком "$НаименованиеПечатнойФормы$" присутствует на форме тогда + Тогда я нажимаю на кнопку "$НаименованиеПечатнойФормы$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось напечатать форму $НаименованиеПечатнойФормы$ для документа $НавигационнаяСсылкаДокумента$" + И я закрываю текущее окно + И я закрыл все окна клиентского приложения diff --git a/VA-Тесты/Шаги/ЖурналыДокументов.feature b/VA-Тесты/Шаги/ЖурналыДокументов.feature new file mode 100644 index 0000000..2943702 --- /dev/null +++ b/VA-Тесты/Шаги/ЖурналыДокументов.feature @@ -0,0 +1,17 @@ +#language: ru + +@tree +@ExportScenarios + +Функциональность: Проверка Журналов документов + +Сценарий: Открытие формы журнала документов "ИмяЖурналаДокументов" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "ЖурналДокументов.[ИмяЖурналаДокументов]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму журнала документов "ИмяЖурналаДокументов" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть форму журнала документов [ИмяЖурналаДокументов]" + И я закрыл все окна клиентского приложения diff --git a/VA-Тесты/Шаги/Обработки.feature b/VA-Тесты/Шаги/Обработки.feature new file mode 100644 index 0000000..6c011ca --- /dev/null +++ b/VA-Тесты/Шаги/Обработки.feature @@ -0,0 +1,17 @@ +#language: ru + +@tree +@ExportScenarios + +Функциональность: Проверка Обработок + +Сценарий: Открытие основной формы обработки "ИмяОбработки" + Дано я закрыл все окна клиентского приложения + + Если нет права "Использование" к объекту "Обработка.[ИмяОбработки]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму обработки "ИмяОбработки" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть форму основную обработки [ИмяОбработки]" + И я закрыл все окна клиентского приложения diff --git a/VA-Тесты/Шаги/ОбщиеФормы.feature b/VA-Тесты/Шаги/ОбщиеФормы.feature new file mode 100644 index 0000000..8023da5 --- /dev/null +++ b/VA-Тесты/Шаги/ОбщиеФормы.feature @@ -0,0 +1,17 @@ +#language: ru + +@tree +@ExportScenarios + +Функциональность: Проверка Общих форм + +Сценарий: Открытие общей формы "ИмяОбщейФормы" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "ОбщаяФорма.[ИмяОбщейФормы]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю общую форму "ИмяОбщейФормы" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть общую форму [ИмяОбщейФормы]" + И я закрыл все окна клиентского приложения diff --git a/VA-Тесты/Шаги/Отчеты.feature b/VA-Тесты/Шаги/Отчеты.feature new file mode 100644 index 0000000..3ac8582 --- /dev/null +++ b/VA-Тесты/Шаги/Отчеты.feature @@ -0,0 +1,21 @@ +#language: ru + +@tree +@ExportScenarios + +Функциональность: Проверка Отчетов + +Сценарий: Формирование отчета "ИмяОтчета" + Дано я закрыл все окна клиентского приложения + + Если нет права "Использование" к объекту "Отчет.[ИмяОтчета]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму отчета "ИмяОтчета" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть форму отчета [ИмяОтчета]" + И я нажимаю на кнопку "Сформировать" + И я жду заполнение табличного документа 'ОтчетТабличныйДокумент' в течение 10 секунд + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось сформировать отчет [ИмяОтчета]" + И я закрыл все окна клиентского приложения diff --git a/VA-Тесты/Шаги/Справочники.feature b/VA-Тесты/Шаги/Справочники.feature new file mode 100644 index 0000000..e63a02a --- /dev/null +++ b/VA-Тесты/Шаги/Справочники.feature @@ -0,0 +1,91 @@ +#language: ru + +@tree +@ExportScenarios + +Функциональность: Проверка Справочников + +Сценарий: Открытие формы списка справочника "ИмяСправочника" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "Справочник.[ИмяСправочника]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму списка справочника "ИмяСправочника" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть форму списка справочника [ИмяСправочника]" + И я закрыл все окна клиентского приложения + +Сценарий: Открытие формы существующего элемента справочника "ИмяСправочника" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "Справочник.[ИмяСправочника]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я ищу последние 5 элементов объекта "Справочник.[ИмяСправочника]" в переменную "СписокЭлементов" + Если '$СписокЭлементов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаСправочника" из массива "$СписокЭлементов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаСправочника$)' в переменную "НавигационнаяСсылкаСправочника" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаСправочника$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаСправочника$" + И я закрыл все окна клиентского приложения + +Сценарий: Открытие формы нового элемента справочника "ИмяСправочника" + Дано я закрыл все окна клиентского приложения + + Если нет права "ИнтерактивноеДобавление" к объекту "Справочник.[ИмяСправочника]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я открываю основную форму справочника "ИмяСправочника" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть основную форму элемента справочника [ИмяСправочника]" + И я закрыл все окна клиентского приложения + +Сценарий: Перезапись существующего элемента справочника "ИмяСправочника" + Дано я закрыл все окна клиентского приложения + + Если нет права "ИнтерактивноеДобавление" к объекту "Справочник.[ИмяСправочника]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я ищу последние 5 элементов объекта "Справочник.[ИмяСправочника]" в переменную "СписокЭлементов" + Если '$СписокЭлементов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаСправочника" из массива "$СписокЭлементов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаСправочника$)' в переменную "НавигационнаяСсылкаСправочника" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаСправочника$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаСправочника$" + И я нажимаю на кнопку "Записать и закрыть" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось перезаписать элемент справочника $НавигационнаяСсылкаСправочника$" + Если в текущем окне есть сообщения пользователю Тогда + Тогда я вызываю исключение с текстом сообщения + И я закрыл все окна клиентского приложения + +Сценарий: Печать существующего элемента справочника "ИмяСправочника" + Дано я закрыл все окна клиентского приложения + + Если нет права "Просмотр" к объекту "Справочник.[ИмяСправочника]" тогда + Тогда я останавливаю выполнение сценария "Skipped" + + Дано я получаю список команд печати для объекта метаданных "Справочник.[ИмяСправочника]" в переменную "СписокПечатныхФорм" + Если '$СписокПечатныхФорм$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + Дано я ищу последние 5 элементов объекта "Справочник.[ИмяСправочника]" в переменную "СписокЭлементов" + Если '$СписокЭлементов$.Количество() = 0' Тогда + Тогда я останавливаю выполнение сценария "Skipped" + И для каждого значения "СсылкаСправочника" из массива "$СписокЭлементов$" + Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаСправочника$)' в переменную "НавигационнаяСсылкаСправочника" + Затем я открываю навигационную ссылку "$НавигационнаяСсылкаСправочника$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаСправочника$" + И для каждого значения "ПечатнаяФормаОбъекта" из массива "$СписокПечатныхФорм$" + Тогда я запоминаю значение выражения '$ПечатнаяФормаОбъекта$.Представление' в переменную "НаименованиеПечатнойФормы" + Если элемент с заголовком "$НаименованиеПечатнойФормы$" присутствует на форме тогда + Тогда я нажимаю на кнопку "$НаименованиеПечатнойФормы$" + Если появилось предупреждение тогда + Тогда я вызываю исключение "Не удалось напечатать форму $НаименованиеПечатнойФормы$ для элемента справочника $НавигационнаяСсылкаСправочника$" + И я закрываю текущее окно + И я закрыл все окна клиентского приложения diff --git a/Скрипты/АвтоФичиVA.sbsl b/Скрипты/АвтоФичиVA.sbsl new file mode 100644 index 0000000..7588522 --- /dev/null +++ b/Скрипты/АвтоФичиVA.sbsl @@ -0,0 +1,466 @@ +#!/usr/bin/executor + +/******************************************************************************* + * Copyright (c) 2020 Alexander Kapralov and Contributors + * This program and the accompanying materials are made available under + * the terms of the BSD 3-Clause License which is available at + * https://spdx.org/licenses/BSD-3-Clause.html#licenseText + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Contributors: + * + * + ******************************************************************************/ + +структура ОписаниеНастроек + пер НастройкиVA: ОписаниеНастроекVA + пер НастройкиТестовойБазы: ОписаниеНастроекТестовойБазы + пер НастройкиАвтофич: ОписаниеНастроекАвтофич +; + +структура ОписаниеНастроекVA + пер ПутьVanessaAutomationSingle: Строка + пер КаталогПроекта: Строка + пер КаталогФич: Строка + пер КаталогиБиблиотек: Массив + пер КаталогОтчетов: Строка +; + +структура ОписаниеНастроекТестовойБазы + пер ВерсияПлатформы: Строка + пер ПутьКИБ: Строка + пер ИмяПользователя: Строка + пер ПарольПользователя: Строка +; + +структура ОписаниеНастроекАвтофич + пер КаталогАвтофич: Строка + пер КаталогШаблоновШагов: Строка + пер ФайлШаблонаШапки: Строка + пер Пользователи: Массив +; + +структура ОписаниеПользователя + пер Представление: Строка + пер Имя: Строка + пер Пароль: Строка +; + +структура ОписаниеОбъектаАвтофичи + пер Объект: Строка + пер ШаблонФичи: Строка + пер Пользователи: Массив +; + +структура VAParams + пер КаталогПроекта: Строка + пер КаталогФич: Строка + пер ВыполнитьСценарии: Булево = Истина + пер ВыполнятьШагиАссинхронно: Булево = Ложь + пер ДелатьЛогВыполненияСценариевВЖР: Булево = Ложь + пер ЗавершитьРаботуСистемы: Булево = Истина + пер ЗакрытьTestClientПослеЗапускаСценариев: Булево = Истина + пер ОбновлятьСтатистикуВДереве: Булево = Ложь + пер ОбновлятьДеревоПриНачалеВыполненияСценария: Булево = Ложь + пер КаталогиБиблиотек: Массив + пер ДелатьОтчетВФорматеjUnit: Булево = Истина + пер КаталогВыгрузкиjUnit: Строка + пер ДелатьОтчетВФорматеАллюр: Булево = Истина + пер ОтчетAllure: VAParamsОтчетAllure + + конструктор(КаталогПроекта, КаталогФич, КаталогиБиблиотек, КаталогВыгрузкиjUnit, ОтчетAllure) +; + +структура VAParamsОтчетAllure + пер КаталогВыгрузкиAllure: Строка + пер КаталогОтносительноКоторогоНадоСтроитьИерархию: Строка + пер УровеньОтчета1: Строка = "#report.epic=;Каталог1" + пер УровеньОтчета2: Строка = "#report.feature=" + пер УровеньОтчета3: Строка = "#report.story=" + пер ГруппировкаTestSuites: Строка = "#report.feature=" + + конструктор(КаталогВыгрузкиAllure, КаталогОтносительноКоторогоНадоСтроитьИерархию) +; + + +метод CreateFeatures(имяФайлаНастроек: Строка) + знч настройки = ПрочитатьНастройки(имяФайлаНастроек) + + пер автофичи = новый Соответствие() + + пер настройкиПоиска = новый НастройкиПоискаФайлов() + настройкиПоиска.ИмяСодержит(".tsv") + для файлАвтофичи из Файлы.Найти(настройки.НастройкиАвтофич.КаталогАвтофич, настройкиПоиска) + пер массивОбъектов = новый Массив() + + исп потокФайлаАвтофичи = файлАвтофичи.ОткрытьПотокЧтения() + пер чтениеФайлаАвтофичи = новый ЧтениеДанных(потокФайлаАвтофичи) + пока не чтениеФайлаАвтофичи.ЧтениеЗавершено() + знч строкаФайла = чтениеФайлаАвтофичи.ПрочитатьСтроку("cp1251") + если строкаФайла.Пусто() + продолжить + ; + знч массивСтроки = строкаФайла.Разделить("\т", Истина) + если массивСтроки.Размер() != 3 + выбросить новый ИсключениеИндексВнеГраниц( + "В каждой строке автофича файла должно быть 3 значения, разделенных табуляцией.") + ; + + знч пользователиАвтофичи = массивСтроки[2].Разделить(",") + знч объектАвтофичи = новый ОписаниеОбъектаАвтофичи(массивСтроки[0], массивСтроки[1], пользователиАвтофичи) + массивОбъектов.Добавить(объектАвтофичи) + ; + + автофичи.Вставить(файлАвтофичи.ИмяБезРасширения, массивОбъектов) + ; + + пер файлШаблонаШапки = новый Файл("%{настройки.НастройкиАвтофич.КаталогШаблоновШагов}/%{настройки.НастройкиАвтофич + .ФайлШаблонаШапки}") + исп потокШаблонаШапки = файлШаблонаШапки.ОткрытьПотокЧтения() + знч текстШаблонаШапки = потокШаблонаШапки.ПрочитатьКакТекст() + + пер текстыШаблоновОбъектов = новый Соответствие() + + для пользователь из настройки.НастройкиАвтофич.Пользователи + пер текстФичи = текстШаблонаШапки + текстФичи = текстФичи.Заменить("\%ПредставлениеПользователя\%", пользователь.Представление) + текстФичи = текстФичи.Заменить("\%ИмяПользователя\%", пользователь.Имя) + текстФичи = текстФичи.Заменить("\%ПарольПользователя\%", пользователь.Пароль) + + для автофича из автофичи + для описаниеОбъекта из автофича.Значение + если описаниеОбъекта.Пользователи.Найти(пользователь.Представление) == Неопределено + продолжить + ; + + пер текстОбъекта = "" + если текстыШаблоновОбъектов.СодержитКлюч(описаниеОбъекта.ШаблонФичи) + текстОбъекта = текстыШаблоновОбъектов.Получить(описаниеОбъекта.ШаблонФичи) + иначе + пер файлШаблонаОбъекта = новый Файл("%{настройки.НастройкиАвтофич + .КаталогШаблоновШагов}/%{описаниеОбъекта.ШаблонФичи}") + исп потокШаблонаОбъекта = файлШаблонаОбъекта.ОткрытьПотокЧтения() + знч текстШаблонаОбъекта = потокШаблонаОбъекта.ПрочитатьКакТекст() + текстыШаблоновОбъектов.Вставить(описаниеОбъекта.ШаблонФичи, текстШаблонаОбъекта) + + текстОбъекта = текстШаблонаОбъекта + ; + + текстОбъекта = текстОбъекта.Заменить("\%ИмяОбъекта\%", описаниеОбъекта.Объект.Разделить(".")[1]) + текстФичи = текстФичи + Символы.НоваяСтрока + текстОбъекта + ; + + Файлы.СоздатьКаталог("%{настройки.НастройкиVA.КаталогФич}/%{автофича.Ключ}") + пер файлФичи = новый Файл("%{настройки.НастройкиVA.КаталогФич}/%{автофича.Ключ}/%{автофича.Ключ}-%{пользователь + .Представление}.feature") + исп потокФичи = файлФичи.ОткрытьПотокЗаписи() + потокФичи.Записать(текстФичи) + ; + ; +; + +метод RunTests(имяФайлаНастроек: Строка) + знч настройки = ПрочитатьНастройки(имяФайлаНастроек) + + знч каталогВыгрузкиAllure = "%{настройки.НастройкиVA.КаталогОтчетов}/allure" + + если не Файлы.Найти(каталогВыгрузкиAllure).Пусто() + Файлы.Удалить(каталогВыгрузкиAllure) + ; + Файлы.СоздатьКаталог("%каталогВыгрузкиAllure/history") + для файлИстории из Файлы.Найти("%{настройки.НастройкиVA.КаталогОтчетов}/allure-report/history") + Файлы.Скопировать(файлИстории, "%каталогВыгрузкиAllure/history/%{файлИстории.Имя}") + ; + + знч исполняемыйФайлПлатформы = ИсполняемыйФайлПлатформыПоМаксимальнойСборке(настройки.НастройкиТестовойБазы + .ВерсияПлатформы) + + знч временныйФайлНастроекVA = Файлы.СоздатьВременныйФайл("VAParams", ".json") + пер настройкиVAParamsОтчетAllure = новый VAParamsОтчетAllure(каталогВыгрузкиAllure, настройки.НастройкиVA.КаталогФич) + пер настройкиVAParams = новый VAParams(настройки.НастройкиVA.КаталогПроекта, настройки.НастройкиVA.КаталогФич, настройки.НастройкиVA + .КаталогиБиблиотек, "%{настройки.НастройкиVA.КаталогОтчетов}/junit", настройкиVAParamsОтчетAllure) + исп потокНастроекVA = временныйФайлНастроекVA.ОткрытьПотокЗаписи() + СериализацияJson.ЗаписатьОбъект(потокНастроекVA, настройкиVAParams) + потокНастроекVA.Закрыть() + + знч параметрыVA = "StartFeaturePlayer;VBParams=%временныйФайлНастроекVA" + + ExecuteDataProcessorTestManager(настройки.НастройкиVA.ПутьVanessaAutomationSingle, параметрыVA, настройки.НастройкиТестовойБазы + .ПутьКИБ, исполняемыйФайлПлатформы, настройки.НастройкиТестовойБазы.ИмяПользователя, настройки.НастройкиТестовойБазы + .ПарольПользователя) + + AllureGenerate(настройки) +; + +метод OpenReport(имяФайлаНастроек: Строка) + знч настройки = ПрочитатьНастройки(имяФайлаНастроек) + + AllureOpen(настройки) +; + +метод ПрочитатьНастройки(имяФайлаНастроек: Строка): ОписаниеНастроек + пер файлНастроек = новый Файл(имяФайлаНастроек) + исп потокФайлаНастроек = файлНастроек.ОткрытьПотокЧтения() + пер настройкиJson = новый НастройкиЧтенияОбъектовJson() + настройкиJson.ИгнорироватьНеизвестныеСвойства = Истина + пер настройки = СериализацияJson.ПрочитатьОбъект(потокФайлаНастроек, Тип(ОписаниеНастроек), + настройкиJson) как ОписаниеНастроек + пер пользователи = новый Массив() + для пользователь из настройки.НастройкиАвтофич.Пользователи + знч описаниеПользователя = новый ОписаниеПользователя(пользователь["ПредставлениеПользователя"], + пользователь["ИмяПользователя"], пользователь["ПарольПользователя"]) + пользователи.Добавить(описаниеПользователя) + ; + настройки.НастройкиАвтофич.Пользователи = пользователи + + возврат настройки +; + +метод AllureOpen(настройки: ОписаниеНастроек) + пер имяКоманды = "" + пер параметрыПроцесса = новый Массив() + + знч версияОС = ИспользуемаяОС() + выбор версияОС + когда ОперационныеСистемы.Windows + имяКоманды = "allure.bat" + иначе + имяКоманды = "allure" + ; + + параметрыПроцесса.Добавить("open") + параметрыПроцесса.Добавить("%{настройки.НастройкиVA.КаталогОтчетов}/allure-report") + + ВыполнитьКомандуСистемы(имяКоманды, параметрыПроцесса) +; + +метод AllureGenerate(настройки: ОписаниеНастроек) + пер имяКоманды = "" + пер параметрыПроцесса = новый Массив() + + знч версияОС = ИспользуемаяОС() + выбор версияОС + когда ОперационныеСистемы.Windows + имяКоманды = "allure.bat" + иначе + имяКоманды = "allure" + ; + + параметрыПроцесса.Добавить("generate") + параметрыПроцесса.Добавить("%{настройки.НастройкиVA.КаталогОтчетов}/allure") + параметрыПроцесса.Добавить("--clean") + параметрыПроцесса.Добавить("-o") + параметрыПроцесса.Добавить("%{настройки.НастройкиVA.КаталогОтчетов}/allure-report") + + ВыполнитьКомандуСистемы(имяКоманды, параметрыПроцесса) +; + +метод ВыполнитьКомандуСистемы(имяКоманды: Строка, параметры: Массив) + знч процесс = новый ПроцессОс(имяКоманды, параметры, Ложь) + процесс.Запустить() + процесс.ОжидатьЗавершения() + + знч кодВозврата = процесс.ПолучитьКодВозврата() + Консоль.Записать("Код возврата:" + кодВозврата) + + пер результатВыполненияСкрипта = процесс.ПолучитьПотокВывода() + знч текстРезультата = результатВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВывода()) + если не текстРезультата.Пусто() + Консоль.Записать("Поток вывода:") + Консоль.Записать(текстРезультата) + ; + + пер ошибкиВыполненияСкрипта = процесс.ПолучитьПотокОшибок() + знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВывода()) + если не текстОшибок.Пусто() + Консоль.Записать("Поток ошибок:") + Консоль.Записать(текстОшибок) + ; +; + +метод КодировкаПотокаВывода(): Строка + возврат "Cp1251" +; + + +перечисление ОперационныеСистемы + Windows, + MacOS, + Linux +; + + +метод ИспользуемаяОС(): ОперационныеСистемы + знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name") + + выбор когда имяОС.НачинаетсяС("windows", Истина) + возврат ОперационныеСистемы.Windows + + когда имяОС.Содержит("mac", Истина) + возврат ОперационныеСистемы.MacOS + + когда имяОС.Содержит("nux", Истина) + возврат ОперационныеСистемы.Linux + + иначе + выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС") + ; +; + +метод ИсполняемыйФайлПлатформыПоМаксимальнойСборке(версияПлатформы: Строка): Строка + знч установленныеПлатформы = УстановленныеПлатформы() + если установленныеПлатформы.СодержитКлюч(версияПлатформы) + знч путьКПлатформе = установленныеПлатформы.Получить(версияПлатформы) + возврат "%путьКПлатформе/bin/1cv8" + ; + + знч максимальныеПлатформы = МаксимальныеПлатформы() + если максимальныеПлатформы.СодержитКлюч(версияПлатформы) + знч путьКПлатформе = максимальныеПлатформы.Получить(версияПлатформы) + возврат "%путьКПлатформе/bin/1cv8" + ; + + знч текстОшибки = "Не найдена установленная платформа %версияПлатформы" + выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки) +; + +метод МаксимальныеПлатформы(): Соответствие + знч установленныеПлатформы = УстановленныеПлатформы() + + пер максимальныеПлатформы: Соответствие + + для платформа из установленныеПлатформы + знч разложенныйТекущийРелиз = платформа.Ключ.Разделить(".") + + пер релизБезВерсииМассивом = новый Массив(разложенныйТекущийРелиз) + релизБезВерсииМассивом.УдалитьПоИндексу(3) + + знч релизБезВерсии = Строки.Соединить(релизБезВерсииМассивом, ".") + + если не максимальныеПлатформы.СодержитКлюч(релизБезВерсии) + максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение) + продолжить + ; + + знч последнийРелиз = максимальныеПлатформы.Получить(релизБезВерсии) + знч разложенныйПоследнийРелиз = последнийРелиз.Разделить(".") + + если разложенныйТекущийРелиз[3] > разложенныйПоследнийРелиз[3] + максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение) + ; + ; + + возврат максимальныеПлатформы +; + +метод УстановленныеПлатформы(): Соответствие + пер установленныеПлатформы: Соответствие + + знч каталогиПлатформы = КаталогиПлатформы() + + знч настройкиПоискаФайлов = новый НастройкиПоискаФайлов() + настройкиПоискаФайлов.ИсключитьФайлы(Истина) + настройкиПоискаФайлов.МаксимальнаяГлубина(1) + + для каталогПлатформы из каталогиПлатформы + знч найденныеФайлы = Файлы.Найти(каталогПлатформы, настройкиПоискаФайлов) + для найденныйФайл из найденныеФайлы + если не найденныйФайл.Имя.НачинаетсяС("8.3") + продолжить + ; + установленныеПлатформы.Вставить(найденныйФайл.Имя, найденныйФайл.Путь) + ; + ; + + возврат установленныеПлатформы +; + +метод КаталогиПлатформы(): Массив + пер списокКаталогов: Массив + + знч используемаяОС = ИспользуемаяОС() + + выбор используемаяОС + когда ОперационныеСистемы.Windows + знч каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)") + списокКаталогов.Добавить("%каталог32\\1Cv8") + знч каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles") + списокКаталогов.Добавить("%каталог64\\1Cv8") + когда ОперационныеСистемы.MacOS + списокКаталогов.Добавить("/opt/1Cv8") + когда ОперационныеСистемы.Linux + списокКаталогов.Добавить("/opt/1C/v8.3/x86_64") + ; + + возврат списокКаталогов +; + +метод ExecuteDataProcessorTestManager(имяВнешнейОбработки: Строка, вспомогательныеПараметры: Строка, путьКИБ: Строка, + имяФайлаПлатформы: Строка, имяПользователя: Строка = "", пароль: Строка = "") + пер параметрыПроцесса = новый Массив() + параметрыПроцесса.Добавить("ENTERPRISE") + параметрыПроцесса.Добавить("/TestManager") + параметрыПроцесса.Добавить("/Execute") + параметрыПроцесса.Добавить(имяВнешнейОбработки) + если не вспомогательныеПараметры.Пусто() + параметрыПроцесса.Добавить("/C\"%вспомогательныеПараметры\"") + ; + параметрыПроцесса.Добавить("/IBConnectionString") + параметрыПроцесса.Добавить("\"File=\"\"%путьКИБ\"\"\"") + параметрыПроцесса.Добавить("/DisableStartupDialogs") + параметрыПроцесса.Добавить("/WA-") + если не имяПользователя.Пусто() + параметрыПроцесса.Добавить("/N") + параметрыПроцесса.Добавить("\"%имяПользователя\"") + ; + если не пароль.Пусто() + параметрыПроцесса.Добавить("/P") + параметрыПроцесса.Добавить(пароль) + ; + + ВыполнитьКомандуПлатформы(имяФайлаПлатформы, параметрыПроцесса) + Консоль.Записать("Обработка запущена.") +; + +метод ВыполнитьКомандуПлатформы(имяКоманды: Строка, параметры: Массив, выводитьОшибки: Булево = Истина) + знч временныйФайлЛогов = Файлы.СоздатьВременныйФайл() + + параметры.Добавить("/Out") + параметры.Добавить(временныйФайлЛогов.Путь) + + пер процесс = новый ПроцессОс(имяКоманды, параметры) + процесс.Запустить() + процесс.ОжидатьЗавершения() + + исп результатВыполненияСкрипта = процесс.ПолучитьПотокВывода() + знч текстРезультата = результатВыполненияСкрипта.ПрочитатьКакТекст() + если не текстРезультата.Пусто() + Консоль.Записать(текстРезультата) + ; + + знч кодВозврата = процесс.ПолучитьКодВозврата() + + если кодВозврата == 0 + возврат + ; + + пер текстОшибки = "Код возврата: %кодВозврата" + если не выводитьОшибки + выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки) + ; + + текстОшибки += Строки.Шаблон("\в\нКоманда: $0\в\нПараметры: $1", [имяКоманды, Строки.Соединить(параметры, " ")]) + + исп ошибкиВыполненияСкрипта = временныйФайлЛогов.ОткрытьПотокЧтения() + текстОшибки += "\в\н" + ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы()) + выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки) +; + +метод КодировкаПотокаВыводаПлатформы(): Строка + если ИспользуемаяОС() == ОперационныеСистемы.Windows + возврат "windows-1251" + ; + + возврат "UTF-8" +; \ No newline at end of file diff --git a/Скрипты/ГенераторФичVA.sbsl b/Скрипты/ГенераторФичVA.sbsl deleted file mode 100644 index 8d6fd64..0000000 --- a/Скрипты/ГенераторФичVA.sbsl +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/executor - -/******************************************************************************* - * Copyright (c) 2020 Alexander Kapralov and Contributors - * This program and the accompanying materials are made available under - * the terms of the BSD 3-Clause License which is available at - * https://spdx.org/licenses/BSD-3-Clause.html#licenseText - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Contributors: - * - * - ******************************************************************************/ - -структура ОписаниеНастроек - пер КаталогФич: Строка - пер ШаблонШапки: Строка - пер ШаблонОбъекта: Строка - пер ИмяПеременнойОбъекта: Строка - пер Объекты: Массив - пер Пользователи: Массив -; - -структура ОписаниеПользователя - пер Представление: Строка - пер Имя: Строка - пер Пароль: Строка -; - - -метод Скрипт(путьНастройки: Строка, путьШаблоны: Строка, путьФичи: Строка) - пер списокНастроек = новый Массив() - - пер настройкиПоиска = новый НастройкиПоискаФайлов() - настройкиПоиска.ИмяСодержит(".json") - для файлНастроек из Файлы.Найти(путьНастройки, настройкиПоиска) - исп потокФайлаНастроек = файлНастроек.ОткрытьПотокЧтения() - - пер настройкиJson = новый НастройкиЧтенияОбъектовJson() - настройкиJson.ИгнорироватьНеизвестныеСвойства = Истина - - пер настройки = СериализацияJson.ПрочитатьОбъект(потокФайлаНастроек, Тип(ОписаниеНастроек), настройкиJson) как ОписаниеНастроек - пер пользователи = новый Массив() - для пользователь из настройки.Пользователи - знч описаниеПользователя = новый ОписаниеПользователя(пользователь["ПредставлениеПользователя"], пользователь["ИмяПользователя"], - пользователь["ПарольПользователя"]) - пользователи.Добавить(описаниеПользователя) - ; - настройки.Пользователи = пользователи - - списокНастроек.Добавить(настройки) - ; - - для настройки из списокНастроек - пер файлШаблонаШапки = новый Файл("%путьШаблоны/%{настройки.ШаблонШапки}") - исп потокШаблонаШапки = файлШаблонаШапки.ОткрытьПотокЧтения() - знч текстШаблонаШапки = потокШаблонаШапки.ПрочитатьКакТекст() - - пер файлШаблонаОбъекта = новый Файл("%путьШаблоны/%{настройки.ШаблонОбъекта}") - исп потокШаблонаОбъекта = файлШаблонаОбъекта.ОткрытьПотокЧтения() - знч текстШаблонаОбъекта = потокШаблонаОбъекта.ПрочитатьКакТекст() - - пер имяФайлаБезРасширения = файлШаблонаОбъекта.ИмяБезРасширения - для пользователь из настройки.Пользователи - пер текстФичи = текстШаблонаШапки - текстФичи = текстФичи.Заменить("\%ПредставлениеПользователя\%", пользователь.Представление) - текстФичи = текстФичи.Заменить("\%ИмяПользователя\%", пользователь.Имя) - текстФичи = текстФичи.Заменить("\%ПарольПользователя\%", пользователь.Пароль) - - для объект из настройки.Объекты - пер текстОбъекта = текстШаблонаОбъекта - текстОбъекта = текстОбъекта.Заменить("\%%{настройки.ИмяПеременнойОбъекта}\%", объект) - текстФичи = текстФичи + Символы.НоваяСтрока + текстОбъекта - ; - - пер файлФичи = новый Файл("%путьФичи/%{настройки.КаталогФич}/%имяФайлаБезРасширения-%{пользователь.Представление}.feature") - исп потокФичи = файлФичи.ОткрытьПотокЗаписи() - потокФичи.Записать(текстФичи) - ; - ; -; \ No newline at end of file