1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-11-19 20:31:55 +02:00

#331 Сбор окружения

This commit is contained in:
alkoleft 2024-05-22 00:20:11 +03:00
parent 4e55456043
commit 678c7ee87b
12 changed files with 251 additions and 42 deletions

View File

@ -1,7 +1,7 @@
<!-- Важно: Пожалуйста, перед созданием PR создайте проблему (issue) -->
<!-- Любые изменения необходимо описать и при необходимостиобсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->
<!-- Любые изменения необходимо описать и при необходимости обсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->
## Описание изменний
## Описание изменений
<!-- Разместите здесь краткое описание изменений -->

View File

@ -31,6 +31,7 @@
"помогаторы",
"пресетов",
"Регистронезависимое",
"реквеста",
"релизный",
"Сериализатор",
"сериализацию",

View File

@ -70,47 +70,12 @@
КорневойКаталог = ЮТФайлы.ОбъединитьПути(Результат, "..", "..", "..");
КаталогКомпонент = ЮТФайлы.ОбъединитьПути(КорневойКаталог, "ExtCompT");
ПараметрыТихойУстановки.РабочийКаталог = КаталогКомпонент;
Информация = Новый СистемнаяИнформация();
ОперационнаяСистема = Неопределено;
Архитектура = Неопределено;
Linux = "Linux";
Windows = "Windows";
MacOS = "MacOS";
ОписаниеПлатформы = ЮТОкружениеСлужебныйКлиентСервер.Платформа(Новый СистемнаяИнформация());
ПараметрыТихойУстановки.ОперационнаяСистема = ОписаниеПлатформы.ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = ОписаниеПлатформы.Архитектура;
//@skip-check bsl-variable-name-invalid
x86 = "i386";
//@skip-check bsl-variable-name-invalid
x64 = "x86_64";
ТипКлиентскойПлатформы = Информация.ТипПлатформы;
Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда
ОперационнаяСистема = Linux;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда
ОперационнаяСистема = Linux;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда
ОперационнаяСистема = Windows;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ОперационнаяСистема = Windows;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x64;
Иначе
ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки("Неподдерживаемый тип платформы");
КонецЕсли;
ПараметрыТихойУстановки.ОперационнаяСистема = ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = Архитектура;
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки);
КонецПроцедуры

View File

@ -152,6 +152,12 @@
КонецФункции
Функция ВычислитьБезопасноНаСервере(Знач Выражение) Экспорт
Возврат ЮТОбщийСлужебныйВызовСервера.ВычислитьБезопасноНаСервере(Выражение);
КонецФункции
Функция ВызватьФункцию(ПолноеИмяМетода, Параметры, Безопасно = Истина) Экспорт
Выражение = СтрокаВызоваМетода(ПолноеИмяМетода, Параметры);

View File

