mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-19 20:31:55 +02:00
Init
This commit is contained in:
commit
703f5dc7f1
39
.gitattributes
vendored
Normal file
39
.gitattributes
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
# модули
|
||||
* text=auto
|
||||
*.bsl text eol=crlf
|
||||
*.cai text eol=crlf
|
||||
*.cmi text eol=crlf
|
||||
*.dcs text eol=crlf
|
||||
*.dcss text eol=crlf
|
||||
*.dcssca text eol=crlf
|
||||
*.form text eol=crlf
|
||||
*.hpwa text eol=crlf
|
||||
*.mdo text eol=crlf
|
||||
*.mxlx text eol=crlf
|
||||
*.pnrs text eol=crlf
|
||||
*.rights text eol=crlf
|
||||
*.schedule text eol=crlf
|
||||
|
||||
# картинки
|
||||
|
||||
*.bmp binary diff=exif
|
||||
*.gif binary diff=exif
|
||||
*.ico binary
|
||||
*.jpeg binary diff=exif
|
||||
*.jpg binary diff=exif
|
||||
*.png binary diff=exif
|
||||
*.svg text
|
||||
|
||||
# картинки
|
||||
|
||||
*.bin binary
|
||||
*.1CD binary
|
||||
|
||||
# Binary file extensions that should not be modified.
|
||||
*.bin binary
|
||||
*.axdt binary
|
||||
*.addin binary
|
||||
|
||||
# Исключения
|
||||
|
||||
src/Configuration/ParentConfigurations.bin text
|
35
.gitignore
vendored
Normal file
35
.gitignore
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
*.cfu
|
||||
src/.project
|
||||
*.cfl
|
||||
*.lgd
|
||||
*.orig
|
||||
|
||||
/src/Configuration/ConfigDumpInfo.xml
|
||||
|
||||
/allure-reports
|
||||
/autotest-bia
|
||||
/ci4onec
|
||||
/spec/build/ib
|
||||
/tys
|
||||
|
||||
autotest.json
|
||||
VBParams.json
|
||||
|
||||
/allure-report/*
|
||||
/buildstatus.log
|
||||
|
||||
|
||||
/*_pid*.log
|
||||
|
||||
*.*.bak
|
||||
|
||||
# IDE
|
||||
*/.settings/com._1c.g5.v8.dt.platform.services.core.prefs
|
||||
*/.settings/EnvLaunchModeIndex.prefs
|
||||
|
||||
# Binary
|
||||
*/bin/*
|
||||
|
||||
#wsdl
|
||||
/fixtures/wsdl
|
||||
|
17
COPYRIGHT
Normal file
17
COPYRIGHT
Normal file
@ -0,0 +1,17 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
3
Jenkinsfile
vendored
Normal file
3
Jenkinsfile
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@Library('onec-ci-cd@feature/refactoring')_
|
||||
|
||||
pipelineStart();
|
201
LICENSE
Normal file
201
LICENSE
Normal file
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
237
README.md
Normal file
237
README.md
Normal file
@ -0,0 +1,237 @@
|
||||
# YAXUnit. Расширение для запуска тестов
|
||||
|
||||
* [Назначение](#назначение)
|
||||
* [Возможности](#возможности)
|
||||
* [Пример тестового модуля](#пример-тестового-модуля)
|
||||
* [Запуск](#запуск)
|
||||
* [Конфигурация запуска](#конфигурация-запуска)
|
||||
* [Строка запуска предприятия](#строка-запуска-предприятия)
|
||||
* [Запуск из EDT](#запуск-из-edt)
|
||||
* [Благодарности](#благодарности)
|
||||
* [Лицензия](#лицензия)
|
||||
|
||||
## Назначение
|
||||
|
||||
Самостоятельное расширение для написания и выполнения модульного тестирования.
|
||||
|
||||
### Возможности
|
||||
|
||||
* YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
|
||||
* Разрабатывался с оглядкой на JUnit5, пожалуй лучший фреймворк тестирования
|
||||
* Предоставляет движок выполнения тестов
|
||||
* Предоставляет утверждения для проверки ожидаемых результатов
|
||||
* Тесты могут быть организованы в наборы и выполнятся в разных контекстах
|
||||
* Позволяет быстрее и проще не только писать, но и читать тесты
|
||||
* Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
|
||||
* Большая часть пользовательского API реализована как [текучие выражения](https://ru.wikipedia.org/wiki/Fluent_interface)
|
||||
* Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
|
||||
* Реализован [плаги для EDT](https://gitlab.dellin.ru/orais/tools/ru.biatech.edt.xtest), который упрощает процесс запуска тестов
|
||||
|
||||
Подробнее, с функциональностью, вы можете ознакомится прочитав [документацию](docs/api-topic.md) и попробовав написать тесты
|
||||
|
||||
## Пример тестового модуля
|
||||
|
||||
Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты.
|
||||
|
||||
Пример модуля тестов:
|
||||
|
||||
```bsl
|
||||
#Область ТестыAPI
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
// Регистрация тестов
|
||||
ЮТТесты // Регистрация тестов выполняет через модуль регистратор
|
||||
.ТестовыйНабор ("Математические методы") // Набор - объединение тестов
|
||||
.Тест("Сложение") // Обязательно при регистрации указываем имя экспортного метода
|
||||
.Тест("Вычитание", "Вычитание") // Также можно указать представление теста
|
||||
.Тест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля
|
||||
.ТестКлиент("УмножениеНаКлиенте") // Есть отдельный метод для регистрации клиентских тестов
|
||||
.ТестСервер("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов
|
||||
.Тест("ВызовДеления", "Вызов деления", , "ВызовСервера"); // А для вызова сервер нет метода, поэтому только так
|
||||
.ТестовыйНабор("Строковые методы")
|
||||
.Тест("СтрНайти")
|
||||
.Тест("СтрРазделить);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура Сложение() Экспорт
|
||||
|
||||
// Реализация теста на сложение
|
||||
ЮТУтверждения.Что(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
|
||||
.ИмеетТип("Число") // Проверим тип
|
||||
.Заполнено() // Заполненность проверяемого значения
|
||||
.Больше(0) // Сравним с нулем
|
||||
.Равно(5); // Проверим ожидаемый результат
|
||||
|
||||
ЮТУтверждения.Что(-8 + 8, "-8 + 8") // Проверим второй вариант
|
||||
.Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Вычитание() Экспорт
|
||||
|
||||
// Реализация теста на вычитание
|
||||
ЮТУтверждения.Что(2 - 3, "2 - 3")
|
||||
.ИмеетТип("Число")
|
||||
.Заполнено()
|
||||
.Меньше(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область События
|
||||
|
||||
// Также в тесте можно обрабатывать события выполнения
|
||||
// Например можно реализовать подготовку и удаление тестовых данных
|
||||
// Зачистку временных файлов, настройку системы
|
||||
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
// Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||||
Сообщить("Запуск тестирования");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестовымНабором() Экспорт
|
||||
|
||||
// Выполняется перед каждым тестовым набором для каждого контекста выполнения
|
||||
Контекст = ЮТКонтекст.КонтекстНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
|
||||
// Контекст живет в рамках контекста выполнения,
|
||||
// таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
|
||||
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестом() Экспорт
|
||||
|
||||
// Выполняется перед каждым тестом
|
||||
Контекст = ЮТКонтекст.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
|
||||
// Контекст создает перед тестом и уничтожается после его выполнения
|
||||
// В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
|
||||
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТеста() Экспорт
|
||||
|
||||
// Выполняется после каждого теста
|
||||
Контекст = ЮТКонтекст.КонтекстТеста();
|
||||
Сообщить("Время выполнения теста: " + ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТестовогоНабора() Экспорт
|
||||
|
||||
// Выполняется после каждого тестового набора для каждого контекста выполнения
|
||||
// Применяется для очистки данных и т.д.
|
||||
Контекст = ЮТКонтекст.КонтекстНабора();
|
||||
Сообщить("Время выполнения набора: " + ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
|
||||
// Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||||
// В этом событии все контексты уже уничтожены
|
||||
Сообщить("Тестирование завершено");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
После запуска тестов модуля в EDT получаем такой отчет:
|
||||
|
||||
![Отчет](docs/images/report.PNG)
|
||||
|
||||
## Запуск
|
||||
|
||||
Для запуска тестов необходимо создать конфигурацию запуска и указать ее при запуске предприятия в параметре `RunUnitTests`
|
||||
|
||||
### Конфигурация запуска
|
||||
|
||||
Конфигурация настраивается в файле json и может иметь следующие параметры:
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|-------------------|-----------|-----------------------|--------------------------------------------------------------------------------------------------------------|
|
||||
| `filter` | `Object` | Object, смотрите ниже | Параметры фильтрации, поиска тестов |
|
||||
| `reportFormat` | `String` | `"jUnit"` | Формат отчета о тестировании, возможные значения: `"jUnit"`, `"JSON"` |
|
||||
| `reportPath` | `String` | `""` | Путь к формируемому отчету, можно указать или каталог (в которому будет создан файл отчета) или путь к файлу |
|
||||
| `closeAfterTests` | `Boolean` | `True` | Признак закрытия 1С:Предприятие по завершению тестирования |
|
||||
|
||||
Параметры фильтрации:
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|---------------|---------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| `extensions` | `Array` | `["tests"]` | Список имен расширений, из которых грузятся тесты |
|
||||
| `modules` | `Array` | `Null` | Список имен модулей, из которых грузятся тесты |
|
||||
| `suites` | `Array` | `Null` | **Не реализованно.** Список имен тестовых наборов, которые будут запускаться |
|
||||
| `tags` | `Array` | `Null` | **Не реализованно.** Список тегов, которые будут запускаться |
|
||||
| `contexts` | `Array` | `Null` | **Не реализованно.** Список имен контекстов исполнения, в которых будут запускаться тесты |
|
||||
| `paths` | `Array` | `Null` | **Не реализованно.** Список полных путей к исполняемым тестам (`[имя модуля.имя теста|имя модуля.имя теста.имя контекста]`) |
|
||||
|
||||
Примеры:
|
||||
|
||||
1. Запустить тесты из расширения `tests`, расположенные в модулях `МодульТестов1`, `МодульТестов2`, закрыть предприятие по завершении и сохранить отчет в формате `junit`
|
||||
|
||||
```JSON
|
||||
{
|
||||
"filter": {
|
||||
"modules": ["МодульТестов1", "МодульТестов2"]
|
||||
},
|
||||
"reportPath": "C:\\temp\\jUnit\\report.xml",
|
||||
"reportFormat": "jUnit",
|
||||
"closeAfterTests": true
|
||||
}
|
||||
```
|
||||
|
||||
2. Запустить все тесты из расширения `YAXUNIT` и сохранить отчет файл `C:\temp\jUnit\report.xml`, остальные параметры будут установлены по умолчанию
|
||||
|
||||
```JSON
|
||||
{
|
||||
"filter": {
|
||||
"extensions": ["YAXUNIT"]
|
||||
},
|
||||
"reportPath": "C:\\temp\\jUnit\\report.xml"
|
||||
}
|
||||
```
|
||||
|
||||
### Строка запуска предприятия
|
||||
|
||||
`[путь к клиенту 1С] ENTERPRISE [Параметры подключения к ИБ] [Параметры авторизации] /C RunUnitTests=/путь/к/конфигурационному/файлу`
|
||||
|
||||
*После загрузки расширения в информационную базу необходимо отключить у него `безопасный режим` и `защиту от опасных действий`*
|
||||
|
||||
Пример:
|
||||
|
||||
`"C:\Program Files\1cv8\8.3.18.1698\bin\1cv8c.exe" ENTERPRISE /IBName MyInfoBase /N Admin /C RunUnitTests=C:\tmp\test-config.json`
|
||||
Запуск тестов в режиме тонкого клиента на информационной базе `MyInfoBase` под пользователем `Admin` по конфигурации указанной в файле `C:\tmp\test-config.json`
|
||||
|
||||
### Запуск из EDT
|
||||
|
||||
При разработке в EDT процесс запуска тестов можно упростить, установив [плагин](https://gitlab.dellin.ru/orais/tools/ru.biatech.edt.xtest)
|
||||
и настроив конфигурацию запуска, как указано в описании плагина.
|
||||
|
||||
## Благодарности
|
||||
|
||||
Приносим благодарность всему [open-source сообществу 1с](https://github.com/topics/1c-enterprise) за идеи и мотивацию.
|
||||
|
||||
Особая благодарность авторам и контрибьютерам проектов
|
||||
|
||||
* [xUnitFor1C](https://github.com/xDrivenDevelopment/xUnitFor1C/graphs/contributors)
|
||||
* [vanessa-automation](https://github.com/Pr-Mex/vanessa-automation/graphs/contributors)
|
||||
* [add](https://github.com/vanessa-opensource/add/graphs/contributors)
|
||||
|
||||
---
|
||||
|
||||
## Лицензия
|
||||
|
||||
Copyright © 2022 [BIA-Technologies Limited Liability Company](http://bia-tech.ru/)
|
||||
|
||||
Distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)
|
7
docs/api-topic.md
Normal file
7
docs/api-topic.md
Normal file
@ -0,0 +1,7 @@
|
||||
# Пользовательский API
|
||||
|
||||
Текущая версия расширения предоставляет разработчикам тестов методы для удобной [регистрации тестов](test-registration.md).
|
||||
|
||||
Имеются [базовые методы проверки](assertions.md) результатов работы различных механизмов системы.
|
||||
|
||||
Планируется расширять существующий API и реализовать нужный недостающий функционал.
|
25
docs/assertions.md
Normal file
25
docs/assertions.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Утверждения
|
||||
|
||||
Утверждения реализует модуль `ЮТУтверждения`
|
||||
|
||||
Особенности
|
||||
|
||||
* API реализован по модели [текучих выражения](https://ru.wikipedia.org/wiki/Fluent_interface), с целью повышения удобства и читаемости тестов
|
||||
|
||||
```bsl
|
||||
ЮТУтверждения.Что(Контекст)
|
||||
.Свойство("ПрефиксОшибки").Равно("Контекст метода с параметрами")
|
||||
.Свойство("ИмяМетода").Равно("МетодБезИсключение")
|
||||
.Свойство("ПараметрыМетода").ИмеетТип("Массив")
|
||||
.Свойство("ПараметрыМетода").ИмеетДлину(1);
|
||||
```
|
||||
|
||||
* Большая часть методов это сравнения фактического и ожидаемого результат, но есть несколько методов настройки
|
||||
* `Что` - устанавливает проверяемый объект. Все дальнейшие проверки будут выполняется с этим объектом
|
||||
* `Метод` - устанавливает имя и параметры проверяемого метода. Для методов имеет два утверждения `ВыбрасываетИсключение` и `НеВыбрасываетИсключение`
|
||||
* `Параметр` - добавляет параметр метода. Создан для удобства установки параметров проверяемого метода
|
||||
* `Свойство` - устанавливает проверяемое свойство и проверяет его наличие.
|
||||
* Можно указывать вложенные свойства через точку, например, `Свойство("Контекст.ИмяМетода")`.
|
||||
* Также, первая проверка вызванная после этого метода будет относится к свойству объекта.
|
||||
|
||||
Например, `ЮТУтверждения.Что(Контекст).Свойство("ИмяМетода").Равно("МетодБезИсключение")` эквивалентно `Контекст.ИмяМетода = "МетодБезИсключение"`
|
BIN
docs/images/report.PNG
Normal file
BIN
docs/images/report.PNG
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
10
docs/test-registration.md
Normal file
10
docs/test-registration.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Регистрация тестовых методов
|
||||
|
||||
Работа с регистрацией тестовых методов реализована в модуле `ЮТТесты`.
|
||||
|
||||
Возможности:
|
||||
|
||||
* Объединять тесты в наборы, указывать теги, по которым возможно формировать отборы запускаемых тестов
|
||||
* Указать контекст вызова, например, для клиент-серверного модуля (или метода) можно реализовать два теста в одном тестовом модуле, проверяющих логику и на клиенте, и на сервере.
|
||||
* Организовывать черновика, регистрируя нереализованные тесты
|
||||
* Планируется, предоставить функционал параметризированных тестов.
|
18
exts/yaxunit/.project
Normal file
18
exts/yaxunit/.project
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>yaxunit</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
|
||||
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
8
exts/yaxunit/.settings/Default.cset
Normal file
8
exts/yaxunit/.settings/Default.cset
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"version": 1,
|
||||
"settings": {
|
||||
"common-module-type": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
11
exts/yaxunit/.settings/ManagedEnvironments.prefs
Normal file
11
exts/yaxunit/.settings/ManagedEnvironments.prefs
Normal file
@ -0,0 +1,11 @@
|
||||
CLIENT=false
|
||||
EXTERNAL_CONN=false
|
||||
MNG_CLIENT=true
|
||||
MOBILE_AUTONOMOUS_SERVER=false
|
||||
MOBILE_CLIENT=false
|
||||
MOBILE_SERVER=false
|
||||
MOBILE_THIN_CLIENT=false
|
||||
SERVER=true
|
||||
THIN_CLIENT=true
|
||||
WEB_CLIENT=true
|
||||
eclipse.preferences.version=1
|
17
exts/yaxunit/.settings/com.e1c.g5.v8.dt.formatter.bsl.prefs
Normal file
17
exts/yaxunit/.settings/com.e1c.g5.v8.dt.formatter.bsl.prefs
Normal file
@ -0,0 +1,17 @@
|
||||
alwaysEndWithSemicolon=true
|
||||
autowrapBinary=indent_on_wrap
|
||||
autowrapInvocation=alignment_on_wrap
|
||||
autowrapMethodParameters=alignment_on_wrap
|
||||
creatorEmptyBrackets=never brackets
|
||||
defaultValuesInitialized=true
|
||||
eclipse.preferences.version=1
|
||||
formattingOn=true
|
||||
indentMethodInternal=true
|
||||
invocationEmptyParamsDelimited=true
|
||||
keywordStandard=CamelCase
|
||||
noindent_preprocessor=true
|
||||
projectSpecificSettingsInited=true
|
||||
showWhitespaceCharacters=true
|
||||
softFormatassignmentStatement=true
|
||||
spacesForTabs=false
|
||||
whitespaceMethodParamsDelimited=true
|
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
yaxunit={"templates"\:[]}
|
@ -0,0 +1,9 @@
|
||||
eclipse.preferences.version=1
|
||||
subordinate/commands=true
|
||||
subordinate/forms=true
|
||||
subordinate/methods=true
|
||||
subordinate/operations=true
|
||||
subordinate/tabularSections=true
|
||||
subordinate/templates=true
|
||||
subordinate/urlTemplates=true
|
||||
topObjects=true
|
3
exts/yaxunit/.settings/com.e1c.v8codestyle.bsl.prefs
Normal file
3
exts/yaxunit/.settings/com.e1c.v8codestyle.bsl.prefs
Normal file
@ -0,0 +1,3 @@
|
||||
addModuleStrictTypesAnnotation=true
|
||||
createModuleStructure=true
|
||||
eclipse.preferences.version=1
|
3
exts/yaxunit/.settings/com.e1c.v8codestyle.prefs
Normal file
3
exts/yaxunit/.settings/com.e1c.v8codestyle.prefs
Normal file
@ -0,0 +1,3 @@
|
||||
commonChecks=true
|
||||
eclipse.preferences.version=1
|
||||
standardChecks=true
|
2
exts/yaxunit/.settings/org.eclipse.core.resources.prefs
Normal file
2
exts/yaxunit/.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
59
exts/yaxunit/.settings/templates/common_module.bsl
Normal file
59
exts/yaxunit/.settings/templates/common_module.bsl
Normal file
@ -0,0 +1,59 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ТестыAPI
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.Тест("ТестовыйМетод")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область События
|
||||
|
||||
Процедура ПередТестом() Экспорт
|
||||
|
||||
НачатьТранзакцию();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТеста() Экспорт
|
||||
|
||||
Пока ТранзакцияАктивна() Цикл
|
||||
ОтменитьТранзакцию();
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
3
exts/yaxunit/DT-INF/PROJECT.PMF
Normal file
3
exts/yaxunit/DT-INF/PROJECT.PMF
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Runtime-Version: 8.3.10
|
||||
Base-Project: configuration
|
56
exts/yaxunit/src/CommonModules/ОМ_ЮТИсполнитель/Module.bsl
Normal file
56
exts/yaxunit/src/CommonModules/ОМ_ЮТИсполнитель/Module.bsl
Normal file
@ -0,0 +1,56 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ТестыAPI
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ТестКлиент("ВыполнитьМодульноеТестирование");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура ВыполнитьМодульноеТестирование() Экспорт
|
||||
|
||||
ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска();
|
||||
ПараметрыЗапуска.filter.extensions = ЮТОбщий.ЗначениеВМассиве("tests");
|
||||
|
||||
ЮТУтверждения.Что(ЮТИсполнитель, "Не указан каталог отчетов")
|
||||
.Метод("ВыполнитьМодульноеТестирование").Параметр(ПараметрыЗапуска)
|
||||
.ВыбрасываетИсключение("Не указан путь сохранения отчета");
|
||||
|
||||
ПараметрыЗапуска.reportPath = ПолучитьИмяВременногоФайла(".xml");
|
||||
ЮТУтверждения.Что(ЮТИсполнитель, "Не указан каталог отчетов")
|
||||
.Метод("ВыполнитьМодульноеТестирование").Параметр(ПараметрыЗапуска)
|
||||
.НеВыбрасываетИсключение();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="08088de7-5b64-4a8b-8f7d-f4eea96170a4">
|
||||
<name>ОМ_ЮТИсполнитель</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Исполнитель</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
1550
exts/yaxunit/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl
Normal file
1550
exts/yaxunit/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="efa2f292-fc8c-4a2e-821e-acf31177de27">
|
||||
<name>ОМ_ЮТУтверждения</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Тесты утверждений</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
</mdclass:CommonModule>
|
199
exts/yaxunit/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl
Normal file
199
exts/yaxunit/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl
Normal file
@ -0,0 +1,199 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ТестыAPI
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.Тест("ПрочитатьНаборыТестов")
|
||||
.Тест("ИсполняемыеСценарииМодуля")
|
||||
.Тест("ЭтоТестовыйМодуль");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура ПрочитатьНаборыТестов() Экспорт
|
||||
|
||||
ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска();
|
||||
ПараметрыЗапуска.filter.extensions = Неопределено;
|
||||
ПараметрыЗапуска.filter.modules = ЮТОбщий.ЗначениеВМассиве("ОМ_ЮТЧитатель");
|
||||
|
||||
Наборы = ЮТЧитатель.ПрочитатьНаборыТестов(ПараметрыЗапуска);
|
||||
ЮТУтверждения.Что(Наборы, "Прочитанные наборы")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(1);
|
||||
|
||||
НаборМодуля = Наборы[0];
|
||||
|
||||
ЮТУтверждения.Что(НаборМодуля, "Набор тестов ОМ_ЮТЧитатель")
|
||||
.ИмеетТип("Структура")
|
||||
.Свойство("МетаданныеМодуля").ИмеетТип("Структура")
|
||||
.Свойство("НаборыТестов").ИмеетТип("Массив");
|
||||
|
||||
МетаданныеМодуля = НаборМодуля.МетаданныеМодуля;
|
||||
ЮТУтверждения.Что(МетаданныеМодуля, "Метаданные модуля")
|
||||
.Заполнено()
|
||||
.ИмеетТип("Структура")
|
||||
.Свойство("Имя").Равно("ОМ_ЮТЧитатель")
|
||||
.Свойство("КлиентОбычноеПриложение").Равно(Истина)
|
||||
.Свойство("КлиентУправляемоеПриложение").Равно(Истина)
|
||||
.Свойство("ВызовСервера").Равно(Ложь)
|
||||
.Свойство("ПолноеИмя").Равно("YAXUNIT.ОМ_ЮТЧитатель")
|
||||
.Свойство("Сервер").Равно(Ложь);
|
||||
|
||||
НаборыТестов = НаборМодуля.НаборыТестов;
|
||||
|
||||
ЮТУтверждения.Что(НаборыТестов, "Наборы тестов модуля")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(1);
|
||||
|
||||
ЮТУтверждения.Что(НаборыТестов[0], "Набор тестов модуля")
|
||||
.ИмеетТип("Структура")
|
||||
.Свойство("Имя").Равно("Тесты")
|
||||
.Свойство("ОписаниеОшибки")
|
||||
.Свойство("Представление").Равно("ОМ_ЮТЧитатель")
|
||||
.Свойство("Теги").ИмеетТип("Массив")
|
||||
.Свойство("Теги").ИмеетДлину(0)
|
||||
.Свойство("Тесты").ИмеетТип("Массив");
|
||||
|
||||
Тесты = НаборыТестов[0].Тесты;
|
||||
|
||||
ЮТУтверждения.Что(Тесты.Количество(), "Количество тестов модуля")
|
||||
.БольшеИлиРавно(1);
|
||||
|
||||
ЮТУтверждения.Что(Тесты[0], "Первый тест")
|
||||
.Свойство("Имя").Равно("ПрочитатьНаборыТестов")
|
||||
.Свойство("Представление").Равно("ПрочитатьНаборыТестов")
|
||||
.Свойство("Теги").ИмеетТип("Массив")
|
||||
.Свойство("Теги").ИмеетДлину(0)
|
||||
.Свойство("КонтекстВызова").ИмеетТип("Массив")
|
||||
.Свойство("КонтекстВызова").Содержит("КлиентУправляемоеПриложение")
|
||||
.Свойство("КонтекстВызова").Содержит("КлиентОбычноеПриложение")
|
||||
.Свойство("КонтекстВызова").ИмеетДлину(2);
|
||||
|
||||
ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска();
|
||||
ПараметрыЗапуска.filter.extensions = ЮТОбщий.ЗначениеВМассиве("tests");
|
||||
|
||||
Наборы = ЮТЧитатель.ПрочитатьНаборыТестов(ПараметрыЗапуска);
|
||||
ЮТУтверждения.Что(Наборы, "Прочитанные наборы расширения tests")
|
||||
.ИмеетДлину(2);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ИсполняемыеСценарииМодуля() Экспорт
|
||||
|
||||
МетаданныеМодуля = Новый Структура;
|
||||
МетаданныеМодуля.Вставить("Имя", "ОМ_СтроковыеФункцииКлиентСервер");
|
||||
МетаданныеМодуля.Вставить("КлиентУправляемоеПриложение", Истина);
|
||||
МетаданныеМодуля.Вставить("КлиентОбычноеПриложение", Истина);
|
||||
МетаданныеМодуля.Вставить("Клиент", Ложь);
|
||||
МетаданныеМодуля.Вставить("Сервер", Истина);
|
||||
МетаданныеМодуля.Вставить("ВызовСервера", Ложь);
|
||||
|
||||
Сценарии = ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля);
|
||||
|
||||
ЮТУтверждения.Что(Сценарии, "Сценарии")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(3);
|
||||
|
||||
Наборы = ЮТОбщий.КоллекцияВСоответствие(Сценарии, "Имя");
|
||||
|
||||
ЮТУтверждения.Что(Наборы, "Наборы тестов")
|
||||
.Свойство("Тесты").ИмеетТип("Структура")
|
||||
.Свойство("ТестовыйНабор").ИмеетТип("Структура")
|
||||
.Свойство("Тестовый набор 2").ИмеетТип("Структура")
|
||||
.ИмеетДлину(3);
|
||||
|
||||
Набор1 = Наборы["Тесты"];
|
||||
Набор2 = Наборы["ТестовыйНабор"];
|
||||
Набор3 = Наборы["Тестовый набор 2"];
|
||||
|
||||
ЮТУтверждения.Что(Набор1, "Набор по умолчанию")
|
||||
.Свойство("Имя").Равно("Тесты")
|
||||
.Свойство("Представление").Равно("ОМ_СтроковыеФункцииКлиентСервер")
|
||||
.Свойство("Теги").ИмеетДлину(0)
|
||||
.Свойство("Тесты").ИмеетДлину(3);
|
||||
|
||||
ЮТУтверждения.Что(Набор2, "Набор ""ТестовыйНабор""")
|
||||
.Свойство("Имя").Равно("ТестовыйНабор")
|
||||
.Свойство("Представление").Равно("ТестовыйНабор")
|
||||
.Свойство("Теги").ИмеетДлину(0)
|
||||
.Свойство("Тесты").ИмеетДлину(3);
|
||||
|
||||
ЮТУтверждения.Что(Набор3, "Набор ""Тестовый набор 2""")
|
||||
.Свойство("Имя").Равно("Тестовый набор 2")
|
||||
.Свойство("Теги").ИмеетДлину(2)
|
||||
.Свойство("Тесты").ИмеетДлину(1);
|
||||
|
||||
ТестыПоУмолчанию = Набор1.Тесты;
|
||||
ЮТУтверждения.Что(ТестыПоУмолчанию[0], "Первый тест набора по умолчанию")
|
||||
.ИмеетТип("Структура")
|
||||
.Свойство("Имя").Равно("ТестовыйМетод3")
|
||||
.Свойство("Представление").Равно("Тестовый метод 3")
|
||||
.Свойство("Теги").ИмеетДлину(0)
|
||||
.Свойство("КонтекстВызова").Содержит("КлиентОбычноеПриложение")
|
||||
.Свойство("КонтекстВызова").Содержит("КлиентУправляемоеПриложение")
|
||||
.Свойство("КонтекстВызова").Содержит("Сервер")
|
||||
.Свойство("КонтекстВызова").ИмеетДлину(3);
|
||||
|
||||
ЮТУтверждения.Что(ТестыПоУмолчанию[1], "Второй тест набора по умолчанию")
|
||||
.Свойство("Имя").Равно("ТестовыйМетод4")
|
||||
.Свойство("Представление").Равно("ТестовыйМетод4")
|
||||
.Свойство("Теги").ИмеетДлину(0)
|
||||
.Свойство("КонтекстВызова").Содержит("КлиентОбычноеПриложение")
|
||||
.Свойство("КонтекстВызова").Содержит("КлиентУправляемоеПриложение")
|
||||
.Свойство("КонтекстВызова").ИмеетДлину(2);
|
||||
|
||||
ЮТУтверждения.Что(ТестыПоУмолчанию[2], "Третий тест набора по умолчанию")
|
||||
.Свойство("Имя").Равно("ТестовыйМетод4")
|
||||
.Свойство("КонтекстВызова").Содержит("Сервер")
|
||||
.Свойство("КонтекстВызова").ИмеетДлину(1);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЭтоТестовыйМодуль() Экспорт
|
||||
|
||||
Варианты = Новый Структура();
|
||||
Варианты.Вставить("ОМ_ЮТЧитатель", Истина);
|
||||
Варианты.Вставить("ОМ_СтроковыеФункцииКлиентСервер", Истина);
|
||||
Варианты.Вставить("ОМ_ОшибкаЗагрузкиСценариев", Истина);
|
||||
Варианты.Вставить("ЮТЧитатель", Ложь);
|
||||
|
||||
Для Каждого Вариант Из Варианты Цикл
|
||||
|
||||
ОписаниеМодуля = ЮТМетаданныеСервер.МетаданныеМодуля(Вариант.Ключ);
|
||||
ЮТУтверждения.Что(ЮТЧитатель.ЭтоТестовыйМодуль(ОписаниеМодуля), "Проверка модуля " + Вариант.Ключ)
|
||||
.Равно(Вариант.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ce99a867-ae9c-4820-8498-9935fe18879e">
|
||||
<name>ОМ_ЮТЧитатель</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Читатель</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
79
exts/yaxunit/src/CommonModules/ЮТ/Module.bsl
Normal file
79
exts/yaxunit/src/CommonModules/ЮТ/Module.bsl
Normal file
@ -0,0 +1,79 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Основной модуль для запуска тестирования
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Инициализировать
|
||||
// Выполняет чтение и инициализацию параметров подсистемы тестирования
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаСтрокой - Строка - Строка запуска приложения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Набор прочитанных параметров. См. ЮТПараметры.Параметры
|
||||
Функция Инициализировать(Знач ПараметрыЗапускаСтрокой) Экспорт
|
||||
|
||||
Возврат ЮТПараметры.ПараметрыЗапуска(ПараметрыЗапускаСтрокой);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ВыполнятьМодульноеТестирование
|
||||
// Возвращает признак необходимости выполнять модульное тестирование
|
||||
// Параметры:
|
||||
// Параметры - См. ЮТПараметры.Параметры
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Необходимость выполнения модульного тестирования
|
||||
Функция ВыполнятьМодульноеТестирование(Параметры) Экспорт
|
||||
|
||||
Возврат Параметры.ВыполнятьМодульноеТестирование;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ВыполнитьМодульноеТестирование
|
||||
// Запускает выполнение модульного тестирования
|
||||
//
|
||||
// Параметры:
|
||||
// Параметры - См. ЮТПараметры.Параметры
|
||||
Процедура ВыполнитьМодульноеТестирование(Параметры = Неопределено) Экспорт
|
||||
|
||||
Если Параметры = Неопределено Тогда
|
||||
Параметры = ЮТ.Инициализировать(ПараметрЗапуска);
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ВыполнятьМодульноеТестирование(Параметры) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЮТКонтекст.ИнициализироватьКонтекст();
|
||||
|
||||
ЮТИсполнитель.ВыполнитьМодульноеТестирование(Параметры);
|
||||
|
||||
Если Параметры.CloseAfterTests Тогда
|
||||
ПрекратитьРаботуСистемы(Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
10
exts/yaxunit/src/CommonModules/ЮТ/ЮТ.mdo
Normal file
10
exts/yaxunit/src/CommonModules/ЮТ/ЮТ.mdo
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="34241a49-2c1e-41ac-b97b-f22be47c83e8">
|
||||
<name>ЮТ</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>ЮТ</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
402
exts/yaxunit/src/CommonModules/ЮТИсполнитель/Module.bsl
Normal file
402
exts/yaxunit/src/CommonModules/ЮТИсполнитель/Module.bsl
Normal file
@ -0,0 +1,402 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// ВыполнитьМодульноеТестирование
|
||||
// Метод, по параметрам запуска, запускает выполнение всего процесса тестирования.
|
||||
//
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаТестов - Структура - Параметры запуска тестирования, см. ЮТФабрика.ПараметрыЗапуска() и см. ЮТПараметры.ПрочитатьПараметрыЗапуска
|
||||
Процедура ВыполнитьМодульноеТестирование(ПараметрыЗапускаТестов) Экспорт
|
||||
|
||||
ТестовыеМодули = ЮТЧитатель.ПрочитатьНаборыТестов(ПараметрыЗапускаТестов);
|
||||
|
||||
РезультатыТестирования = Новый Массив();
|
||||
|
||||
Для Каждого ТестовыйМодуль Из ТестовыеМодули Цикл
|
||||
|
||||
РезультатыПрогона = ПрогонТестовМодуля(ТестовыйМодуль);
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(РезультатыТестирования, РезультатыПрогона);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
#Если Клиент Тогда
|
||||
ЮТОтчет.СформироватьОтчет(РезультатыТестирования, ПараметрыЗапускаТестов);
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// ПрогонНаборов
|
||||
// Выполняет тесты наборов модуля. Возвращает результат прогона
|
||||
// Параметры:
|
||||
// Наборы - Массив - Наборы исполняемых тестов, структуру набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// ИмяМодуля - Строка - Имя модуля, которому принадлежат тесты
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - Результат прогона наборов тестов, структура набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ПрогонНаборов(Наборы, ИмяМодуля) Экспорт
|
||||
|
||||
Ошибка = ПередВсемиТестамиМодуля(ИмяМодуля);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ЗаписатьОшибкуВ(Наборы, ОшибкаВызоваОбработчика("ПередВсемиТестамиМодуля", Ошибка));
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из Наборы Цикл
|
||||
|
||||
Результат = ПрогонНабора(Набор, ИмяМодуля);
|
||||
|
||||
Если Результат <> Неопределено Тогда
|
||||
Набор.Тесты = Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Ошибка = ПослеВсехТестовМодуля(ИмяМодуля);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ЗаписатьОшибкуВ(Наборы, ОшибкаВызоваОбработчика("ПослеВсехТестовМодуля", Ошибка));
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Наборы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область ОбработчикиСобытийЗапуска
|
||||
|
||||
Функция ПередВсемиТестамиМодуля(ИмяМодуля)
|
||||
|
||||
Возврат ВызватьОбработчикМодуля(ИмяМодуля, "ПередВсемиТестами");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПередТестовымНабором(Набор, ИмяМодуля)
|
||||
|
||||
ЮТКонтекст.УстановитьКонтекстНабораТестов(Новый Структура());
|
||||
|
||||
Возврат ВызватьОбработчикМодуля(ИмяМодуля, "ПередТестовымНабором");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПередТестом(Тест, ИмяМодуля)
|
||||
|
||||
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
ПолучитьСообщенияПользователю(Истина);
|
||||
#КонецЕсли
|
||||
|
||||
ЮТУтверждения.СброситьКонтекст();
|
||||
ЮТКонтекст.УстановитьКонтекстТеста(Новый Структура());
|
||||
|
||||
Возврат ВызватьОбработчикМодуля(ИмяМодуля, "ПередТестом");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПослеТеста(Тест, ИмяМодуля)
|
||||
|
||||
Возврат ВызватьОбработчикМодуля(ИмяМодуля, "ПослеТеста");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПослеТестовогоНабора(Набор, ИмяМодуля)
|
||||
|
||||
Возврат ВызватьОбработчикМодуля(ИмяМодуля, "ПослеТестовогоНабора");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПослеВсехТестовМодуля(ИмяМодуля)
|
||||
|
||||
Возврат ВызватьОбработчикМодуля(ИмяМодуля, "ПослеВсехТестов");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОбработатьЗавершениеТеста(Тест, Ошибка = Неопределено)
|
||||
|
||||
Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта;
|
||||
|
||||
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
|
||||
Если Ошибка = Неопределено Тогда
|
||||
|
||||
Тест.Статус = СтатусыИсполненияТеста.Успешно;
|
||||
|
||||
Иначе
|
||||
|
||||
ЮТРегистрацияОшибок.ОбработатьОшибкуТеста(Тест, Ошибка);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВызватьОбработчикМодуля(ИмяМодуля, ИмяМетода)
|
||||
|
||||
Попытка
|
||||
|
||||
Если ЮТОбщий.МетодМодуляСуществует(ИмяМодуля, ИмяМетода) Тогда
|
||||
|
||||
Команда = СтрШаблон("%1.%2()", ИмяМодуля, ИмяМетода);
|
||||
Выполнить(Команда);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
Возврат ИнформацияОбОшибке();
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОшибкаВызоваОбработчика(ИмяОбработчика, Ошибка)
|
||||
|
||||
Возврат ЮТРегистрацияОшибок.ДанныеОшибки(Ошибка, СтрШаблон("Ошибка обработчика '%1': %2", ИмяОбработчика, Ошибка.Описание));
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Исполнение
|
||||
|
||||
Функция ПрогонТестовМодуля(ТестовыйМодуль)
|
||||
|
||||
ИсполняемыеНаборыМодуля = ИсполняемыеНаборыТестовМодуля(ТестовыйМодуль.МетаданныеМодуля, ТестовыйМодуль.НаборыТестов);
|
||||
|
||||
КонтекстыПриложения = ЮТФабрика.КонтекстыПриложения();
|
||||
СтатусыИсполнения = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
КонтекстыИсполнения = ЮТФабрика.КонтекстыИсполнения();
|
||||
|
||||
Клиентские = Новый Массив();
|
||||
Серверные = Новый Массив();
|
||||
Пропущенные = Новый Массив();
|
||||
|
||||
Для Каждого ИсполняемыйНаборТестов Из ИсполняемыеНаборыМодуля Цикл
|
||||
|
||||
Если НЕ ИсполняемыйНаборТестов.Выполнять Тогда
|
||||
|
||||
Пропущенные.Добавить(ИсполняемыйНаборТестов);
|
||||
Продолжить;
|
||||
|
||||
ИначеЕсли КонтекстыПриложения.Найти(ИсполняемыйНаборТестов.Режим) = Неопределено Тогда
|
||||
|
||||
Пропущенные.Добавить(ИсполняемыйНаборТестов);
|
||||
Для Каждого Тест Из ИсполняемыйНаборТестов.Тесты Цикл
|
||||
|
||||
Тест.Статус = СтатусыИсполнения.Пропущен;
|
||||
Тест.ОписаниеОшибки = "Неподдерживаемый режим запуска";
|
||||
|
||||
КонецЦикла;
|
||||
Продолжить;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Контекст = ЮТФабрика.КонтекстИсполнения(ИсполняемыйНаборТестов.Режим);
|
||||
|
||||
Если Контекст = КонтекстыИсполнения.Сервер Тогда
|
||||
|
||||
Серверные.Добавить(ИсполняемыйНаборТестов);
|
||||
|
||||
ИначеЕсли Контекст = КонтекстыИсполнения.Клиент Тогда
|
||||
|
||||
Клиентские.Добавить(ИсполняемыйНаборТестов);
|
||||
|
||||
Иначе
|
||||
|
||||
Пропущенные.Добавить(ИсполняемыйНаборТестов);
|
||||
ИсполняемыйНаборТестов.ОписаниеОшибки = "Неизвестный контекст/режим исполнения";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Результаты = Новый Массив();
|
||||
|
||||
Если Клиентские.Количество() Тогда
|
||||
Результат = ПрогонНаборов(Клиентские, ТестовыйМодуль.МетаданныеМодуля.Имя);
|
||||
ЮТОбщий.ДополнитьМассив(Результаты, Результат);
|
||||
КонецЕсли;
|
||||
|
||||
Если Серверные.Количество() Тогда
|
||||
Результат = ЮТИсполнительСервер.ПрогонНаборов(Серверные, ТестовыйМодуль.МетаданныеМодуля.Имя);
|
||||
ЮТОбщий.ДополнитьМассив(Результаты, Результат);
|
||||
КонецЕсли;
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(Результаты, Пропущенные);
|
||||
|
||||
Возврат Результаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПрогонНабора(Набор, ИмяМодуля)
|
||||
|
||||
Ошибка = ПередТестовымНабором(Набор, ИмяМодуля);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
Набор.ОписаниеОшибки = ОшибкаВызоваОбработчика("ПередТестовымНабором", Ошибка);
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
|
||||
Результаты = Новый Массив();
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
ЗапуститьТест(Тест, ИмяМодуля);
|
||||
|
||||
Результаты.Добавить(Тест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Ошибка = ПослеТестовогоНабора(Набор, ИмяМодуля);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
Набор.ОписаниеОшибки = ОшибкаВызоваОбработчика("ПослеТестовогоНабора", Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта;
|
||||
|
||||
Возврат Результаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗапуститьТест(Тест, ИмяМодуля)
|
||||
|
||||
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
|
||||
Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
СтрокаЗапуска = СтрШаблон("%1()", Тест.ПолноеИмяМетода);
|
||||
|
||||
Попытка
|
||||
|
||||
Ошибка = ПередТестом(Тест, ИмяМодуля);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ОбработатьЗавершениеТеста(Тест, ОшибкаВызоваОбработчика("ПередТестом", Ошибка));
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Тест.Статус = СтатусыИсполненияТеста.Исполнение;
|
||||
|
||||
Выполнить(СтрокаЗапуска);
|
||||
|
||||
ПослеТеста(Тест, ИмяМодуля);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ОбработатьЗавершениеТеста(Тест, ОшибкаВызоваОбработчика("ПослеТеста", Ошибка));
|
||||
Иначе
|
||||
ОбработатьЗавершениеТеста(Тест);
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
ОбработатьЗавершениеТеста(Тест, ИнформацияОбОшибке());
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьОшибкуВ(Объекты, Ошибка)
|
||||
|
||||
Для Каждого Объект Из Объекты Цикл
|
||||
|
||||
Объект.ОписаниеОшибки = Ошибка;
|
||||
|
||||
Если Объект.Свойство("Статус") Тогда
|
||||
|
||||
Объект.Статус = ЮТФабрика.СтатусыИсполненияТеста().Сломан;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ИсполняемыеНаборыТестовМодуля(МетаданныеМодуля, ТестовыеНаборы)
|
||||
|
||||
ИсполняемыеТестовыеНаборы = Новый Массив;
|
||||
|
||||
Для Каждого ТестовыйНабор Из ТестовыеНаборы Цикл
|
||||
|
||||
НаборыКонтекстов = Новый Структура;
|
||||
|
||||
ТестыНабора = ЮТОбщий.ЗначениеСтруктуры(ТестовыйНабор, "Тесты", Новый Массив());
|
||||
|
||||
Для Каждого Тест Из ТестыНабора Цикл
|
||||
|
||||
Для Каждого Контекст Из Тест.КонтекстВызова Цикл
|
||||
|
||||
Если НЕ НаборыКонтекстов.Свойство(Контекст) Тогда
|
||||
ИсполняемыйНабор = ЮТФабрика.ОписаниеИсполняемогоНабораТестов(ТестовыйНабор, МетаданныеМодуля);
|
||||
ИсполняемыйНабор.Режим = Контекст;
|
||||
НаборыКонтекстов.Вставить(Контекст, ИсполняемыйНабор);
|
||||
Иначе
|
||||
ИсполняемыйНабор = НаборыКонтекстов[Контекст];
|
||||
КонецЕсли;
|
||||
|
||||
ИсполняемыйТест = ЮТФабрика.ОписаниеИсполняемогоТеста(Тест, МетаданныеМодуля, Контекст);
|
||||
ИсполняемыйНабор.Тесты.Добавить(ИсполняемыйТест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НаборыКонтекстов.Количество() Тогда
|
||||
|
||||
Для Каждого Элемент Из НаборыКонтекстов Цикл
|
||||
ИсполняемыеТестовыеНаборы.Добавить(Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
// TODO. Корякин А. 2021.11.24 А надо ли добавлять при отсутствии тестов
|
||||
ИсполняемыеТестовыеНаборы.Добавить(ЮТФабрика.ОписаниеИсполняемогоНабораТестов(ТестовыйНабор, МетаданныеМодуля));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ИсполняемыеТестовыеНаборы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="24d9c1de-23c0-4d03-b2bf-9437c0985453">
|
||||
<name>ЮТИсполнитель</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Исполнитель</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -0,0 +1,54 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// ПрогонНаборов
|
||||
// Выполняет тесты наборов модуля. Возвращает результат прогона
|
||||
// Это обертка для прогона на сервере
|
||||
// Параметры:
|
||||
// Наборы - Массив - Наборы исполняемых тестов, структуру набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// ИмяМодуля - Строка - Имя модуля, которому принадлежат тесты
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - Результат прогона наборов тестов, структура набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ПрогонНаборов(Знач Наборы, Знач ИмяМодуля) Экспорт
|
||||
|
||||
Возврат ЮТИсполнитель.ПрогонНаборов(Наборы, ИмяМодуля);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bc8637e0-b62c-49eb-9bea-bd06b7e690ae">
|
||||
<name>ЮТИсполнительСервер</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Исполнитель сервер</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
200
exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl
Normal file
200
exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl
Normal file
@ -0,0 +1,200 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// ИнициализироватьКонтекст
|
||||
// Выполняет начальную настройку для работы с хранимым контекстом
|
||||
Процедура ИнициализироватьКонтекст() Экспорт
|
||||
|
||||
#Если Клиент Тогда
|
||||
ЮТКонтекстКлиент.ИнициализироватьКонтекст();
|
||||
#КонецЕсли
|
||||
ЮТКонтекстСервер.ИнициализироватьКонтекст();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// ДанныеКонтекста
|
||||
// Возвращает хранимые данные контекста.
|
||||
// Существует отдельно контекст сервера, отдельно клиента, эти контексты никак не связаны и никак не синхронизируются
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные контекста
|
||||
Функция ДанныеКонтекста() Экспорт
|
||||
|
||||
#Если Клиент Тогда
|
||||
Возврат ЮТКонтекстКлиент.ДанныеКонтекста();
|
||||
#Иначе
|
||||
Возврат ЮТКонтекстСервер.ДанныеКонтекста();
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЗначениеКонтекста
|
||||
// Возвращает значение "подконтекста", вложенного реквизита контекста
|
||||
// Параметры:
|
||||
// ИмяРеквизита - Строка - Имя реквизита/подконтекста
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Значение реквизитиа/подконтекста
|
||||
Функция ЗначениеКонтекста(ИмяРеквизита) Экспорт
|
||||
|
||||
ДанныеКонтекста = ДанныеКонтекста();
|
||||
|
||||
Возврат ЮТОбщий.ЗначениеСтруктуры(ДанныеКонтекста, ИмяРеквизита);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// УстановитьЗначениеКонтекста
|
||||
// Устанавливает значение "подконтекста", вложенного реквизита контекста
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяРеквизита - Строка - Имя реквизита/подконтекста
|
||||
// Значение - Произвольный - Новое значение реквизитиа/подконтекста
|
||||
Процедура УстановитьЗначениеКонтекста(ИмяРеквизита, Значение) Экспорт
|
||||
|
||||
ДанныеКонтекста = ДанныеКонтекста();
|
||||
|
||||
ДанныеКонтекста.Вставить(ИмяРеквизита, Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// КонтекстТеста
|
||||
// Возвращает структуру, в которой можно хранить данные используемые в тесте
|
||||
// Данные живут в рамках одного теста, но доступны в обработчиках событий `ПередТестом` и `ПослеТеста`
|
||||
// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеТеста`
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Структура - Контекст теста, возвращает неопределено если контекст не инициализирован
|
||||
Функция КонтекстТеста() Экспорт
|
||||
|
||||
Возврат ЮТКонтекст.ЗначениеКонтекста(ИмяКонтекстаТеста());
|
||||
|
||||
КонецФункции
|
||||
|
||||
// КонтекстНабора
|
||||
// Возвращает структуру, в которой можно хранить данные используемые в тестах набора
|
||||
// Данные живут в рамках одного набора тестов (данные между клиентом и сервером не синхронизируются)
|
||||
// Доступны в каждом тесте набора и в обработчиках событий `ПередТестовымНабором`, `ПослеТестовогоНабора`, `ПередТестом` и `ПослеТеста`
|
||||
// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеТеста`
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Структура - Контекст набора тестов, возвращает неопределено если контекст не инициализирован
|
||||
Функция КонтекстНабора() Экспорт
|
||||
|
||||
Возврат ЮТКонтекст.ЗначениеКонтекста(ИмяКонтекстаНабораТестов());
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// КонтекстОшибки
|
||||
// Возвращает служебный контекст, содержит дополнительные детали ошибки теста
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Структура - Контекст ошибки, см. ЮТРегистрацияОшибок.НовыйКонтекстОшибки
|
||||
Функция КонтекстОшибки() Экспорт
|
||||
|
||||
Возврат ЮТКонтекст.ЗначениеКонтекста(ИмяКонтекстаОшибки());
|
||||
|
||||
КонецФункции
|
||||
|
||||
// КонтекстПроверки
|
||||
// Возвращает служебный контекста, данные выполняемой проверки
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Структура - Контекст проверки
|
||||
Функция КонтекстПроверки() Экспорт
|
||||
|
||||
Возврат ЮТКонтекст.ЗначениеКонтекста(ИмяКонтекстаУтверждений());
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеКонтекста() Экспорт
|
||||
|
||||
Описание = Новый Структура;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура УстановитьКонтекстОшибки(Знач ДанныеОшибки = Неопределено) Экспорт
|
||||
|
||||
Если ДанныеОшибки = Неопределено Тогда
|
||||
ДанныеОшибки = ЮТФабрика.ОписаниеКонтекстаОшибки();
|
||||
КонецЕсли;
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста(ИмяКонтекстаОшибки(), ДанныеОшибки);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьКонтекстУтверждений(Знач ДанныеКонтекста) Экспорт
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста(ИмяКонтекстаУтверждений(), ДанныеКонтекста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьКонтекстНабораТестов(Знач ДанныеКонтекста) Экспорт
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста(ИмяКонтекстаНабораТестов(), ДанныеКонтекста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьКонтекстТеста(Знач ДанныеКонтекста) Экспорт
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста(ИмяКонтекстаТеста(), ДанныеКонтекста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ИмяКонтекстаОшибки()
|
||||
|
||||
Возврат "ДанныеОшибки";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяКонтекстаУтверждений()
|
||||
|
||||
Возврат "КонтекстУтверждения";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяКонтекстаНабораТестов()
|
||||
|
||||
Возврат "КонтекстНабора";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяКонтекстаТеста()
|
||||
|
||||
Возврат "КонтекстТеста";
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
11
exts/yaxunit/src/CommonModules/ЮТКонтекст/ЮТКонтекст.mdo
Normal file
11
exts/yaxunit/src/CommonModules/ЮТКонтекст/ЮТКонтекст.mdo
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="63f51e4d-3cf0-4109-b044-988cc723e206">
|
||||
<name>ЮТКонтекст</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Контекст</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
51
exts/yaxunit/src/CommonModules/ЮТКонтекстКлиент/Module.bsl
Normal file
51
exts/yaxunit/src/CommonModules/ЮТКонтекстКлиент/Module.bsl
Normal file
@ -0,0 +1,51 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИнициализироватьКонтекст() Экспорт
|
||||
|
||||
ЮТДанныеКонтекста = ЮТКонтекст.ОписаниеКонтекста();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ДанныеКонтекста() Экспорт
|
||||
|
||||
Возврат ЮТДанныеКонтекста;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b6fb384e-e98a-47d4-a070-7e4d57a301d2">
|
||||
<name>ЮТКонтекстКлиент</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Контекст клиент</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
81
exts/yaxunit/src/CommonModules/ЮТКонтекстСервер/Module.bsl
Normal file
81
exts/yaxunit/src/CommonModules/ЮТКонтекстСервер/Module.bsl
Normal file
@ -0,0 +1,81 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИнициализироватьКонтекст() Экспорт
|
||||
|
||||
Контекст = ЮТКонтекст.ОписаниеКонтекста();
|
||||
|
||||
АдресХранилища = ПоместитьВоВременноеХранилище(Контекст, Новый УникальныйИдентификатор());
|
||||
|
||||
ХранилищеОбщихНастроек.Сохранить(КлючНастроекКонтекста(), "АдресХранилища", АдресХранилища);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ДанныеКонтекста() Экспорт
|
||||
|
||||
Адрес = АдресСерверногоКонтекста();
|
||||
|
||||
Если ЭтоАдресВременногоХранилища(Адрес) Тогда
|
||||
|
||||
Возврат ПолучитьИзВременногоХранилища(АдресСерверногоКонтекста());
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КлючНастроекКонтекста() Экспорт
|
||||
|
||||
Возврат СтрШаблон("ЮТ%1.Контекста", НомерСеансаИнформационнойБазы());
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция АдресСерверногоКонтекста(Кэшировать = Истина) Экспорт
|
||||
|
||||
Если Кэшировать Тогда
|
||||
|
||||
Возврат ЮТПовторногоИспользования.АдресСерверногоКонтекста();
|
||||
|
||||
Иначе
|
||||
|
||||
Возврат ХранилищеОбщихНастроек.Загрузить(КлючНастроекКонтекста(), "АдресХранилища");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d635e5c4-fe62-4953-8dcc-00d329307dcf">
|
||||
<name>ЮТКонтекстСервер</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Контекст сервер</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
170
exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
Normal file
170
exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
Normal file
@ -0,0 +1,170 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// РасширенияКонфигурации
|
||||
// Возвращает список имен установленных расширений
|
||||
// Возвращаемое значение:
|
||||
// Массив - Расширения конфигурации
|
||||
Функция РасширенияКонфигурации() Экспорт
|
||||
|
||||
Расширения = РасширенияКонфигурации.Получить();
|
||||
|
||||
Возврат ЮТОбщий.ВыгрузитьЗначения(Расширения, "Имя");
|
||||
|
||||
КонецФункции
|
||||
|
||||
// МетаданныеМодулей
|
||||
// Выполняет чтение метаданных общих модулей, которые предположительно могут являться тестами
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяРасширения - Строка - Имя расширения с тестами
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - Коллекция описаний моделей, структуру элемента см. ЮТФабрика.ОписаниеМодуля
|
||||
Функция МетаданныеМодулей(ИменаРасширения, ИменаМодулей = Неопределено) Экспорт
|
||||
|
||||
МетаданныеМодулей = Новый Массив;
|
||||
|
||||
НормализованныеИменаМодулей = Новый Структура;
|
||||
|
||||
Если ИменаМодулей <> Неопределено Тогда
|
||||
|
||||
Для Каждого ИмяМодуля Из ИменаМодулей Цикл
|
||||
НормализованныеИменаМодулей.Вставить(ИмяМодуля, Истина);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Идентификаторы = Новый Соответствие();
|
||||
|
||||
Для Каждого ИмяРасширения Из ИменаРасширения Цикл
|
||||
|
||||
Расширение = РасширенияКонфигурации.Получить(Новый Структура("Имя", ИмяРасширения)).Получить(0);
|
||||
Идентификаторы.Вставить(Расширение.УникальныйИдентификатор, ИмяРасширения);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Модуль Из Метаданные.ОбщиеМодули Цикл
|
||||
|
||||
Если ИменаМодулей <> Неопределено И НЕ НормализованныеИменаМодулей.Свойство(Модуль.Имя) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Расширение = Модуль.РасширениеКонфигурации();
|
||||
|
||||
Если Расширение <> Неопределено И Идентификаторы[Расширение.УникальныйИдентификатор] <> Неопределено Тогда
|
||||
|
||||
МетаданныеМодуля = МетаданныеМодуля(Модуль);
|
||||
МетаданныеМодуля.ПолноеИмя = СтрШаблон("%1.%2", Расширение.Имя, Модуль.Имя);
|
||||
МетаданныеМодулей.Добавить(МетаданныеМодуля);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МетаданныеМодулей;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Модули подсистемы.
|
||||
// Возвращает список модулей подсистемы
|
||||
// Подсистема должна находится в подсистеме "ЮТФункциональность"
|
||||
// Параметры:
|
||||
// ИмяПодсистемы Строка - Имя подсистемы
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - Имена модулей входящих в подсистему
|
||||
Функция МодулиПодсистемы(ИмяПодсистемы) Экспорт
|
||||
|
||||
Подсистема = Метаданные.Подсистемы.ЮТФункциональность.Подсистемы.Найти(ИмяПодсистемы);
|
||||
|
||||
Если Подсистема = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение СтрШаблон("Подсистема ""%1"" не найдена", ИмяПодсистемы);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Модули = Новый Массив();
|
||||
|
||||
Для Каждого Объект Из Подсистема.Состав Цикл
|
||||
|
||||
Если Метаданные.ОбщиеМодули.Содержит(Объект) Тогда
|
||||
|
||||
Модули.Добавить(Объект.Имя);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Модули;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// МетаданныеМодуля
|
||||
// Создает описание метаданных модуля
|
||||
//
|
||||
// Параметры:
|
||||
// Модуль - ОбъектМетаданныхОбщийМодуль, Структура, Строка - Общий модуль либо структура с аналогичными атрибутами или имя модуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Метаданные модуля, см. ЮТФабрика.ОписаниеМодуля
|
||||
Функция МетаданныеМодуля(Знач Модуль) Экспорт
|
||||
|
||||
Если ТипЗнч(Модуль) = Тип("Строка") Тогда
|
||||
ИмяМодуля = Модуль;
|
||||
Модуль = Метаданные.ОбщиеМодули.Найти(ИмяМодуля);
|
||||
|
||||
Если Модуль = Неопределено Тогда
|
||||
ВызватьИсключение "Не найден модуль с именем " + ИмяМодуля;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Описание = ЮТФабрика.ОписаниеМодуля();
|
||||
Описание.Имя = Модуль.Имя;
|
||||
Описание.КлиентУправляемоеПриложение = Модуль.КлиентУправляемоеПриложение;
|
||||
Описание.КлиентОбычноеПриложение = Модуль.КлиентОбычноеПриложение;
|
||||
Описание.Сервер = Модуль.Сервер;
|
||||
Описание.ВызовСервера = Модуль.ВызовСервера;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="42510142-f01c-4ab2-b615-8970bdcc7a1b">
|
||||
<name>ЮТМетаданныеСервер</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Метаданные сервер</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
698
exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
Normal file
698
exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
Normal file
@ -0,0 +1,698 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#Область Строки
|
||||
|
||||
// ДобавитьСтроку
|
||||
// Конкатенирует строки, разделяя их разделителем
|
||||
//
|
||||
// Параметры:
|
||||
// ИсходнаяСтрока - Строка - Исходная строка
|
||||
// ДополнительнаяСтрока - Строка - Добавляемая строка
|
||||
// Разделитель - Строка - Строка разделитель, любой набор символов - разделитель между подстроками
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Результат конкатенации строк
|
||||
//
|
||||
Функция ДобавитьСтроку(Знач ИсходнаяСтрока, Знач ДополнительнаяСтрока, Знач Разделитель = ";") Экспорт
|
||||
|
||||
Если Не ПустаяСтрока(ДополнительнаяСтрока) Тогда
|
||||
|
||||
Если Не ПустаяСтрока(ИсходнаяСтрока) Тогда
|
||||
|
||||
Возврат Строка(ИсходнаяСтрока) + Разделитель + Строка(ДополнительнаяСтрока);
|
||||
|
||||
Иначе
|
||||
|
||||
Возврат Строка(ДополнительнаяСтрока);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Строка(ИсходнаяСтрока);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// РазложитьСтрокуВМассивПодстрок
|
||||
// Возвращает массив на основании строки
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Строка - преобразуемая строка
|
||||
// Разделитель - Строка - строка-разделитель
|
||||
// УдалятьКонцевыеПробелы - Булево - удалять или нет концевые пробелы между элементами в строке
|
||||
// Фиксированный - Булево - возвращать фиксированный или обычный массив
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив, ФиксированныйМассив - массив строк
|
||||
//
|
||||
Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Разделитель = ";", УдалятьКонцевыеПробелы = Ложь,
|
||||
Фиксированный = Ложь) Экспорт
|
||||
|
||||
Результат = Новый Массив;
|
||||
|
||||
КодУниверсальногоРазделителя = 5855;
|
||||
УниверсальныйРазделитель = Символ(КодУниверсальногоРазделителя);
|
||||
МодифицированнаяСтрока = СтрЗаменить(Значение, Разделитель, УниверсальныйРазделитель);
|
||||
|
||||
МассивСтрок = ?(МодифицированнаяСтрока = "", Новый Массив, СтрРазделить(МодифицированнаяСтрока,
|
||||
УниверсальныйРазделитель));
|
||||
|
||||
Если УдалятьКонцевыеПробелы Тогда
|
||||
|
||||
Для Индекс = 0 По МассивСтрок.ВГраница() Цикл
|
||||
|
||||
МассивСтрок[Индекс] = СокрЛП(МассивСтрок[Индекс]);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Фиксированный Тогда
|
||||
|
||||
Результат = Новый ФиксированныйМассив(МассивСтрок);
|
||||
|
||||
Иначе
|
||||
|
||||
Результат = МассивСтрок;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Коллекции
|
||||
|
||||
// ЗначениеСтруктуры
|
||||
// Возвращает требуемое поле структуры. В случае отсутствия поля возвращает значение по умолчанию
|
||||
//
|
||||
// Параметры:
|
||||
// ИсходнаяСтруктура - Структура - Исходная структура
|
||||
// ИмяПоля - Строка - Имя поля структуры
|
||||
// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено, если поля в структуре нет
|
||||
// ПроверятьЗаполненность - Булево - Необходимость проверять значение на заполненность. Если не заполнено,
|
||||
// то возвращается значение по умолчанию
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный -- Значение искомого поля структуры
|
||||
Функция ЗначениеСтруктуры(Знач ИсходнаяСтруктура, ИмяПоля, Знач ЗначениеПоУмолчанию = Неопределено, ПроверятьЗаполненность = Ложь) Экспорт
|
||||
|
||||
Если ПустаяСтрока(ИмяПоля) Тогда
|
||||
|
||||
Возврат ЗначениеПоУмолчанию;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеПоля = Неопределено;
|
||||
Если ИсходнаяСтруктура.Свойство(ИмяПоля, ЗначениеПоля) Тогда
|
||||
Если ПроверятьЗаполненность И ЗначениеЗаполнено(ЗначениеПоля) Или Не ПроверятьЗаполненность Тогда
|
||||
Возврат ЗначениеПоля;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЗначениеПоУмолчанию;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЗначениеСоответствия
|
||||
// Возвращает требуемое поле соответствия. В случае отсутствия поля возвращает значение по умолчанию
|
||||
//
|
||||
// Параметры:
|
||||
// ИсходноеСоответствие - Соответствие - Исходное соответствия
|
||||
// ИмяПоля - Строка - Имя поля соответствия
|
||||
// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено, если поля в соответствии нет
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Значение искомого поля структуры
|
||||
//
|
||||
Функция ЗначениеСоответствия(Знач ИсходноеСоответствие, ИмяПоля, Знач ЗначениеПоУмолчанию = Неопределено) Экспорт
|
||||
|
||||
Если ПустаяСтрока(ИмяПоля) Тогда
|
||||
|
||||
Возврат ЗначениеПоУмолчанию;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеПоля = ИсходноеСоответствие.Получить(ИмяПоля);
|
||||
Если ЗначениеПоля <> Неопределено Тогда
|
||||
|
||||
Возврат ЗначениеПоля;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЗначениеПоУмолчанию;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОбъединитьВСтруктуру
|
||||
// Функция, объединяющая две коллекции( с типами Структура или Соответствие) в одну структуру, если это возможно
|
||||
//
|
||||
// Параметры:
|
||||
// Коллекция1 - Соответствие, Структура - Коллекция с типом структура или соответствие
|
||||
// Коллекция2 - Соответствие, Структура - Коллекция с типом структура или соответствие
|
||||
// РезультатВФиксированнуюКоллекцию - Булево - Признак фиксированной коллекции, необязательный, по умолчанию Ложь,
|
||||
// если Истина, возвращает фиксированная коллекция
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Результат объединения двух коллекций
|
||||
//
|
||||
Функция ОбъединитьВСтруктуру(Знач Коллекция1, Коллекция2, РезультатВФиксированнуюКоллекцию = Ложь) Экспорт
|
||||
|
||||
Если ТипЗнч(Коллекция1) <> Тип("Структура") Тогда
|
||||
|
||||
Коллекция1 = СкопироватьСтруктуру(Коллекция1);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураРезультат = ДобавитьКлючИЗначениеВКоллекцию(Коллекция1, Коллекция2);
|
||||
|
||||
Возврат ?(РезультатВФиксированнуюКоллекцию, Новый ФиксированнаяСтруктура(СтруктураРезультат), СтруктураРезультат);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СкопироватьРекурсивно
|
||||
// Создает копию экземпляра указанного объекта.
|
||||
// Примечание:
|
||||
// Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.).
|
||||
//
|
||||
// Параметры:
|
||||
// Источник - Произвольный - объект, который необходимо скопировать.
|
||||
// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - копия объекта, переданного в параметре Источник.
|
||||
//
|
||||
Функция СкопироватьРекурсивно(Знач Источник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт
|
||||
|
||||
Перем Приемник;
|
||||
|
||||
СкопироватьПрисвоением = Ложь;
|
||||
|
||||
ТипИсточника = ТипЗнч(Источник);
|
||||
Если ТипИсточника = Тип("Структура") Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда
|
||||
|
||||
Приемник = СкопироватьСтруктуру(Источник, ФиксированнаяКоллекцияВОбычную);
|
||||
|
||||
ИначеЕсли ТипИсточника = Тип("Соответствие") Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда
|
||||
|
||||
Приемник = СкопироватьСоответствие(Источник, ФиксированнаяКоллекцияВОбычную);
|
||||
|
||||
ИначеЕсли ТипИсточника = Тип("Массив") Или ТипИсточника = Тип("ФиксированныйМассив") Тогда
|
||||
|
||||
Приемник = СкопироватьМассив(Источник, ФиксированнаяКоллекцияВОбычную);
|
||||
|
||||
ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда
|
||||
|
||||
Приемник = СкопироватьСписокЗначений(Источник, ФиксированнаяКоллекцияВОбычную);
|
||||
|
||||
Иначе
|
||||
|
||||
СкопироватьПрисвоением = Истина;
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
Если ТипИсточника = Тип("ТаблицаЗначений") Или ТипИсточника = Тип("ДеревоЗначений") Тогда
|
||||
|
||||
СкопироватьПрисвоением = Ложь;
|
||||
Приемник = Источник.Скопировать();
|
||||
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если СкопироватьПрисвоением Тогда
|
||||
|
||||
Приемник = Источник;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Приемник;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СкопироватьСтруктуру
|
||||
// Создает копию значения типа Структура
|
||||
//
|
||||
// Параметры:
|
||||
// СтруктураИсточник - Структура - копируемая структура
|
||||
// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - копия исходной структуры.
|
||||
//
|
||||
Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт
|
||||
|
||||
СтруктураРезультат = Новый Структура;
|
||||
|
||||
Для Каждого КлючИЗначение Из СтруктураИсточник Цикл
|
||||
|
||||
СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение,
|
||||
ФиксированнаяКоллекцияВОбычную));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") И Не ФиксированнаяКоллекцияВОбычную Тогда
|
||||
|
||||
СтруктураРезультат = Новый ФиксированнаяСтруктура(СтруктураРезультат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтруктураРезультат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СкопироватьСоответствие
|
||||
// Создает копию значения типа Соответствие.
|
||||
//
|
||||
// Параметры:
|
||||
// СоответствиеИсточник - Соответствие - соответствие, копию которого необходимо получить.
|
||||
// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - копия исходного соответствия.
|
||||
//
|
||||
Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт
|
||||
|
||||
СоответствиеРезультат = Новый Соответствие;
|
||||
|
||||
Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл
|
||||
|
||||
СоответствиеРезультат.Вставить(СкопироватьРекурсивно(КлючИЗначение.Ключ, ФиксированнаяКоллекцияВОбычную),
|
||||
СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксированнаяКоллекцияВОбычную));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") И Не ФиксированнаяКоллекцияВОбычную Тогда
|
||||
|
||||
СоответствиеРезультат = Новый ФиксированноеСоответствие(СоответствиеРезультат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СоответствиеРезультат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СкопироватьМассив
|
||||
// Создает копию значения типа Массив.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивИсточник - Массив - массив, копию которого необходимо получить
|
||||
// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - копия исходного массива.
|
||||
//
|
||||
Функция СкопироватьМассив(МассивИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт
|
||||
|
||||
МассивРезультат = Новый Массив;
|
||||
|
||||
Для Каждого Элемент Из МассивИсточник Цикл
|
||||
|
||||
МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксированнаяКоллекцияВОбычную));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") И Не ФиксированнаяКоллекцияВОбычную Тогда
|
||||
|
||||
МассивРезультат = Новый ФиксированныйМассив(МассивРезультат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат МассивРезультат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СкопироватьСписокЗначений
|
||||
// Создает копию значения типа СписокЗначений.
|
||||
//
|
||||
// Параметры:
|
||||
// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить
|
||||
// ФиксированнаяКоллекцияВОбычную - Булево - Если значение равно Истина, то из Фиксированной коллекции формируется обычная
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СписокЗначений - копия исходного списка значений
|
||||
//
|
||||
Функция СкопироватьСписокЗначений(СписокИсточник, ФиксированнаяКоллекцияВОбычную = Ложь) Экспорт
|
||||
|
||||
СписокРезультат = Новый СписокЗначений;
|
||||
|
||||
Для Каждого ЭлементСписка Из СписокИсточник Цикл
|
||||
|
||||
СписокРезультат.Добавить(
|
||||
СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксированнаяКоллекцияВОбычную), ЭлементСписка.Представление,
|
||||
ЭлементСписка.Пометка, ЭлементСписка.Картинка);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СписокРезультат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СтруктурыРавны
|
||||
// Выполняет сравнение структур между собой
|
||||
// Параметры:
|
||||
// Структура1 - Структура - Первая структура
|
||||
// Структура2 - Структура - Вторая структура
|
||||
// СравниватьТолькоКлючи - Булево - Сравнивать только ключи либо и значения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Равнозначность структур
|
||||
Функция СтруктурыРавны(Структура1, Структура2, СравниватьТолькоКлючи = Истина) Экспорт
|
||||
Если Структура1.Количество() <> Структура2.Количество() Тогда
|
||||
Возврат Ложь;
|
||||
Иначе
|
||||
Для Каждого Свойство Из Структура1 Цикл
|
||||
Если Не Структура2.Свойство(Свойство.Ключ) Или Не СравниватьТолькоКлючи И ЗначениеСтруктуры(Структура2,
|
||||
Свойство.Ключ) <> Свойство.Значение Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Истина;
|
||||
КонецФункции
|
||||
|
||||
Функция ВыгрузитьЗначения(Знач Коллекция, Знач ИмяРеквизита) Экспорт
|
||||
|
||||
Результат = Новый Массив();
|
||||
|
||||
Для Каждого ЭлементКоллекции Из Коллекция Цикл
|
||||
|
||||
Результат.Добавить(ЭлементКоллекции[ИмяРеквизита]);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПересечениеМассивов(Коллекция1, Коллекция2) Экспорт
|
||||
|
||||
Результат = Новый Массив;
|
||||
|
||||
Для Каждого Элемент Из Коллекция1 Цикл
|
||||
|
||||
Если Коллекция2.Найти(Элемент) <> Неопределено Тогда
|
||||
Результат.Добавить(Элемент);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеВМассиве(Значение,
|
||||
Значение2 = Неопределено,
|
||||
Значение3 = Неопределено,
|
||||
Значение4 = Неопределено,
|
||||
Значение5 = Неопределено,
|
||||
Значение6 = Неопределено,
|
||||
Значение7 = Неопределено,
|
||||
Значение8 = Неопределено,
|
||||
Значение9 = Неопределено) Экспорт
|
||||
|
||||
Массив = Новый Массив;
|
||||
Массив.Добавить(Значение);
|
||||
|
||||
Если Не Значение2 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение2);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение3 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение3);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение4 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение4);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение5 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение5);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение6 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение6);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение7 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение7);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение8 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение8);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Значение9 = Неопределено Тогда
|
||||
|
||||
Массив.Добавить(Значение9);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Массив;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДополнитьМассив(Приемник, Источник) Экспорт
|
||||
|
||||
Для Каждого Элемент Из Источник Цикл
|
||||
|
||||
Приемник.Добавить(Элемент);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// КоллекцияВСоответствие
|
||||
// Возвращает соответствие элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции.
|
||||
//
|
||||
// Параметры:
|
||||
// Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки.
|
||||
// ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия.
|
||||
// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции.
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - полученное соответствие.
|
||||
Функция КоллекцияВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт
|
||||
|
||||
Результат = Новый Соответствие();
|
||||
|
||||
Для Каждого ЭлементКоллекции Из Коллекция Цикл
|
||||
|
||||
Значение = ?(ИмяПоляЗначения = Неопределено, ЭлементКоллекции, ЭлементКоллекции[ИмяПоляЗначения]);
|
||||
|
||||
Результат.Вставить(ЭлементКоллекции[ИмяПоляКлюча], Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЧтениеДанных
|
||||
|
||||
Функция ДанныеТекстовогоФайла(ИмяФайла) Экспорт
|
||||
|
||||
#Если НЕ ВебКлиент Тогда
|
||||
Чтение = Новый ЧтениеТекста;
|
||||
Чтение.Открыть(ИмяФайла, "UTF-8");
|
||||
Текст = Чтение.Прочитать();
|
||||
Чтение.Закрыть();
|
||||
|
||||
Возврат Текст;
|
||||
#Иначе
|
||||
ВызватьИсключение "Чтение данных текстовых файлов в веб-клиенте не поддерживается";
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеИзJSON(СтрокаJSON) Экспорт
|
||||
|
||||
#Если НЕ ВебКлиент Тогда
|
||||
Чтение = Новый ЧтениеJSON;
|
||||
Чтение.УстановитьСтроку(СтрокаJSON);
|
||||
Значение = ПрочитатьJSON(Чтение);
|
||||
Чтение.Закрыть();
|
||||
Возврат Значение;
|
||||
#Иначе
|
||||
ВызватьИсключение "Разбор JSON строки в веб-клиенте не поддерживается";
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
// МетодМодуляСуществует
|
||||
// Проверяет существование публичного (экспортного) метода у объекта
|
||||
// Параметры:
|
||||
// ИмяМодуля - Строка - Имя модуля, метод которого нужно поискать
|
||||
// ИмяМетода - Строка - Имя метода, который ищем
|
||||
// КоличествоПараметров - Число - Количество параметров метода, увы это никак не влияет на проверку
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Метод найден
|
||||
Функция МетодМодуляСуществует(ИмяМодуля, ИмяМетода, КоличествоПараметров = 0) Экспорт
|
||||
|
||||
Алгоритм = СтрШаблон("%1.%2(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)", ИмяМодуля, ИмяМетода);
|
||||
|
||||
МетодСуществует = Ложь;
|
||||
|
||||
Попытка
|
||||
Выполнить(Алгоритм);
|
||||
Исключение
|
||||
МетодСуществует = СтрНайти(НРег(ИнформацияОбОшибке().Описание), "(" + НРег(ИмяМетода) + ")") = 0;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат МетодСуществует;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ПеременнаяСодержитСвойство
|
||||
// функция проверяет наличие свойства у значения любого типа данных. Если передано НЕОПРЕДЕЛЕНО, то ф-ия всегда вернет Ложь
|
||||
//
|
||||
// Параметры:
|
||||
// Переменная - Произвольный - переменная любого типа, для которой необходимо проверить наличие свойства
|
||||
// ИмяСвойства - Строка - переменная типа "Строка", содержащая искомое свойства
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - признак наличия свойства у значения
|
||||
//
|
||||
Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства) Экспорт
|
||||
|
||||
Если Переменная = Неопределено Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
// Инициализируем структуру для теста с ключом (значение переменной "ИмяСвойства") и значением произвольного GUID'а
|
||||
GUIDПроверка = Новый УникальныйИдентификатор;
|
||||
СтруктураПроверка = Новый Структура;
|
||||
СтруктураПроверка.Вставить(ИмяСвойства, GUIDПроверка);
|
||||
// Заполняем созданную структуру из переданного значения переменной
|
||||
ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная);
|
||||
// Если значение для свойства структуры осталось GUIDПроверка, то искомое свойство не найдено, и наоборот.
|
||||
Возврат СтруктураПроверка[ИмяСвойства] <> GUIDПроверка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СообщитьПользователю
|
||||
// Формирует и выводит сообщение, которое может быть связано с элементом
|
||||
// управления формы.
|
||||
//
|
||||
// Параметры:
|
||||
// ТекстСообщенияПользователю - Строка - текст сообщения.
|
||||
// Поле - Строка - наименование реквизита формы
|
||||
// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы)
|
||||
// ОбъектИлиСсылка - Объект, Ссылка - Ссылка на объект ИБ или объект
|
||||
// ИдентификаторНазначения - Строка, УникальныйИдентификатор - Уникальный идентификатор экземпляра формы
|
||||
// к которой должно быть "привязано" сообщение
|
||||
//
|
||||
Процедура СообщитьПользователю(ТекстСообщенияПользователю = "", Поле = "",
|
||||
ПутьКДанным = "", ОбъектИлиСсылка = Неопределено,
|
||||
Знач ИдентификаторНазначения = "") Экспорт
|
||||
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = СокрЛП(ТекстСообщенияПользователю);
|
||||
Сообщение.Поле = Поле;
|
||||
|
||||
Если ЗначениеЗаполнено(ИдентификаторНазначения) Тогда
|
||||
|
||||
Если ТипЗнч(ИдентификаторНазначения) = Тип("Строка") Тогда
|
||||
|
||||
ИдентификаторНазначения = Новый УникальныйИдентификатор(ИдентификаторНазначения);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Сообщение.ИдентификаторНазначения = ИдентификаторНазначения;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПустаяСтрока(ПутьКДанным) Тогда
|
||||
|
||||
Сообщение.ПутьКДанным = ПутьКДанным;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбъектИлиСсылка <> Неопределено Тогда
|
||||
|
||||
Сообщение.УстановитьДанные(ОбъектИлиСсылка);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Сообщение.Сообщить();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ДобавитьКлючИЗначениеВКоллекцию(КоллекцияРезультат, Коллекция)
|
||||
|
||||
Для Каждого Элемент Из Коллекция Цикл
|
||||
|
||||
КоллекцияРезультат.Вставить(Элемент.Ключ, Элемент.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат КоллекцияРезультат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Модуль(ИмяМодуля) Экспорт
|
||||
|
||||
Возврат Вычислить(ИмяМодуля);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
12
exts/yaxunit/src/CommonModules/ЮТОбщий/ЮТОбщий.mdo
Normal file
12
exts/yaxunit/src/CommonModules/ЮТОбщий/ЮТОбщий.mdo
Normal 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="e2572c15-7380-4e36-b49b-8fddc7d3c0c3">
|
||||
<name>ЮТОбщий</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Общий</value>
|
||||
</synonym>
|
||||
<comment>Набор общих (во всех контекстах) методов</comment>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
124
exts/yaxunit/src/CommonModules/ЮТОтчет/Module.bsl
Normal file
124
exts/yaxunit/src/CommonModules/ЮТОтчет/Module.bsl
Normal file
@ -0,0 +1,124 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// СформироватьОтчет
|
||||
// Формирует отчет о результатах тестирования по заданным параметрам
|
||||
// Параметры:
|
||||
// РезультатВыполнения - Массив - Коллекция результатов выполнения, каждый элемент - структура, см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// ПараметрыЗапуска - Струкрура - Параметры запуска, см. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска) Экспорт
|
||||
|
||||
Модули = ГенераторыОтчетов();
|
||||
МодульОтчета = Неопределено;
|
||||
|
||||
Для Каждого Модуль Из Модули Цикл
|
||||
|
||||
Если Модуль.РеализуетФормат(ПараметрыЗапуска.reportFormat) Тогда
|
||||
МодульОтчета = Модуль;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если МодульОтчета = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение СтрШаблон("Отчет в формате %1 не поддерживается", ПараметрыЗапуска.reportFormat);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИмяФайлаОтчета = ИмяФайлаОтчета(Модуль, ПараметрыЗапуска);
|
||||
ДанныеОтчета = Модуль.ДанныеОтчета(РезультатВыполнения);
|
||||
|
||||
Если ДанныеОтчета = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение "Не удалось получить данные отчета";
|
||||
|
||||
ИначеЕсли НЕ ЗначениеЗаполнено(ИмяФайлаОтчета) Тогда
|
||||
|
||||
ВызватьИсключение "Не удалось сформировать имя файла отчета";
|
||||
|
||||
Иначе
|
||||
|
||||
ДанныеОтчета.Записать(ИмяФайлаОтчета);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ГенераторыОтчетов()
|
||||
|
||||
ИменаМодулей = ЮТМетаданныеСервер.МодулиПодсистемы("ЮТФормированиеОтчета");
|
||||
|
||||
Модули = Новый Массив();
|
||||
|
||||
Для Каждого ИмяМодуля Из ИменаМодулей Цикл
|
||||
|
||||
Модуль = ЮТОбщий.Модуль(ИмяМодуля);
|
||||
Модули.Добавить(Модуль);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Модули;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяФайлаОтчета(Модуль, ПараметрыЗапуска)
|
||||
|
||||
ИмяФайла = Неопределено;
|
||||
|
||||
ПутьКОтчету = ПараметрыЗапуска.reportPath;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ПутьКОтчету) Тогда
|
||||
ВызватьИсключение "Не указан путь сохранения отчета";
|
||||
КонецЕсли;
|
||||
|
||||
Файл = Новый Файл(ПутьКОтчету);
|
||||
|
||||
Если Файл.Существует() И Файл.ЭтоКаталог() Тогда
|
||||
ИмяФайла = Файл.ПолноеИмя + ПолучитьРазделительПути() + Модуль.ИмяФайлаПоУмолчанию();
|
||||
Иначе
|
||||
ИмяФайла = Файл.ПолноеИмя;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИмяФайла;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
10
exts/yaxunit/src/CommonModules/ЮТОтчет/ЮТОтчет.mdo
Normal file
10
exts/yaxunit/src/CommonModules/ЮТОтчет/ЮТОтчет.mdo
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="335b2e32-96e1-49dd-ace4-5b2eb8478c12">
|
||||
<name>ЮТОтчет</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Отчет</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
71
exts/yaxunit/src/CommonModules/ЮТОтчетJSON/Module.bsl
Normal file
71
exts/yaxunit/src/CommonModules/ЮТОтчетJSON/Module.bsl
Normal file
@ -0,0 +1,71 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция РеализуетФормат(ФорматОтчета) Экспорт
|
||||
|
||||
Возврат СтрСравнить(ФорматОтчета, "json") = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяФайлаПоУмолчанию() Экспорт
|
||||
|
||||
Возврат "report.json";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДанныеОтчета(РезультатВыполнения) Экспорт
|
||||
|
||||
#Если ВебКлиент Тогда
|
||||
ВызватьИсключение "Формирование отчета в формате JSON не поддерживается в web-клиенте";
|
||||
#Иначе
|
||||
Поток = Новый ПотокВПамяти();
|
||||
Запись = Новый ЗаписьJSON();
|
||||
Запись.ОткрытьПоток(Поток, "UTF-8", Ложь);
|
||||
|
||||
ЗаписатьJSON(Запись, РезультатВыполнения);
|
||||
|
||||
Запись.Закрыть();
|
||||
|
||||
Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
10
exts/yaxunit/src/CommonModules/ЮТОтчетJSON/ЮТОтчетJSON.mdo
Normal file
10
exts/yaxunit/src/CommonModules/ЮТОтчетJSON/ЮТОтчетJSON.mdo
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f477925a-39e1-4150-a0c4-897bbaee9433">
|
||||
<name>ЮТОтчетJSON</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Отчет JSON</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
321
exts/yaxunit/src/CommonModules/ЮТОтчетJUnit/Module.bsl
Normal file
321
exts/yaxunit/src/CommonModules/ЮТОтчетJUnit/Module.bsl
Normal file
@ -0,0 +1,321 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция РеализуетФормат(ФорматОтчета) Экспорт
|
||||
|
||||
Возврат СтрСравнить(ФорматОтчета, "jUnit") = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяФайлаПоУмолчанию() Экспорт
|
||||
|
||||
Возврат "junit.xml";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДанныеОтчета(Знач РезультатВыполнения) Экспорт
|
||||
|
||||
Возврат СформироватьОтчетОТестировании(РезультатВыполнения);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// СформироватьОтчетОТестировании
|
||||
// Формирует отчет (xml-файл) и возвращает его в виде двоичных данных
|
||||
//
|
||||
// Параметры:
|
||||
// РезультатТестирования - Массив - результаты всех сценариев теста
|
||||
// Возвращаемое значение:
|
||||
// ДвоичныеДанные - полученный отчет
|
||||
Функция СформироватьОтчетОТестировании(РезультатТестирования) Экспорт
|
||||
|
||||
Поток = Новый ПотокВПамяти();
|
||||
ЗаписьXML = Новый ЗаписьXML;
|
||||
|
||||
ЗаписьXML.ОткрытьПоток(Поток, "UTF-8", Ложь);
|
||||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("testsuites");
|
||||
|
||||
Номер = 0;
|
||||
|
||||
Для Каждого Набор Из РезультатТестирования Цикл
|
||||
ЗаписатьНабор(ЗаписьXML, Набор, Номер);
|
||||
Номер = Номер + 1;
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписатьСвойства(ЗаписьXML, Новый Структура("executor, reportDate", "BIA YAXUnit", ТекущаяДатаСеанса()));
|
||||
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
ЗаписьXML.Закрыть();
|
||||
|
||||
Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЗаписатьРезультатТеста
|
||||
//
|
||||
// Параметры:
|
||||
// ЗаписьXML - ЗаписьXML - Запись XML
|
||||
// РезультатТеста - Структура - Результат теста
|
||||
Процедура ЗаписатьТест(ЗаписьXML, РезультатТеста)
|
||||
|
||||
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("testcase");
|
||||
ЗаписьXML.ЗаписатьАтрибут("name", РезультатТеста.Имя);
|
||||
ЗаписьXML.ЗаписатьАтрибут("classname", РезультатТеста.ПолноеИмяМетода);
|
||||
ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ПродолжительностьВСекундах(РезультатТеста.Длительность)));
|
||||
|
||||
Сообщение = СообщениеОбОшибке(РезультатТеста);
|
||||
|
||||
Если РезультатТеста.Статус = Статусы.Ошибка Тогда
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("failure");
|
||||
ЗаписьXML.ЗаписатьАтрибут("message", Сообщение);
|
||||
|
||||
Если ЗначениеЗаполнено(РезультатТеста.ОписаниеОшибки.ТипОшибки) Тогда
|
||||
ЗаписьXML.ЗаписатьАтрибут("type", XMLСтрока(РезультатТеста.ОписаниеОшибки.ТипОшибки));
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("expected");
|
||||
ЗаписьXML.ЗаписатьТекст(ЗначениеВСтрокуjUnit(РезультатТеста.ОписаниеОшибки.ОжидаемоеЗначение));
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("actual");
|
||||
ЗаписьXML.ЗаписатьТекст(ЗначениеВСтрокуjUnit(РезультатТеста.ОписаниеОшибки.ПроверяемоеЗначение));
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
ЗаписьXML.ЗаписатьТекст(РезультатТеста.ОписаниеОшибки.Стек);
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
ИначеЕсли РезультатТеста.Статус = Статусы.Пропущен Тогда
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("skipped");
|
||||
ЗаписьXML.ЗаписатьАтрибут("message", Сообщение);
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
ИначеЕсли РезультатТеста.Статус = Статусы.Ожидание Тогда
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("skipped");
|
||||
ЗаписьXML.ЗаписатьАтрибут("message", "Тест не был вызван");
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
ИначеЕсли РезультатТеста.Статус <> Статусы.Успешно Тогда
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("error");
|
||||
ЗаписьXML.ЗаписатьАтрибут("message", Сообщение);
|
||||
|
||||
Если ЗначениеЗаполнено(РезультатТеста.ОписаниеОшибки.ТипОшибки) Тогда
|
||||
ЗаписьXML.ЗаписатьАтрибут("type", XMLСтрока(РезультатТеста.ОписаниеОшибки.ТипОшибки));
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписьXML.ЗаписатьТекст(РезультатТеста.ОписаниеОшибки.Стек);
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьНабор(ЗаписьXML, Набор, Номер)
|
||||
|
||||
КоличествоТестов = 0;
|
||||
КоличествоПропущенных = 0;
|
||||
КоличествоУпавших = 0;
|
||||
КоличествоСломанных = 0;
|
||||
|
||||
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
|
||||
Для Каждого РезультатТеста Из Набор.Тесты Цикл
|
||||
|
||||
КоличествоТестов = КоличествоТестов + 1;
|
||||
|
||||
Если РезультатТеста.Статус = Статусы.Ошибка Тогда
|
||||
КоличествоУпавших = КоличествоУпавших + 1;
|
||||
ИначеЕсли РезультатТеста.Статус = Статусы.Пропущен ИЛИ РезультатТеста.Статус = Статусы.Ожидание Тогда
|
||||
КоличествоПропущенных = КоличествоПропущенных + 1;
|
||||
ИначеЕсли РезультатТеста.Статус <> Статусы.Успешно Тогда
|
||||
КоличествоСломанных = КоличествоСломанных + 1;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("testsuite");
|
||||
ЗаписьXML.ЗаписатьАтрибут("id", XMLСтрока(Номер));
|
||||
ЗаписьXML.ЗаписатьАтрибут("name", СтрШаблон("%1. %2", Набор.Представление, Набор.Режим));
|
||||
ЗаписьXML.ЗаписатьАтрибут("tests", XMLСтрока(КоличествоТестов));
|
||||
ЗаписьXML.ЗаписатьАтрибут("errors", XMLСтрока(КоличествоСломанных));
|
||||
ЗаписьXML.ЗаписатьАтрибут("skipped", XMLСтрока(КоличествоПропущенных));
|
||||
ЗаписьXML.ЗаписатьАтрибут("failures", XMLСтрока(КоличествоУпавших));
|
||||
ЗаписьXML.ЗаписатьАтрибут("timestamp", XMLСтрока(МестноеВремяПоВременнойМетке(Набор.ДатаСтарта)));
|
||||
ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ПродолжительностьВСекундах(Набор.Длительность)));
|
||||
ЗаписьXML.ЗаписатьАтрибут("package", Набор.МетаданныеМодуля.Имя);
|
||||
|
||||
Если ЗначениеЗаполнено(Набор.ОписаниеОшибки) Тогда
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("error");
|
||||
ЗаписьXML.ЗаписатьТекст(СообщениеОбОшибке(Набор));
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого РезультатТеста Из Набор.Тесты Цикл
|
||||
|
||||
ЗаписатьТест(ЗаписьXML, РезультатТеста);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписатьСвойства(ЗаписьXML, Новый Структура("context", Набор.Режим));
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента(); // testsuite
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗначениеВСтрокуjUnit(Знач Значение)
|
||||
|
||||
ТипЗначения = ТипЗнч(Значение);
|
||||
|
||||
Если ТипЗначения = Тип("Строка") Тогда
|
||||
|
||||
Возврат XMLСтрока(Значение);
|
||||
|
||||
ИначеЕсли ТипЗначения = Тип("Массив") Тогда
|
||||
|
||||
Возврат ЗначениеВСтрокуМассивjUnit(Значение);
|
||||
|
||||
ИначеЕсли ТипЗначения = Тип("Структура") Или ТипЗначения = Тип("Соответствие") Или ТипЗначения = Тип("СписокЗначений") Тогда
|
||||
|
||||
Возврат ЗначениеВСтрокуПростаяКоллекцияjUnit(Значение);
|
||||
|
||||
ИначеЕсли ТипЗначения = Тип("Тип") Или ТипЗначения = Тип("СтандартныйПериод") Тогда
|
||||
|
||||
Возврат Строка(Значение);
|
||||
|
||||
Иначе
|
||||
|
||||
Попытка
|
||||
|
||||
Возврат XMLСтрока(Значение);
|
||||
|
||||
Исключение
|
||||
|
||||
Возврат Строка(Значение);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеВСтрокуМассивjUnit(Коллекция)
|
||||
|
||||
Стр = "";
|
||||
|
||||
Для Ккк = 0 По Коллекция.Количество() - 1 Цикл
|
||||
|
||||
Стр = Стр + ЗначениеВСтрокуjUnit(Коллекция[Ккк]);
|
||||
|
||||
Если Ккк < Коллекция.Количество() - 1 Тогда
|
||||
|
||||
Стр = Стр + Символы.ПС;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Стр;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеВСтрокуПростаяКоллекцияjUnit(Коллекция)
|
||||
|
||||
Стр = "|";
|
||||
|
||||
Для Каждого Элем Из Коллекция Цикл
|
||||
|
||||
Стр = " " + Стр + Элем.Значение + " |";
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Стр;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СообщениеОбОшибке(Объект)
|
||||
|
||||
Если ТипЗнч(Объект.ОписаниеОшибки) = Тип("Структура") Тогда
|
||||
Сообщение = Объект.ОписаниеОшибки.Сообщение;
|
||||
ИначеЕсли ЗначениеЗаполнено(Объект.ОписаниеОшибки) Тогда
|
||||
Сообщение = Строка(Объект.ОписаниеОшибки);
|
||||
Иначе
|
||||
Сообщение = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Сообщение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция МестноеВремяПоВременнойМетке(Метка)
|
||||
|
||||
Возврат МестноеВремя('00010101' + Метка / 1000);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПродолжительностьВСекундах(Продолжительность)
|
||||
|
||||
Возврат Продолжительность / 1000;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьСвойства(ЗаписьXML, Свойства)
|
||||
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("properties");
|
||||
|
||||
Для Каждого Свойство Из Свойства Цикл
|
||||
ЗаписьXML.ЗаписатьНачалоЭлемента("property");
|
||||
ЗаписьXML.ЗаписатьАтрибут("name", Свойство.Ключ);
|
||||
ЗаписьXML.ЗаписатьАтрибут("value", ЗначениеВСтрокуjUnit(Свойство.Значение));
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента(); // property
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписьXML.ЗаписатьКонецЭлемента(); // properties
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
11
exts/yaxunit/src/CommonModules/ЮТОтчетJUnit/ЮТОтчетJUnit.mdo
Normal file
11
exts/yaxunit/src/CommonModules/ЮТОтчетJUnit/ЮТОтчетJUnit.mdo
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="44860213-5b5a-4765-960c-07c8d1ca6f08">
|
||||
<name>ЮТОтчетJUnit</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Отчет jUnit</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
178
exts/yaxunit/src/CommonModules/ЮТПараметры/Module.bsl
Normal file
178
exts/yaxunit/src/CommonModules/ЮТПараметры/Module.bsl
Normal file
@ -0,0 +1,178 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// ПараметрыЗапуска
|
||||
// Возвращает загруженные параметры запуска тестирования
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаСтрокой - Строка - Параметры запуска приложения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Загруженные параметры запуска, см. ЮТФабрика.ПараметрыЗапуска
|
||||
Функция ПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой) Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Параметры = ПрочитатьПараметрыЗапуска(ПараметрыЗапускаСтрокой);
|
||||
|
||||
Исключение
|
||||
|
||||
ЮТРегистрацияОшибок.ОшибкаИнициализации(ИнформацияОбОшибке(), "Ошибка чтения параметров запуска");
|
||||
Параметры = ЮТФабрика.ПараметрыЗапуска();
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// ПрочитатьПараметрыЗапуска
|
||||
// Читает параметры из строки запуска
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаСтрокой - Строка - Строка с параметрами запуска.
|
||||
// Содержит ключ запуска и строку с конфигурационным файлом.
|
||||
// Формат строки "RunUnitTests=/путь/к/конфигурационному/файлу", где ключ указывается обязательно, а путь - по желанию
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Прочитанные параметры. См. Параметры
|
||||
Функция ПрочитатьПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой)
|
||||
|
||||
Параметры = ЮТФабрика.ПараметрыЗапуска();
|
||||
|
||||
Если Не ЗначениеЗаполнено(ПараметрыЗапускаСтрокой) Тогда
|
||||
Возврат Параметры;
|
||||
КонецЕсли;
|
||||
|
||||
ПарыКлючЗначение = ЮТОбщий.РазложитьСтрокуВМассивПодстрок(ПараметрыЗапускаСтрокой, ";", Истина);
|
||||
|
||||
ПараметрыЗапуска = Новый Структура;
|
||||
|
||||
Для Каждого Пара Из ПарыКлючЗначение Цикл
|
||||
|
||||
КлючЗначение = ЮТОбщий.РазложитьСтрокуВМассивПодстрок(Пара, "=", Истина);
|
||||
|
||||
Если КлючЗначение.Количество() = 1 Тогда
|
||||
ПараметрыЗапуска.Вставить(КлючЗначение[0], Истина);
|
||||
Иначе
|
||||
ПараметрыЗапуска.Вставить(КлючЗначение[0], КлючЗначение[1]);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗначениеКлючаЗапуска = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска, "RunUnitTests", Ложь);
|
||||
|
||||
Если ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Булево") Тогда
|
||||
|
||||
Параметры.ВыполнятьМодульноеТестирование = ЗначениеКлючаЗапуска;
|
||||
Возврат Параметры;
|
||||
|
||||
ИначеЕсли ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Строка") Тогда
|
||||
|
||||
Параметры.ВыполнятьМодульноеТестирование = Истина;
|
||||
КонфигурационныйФайл = ЗначениеКлючаЗапуска;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(КонфигурационныйФайл) Тогда
|
||||
|
||||
ПараметрыИзФайла = ПрочитатьКонфигурационныйФайл(КонфигурационныйФайл);
|
||||
|
||||
ДополнитьПараметрыПрочитанными(Параметры, ПараметрыИзФайла);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПрочитатьКонфигурационныйФайл(ПутьКФайлу)
|
||||
|
||||
#Если НЕ ВебКлиент Тогда
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
|
||||
Если Не Файл.Существует() Тогда
|
||||
ВызватьИсключение СтрШаблон("Ошибка загрузки настроек из файла: Файл '%1' не существует", ПутьКФайлу);
|
||||
КонецЕсли;
|
||||
|
||||
ДанныеФайла = Неопределено;
|
||||
|
||||
Попытка
|
||||
|
||||
Текст = ЮТОбщий.ДанныеТекстовогоФайла(ПутьКФайлу);
|
||||
|
||||
Если ЗначениеЗаполнено(Текст) Тогда
|
||||
ДанныеФайла = ЮТПараметрыСервер.ПрочитатьКонфигурационныйФайл(Текст);
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
ВызватьИсключение СтрШаблон("Ошибка загрузки настроек из файла: '%1'", Ошибка);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Возврат ДанныеФайла;
|
||||
|
||||
#Иначе
|
||||
// будут использованы параметры по умолчанию
|
||||
Возврат Новый Структура;
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДополнитьПараметрыПрочитанными(Параметры, ДанныеДополнения)
|
||||
|
||||
Для Каждого Параметр Из ДанныеДополнения Цикл
|
||||
|
||||
Если НЕ Параметры.Свойство(Параметр.Ключ) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Параметры[Параметр.Ключ]) = ТипЗнч(Параметр.Значение) Тогда
|
||||
|
||||
Параметры[Параметр.Ключ] = Параметр.Значение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
12
exts/yaxunit/src/CommonModules/ЮТПараметры/ЮТПараметры.mdo
Normal file
12
exts/yaxunit/src/CommonModules/ЮТПараметры/ЮТПараметры.mdo
Normal 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="a0e947cd-ee15-4ae9-bf95-21ed64042227">
|
||||
<name>ЮТПараметры</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Параметры</value>
|
||||
</synonym>
|
||||
<comment>Используется для обработки и дополнения параметров запуска тестов</comment>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
55
exts/yaxunit/src/CommonModules/ЮТПараметрыСервер/Module.bsl
Normal file
55
exts/yaxunit/src/CommonModules/ЮТПараметрыСервер/Module.bsl
Normal file
@ -0,0 +1,55 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ПрочитатьКонфигурационныйФайл(Знач ТекстИзФайла = "") Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Возврат ЮТОбщий.ЗначениеИзJSON(ТекстИзФайла);
|
||||
|
||||
Исключение
|
||||
|
||||
ВызватьИсключение СтрШаблон("Ошибка чтения конфигурационного файла: '%1'", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ae3fc89b-811b-4cd7-8403-bf334dfbed19">
|
||||
<name>ЮТПараметрыСервер</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Параметры сервер</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
@ -0,0 +1,45 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция АдресСерверногоКонтекста() Экспорт
|
||||
|
||||
Возврат ЮТКонтекстСервер.АдресСерверногоКонтекста(Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="30e72b21-62ac-4f48-999d-0ffc07e6e8a2">
|
||||
<name>ЮТПовторногоИспользования</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Повторного использования</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<returnValuesReuse>DuringSession</returnValuesReuse>
|
||||
</mdclass:CommonModule>
|
309
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl
Normal file
309
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl
Normal file
@ -0,0 +1,309 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// ОбработатьОшибкуТеста
|
||||
// Анализирует возникшую ошибку и прописывает ее в результатах теста
|
||||
// Параметры:
|
||||
// Тест - Структура - Тест, см. ЮТФабрика.ОписаниеИсполняемогоТеста
|
||||
// ИнформацияОбОшибке - ИнформацияОбОшибке, Структура - Информация о возникшей ошибке
|
||||
Процедура ОбработатьОшибкуТеста(Тест, ИнформацияОбОшибке) Экспорт
|
||||
|
||||
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
|
||||
Если ТипЗнч(ИнформацияОбОшибке) = Тип("Структура") Тогда
|
||||
|
||||
Тест.Статус = Статусы.Сломан;
|
||||
Тест.ОписаниеОшибки = ИнформацияОбОшибке;
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Описание = ИнформацияОбОшибке.Описание;
|
||||
|
||||
Если Описание = СтрШаблон("Метод объекта не обнаружен (%1)", Тест.Метод)
|
||||
И СтрНачинаетсяС(ИнформацияОбОшибке.ИсходнаяСтрока, Тест.ПолноеИмяМетода + "()") Тогда
|
||||
|
||||
Тест.Статус = Статусы.НеРеализован;
|
||||
Тест.ОписаниеОшибки = ДанныеОшибки(ИнформацияОбОшибке, ИнформацияОбОшибке.Описание, ЮТФабрика.ТипыОшибок().ТестНеРеализован);
|
||||
|
||||
ИначеЕсли СтрНачинаетсяС(Описание, ПрефиксОшибкиУтверждений()) Тогда
|
||||
|
||||
Тест.Статус = Статусы.Ошибка;
|
||||
Тест.ОписаниеОшибки = ДанныеОшибкиУтверждений(ИнформацияОбОшибке);
|
||||
|
||||
Иначе
|
||||
|
||||
Тест.Статус = Статусы.Сломан;
|
||||
Тест.ОписаниеОшибки = ДанныеОшибки(ИнформацияОбОшибке, ИнформацияОбОшибке.Описание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ДанныеОшибки(Ошибка, Сообщение, ТипОшибки = "") Экспорт
|
||||
|
||||
ДанныеОшибки = ЮТФабрика.ОписаниеВозникшейОшибки();
|
||||
|
||||
ДанныеОшибки.Сообщение = Сообщение;
|
||||
ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка);
|
||||
ДанныеОшибки.ТипОшибки = ТипОшибки;
|
||||
|
||||
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Сообщения = ЮТОбщий.ВыгрузитьЗначения(ПолучитьСообщенияПользователю(Истина), "Текст");
|
||||
ДанныеОшибки.Стек = СтрШаблон("%1
|
||||
|Сообщения пользователю:
|
||||
| %2", ДанныеОшибки.Стек, СтрСоединить(Сообщения, Символы.ПС));
|
||||
#КонецЕсли
|
||||
|
||||
Возврат ДанныеОшибки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОшибкаИнициализации(Ошибка, Описание) Экспорт
|
||||
|
||||
Ошибка(Ошибка, Описание);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПрефиксОшибкиУтверждений() Экспорт
|
||||
|
||||
Возврат "[Failed]";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПрефиксОшибкиВыполнения() Экспорт
|
||||
|
||||
Возврат "[Broken]";
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке) Экспорт
|
||||
|
||||
СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
|
||||
СтруктураОшибки.ОшибкаСравнения = Ложь;
|
||||
|
||||
ВызватьОшибкуИсполнения(ИнформацияОбОшибке);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СгенерироватьОшибкуУтверждения(Сообщение, ОжидаемоеЗначение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
|
||||
|
||||
УстановитьДанныеОшибкиСравнения(ОжидаемоеЗначение, ПроверяемоеЗначение);
|
||||
|
||||
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ПроверяемоеЗначение, Сообщение, ОбъектПроверки);
|
||||
|
||||
ВызватьОшибкуПроверки(ТекстСообщения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызватьОшибкуПроверки(Знач ТекстСообщения) Экспорт
|
||||
|
||||
ПрефиксОшибки = ЮТКонтекст.КонтекстПроверки().ПрефиксОшибки;
|
||||
|
||||
ТекстСообщения = ЮТОбщий.ДобавитьСтроку(ПрефиксОшибки, ТекстСообщения, ": ");
|
||||
// Начало строки в верхний регистр
|
||||
ТекстСообщения = ВРег(Лев(ТекстСообщения, 1)) + Сред(ТекстСообщения, 2);
|
||||
|
||||
ВызватьИсключение СтрШаблон("%1 <%2>", ПрефиксОшибкиУтверждений(), ТекстСообщения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызватьОшибкуИсполнения(Знач ИнформацияОбОшибке) Экспорт
|
||||
|
||||
ПрефиксОшибки = ЮТКонтекст.КонтекстПроверки().ПрефиксОшибки;
|
||||
|
||||
ТекстОшибки = ИнформациюОбОшибкеВСтроку(ИнформацияОбОшибке);
|
||||
|
||||
ТекстСообщения = ЮТОбщий.ДобавитьСтроку(ПрефиксОшибки, ТекстОшибки, ": ");
|
||||
// Начало строки в верхний регистр
|
||||
ТекстСообщения = ВРег(Лев(ТекстСообщения, 1)) + Сред(ТекстСообщения, 2);
|
||||
|
||||
ВызватьИсключение СтрШаблон("%1 <%2>", ПрефиксОшибкиВыполнения(), ТекстСообщения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьДанныеОшибкиСравнения(ОжидаемоеЗначение, ПроверяемоеЗначение) Экспорт
|
||||
|
||||
СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
|
||||
|
||||
СтруктураОшибки.ОшибкаСравнения = Истина;
|
||||
СтруктураОшибки.ПроверяемоеЗначение = Строка(ПроверяемоеЗначение);
|
||||
СтруктураОшибки.ОжидаемоеЗначение = Строка(ОжидаемоеЗначение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ДанныеОшибкиУтверждений(Ошибка)
|
||||
|
||||
ДлинаПрефикса = СтрДлина(ПрефиксОшибкиУтверждений());
|
||||
|
||||
Описание = Сред(Ошибка.Описание, ДлинаПрефикса + 1);
|
||||
Описание = СокрЛП(Описание);
|
||||
|
||||
Если СтрНачинаетсяС(Описание, "<") И СтрЗаканчиваетсяНа(Описание, ">") Тогда
|
||||
Описание = Сред(Описание, 2, СтрДлина(Описание) - 2);
|
||||
КонецЕсли;
|
||||
|
||||
ДанныеОшибки = ЮТФабрика.ОписаниеОшибкиСравнения();
|
||||
|
||||
ДанныеОшибки.Сообщение = Описание;
|
||||
ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка);
|
||||
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Сообщения = ЮТОбщий.ВыгрузитьЗначения(ПолучитьСообщенияПользователю(Истина), "Текст");
|
||||
ДанныеОшибки.Стек = СтрШаблон("%1
|
||||
|Сообщения пользователю:
|
||||
| %2", ДанныеОшибки.Стек, СтрСоединить(Сообщения, Символы.ПС));
|
||||
#КонецЕсли
|
||||
|
||||
СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
|
||||
|
||||
Если СтруктураОшибки <> Неопределено И СтруктураОшибки.ОшибкаСравнения Тогда
|
||||
ДанныеОшибки.ПроверяемоеЗначение = СтруктураОшибки.ПроверяемоеЗначение;
|
||||
ДанныеОшибки.ОжидаемоеЗначение = СтруктураОшибки.ОжидаемоеЗначение;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ДанныеОшибки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция МодулиУтверждений()
|
||||
|
||||
Возврат ЮТОбщий.ЗначениеВМассиве("ЮТУтверждения");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура Ошибка(Ошибка, Описание)
|
||||
|
||||
ТекстОшибки = СтрШаблон("%1: %2", Описание, ПодробноеПредставлениеОшибки(Ошибка));
|
||||
ЮТОбщий.СообщитьПользователю(ТекстОшибки);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ИнформациюОбОшибкеВСтроку(Ошибка, НомерПричины = 0)
|
||||
|
||||
ТекстОшибки = "";
|
||||
|
||||
Если Ошибка = Неопределено Тогда
|
||||
|
||||
ТекстОшибки = "Неизвестная ошибка.";
|
||||
|
||||
ИначеЕсли ТипЗнч(Ошибка) = Тип("Строка") Тогда
|
||||
|
||||
ТекстОшибки = Ошибка;
|
||||
|
||||
ИначеЕсли ЭтоОшибкаСлужебногоМодуля(Ошибка) Тогда
|
||||
|
||||
Если Ошибка.Причина = Неопределено Тогда
|
||||
|
||||
ТекстОшибки = Ошибка.Описание;
|
||||
|
||||
Иначе
|
||||
|
||||
ТекстОшибки = ИнформациюОбОшибкеВСтроку(Ошибка.Причина, НомерПричины);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
Если Не ПустаяСтрока(Ошибка.ИмяМодуля) Тогда
|
||||
|
||||
ТекстОшибки = ТекстОшибки + "{"
|
||||
+ Ошибка.ИмяМодуля + "("
|
||||
+ Ошибка.НомерСтроки + ")}: ";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекстОшибки = ТекстОшибки + Ошибка.Описание + ?(ПустаяСтрока(Ошибка.ИсходнаяСтрока), "", "
|
||||
|" + Ошибка.ИсходнаяСтрока);
|
||||
|
||||
Если Ошибка.Причина <> Неопределено Тогда
|
||||
|
||||
ТекстОшибки = ТекстОшибки + "
|
||||
|
|
||||
|ПРИЧИНА №" + Формат(НомерПричины + 1, "ЧГ=0") + "
|
||||
|" + ИнформациюОбОшибкеВСтроку(Ошибка.Причина, НомерПричины + 1);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТекстОшибки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоОшибкаСлужебногоМодуля(Ошибка)
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Ошибка.ИмяМодуля) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ИмяМодуля Из МодулиУтверждений() Цикл
|
||||
Если СтрНайти(Ошибка.ИмяМодуля, ИмяМодуля) > 0 Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ФорматированныйТекстОшибкиУтверждения(Знач ПроверяемоеЗначение, ТекстОжидания, ОбъектПроверки)
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстПроверки();
|
||||
ИмяСвойства = Контекст.ИмяСвойства;
|
||||
|
||||
Если ЗначениеЗаполнено(ИмяСвойства) Тогда
|
||||
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ИмяСвойства);
|
||||
ПроверяемоеЗначение = Контекст.ПроверяемоеЗначение;
|
||||
Иначе
|
||||
ВставкаСвойство = "";
|
||||
КонецЕсли;
|
||||
|
||||
// Заголовок сообщения
|
||||
ТекстСообщения = "";
|
||||
// Тело сообщения
|
||||
ТекстСообщения = СтрШаблон("ожидали, что %1 `%2`%3 %4, но это не так.",
|
||||
ОбъектПроверки,
|
||||
ПроверяемоеЗначение,
|
||||
ВставкаСвойство,
|
||||
ТекстОжидания);
|
||||
|
||||
Возврат ТекстСообщения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b3a750a1-8a8c-4b01-8968-ad88af6839de">
|
||||
<name>ЮТРегистрацияОшибок</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Регистрация ошибок</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
200
exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
Normal file
200
exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
Normal file
@ -0,0 +1,200 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// ПрограммныйИнтерфейс
|
||||
// Экспортные процедуры и функции для прикладного использования
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// СоздатьЭлемент
|
||||
// Создает новый элемент и возвращает его ссылку
|
||||
// Параметры:
|
||||
// Менеджер - Произвольный - Менеджер справочника/ПВХ и тд.
|
||||
// Наименование - Строка, Неопределено - Наименование элемента
|
||||
// Реквизиты - Структура, Неопределено - Значения реквизитов элемента
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ЛюбаяСсылка - Ссылка на созданный объект
|
||||
Функция СоздатьЭлемент(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено) Экспорт
|
||||
|
||||
Объект = Менеджер.СоздатьЭлемент();
|
||||
|
||||
Если ЗначениеЗаполнено(Наименование) Тогда
|
||||
Объект.Наименование = Наименование;
|
||||
Иначе
|
||||
Объект.Наименование = Новый УникальныйИдентификатор();
|
||||
КонецЕсли;
|
||||
|
||||
Если Реквизиты <> Неопределено Тогда
|
||||
ЗаполнитьЗначенияСвойств(Объект, Реквизиты);
|
||||
КонецЕсли;
|
||||
|
||||
Объект.Записать();
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СлучайноеЧисло
|
||||
// Генерирует и возвращает случайное число
|
||||
// Параметры:
|
||||
// Минимум - Неопределено, Число - Минимальное значение
|
||||
// Максимум - Неопределено, Число - Максимальное значение
|
||||
// ЗнаковПослеЗапятой - Число - Количество знаков после запятой
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Число - Случайное число
|
||||
Функция СлучайноеЧисло(Минимум = 0, Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт
|
||||
|
||||
Генератор = ЮТКонтекст.ЗначениеКонтекста("ГенераторСлучайныхЧисел");
|
||||
|
||||
Если Генератор = Неопределено Тогда
|
||||
Генератор = Новый ГенераторСлучайныхЧисел();
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста("ГенераторСлучайныхЧисел", Генератор);
|
||||
КонецЕсли;
|
||||
|
||||
Если Максимум = Неопределено Тогда
|
||||
Результат = Генератор.СлучайноеЧисло(Минимум);
|
||||
Иначе
|
||||
Результат = Генератор.СлучайноеЧисло(Минимум, Максимум);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗнаковПослеЗапятой > 0 Тогда
|
||||
Множитель = Pow(10, ЗнаковПослеЗапятой);
|
||||
Результат = Результат + Окр(Генератор.СлучайноеЧисло(0, Множитель) / Множитель, ЗнаковПослеЗапятой);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СлучайноеПоложительноеЧисло
|
||||
// Генерирует и возвращает случайное положительное число
|
||||
// Параметры:
|
||||
// Максимум - Неопределено, Число - Максимальное значение
|
||||
// ЗнаковПослеЗапятой - Число - Знаков после запятой
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Число - Случайное положительное число
|
||||
Функция СлучайноеПоложительноеЧисло(Максимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт
|
||||
|
||||
Возврат СлучайноеЧисло(1, Максимум, ЗнаковПослеЗапятой);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СлучайноеОтрицательноеЧисло
|
||||
//
|
||||
// Параметры:
|
||||
// Минимум - Неопределено, Число - Минимальное значение
|
||||
// ЗнаковПослеЗапятой - Число - Знаков после запятой
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Число - Случайное отрицательное число
|
||||
Функция СлучайноеОтрицательноеЧисло(Минимум = Неопределено, ЗнаковПослеЗапятой = 0) Экспорт
|
||||
|
||||
Возврат -СлучайноеЧисло(Минимум, 0, ЗнаковПослеЗапятой);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СлучайнаяСтрока
|
||||
// Генерирует и возвращает случайную строку указанной длины, строка может содержить цифры, английские и русские буквы в разных регистрах
|
||||
// Параметры:
|
||||
// Префикс - Строка - Префикс строки
|
||||
// Длина - Число - Длина генерируемой строки, без учета префикса
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Случайная строка
|
||||
Функция СлучайнаяСтрока(Префикс = "", Длина = 10) Экспорт
|
||||
|
||||
Строка = "1234567890абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
Результат = "";
|
||||
КоличествоСимволов = СтрДлина(Строка);
|
||||
|
||||
Для Инд = 1 По Длина Цикл
|
||||
|
||||
Результат = Результат + Сред(Строка, СлучайноеЧисло(1, КоличествоСимволов), 1);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СлучайныйIPАдрес
|
||||
// Генерирует и возвращает случайный IP адрес
|
||||
// Возвращаемое значение:
|
||||
// Строка - Случайный IP адрес
|
||||
Функция СлучайныйIPАдрес() Экспорт
|
||||
|
||||
Части = Новый Массив();
|
||||
Части.Добавить(СлучайноеЧисло(1, 253));
|
||||
Части.Добавить(СлучайноеЧисло(1, 253));
|
||||
Части.Добавить(СлучайноеЧисло(1, 253));
|
||||
Части.Добавить(СлучайноеЧисло(1, 253));
|
||||
|
||||
Возврат СтрСоединить(Части, ".");
|
||||
|
||||
КонецФункции
|
||||
|
||||
// УникальнаяСтрока
|
||||
// Генерирует и возвращает уникальную строку
|
||||
// Параметры:
|
||||
// Префикс - Строка - Префик строкис
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Уникальная строка
|
||||
Функция УникальнаяСтрока(Префикс = "") Экспорт
|
||||
|
||||
Возврат Префикс + Новый УникальныйИдентификатор();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СлучайноеЗначениеИзСписка
|
||||
// Возвращает случайный элемент списка
|
||||
// Параметры:
|
||||
// Список - Массив из Произвольный - Коллекция возможных значений
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - случайное значение из списка
|
||||
Функция СлучайноеЗначениеИзСписка(Список) Экспорт
|
||||
|
||||
Индекс = СлучайноеЧисло(0, Список.ВГраница());
|
||||
|
||||
Возврат Список[Индекс];
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2c9c92d6-ffbc-4e22-93dd-324d4533be61">
|
||||
<name>ЮТТестовыеДанные</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>ЮТТестовые данные</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
</mdclass:CommonModule>
|
265
exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl
Normal file
265
exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl
Normal file
@ -0,0 +1,265 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Содержит методы создания тестов и тестовых наборов
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// ТестовыйНабор
|
||||
// Создает и регистрирует набор, в который будут добавлятся последующие тесты
|
||||
// Параметры:
|
||||
// Имя - Строка - Имя набора тестов
|
||||
// ТегиСтрокой - Строка - Теги относящиеся к набору и вложенным тестам. Это строка разделенная запятыми
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// CommonModule.ЮТТесты - Этот же модуль, для замыкания
|
||||
Функция ТестовыйНабор(Имя, ТегиСтрокой = "") Экспорт
|
||||
|
||||
ИсполняемыеСценарии = СценарииМодуля();
|
||||
|
||||
Если Не ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) Тогда
|
||||
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии";
|
||||
КонецЕсли;
|
||||
|
||||
Если ПустаяСтрока(Имя) Тогда
|
||||
ВызватьИсключение "Имя тестового набора не может быть пустым";
|
||||
КонецЕсли;
|
||||
|
||||
НовыйТестовыйНабор = ЮТФабрика.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
|
||||
|
||||
ИсполняемыеСценарии.ТестовыеНаборы.Вставить(Имя, НовыйТестовыйНабор);
|
||||
УстановитьТекущийНабор(НовыйТестовыйНабор);
|
||||
|
||||
Возврат ЮТТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Тест
|
||||
// Регистрирует тест
|
||||
// Параметры:
|
||||
// ИмяТестовогоМетода - Строка - Имя тестового метода
|
||||
// ПредставлениеТеста - Строка - Представление теста
|
||||
// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми
|
||||
// Контексты - Строка - Контексты, строка перечисления контекстов вызова, разделенных запятой.
|
||||
// Возможные значения см. ЮТФабрика.КонтекстыВызова
|
||||
// Возвращаемое значение:
|
||||
// CommonModule.ЮТТесты - Этот же модуль, для замыкания
|
||||
Функция Тест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "", Контексты = Неопределено) Экспорт
|
||||
|
||||
Набор = ТекущийНабор();
|
||||
|
||||
ЭтоИсполняемыеСценарии = ЭтоИсполняемыеСценарии(Набор);
|
||||
ЭтоТестовыйНабор = ЭтоТестовыйНабор(Набор);
|
||||
|
||||
Если Не (ЭтоИсполняемыеСценарии Или ЭтоТестовыйНабор) Тогда
|
||||
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии или ЮТТесты.ТестовыйНабор";
|
||||
КонецЕсли;
|
||||
|
||||
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
|
||||
ВызватьИсключение "Имя тестового метода не может быть пустым";
|
||||
КонецЕсли;
|
||||
|
||||
Набор.Тесты.Добавить(ОписаниеТеста(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты));
|
||||
|
||||
Возврат ЮТТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ТестКлиент
|
||||
// Регистрирует текст вызывемый на клиенте
|
||||
// Параметры:
|
||||
// ИмяТестовогоМетода - Строка - Имя тестового метода
|
||||
// ПредставлениеТеста - Строка - Представление теста
|
||||
// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// CommonModule.ЮТТесты - Этот же модуль, для замыкания
|
||||
Функция ТестКлиент(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "") Экспорт
|
||||
|
||||
Тест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, КонтекстыВызоваКлиента());
|
||||
|
||||
Возврат ЮТТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Тест сервер.
|
||||
// Регистрирует текст вызывемый на сервере
|
||||
// Параметры:
|
||||
// ИмяТестовогоМетода - Строка - Имя тестового метода
|
||||
// ПредставлениеТеста - Строка - Представление теста
|
||||
// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// CommonModule.ЮТТесты - Этот же модуль, для замыкания
|
||||
Функция ТестСервер(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "") Экспорт
|
||||
|
||||
Режимы = ЮТФабрика.КонтекстыВызова();
|
||||
|
||||
Тест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Режимы.Сервер);
|
||||
|
||||
Возврат ЮТТесты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт
|
||||
|
||||
ИнициализироватьКонтекст(МетаданныеМодуля);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СценарииМодуля() Экспорт
|
||||
|
||||
Возврат Контекст().ИсполняемыеСценарии;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ИсполняемыеСценарии()
|
||||
|
||||
Структура = Новый Структура;
|
||||
Структура.Вставить("ТестовыеНаборы", Новый Соответствие);
|
||||
|
||||
НаборПоУмолчанию = ЮТФабрика.ОписаниеТестовогоНабора("Тесты");
|
||||
Структура.ТестовыеНаборы.Вставить(НаборПоУмолчанию.Имя, НаборПоУмолчанию);
|
||||
|
||||
Возврат Структура;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КонтекстыВызоваКлиента()
|
||||
|
||||
Режимы = ЮТФабрика.КонтекстыВызова();
|
||||
|
||||
Возврат СтрШаблон("%1, %2", Режимы.КлиентУправляемоеПриложение, Режимы.КлиентОбычноеПриложение);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КонтекстыВызоваПоУмолчанию()
|
||||
|
||||
Возврат СтрСоединить(ЮТФабрика.КонтекстыМодуля(Контекст().МетаданныеМодуля), ", ");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеТеста(Имя, Знач Представление, ТегиСтрокой, Знач Контексты)
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Контексты) Тогда
|
||||
Контексты = КонтекстыВызоваПоУмолчанию();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЮТФабрика.ОписаниеТеста(Имя, Представление, Контексты, ТегиСтрокой);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоИсполняемыеСценарии(ИсполняемыеСценарии)
|
||||
|
||||
Возврат ТипЗнч(ИсполняемыеСценарии) = Тип("Структура")
|
||||
И ТипЗнч(ЮТОбщий.ЗначениеСтруктуры(ИсполняемыеСценарии, "ТестовыеНаборы")) = Тип("Соответствие");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоТестовыйНабор(ТестовыйНабор)
|
||||
|
||||
Возврат ТипЗнч(ТестовыйНабор) = Тип("Структура")
|
||||
И ТипЗнч(ЮТОбщий.ЗначениеСтруктуры(ТестовыйНабор, "Тесты")) = Тип("Массив");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТестовыйНаборПоУмолчанию(ИсполняемыеСценарии)
|
||||
|
||||
Возврат ИсполняемыеСценарии.ТестовыеНаборы["Тесты"];
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Область Контекст
|
||||
|
||||
Функция Контекст()
|
||||
|
||||
Возврат ЮТКонтекст.ЗначениеКонтекста("КонтекстРегистрацияТестов");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ИнициализироватьКонтекст(МетаданныеМодуля)
|
||||
|
||||
КонтекстРегистрации = ОписаниеКонтекстаРегистрацииСценариев(МетаданныеМодуля);
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста("КонтекстРегистрацияТестов", КонтекстРегистрации);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Описание контекста регистрации сценариев.
|
||||
//
|
||||
// Параметры:
|
||||
// МетаданныеМодуля - Структура - Метаданные модуля, см. ЮТФабрика.ОписаниеМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание контекста регистрации сценариев:
|
||||
// * МетаданныеМодуля - Структура - см. ЮТФабрика.ОписаниеМодуля
|
||||
// * ИсполняемыеСценарии - Структура -:
|
||||
// ** ТестовыеНаборы - Соответствие -
|
||||
Функция ОписаниеКонтекстаРегистрацииСценариев(МетаданныеМодуля)
|
||||
|
||||
ИсполняемыеСценарии = ИсполняемыеСценарии();
|
||||
Набор = ТестовыйНаборПоУмолчанию(ИсполняемыеСценарии);
|
||||
Набор.Представление = МетаданныеМодуля.Имя;
|
||||
|
||||
Контекст = Новый Структура();
|
||||
|
||||
Контекст.Вставить("МетаданныеМодуля", МетаданныеМодуля);
|
||||
Контекст.Вставить("ИсполняемыеСценарии", ИсполняемыеСценарии);
|
||||
Контекст.Вставить("ТекущийНабор", Набор);
|
||||
|
||||
Возврат Контекст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТекущийНабор()
|
||||
|
||||
Возврат Контекст().ТекущийНабор;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура УстановитьТекущийНабор(Набор)
|
||||
|
||||
Контекст().ТекущийНабор = Набор;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
11
exts/yaxunit/src/CommonModules/ЮТТесты/ЮТТесты.mdo
Normal file
11
exts/yaxunit/src/CommonModules/ЮТТесты/ЮТТесты.mdo
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9b18d884-ddf4-4950-8691-64ded38bddbd">
|
||||
<name>ЮТТесты</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Тесты</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
1150
exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
Normal file
1150
exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dad8318d-dbc4-488a-986b-566a08f5a47f">
|
||||
<name>ЮТУтверждения</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>ЮТУтверждения</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
461
exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl
Normal file
461
exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl
Normal file
@ -0,0 +1,461 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// КонтекстыВызова
|
||||
// Возвращает перечисление возможных контекстов вызова
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура - Контексты вызова
|
||||
Функция КонтекстыВызова() Экспорт
|
||||
|
||||
Контексты = Новый Структура();
|
||||
|
||||
Контексты.Вставить("КлиентОбычноеПриложение", "КлиентОбычноеПриложение");
|
||||
Контексты.Вставить("КлиентУправляемоеПриложение", "КлиентУправляемоеПриложение");
|
||||
Контексты.Вставить("Сервер", "Сервер");
|
||||
Контексты.Вставить("ВызовСервера", "ВызовСервера");
|
||||
|
||||
// TODO Подозреваю нужно добавить web клиент
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Контексты);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область Перечисления
|
||||
|
||||
// КонтекстыИсполнения
|
||||
// Возвращает перечисление возможных контекстов исполнения тестов
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура - Контексты исполнения
|
||||
Функция КонтекстыИсполнения() Экспорт
|
||||
|
||||
Контексты = Новый Структура();
|
||||
|
||||
Контексты.Вставить("Клиент", "Клиент");
|
||||
Контексты.Вставить("Сервер", "Сервер");
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Контексты);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// СтатусыИсполненияТеста
|
||||
// Возвращает перечисление возможных статусов выполнения теста, жизненный цикл теста
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура - Статусы исполнения теста
|
||||
Функция СтатусыИсполненияТеста() Экспорт
|
||||
|
||||
Статусы = Новый Структура();
|
||||
|
||||
Статусы.Вставить("Ожидание", "Ожидание");
|
||||
Статусы.Вставить("Исполнение", "Исполнение");
|
||||
Статусы.Вставить("Успешно", "Успешно");
|
||||
Статусы.Вставить("Ошибка", "Ошибка");
|
||||
Статусы.Вставить("Сломан", "Сломан");
|
||||
Статусы.Вставить("Пропущен", "Пропущен");
|
||||
Статусы.Вставить("НеРеализован", "НеРеализован");
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Статусы);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТипыОшибок() Экспорт
|
||||
|
||||
Типы = Новый Структура;
|
||||
|
||||
Типы.Вставить("ТестНеРеализован", "Не реализован");
|
||||
Типы.Вставить("ОшибкаСравнения", "Ошибка сравнения");
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Типы);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СтруктурыДанных
|
||||
|
||||
// ОписаниеТестовогоНабора
|
||||
// Возвращает описание регистрируемого тестового набора.
|
||||
// Эта структура используется на этапе формирования описаний имеющихся тестов
|
||||
// Параметры:
|
||||
// Имя - Строка - Имя набора
|
||||
// ТегиСтрокой - Строка - Теги набора
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание тестового набора:
|
||||
// * Имя - Строка - Имя набора
|
||||
// * Представление - Строка - Представление, краткое описание
|
||||
// * Теги - Массив - Коллекция тегов набора
|
||||
// * Тесты - Массив - Коллекция тестов набора, см. ОписаниеТеста
|
||||
// * ОписаниеОшибки - Строка, Неопределено - Описание ошибки регистрации набора
|
||||
Функция ОписаниеТестовогоНабора(Имя, ТегиСтрокой = "") Экспорт
|
||||
|
||||
Описание = Новый Структура;
|
||||
Описание.Вставить("Имя", Строка(Имя));
|
||||
Описание.Вставить("Представление", Строка(Имя));
|
||||
Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь));
|
||||
Описание.Вставить("Тесты", Новый Массив);
|
||||
Описание.Вставить("ОписаниеОшибки", Неопределено);
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеТеста
|
||||
// Возвращает описание регистрируемого теста.
|
||||
// Эта структура используется на этапе формирования описаний имеющихся тестов
|
||||
// Параметры:
|
||||
// Имя - Строка - Имя тестового метода
|
||||
// Представление - Строка - Представление, краткое описание теста
|
||||
// КонтекстыВызова - Строка - Контексты исполнения теста, см. КонтекстВызова
|
||||
// ТегиСтрокой - Строка - Теги теста
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание теста:
|
||||
// * Имя - Строка - Имя теста (тестового метода)
|
||||
// * Представление - Строка - Представление теста
|
||||
// * Теги - Массив - Теги теста
|
||||
// * КонтекстВызова - Массив - Контексты исполнения теста
|
||||
Функция ОписаниеТеста(Имя, Знач Представление, КонтекстыВызова, Знач ТегиСтрокой = "") Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Представление) Тогда
|
||||
Представление = Имя;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТегиСтрокой = Неопределено Тогда
|
||||
ТегиСтрокой = "";
|
||||
КонецЕсли;
|
||||
|
||||
Описание = Новый Структура();
|
||||
Описание.Вставить("Имя", Строка(Имя));
|
||||
Описание.Вставить("Представление", Строка(Представление));
|
||||
Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь));
|
||||
Описание.Вставить("КонтекстВызова", СтрРазделить(КонтекстыВызова, ", ", Ложь));
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеИсполняемогоНабораТестов
|
||||
// Возвращает описание исполняемого тестового набора.
|
||||
// Содержит данные необходимые для выполнения прогона тестов
|
||||
// Параметры:
|
||||
// НаборТестов - Массив - Коллекция зарегистрированных тестовых наборов, см. ОписаниеТестовогоНабора
|
||||
// МетаданныеМодуля - Структура - Описание тестового модуля, см. ЮТФабрика.ОписаниеМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание исполняемого набора тестов:
|
||||
// * Имя - Строка - Имя набора
|
||||
// * Представление - Строка - Представление набора
|
||||
// * Теги - Массив - Тэги набора
|
||||
// * ОписаниеОшибки - Строка - Описание ошибки загрузки или прогона набора
|
||||
// * Режим - Строка - Режим исполнения набора, см. КонтекстыВызова
|
||||
// * МетаданныеМодуля - Структура - Описание тестового модуля, см. ЮТФабрика.ОписаниеМодуля
|
||||
// * Тесты - Массив - Тесты набора, структуру тестов см. ОписаниеИсполняемогоТеста
|
||||
// * Выполнять - Булево - Признак, что можно выполнить прогон набора (нет ошибок блокирующих запуск)
|
||||
// * ДатаСтарта - Число - Дата запуска набора
|
||||
// * Длительность - Число - Продолжительность выполнения набора
|
||||
Функция ОписаниеИсполняемогоНабораТестов(НаборТестов, МетаданныеМодуля) Экспорт
|
||||
|
||||
Описание = Новый Структура();
|
||||
|
||||
Описание.Вставить("Имя", НаборТестов.Имя);
|
||||
Описание.Вставить("Представление", НаборТестов.Представление);
|
||||
Описание.Вставить("Теги", НаборТестов.Теги);
|
||||
Описание.Вставить("ОписаниеОшибки", НаборТестов.ОписаниеОшибки);
|
||||
|
||||
Описание.Вставить("Режим");
|
||||
Описание.Вставить("МетаданныеМодуля", МетаданныеМодуля);
|
||||
Описание.Вставить("Тесты", Новый Массив);
|
||||
Описание.Вставить("Выполнять", НЕ ЗначениеЗаполнено(Описание.ОписаниеОшибки));
|
||||
Описание.Вставить("ДатаСтарта", 0);
|
||||
Описание.Вставить("Длительность", 0);
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеИсполняемогоТеста
|
||||
// Возвращает описание исполняемого теста
|
||||
// Содержит данные необходимые для выполнения прогона тестов
|
||||
//
|
||||
// Параметры:
|
||||
// Тест - Структура - Описание зарегистрированного теста, см. ОписаниеТеста
|
||||
// МетаданныеМодуля - Структура - Описание тестового модуля, см. ЮТФабрика.ОписаниеМодуля
|
||||
// Режим - Строка - Режим исполнения, см. КонтекстыВызова
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание исполняемого теста:
|
||||
// * Имя - Строка - Имя/представление теста
|
||||
// * Метод - Строка - Имя тестового метода
|
||||
// * ПолноеИмяМетода - Строка - Полное имя тестового метода, ИмяМодуля.ИмяМетода
|
||||
// * Теги - Массив - Теги теста
|
||||
// * Режим - Строка - Режим исполнения теста, см. КонтекстыВызова
|
||||
// * ДатаСтарта - Число - Дата запуска теста
|
||||
// * Длительность - Число - Продолжительность выполнения теста
|
||||
// * Статус - Строка - Статус выполнения теста, см. СтатусыИсполненияТеста
|
||||
// * ОписаниеОшибки - Структура, Неопределено - Описание ошибки выполнения теста, см. ЮТФабрика.ОписаниеВозникшейОшибки
|
||||
Функция ОписаниеИсполняемогоТеста(Тест, МетаданныеМодуля, Режим) Экспорт
|
||||
|
||||
ПолноеИмяМетода = СтрШаблон("%1.%2", МетаданныеМодуля.Имя, Тест.Имя);
|
||||
|
||||
ОписаниеТеста = Новый Структура;
|
||||
ОписаниеТеста.Вставить("Имя", Тест.Представление);
|
||||
ОписаниеТеста.Вставить("Метод", Тест.Имя);
|
||||
ОписаниеТеста.Вставить("ПолноеИмяМетода", ПолноеИмяМетода);
|
||||
ОписаниеТеста.Вставить("Теги", Тест.Теги);
|
||||
ОписаниеТеста.Вставить("Режим", Режим);
|
||||
ОписаниеТеста.Вставить("ДатаСтарта", 0);
|
||||
ОписаниеТеста.Вставить("Длительность", 0);
|
||||
ОписаниеТеста.Вставить("Статус", СтатусыИсполненияТеста().Ожидание);
|
||||
ОписаниеТеста.Вставить("ОписаниеОшибки");
|
||||
|
||||
Возврат ОписаниеТеста;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ПараметрыЗапуска
|
||||
// Набор параметров подсистемы тестирования.
|
||||
// Параметры на английском, чтобы не держать несколько реализаций чтения и обработки параметров
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Параметры:
|
||||
// * ВыполнятьМодульноеТестирование - Булево - Признак необходимости выполнения тестов
|
||||
// * reportPath - Строка - Файл или каталог сохранения отчета о тестировании
|
||||
// * filter - Структура - Параметры отбора запускаемых тестов, см. ПараметрыФильтрации
|
||||
// * closeAfterTests - Булево - Признак необходимости закрытия приложения по окончании прогона
|
||||
// * reportFormat - Строка - Формат отчета о тестировании.
|
||||
// Модули реализующие различные форматы отчетов собраны в подсистеме ЮТФормированиеОтчета
|
||||
Функция ПараметрыЗапуска() Экспорт
|
||||
|
||||
Параметры = Новый Структура;
|
||||
|
||||
Параметры.Вставить("ВыполнятьМодульноеТестирование", Ложь);
|
||||
|
||||
Параметры.Вставить("reportPath", "");
|
||||
Параметры.Вставить("closeAfterTests", Истина);
|
||||
Параметры.Вставить("filter", ПараметрыФильтрации());
|
||||
Параметры.Вставить("reportFormat", "jUnit");
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеКонтекстаОшибки
|
||||
// Возвращает описание детелей/расшифровки ошибки
|
||||
// Возвращаемое значение:
|
||||
// Структура - Детали ошибки:
|
||||
// * ОшибкаСравнения - Булево - Признак, это ошибка сравнения факта и ожидания
|
||||
// * ПроверяемоеЗначение - Произвольный - Фактическое значение
|
||||
// * ОжидаемоеЗначение - Произвольный - Ожидаемое значение
|
||||
Функция ОписаниеКонтекстаОшибки() Экспорт
|
||||
|
||||
Возврат Новый Структура("ОшибкаСравнения, ПроверяемоеЗначение, ОжидаемоеЗначение", Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеМодуля
|
||||
// Возвращает структуру описания модуля
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание модуля:
|
||||
// * Имя - Строка - Имя модуля
|
||||
// * ПолноеИмя - Строка - Полное имя модуля
|
||||
// * КлиентУправляемоеПриложение - Булево - Доступность контекста
|
||||
// * КлиентОбычноеПриложение - Булево - Доступность контекста
|
||||
// * Сервер - Булево - Доступность контекста
|
||||
// * ВызовСервера - Булево - Доступность контекста
|
||||
Функция ОписаниеМодуля() Экспорт
|
||||
|
||||
Описание = Новый Структура;
|
||||
Описание.Вставить("Имя", "");
|
||||
Описание.Вставить("ПолноеИмя", "");
|
||||
Описание.Вставить("КлиентУправляемоеПриложение", Ложь);
|
||||
Описание.Вставить("КлиентОбычноеПриложение", Ложь);
|
||||
Описание.Вставить("Сервер", Ложь);
|
||||
Описание.Вставить("ВызовСервера", Ложь);
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеВозникшейОшибки
|
||||
// Возвращает базовую структуру ошибки
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание возникшей ошибки:
|
||||
// * Сообщение - Строка - Описание возникшей ошибки
|
||||
// * Стек - Строка - Стек возникшей ошибки
|
||||
// * ТипОшибки - Строка - Тип возникшей ошибки. Доступные значения см. ЮТФабрика.ТипыОшибок
|
||||
Функция ОписаниеВозникшейОшибки() Экспорт
|
||||
|
||||
Возврат Новый Структура("Сообщение, Стек, ТипОшибки", "");
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ОписаниеОшибкиСравнения
|
||||
// Возвращает базовую структуру ошибки проверки факта и ожидания
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание возникшей ошибки:
|
||||
// * Сообщение - Строка - Описание возникшей ошибки
|
||||
// * Стек - Строка - Стек возникшей ошибки
|
||||
// * ТипОшибки - Строка - Тип возникшей ошибки. Доступные значения см. ЮТФабрика.ТипыОшибок
|
||||
// * ПроверяемоеЗначение - Произвольный - Проверяемое, фактическое значение
|
||||
// * ОжидаемоеЗначение - Произвольный - Ожидаемое значение
|
||||
Функция ОписаниеОшибкиСравнения() Экспорт
|
||||
|
||||
Описание = ОписаниеВозникшейОшибки();
|
||||
Описание.ТипОшибки = ТипыОшибок().ОшибкаСравнения;
|
||||
Описание.Вставить("ПроверяемоеЗначение");
|
||||
Описание.Вставить("ОжидаемоеЗначение");
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
// КонтекстыМодуля
|
||||
// Возвращает коллекцию доступных контекстов выполнения модуля
|
||||
// Параметры:
|
||||
// Модуль Модуль
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - Контексты модуля
|
||||
Функция КонтекстыМодуля(Модуль) Экспорт
|
||||
|
||||
Контексты = КонтекстыВызова();
|
||||
|
||||
КонтекстыМодуля = Новый Массив();
|
||||
|
||||
Если Модуль.Сервер Тогда
|
||||
КонтекстыМодуля.Добавить(Контексты.Сервер);
|
||||
КонецЕсли;
|
||||
|
||||
Если Модуль.КлиентУправляемоеПриложение Тогда
|
||||
КонтекстыМодуля.Добавить(Контексты.КлиентУправляемоеПриложение);
|
||||
КонецЕсли;
|
||||
|
||||
Если Модуль.КлиентОбычноеПриложение Тогда
|
||||
КонтекстыМодуля.Добавить(Контексты.КлиентОбычноеПриложение);
|
||||
КонецЕсли;
|
||||
|
||||
Если Модуль.ВызовСервера Тогда
|
||||
КонтекстыМодуля.Добавить(Контексты.ВызовСервера);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат КонтекстыМодуля;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// КонтекстыПриложения
|
||||
// Возвращает коллекцию доступных контекстов приложения
|
||||
// Возвращаемое значение:
|
||||
// Массив - Контексты приложения
|
||||
Функция КонтекстыПриложения() Экспорт
|
||||
|
||||
Контексты = КонтекстыВызова();
|
||||
КонтекстыПриложения = Новый Массив();
|
||||
|
||||
КонтекстыПриложения.Добавить(Контексты.Сервер);
|
||||
КонтекстыПриложения.Добавить(Контексты.ВызовСервера);
|
||||
|
||||
#Если ТолстыйКлиентОбычноеПриложение Тогда
|
||||
КонтекстыПриложения.Добавить(Контексты.КлиентОбычноеПриложение);
|
||||
#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Или ТонкийКлиент Тогда
|
||||
КонтекстыПриложения.Добавить(Контексты.КлиентУправляемоеПриложение);
|
||||
#КонецЕсли
|
||||
|
||||
Возврат КонтекстыПриложения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// КонтекстИсполнения
|
||||
// Возвращает контекст исполнения по контексту вызова
|
||||
// Параметры:
|
||||
// КонтекстВызова - Строка - Контекст вызова, см. ЮТФабрика.КонтекстыВызова
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Строка - Контекст исполнения
|
||||
Функция КонтекстИсполнения(КонтекстВызова) Экспорт
|
||||
|
||||
КонтекстыВызова = КонтекстыВызова();
|
||||
|
||||
Если КонтекстВызова = КонтекстыВызова.Сервер Тогда
|
||||
|
||||
Возврат КонтекстыИсполнения().Сервер;
|
||||
|
||||
ИначеЕсли КонтекстВызова = КонтекстыВызова.КлиентУправляемоеПриложение
|
||||
ИЛИ КонтекстВызова = КонтекстыВызова.КлиентОбычноеПриложение
|
||||
ИЛИ КонтекстВызова = КонтекстыВызова.ВызовСервера Тогда
|
||||
|
||||
Возврат КонтекстыИсполнения().Клиент;
|
||||
|
||||
Иначе
|
||||
|
||||
Возврат Неопределено;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// ПараметрыФильтрации
|
||||
// Возвращает структуру отборов для поиска тестов
|
||||
// Возвращаемое значение:
|
||||
// Структура - Параметры фильтрации:
|
||||
// * extensions - Неопределено, Массив - Список тестовых расширений
|
||||
// * modules - Неопределено, Массив - Список тестовых модулей
|
||||
// * suites - Неопределено, Массив - Список тестовых наборов
|
||||
// * paths - Неопределено, Массив - Список путей до тестовых методов, путь может быть не полным.
|
||||
// Например:
|
||||
// - tests - Ищем тесты в расширении tests
|
||||
// - tests.ОМ_ОбщегоНазначения - Ищем тесты в модуле ОМ_ОбщегоНазначения расширения tests
|
||||
// - tests.ОМ_ОбщегоНазначения.ПолучитьЗначениеРеквизита - указание конкретного теста
|
||||
// * tags - Неопределено, Массив - Список тэгов
|
||||
// * contexts - Неопределено, Массив - Список тестируемых контекстов
|
||||
Функция ПараметрыФильтрации()
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("extensions", ЮТОбщий.ЗначениеВМассиве("tests"));
|
||||
Параметры.Вставить("modules");
|
||||
Параметры.Вставить("suites");
|
||||
Параметры.Вставить("tags");
|
||||
Параметры.Вставить("contexts");
|
||||
Параметры.Вставить("paths");
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
11
exts/yaxunit/src/CommonModules/ЮТФабрика/ЮТФабрика.mdo
Normal file
11
exts/yaxunit/src/CommonModules/ЮТФабрика/ЮТФабрика.mdo
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="430f3969-ed28-4cc2-bfc6-17fc870dfea5">
|
||||
<name>ЮТФабрика</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Клиент сервер</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
285
exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl
Normal file
285
exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl
Normal file
@ -0,0 +1,285 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// ПрочитатьНаборыТестов
|
||||
// Читает наборы тестов (тестовые модули) из расширений
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаТестов - Структура - Параметры запуска тестов. См. ЮТПараметры.ПараметрыЗапускаТестов
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - Прочитанные наборы тестов
|
||||
Функция ПрочитатьНаборыТестов(ПараметрыЗапускаТестов) Экспорт
|
||||
|
||||
ТестовыеМодули = Новый Массив;
|
||||
|
||||
Фильтр = Фильтр(ПараметрыЗапускаТестов);
|
||||
|
||||
Для Каждого ОписаниеМодуля Из ТестовыеМодули(Фильтр) Цикл
|
||||
|
||||
НаборыТестов = ТестовыеНаборыМодуля(ОписаниеМодуля, ПараметрыЗапускаТестов);
|
||||
|
||||
Если НаборыТестов = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТестовыйМодуль = Новый Структура;
|
||||
ТестовыйМодуль.Вставить("МетаданныеМодуля", ОписаниеМодуля);
|
||||
ТестовыйМодуль.Вставить("НаборыТестов", НаборыТестов);
|
||||
ТестовыеМодули.Добавить(ТестовыйМодуль);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ТестовыеМодули;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ПрочитатьНаборТестов
|
||||
// Читает набор тестов из модуля
|
||||
// Параметры:
|
||||
// МетаданныеМодуля - См. ЮТФабрика.ОписаниеМодуля
|
||||
// СтроковыйРежим - Строка - Строковый режим (контекст) исполнения теста
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Структура - Если прочитано, то будет возвращено описание набора. См. ОписаниеНабораТестов
|
||||
Функция ИсполняемыеСценарииМодуля(ОписаниеМодуля) Экспорт
|
||||
|
||||
ЭтоТестовыйМодуль = Истина;
|
||||
|
||||
ЮТТесты.ПередЧтениемСценариевМодуля(ОписаниеМодуля);
|
||||
|
||||
ПараметрыПолученияСценариев = Неопределено; // TODO Заготовка для будущего
|
||||
|
||||
Команда = СтрШаблон("%1.ИсполняемыеСценарии(ПараметрыПолученияСценариев)", ОписаниеМодуля.Имя);
|
||||
|
||||
Попытка
|
||||
|
||||
Выполнить(Команда);
|
||||
|
||||
Исключение
|
||||
|
||||
ИнформацияОбОшибке = ИнформацияОбОшибке();
|
||||
Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
|
||||
Если СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Метод объекта не обнаружен (ИсполняемыеСценарии)") Тогда
|
||||
|
||||
ЭтоТестовыйМодуль = Ложь;
|
||||
Ошибка = "";
|
||||
|
||||
ИначеЕсли СтрСравнить(ИнформацияОбОшибке.Описание, "Слишком мало фактических параметров") = 0 Тогда
|
||||
|
||||
// Возможно метод без параметров
|
||||
Команда = СтрШаблон("%1.ИсполняемыеСценарии()", ОписаниеМодуля.Имя);
|
||||
|
||||
Попытка
|
||||
|
||||
Выполнить(Команда);
|
||||
|
||||
Исключение
|
||||
|
||||
Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Данные = ЮТТесты.СценарииМодуля();
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибка) Тогда
|
||||
|
||||
Данные = Новый Массив(); // Фиксируем, чтобы отобразить в отчете
|
||||
|
||||
Описание = ЮТФабрика.ОписаниеТестовогоНабора(ОписаниеМодуля.Имя);
|
||||
Описание.ОписаниеОшибки = Ошибка;
|
||||
|
||||
Данные.Добавить(Описание);
|
||||
|
||||
ИначеЕсли ЭтоТестовыйМодуль Тогда
|
||||
|
||||
Сценарии = ЮТТесты.СценарииМодуля();
|
||||
Данные = ЮТОбщий.ВыгрузитьЗначения(Сценарии.ТестовыеНаборы, "Значение");
|
||||
|
||||
Иначе
|
||||
|
||||
Данные = Неопределено;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// ЭтоТестовыйМодуль
|
||||
// Проверяет, является ли модуль модулем с тестами
|
||||
// Параметры:
|
||||
// МетаданныеМодуля - Структура - Описание метаданных модуля, см. ЮТФабрика.ОписаниеМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Этот модуль содержит тесты
|
||||
Функция ЭтоТестовыйМодуль(МетаданныеМодуля) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Возврат ЮТОбщий.МетодМодуляСуществует(МетаданныеМодуля.Имя, ИмяМетодаСценариев());
|
||||
#КонецЕсли
|
||||
|
||||
#Если ТолстыйКлиентУправляемоеПриложение ИЛИ ТонкийКлиент Тогда
|
||||
Если МетаданныеМодуля.КлиентУправляемоеПриложение Тогда
|
||||
Возврат ЮТОбщий.МетодМодуляСуществует(МетаданныеМодуля.Имя, ИмяМетодаСценариев());
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
#Если ТолстыйКлиентОбычноеПриложение Тогда
|
||||
Если МетаданныеМодуля.КлиентОбычноеПриложение Тогда
|
||||
Возврат ЮТОбщий.МетодМодуляСуществует(МетаданныеМодуля.Имя, ИмяМетодаСценариев());
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
Если МетаданныеМодуля.Сервер Тогда
|
||||
Возврат ЮТЧитательСервер.ЭтоТестовыйМодуль(МетаданныеМодуля);
|
||||
Иначе
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ИмяМетодаСценариев()
|
||||
|
||||
Возврат "ИсполняемыеСценарии";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТестовыеРасширения(ФильтрРасширений)
|
||||
|
||||
// TODO Фильтрация по расширению
|
||||
Расширения = ЮТМетаданныеСервер.РасширенияКонфигурации();
|
||||
|
||||
Если ЗначениеЗаполнено(ФильтрРасширений) Тогда
|
||||
Возврат ЮТОбщий.ПересечениеМассивов(ФильтрРасширений, Расширения);
|
||||
Иначе
|
||||
Возврат Расширения;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Тестовые модули.
|
||||
//
|
||||
// Параметры:
|
||||
// Фильтр - Структура - Фильтр:
|
||||
// * Расширения
|
||||
// * Модули
|
||||
// * Наборы
|
||||
// * Теги
|
||||
// * Контексты
|
||||
// * Пути
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - Тестовые модули
|
||||
Функция ТестовыеМодули(Фильтр)
|
||||
|
||||
ТестовыеМодули = Новый Массив;
|
||||
|
||||
ИменаРасширений = ТестовыеРасширения(Фильтр.Расширения);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ИменаРасширений) Тогда
|
||||
Возврат ТестовыеМодули;
|
||||
КонецЕсли;
|
||||
|
||||
// TODO Фильтрация по путям
|
||||
МодулиРасширения = ЮТМетаданныеСервер.МетаданныеМодулей(ИменаРасширений, Фильтр.Модули);
|
||||
|
||||
Для Каждого ОписаниеМодуля Из МодулиРасширения Цикл
|
||||
|
||||
Если ЭтоТестовыйМодуль(ОписаниеМодуля) Тогда
|
||||
|
||||
ТестовыеМодули.Добавить(ОписаниеМодуля);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ТестовыеМодули;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТестовыеНаборыМодуля(Модуль, ПараметрыЗапуска)
|
||||
|
||||
// TODO Фильтрация по путям
|
||||
НаборыТестов = Неопределено;
|
||||
|
||||
#Если Сервер Тогда
|
||||
Если Модуль.Сервер Тогда
|
||||
НаборыТестов = ИсполняемыеСценарииМодуля(Модуль);
|
||||
Иначе
|
||||
// клиентский модуль на сервере мы увы не прочтем
|
||||
// TODO Надо наверное как об этом сказать, возможно в скипед кинуть
|
||||
КонецЕсли;
|
||||
#ИначеЕсли Клиент Тогда
|
||||
Если Модуль.КлиентОбычноеПриложение ИЛИ Модуль.КлиентУправляемоеПриложение Тогда
|
||||
НаборыТестов = ИсполняемыеСценарииМодуля(Модуль);
|
||||
ИначеЕсли Модуль.Сервер Тогда
|
||||
НаборыТестов = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(Модуль);
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
Возврат НаборыТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Фильтр(ПараметрыЗапуска)
|
||||
|
||||
Фильтр = Новый Структура("Расширения, Модули, Наборы, Теги, Контексты, Пути");
|
||||
|
||||
Фильтр.Расширения = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.filter, "extensions");
|
||||
Фильтр.Модули = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.filter, "modules");
|
||||
Фильтр.Теги = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.filter, "tags");
|
||||
Фильтр.Контексты = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.filter, "contexts");
|
||||
// TODO: Подумать в каком формате задать наборы - ИмяМодуля.Набор, Набор или другой вариант
|
||||
Фильтр.Наборы = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.filter, "suites");
|
||||
|
||||
// TODO: Обработка путей в формате: Модуль.ИмяТеста, ИмяТеста - метод, параметры, контекст
|
||||
// ОМ_ЮТУтверждения.Что[0: 1].Сервер, ОМ_ЮТУтверждения.Что[1: Структура].Сервер
|
||||
Фильтр.Пути = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска.filter, "paths");
|
||||
|
||||
Возврат Фильтр;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
11
exts/yaxunit/src/CommonModules/ЮТЧитатель/ЮТЧитатель.mdo
Normal file
11
exts/yaxunit/src/CommonModules/ЮТЧитатель/ЮТЧитатель.mdo
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ebc2ea92-fc13-4f72-bf9a-a46b4866ad37">
|
||||
<name>ЮТЧитатель</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>ЮТЧитатель</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
55
exts/yaxunit/src/CommonModules/ЮТЧитательСервер/Module.bsl
Normal file
55
exts/yaxunit/src/CommonModules/ЮТЧитательСервер/Module.bsl
Normal file
@ -0,0 +1,55 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// ПрочитатьНаборТестов
|
||||
// См. ЮТЧитатель.ПрочитатьНаборТестов
|
||||
//
|
||||
Функция ИсполняемыеСценарииМодуля(Знач МетаданныеМодуля) Экспорт
|
||||
|
||||
Возврат ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоТестовыйМодуль(МетаданныеМодуля) Экспорт
|
||||
|
||||
Возврат ЮТЧитатель.ЭтоТестовыйМодуль(МетаданныеМодуля);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ffb0e301-cc9f-4631-b0a4-d0ea2fe968a7">
|
||||
<name>ЮТЧитательСервер</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>ЮТЧитатель сервер</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"reportDir": "reports",
|
||||
"testExtensions": [
|
||||
"tests"
|
||||
],
|
||||
"closeAfterTests": true
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a4be19a9-3685-49d0-9bfd-1c2448f91d99">
|
||||
<name>ЮТКонфигурационныйФайлПоУмолчанию</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>ЮТКонфигурационный файл по умолчанию</value>
|
||||
</synonym>
|
||||
<templateType>TextDocument</templateType>
|
||||
</mdclass:CommonTemplate>
|
2
exts/yaxunit/src/Configuration/CommandInterface.cmi
Normal file
2
exts/yaxunit/src/Configuration/CommandInterface.cmi
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
58
exts/yaxunit/src/Configuration/Configuration.mdo
Normal file
58
exts/yaxunit/src/Configuration/Configuration.mdo
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="8ebe57d7-1182-4eea-bdda-375c1e0262e4">
|
||||
<name>YAXUNIT</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>YAXUNIT</value>
|
||||
</synonym>
|
||||
<version>1.0.0</version>
|
||||
<objectBelonging>Adopted</objectBelonging>
|
||||
<extension xsi:type="mdclassExtension:ConfigurationExtension">
|
||||
<managedApplicationModule>Extended</managedApplicationModule>
|
||||
</extension>
|
||||
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="7aac7ebc-1c41-419f-aac1-52a9be0908ba"/>
|
||||
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="a0ea5602-5711-43f0-ae72-26204f907950"/>
|
||||
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="b8f84992-e90b-41b5-b663-77dbeb5a8c9b"/>
|
||||
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="4fb22a5b-2d3a-445e-b9c7-b51a4e59f82a"/>
|
||||
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="d26a61dd-a7a6-44b9-b131-be84fcf8c021"/>
|
||||
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="8339b2da-95e3-48c0-b355-f1f6179cebb2"/>
|
||||
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
|
||||
<namePrefix>ЮТ</namePrefix>
|
||||
<configurationExtensionCompatibilityMode>8.3.10</configurationExtensionCompatibilityMode>
|
||||
<configurationExtensionPurpose>AddOn</configurationExtensionPurpose>
|
||||
<scriptVariant>Russian</scriptVariant>
|
||||
<languages uuid="b8fdae66-bc14-47de-9a8d-e0323e0d9ce8">
|
||||
<name>Русский</name>
|
||||
<objectBelonging>Adopted</objectBelonging>
|
||||
<extension xsi:type="mdclassExtension:LanguageExtension">
|
||||
<languageCode>Checked</languageCode>
|
||||
</extension>
|
||||
<languageCode>ru</languageCode>
|
||||
</languages>
|
||||
<subsystems>Subsystem.ЮТФункциональность</subsystems>
|
||||
<commonTemplates>CommonTemplate.ЮТКонфигурационныйФайлПоУмолчанию</commonTemplates>
|
||||
<commonModules>CommonModule.ОМ_ЮТИсполнитель</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТУтверждения</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТЧитатель</commonModules>
|
||||
<commonModules>CommonModule.ЮТ</commonModules>
|
||||
<commonModules>CommonModule.ЮТИсполнитель</commonModules>
|
||||
<commonModules>CommonModule.ЮТИсполнительСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТКонтекст</commonModules>
|
||||
<commonModules>CommonModule.ЮТКонтекстКлиент</commonModules>
|
||||
<commonModules>CommonModule.ЮТКонтекстСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТМетаданныеСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТОбщий</commonModules>
|
||||
<commonModules>CommonModule.ЮТОтчет</commonModules>
|
||||
<commonModules>CommonModule.ЮТОтчетJSON</commonModules>
|
||||
<commonModules>CommonModule.ЮТОтчетJUnit</commonModules>
|
||||
<commonModules>CommonModule.ЮТПараметры</commonModules>
|
||||
<commonModules>CommonModule.ЮТПараметрыСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТПовторногоИспользования</commonModules>
|
||||
<commonModules>CommonModule.ЮТРегистрацияОшибок</commonModules>
|
||||
<commonModules>CommonModule.ЮТТестовыеДанные</commonModules>
|
||||
<commonModules>CommonModule.ЮТТесты</commonModules>
|
||||
<commonModules>CommonModule.ЮТУтверждения</commonModules>
|
||||
<commonModules>CommonModule.ЮТФабрика</commonModules>
|
||||
<commonModules>CommonModule.ЮТЧитатель</commonModules>
|
||||
<commonModules>CommonModule.ЮТЧитательСервер</commonModules>
|
||||
</mdclass:Configuration>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
38
exts/yaxunit/src/Configuration/ManagedApplicationModule.bsl
Normal file
38
exts/yaxunit/src/Configuration/ManagedApplicationModule.bsl
Normal file
@ -0,0 +1,38 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
Перем ЮТДанныеКонтекста Экспорт;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Обработчики событий модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// ОТКРЫТИЕ ПРИЛОЖЕНИЯ
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Используется для перехвата управления расширением после отработки запуска приложения
|
||||
&После("ПриНачалеРаботыСистемы")
|
||||
Процедура ЮТПриНачалеРаботыСистемы()
|
||||
|
||||
ЮТ.ВыполнитьМодульноеТестирование();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b36a006a-66ee-4a1d-bdc9-feebc5cdde82">
|
||||
<name>ЮТФормированиеОтчета</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Формирование отчета</value>
|
||||
</synonym>
|
||||
<includeHelpInContents>true</includeHelpInContents>
|
||||
<includeInCommandInterface>true</includeInCommandInterface>
|
||||
<content>CommonModule.ЮТОтчетJSON</content>
|
||||
<content>CommonModule.ЮТОтчетJUnit</content>
|
||||
<parentSubsystem>Subsystem.ЮТФункциональность</parentSubsystem>
|
||||
</mdclass:Subsystem>
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2000d722-2a1d-47b1-8b5d-f3ebcb93e898">
|
||||
<name>ЮТФункциональность</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Функциональность</value>
|
||||
</synonym>
|
||||
<includeHelpInContents>true</includeHelpInContents>
|
||||
<subsystems>ЮТФормированиеОтчета</subsystems>
|
||||
</mdclass:Subsystem>
|
4
sonarlint.json
Normal file
4
sonarlint.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"serverId": "sonar",
|
||||
"projectKey": "yaxunit:develop"
|
||||
}
|
55
v8config.json
Normal file
55
v8config.json
Normal file
@ -0,0 +1,55 @@
|
||||
{
|
||||
"GLOBAL": {
|
||||
"ВерсияПлатформы": "8.3.10.2309",
|
||||
"version": "2.1",
|
||||
"ФорматEDT": true
|
||||
},
|
||||
"АвтоТестирование": {
|
||||
"Выполнять": true,
|
||||
"ВыполнятьБазовые": true,
|
||||
"ВыполнятьxUnit": true,
|
||||
"ТестыxUnitВРасширении": true,
|
||||
"ИсполнительxUnitВРасширении": true,
|
||||
"ВыполнятьVanessa": false,
|
||||
"ПредварительнаяПодготовкаБазы": false,
|
||||
"ПередаватьПокрытиеТестамиВСонар": false
|
||||
},
|
||||
"АвтоДокументирование": {
|
||||
"Выполнять": false,
|
||||
"КодПространстваConfluence": "yaxunit",
|
||||
"ПоследнийОбработанныйКоммит": "",
|
||||
"Шаблоны": ""
|
||||
},
|
||||
"АнализИсходников": {
|
||||
"Выполнять": true,
|
||||
"ДочерниеПроекты": []
|
||||
},
|
||||
"АвтоСборка": {
|
||||
"ВключитьНомерСборки": true,
|
||||
"ОбновлятьВерсиюКонфигурации": false,
|
||||
"КаталогРасположенияСборок": "\\\\dellin.local\\bia\\СРПО\\1с_install\\Конфигурации ДЛ\\yaxunit",
|
||||
"КаталогРасположенияСборокRelease": "\\\\dellin.local\\bia\\СРПО\\1с_install\\Конфигурации ДЛ\\yaxunit\\releases",
|
||||
"КаталогРасположенияОбразов": "\\\\dellin.local\\bia\\СРПО\\1с_install\\Конфигурации ДЛ\\БСП\\spec",
|
||||
"ВыполнятьНаСервернойБазе": false
|
||||
},
|
||||
"Уведомления": {
|
||||
"Выполнять": true,
|
||||
"Ответственные": [{
|
||||
"Адресат": "arch-bots",
|
||||
"Транспорт": "rocketchat"
|
||||
}]
|
||||
},
|
||||
"Сонар": {
|
||||
"Сервер": "c7-sonar-server.tlc.lan",
|
||||
"Порт": "9000",
|
||||
"Токен": "6c0a7cc2bf2e8f054562da6fabf3f2bf41e7a308",
|
||||
"Профили": "bsl bia; Sonar way (outdated copy)"
|
||||
},
|
||||
"СвязанныеПроекты": {
|
||||
"bsp": {
|
||||
"Репозиторий": "git@gitlab.dellin.ru:orais/bsp/bsp.git",
|
||||
"Ветка": "master",
|
||||
"Назначение": "Основная конфигурация"
|
||||
}
|
||||
}
|
||||
}
|
18
ТестыПример/.project
Normal file
18
ТестыПример/.project
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>ТестыПример</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
|
||||
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
2
ТестыПример/.settings/org.eclipse.core.resources.prefs
Normal file
2
ТестыПример/.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
3
ТестыПример/DT-INF/PROJECT.PMF
Normal file
3
ТестыПример/DT-INF/PROJECT.PMF
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Runtime-Version: 8.3.10
|
||||
Base-Project: configuration
|
@ -0,0 +1,67 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Набор тестов для общего модуля СтроковыеФункцииКлиентСервер
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Набор стандартных методов тестового модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ТестыAPI
|
||||
|
||||
// ИсполняемыеСценарии
|
||||
// Сервисный метод для получения списка тестовых методов
|
||||
// Параметры:
|
||||
// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|
||||
// Возвращаемое значение:
|
||||
// Массив - Имена методов тестов
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
// Добавление теста в тестовый набор по умолчанию с указанием представления теста
|
||||
ЮТТесты.Тест("ТестовыйМетод3", "Тестовый метод 3");
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
ЮТТесты.ТестКлиент("ТестовыйМетод4");
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
ЮТТесты.ТестСервер("ТестовыйМетод4");
|
||||
|
||||
ЮТТесты.ТестовыйНабор("ТестовыйНабор")
|
||||
.Тест("ТестовыйМетод")
|
||||
.Тест("ТестовыйМетод2")
|
||||
.Тест("ТестовыйМетод5", , "Тег1");
|
||||
|
||||
// Создание тестового набора со списком тегов
|
||||
ЮТТесты.ТестовыйНабор("Тестовый набор 2", "Тег1, Тег2")
|
||||
|
||||
// Добавление теста в созданный тестовый набор с указанием тегов, которые будут объединены с тегами набора
|
||||
.Тест("ТестовыйМетод6", , "Тег5, Тег6");
|
||||
|
||||
ВызватьИсключение "Ошибка загрузки сценариев";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Реализация тестов
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область Тесты
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e8617fc6-e9d5-4d2d-85d4-e23166fcf0f2">
|
||||
<name>ОМ_ОшибкаЗагрузкиСценариев</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Ошибка загрузки сценариев</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
@ -0,0 +1,108 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2022 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Набор тестов для общего модуля СтроковыеФункцииКлиентСервер
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Набор стандартных методов тестового модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ТестыAPI
|
||||
|
||||
// ИсполняемыеСценарии
|
||||
// Сервисный метод для получения списка тестовых методов
|
||||
// Параметры:
|
||||
// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|
||||
// Возвращаемое значение:
|
||||
// Массив - Имена методов тестов
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
// Добавление теста в тестовый набор по умолчанию с указанием представления теста
|
||||
ЮТТесты.Тест("ТестовыйМетод3", "Тестовый метод 3");
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
ЮТТесты.ТестКлиент("ТестовыйМетод4");
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
ЮТТесты.ТестСервер("ТестовыйМетод4");
|
||||
|
||||
ЮТТесты.ТестовыйНабор("ТестовыйНабор")
|
||||
.Тест("ТестовыйМетод")
|
||||
.Тест("ТестовыйМетод2")
|
||||
.Тест("ТестовыйМетод5", , "Тег1");
|
||||
|
||||
// Создание тестового набора со списком тегов
|
||||
ЮТТесты.ТестовыйНабор("Тестовый набор 2", "Тег1, Тег2")
|
||||
|
||||
// Добавление теста в созданный тестовый набор с указанием тегов, которые будут объединены с тегами набора
|
||||
.Тест("ТестовыйМетод6", , "Тег5, Тег6");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестовымНабором() Экспорт
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстНабора();
|
||||
Контекст.Вставить("Дата", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестом() Экспорт
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстТеста();
|
||||
Контекст.Вставить("ДатаТеста", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТеста() Экспорт
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстТеста();
|
||||
Сообщить(ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ДатаТеста);
|
||||
Контекст = ЮТКонтекст.КонтекстНабора();
|
||||
Сообщить(ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.Дата);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТестовогоНабора() Экспорт
|
||||
|
||||
Контекст = ЮТКонтекст.КонтекстНабора();
|
||||
Сообщить(ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.Дата);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Реализация тестов
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура ТестовыйМетод4() Экспорт
|
||||
|
||||
ЮТУтверждения.Что(5, "Успешное утверждение").Равно(5);
|
||||
ЮТУтверждения.Что(5, "Успешное утверждение 2").НЕРавно(3);
|
||||
ЮТУтверждения.Что(5, "Ошибочное утверждение").Равно(3);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1f32571e-f4ef-4527-bd84-bda091e71a78">
|
||||
<name>ОМ_СтроковыеФункцииКлиентСервер</name>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
2
ТестыПример/src/Configuration/CommandInterface.cmi
Normal file
2
ТестыПример/src/Configuration/CommandInterface.cmi
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
33
ТестыПример/src/Configuration/Configuration.mdo
Normal file
33
ТестыПример/src/Configuration/Configuration.mdo
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="8707b744-2543-4013-af0e-9e13b6624e59">
|
||||
<name>tests</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Tests</value>
|
||||
</synonym>
|
||||
<objectBelonging>Adopted</objectBelonging>
|
||||
<extension xsi:type="mdclassExtension:ConfigurationExtension">
|
||||
<interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
|
||||
</extension>
|
||||
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="8a9d9b0a-06b5-4386-885a-eb8bcb1b0451"/>
|
||||
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="43272ea1-9fa7-4bc0-8465-c5f011180e73"/>
|
||||
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="86ef968e-8c32-4c3d-bb3f-7261d74f57ea"/>
|
||||
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="a931567d-d5ce-4b91-84fd-0e88802c11ef"/>
|
||||
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="1fd3bfeb-1675-4087-af3c-439afd61bc7c"/>
|
||||
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="0184ac30-9601-4012-af54-fcaeb13cab2c"/>
|
||||
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
|
||||
<namePrefix>Расш1_</namePrefix>
|
||||
<configurationExtensionCompatibilityMode>8.3.10</configurationExtensionCompatibilityMode>
|
||||
<configurationExtensionPurpose>Customization</configurationExtensionPurpose>
|
||||
<scriptVariant>Russian</scriptVariant>
|
||||
<languages uuid="d54879e4-8d6e-4e4d-b5b8-58bc03964e55">
|
||||
<name>Русский</name>
|
||||
<objectBelonging>Adopted</objectBelonging>
|
||||
<extension xsi:type="mdclassExtension:LanguageExtension">
|
||||
<languageCode>Checked</languageCode>
|
||||
</extension>
|
||||
<languageCode>ru</languageCode>
|
||||
</languages>
|
||||
<commonModules>CommonModule.ОМ_ОшибкаЗагрузкиСценариев</commonModules>
|
||||
<commonModules>CommonModule.ОМ_СтроковыеФункцииКлиентСервер</commonModules>
|
||||
</mdclass:Configuration>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
Loading…
Reference in New Issue
Block a user