diff --git a/.gitignore b/.gitignore index 7d22e1b9..3a02f906 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ tests\.xml + +exec\.log + +bdd-log\.xml + +*.ospx diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 0b86c52f..7eec956d 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,8 +1,9 @@ { - "version": "0.1.0", + "version": "2.0.0", + "_runner": "terminal", "windows": { "command": "cmd", - "args": ["/c", "chcp 65001 >nul &"] + "args": ["/c", "chcp 65001 ;"] }, "linux": { "command": "sh", @@ -11,6 +12,28 @@ "isShellCommand": true, "showOutput": "silent", "tasks": [ + { + "taskName": "Testing project (opm test)", + "args": [ + // "oscript", + // "src/opm.os", + "opm", + "test" + ], + // "echoCommand": true, + // "showOutput": "always", + "suppressTaskName": true, + // "isTestCommand": false, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + } + }, { "taskName": "Testing project", "args": [ diff --git "a/features/\320\241\320\261\320\276\321\200\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260\320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270.feature" b/features/opm-build.feature similarity index 100% rename from "features/\320\241\320\261\320\276\321\200\320\272\320\260\320\237\320\260\320\272\320\265\321\202\320\260\320\221\320\270\320\261\320\273\320\270\320\276\321\202\320\265\320\272\320\270.feature" rename to features/opm-build.feature diff --git "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" index 26e36b58..a3fd44c4 100644 --- "a/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" +++ "b/features/\320\237\321\200\320\276\321\201\321\202\321\213\320\265\320\232\320\276\320\274\320\260\320\275\320\264\321\213.feature" @@ -14,24 +14,24 @@ Сценарий: Получение версии продукта Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os version" Тогда Я сообщаю вывод команды "oscript" - И Вывод команды "oscript" содержит "2.1.1" + Тогда я вижу в консоли строку подобно "(\d+\.){2}\d+" И Вывод команды "oscript" не содержит "GitSync v" И Код возврата команды "oscript" равен 0 Сценарий: Получение помощи продукта Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os help" + Тогда я вижу в консоли строку подобно "GitSync\s+v(\d+\.){2}\d+" Тогда Вывод команды "oscript" содержит """ - GitSync v2.1.1 Возможные команды: """ И Код возврата команды "oscript" равен 0 Сценарий: Вызов исполняемого файла без параметров Когда Я выполняю команду "oscript" c параметрами "src/gitsync.os" + Тогда я вижу в консоли строку подобно "GitSync\s+v(\d+\.){2}\d+" Тогда Вывод команды "oscript" содержит """ - GitSync v2.1.1 ОШИБКА - Некорректные аргументы командной строки Возможные команды: """ diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" index 0c513602..343cd45f 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Sync.os" @@ -52,8 +52,8 @@ Парсер.ДобавитьПараметрФлаг ("-process-fatform-modules", "Переименовывать модули обычных форм в Module.bsl"); Парсер.ДобавитьПараметрФлаг ("-check-authors", "Проверка файла AUTHORS, на наличие всех авторов коммитов "); - Парсер.ДобавитьПараметрФлагКоманды("-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); - Парсер.ДобавитьПараметрФлагКоманды("-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции"); + Парсер.ДобавитьПараметрФлаг("-stop-if-empty-comment", "Остановить, если Комментарий к версии пустой"); + Парсер.ДобавитьПараметрФлаг("-auto-set-tags", "Автоматическая установка тэгов по версия конфиграции"); КонецПроцедуры // ЗарегистрироватьКоманду diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" index 037a01a4..7b2dba51 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\241\320\270\320\275\321\205\321\200\320\276\320\275\320\270\320\267\320\260\321\206\320\270\320\270.os" @@ -23,6 +23,9 @@ Перем УдалятьВременныеФайлы; Перем КоличествоЦикловОжиданияЛицензииПоУмолчанию; +Перем РабочийКаталогСохр; +Перем ГитРепозиторийСохр; + /////////////////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -438,14 +441,22 @@ ///////////////////////////////////// // GIT Пересмотр -// <Описание процедуры> -// Функция ПолучитьГитРепозиторий(Знач КаталогРабочейКопии) - ГитРепозиторий = Новый ГитРепозиторий; - ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); - ГитРепозиторий.УстановитьНастройку("core.quotepath","false",РежимУстановкиНастроекGit.Локально); - ГитРепозиторий.УстановитьНастройку("merge.ours.driver","true",РежимУстановкиНастроекGit.Локально); + ФайлКаталога = Новый Файл(ОбъединитьПути(ТекущийКаталог(), КаталогРабочейКопии)); + Если ФайлКаталога.ПолноеИмя = РабочийКаталогСохр Тогда + ГитРепозиторий = ГитРепозиторийСохр; + Иначе + ГитРепозиторий = Новый ГитРепозиторий; + ГитРепозиторий.УстановитьРабочийКаталог(КаталогРабочейКопии); + ГитРепозиторий.УстановитьНастройку("core.quotepath", "false", РежимУстановкиНастроекGit.Локально); + ГитРепозиторий.УстановитьНастройку("merge.ours.driver", "true", РежимУстановкиНастроекGit.Локально); + + РабочийКаталогСохр = ФайлКаталога.ПолноеИмя; + ГитРепозиторийСохр = ГитРепозиторий; + + КонецЕсли; + Возврат ГитРепозиторий; КонецФункции // ПолучитьГитРепозиторий() @@ -1311,7 +1322,13 @@ /////////////////////////////////////////////////////////////////////////////////////////////// // Вспомогательные функции -Процедура УдалитьВременныеФайлыПриНеобходимости(Знач ПутьКФайлу = "") +// Удаляет временные файлы при необходимости +// Если передана пустая строка, то удаляются все зарегистрированные временные файлы +// +// Параметры: +// ПутьКФайлу - Строка - полный путь файла или пустая строка +// +Процедура УдалитьВременныеФайлыПриНеобходимости(Знач ПутьКФайлу = "") Экспорт Если УдалятьВременныеФайлы Тогда Возврат; diff --git a/tasks/test.os b/tasks/test.os index 06bdd0e3..b5a9802b 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -1,15 +1,82 @@ -#Использовать 1testrunner - -Тестер = Новый Тестер; - -ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); -ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); - -РезультатТестирования = Тестер.ТестироватьКаталог( - Новый Файл(ПутьКТестам), - Новый Файл(ПутьКОтчетуJUnit) -); - -Если РезультатТестирования <> 0 Тогда - ВызватьИсключение РезультатТестирования; -КонецЕсли; +// #Использовать "../src" +#Использовать 1bdd +#Использовать 1testrunner + +Функция ПрогнатьТесты() + + Тестер = Новый Тестер; + + ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); + ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); + + КаталогТестов = Новый Файл(ПутьКТестам); + Если Не КаталогТестов.Существует() Тогда + Сообщить(СтрШаблон("Не найден каталог тестов %1", ПутьКТестам)); + Возврат Истина; + КонецЕсли; + + РезультатТестирования = Тестер.ТестироватьКаталог( + КаталогТестов, + Новый Файл(ПутьКОтчетуJUnit) + ); + + Успешно = РезультатТестирования = 0; + + Возврат Успешно; +КонецФункции // ПрогнатьТесты() + +Функция ПрогнатьФичи() + + ПутьОтчетаJUnit = "./bdd-log.xml"; + + КаталогФич = ОбъединитьПути(".", "features"); + + Файл_КаталогФич = Новый Файл(КаталогФич); + Если Не Файл_КаталогФич.Существует() Тогда + Сообщить(СтрШаблон("Не найден каталог фич %1", КаталогФич)); + Возврат Истина; + КонецЕсли; + + ИсполнительБДД = Новый ИсполнительБДД; + РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); + ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); + + СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся; + Если РезультатыВыполнения.Строки.Количество() > 0 Тогда + + СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); + + КонецЕсли; + + ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; + ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit); + + Сообщить(СтрШаблон("Результат прогона фич <%1> + |", ИтоговыйРезультатВыполнения)); + + Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался; +КонецФункции // ПрогнатьФичи() + +Попытка + ТестыПрошли = ПрогнатьТесты(); + +Исключение + ТестыПрошли = Ложь; + Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); +КонецПопытки; + +Попытка + ФичиПрошли = ПрогнатьФичи(); +Исключение + ФичиПрошли = Ложь; + Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); +КонецПопытки; + +Если Не ТестыПрошли Или Не ФичиПрошли Тогда + ВызватьИсключение "Тестирование завершилось неудачно!"; +Иначе + Сообщить(СтрШаблон("Результат прогона тестов <%1> + |", ТестыПрошли)); +КонецЕсли; diff --git a/tests/git-sync-test.os b/tests/git-sync-test.os index 788dc963..976fa45d 100644 --- a/tests/git-sync-test.os +++ b/tests/git-sync-test.os @@ -371,6 +371,10 @@ КоличествоКоммитов = КоличествоКоммитов + 1; КонецЦикла; ЛогГит.Закрыть(); + + Распаковщик.УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаГит); + Распаковщик.УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); + Утверждения.ПроверитьРавенство(КоличествоКоммитов, 8, "Количество коммитов в git-хранилище"); КонецПроцедуры @@ -475,9 +479,6 @@ ФайлЛога = ВременныеФайлы.СоздатьФайл("log"); Батник = Новый КомандныйФайл(); Батник.Создать(); - Если ЭтоWindows Тогда - Батник.ДобавитьКоманду("chcp 1251 > nul"); - КонецЕсли; Батник.ДобавитьКоманду(СтрШаблон("cd %1 ""%2""",?(ЭтоWindows, "/d", ""), ЛокальныйКаталог)); ПараметрыКоманды = Новый Массив; @@ -498,6 +499,9 @@ РезультатКлонирования = Батник.Исполнить(); // вывод всех сообщений от Git Лог.Информация(Батник.ПолучитьВывод()); + + Распаковщик.УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); + Утверждения.ПроверитьРавенство(РезультатКлонирования, 0, "git clone должен отработать успешно"); Ответ = Новый Структура; diff --git a/tests/test-export_with_min_max_versions.os b/tests/test-export_with_min_max_versions.os index ba6ce857..28ad170c 100644 --- a/tests/test-export_with_min_max_versions.os +++ b/tests/test-export_with_min_max_versions.os @@ -103,6 +103,10 @@ КоличествоКоммитов = КоличествоКоммитов + 1; КонецЦикла; ЛогГит.Закрыть(); + + Распаковщик.УдалитьВременныеФайлыПриНеобходимости(ИмяФайлаЛогаГит); + Распаковщик.УдалитьВременныеФайлыПриНеобходимости(Батник.Закрыть()); + Возврат КоличествоКоммитов; КонецФункции