diff --git a/build.gradle.kts b/build.gradle.kts index 7fe86314..45d43288 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ tasks.withType { allprojects { group = "com.github.otymko.jos" - version = "0.0.1" + version = "0.2.0" repositories { mavenCentral() @@ -38,6 +38,13 @@ allprojects { property("sonar.coverage.jacoco.xmlReportPaths", "$buildDir/reports/jacoco/test/jacoco.xml") } } + + tasks.withType { + manifest { + attributes["Implementation-Version"] = project.version + } + } + } subprojects { diff --git a/engine/src/main/java/com/github/otymko/jos/compiler/ScriptCompiler.java b/engine/src/main/java/com/github/otymko/jos/compiler/ScriptCompiler.java index 2792d3a4..77875090 100644 --- a/engine/src/main/java/com/github/otymko/jos/compiler/ScriptCompiler.java +++ b/engine/src/main/java/com/github/otymko/jos/compiler/ScriptCompiler.java @@ -15,6 +15,7 @@ import com.github.otymko.jos.runtime.SymbolType; import com.github.otymko.jos.runtime.context.global.FileOperationsGlobalContext; import com.github.otymko.jos.runtime.context.global.StringOperationGlobalContext; +import com.github.otymko.jos.runtime.context.global.SystemEnvironmentGlobalContext; import com.github.otymko.jos.runtime.context.global.SystemGlobalContext; import com.github.otymko.jos.runtime.context.sdo.ScriptDrivenObject; import com.github.otymko.jos.runtime.context.type.TypeManager; @@ -171,6 +172,7 @@ private void initOuterContext() { outerContext.implementContext(SystemGlobalContext.class); outerContext.implementContext(StringOperationGlobalContext.class); outerContext.implementContext(FileOperationsGlobalContext.class); + outerContext.implementContext(SystemEnvironmentGlobalContext.class); } private void addGlobalContext() { diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/ContextInitializer.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/ContextInitializer.java index dba8158f..0164059d 100644 --- a/engine/src/main/java/com/github/otymko/jos/runtime/context/ContextInitializer.java +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/ContextInitializer.java @@ -15,6 +15,7 @@ import com.github.otymko.jos.runtime.context.global.FileOperationsGlobalContext; import com.github.otymko.jos.runtime.context.global.GlobalContext; import com.github.otymko.jos.runtime.context.global.StringOperationGlobalContext; +import com.github.otymko.jos.runtime.context.global.SystemEnvironmentGlobalContext; import com.github.otymko.jos.runtime.context.global.SystemGlobalContext; import com.github.otymko.jos.runtime.context.type.TypeManager; import com.github.otymko.jos.runtime.machine.MachineInstance; @@ -44,6 +45,7 @@ public void initialize(MachineInstance machineInstance) { machineInstance.implementContext(new SystemGlobalContext()); machineInstance.implementContext(new StringOperationGlobalContext()); machineInstance.implementContext(new FileOperationsGlobalContext()); + machineInstance.implementContext(new SystemEnvironmentGlobalContext()); } /** diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/global/SystemEnvironmentGlobalContext.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/global/SystemEnvironmentGlobalContext.java new file mode 100644 index 00000000..fc261491 --- /dev/null +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/global/SystemEnvironmentGlobalContext.java @@ -0,0 +1,53 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +package com.github.otymko.jos.runtime.context.global; + +import com.github.otymko.jos.core.annotation.ContextMethod; +import com.github.otymko.jos.core.annotation.GlobalContextClass; +import com.github.otymko.jos.runtime.context.AttachableContext; +import com.github.otymko.jos.runtime.context.type.ValueFactory; +import com.github.otymko.jos.runtime.context.type.collection.V8Map; +import com.github.otymko.jos.runtime.machine.info.ContextInfo; + +import java.util.Map; +import java.util.TreeMap; + +@GlobalContextClass +public class SystemEnvironmentGlobalContext implements AttachableContext { + public static final ContextInfo INFO = ContextInfo.createByClass(SystemEnvironmentGlobalContext.class); + private static final Map environmentVariables = getEnvironmentVariablesSnapshot(); + + private static Map getEnvironmentVariablesSnapshot() { + final var result = new TreeMap(String.CASE_INSENSITIVE_ORDER); + result.putAll(System.getenv()); + return result; + } + + @ContextMethod(name = "ПеременныеСреды", alias = "EnvironmentVariables") + public V8Map environmentVariables() { + var result = V8Map.constructor(); + for (var envEntry: environmentVariables.entrySet()) { + result.insert(ValueFactory.create(envEntry.getKey()), + ValueFactory.create(envEntry.getValue())); + } + return result; + } + + @ContextMethod(name = "ПолучитьПеременнуюСреды", alias = "getEnvironmentVariable") + public String getEnvironmentVariable(String name) { + return environmentVariables.getOrDefault(name, ""); + } + + @ContextMethod(name = "УстановитьПеременнуюСреды", alias = "SetEnvironmentVariable") + public void setEnvironmentVariable(String name, String value) { + environmentVariables.put(name, value); + } + + @Override + public ContextInfo getContextInfo() { + return INFO; + } +} diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/StandardTypeInitializer.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/StandardTypeInitializer.java index 7d99d4a5..b747c2d4 100644 --- a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/StandardTypeInitializer.java +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/StandardTypeInitializer.java @@ -18,6 +18,7 @@ import com.github.otymko.jos.runtime.context.type.collection.V8ValueTable; import com.github.otymko.jos.runtime.context.type.common.V8RandomNumberGenerator; import com.github.otymko.jos.runtime.context.type.common.V8CompareValues; +import com.github.otymko.jos.runtime.context.type.env.V8SystemInfo; import com.github.otymko.jos.runtime.context.type.common.V8Uuid; import com.github.otymko.jos.runtime.context.type.file.V8File; import com.github.otymko.jos.runtime.context.type.primitive.BooleanValue; @@ -99,6 +100,7 @@ private void initCollections(TypeManager typeManager) { implementTypeByInfo(typeManager, Regex.INFO); implementTypeByInfo(typeManager, V8File.INFO); implementTypeByInfo(typeManager, V8RandomNumberGenerator.INFO); + implementTypeByInfo(typeManager, V8SystemInfo.INFO); implementTypeByInfo(typeManager, V8ValueTable.INFO); implementTypeByInfo(typeManager, V8CompareValues.INFO); diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/TypeManager.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/TypeManager.java index b4cc9219..76e2a55d 100644 --- a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/TypeManager.java +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/TypeManager.java @@ -14,6 +14,8 @@ import com.github.otymko.jos.runtime.context.type.enumeration.EnumerationContext; import com.github.otymko.jos.runtime.context.type.enumeration.MessageStatus; import com.github.otymko.jos.runtime.context.type.enumeration.SearchDirection; +import com.github.otymko.jos.runtime.context.type.env.PlatformType; +import com.github.otymko.jos.runtime.context.type.env.SpecialFolder; import com.github.otymko.jos.runtime.context.type.enumeration.SortDirection; import com.github.otymko.jos.runtime.machine.info.ContextInfo; @@ -42,6 +44,8 @@ private static List getSystemEnums() { contexts.add(AllowedSign.INFO); contexts.add(DateFractions.INFO); contexts.add(SearchDirection.INFO); + contexts.add(PlatformType.INFO); + contexts.add(SpecialFolder.INFO); contexts.add(SortDirection.INFO); return contexts; diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/PlatformType.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/PlatformType.java new file mode 100644 index 00000000..7a5747b7 --- /dev/null +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/PlatformType.java @@ -0,0 +1,84 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +package com.github.otymko.jos.runtime.context.type.env; + +import com.github.otymko.jos.core.annotation.EnumClass; +import com.github.otymko.jos.core.annotation.EnumValue; +import com.github.otymko.jos.runtime.context.EnumType; +import com.github.otymko.jos.runtime.context.type.enumeration.EnumerationContext; + +/** + * Содержит известные поддерживаемые типы платформ + */ +@EnumClass(name = "ТипПлатформы", alias = "PlatformType") +public enum PlatformType implements EnumType { + + /** + * Операционная система семейства linux, архитектура i386 + */ + @EnumValue(name = "Linux_x86", alias = "Linux_x86") + LINUX_X86, + + /** + * Операционная система семейства linux, архитектура amd64 + */ + @EnumValue(name = "Linux_x86_64", alias = "Linux_x86_64") + LINUX_X86_64, + + /** + * Операционная система Mac OS X, архитектура i386 + */ + @EnumValue(name = "MacOS_x86", alias = "MacOS_x86") + MACOS_X86, + + /** + * Операционная система семейства Mac OS X, архитектура amd64 + */ + @EnumValue(name = "MacOS_x86_64", alias = "MacOS_x86_64") + MACOS_X86_64, + + /** + * Операционная система семейства WinNT, архитектура i386 + */ + @EnumValue(name = "Windows_x86", alias = "Windows_x86") + WINDOWS_X86, + + /** + * Операционная система семейства WinNT, архитектура amd64 + */ + @EnumValue(name = "Windows_x86_64", alias = "Windows_x86_64") + WINDOWS_X86_64, + + /** + * Неизвестная операционная система + */ + @EnumValue(name = "Unknown", alias = "Unknown") + UNKNOWN; + + public static final EnumerationContext INFO = new EnumerationContext(PlatformType.class); + + /** + * Определяет тип платформы по строковому представлению операционной системы + * @param osName Строковое представление операционной системы + * @param is64 Признак 64-битной архитектуры + * @return Определенный тип платформы + */ + public static PlatformType parse(String osName, boolean is64) { + var prepared = osName.toUpperCase(); + if (prepared.contains("WINDOWS")) + return is64 ? WINDOWS_X86_64 : WINDOWS_X86; + if (prepared.contains("LINUX")) + return is64 ? LINUX_X86_64 : LINUX_X86; + if (prepared.contains("MAC OS")) + return is64 ? MACOS_X86_64 : MACOS_X86; + return PlatformType.UNKNOWN; + } + + @Override + public EnumerationContext getContextInfo() { + return INFO; + } +} diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/SpecialFolder.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/SpecialFolder.java new file mode 100644 index 00000000..2ca63605 --- /dev/null +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/SpecialFolder.java @@ -0,0 +1,23 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +package com.github.otymko.jos.runtime.context.type.env; + +import com.github.otymko.jos.core.annotation.EnumClass; +import com.github.otymko.jos.runtime.context.EnumType; +import com.github.otymko.jos.runtime.context.type.enumeration.EnumerationContext; + +/** + * Содержит известные поддерживаемые специальные типы каталогов + */ +@EnumClass(name = "СпециальнаяПапка", alias = "SpecialFolder") +public enum SpecialFolder implements EnumType { + ; + public static final EnumerationContext INFO = new EnumerationContext(SpecialFolder.class); + @Override + public EnumerationContext getContextInfo() { + return INFO; + } +} diff --git a/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/V8SystemInfo.java b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/V8SystemInfo.java new file mode 100644 index 00000000..ca062c7a --- /dev/null +++ b/engine/src/main/java/com/github/otymko/jos/runtime/context/type/env/V8SystemInfo.java @@ -0,0 +1,146 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +package com.github.otymko.jos.runtime.context.type.env; + +import com.github.otymko.jos.core.PropertyAccessMode; +import com.github.otymko.jos.core.annotation.ContextClass; +import com.github.otymko.jos.core.annotation.ContextConstructor; +import com.github.otymko.jos.core.annotation.ContextProperty; +import com.github.otymko.jos.exception.MachineException; +import com.github.otymko.jos.runtime.context.ContextValue; +import com.github.otymko.jos.runtime.machine.info.ContextInfo; +import lombok.NoArgsConstructor; + +import java.io.IOException; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + +/** + * Содержит описание ключевых параметров среды исполнения + */ +@NoArgsConstructor +@ContextClass(name = "СистемнаяИнформация", alias = "SystemInfo") +public class V8SystemInfo extends ContextValue { + public static final ContextInfo INFO = ContextInfo.createByClass(V8SystemInfo.class); + + /** + * Создает новый объект СистеимнаяИнформация + * + * @return СистемнаяИнформация + */ + @ContextConstructor + public static V8SystemInfo constructor() { + return new V8SystemInfo(); + } + + /** + * Возвращает версию движка среды исполнения + * + * @return Строка с версией движка + */ + @ContextProperty(name = "Версия", alias = "Version", accessMode = PropertyAccessMode.READ_ONLY) + public String getVersion() { + var manifestStream = Thread.currentThread() + .getContextClassLoader() + .getResourceAsStream("META-INF/MANIFEST.MF"); + var manifest = new Manifest(); + try { + manifest.read(manifestStream); + } catch (IOException e) { + return ""; + } + var versionFromFile = manifest.getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION); + return versionFromFile == null ? "" : versionFromFile; + } + + /** + * Возвразщает имя компьютера среды исполнения + * + * @return Имя компьютера + */ + @ContextProperty(name = "ИмяКомпьютера", alias = "MachineName") + public String getMachineName() { + throw MachineException.operationNotImplementedException(); + } + + /** + * Возвращает имя и версию операцинной системы среды исполнения + * + * @return Имя и версия операционной системы + */ + @ContextProperty(name = "ВерсияОС", alias = "OSVersion") + public String getOsVersion() { + return String.format("%s %s", + System.getProperty("os.name"), + System.getProperty("os.version")); + } + + /** + * Возвращает тип платформы среды исполнения + * @return Тип платформы + */ + @ContextProperty(name = "ТипПлатформы", alias = "PlatformType") + public PlatformType getPlatformType() { + var is64 = getIs64bitOperatingSystem(); + var osName = System.getProperty("os.name"); + return PlatformType.parse(osName, is64); + } + + /** + * Возвращает пользователя операционной системы, от имени которого исполняется скрипт + * @return Имя пользователя ОС + */ + @ContextProperty(name = "ПользовательОС", alias = "OSUser") + public String getOsUser() { + return System.getProperty("user.name"); + } + + /** + * Возвращает признак 64-битной операционной системы + * + * @return Признак 64-битной ОС + */ + @ContextProperty(name = "Это64БитнаяОперационнаяСистема", alias = "Is64bitOperatingSystem") + public boolean getIs64bitOperatingSystem() { + var arch = System.getProperty("os.arch"); + return arch.endsWith("64"); + } + + /** + * Возвращает количество процессоров текущей среды исполнения + * + * @return Количество процессоров + */ + @ContextProperty(name = "КоличествоПроцессоров", alias = "ProcessorCount") + public int getProcessorCount() { + return Runtime.getRuntime().availableProcessors(); + } + + /** + * Возвращает размер страницы оперативной памяти текущей среды исполнения + * + * @return Размер страницы + */ + @ContextProperty(name = "РазмерСтраницы", alias = "SystemPageSize") + public int getSystemPageSize() { + throw MachineException.operationNotImplementedException(); + } + + /** + * Возвращает время работы с момента загрузки системы + * + * @return Время в миллисекундах + */ + @ContextProperty(name = "ВремяРаботыСМоментаЗагрузки", alias = "TickCount") + public long getTickCount() { + return System.currentTimeMillis(); + } + + @Override + public ContextInfo getContextInfo() { + return INFO; + } +} diff --git a/engine/src/test/java/com/github/otymko/jos/common/ScriptTester.java b/engine/src/test/java/com/github/otymko/jos/common/ScriptTester.java index d81a2987..8137aa51 100644 --- a/engine/src/test/java/com/github/otymko/jos/common/ScriptTester.java +++ b/engine/src/test/java/com/github/otymko/jos/common/ScriptTester.java @@ -98,6 +98,22 @@ public static void checkNotEquals(IValue oneValue, IValue twoValue, IValue addit } // ПроверитьБольше + @ContextMethod(name = "ПроверитьБольше", alias = "CheckGreater") + public static void checkGreater(IValue oneValue, IValue twoValue, IValue additionalErrorMessage) { + var oneValueRaw = oneValue.getRawValue(); + var twoValueRaw = twoValue.getRawValue(); + + if (oneValueRaw.compareTo(twoValueRaw) <= 0) { + // TODO: локализация + var errorMessage = String.format("Ожидали что %s строго больше %s, но это не так.", + oneValueRaw.asString(), twoValueRaw.asString()); + var additionalString = ValueFactory.rawValueOrUndefined(additionalErrorMessage).asString(); + if (!additionalString.isBlank()) { + errorMessage = String.format("%s: %s", errorMessage, additionalString); + } + throw new MachineException(errorMessage); + } + } // ПроверитьБольшеИлиРавно diff --git a/engine/src/test/java/com/github/otymko/jos/runtime/context/type/V8SystemInfoTest.java b/engine/src/test/java/com/github/otymko/jos/runtime/context/type/V8SystemInfoTest.java new file mode 100644 index 00000000..f4fcd218 --- /dev/null +++ b/engine/src/test/java/com/github/otymko/jos/runtime/context/type/V8SystemInfoTest.java @@ -0,0 +1,13 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +package com.github.otymko.jos.runtime.context.type; + +import com.github.otymko.jos.runtime.context.BaseScriptTest; +import com.github.otymko.jos.runtime.context.TestScript; + +@TestScript(script = "src/test/resources/tests/SystemInfo.os") +public class V8SystemInfoTest extends BaseScriptTest { +} diff --git a/engine/src/test/resources/META-INF/MANIFEST.MF b/engine/src/test/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000..820270a5 --- /dev/null +++ b/engine/src/test/resources/META-INF/MANIFEST.MF @@ -0,0 +1 @@ +Implementation-Version: any.version.toTest diff --git a/engine/src/test/resources/tests/SystemInfo.os b/engine/src/test/resources/tests/SystemInfo.os new file mode 100644 index 00000000..1c8ef271 --- /dev/null +++ b/engine/src/test/resources/tests/SystemInfo.os @@ -0,0 +1,206 @@ +/////////////////////////////////////////////////////////////////////// +// +// Тест класса СистемнаяИнформация +// +// +/////////////////////////////////////////////////////////////////////// + +Перем юТест; + +//////////////////////////////////////////////////////////////////// +// Программный интерфейс + +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + юТест = ЮнитТестирование; + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПолучитьЗначенияОкружения"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьПеременнуюPATH"); + ВсеТесты.Добавить("ТестДолжен_УстановитьПеременную"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьВерсиюOneScript"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьПользователяОС"); + + // Значения зависят от машины запуска + ВсеТесты.Добавить("ТестДолжен_ПолучитьЭто64БитнаяОперационнаяСистема"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьТипПлатформы"); + + // Тесты отключены до лучших времен + + ВсеТесты.Добавить("ТестДолжен_ПолучитьКоличествоПроцессоров"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьРазмерСистемнойСтраницы"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьВремяРаботыСМоментаЗагрузки"); + + // ВсеТесты.Добавить("ТестДолжен_ПолучитьИменаЛогическихДисков"); + + // Пути к папкам + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_РепозиторийДокументов"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_ДанныеПриложений"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_ЛокальныйКаталогДанныхПриложений"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_РабочийСтол"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_КаталогРабочийСтол"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_МояМузыка"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_МоиРисунки"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_Шаблоны"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_МоиВидеозаписи"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_ОбщиеШаблоны"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_ПрофильПользователя"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьПолучитьПутьПапки_ОбщийКаталогДанныхПриложения"); + + Возврат ВсеТесты; +КонецФункции + +Процедура ТестДолжен_ПолучитьЗначенияОкружения() Экспорт + + Переменные = ПеременныеСреды(); + + юТест.ПроверитьЛожь(Переменные.Количество() = 0); + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПеременнуюPATH() Экспорт + + юТест.ПроверитьЛожь(ПустаяСтрока(ПолучитьПеременнуюСреды("PATH"))); + +КонецПроцедуры + +Процедура ТестДолжен_УстановитьПеременную() Экспорт + + СтароеЗначение = ПолучитьПеременнуюСреды("OS"); + НовоеЗначение = "NewTestValue"; + + УстановитьПеременнуюСреды("OS", НовоеЗначение); + + юТест.ПроверитьРавенство(НовоеЗначение, ПолучитьПеременнуюСреды("OS")); + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьВерсиюOneScript() Экспорт + + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьЛожь(ПустаяСтрока(Си.Версия)); + + ЧастиВерсии = СтрРазделить(Си.Версия, "."); + юТест.ПроверитьРавенство(ЧастиВерсии.Количество(), 3); // x.y.z + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПользователяОС() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьЛожь(ПустаяСтрока(Си.ПользовательОС)); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьЭто64БитнаяОперационнаяСистема() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьИстину(Си.Это64БитнаяОперационнаяСистема); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьТипПлатформы() Экспорт + СИ = Новый СистемнаяИнформация; + Если Найти(СИ.ВерсияОС, "Windows") > 0 Тогда + Если Си.Это64БитнаяОперационнаяСистема Тогда + юТест.ПроверитьРавенство(СИ.ТипПлатформы, ТипПлатформы.Windows_x86_64); + Иначе + юТест.ПроверитьРавенство(СИ.ТипПлатформы, ТипПлатформы.Windows_x86); + КонецЕсли; + ИначеЕсли Найти(СИ.ВерсияОС, "Mac OS X") > 0 Тогда + Если Си.Это64БитнаяОперационнаяСистема Тогда + юТест.ПроверитьРавенство(СИ.ТипПлатформы, ТипПлатформы.MacOS_x86_64); + Иначе + юТест.ПроверитьРавенство(СИ.ТипПлатформы, ТипПлатформы.MacOS_x86); + КонецЕсли; + Иначе + Если Си.Это64БитнаяОперационнаяСистема Тогда + юТест.ПроверитьРавенство(СИ.ТипПлатформы, ТипПлатформы.Linux_x86_64); + Иначе + юТест.ПроверитьРавенство(СИ.ТипПлатформы, ТипПлатформы.Linux_x86); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьКоличествоПроцессоров() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьБольше(Си.КоличествоПроцессоров,0); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьРазмерСистемнойСтраницы() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьБольше(Си.РазмерСистемнойСтраницы,0); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьВремяРаботыСМоментаЗагрузки() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьБольше(Си.ВремяРаботыСМоментаЗагрузки,0); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьИменаЛогическихДисков() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьБольше(Си.ИменаЛогическихДисков.Количество(),0); +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////// +// +// Проверка спец.папок +// +/////////////////////////////////////////////////////////////////////// + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_РепозиторийДокументов() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.МоиДокументы),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_ДанныеПриложений() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.ДанныеПриложений),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_ЛокальныйКаталогДанныхПриложений() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_РабочийСтол() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.РабочийСтол),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_КаталогРабочийСтол() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.КаталогРабочийСтол),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_МояМузыка() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.МояМузыка),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_МоиРисунки() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.МоиРисунки),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_Шаблоны() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.Шаблоны),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_МоиВидеозаписи() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.МоиВидеозаписи),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_ОбщиеШаблоны() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.ОбщиеШаблоны),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_ПрофильПользователя() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя),""); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПолучитьПутьПапки_ОбщийКаталогДанныхПриложения() Экспорт + Си = Новый СистемнаяИнформация(); + юТест.ПроверитьНеРавенство(СИ.ПолучитьПутьПапки(СпециальнаяПапка.ОбщийКаталогДанныхПриложения),""); +КонецПроцедуры \ No newline at end of file