#Использовать "../../src/en/cli/data"

Перем Версия;
Перем ТекущийФайл;
Перем ТаблицаПараметров;
Перем Модули;

#Область Основа

Процедура ПриСозданииОбъекта()

	ТекущийСоставБиблиотеки = Новый СоставБиблиотеки();

	ТаблицаПараметров = ТекущийСоставБиблиотеки.ПолучитьПолныйСостав();
	Версия            = ТекущийСоставБиблиотеки.ПолучитьВерсию();
	Модули            = ТекущийСоставБиблиотеки.ПолучитьСоответствиеКомандМодулей();

	СоздатьОсновнойФайл();

КонецПроцедуры

Процедура СоздатьОсновнойФайл()

	ТекущийФайл = Новый ТекстовыйДокумент();

	СформироватьОпределения();
	СформироватьПроцесс();

	Текст = ТекущийФайл.ПолучитьТекст();
	ПолучитьДвоичныеДанныеИзСтроки(Текст).Записать("./ci/clitesten");

КонецПроцедуры

#КонецОбласти

#Область ФормированиеФайлов

Процедура СформироватьПроцесс()

	Язык = "en";

	ТекущийФайл.ДобавитьСтроку(
	"pipeline {
	|   agent any
	|   stages {
	|      stage('Prepare'){
	|         steps{
	|            powershell encoding: 'UTF-8', script:'cd ./src/" + Язык + "/OInt; opm build; opm install oint-1.15.1.ospx; del oint-1.15.1.ospx'
	|            powershell encoding: 'UTF-8', script:'oscript -make ./src/" + Язык + "/cli/core/Classes/app.os oint.exe'          
	|         }
	|      }
	|      stage('Run'){
	|         steps{");   

	Для Каждого Модуль Из Модули Цикл

		ТекущийФайл.ДобавитьСтроку("test_" + Модуль.Ключ + "()");

	КонецЦикла;

	ТекущийФайл.ДобавитьСтроку("
	|         }
	|      }
	|   }
	|}
	|
	|");

КонецПроцедуры

Процедура СформироватьОпределения()
	
	Язык = "en";

	ТекстРаботы = "
	|pipeline {
	|   agent any
	|   	stages {
	|          stage('Prepare'){
	|             steps{
	|                powershell encoding: 'UTF-8', script:'cd ./src/" + Язык + "/OInt; opm build; opm install oint-1.15.1.ospx; del oint-1.15.1.ospx'
	|                powershell encoding: 'UTF-8', script:'oscript -make ./src/" + Язык + "/cli/core/Classes/app.os oint.exe'          
	|             }
	|          }
	|          stage('Run Tests') {
    |             parallel {
	|";

	Для Каждого Модуль Из Модули Цикл

		ТекущаяКоманда = Модуль.Ключ;

		ТекстРаботы = ТекстРаботы + "
	    |          stage('" + ТекущаяКоманда + "'){
	    |             steps{
		|                test_" + ТекущаяКоманда + "()
		|             }
		|          }";

	КонецЦикла;
	
	ТекстРаботы = ТекстРаботы + "
	|   } 
	|  }    
	| }
	|}
	|";

	ТекущийФайл.ДобавитьСтроку(ТекстРаботы);

	Для Каждого Модуль Из Модули Цикл

		ТекущаяКоманда = Модуль.Ключ;

		ТекстФункции = "
		|
		|def test_" + ТекущаяКоманда + "(){
		|					
		|";

		Отбор            = Новый Структура("Библиотека", ТекущаяКоманда);
		СтрокиБиблиотеки = ТаблицаПараметров.НайтиСтроки(Отбор);
		ТекущийМетод     = "";

		Для Каждого СтрокаПараметра Из СтрокиБиблиотеки Цикл

			Если ТекущийМетод <> СтрокаПараметра.Метод Тогда

				ТекущийМетод  = СтрокаПараметра.Метод;
				СтрокаЗапуска = ТекущийМетод;
				Отбор.Вставить("Метод", ТекущийМетод);	

				СтрокиМетода = ТаблицаПараметров.НайтиСтроки(Отбор);

				Для Каждого СтрокаМетода Из СтрокиМетода Цикл
					СтрокаЗапуска = СтрокаЗапуска 
						+ " "
						+ СтрокаМетода.Параметр
						+ " ""test"""
				КонецЦикла;

				ТекстФункции = ТекстФункции + "
				|               catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {   
				|					powershell encoding: 'UTF-8', script:'./oint.exe " + ТекущаяКоманда + " " + СтрокаЗапуска + " --debug --test '
				|               }
				|";

			КонецЕсли;

		КонецЦикла;

		ТекстФункции = ТекстФункции + "
		|}
		|";


		ТекущийФайл.ДобавитьСтроку(ТекстФункции);

	КонецЦикла;

КонецПроцедуры

#КонецОбласти