From b0b5ca2faef810209493b97d93fb58dcd7d343da Mon Sep 17 00:00:00 2001 From: "s.tikhomirov" Date: Thu, 17 Jun 2021 17:29:47 +0300 Subject: [PATCH] Dependency updates --- allure.integration/build.gradle | 1 + allure.testng.bridge/build.gradle | 1 + build.gradle | 10 +- check/build.gradle | 2 +- core.api/build.gradle | 8 +- core.api/doc/rus/LOCALIZATION.MD | 833 +++++++++++++++++++++++++-- data.base.api/build.gradle | 6 +- neptune.swagger.codegen/build.gradle | 4 +- selenium/build.gradle | 2 +- 9 files changed, 814 insertions(+), 53 deletions(-) diff --git a/allure.integration/build.gradle b/allure.integration/build.gradle index 719b500976..7b8f651f60 100644 --- a/allure.integration/build.gradle +++ b/allure.integration/build.gradle @@ -2,6 +2,7 @@ dependencies { compile project(':core.api') compile (group: 'io.qameta.allure', name: 'allure-java-commons', version: allureVersion) { exclude group: 'org.aspectj', module: 'aspectjrt' + exclude group: 'org.aspectj', module: 'aspectjweaver' exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' exclude group: 'com.fasterxml.jackson.module', module: 'jackson-module-jaxb-annotations' } diff --git a/allure.testng.bridge/build.gradle b/allure.testng.bridge/build.gradle index 8117f1b917..4d4ea76ed5 100644 --- a/allure.testng.bridge/build.gradle +++ b/allure.testng.bridge/build.gradle @@ -3,6 +3,7 @@ dependencies { compile project(":allure.integration") compile (group: 'io.qameta.allure', name: 'allure-testng', version: allureVersion) { exclude group: 'org.aspectj', module: 'aspectjrt' + exclude group: 'org.aspectj', module: 'aspectjweaver' } } diff --git a/build.gradle b/build.gradle index 2d32b51adc..2b40fc3637 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ ext { - globalVersion = '0.17.14-ALPHA' + globalVersion = '0.18.0-ALPHA' } subprojects { @@ -28,7 +28,7 @@ subprojects { testNGVersion = '7.4.0' hamcrestVersion = '2.2' seleniumVersion = '3.141.59' - allureVersion = '2.13.9' + allureVersion = '2.14.0' jacksonVersion = '2.12.3' mavenDeployLogin = hasProperty('REPO_USER_NAME') ? REPO_USER_NAME : System.getenv('REPO_USER_NAME') mavenDeployPassword = hasProperty('REPO_USER_PASSWORD') ? REPO_USER_PASSWORD : System.getenv('REPO_USER_PASSWORD') @@ -44,9 +44,9 @@ subprojects { compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-jaxb-annotations', version: jacksonVersion compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: jacksonVersion compile group: 'commons-validator', name: 'commons-validator', version: '1.7' - compile group: 'commons-io', name: 'commons-io', version: '2.8.0' - compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' - compile group: 'io.github.classgraph', name: 'classgraph', version: '4.8.105' + compile group: 'commons-io', name: 'commons-io', version: '2.10.0' + compile group: 'com.google.code.gson', name: 'gson', version: '2.8.7' + compile group: 'io.github.classgraph', name: 'classgraph', version: '4.8.108' compile group: 'org.hamcrest', name: 'hamcrest', version: hamcrestVersion } diff --git a/check/build.gradle b/check/build.gradle index a7ca324ddf..91b8342f82 100644 --- a/check/build.gradle +++ b/check/build.gradle @@ -1,5 +1,5 @@ plugins { - id "io.freefair.aspectj.post-compile-weaving" version "5.3.0" + id "io.freefair.aspectj.post-compile-weaving" version "5.3.3.3" } dependencies { diff --git a/core.api/build.gradle b/core.api/build.gradle index 3714cbb064..70515213c5 100644 --- a/core.api/build.gradle +++ b/core.api/build.gradle @@ -1,5 +1,5 @@ plugins { - id "io.freefair.aspectj.post-compile-weaving" version "5.3.0" + id "io.freefair.aspectj.post-compile-weaving" version "5.3.3.3" } configurations { @@ -8,9 +8,9 @@ configurations { dependencies { compile group: 'org.objenesis', name: 'objenesis', version: '3.2' - compile group: 'net.bytebuddy', name: 'byte-buddy', version: '1.11.0' - compile group: 'org.aspectj', name: 'aspectjrt', version: '1.9.6' - agent group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.6' + compile group: 'net.bytebuddy', name: 'byte-buddy', version: '1.11.2' + compile group: 'org.aspectj', name: 'aspectjrt', version: '1.9.7.M3' + agent group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.7.M3' } task javadocJar(type: Jar) { diff --git a/core.api/doc/rus/LOCALIZATION.MD b/core.api/doc/rus/LOCALIZATION.MD index dfb00a1d1d..f1686f761f 100644 --- a/core.api/doc/rus/LOCALIZATION.MD +++ b/core.api/doc/rus/LOCALIZATION.MD @@ -1,51 +1,53 @@ -# Локализация отчетов +# Локализация -Фреймворк поддерживает локализацию отчетов на разные языки. +Локализация логов / отчетов на разные языки. +Neptune имеет дефолтный механизм, основанный на использовании [ResourceBundle](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ResourceBundle.html), +и предоставляет возможность реализовать альтернативный вариант локализации логов / отчетов. -## Оглавление - - [Базовый механизм локализации](#Базовый-механизм-локализации) - - [Как настроить использование базового механизма](#Как-настроить-использование-базового-механизма) - - [Механизм генерации resourceBundle](#Механизм-генерации-resourceBundle) - - [Пример для pom.xml](#Пример-для-pomxml) - - [Пример для build.gradle](#Пример-для-buildgradle) - - [Результат](#Результат) - - [Собственный механизм локализации](#Собственный-механизм-локализации) +**Язык отчетов и логов по умолчанию — английский.** -## Базовый механизм локализации - -[Настройка](./SETTINGS.MD#Локализация) +# Оглавление +- [Объекты для механизиа локализации](#Объекты-для-механизиа-локализации) +- [Базовый механизм локализации](#Базовый-механизм-локализации) + - [Локали, которые на данный момент поддерживаются Neptune](#Локали-которые-на-данный-момент-поддерживаются-neptune) + - [Создание бандла для локали, которой пока нет среди поддерживаемых](#Создание-бандла-для-локали-которой-нет-среди-перечисленных) + - [Создание бандла для локали, которая есть среди поддерживаемых](#Создание-бандла-для-локали-которая-есть-среди-перечисленных) + - [Создание бандла для нового модуля](#Создание-бандла-для-нового-модуля) +- [Собственный механизм локализации](#Собственный-механизм-локализации) -Neptune поддерживает по дефолту механизм, основанный на -использовании [AspectJ](https://www.eclipse.org/aspectj/doc/released/index.html) -и [ResourceBundle](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ResourceBundle.html). +## Объекты для механизиа локализации -### Как настроить использование базового механизма +- [Шаги](./STEPS.MD) +- [Аттачи](./EVENTS.MD) +- [Матчеры](./HAMCREST.MD) -- ##### сгенерировать и настроить resourceBundle +[к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) -- ##### добавить в переменные среды или в `neptune.properties` или в `neptune.global.properties` +## Базовый механизм локализации -```properties -DEFAULT_LOCALIZATION_ENGINE=ru.tinkoff.qa.neptune.core.api.localization.LocalizationByResourceBundle -``` +[Настройка](./SETTINGS.MD#Локализация) -- ##### добавить в переменные среды или в `neptune.properties` или в `neptune.global.properties` +Для того чтобы активировать базовый механизм локализации, достаточно добавить в переменные среды или в `neptune.properties` +или в `neptune.global.properties` ```properties +DEFAULT_LOCALIZATION_ENGINE=ru.tinkoff.qa.neptune.core.api.localization.LocalizationByResourceBundle DEFAULT_LOCALE=ru_RU ``` [к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) -### Механизм генерации resourceBundle +### Локали, которые на данный момент поддерживаются Neptune + +- `ru_RU` - русский -Имеется возможность автогенерации resourceBundle для перевода. Для этого необходимо вызвать -mainClass `ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator` с двумя аргументами: +[к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) + +### Создание бандла для локали, которой нет среди [перечисленных](#Локали-которые-на-данный-момент-поддерживаются-Neptune) -- arg0 - строка в формате language_country -- arg1 - путь к каталогу, в котором должен быть сохранен файл +Предположим, нам нужен немецкий язык. Тогда -###### Пример для pom.xml +- Maven ```xml @@ -65,7 +67,7 @@ mainClass `ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator` ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator - ru_RU + de_DE ${basedir}/src/test/resources @@ -78,27 +80,32 @@ mainClass `ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator` ``` -[к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) -###### Пример для build.gradle +- Gradle ```groovy task generateBundle(type: JavaExec) { classpath sourceSets.main.runtimeClasspath main = "ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator" - args "ru_RU", //нужная локаль + args "de_DE", //нужная локаль "$projectDir/src/test/resources" //или $projectDir/src/main/resources //или любая другая директория } ``` -[к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) +При настройках, указанных выше, в зависимости от того, какие модули Neptune используются в качестве зависимостей, будут созданные +следующие файлы: + +- `neptune_Localization_core_de_DE.properties` - для [core](./README.MD) +- `neptune_Localization_check_de_DE.properties` - для [check](./../../../check/doc/rus/README.MD) +- `neptune_Localization_http_de_DE.properties` - для [http](./../../../http.api/doc/rus/README.MD) +- `neptune_Localization_selenium_de_DE.properties` - для [http](./../../../selenium/doc/rus/README.MD) -#### Результат +Ниже пример одного из файлов ```properties -#Values for translation of steps, their parameters and attachments are defined here. Format key = value +#Values for translation of steps, their parameters, matchers and their descriptions, and attachments are defined here. Format key = value #============================================ STEPS ============================================ @@ -118,6 +125,8 @@ core.api.steps.SequentialActionSupplier.imperative = Perform: ######################## core.api.steps.Absence # #_________________________________Parameters_____________________________________ +#Original text = Wait for: +core.api.steps.Absence.imperative = Wait for: #Original text = Time of the waiting for absence core.api.steps.Absence.timeOut = Time of the waiting for absence #Original text = Is absent @@ -130,6 +139,8 @@ core.api.steps.Absence.absence(core.api.steps.SequentialGetStepSupplier: {toContain} +core.api.hamcrest.text.StringContainsWithSeparator = string has substring(s) separated by <'{separator}'>: {toContain} + +#============================================ MISMATCH DESCRIPTIONS ============================================ + +######################## core.api.hamcrest.NullValueMismatch # +#Original text = Null value. All checks were stopped +core.api.hamcrest.NullValueMismatch = Null value. All checks were stopped + +######################## core.api.hamcrest.ObjectIsNotPresentMismatch # +#Original text = Not present {objectName}: {characteristics} +core.api.hamcrest.ObjectIsNotPresentMismatch = Not present {objectName}: {characteristics} + +######################## core.api.hamcrest.PropertyValueMismatch # +#Original text = {property} {mismatch} +core.api.hamcrest.PropertyValueMismatch = {property} {mismatch} + +######################## core.api.hamcrest.SomethingWentWrongDescriber # +#Original text = Something went wrong. The exception was thrown: {exception} +core.api.hamcrest.SomethingWentWrongDescriber = Something went wrong. The exception was thrown: {exception} + +######################## core.api.hamcrest.TypeMismatch # +#Original text = Type mismatch. Object of class that equals or extends following types was expected: +#{expected} +#Class of passed value is `{actual}`. All checks were stopped +core.api.hamcrest.TypeMismatch = Type mismatch. Object of class that equals or extends following types was expected: \r\n\ +{expected}\r\n\ +Class of passed value is `{actual}`. All checks were stopped + +######################## core.api.hamcrest.common.DoesNotMatchAnyCriteria # +#Original text = <{value}> doesn't match any of listed criteria +core.api.hamcrest.common.DoesNotMatchAnyCriteria = <{value}> doesn't match any of listed criteria + +######################## core.api.hamcrest.common.only.one.MatchesMoreThanOneCriteria # +#Original text = Value: {value}. Only one of listed criteria was expected to be matched. Checks of following criteria were positive: +# {matchers} +core.api.hamcrest.common.only.one.MatchesMoreThanOneCriteria = Value: {value}. Only one of listed criteria was expected to be matched. Checks of following criteria were positive:\r\n\ +{matchers} + +######################## core.api.hamcrest.iterables.descriptions.DifferentSizeMismatch # +#Original text = {actual} items instead of {expected} +core.api.hamcrest.iterables.descriptions.DifferentSizeMismatch = {actual} items instead of {expected} + +######################## core.api.hamcrest.iterables.descriptions.EmptyMismatch # +#Original text = +core.api.hamcrest.iterables.descriptions.EmptyMismatch = + +######################## core.api.hamcrest.iterables.descriptions.OutOfItemsOrderMismatch # +#Original text = The item ['{currentCriteria}'] doesn't go after : [{lastSuccessful}; index: {lastSuccessfulIndex}; criteria: '{lastSuccessfulCriteria}'] +core.api.hamcrest.iterables.descriptions.OutOfItemsOrderMismatch = The item ['{currentCriteria}'] doesn't go after : [{lastSuccessful}; index: {lastSuccessfulIndex}; criteria: '{lastSuccessfulCriteria}'] + +######################## core.api.hamcrest.pojo.NoSuchMethodMismatch # +#Original text = Class {clazz} has no non-static and public method '{getter}' with empty signature and which returns some value +core.api.hamcrest.pojo.NoSuchMethodMismatch = Class {clazz} has no non-static and public method '{getter}' with empty signature and which returns some value + +#============================================ MATCHED OBJECTS ============================================ + +######################## core.api.hamcrest.iterables.descriptions.Count # +#Original text = Count +core.api.hamcrest.iterables.descriptions.Count = Count + +######################## core.api.hamcrest.iterables.descriptions.Item # +#Original text = item{indexStr} +core.api.hamcrest.iterables.descriptions.Item = item{indexStr} + +######################## core.api.hamcrest.iterables.descriptions.Key # +#Original text = Key +core.api.hamcrest.iterables.descriptions.Key = Key + +######################## core.api.hamcrest.iterables.descriptions.Value # +#Original text = Value +core.api.hamcrest.iterables.descriptions.Value = Value + +######################## core.api.hamcrest.pojo.ReturnedObject # +#Original text = value returned from '{getter}' +core.api.hamcrest.pojo.ReturnedObject = value returned from '{getter}' + +######################## core.api.hamcrest.resorce.locator.QueryParameter # +#Original text = URI/URL query parameter{param} +core.api.hamcrest.resorce.locator.QueryParameter = URI/URL query parameter{param} + +#============================================ OTHER ============================================ + +######################## core.api.event.firing.Captor # +#Original text = Attachment +core.api.event.firing.Captor = Attachment + +######################## core.api.logical.lexemes.Not # +#Original text = not +core.api.logical.lexemes.Not = not + +######################## core.api.logical.lexemes.OnlyOne # +#Original text = xor +core.api.logical.lexemes.OnlyOne = xor + +######################## core.api.logical.lexemes.Or # +#Original text = or +core.api.logical.lexemes.Or = or +``` + +Все что теперь нужно — это заменить английский текст в значении каждого из свойств на немецкий, кроме (**ВНИМАНИЕ!!!!!**) +выражений внутри `{}`, их нужно оставить как есть + +```properties +######################## core.api.logical.lexemes.Not # +#Original text = not +core.api.logical.lexemes.Not = nicht + +######################## core.api.hamcrest.pojo.ReturnedObject # +#Original text = value returned from '{getter}' +core.api.hamcrest.pojo.ReturnedObject = von '{getter}' zurückgegebener wert' +``` + +Если нужны не все из перечисленных выше, а например, только [для интеграции с http клиентом Java v11 и выше](./../../../http.api/doc/rus/README.MD), +тогда + +- Maven + +```xml + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + generate properties + compile + + java + + + ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator + + de_DE + ${basedir}/src/test/resources + + false + + http + + + + + + + +``` + +- Gradle + +```groovy +task generateBundle(type: JavaExec) { + classpath sourceSets.main.runtimeClasspath + main = "ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator" + args "de_DE", + "$projectDir/src/test/resources", + "false", //кастомный бандл (true) или дефолтный (false). В текущей ситуации false - + // рекомендуемое значение + "http" //условное обозначение модуля Neptune, для которого предусмотрена локализация. + // Список можно продолжить, через запятую указывая "check", "core", "selenium" и т.д. +} +``` +[к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) + +### Создание бандла для локали, которая есть среди [перечисленных](#Локали-которые-на-данный-момент-поддерживаются-Neptune) + +Предположим, имеющийся вариант для русского языка нас не устраивает, и нужно создать языковой бандл, работающий поверх +имеющегося. Тогда + +- Maven + +```xml + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + generate properties + compile + + java + + + ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator + + ru_RU + ${basedir}/src/test/resources + + true + + + + + + + +``` + +- Gradle + +```groovy +task generateBundle(type: JavaExec) { + classpath sourceSets.main.runtimeClasspath + main = "ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator" + args "ru_RU", + "$projectDir/src/test/resources", + "true" //кастомный бандл (true) или дефолтный (false). + // В текущей ситуации true - рекомендуемое значение +} +``` + +При настройках, указанных выше, в зависимости от того, какие модули Neptune используются в качестве зависимостей, будут созданные +следующие файлы: + +- `neptune_Localization_core_CUSTOM_ru_RU.properties` - для [core](./README.MD) +- `neptune_Localization_check_CUSTOM_ru_RU.properties` - для [check](./../../../check/doc/rus/README.MD) +- `neptune_Localization_http_CUSTOM_ru_RU.properties` - для [http](./../../../http.api/doc/rus/README.MD) +- `neptune_Localization_selenium_CUSTOM_ru_RU.properties` - для [http](./../../../selenium/doc/rus/README.MD) + +Ниже пример одного из файлов (с русской локализацией) + +```properties +#Values for translation of steps, their parameters, matchers and their descriptions, and attachments are defined here. Format key = value + +#============================================ STEPS ============================================ + +######################## core.api.steps.SequentialGetStepSupplier # +#_________________________________Parameters_____________________________________ +#Original text = Get: +core.api.steps.SequentialGetStepSupplier.imperative = Получить: +#Original text = Result +core.api.steps.SequentialGetStepSupplier.resultDescription = Результат +#Original text = Not present: +core.api.steps.SequentialGetStepSupplier.errorMessageStartingOnEmptyResult = Не присутствует / не найдено: + +######################## core.api.steps.SequentialActionSupplier # +#_________________________________Parameters_____________________________________ +#Original text = Perform: +core.api.steps.SequentialActionSupplier.imperative = Выполнить: + +######################## core.api.steps.Absence # +#_________________________________Parameters_____________________________________ +#Original text = Wait for: +core.api.steps.Absence.imperative = Ожидать: +#Original text = Time of the waiting for absence +core.api.steps.Absence.timeOut = Время ожидания отсутствия/исчезновения +#Original text = Is absent +core.api.steps.Absence.resultDescription = Отсутствует: +#Original text = Still present: +core.api.steps.Absence.errorMessageStartingOnEmptyResult = Все еще присутствует: +#__________________________________ Methods _______________________________________ +#Original text = Absence of {toBeAbsent} +core.api.steps.Absence.absence(core.api.steps.SequentialGetStepSupplier) = Отсутствие. {toBeAbsent} + +######################## core.api.steps.Presence # +#_________________________________Parameters_____________________________________ +#Original text = Wait for: +core.api.steps.Presence.imperative = Ожидать: +#Original text = Is present +core.api.steps.Presence.resultDescription = Присутствует: +#__________________________________ Methods _______________________________________ +#Original text = Presence of {toBePresent} +core.api.steps.Presence.presence(core.api.steps.SequentialGetStepSupplier) = Наличие. {toBePresent} + +#============================================ ATTACHMENTS ============================================ + +######################## core.api.event.firing.collections.ArrayCaptor # +#Original text = Resulted array +core.api.event.firing.collections.ArrayCaptor = Полученный массив + +######################## core.api.event.firing.collections.CollectionCaptor # +#Original text = Resulted collection +core.api.event.firing.collections.CollectionCaptor = Полученная коллекция + +######################## core.api.event.firing.collections.MapCaptor # +#Original text = Resulted map +core.api.event.firing.collections.MapCaptor = Полученный Map + +#============================================ MATCHERS ============================================ + +######################## core.api.hamcrest.common.AnyThingMatcher # +#Original text = ANYTHING +core.api.hamcrest.common.AnyThingMatcher = ЛЮБОЕ ЗНАЧЕНИЕ + +######################## core.api.hamcrest.common.all.AllCriteriaMatcher # +#Original text = {allMatchers} +core.api.hamcrest.common.all.AllCriteriaMatcher = {allMatchers} + +######################## core.api.hamcrest.common.any.AnyMatcher # +#Original text = {orExpression} +core.api.hamcrest.common.any.AnyMatcher = {orExpression} + +######################## core.api.hamcrest.common.not.NotMatcher # +#Original text = {notExpression} +core.api.hamcrest.common.not.NotMatcher = {notExpression} + +######################## core.api.hamcrest.common.only.one.OnlyOneMatcher # +#Original text = {onlyOneExpression} +core.api.hamcrest.common.only.one.OnlyOneMatcher = {onlyOneExpression} + +######################## core.api.hamcrest.iterables.MapEntryMatcher # +#Original text = Key: {key} Value: {value} +core.api.hamcrest.iterables.MapEntryMatcher = Ключ: {key} значение: {value} + +######################## core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher # +#Original text = in any order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher = в любом порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher$ArrayConsistsOfMatcherInOrder # +#Original text = in following order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher$ArrayConsistsOfMatcherInOrder = в следующем порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher$IterableConsistsOfMatcherInOrder # +#Original text = in following order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher$IterableConsistsOfMatcherInOrder = в следующем порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher$MapConsistsOfMatcherInOrder # +#Original text = in following order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsConsistsOfMatcher$MapConsistsOfMatcherInOrder = в следующем порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsEachItemMatcher # +#Original text = each item: {matchers} +core.api.hamcrest.iterables.SetOfObjectsEachItemMatcher = каждый элемент: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsEachItemMatcher$MapEachItemMatcher # +#Original text = each entry: {matchers} +core.api.hamcrest.iterables.SetOfObjectsEachItemMatcher$MapEachItemMatcher = каждая запись: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher # +#Original text = includes in any order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher = включает в любом порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher$ArrayIncludesMatcherInOrder # +#Original text = includes in following order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher$ArrayIncludesMatcherInOrder = включает в следующем порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher$IterableIncludesMatcherInOrder # +#Original text = includes in following order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher$IterableIncludesMatcherInOrder = включает в следующем порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher$MapIncludesMatcherInOrder # +#Original text = includes in following order: {matchers} +core.api.hamcrest.iterables.SetOfObjectsIncludesMatcher$MapIncludesMatcherInOrder = включает в следующем порядке: {matchers} + +######################## core.api.hamcrest.iterables.SetOfObjectsItemsMatcher # +#Original text = has item(s): {matchers}. Expected count: {count} +core.api.hamcrest.iterables.SetOfObjectsItemsMatcher = есть элемент(ы): {matchers}. Ожидаемое количество: {count} + +######################## core.api.hamcrest.iterables.SetOfObjectsItemsMatcher$MapHasItemsMatcher # +#Original text = has entry(es): {matchers}. Expected count: {count} +core.api.hamcrest.iterables.SetOfObjectsItemsMatcher$MapHasItemsMatcher = есть запись(записи): {matchers}. Ожидаемое количество: {count} + +######################## core.api.hamcrest.pojo.PojoGetterReturnsMatcher # +#Original text = Public getter '{getter}' is expected to return a value: {criteria} +core.api.hamcrest.pojo.PojoGetterReturnsMatcher = Публичный метод '{getter}' должен вернуть значение: {criteria} + +######################## core.api.hamcrest.resorce.locator.HasHostMatcher # +#Original text = Host {matcher} +core.api.hamcrest.resorce.locator.HasHostMatcher = хост {matcher} + +######################## core.api.hamcrest.resorce.locator.HasPathMatcher # +#Original text = Path {matcher} +core.api.hamcrest.resorce.locator.HasPathMatcher = Path {matcher} + +######################## core.api.hamcrest.resorce.locator.HasPortMatcher # +#Original text = Port {matcher} +core.api.hamcrest.resorce.locator.HasPortMatcher = Порт {matcher} + +######################## core.api.hamcrest.resorce.locator.HasProtocolMatcher # +#Original text = Protocol {matcher} +core.api.hamcrest.resorce.locator.HasProtocolMatcher = Протокол {matcher} + +######################## core.api.hamcrest.resorce.locator.HasQueryParameters # +#Original text = has query parameter {key} {value} +core.api.hamcrest.resorce.locator.HasQueryParameters = query-параметр {key} {value} + +######################## core.api.hamcrest.resorce.locator.HasQueryStringMatcher # +#Original text = Query {matcher} +core.api.hamcrest.resorce.locator.HasQueryStringMatcher = Query {matcher} + +######################## core.api.hamcrest.resorce.locator.HasReferenceMatcher # +#Original text = Url reference {matcher} +core.api.hamcrest.resorce.locator.HasReferenceMatcher = Url reference {matcher} + +######################## core.api.hamcrest.resorce.locator.HasSchemeMatcher # +#Original text = Scheme {matcher} +core.api.hamcrest.resorce.locator.HasSchemeMatcher = Scheme {matcher} + +######################## core.api.hamcrest.resorce.locator.HasUserInfoMatcher # +#Original text = User info {matcher} +core.api.hamcrest.resorce.locator.HasUserInfoMatcher = User info {matcher} + +######################## core.api.hamcrest.text.StringContainsWithSeparator # +#Original text = string has substring(s) separated by <'{separator}'>: {toContain} +core.api.hamcrest.text.StringContainsWithSeparator = строка с разделителем <'{separator}'> содержит под-строки: {toContain} + +#============================================ MISMATCH DESCRIPTIONS ============================================ + +######################## core.api.hamcrest.NullValueMismatch # +#Original text = Null value. All checks were stopped +core.api.hamcrest.NullValueMismatch = Null. Проверка завершена + +######################## core.api.hamcrest.ObjectIsNotPresentMismatch # +#Original text = Not present {objectName}: {characteristics} +core.api.hamcrest.ObjectIsNotPresentMismatch = Объект не найден {objectName}: {characteristics} + +######################## core.api.hamcrest.PropertyValueMismatch # +#Original text = {property} {mismatch} +core.api.hamcrest.PropertyValueMismatch = {property} {mismatch} + +######################## core.api.hamcrest.SomethingWentWrongDescriber # +#Original text = Something went wrong. The exception was thrown: {exception} +core.api.hamcrest.SomethingWentWrongDescriber = Что-то пошло не так. Выброшенное исключение: {exception} + +######################## core.api.hamcrest.TypeMismatch # +#Original text = Type mismatch. Object of class that equals or extends following types was expected: +#{expected} +#Class of passed value is `{actual}`. All checks were stopped +core.api.hamcrest.TypeMismatch = Несоответствие типов. Ожидался объект одного из следующих классов: \r\n\ +{expected}\r\n\ +Класс объекта: `{actual}`. Проверка завершена + +######################## core.api.hamcrest.common.DoesNotMatchAnyCriteria # +#Original text = <{value}> doesn't match any of listed criteria +core.api.hamcrest.common.DoesNotMatchAnyCriteria = <{value}> не соответствует ни одному из указанных параметров + +######################## core.api.hamcrest.common.only.one.MatchesMoreThanOneCriteria # +#Original text = Value: {value}. Only one of listed criteria was expected to be matched. Checks of following criteria were positive: +# {matchers} +core.api.hamcrest.common.only.one.MatchesMoreThanOneCriteria = Значение: {value}. Ожидалось соответствие только одному из перечисленных критериев. Соответствия:\r\n\ +{matchers} + +######################## core.api.hamcrest.iterables.descriptions.DifferentSizeMismatch # +#Original text = {actual} items instead of {expected} +core.api.hamcrest.iterables.descriptions.DifferentSizeMismatch = {actual} элементов вместо {expected} + +######################## core.api.hamcrest.iterables.descriptions.EmptyMismatch # +#Original text = +core.api.hamcrest.iterables.descriptions.EmptyMismatch = <ПУСТО> + +######################## core.api.hamcrest.iterables.descriptions.OutOfItemsOrderMismatch # +#Original text = The item ['{currentCriteria}'] doesn't go after : [{lastSuccessful}; index: {lastSuccessfulIndex}; criteria: '{lastSuccessfulCriteria}'] +core.api.hamcrest.iterables.descriptions.OutOfItemsOrderMismatch = Элемент ['{currentCriteria}'] не следует за : [{lastSuccessful}; индекс: {lastSuccessfulIndex}; критерий: '{lastSuccessfulCriteria}'] + +######################## core.api.hamcrest.pojo.NoSuchMethodMismatch # +#Original text = Class {clazz} has no non-static and public method '{getter}' with empty signature and which returns some value +core.api.hamcrest.pojo.NoSuchMethodMismatch = Класс {clazz} не имеет нестатический и публичный метод '{getter}' с пустой сигнатурой и возвращающий значение + +#============================================ MATCHED OBJECTS ============================================ + +######################## core.api.hamcrest.iterables.descriptions.Count # +#Original text = Count +core.api.hamcrest.iterables.descriptions.Count = Количество + +######################## core.api.hamcrest.iterables.descriptions.Item # +#Original text = item{indexStr} +core.api.hamcrest.iterables.descriptions.Item = элемент{indexStr} + +######################## core.api.hamcrest.iterables.descriptions.Key # +#Original text = Key +core.api.hamcrest.iterables.descriptions.Key = Ключ + +######################## core.api.hamcrest.iterables.descriptions.Value # +#Original text = Value +core.api.hamcrest.iterables.descriptions.Value = Значение + +######################## core.api.hamcrest.pojo.ReturnedObject # +#Original text = value returned from '{getter}' +core.api.hamcrest.pojo.ReturnedObject = значение которое вернул '{getter}' + +######################## core.api.hamcrest.resorce.locator.QueryParameter # +#Original text = URI/URL query parameter{param} +core.api.hamcrest.resorce.locator.QueryParameter = query-параметр URI/URL{param} + +#============================================ OTHER ============================================ + +######################## core.api.logical.lexemes.Not # +#Original text = not +core.api.logical.lexemes.Not = НЕ + +######################## core.api.logical.lexemes.OnlyOne # +#Original text = xor +core.api.logical.lexemes.OnlyOne = xor + +######################## core.api.logical.lexemes.Or # +#Original text = or +core.api.logical.lexemes.Or = или +``` + +Все что теперь нужно — это исправить текст в значении каждого из свойств, кроме (**ВНИМАНИЕ!!!!!**) выражений внутри `{}`, +их нужно оставить как есть. + +Если нужны не все из перечисленных выше, а например, только [для интеграции с http клиентом Java v11 и выше](./../../../http.api/doc/rus/README.MD), +тогда + +- Maven + +```xml + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + generate properties + compile + + java + + + ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator + + ru_RU + ${basedir}/src/test/resources + true + + http + + + + + + + +``` + +- Gradle + +```groovy +task generateBundle(type: JavaExec) { + classpath sourceSets.main.runtimeClasspath + main = "ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator" + args "ru_RU", + "$projectDir/src/test/resources", + "true", + "http" //условное обозначение модуля Neptune, для которого предусмотрена локализация. + // Список можно продолжить, через запятую указывая "check", "core", "selenium" и т.д. +} +``` + +[к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) + +### Создание бандла для нового модуля + +Допустим, был создан новый модуль для [объектов](#Объекты-для-механизиа-локализации) которого может понадобиться локализация +на разные языки. Тогда нужно просто добавить класс + +```java +package org.mypack; + +import ru.tinkoff.qa.neptune.core.api.localization.LocalizationBundlePartition; + +public class MyLocalizationPartition extends LocalizationBundlePartition // <-необходимо унаследовать данный класс +{ + + public MyLocalizationPartition() { //необходимо, чтобы конструктор + // был доступен и не имел параметров + super("my.module" //название модуля для механизма локализации + , "org.mypack"); //имя корневого пакета, + // к которому относятся вложенные объекты + // для локализации + } +} +``` + +и теперь + +- Maven + +```xml + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + generate properties + compile + + java + + + ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator + + ru_RU + ${basedir}/src/test/resources + + + false + + my.module + + + + + + + +``` + +- Gradle + +```groovy +task generateBundle(type: JavaExec) { + classpath sourceSets.main.runtimeClasspath + main = "ru.tinkoff.qa.neptune.core.api.localization.ResourceBundleGenerator" + args "ru_RU", //ru_RU + "$projectDir/src/test/resources", //или ${basedir}/src/main/resources + //или любая другая директория + "false", //или true, по ситуации + "my.module" //условное обозначение модуля Neptune, для которого предусмотрена локализация. + // Список можно продолжить, через запятую указывая "check", "core", "selenium" и т.д. +} ``` [к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) @@ -225,11 +983,12 @@ public interface StepLocalization { } ``` -* добавить в переменные среды или в `neptune.properties` или в `neptune.global.properties` (или поменять значение, +* добавить в переменные среды или в `neptune.properties` или в `neptune.global.properties` (или поменять значение, если уже добавлено) ```properties DEFAULT_LOCALIZATION_ENGINE=org.my.project.MyLocalizationEngine +DEFAULT_LOCALE=ru_RU ``` [к оглавлению документа](#Оглавление) [к списку документов](README.MD#Оглавление) diff --git a/data.base.api/build.gradle b/data.base.api/build.gradle index 7919df10d3..6dffeb8751 100644 --- a/data.base.api/build.gradle +++ b/data.base.api/build.gradle @@ -7,10 +7,10 @@ dependencies { inpath(project(":core.api")) { transitive = false } - compile group: 'org.datanucleus', name: 'datanucleus-rdbms', version: '5.2.6' + compile group: 'org.datanucleus', name: 'datanucleus-rdbms', version: '5.2.8' compile group: 'org.datanucleus', name: 'datanucleus-jdo-query', version: '5.0.9' - compile group: 'org.datanucleus', name: 'datanucleus-api-jdo', version: '5.2.5' - compile group: 'org.datanucleus', name: 'datanucleus-core', version: '5.2.6' + compile group: 'org.datanucleus', name: 'datanucleus-api-jdo', version: '5.2.7' + compile group: 'org.datanucleus', name: 'datanucleus-core', version: '5.2.8' compile group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13' compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2' compile group: 'org.apache.ant', name: 'ant', version: '1.10.9' diff --git a/neptune.swagger.codegen/build.gradle b/neptune.swagger.codegen/build.gradle index dadca5f56b..8fb405b5eb 100644 --- a/neptune.swagger.codegen/build.gradle +++ b/neptune.swagger.codegen/build.gradle @@ -1,6 +1,6 @@ dependencies { - compile group: 'io.swagger.codegen.v3', name: 'swagger-codegen', version: '3.0.25' - compile group: 'io.swagger.codegen.v3', name: 'swagger-codegen-generators', version: '1.0.25' + compile group: 'io.swagger.codegen.v3', name: 'swagger-codegen', version: '3.0.26' + compile group: 'io.swagger.codegen.v3', name: 'swagger-codegen-generators', version: '1.0.26' } task javadocJar(type: Jar) { diff --git a/selenium/build.gradle b/selenium/build.gradle index cb98b746ce..92c2cc107c 100644 --- a/selenium/build.gradle +++ b/selenium/build.gradle @@ -8,7 +8,7 @@ dependencies { transitive = false } compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: seleniumVersion - compile (group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '4.4.1') { + compile (group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '4.4.3') { exclude group: 'org.seleniumhq.selenium' exclude group: 'org.apache.commons', module: 'commons-lang3' exclude group: 'org.jsoup', module: 'jsoup'