@ -124,6 +124,12 @@
КонецФункции
Функция ВычислитьБезопасноНаСервере(Знач Выражение) Экспорт
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(Выражение);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -0,0 +1,167 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
// Собирает информацию об окружения, как сервера, так и клиента.
//
// Возвращаемое значение:
// Структура - Описание окружения:
// * ВерсияПлатформы - Строка
// * ФайловаяБаза - Булево
// * ОбычноеПриложение - Булево
// * ВебКлиент - Булево
// * ТолстыйКлиент - Булево
// * ЛокальПлатформы - Строка
// * ЛокальИнтерфейса - Строка
// * ОперационнаяСистемаКлиент - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураКлиент - Строка - Возможные значения: x86_64, i386
// * ОперационнаяСистемаСервер - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураСервер - Строка - Возможные значения: x86_64, i386
// * ВстроенныйЯзык - Строка - Возможные значения: ru, en
// * ИнформационнаяСреда - Строка
Функция ОписаниеОкружения() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация();
Окружение = Новый Структура;
Окружение.Вставить("ВерсияПлатформы", СистемнаяИнформация.ВерсияПриложения);
Окружение.Вставить("ФайловаяБаза", ЭтоФайловаяБаза());
Окружение.Вставить("ОбычноеПриложение", Ложь);
Окружение.Вставить("ВебКлиент", Ложь);
Окружение.Вставить("ТолстыйКлиент", Ложь);
Окружение.Вставить("ЛокальПлатформы", ЛокальПлатформы());
Окружение.Вставить("ЛокальИнтерфейса", ЛокальИнтерфейса());
Окружение.Вставить("ИнформационнаяСреда", "DEV");
#Если ВебКлиент Тогда
Окружение.ВебКлиент = Истина;
#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда
Окружение.ОбычноеПриложение = Истина;
Окружение.ТолстыйКлиент = Истина;
#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда
Окружение.ТолстыйКлиент = Истина;
#КонецЕсли
Платформа = Платформа(СистемнаяИнформация);
Окружение.Вставить("ОперационнаяСистемаКлиент", Платформа.ОперационнаяСистема);
Окружение.Вставить("АрхитектураКлиент", Платформа.Архитектура);
// TODO придумать другой безопасный универсальный вызов сервера
ОписаниеСерверногоОкружения = ЮТМетодыСлужебный.ВычислитьБезопасноНаСервере("ЮТОкружениеСлужебныйКлиентСервер.ОписаниеСерверногоОкружения()");
Окружение.Вставить("ОперационнаяСистемаСервер", ОписаниеСерверногоОкружения.ОперационнаяСистема);
Окружение.Вставить("АрхитектураСервер", ОписаниеСерверногоОкружения.Архитектура);
Окружение.Вставить("ВстроенныйЯзык", ОписаниеСерверногоОкружения.ВстроенныйЯзык);
//@skip-check constructor-function-return-section
Возврат Окружение;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура Инициализация(ПараметрыЗапуска) Экспорт
Окружение = ОписаниеОкружения();
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("Окружение", Окружение, Истина);
КонецПроцедуры
Функция ЭтоФайловаяБаза()
Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы()), "FILE=") = 0;
КонецФункции
Функция Платформа(СистемнаяИнформация) Экспорт
ОперационнаяСистема = Неопределено;
Архитектура = Неопределено;
Linux = "Linux";
Windows = "Windows";
MacOS = "MacOS";
//@skip-check bsl-variable-name-invalid
x86 = "i386";
//@skip-check bsl-variable-name-invalid
x64 = "x86_64";
ТипКлиентскойПлатформы = СистемнаяИнформация.ТипПлатформы;
Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда
ОперационнаяСистема = Linux;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда
ОперационнаяСистема = Linux;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда
ОперационнаяСистема = Windows;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ОперационнаяСистема = Windows;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x64;
Иначе
ВызватьИсключение "Неподдерживаемый тип платформы";
КонецЕсли;
Возврат Новый Структура("ОперационнаяСистема, Архитектура", ОперационнаяСистема, Архитектура);
КонецФункции
#Если Сервер Тогда
Функция ОписаниеСерверногоОкружения() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация();
Платформа = Платформа(СистемнаяИнформация);
Окружение = Новый Структура;
Окружение.Вставить("ОперационнаяСистема", Платформа.ОперационнаяСистема);
Окружение.Вставить("Архитектура", Платформа.Архитектура);
Окружение.Вставить("ВстроенныйЯзык", Формат(Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский, "БЛ=en; БИ=ru;"));
Возврат Окружение;
КонецФункции
#КонецЕсли
Функция ЛокальИнтерфейса()
#Если Клиент Тогда
Возврат ТекущийЯзык();
#Иначе
Возврат ТекущийЯзык().КодЯзыка;
#КонецЕсли
КонецФункции
Функция ЛокальПлатформы()
Возврат ТекущийЯзыкСистемы();
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f53b66d1-d3a6-48ff-86e3-d684d219a58d">
<name>ЮТОкружениеСлужебныйКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Окружение служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -220,4 +220,28 @@
КонецФункции
// Возвращает информацию об окружении.
//
// Возвращаемое значение:
// Структура - Описание окружения:
// * ВерсияПлатформы - Строка
// * ФайловаяБаза - Булево
// * ОбычноеПриложение - Булево
// * ВебКлиент - Булево
// * ТолстыйКлиент - Булево
// * ЛокальПлатформы - Строка
// * ЛокальИнтерфейса - Строка
// * ОперационнаяСистемаКлиент - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураКлиент - Строка - Возможные значения: x86_64, i386
// * ОперационнаяСистемаСервер - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураСервер - Строка - Возможные значения: x86_64, i386
// * ВстроенныйЯзык - Строка - Возможные значения: ru, en
// * ИнформационнаяСреда - Строка
Функция Окружение() Экспорт
//@skip-check constructor-function-return-section
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("Окружение");
КонецФункции
#КонецОбласти

