Skip to content

Commit

Permalink
#331 Сбор окружения
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed May 21, 2024
1 parent e039bff commit d5038f4
Show file tree
Hide file tree
Showing 10 changed files with 249 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Иначе
ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки("Неподдерживаемый тип платформы");
КонецЕсли;

ПараметрыТихойУстановки.ОперационнаяСистема = ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = Архитектура;
ОписаниеПлатформы = ЮТОкружениеСлужебныйКлиентСервер.Платформа(Новый СистемнаяИнформация());
ПараметрыТихойУстановки.ОперационнаяСистема = ОписаниеПлатформы.ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = ОписаниеПлатформы.Архитектура;

ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки);

КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,12 @@

КонецФункции

Функция ВычислитьБезопасноНаСервере(Знач Выражение) Экспорт

Возврат ЮТОбщийСлужебныйВызовСервера.ВычислитьБезопасноНаСервере(Выражение);

КонецФункции

Функция ВызватьФункцию(ПолноеИмяМетода, Параметры, Безопасно = Истина) Экспорт

Выражение = СтрокаВызоваМетода(ПолноеИмяМетода, Параметры);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@

КонецФункции

Функция ВычислитьБезопасноНаСервере(Знач Выражение) Экспорт

Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(Выражение);

КонецФункции

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

#Область СлужебныеПроцедурыИФункции
Expand Down
Original file line number Diff line number Diff line change
@@ -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;"));

Возврат Окружение;

КонецФункции
#КонецЕсли

Функция ЛокальИнтерфейса()

#Если Клиент Тогда
Возврат ТекущийЯзык();
#Иначе
Возврат ТекущийЯзык().КодЯзыка;
#КонецЕсли

КонецФункции

Функция ЛокальПлатформы()

Возврат ТекущийЯзыкСистемы();

КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -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>
24 changes: 24 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТест/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,28 @@

КонецФункции

// Возвращает информацию об окружении.
//
// Возвращаемое значение:
// Структура - Описание окружения:
// * ВерсияПлатформы - Строка
// * ФайловаяБаза - Булево
// * ОбычноеПриложение - Булево
// * ВебКлиент - Булево
// * ТолстыйКлиент - Булево
// * ЛокальПлатформы - Строка
// * ЛокальИнтерфейса - Строка
// * ОперационнаяСистемаКлиент - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураКлиент - Строка - Возможные значения: x86_64, i386
// * ОперационнаяСистемаСервер - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураСервер - Строка - Возможные значения: x86_64, i386
// * ВстроенныйЯзык - Строка - Возможные значения: ru, en
// * ИнформационнаяСреда - Строка
Функция Окружение() Экспорт

//@skip-check constructor-function-return-section
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("Окружение");

КонецФункции

#КонецОбласти
1 change: 1 addition & 0 deletions exts/yaxunit/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<content>CommonModule.ЮТЗависимостиСлужебный</content>
<content>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</content>
<parentSubsystem>Subsystem.ЮТПодключаемыеМодули.Subsystem.ОбработчикиСобытий</parentSubsystem>
</mdclass:Subsystem>
29 changes: 27 additions & 2 deletions tests/src/CommonModules/ОМ_ЮТест/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
.ДобавитьТест("ПроверкаПереопределенногоКонтекста").Перед("Перед_ПроверкаПереопределенногоКонтекста")
.ДобавитьТестовыйНабор("ПовторнаяПроверкаКонтекста")
.ДобавитьТест("ПроверкаКонтекста")
.ДобавитьТест("Окружение")
;

КонецПроцедуры
Expand Down Expand Up @@ -74,10 +75,10 @@
ЮТест.Контекст().Значение("Коллекция").Добавить("ПослеВсехТестов");
#Если Сервер Тогда
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция"))
.ИмеетДлину(18); // Количество вызванных обработчиков событий
.ИмеетДлину(20); // Количество вызванных обработчиков событий
#Иначе
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция"))
.ИмеетДлину(16); // Количество вызванных обработчиков событий
.ИмеетДлину(18); // Количество вызванных обработчиков событий
#КонецЕсли

КонецПроцедуры
Expand Down Expand Up @@ -151,4 +152,28 @@
КонецПроцедуры
#КонецЕсли

Процедура Окружение() Экспорт

Окружение = ЮТест.Окружение();

ЮТест.ОжидаетЧто(Окружение)
.Заполнено()
.ИмеетТип("Структура")
.Свойство("ВстроенныйЯзык").Равно("ru")
.Свойство("ОбычноеПриложение").Равно(Ложь)
.Свойство("ВебКлиент").Равно(Ложь)
.Свойство("ТолстыйКлиент").Равно(Ложь)
.Свойство("ВерсияПлатформы")
.Свойство("ФайловаяБаза")
.Свойство("ЛокальПлатформы")
.Свойство("ЛокальИнтерфейса")
.Свойство("ОперационнаяСистемаКлиент")
.Свойство("АрхитектураКлиент")
.Свойство("ОперационнаяСистемаСервер")
.Свойство("АрхитектураСервер")
.Свойство("ИнформационнаяСреда")
;

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

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

0 comments on commit d5038f4

Please sign in to comment.