View File

@ -96,6 +96,7 @@
<commonModules>CommonModule.ЮТНастройкиВыполнения</commonModules>
<commonModules>CommonModule.ЮТОбщий</commonModules>
<commonModules>CommonModule.ЮТОбщийСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТОтчетAllureСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетJSONСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетJUnitСлужебный</commonModules>

View File

@ -26,6 +26,7 @@
<content>CommonModule.ЮТМетодыСлужебный</content>
<content>CommonModule.ЮТНастройкиВыполнения</content>
<content>CommonModule.ЮТОбщийСлужебныйВызовСервера</content>
<content>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</content>
<content>CommonModule.ЮТОтчетСлужебный</content>
<content>CommonModule.ЮТПодключаемыеМодулиСлужебный</content>
<content>CommonModule.ЮТПроверкиСлужебный</content>

View File

@ -7,5 +7,6 @@
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<content>CommonModule.ЮТЗависимостиСлужебный</content>
<content>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</content>
<parentSubsystem>Subsystem.ЮТПодключаемыеМодули.Subsystem.ОбработчикиСобытий</parentSubsystem>
</mdclass:Subsystem>

View File

@ -29,6 +29,7 @@
.ДобавитьТест("ПроверкаПереопределенногоКонтекста").Перед("Перед_ПроверкаПереопределенногоКонтекста")
.ДобавитьТестовыйНабор("ПовторнаяПроверкаКонтекста")
.ДобавитьТест("ПроверкаКонтекста")
.ДобавитьТест("Окружение")
;
КонецПроцедуры
@ -74,10 +75,10 @@
ЮТест.Контекст().Значение("Коллекция").Добавить("ПослеВсехТестов");
#Если Сервер Тогда
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция"))
.ИмеетДлину(18); // Количество вызванных обработчиков событий
.ИмеетДлину(20); // Количество вызванных обработчиков событий
#Иначе
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция"))
.ИмеетДлину(16); // Количество вызванных обработчиков событий
.ИмеетДлину(18); // Количество вызванных обработчиков событий
#КонецЕсли
КонецПроцедуры
@ -151,4 +152,28 @@
КонецПроцедуры
#КонецЕсли
Процедура Окружение() Экспорт
Окружение = ЮТест.Окружение();
ЮТест.ОжидаетЧто(Окружение)
.Заполнено()
.ИмеетТип("Структура")
.Свойство("ВстроенныйЯзык").Равно("ru")
.Свойство("ОбычноеПриложение").Равно(Ложь)
.Свойство("ВебКлиент").Равно(Ложь)
.Свойство("ТолстыйКлиент").Равно(Ложь)
.Свойство("ВерсияПлатформы")
.Свойство("ФайловаяБаза")
.Свойство("ЛокальПлатформы")
.Свойство("ЛокальИнтерфейса")
.Свойство("ОперационнаяСистемаКлиент")
.Свойство("АрхитектураКлиент")
.Свойство("ОперационнаяСистемаСервер")
.Свойство("АрхитектураСервер")
.Свойство("ИнформационнаяСреда")
;
КонецПроцедуры
#КонецОбласти