Merge branch 'release/23.04'
							
								
								
									
										12
									
								
								.bsl-language-server.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | ||||
| { | ||||
|     "$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json", | ||||
|     "diagnostics": { | ||||
|         "computeTrigger": "onSave", | ||||
|         "ordinaryAppSupport": true, | ||||
|         "parameters": { | ||||
|             "LineLength": { | ||||
|                 "maxLineLength": 150 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										40
									
								
								.github/workflows/deploy-documentation.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,40 @@ | ||||
| name: Deploy to GitHub Pages | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - develop | ||||
|     # Review gh actions docs if you want to further define triggers, paths, etc | ||||
|     # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on | ||||
|  | ||||
| jobs: | ||||
|   deploy: | ||||
|     name: Deploy to GitHub Pages | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|       - uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           node-version: 18 | ||||
|           cache: yarn | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: yarn install --frozen-lockfile | ||||
|       - name: Build website | ||||
|         run: yarn build | ||||
|  | ||||
|       # Popular action to deploy to GitHub Pages: | ||||
|       # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus | ||||
|       - name: Deploy to GitHub Pages | ||||
|         uses: peaceiris/actions-gh-pages@v3 | ||||
|         with: | ||||
|           github_token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           # Build output to publish to the `gh-pages` branch: | ||||
|           publish_dir: ./build | ||||
|           # The following lines assign commit authorship to the official | ||||
|           # GH-Actions bot for deploys to `gh-pages` branch: | ||||
|           # https://github.com/actions/checkout/issues/13#issuecomment-724415212 | ||||
|           # The GH actions bot is used by default if you didn't specify the two fields. | ||||
|           # You can swap them out with your own user credentials. | ||||
|           user_name: github-actions[bot] | ||||
|           user_email: 41898282+github-actions[bot]@users.noreply.github.com | ||||
							
								
								
									
										59
									
								
								.github/workflows/sq.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,59 @@ | ||||
| name: sq-analyze | ||||
|  | ||||
| on: [push, pull_request] | ||||
|  | ||||
| jobs: | ||||
|   SonarScanner: | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.event.repository.full_name | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v3 | ||||
|       with: | ||||
|           repository: ${{ github.event.workflow_run.head_repository.full_name }} | ||||
|           ref: ${{ github.event.workflow_run.head_branch }} | ||||
|           fetch-depth: 0 | ||||
|     - name: Configure env vars for SonarCloud scan | ||||
|       env:   | ||||
|         ACTIONS_ALLOW_UNSECURE_COMMANDS: true | ||||
|       run: | | ||||
|         echo "::set-env name=PATH::/opt/sonar-scanner/bin:$PATH" | ||||
|      | ||||
|     - name: Compute branch name | ||||
|       env:   | ||||
|         ACTIONS_ALLOW_UNSECURE_COMMANDS: true | ||||
|       uses: nixel2007/branch-name@v3 | ||||
|      | ||||
|     - name: Extract version | ||||
|       if: github.event_name == 'push' | ||||
|       shell: bash | ||||
|       run: echo "##[set-output name=version;]` cat ./exts/yaxunit/src/Configuration/Configuration.mdo | grep -oP '(?<=<version>)[\d.]+'`" | ||||
|       id: extract_version | ||||
|  | ||||
|     - name: Setup sonarqube | ||||
|       uses: warchant/setup-sonar-scanner@v3 | ||||
|          | ||||
|     # Анализ проекта в SonarQube (ветка) | ||||
|     - name: Анализ в SonarQube (branch) | ||||
|       if: github.event_name == 'push' | ||||
|       env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||||
|       run: sonar-scanner | ||||
|           -Dsonar.host.url=https://sonar.openbsl.ru | ||||
|           -Dsonar.branch.name=${{ env.BRANCH_NAME }} | ||||
|           -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} | ||||
|  | ||||
|       # Анализ проекта в SonarQube (PR) | ||||
|       # https://docs.sonarqube.org/latest/analysis/pull-request/ | ||||
|     - name: Анализ в SonarQube (pull-request) | ||||
|       if: github.event_name == 'pull_request' | ||||
|       env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||||
|       run: sonar-scanner | ||||
|           -Dsonar.host.url=https://sonar.openbsl.ru | ||||
|           -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} | ||||
|           -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} | ||||
|           -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} | ||||
|           -Dsonar.scm.revision=${{ github.event.pull_request.head.sha }} | ||||
							
								
								
									
										169
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -1,167 +1,20 @@ | ||||
| # YAXUnit. Расширение для запуска тестов | ||||
| #  YAXUnit. Расширение для запуска тестов | ||||
|  | ||||
| - [Назначение](#назначение) | ||||
|   - [Возможности](#возможности) | ||||
| - [Пример тестового модуля](#пример-тестового-модуля) | ||||
| - [Запуск](#запуск) | ||||
|   - [Запуск из EDT](#запуск-из-edt) | ||||
|   - [Запуск вне EDT](#запуск-вне-edt) | ||||
| - [Благодарности](#благодарности) | ||||
| - [Лицензия](#лицензия) | ||||
| ---- | ||||
|  | ||||
| [](https://github.com/bia-technologies/yaxunit/actions) | ||||
| [](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
| [](https://github.com/bia-technologies/yaxunit/releases) | ||||
| [](https://sonar.openbsl.ru/dashboard?id=yaxunit) | ||||
| [](https://sonar.openbsl.ru/dashboard?id=yaxunit) | ||||
|  | ||||
| Обсудить в [телеграмм чате](https://t.me/BIAOpenTools/12) | ||||
|  | ||||
| ## Назначение | ||||
| ---- | ||||
|  | ||||
| Самостоятельное расширение для написания и выполнения модульного тестирования. | ||||
| ## Документация | ||||
|  | ||||
| ### Возможности | ||||
|  | ||||
| - YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов | ||||
| - Разрабатывалось с оглядкой на JUnit5, пожалуй, лучший фреймворк тестирования | ||||
| - Предоставляет движок выполнения тестов | ||||
| - Предоставляет утверждения для проверки ожидаемых результатов | ||||
| - Тесты могут быть организованы в наборы и выполняться в разных контекстах | ||||
| - Позволяет быстрее и проще не только писать, но и читать тесты | ||||
| - Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json. | ||||
| - Большая часть пользовательского API реализована как [текучие выражения](https://ru.wikipedia.org/wiki/Fluent_interface) | ||||
| - Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями | ||||
| - Реализован [плагин для EDT](https://github.com/bia-technologies/edt-test-runner), который упрощает процесс запуска тестов | ||||
|  | ||||
| Подробнее ознакомиться с функциональностью вы можете изучив [документацию](docs/api-topic.md). | ||||
|  | ||||
| А для того, что бы начать писать тесты необходимо [установить расширение](docs/install.md) в свою IDE (конфигуратор или EDT). | ||||
|  | ||||
| ## Пример тестового модуля | ||||
|  | ||||
| Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты. | ||||
|  | ||||
| Пример модуля тестов: | ||||
|  | ||||
| ```bsl | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
|      | ||||
|     // Регистрация тестов | ||||
|     ЮТТесты // Регистрация тестов выполняет через модуль регистратор | ||||
|         .ДобавитьТестовыйНабор("Математические методы")               // Набор - объединение тестов | ||||
|             .ДобавитьТест("Сложение")                                 // Обязательно при регистрации указываем имя экспортного метода | ||||
|             .ДобавитьТест("Вычитание", "Вычитание")                   // Также можно указать представление теста | ||||
|             .ДобавитьТест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля | ||||
|             .ДобавитьКлиентскийТест("УмножениеНаКлиенте")                   // Есть отдельный метод для регистрации клиентских тестов | ||||
|             .ДобавитьСерверныйТест("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов | ||||
|         .ДобавитьТестовыйНабор("Строковые методы") | ||||
|             .ДобавитьТест("СтрНайти") | ||||
|             .ДобавитьТест("СтрРазделить"); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Тесты | ||||
|  | ||||
| Процедура Сложение() Экспорт | ||||
|  | ||||
|     // Реализация теста на сложение | ||||
|     ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение | ||||
|         .ИмеетТип("Число") // Проверим тип | ||||
|         .Заполнено() // Заполненность проверяемого значения | ||||
|         .Больше(0) // Сравним с нулем | ||||
|         .Равно(5); // Проверим ожидаемый результат | ||||
|  | ||||
|     ЮТест.ОжидаетЧто(-8 + 8, "-8 + 8") // Проверим второй вариант | ||||
|         .Равно(0); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Вычитание() Экспорт | ||||
|  | ||||
|     // Реализация теста на вычитание | ||||
|     ЮТест.ОжидаетЧто(2 - 3, "2 - 3").ИмеетТип("Число").Заполнено().Меньше(0); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область События | ||||
|  | ||||
| // Также в тесте можно обрабатывать события выполнения | ||||
| // Например можно реализовать подготовку и удаление тестовых данных | ||||
| // Зачистку временных файлов, настройку системы | ||||
|  | ||||
| Процедура ПередВсемиТестами() Экспорт | ||||
|     // Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза | ||||
|     Сообщить("Запуск тестирования"); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПередТестовымНабором() Экспорт | ||||
|  | ||||
|     // Выполняется перед каждым тестовым набором для каждого контекста выполнения | ||||
|     Контекст = ЮТест.КонтекстТестовогоНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании | ||||
|                                                 // Контекст живет в рамках контекста выполнения,  | ||||
|                                                 // таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами | ||||
|     Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах()); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПередКаждымТестом() Экспорт | ||||
|  | ||||
|     // Выполняется перед каждым тестом | ||||
|     Контекст = ЮТест.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании | ||||
|                                       // Контекст создает перед тестом и уничтожается после его выполнения | ||||
|                                       // В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить | ||||
|     Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах()); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеКаждогоТеста() Экспорт | ||||
|  | ||||
|     // Выполняется после каждого теста | ||||
|     Контекст = ЮТест.КонтекстТеста(); | ||||
|     Сообщить("Время выполнения теста: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеТестовогоНабора() Экспорт | ||||
|  | ||||
|     // Выполняется после каждого тестового набора для каждого контекста выполнения | ||||
|     // Применяется для очистки данных и т.д. | ||||
|     Контекст = ЮТест.КонтекстТестовогоНабора(); | ||||
|     Сообщить("Время выполнения набора: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеВсехТестов() Экспорт | ||||
|  | ||||
|     // Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза | ||||
|     // В этом событии все контексты уже уничтожены | ||||
|     Сообщить("Тестирование завершено"); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ``` | ||||
|  | ||||
| После запуска тестов модуля в EDT (используя [плагин](https://github.com/bia-technologies/edt-test-runner)) получаем такой отчет: | ||||
|  | ||||
|  | ||||
|  | ||||
| ## Запуск | ||||
|  | ||||
| ### Запуск из EDT | ||||
|  | ||||
| При разработке в EDT процесс запуска тестов можно упростить, установив [плагин](https://github.com/bia-technologies/edt-test-runner) | ||||
| и настроив конфигурацию запуска, как указано в описании плагина. | ||||
|  | ||||
| ### Запуск вне EDT | ||||
|  | ||||
| Для запуска тестов без использования EDT необходимо: | ||||
|  | ||||
| 1. Сформировать файл конфигурации запуска [вручную](docs/run.md), либо воспользоваться [формой настройки](docs/yaxunit-ui.md) | ||||
| 2. [Запустить 1С:Предприятие](docs/run.md) с параметром `RunUnitTests=ПутьКФайлуКонфигурации.json`. | ||||
| [https://bia-technologies.github.io/yaxunit/](https://bia-technologies.github.io/yaxunit/) | ||||
|  | ||||
| ## Благодарности | ||||
|  | ||||
|   | ||||
| Before Width: | Height: | Size: 78 KiB | 
							
								
								
									
										85
									
								
								docs/run.md
									
									
									
									
									
								
							
							
						
						| @@ -1,85 +0,0 @@ | ||||
| # Запуск | ||||
|  | ||||
| Для запуска тестов необходимо запустить 1С:Предприятие с параметром `RunUnitTests`, при необходимости можно указать путь к файлу конфигурации запуска. | ||||
|  | ||||
| ## Конфигурация запуска | ||||
|  | ||||
| Конфигурация настраивается в файле json и может иметь следующие параметры: | ||||
|  | ||||
| | Имя параметра     | Тип       | Значение по умолчанию | Описание                                                                                                     | | ||||
| |-------------------|-----------|-----------------------|--------------------------------------------------------------------------------------------------------------| | ||||
| | `filter`          | `Object`  | Object, смотрите ниже | Параметры фильтрации, поиска тестов                                                                          | | ||||
| | `reportFormat`    | `String`  | `"jUnit"`             | Формат отчета о тестировании, возможные значения: `"jUnit"`, `"JSON"`                                        | | ||||
| | `reportPath`      | `String`  | `""`                  | Путь к формируемому отчету, можно указать или каталог (в которому будет создан файл отчета) или путь к файлу | | ||||
| | `closeAfterTests` | `Boolean` | `True`                | Признак закрытия 1С:Предприятие по завершению тестирования                                                   | | ||||
| | `showReport`      | `Boolean` | `True`                | Открыть форму отчета завершению тестирования                                                                 | | ||||
| | `logging`         | `Object`  | Смотрите ниже         | Параметры логирования, подробнее ниже                                                                        | | ||||
|  | ||||
| Параметры фильтрации: | ||||
|  | ||||
| | Имя параметра | Тип     | Значение по умолчанию | Описание                                                                                                                    | | ||||
| |---------------|---------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------| | ||||
| | `extensions`  | `Array` | `["tests"]`           | Список имен расширений, из которых грузятся тесты                                                                           | | ||||
| | `modules`     | `Array` | `Null`                | Список имен модулей, из которых грузятся тесты                                                                              | | ||||
| | `tests`       | `Array` | `Null`                | Список полных путей к исполняемым тестам (`[имя модуля.имя теста]`) | | ||||
| | `suites`      | `Array` | `Null`                | **Не реализованно.** Список имен тестовых наборов, которые будут запускаться                                                | | ||||
| | `tags`        | `Array` | `Null`                | **Не реализованно.** Список тегов, которые будут запускаться                                                                | | ||||
| | `contexts`    | `Array` | `Null`                | Список имен контекстов исполнения, в которых будут запускаться тесты                                  | | ||||
| | `paths`       | `Array` | `Null`                | **Не реализованно.** Список полных путей к исполняемым тестам (`[имя модуля.имя теста|имя модуля.имя теста.имя контекста]`) | | ||||
|  | ||||
| Параметры логирования: | ||||
|  | ||||
| | Имя параметра | Тип       | Значение по умолчанию | Описание                                                            | | ||||
| |---------------|-----------|-----------------------|---------------------------------------------------------------------| | ||||
| | `file`        | `String`  | `""`                  | Путь к файлу лога                   | | ||||
| | `enable`      | `Boolean` | `Null`                | Признак использования логирования. Если не указан, зависит от файла, если он указан - вкл, если не указан - выкл                     | | ||||
| | `level`       | `String`  | `"debug"`             | Уровень детализации лога. Возможные значения: `"debug"`, `"info"`, `"error"` | | ||||
|  | ||||
| Примеры: | ||||
|  | ||||
| 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" | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
| 3. Запустить все тесты с выводом подробного лога в файл, сохранить отчет файл `C:\temp\jUnit\report.xml` | ||||
|  | ||||
|     ```JSON | ||||
|     { | ||||
|         "reportPath": "C:\\temp\\jUnit\\report.xml", | ||||
|         "logging": { | ||||
|             "file": "C:\\temp\\jUnit\\tests.log", | ||||
|             "level": "debug" | ||||
|         } | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
| ## Строка запуска предприятия | ||||
|  | ||||
| `[путь к клиенту 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` | ||||
							
								
								
									
										20
									
								
								documentation/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| # Dependencies | ||||
| /node_modules | ||||
|  | ||||
| # Production | ||||
| /build | ||||
|  | ||||
| # Generated files | ||||
| .docusaurus | ||||
| .cache-loader | ||||
|  | ||||
| # Misc | ||||
| .DS_Store | ||||
| .env.local | ||||
| .env.development.local | ||||
| .env.test.local | ||||
| .env.production.local | ||||
|  | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
							
								
								
									
										41
									
								
								documentation/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,41 @@ | ||||
| # Website | ||||
|  | ||||
| This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. | ||||
|  | ||||
| ### Installation | ||||
|  | ||||
| ``` | ||||
| $ yarn | ||||
| ``` | ||||
|  | ||||
| ### Local Development | ||||
|  | ||||
| ``` | ||||
| $ yarn start | ||||
| ``` | ||||
|  | ||||
| This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. | ||||
|  | ||||
| ### Build | ||||
|  | ||||
| ``` | ||||
| $ yarn build | ||||
| ``` | ||||
|  | ||||
| This command generates static content into the `build` directory and can be served using any static contents hosting service. | ||||
|  | ||||
| ### Deployment | ||||
|  | ||||
| Using SSH: | ||||
|  | ||||
| ``` | ||||
| $ USE_SSH=true yarn deploy | ||||
| ``` | ||||
|  | ||||
| Not using SSH: | ||||
|  | ||||
| ``` | ||||
| $ GIT_USER=<Your GitHub username> yarn deploy | ||||
| ``` | ||||
|  | ||||
| If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. | ||||
							
								
								
									
										7
									
								
								documentation/api/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | ||||
| --- | ||||
| sidebar_position: 1 | ||||
| --- | ||||
|  | ||||
| # Программный интерфейс | ||||
|  | ||||
| Здесь будет расположена информация о программном интерфейсе YAxUnit | ||||
							
								
								
									
										3
									
								
								documentation/babel.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| module.exports = { | ||||
|   presets: [require.resolve('@docusaurus/core/lib/babel/preset')], | ||||
| }; | ||||
							
								
								
									
										7
									
								
								documentation/contributing/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | ||||
| --- | ||||
| sidebar_position: 1 | ||||
| --- | ||||
|  | ||||
| # Руководство разработчика | ||||
|  | ||||
| Здесь будут собраны материалы по доработке тестового движка. | ||||
							
								
								
									
										32
									
								
								documentation/docs/first-test.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,32 @@ | ||||
| --- | ||||
| sidebar_position: 2 | ||||
| tags: [Getting started] | ||||
| --- | ||||
|  | ||||
| # Пишем первый тест | ||||
|  | ||||
| Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - ИсполняемыеСценарии и реализовать тесты. | ||||
|  | ||||
| ```bsl title="ОМ_ПервыйТест" | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
|      | ||||
|     ЮТТесты | ||||
|         .ДобавитьТест("Сложение") | ||||
|             .СПараметрами(2, 3, 5) | ||||
|             .СПараметрами(2, -3, -1) | ||||
|     ; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Сложение(ПервыйОперанд, ВторойОперанд, Результат) Экспорт | ||||
|  | ||||
|     ЮТест.ОжидаетЧто(ПервыйОперанд + ВторойОперанд) | ||||
|         .ИмеетТип("Число") | ||||
|         .Равно(Результат); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
| ``` | ||||
							
								
								
									
										
											BIN
										
									
								
								documentation/docs/images/config-ui.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 90 KiB | 
| Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB | 
| Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB | 
| Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB | 
							
								
								
									
										
											BIN
										
									
								
								documentation/docs/install/images/gh-release-content.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								documentation/docs/install/images/gh-release.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 107 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB | 
							
								
								
									
										
											BIN
										
									
								
								documentation/docs/install/images/plugin-install-from-rep.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 57 KiB | 
| Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB | 
							
								
								
									
										67
									
								
								documentation/docs/install/install-plugin.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,67 @@ | ||||
| --- | ||||
| sidebar_position: 2 | ||||
| sidebar_label: Установка плагина EDT | ||||
| --- | ||||
| # Установка плагина для работы с тестами в EDT | ||||
|  | ||||
| ```mdx-code-block | ||||
| import Tabs from '@theme/Tabs'; | ||||
|  | ||||
| import TabItem from '@theme/TabItem'; | ||||
| ``` | ||||
|  | ||||
| Для того, что бы вам и нам было проще писать тесты мы разработали плагин для EDT. | ||||
|  | ||||
| С его помощью вы сможете: | ||||
|  | ||||
| * Запускать и отлаживать свои тесты; | ||||
| * Просматривать результаты выполнения. | ||||
| * И [что-то еще](https://github.com/bia-technologies/edt-test-runner/blob/develop/docs/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8.md) | ||||
|  | ||||
| Для установки плагина вам необходимо воспользоваться стандартным функционалом Eclipse (EDT) `Установить новое ПО...`. | ||||
|  | ||||
| * Открываем EDT.  | ||||
| * Переходим к `Установить новое ПО` (в меню `Справка`); | ||||
| * Добавляем новый репозиторий; | ||||
|  | ||||
|   ```mdx-code-block | ||||
|   <Tabs> | ||||
|     <TabItem value="master" label="Основной репозиторий"> | ||||
|   ``` | ||||
|  | ||||
|   ```url | ||||
|   https://bia-technologies.github.io/edt-test-runner/repository | ||||
|   ``` | ||||
|  | ||||
|   ```mdx-code-block | ||||
|     </TabItem> | ||||
|  | ||||
|     <TabItem value="develop" label="Develop"> | ||||
|   ``` | ||||
|  | ||||
|   ```url | ||||
|   https://bia-technologies.github.io/edt-test-runner/dev/repository | ||||
|   ``` | ||||
|  | ||||
|   ```mdx-code-block | ||||
|     </TabItem> | ||||
|   </Tabs> | ||||
|   ``` | ||||
|  | ||||
|    | ||||
|  | ||||
|   :::tip совет | ||||
|  | ||||
|   Для ускорения установки можно убрать галочку `Обращаться во время инсталляции ко всем сайтам ...` | ||||
|  | ||||
|   ::: | ||||
|  | ||||
| * Нажимаем далее; | ||||
| * Принимаем лицензию; | ||||
| * Соглашаемся с предупреждением безопасности; | ||||
| * И перезагружаем IDE. | ||||
|   :::note примечание | ||||
|  | ||||
|   EDT будет долго перезагружаться и это нормально. | ||||
|  | ||||
|   ::: | ||||
| @@ -1,29 +1,43 @@ | ||||
| --- | ||||
| sidebar_position: 1 | ||||
| tags: [Getting started] | ||||
| --- | ||||
| 
 | ||||
| # Установка | ||||
| 
 | ||||
| YAXUnit - это расширение для 1С:Предприятия, которое надо добавить к вашему проекту. | ||||
| 
 | ||||
| ## Требования | ||||
| 
 | ||||
| * 1С:Предприятие версии 8.3.10 или старше | ||||
| 
 | ||||
| ## Установка в EDT | ||||
| 
 | ||||
| ### Первичная установка тестового движка в рабочее пространство (workspace) | ||||
| 
 | ||||
| 1. Качаем архив [последнего релиза](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
| 2. Распаковываем содержимое в каталог с исходниками (не в воркспейс) | ||||
| 3. Импортируем проект | ||||
| 1. Скачаем архив [релиза](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
|     | ||||
| 
 | ||||
| 2. Копируем из архива расширение расположенное в каталоге `exts/yaxunit/` в свой каталог с исходниками (не в воркспейс) | ||||
|     | ||||
| 3. Импортируем проект расширения в воркспейс | ||||
|     | ||||
| 4. Привязываем импортированный проект расширения к конфигурации | ||||
| 
 | ||||
|     | ||||
| 
 | ||||
| 5. Обновляем конфигурацию | ||||
| 6. В конфигураторе снимаем с расширения **безопасный режим** и **защиту от опасных действий** | ||||
| 7. Готово, можно приступить к написанию тестов. | ||||
| 
 | ||||
|    :::tip совет | ||||
|    Для удобства разработки тестов рекомендуется [установить плагин](install-plugin.md) | ||||
|    ::: | ||||
| 
 | ||||
| ### Обновление тестового движка | ||||
| 
 | ||||
| 1. Качаем архив [последнего релиза](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
| 1. Скачаем архив [релиза](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
| 2. Если вы дорабатывали движок, то скачиваем архив оригинальной установленной версии движка | ||||
| 3. Разархивируем их во временный каталог | ||||
| 4. Воспользуемся механизмом сравнения объединения EDT | ||||
| 
 | ||||
|      | ||||
|    * Второй источник - каталог к новой версии тестового движка | ||||
|    * Использование третьего источника нужно для трехстороннего сравнения и применяется при доработках движка. | ||||
| @@ -32,7 +46,8 @@ | ||||
| 
 | ||||
| ## Установка в конфигуратор | ||||
| 
 | ||||
| 1. Качаем расширение (cfe) из [последнего релиза](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
| 1. Скачаем расширение (cfe) [релиза](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
|        | ||||
| 2. Загружаем в конфигуратор | ||||
| 3. Снимаем с расширения **безопасный режим** и **защиту от опасных действий** | ||||
| 4. Готово | ||||
							
								
								
									
										73
									
								
								documentation/docs/run/configuration.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,73 @@ | ||||
| # Конфигурация запуска | ||||
|  | ||||
| Конфигурация настраивается в файле json и может иметь следующие параметры. | ||||
|  | ||||
| ## Основные параметры | ||||
|  | ||||
| | Имя параметра     | Тип       | Значение по умолчанию                           | Описание                                                                                                     | | ||||
| |-------------------|-----------|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------| | ||||
| | `filter`          | `Object`  | [Object, смотрите ниже](#параметры-фильтрации)  | Параметры фильтрации, поиска тестов                                                                          | | ||||
| | `reportFormat`    | `String`  | `"jUnit"`                                       | Формат отчета о тестировании, возможные значения: `"jUnit"`, `"JSON"`                                        | | ||||
| | `reportPath`      | `String`  | `""`                                            | Путь к формируемому отчету, можно указать или каталог (в которому будет создан файл отчета) или путь к файлу | | ||||
| | `closeAfterTests` | `Boolean` | `True`                                          | Признак закрытия 1С:Предприятие по завершению тестирования                                                   | | ||||
| | `showReport`      | `Boolean` | `True`                                          | Открыть форму отчета завершению тестирования                                                                 | | ||||
| | `logging`         | `Object`  | [Object, смотрите ниже](#параметры-логирования) | Параметры логирования, подробнее ниже                                                                        | | ||||
| | `exitCode`        | `String`  | `""`                                            | Путь к файлу, в который будет записан признак успешного выполнения (0 - успешно, 1 - есть ошибки)            | | ||||
|  | ||||
| ## Параметры фильтрации | ||||
|  | ||||
| | Имя параметра | Тип     | Значение по умолчанию | Описание                                                                     | | ||||
| |---------------|---------|-----------------------|------------------------------------------------------------------------------| | ||||
| | `extensions`  | `Array` | `["tests"]`           | Список имен расширений, из которых грузятся тесты                            | | ||||
| | `modules`     | `Array` | `Null`                | Список имен модулей, из которых грузятся тесты                               | | ||||
| | `tests`       | `Array` | `Null`                | Список полных путей к исполняемым тестам (`[имя модуля.имя теста]`)          | | ||||
| | `suites`      | `Array` | `Null`                | **Не реализованно.** Список имен тестовых наборов, которые будут запускаться | | ||||
| | `tags`        | `Array` | `Null`                | **Не реализованно.** Список тегов, которые будут запускаться                 | | ||||
| | `contexts`    | `Array` | `Null`                | Список имен контекстов исполнения, в которых будут запускаться тесты         | | ||||
| | `paths`       | `Array` | `Null`                | **Не реализованно.** Список полных путей к исполняемым тестам                | | ||||
|  | ||||
| ## Параметры логирования | ||||
|  | ||||
| | Имя параметра | Тип       | Значение по умолчанию | Описание                                                                                                                    | | ||||
| |---------------|-----------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------| | ||||
| | `file`        | `String`  | `""`                  | Путь к файлу лога                                                                                                           | | ||||
| | `enable`      | `Boolean` | `Null`                | Признак использования логирования. Если не указан, зависит от параметра `file`, если он указан - вкл, если не указан - выкл | | ||||
| | `level`       | `String`  | `"debug"`             | Уровень детализации лога. Возможные значения: `"debug"`, `"info"`, `"error"`                                                | | ||||
|  | ||||
| Примеры: | ||||
|  | ||||
| 1. Запустить тесты расположенные в модулях `МодульТестов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" | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
| 3. Запустить все тесты с выводом подробного лога в файл, сохранить отчет файл `C:\temp\jUnit\report.xml` | ||||
|  | ||||
|     ```JSON | ||||
|     { | ||||
|         "reportPath": "C:\\temp\\jUnit\\report.xml", | ||||
|         "logging": { | ||||
|             "file": "C:\\temp\\jUnit\\tests.log", | ||||
|             "level": "debug" | ||||
|         } | ||||
|     } | ||||
|     ``` | ||||
							
								
								
									
										
											BIN
										
									
								
								documentation/docs/run/images/from-configurator.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 142 KiB | 
							
								
								
									
										
											BIN
										
									
								
								documentation/docs/run/images/from-edt.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 78 KiB | 
							
								
								
									
										30
									
								
								documentation/docs/run/run.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| # Запуск | ||||
|  | ||||
| Для запуска тестов необходимо запустить 1С:Предприятие с параметром `RunUnitTests`, при необходимости можно указать путь к файлу [конфигурации запуска](configuration.md). | ||||
|  | ||||
| :::caution Важно | ||||
| *После загрузки расширения в информационную базу необходимо отключить у него `безопасный режим` и `защиту от опасных действий`* | ||||
| ::: | ||||
|  | ||||
| ## Запуск из EDT | ||||
|  | ||||
| Для запуска тестов из EDT необходимо установить [плагин](../install/install-plugin.md), либо вручную создать файл [конфигурации запуска](configuration.md) и указать его в параметрах запуска. | ||||
|  | ||||
|  | ||||
|  | ||||
| ## Запуск из конфигуратора | ||||
|  | ||||
| Для запуска тестов из конфигуратора вы можете | ||||
|  | ||||
| * Вручную создать файл [конфигурации запуска](configuration.md) и указать его в параметрах запуска | ||||
|    | ||||
| * Воспользоваться [интерфейсом настройки](../yaxunit-ui.md#интерфейс-настройки-конфигурации) | ||||
|  | ||||
| ## Строка запуска предприятия | ||||
|  | ||||
| `[путь к клиенту 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` | ||||
| @@ -1,3 +1,7 @@ | ||||
| --- | ||||
| tags: [Getting started, Asserts] | ||||
| --- | ||||
| 
 | ||||
| # Утверждения | ||||
| 
 | ||||
| Каждый тестовый сценарий должен проверить результат работы тестируемого метода, будь то функция или процедура. | ||||
| @@ -1,3 +1,7 @@ | ||||
| --- | ||||
| tags: [Getting started] | ||||
| --- | ||||
| 
 | ||||
| # Контекст | ||||
| 
 | ||||
| Одним из важнейших блоков работы тестового движка является механизм контекстов. | ||||
| @@ -1,3 +1,8 @@ | ||||
| --- | ||||
| description: Create a doc page with rich content. | ||||
| tags: [Getting started] | ||||
| --- | ||||
| 
 | ||||
| # Пользовательский API | ||||
| 
 | ||||
| Для разработчиков тестов расширение предоставляет API для: | ||||
| @@ -1,3 +1,6 @@ | ||||
| --- | ||||
| tags: [Getting started, Mock] | ||||
| --- | ||||
| # Мокито | ||||
| 
 | ||||
| Мокито - модуль созданный по образу популярного java-фреймворка для тестирования [Mockito](https://site.mockito.org/). Расширяет возможности тестирования, позволяет легко менять логику работы системы подменяя результаты работы методов, отключая какие-либо алгоритмы и проверки. | ||||
| @@ -28,9 +31,15 @@ | ||||
| 
 | ||||
| Работа с Мокито делится на 3 стадии: | ||||
| 
 | ||||
| 1. Обучение - настраиваем поведение методов системы | ||||
| 2. Прогон - выполнение теста целевого метода | ||||
| 3. Проверка - анализ вызовов | ||||
| ```mermaid | ||||
| flowchart LR | ||||
|     training(Обучение) --> run(Прогон, запуск тестового метода) | ||||
|     run --> check(Проверка) | ||||
| ``` | ||||
| 
 | ||||
| * [Обучение](#обучение) - настраиваем поведение методов системы | ||||
| * [Прогон](#прогон) - выполнение теста целевого метода | ||||
| * [Проверка](#проверка) - анализ вызовов | ||||
| 
 | ||||
| ## Использование | ||||
| 
 | ||||
| @@ -44,7 +53,7 @@ | ||||
| * использовать явный вызов метода с параметрами на стадии обучения, например `Мокито.Обучение(Справочники.ИсточникиДанных).Когда(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Вернуть(Результат)` | ||||
| * использовать явный вызов метода с параметрами на стадии проверки, например `Мокито.Проверить(Справочники.ИсточникиДанных).КоличествоВызовов(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Больше(1)` | ||||
| 
 | ||||
| Примеры добавления методов в расширение: | ||||
| Примеры добавления методов в расширение. | ||||
| 
 | ||||
| #### Метод общего модуля | ||||
| 
 | ||||
| @@ -178,7 +187,7 @@ | ||||
|   1. `Мокито.Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Мокито.ТипизированныйПараметр(ТипИсточникДанных), Мокито.ЧисловойПараметр())).Вернуть(3)` | ||||
|   2. `Мокито.Обучение(РаботаСHTTP).Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ТипизированныйПараметр(ТипИсточникДанных), Мокито.ЧисловойПараметр()).Вернуть(3)` | ||||
| 
 | ||||
| ## Прогон | ||||
| ### Прогон | ||||
| 
 | ||||
| После обучения, настройки реакций на вызовы методов, можно запускать тест нужного метода. Для перехода к этому режиму работы Мокито используется метод `Прогон`. | ||||
| 
 | ||||
| @@ -198,7 +207,7 @@ | ||||
| Результат = РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2); // Результат будет равен 2 | ||||
| ``` | ||||
| 
 | ||||
| ## Проверка | ||||
| ### Проверка | ||||
| 
 | ||||
| После прогона теста можно проверить какие методы, с какими параметрами вызывались. Для этих целей необходимо воспользоваться методом `Проверить` | ||||
| 
 | ||||
| @@ -1,3 +1,6 @@ | ||||
| --- | ||||
| tags: [Getting started, Test data] | ||||
| --- | ||||
| # Тестовые данные | ||||
| 
 | ||||
| Почти в каждом тесте разработчику необходимы данные, которые он будет использовать при тестировании: элементы справочников, документы, остатки и тд. | ||||
| @@ -1,3 +1,6 @@ | ||||
| --- | ||||
| tags: [Getting started] | ||||
| --- | ||||
| # Регистрация тестовых методов (ЮТТесты) | ||||
| 
 | ||||
| Кроме того, чтобы написать тестовые сценарии, разработчик должен зарегистрировать их в движке. | ||||
| @@ -2,7 +2,7 @@ | ||||
| 
 | ||||
| ## Интерфейс отчета | ||||
| 
 | ||||
| Для просмотра результатов тестирования в режиме 1С:Предприятие, вам необходимо в параметрах запуска указать [настройку](../README.md#конфигурация-запуска) `showReport` | ||||
| Для просмотра результатов тестирования в режиме 1С:Предприятие, вам необходимо в параметрах запуска указать [настройку](run) `showReport` | ||||
| Например, создав файла настроек | ||||
| 
 | ||||
| ```json | ||||
							
								
								
									
										178
									
								
								documentation/docusaurus.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,178 @@ | ||||
| // @ts-check | ||||
| // Note: type annotations allow type checking and IDEs autocompletion | ||||
|  | ||||
| const lightCodeTheme = require('prism-react-renderer/themes/github'); | ||||
| const darkCodeTheme = require('prism-react-renderer/themes/dracula'); | ||||
|  | ||||
| /** @type {import('@docusaurus/types').Config} */ | ||||
| const config = { | ||||
|   title: 'YAx Unit', | ||||
|   tagline: 'Модульные тесты для 1С - это не сложно', | ||||
|   favicon: 'img/logo.png', | ||||
|  | ||||
|   // Set the production url of your site here | ||||
|   url: 'https://bia-technologies.github.io/', | ||||
|   // Set the /<baseUrl>/ pathname under which your site is served | ||||
|   // For GitHub pages deployment, it is often '/<projectName>/' | ||||
|   baseUrl: '/yaxunit', | ||||
|  | ||||
|   // GitHub pages deployment config. | ||||
|   // If you aren't using GitHub pages, you don't need these. | ||||
|   organizationName: 'bia-technologies', // Usually your GitHub org/user name. | ||||
|   projectName: 'yaxunit', // Usually your repo name. | ||||
|   deploymentBranch: 'gh-pages', | ||||
|  | ||||
|   onBrokenLinks: 'throw', | ||||
|   onBrokenMarkdownLinks: 'warn', | ||||
|  | ||||
|   // Even if you don't use internalization, you can use this field to set useful | ||||
|   // metadata like html lang. For example, if your site is Chinese, you may want | ||||
|   // to replace "en" with "zh-Hans". | ||||
|   i18n: { | ||||
|     defaultLocale: 'en', | ||||
|     locales: ['en'], | ||||
|   }, | ||||
|  | ||||
|   presets: [ | ||||
|     [ | ||||
|       'classic', | ||||
|       /** @type {import('@docusaurus/preset-classic').Options} */ | ||||
|       ({ | ||||
|         docs: { | ||||
|           routeBasePath: 'docs', | ||||
|           sidebarPath: require.resolve('./sidebars.js'), | ||||
|           // Please change this to your repo. | ||||
|           // Remove this to remove the "edit this page" links. | ||||
|           editUrl: | ||||
|             'https://github.com/bia-technologies/yaxunit/', | ||||
|         }, | ||||
|         blog: false, | ||||
|         theme: { | ||||
|           customCss: require.resolve('./src/css/custom.css'), | ||||
|         }, | ||||
|       }), | ||||
|     ] | ||||
|   ], | ||||
|   plugins: [ | ||||
|     [ | ||||
|       '@docusaurus/plugin-content-docs', | ||||
|       { | ||||
|         id: 'api', | ||||
|         path: 'api', | ||||
|         routeBasePath: 'api', | ||||
|         sidebarPath: require.resolve('./sidebarsAPI.js'), | ||||
|         // ... other options | ||||
|       }, | ||||
|     ], | ||||
|     [ | ||||
|       '@docusaurus/plugin-content-docs', | ||||
|       { | ||||
|         id: 'lessons', | ||||
|         path: 'lessons', | ||||
|         routeBasePath: 'lessons', | ||||
|         sidebarPath: require.resolve('./sidebarsLessons.js'), | ||||
|         // ... other options | ||||
|       }, | ||||
|     ], | ||||
|     [ | ||||
|       '@docusaurus/plugin-content-docs', | ||||
|       { | ||||
|         id: 'contributing', | ||||
|         path: 'contributing', | ||||
|         routeBasePath: 'contributing', | ||||
|         sidebarPath: require.resolve('./sidebarsContributing.js'), | ||||
|         // ... other options | ||||
|       }, | ||||
|     ] | ||||
|   ], | ||||
|  | ||||
|   themeConfig: | ||||
|     /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ | ||||
|     ({ | ||||
|       // Replace with your project's social card | ||||
|       navbar: { | ||||
|         title: 'YAx Unit', | ||||
|         logo: { | ||||
|           alt: 'YaxUnit Logo', | ||||
|           src: 'img/logo.png', | ||||
|         }, | ||||
|         items: [ | ||||
|           { | ||||
|             type: 'doc', | ||||
|             docId: 'user-api/index', | ||||
|             position: 'left', | ||||
|             label: 'Описание', | ||||
|           }, | ||||
|           { | ||||
|             type: 'doc', | ||||
|             docId: 'index', | ||||
|             docsPluginId: 'lessons', | ||||
|             position: 'left', | ||||
|             label: 'Уроки', | ||||
|           }, | ||||
|           { | ||||
|             type: 'doc', | ||||
|             docId: 'index', | ||||
|             docsPluginId: 'api', | ||||
|             position: 'left', | ||||
|             label: 'API', | ||||
|           }, | ||||
|           { | ||||
|             type: 'doc', | ||||
|             docId: 'index', | ||||
|             docsPluginId: 'contributing', | ||||
|             position: 'left', | ||||
|             label: 'Руководство разработчика', | ||||
|           }, | ||||
|           { | ||||
|             href: 'https://github.com/bia-technologies/yaxunit', | ||||
|             label: 'bia-technologies/yaxunit', | ||||
|             position: 'right', | ||||
|           }, | ||||
|         ], | ||||
|       }, | ||||
|       footer: { | ||||
|         style: 'dark', | ||||
|         links: [ | ||||
|           { | ||||
|             title: 'Docs', | ||||
|             items: [ | ||||
|               { | ||||
|                 label: 'Tutorial', | ||||
|                 to: '/docs/user-api', | ||||
|               }, | ||||
|             ], | ||||
|           }, | ||||
|           { | ||||
|             title: 'Community', | ||||
|             items: [ | ||||
|               { | ||||
|                 label: 'Telegram', | ||||
|                 href: 'https://t.me/BIAOpenTools/12', | ||||
|               } | ||||
|             ], | ||||
|           }, | ||||
|           { | ||||
|             title: 'More', | ||||
|             items: [ | ||||
|               { | ||||
|                 label: 'GitHub', | ||||
|                 href: 'https://github.com/bia-technologies/yaxunit', | ||||
|               }, | ||||
|             ], | ||||
|           }, | ||||
|         ], | ||||
|         copyright: `Copyright © ${new Date().getFullYear()} BIA Technologies, Inc. Built with Docusaurus.`, | ||||
|       }, | ||||
|       prism: { | ||||
|         theme: lightCodeTheme, | ||||
|         darkTheme: darkCodeTheme, | ||||
|       }, | ||||
|     }), | ||||
|     markdown: { | ||||
|       mermaid: true, | ||||
|     }, | ||||
|     themes: ['@docusaurus/theme-mermaid'], | ||||
| }; | ||||
|  | ||||
| module.exports = config; | ||||
							
								
								
									
										3
									
								
								documentation/lessons/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| # Уроки и примеры использования YAxUnit | ||||
|  | ||||
| Здесь будут собраны различные материалы для лучшего понимая принципов написания тестов в работы с YAxUnit | ||||
							
								
								
									
										12966
									
								
								documentation/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										44
									
								
								documentation/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,44 @@ | ||||
| { | ||||
|   "name": "documentation", | ||||
|   "version": "0.0.0", | ||||
|   "private": true, | ||||
|   "scripts": { | ||||
|     "docusaurus": "docusaurus", | ||||
|     "start": "docusaurus start", | ||||
|     "build": "docusaurus build", | ||||
|     "swizzle": "docusaurus swizzle", | ||||
|     "deploy": "docusaurus deploy", | ||||
|     "clear": "docusaurus clear", | ||||
|     "serve": "docusaurus serve", | ||||
|     "write-translations": "docusaurus write-translations", | ||||
|     "write-heading-ids": "docusaurus write-heading-ids" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@docusaurus/core": "2.3.1", | ||||
|     "@docusaurus/preset-classic": "2.3.1", | ||||
|     "@docusaurus/theme-mermaid": "^2.3.1", | ||||
|     "@mdx-js/react": "^1.6.22", | ||||
|     "clsx": "^1.2.1", | ||||
|     "prism-react-renderer": "^1.3.5", | ||||
|     "react": "^17.0.2", | ||||
|     "react-dom": "^17.0.2" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@docusaurus/module-type-aliases": "2.3.1" | ||||
|   }, | ||||
|   "browserslist": { | ||||
|     "production": [ | ||||
|       ">0.5%", | ||||
|       "not dead", | ||||
|       "not op_mini all" | ||||
|     ], | ||||
|     "development": [ | ||||
|       "last 1 chrome version", | ||||
|       "last 1 firefox version", | ||||
|       "last 1 safari version" | ||||
|     ] | ||||
|   }, | ||||
|   "engines": { | ||||
|     "node": ">=16.14" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										33
									
								
								documentation/sidebars.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| /** | ||||
|  * Creating a sidebar enables you to: | ||||
|  - create an ordered group of docs | ||||
|  - render a sidebar for each doc of that group | ||||
|  - provide next/previous navigation | ||||
|  | ||||
|  The sidebars can be generated from the filesystem, or explicitly defined here. | ||||
|  | ||||
|  Create as many sidebars as you want. | ||||
|  */ | ||||
|  | ||||
| // @ts-check | ||||
|  | ||||
| /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ | ||||
| const sidebars = { | ||||
|   // By default, Docusaurus generates a sidebar from the docs folder structure | ||||
|   tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], | ||||
|  | ||||
|   // But you can create a sidebar manually | ||||
|   /* | ||||
|   tutorialSidebar: [ | ||||
|     'intro', | ||||
|     'hello', | ||||
|     { | ||||
|       type: 'category', | ||||
|       label: 'Tutorial', | ||||
|       items: ['tutorial-basics/create-a-document'], | ||||
|     }, | ||||
|   ], | ||||
|    */ | ||||
| }; | ||||
|  | ||||
| module.exports = sidebars; | ||||
							
								
								
									
										33
									
								
								documentation/sidebarsAPI.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| /** | ||||
|  * Creating a sidebar enables you to: | ||||
|  - create an ordered group of docs | ||||
|  - render a sidebar for each doc of that group | ||||
|  - provide next/previous navigation | ||||
|  | ||||
|  The sidebars can be generated from the filesystem, or explicitly defined here. | ||||
|  | ||||
|  Create as many sidebars as you want. | ||||
|  */ | ||||
|  | ||||
| // @ts-check | ||||
|  | ||||
| /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ | ||||
| const sidebars = { | ||||
|   // By default, Docusaurus generates a sidebar from the docs folder structure | ||||
|   api: [{type: 'autogenerated', dirName: '.'}], | ||||
|  | ||||
|   // But you can create a sidebar manually | ||||
|   /* | ||||
|   tutorialSidebar: [ | ||||
|     'intro', | ||||
|     'hello', | ||||
|     { | ||||
|       type: 'category', | ||||
|       label: 'Tutorial', | ||||
|       items: ['tutorial-basics/create-a-document'], | ||||
|     }, | ||||
|   ], | ||||
|    */ | ||||
| }; | ||||
|  | ||||
| module.exports = sidebars; | ||||
							
								
								
									
										33
									
								
								documentation/sidebarsContributing.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| /** | ||||
|  * Creating a sidebar enables you to: | ||||
|  - create an ordered group of docs | ||||
|  - render a sidebar for each doc of that group | ||||
|  - provide next/previous navigation | ||||
|  | ||||
|  The sidebars can be generated from the filesystem, or explicitly defined here. | ||||
|  | ||||
|  Create as many sidebars as you want. | ||||
|  */ | ||||
|  | ||||
| // @ts-check | ||||
|  | ||||
| /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ | ||||
| const sidebars = { | ||||
|   // By default, Docusaurus generates a sidebar from the docs folder structure | ||||
|   contributing: [{type: 'autogenerated', dirName: '.'}], | ||||
|  | ||||
|   // But you can create a sidebar manually | ||||
|   /* | ||||
|   tutorialSidebar: [ | ||||
|     'intro', | ||||
|     'hello', | ||||
|     { | ||||
|       type: 'category', | ||||
|       label: 'Tutorial', | ||||
|       items: ['tutorial-basics/create-a-document'], | ||||
|     }, | ||||
|   ], | ||||
|    */ | ||||
| }; | ||||
|  | ||||
| module.exports = sidebars; | ||||
							
								
								
									
										33
									
								
								documentation/sidebarsLessons.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| /** | ||||
|  * Creating a sidebar enables you to: | ||||
|  - create an ordered group of docs | ||||
|  - render a sidebar for each doc of that group | ||||
|  - provide next/previous navigation | ||||
|  | ||||
|  The sidebars can be generated from the filesystem, or explicitly defined here. | ||||
|  | ||||
|  Create as many sidebars as you want. | ||||
|  */ | ||||
|  | ||||
| // @ts-check | ||||
|  | ||||
| /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ | ||||
| const sidebars = { | ||||
|   // By default, Docusaurus generates a sidebar from the docs folder structure | ||||
|   lessons: [{type: 'autogenerated', dirName: '.'}], | ||||
|  | ||||
|   // But you can create a sidebar manually | ||||
|   /* | ||||
|   tutorialSidebar: [ | ||||
|     'intro', | ||||
|     'hello', | ||||
|     { | ||||
|       type: 'category', | ||||
|       label: 'Tutorial', | ||||
|       items: ['tutorial-basics/create-a-document'], | ||||
|     }, | ||||
|   ], | ||||
|    */ | ||||
| }; | ||||
|  | ||||
| module.exports = sidebars; | ||||
							
								
								
									
										30
									
								
								documentation/src/css/custom.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| /** | ||||
|  * Any CSS included here will be global. The classic template | ||||
|  * bundles Infima by default. Infima is a CSS framework designed to | ||||
|  * work well for content-centric websites. | ||||
|  */ | ||||
|  | ||||
| /* You can override the default Infima variables here. */ | ||||
| :root { | ||||
|   --ifm-color-primary: #2e8555; | ||||
|   --ifm-color-primary-dark: #29784c; | ||||
|   --ifm-color-primary-darker: #277148; | ||||
|   --ifm-color-primary-darkest: #205d3b; | ||||
|   --ifm-color-primary-light: #33925d; | ||||
|   --ifm-color-primary-lighter: #359962; | ||||
|   --ifm-color-primary-lightest: #3cad6e; | ||||
|   --ifm-code-font-size: 95%; | ||||
|   --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); | ||||
| } | ||||
|  | ||||
| /* For readability concerns, you should choose a lighter palette in dark mode. */ | ||||
| [data-theme='dark'] { | ||||
|   --ifm-color-primary: #25c2a0; | ||||
|   --ifm-color-primary-dark: #21af90; | ||||
|   --ifm-color-primary-darker: #1fa588; | ||||
|   --ifm-color-primary-darkest: #1a8870; | ||||
|   --ifm-color-primary-light: #29d5b0; | ||||
|   --ifm-color-primary-lighter: #32d8b4; | ||||
|   --ifm-color-primary-lightest: #4fddbf; | ||||
|   --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); | ||||
| } | ||||
| Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB | 
							
								
								
									
										197
									
								
								documentation/src/pages/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,197 @@ | ||||
| --- | ||||
| sidebar_position: 0 | ||||
| slug: / | ||||
| --- | ||||
|  | ||||
| # YAXUnit. Расширение для запуска тестов | ||||
|  | ||||
| ---- | ||||
|  | ||||
| [](https://github.com/bia-technologies/yaxunit/actions) | ||||
| [](https://github.com/bia-technologies/yaxunit/releases/latest) | ||||
| [](https://github.com/bia-technologies/yaxunit/releases) | ||||
| [](https://sonar.openbsl.ru/dashboard?id=yaxunit) | ||||
| [](https://sonar.openbsl.ru/dashboard?id=yaxunit) | ||||
|  | ||||
| Обсудить в [телеграмм чате](https://t.me/BIAOpenTools/12) | ||||
|  | ||||
| ---- | ||||
|  | ||||
| - [Назначение](#назначение) | ||||
|   - [Возможности](#возможности) | ||||
| - [Пример тестового модуля](#пример-тестового-модуля) | ||||
| - [Запуск](#запуск) | ||||
|   - [Запуск из EDT](#запуск-из-edt) | ||||
|   - [Запуск вне EDT](#запуск-вне-edt) | ||||
| - [Благодарности](#благодарности) | ||||
| - [Лицензия](#лицензия) | ||||
|  | ||||
| ## Назначение | ||||
|  | ||||
| Самостоятельное расширение для написания и выполнения модульного тестирования. | ||||
|  | ||||
| ### Возможности | ||||
|  | ||||
| - YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов | ||||
| - Разрабатывалось с оглядкой на JUnit5, пожалуй, лучший фреймворк тестирования | ||||
| - Предоставляет движок выполнения тестов | ||||
| - Предоставляет утверждения для проверки ожидаемых результатов | ||||
| - Тесты могут быть организованы в наборы и выполняться в разных контекстах | ||||
| - Позволяет быстрее и проще не только писать, но и читать тесты | ||||
| - Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json. | ||||
| - Большая часть пользовательского API реализована как [текучие выражения](https://ru.wikipedia.org/wiki/Fluent_interface) | ||||
| - Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями | ||||
| - Реализован [плагин для EDT](https://github.com/bia-technologies/edt-test-runner), который упрощает процесс запуска тестов | ||||
|  | ||||
| Подробнее ознакомиться с функциональностью вы можете изучив [документацию](/docs/user-api). | ||||
|  | ||||
| А для того, что бы начать писать тесты необходимо [установить расширение](/docs/install) в свою IDE (конфигуратор или EDT). | ||||
|  | ||||
| ## Пример тестового модуля | ||||
|  | ||||
| Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты. | ||||
|  | ||||
| Пример модуля тестов: | ||||
|  | ||||
| ```bsl | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
|      | ||||
|     // Регистрация тестов | ||||
|     ЮТТесты // Регистрация тестов выполняет через модуль регистратор | ||||
|         .ДобавитьТестовыйНабор("Математические методы")               // Набор - объединение тестов | ||||
|             .ДобавитьТест("Сложение")                                 // Обязательно при регистрации указываем имя экспортного метода | ||||
|             .ДобавитьТест("Вычитание", "Вычитание")                   // Также можно указать представление теста | ||||
|             .ДобавитьТест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля | ||||
|             .ДобавитьКлиентскийТест("УмножениеНаКлиенте")                   // Есть отдельный метод для регистрации клиентских тестов | ||||
|             .ДобавитьСерверныйТест("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов | ||||
|         .ДобавитьТестовыйНабор("Строковые методы") | ||||
|             .ДобавитьТест("СтрНайти") | ||||
|             .ДобавитьТест("СтрРазделить"); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Тесты | ||||
|  | ||||
| Процедура Сложение() Экспорт | ||||
|  | ||||
|     // Реализация теста на сложение | ||||
|     ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение | ||||
|         .ИмеетТип("Число") // Проверим тип | ||||
|         .Заполнено() // Заполненность проверяемого значения | ||||
|         .Больше(0) // Сравним с нулем | ||||
|         .Равно(5); // Проверим ожидаемый результат | ||||
|  | ||||
|     ЮТест.ОжидаетЧто(-8 + 8, "-8 + 8") // Проверим второй вариант | ||||
|         .Равно(0); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Вычитание() Экспорт | ||||
|  | ||||
|     // Реализация теста на вычитание | ||||
|     ЮТест.ОжидаетЧто(2 - 3, "2 - 3").ИмеетТип("Число").Заполнено().Меньше(0); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область События | ||||
|  | ||||
| // Также в тесте можно обрабатывать события выполнения | ||||
| // Например можно реализовать подготовку и удаление тестовых данных | ||||
| // Зачистку временных файлов, настройку системы | ||||
|  | ||||
| Процедура ПередВсемиТестами() Экспорт | ||||
|     // Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза | ||||
|     Сообщить("Запуск тестирования"); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПередТестовымНабором() Экспорт | ||||
|  | ||||
|     // Выполняется перед каждым тестовым набором для каждого контекста выполнения | ||||
|     Контекст = ЮТест.КонтекстТестовогоНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании | ||||
|                                                 // Контекст живет в рамках контекста выполнения,  | ||||
|                                                 // таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами | ||||
|     Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах()); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПередКаждымТестом() Экспорт | ||||
|  | ||||
|     // Выполняется перед каждым тестом | ||||
|     Контекст = ЮТест.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании | ||||
|                                       // Контекст создает перед тестом и уничтожается после его выполнения | ||||
|                                       // В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить | ||||
|     Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах()); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеКаждогоТеста() Экспорт | ||||
|  | ||||
|     // Выполняется после каждого теста | ||||
|     Контекст = ЮТест.КонтекстТеста(); | ||||
|     Сообщить("Время выполнения теста: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеТестовогоНабора() Экспорт | ||||
|  | ||||
|     // Выполняется после каждого тестового набора для каждого контекста выполнения | ||||
|     // Применяется для очистки данных и т.д. | ||||
|     Контекст = ЮТест.КонтекстТестовогоНабора(); | ||||
|     Сообщить("Время выполнения набора: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеВсехТестов() Экспорт | ||||
|  | ||||
|     // Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза | ||||
|     // В этом событии все контексты уже уничтожены | ||||
|     Сообщить("Тестирование завершено"); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ``` | ||||
|  | ||||
| После запуска тестов модуля в EDT (используя [плагин](https://github.com/bia-technologies/edt-test-runner)) получаем такой отчет: | ||||
|  | ||||
|  | ||||
|  | ||||
| ## Запуск | ||||
|  | ||||
| ### Запуск из EDT | ||||
|  | ||||
| При разработке в EDT процесс запуска тестов можно упростить, установив [плагин](https://github.com/bia-technologies/edt-test-runner) | ||||
| и настроив конфигурацию запуска, как указано в описании плагина. | ||||
|  | ||||
| ### Запуск вне EDT | ||||
|  | ||||
| Для запуска тестов без использования EDT необходимо: | ||||
|  | ||||
| 1. Сформировать файл конфигурации запуска [вручную](/docs/run), либо воспользоваться [формой настройки](/docs/yaxunit-ui) | ||||
| 2. [Запустить 1С:Предприятие](/docs/run) с параметром `RunUnitTests=ПутьКФайлуКонфигурации.json`. | ||||
|  | ||||
| ## Благодарности | ||||
|  | ||||
| Приносим благодарность всему [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) | ||||
							
								
								
									
										0
									
								
								documentation/static/.nojekyll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								documentation/static/img/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.0 KiB | 
| @@ -58,13 +58,20 @@ | ||||
| КонецФункции | ||||
|  | ||||
| // Прогон | ||||
| //  Переводит мокито в режим прогона тестов | ||||
| //  Вызов этого метода обязателен перед выполнением тестового прогона метода  | ||||
| Процедура Прогон() Экспорт | ||||
| // Переводит мокито в режим прогона тестов | ||||
| // Вызов этого метода обязателен перед выполнением тестового прогона метода | ||||
| //  | ||||
| // Параметры: | ||||
| //  СброситьСтатистику - Булево - Сбросить статистику прошлых прогонов | ||||
| Процедура Прогон(СброситьСтатистику = Истина) Экспорт | ||||
| 	 | ||||
| 	Режимы = МокитоСлужебный.РежимыРаботы(); | ||||
| 	МокитоСлужебный.УстановитьРежим(Режимы.Тестирование); | ||||
| 	 | ||||
| 	Если СброситьСтатистику Тогда | ||||
| 		МокитоСлужебный.ОчиститьСтатистику(); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| // Проверить. | ||||
| @@ -139,7 +146,7 @@ | ||||
| //  см. МокитоСлужебный.ОписаниеМаскиПараметра | ||||
| Функция ТипизированныйПараметр(Тип) Экспорт | ||||
| 	 | ||||
| 	МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 1); | ||||
| 	МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 10); | ||||
| 	МаскаПараметра.Вставить("Тип", Тип); | ||||
| 	 | ||||
| 	Возврат МаскаПараметра; | ||||
|   | ||||
| @@ -224,7 +224,7 @@ | ||||
| 			 | ||||
| 		Иначе | ||||
| 			 | ||||
| 			Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 10)); | ||||
| 			Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 100)); | ||||
| 			 | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
|   | ||||
| @@ -46,24 +46,28 @@ | ||||
| //  ОбщийМодуль | ||||
| Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт | ||||
| 	 | ||||
| 	Параметры = ПараметрыПроверки(); | ||||
| 	 | ||||
| 	Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда | ||||
| 		СтруктураВызоваМетода = ИмяМетода; | ||||
| 	Иначе | ||||
| 		СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда | ||||
| 		ВызватьИсключение "Установлен другой проверяемый объект"; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода; | ||||
| 	СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова); | ||||
| 	 | ||||
| 	Возврат МокитоПроверки; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Возвращает информацию о вызовах метода. | ||||
| //  | ||||
| // Параметры: | ||||
| //  ИмяМетода - Строка - Имя метода проверяемого объекта | ||||
| //            - Произвольный - Вызов метода проверяемого объекта | ||||
| //  ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода | ||||
| // Возвращаемое значение: | ||||
| //  Массив из см. МокитоСлужебный.СтруктураВызоваМетода - Вызовы метода | ||||
| Функция Вызовы(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт | ||||
| 	 | ||||
| 	СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова); | ||||
| 	 | ||||
| 	Возврат СтатистикаВызовов(); | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Равно. | ||||
| //  Проверяет подобранные вызовы. Их количество должно быть равно переданному значение, иначе вызывается исключение | ||||
| // Параметры: | ||||
| @@ -269,4 +273,22 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| Процедура СпозиционироватьсяНаМетоде(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) | ||||
| 	 | ||||
| 	Параметры = ПараметрыПроверки(); | ||||
| 	 | ||||
| 	Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда | ||||
| 		СтруктураВызоваМетода = ИмяМетода; | ||||
| 	Иначе | ||||
| 		СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда | ||||
| 		ВызватьИсключение "Установлен другой проверяемый объект"; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -35,6 +35,19 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| // Настройки. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Настройки: | ||||
| //  * Метод - Строка | ||||
| //  * Реакция - Строка | ||||
| //  * Настройки - Строка | ||||
| //  * Перехват - Строка | ||||
| //  * Режим - Строка - см. РежимыРаботы | ||||
| //  * Статистика - Структура - Статистика вызовов: | ||||
| //  	* Вызовы - Соответствие из Структура | ||||
| //  * ПараметрыОбучения - Структура | ||||
| //  * ПараметрыПроверки - Структура | ||||
| Функция Настройки() Экспорт | ||||
| 	 | ||||
| 	Настройки =  ЮТКонтекст.ЗначениеКонтекста(КлючНастроек()); | ||||
| @@ -181,7 +194,7 @@ | ||||
| 		 | ||||
| 	ИначеЕсли Условие.Режим = ТипыУсловий.Значение Тогда | ||||
| 		 | ||||
| 		Совпадает = Условие.Значение = Параметр; | ||||
| 		Совпадает = ЮТОбщий.ДанныеСовпадают(Условие.Значение, Параметр); | ||||
| 		 | ||||
| 	ИначеЕсли Условие.Режим = ТипыУсловий.Тип Тогда | ||||
| 		 | ||||
| @@ -263,6 +276,8 @@ | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Статистика | ||||
|  | ||||
| Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт | ||||
| 	 | ||||
| 	Если ЭтоОбъект(Объект) Тогда | ||||
| @@ -279,6 +294,15 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| Процедура ОчиститьСтатистику() Экспорт | ||||
| 	 | ||||
| 	Настройки = Настройки(); | ||||
| 	Настройки.Статистика.Вызовы.Очистить(); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область ОбработчикиСобытий | ||||
|  | ||||
| Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт | ||||
| @@ -383,19 +407,33 @@ | ||||
|  | ||||
| Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода) | ||||
| 	 | ||||
| 	Реакция = Неопределено; | ||||
| 	Приоритет = 0; | ||||
| 	ПараметрыВызова = СтруктураВызоваМетода.Параметры; | ||||
| 	 | ||||
| 	Для Каждого ВозможнаяРеакция Из ПараметрыПерехватаМетода.Реакции Цикл | ||||
| 	ПриоритетыРеакций = Новый Массив(); | ||||
| 	ЛучшийПриоритет = 0; | ||||
| 	 | ||||
| 	Для Каждого Реакция Из ПараметрыПерехватаМетода.Реакции Цикл | ||||
| 		 | ||||
| 		ПриоритетВозможнойРеакции = ПроверитьРеакцию(ВозможнаяРеакция, ПараметрыВызова); | ||||
| 		ПриоритетРеакции = ПроверитьРеакцию(Реакция, ПараметрыВызова); | ||||
| 		ПриоритетыРеакций.Добавить(Новый Структура("Приоритет, Реакция", ПриоритетРеакции, Реакция)); | ||||
| 		 | ||||
| 		Если ПриоритетВозможнойРеакции > Приоритет Тогда | ||||
| 			 | ||||
| 			Реакция = ВозможнаяРеакция; | ||||
| 			Приоритет = ПриоритетВозможнойРеакции; | ||||
| 			 | ||||
| 		Если ЛучшийПриоритет < ПриоритетРеакции Тогда | ||||
| 			ЛучшийПриоритет = ПриоритетРеакции; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	Реакция = Неопределено; | ||||
| 	Для Каждого ПриоритетРеакции Из ПриоритетыРеакций Цикл | ||||
| 		 | ||||
| 		Если ПриоритетРеакции.Приоритет = ЛучшийПриоритет Тогда | ||||
| 			Реакция = ПриоритетРеакции.Реакция; | ||||
| 		Иначе | ||||
| 			Продолжить; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 		Если Реакция.Действие <> Неопределено И НЕ Реакция.Действие.Обработано Тогда | ||||
| 			Прервать; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
|   | ||||
| @@ -20,51 +20,101 @@ | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область ПрограммныйИнтерфейс | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
| 
 | ||||
| #Если Клиент Тогда | ||||
| 
 | ||||
| // ВыполнитьМодульноеТестирование | ||||
| //  Метод, по параметрам запуска, запускает выполнение всего процесса тестирования. | ||||
| //  | ||||
| // Параметры: | ||||
| //  Параметры - См. ЮТФабрика.ПараметрыЗапуска | ||||
| Процедура ВыполнитьМодульноеТестирование(Параметры = Неопределено) Экспорт | ||||
| Процедура ВыполнитьМодульноеТестирование() Экспорт | ||||
| 	 | ||||
| 	Если Параметры = Неопределено Тогда | ||||
| 		Параметры = ЮТПараметры.ПараметрыЗапуска(ПараметрЗапуска); | ||||
| 	ПараметрыИсполнения = ПараметрыИсполнения(); | ||||
| 	ПараметрыИсполнения.АргументыЗапуска = ПараметрЗапуска; | ||||
| 	 | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьПараметры"); | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикАнализПараметровЗапуска"); | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты"); | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование"); | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьОтчет"); | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьКодВозврата"); | ||||
| 	ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗавершить"); | ||||
| 	 | ||||
| 	ВызватьСледующийОбработчик(ПараметрыИсполнения); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ВызватьОбработчик(Обработчик, Результат = Неопределено) Экспорт | ||||
| 	 | ||||
| 	Если Обработчик <> Неопределено Тогда | ||||
| 		ВыполнитьОбработкуОповещения(Обработчик, Результат); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Если НЕ Параметры.ВыполнятьМодульноеТестирование Тогда | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| #КонецОбласти | ||||
| 
 | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
| 
 | ||||
| #Область ОбработчикиЦепочкиДействий | ||||
| 
 | ||||
| Процедура ОбработчикОшибки(ИнформацияОбОшибки, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	// TODO Подумать надо ли и как реализовать нормально | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикЗагрузитьПараметры(Результат, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	Обработчик = СледующийОбработчик(ДополнительныеПараметры); | ||||
| 	ЮТПараметрыЗапуска.ПараметрыЗапуска(ДополнительныеПараметры.АргументыЗапуска, Обработчик); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикАнализПараметровЗапуска(ПараметрыЗапуска, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	ДополнительныеПараметры.ПараметрыЗапуска = ПараметрыЗапуска; | ||||
| 	 | ||||
| 	Если НЕ ПараметрыЗапуска.ВыполнятьМодульноеТестирование Тогда | ||||
| 		Возврат; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	ВызватьСледующийОбработчик(ДополнительныеПараметры); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикЗагрузитьТесты(Результат, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	Параметры = ДополнительныеПараметры.ПараметрыЗапуска; | ||||
| 	 | ||||
| 	ЮТКонтекст.ИнициализироватьКонтекст(); | ||||
| 	ЮТКонтекст.УстановитьГлобальныеНастройкиВыполнения(Параметры.settings); | ||||
| 	ЮТСобытия.Инициализация(Параметры); | ||||
| 	// Повторно сохраним для передачи на сервер | ||||
| 	ЮТКонтекст.УстановитьГлобальныеНастройкиВыполнения(ЮТКонтекст.ГлобальныеНастройкиВыполнения()); | ||||
| 	ЮТКонтекст.УстановитьКонтекстИсполнения(ДанныеКонтекстаИсполнения()); | ||||
| 	ЮТКонтекст.УстановитьКонтекстИсполнения(ЮТФабрика.НовыйКонтекстИсполнения()); | ||||
| 	 | ||||
| 	ЮТСобытия.ПередЧтениеСценариев(); | ||||
| 	ТестовыеМодули = ЮТЧитатель.ЗагрузитьТесты(Параметры); | ||||
| 	ЮТСобытия.ПослеЧтенияСценариев(ТестовыеМодули); | ||||
| 	 | ||||
| 	РезультатыТестирования = Новый Массив(); | ||||
| 	 | ||||
| 	КоллекцияКатегорийНаборов = Новый Массив(); | ||||
| 	 | ||||
| 	Для Каждого ТестовыйМодуль Из ТестовыеМодули Цикл | ||||
| 		 | ||||
| 		КатегорииНаборов = КатегорииНаборовТестовМодуля(ТестовыйМодуль); | ||||
| 		КоллекцияКатегорийНаборов.Добавить(КатегорииНаборов); | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	ЮТСобытия.ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов); | ||||
| 	ДополнительныеПараметры.КоллекцияКатегорийНаборов = КоллекцияКатегорийНаборов; | ||||
| 	 | ||||
| 	ВызватьСледующийОбработчик(ДополнительныеПараметры); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикВыполнитьТестирование(Результат, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	РезультатыТестирования = Новый Массив(); | ||||
| 	КоллекцияКатегорийНаборов = ДополнительныеПараметры.КоллекцияКатегорийНаборов; | ||||
| 	 | ||||
| 	Для Каждого КатегорииНаборов Из КоллекцияКатегорийНаборов Цикл | ||||
| 		 | ||||
| 		Результат = ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль); | ||||
| 		Результат = ЮТИсполнительКлиентСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль); | ||||
| 		ЮТОбщий.ДополнитьМассив(РезультатыТестирования, Результат); | ||||
| 		 | ||||
| 		Результат = ЮТИсполнительСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Серверные, КатегорииНаборов.ТестовыйМодуль); | ||||
| @@ -76,129 +126,81 @@ | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	ЮТОтчет.СформироватьОтчет(РезультатыТестирования, Параметры); | ||||
| 	ДополнительныеПараметры.РезультатыТестирования = РезультатыТестирования; | ||||
| 	ВызватьСледующийОбработчик(ДополнительныеПараметры); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикСохранитьОтчет(Результат, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	Если ЗначениеЗаполнено(ДополнительныеПараметры.ПараметрыЗапуска.reportPath) Тогда | ||||
| 		Обработчик = СледующийОбработчик(ДополнительныеПараметры); | ||||
| 		ЮТОтчет.СформироватьОтчет(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска, Обработчик); | ||||
| 	Иначе | ||||
| 		ВызватьСледующийОбработчик(ДополнительныеПараметры); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикСохранитьКодВозврата(Результат, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	ЗаписатьКодВозврата(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска); | ||||
| 	ВызватьСледующийОбработчик(ДополнительныеПараметры); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура ОбработчикЗавершить(Результат, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	Параметры = ДополнительныеПараметры.ПараметрыЗапуска; | ||||
| 	 | ||||
| 	Если Параметры.showReport Тогда | ||||
| 		ПоказатьОтчет(РезультатыТестирования, Параметры); | ||||
| 		ПоказатьОтчет(ДополнительныеПараметры.РезультатыТестирования, Параметры); | ||||
| 	ИначеЕсли Параметры.CloseAfterTests Тогда | ||||
| 		ПрекратитьРаботуСистемы(Ложь); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| #КонецЕсли | ||||
| 
 | ||||
| #КонецОбласти | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции для служебного использования внутри подсистемы | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
| 
 | ||||
| // Выполняет тесты группы наборов, соответствующих одному режиму выполнения (клиент/сервер)  | ||||
| // Параметры: | ||||
| //  Наборы - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов  | ||||
| //  ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов - Результат прогона наборов тестов с заполненной информацией о выполнении | ||||
| Функция ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль) Экспорт | ||||
| Процедура ВызватьСледующийОбработчик(ПараметрыИсполнения, Результат = Неопределено) | ||||
| 	 | ||||
| 	Если Наборы.Количество() = 0 Тогда | ||||
| 		Возврат Наборы; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Уровни = ЮТФабрика.УровниИсполнения(); | ||||
| 	ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль; | ||||
| 	 | ||||
| 	ЮТСобытия.ПередВсемиТестамиМодуля(ТестовыйМодуль); | ||||
| 	 | ||||
| 	Если ЕстьОшибки(ТестовыйМодуль) Тогда | ||||
| 		СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки); | ||||
| 		Возврат Наборы; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Для Каждого Набор Из Наборы Цикл | ||||
| 		 | ||||
| 		Результат = ВыполнитьНаборТестов(Набор, ТестовыйМодуль); | ||||
| 		 | ||||
| 		Если Результат <> Неопределено Тогда | ||||
| 			Набор.Тесты = Результат; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль; | ||||
| 	 | ||||
| 	ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль); | ||||
| 	 | ||||
| 	Если ЕстьОшибки(ТестовыйМодуль) Тогда | ||||
| 		СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	ТестовыйМодуль.Ошибки.Очистить(); // Эти ошибки используются как буфер и уже скопированы в наборы, но ломают последующие наборы | ||||
| 	 | ||||
| 	Возврат Наборы; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| #КонецОбласти | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Процедуры и функции, составляющие внутреннюю реализацию модуля  | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
| 
 | ||||
| Функция ВыполнитьНаборТестов(Набор, ТестовыйМодуль) | ||||
| 	 | ||||
| 	Уровни = ЮТФабрика.УровниИсполнения(); | ||||
| 	ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов; | ||||
| 	 | ||||
| 	Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах(); | ||||
| 	ЮТСобытия.ПередТестовымНабором(ТестовыйМодуль, Набор); | ||||
| 	 | ||||
| 	Если ЕстьОшибки(Набор) Тогда | ||||
| 		Возврат Неопределено; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Результаты = Новый Массив(); | ||||
| 	ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Тест; | ||||
| 	 | ||||
| 	Для Каждого Тест Из Набор.Тесты Цикл | ||||
| 		 | ||||
| 		Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах(); | ||||
| 		 | ||||
| 		ЮТСобытия.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест); | ||||
| 		ВыполнитьТестовыйМетод(Тест); | ||||
| 		ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест); | ||||
| 		 | ||||
| 		ОбработатьЗавершениеТеста(Тест); | ||||
| 		 | ||||
| 		Результаты.Добавить(Тест); | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов; | ||||
| 	ЮТСобытия.ПослеТестовогоНабора(ТестовыйМодуль, Набор); | ||||
| 	 | ||||
| 	Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта; | ||||
| 		 | ||||
| 	Возврат Результаты; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| Процедура ОбработатьЗавершениеТеста(Тест) | ||||
| 	 | ||||
| 	Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта; | ||||
| 	Тест.Статус = ЮТРегистрацияОшибок.СтатусВыполненияТеста(Тест); | ||||
| 	Обработчик = СледующийОбработчик(ПараметрыИсполнения); | ||||
| 	ВыполнитьОбработкуОповещения(Обработчик, Результат); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Функция СледующийОбработчик(ПараметрыИсполнения) | ||||
| 	 | ||||
| 	ПараметрыИсполнения.ИндексСледующегоОбработчика = ПараметрыИсполнения.ИндексСледующегоОбработчика + 1; | ||||
| 	Возврат ПараметрыИсполнения.Цепочка[ПараметрыИсполнения.ИндексСледующегоОбработчика]; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, ИмяМетода) | ||||
| 	 | ||||
| 	Обработчик = Новый ОписаниеОповещения(ИмяМетода, ЭтотОбъект, ПараметрыИсполнения, "ОбработчикОшибки", ЭтотОбъект); | ||||
| 	ПараметрыИсполнения.Цепочка.Добавить(Обработчик); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Функция ПараметрыИсполнения() | ||||
| 	 | ||||
| 	Параметры = Новый Структура(); | ||||
| 	Параметры.Вставить("АргументыЗапуска"); | ||||
| 	Параметры.Вставить("ПараметрыЗапуска"); | ||||
| 	Параметры.Вставить("Цепочка", Новый Массив()); | ||||
| 	Параметры.Вставить("ИндексСледующегоОбработчика", -1); | ||||
| 	Параметры.Вставить("КоллекцияКатегорийНаборов"); | ||||
| 	Параметры.Вставить("РезультатыТестирования"); | ||||
| 	 | ||||
| 	Возврат Параметры; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| Функция КатегорииНаборовТестовМодуля(ТестовыйМодуль) | ||||
| 	 | ||||
| 	КатегорииНаборов = ОписаниеКатегорияНабораТестов(ТестовыйМодуль); | ||||
| 	КатегорииНаборов = ЮТФабрика.ОписаниеКатегорияНабораТестов(ТестовыйМодуль); | ||||
| 	 | ||||
| 	ИсполняемыеТестовыеНаборы = Новый Массив; | ||||
| 	 | ||||
| @@ -288,79 +290,6 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| Функция ЕстьОшибки(Объект) | ||||
| 	Возврат ЗначениеЗаполнено(Объект.Ошибки); | ||||
| КонецФункции | ||||
| 
 | ||||
| Процедура ВыполнитьТестовыйМетод(Тест) | ||||
| 	 | ||||
| 	Если ЕстьОшибки(Тест) Тогда | ||||
| 		Возврат; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста(); | ||||
| 	Тест.Статус = СтатусыИсполненияТеста.Исполнение; | ||||
| 	 | ||||
| 	Ошибка = ЮТОбщий.ВыполнитьМетод(Тест.ПолноеИмяМетода, Тест.Параметры); | ||||
| 	 | ||||
| 	Если Ошибка <> Неопределено Тогда | ||||
| 		ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуВыполненияТеста(Тест, Ошибка); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| Процедура СкопироватьОшибкиВ(Объекты, Ошибки) | ||||
| 	 | ||||
| 	Для Каждого Объект Из Объекты Цикл | ||||
| 		 | ||||
| 		ЮТОбщий.ДополнитьМассив(Объект.Ошибки, Ошибки); | ||||
| 		 | ||||
| 		Если Объект.Свойство("Статус") Тогда | ||||
| 			Объект.Статус = ЮТФабрика.СтатусыИсполненияТеста().Сломан; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| // Данные контекста исполнения. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Данные контекста исполнения: | ||||
| //  * Уровень - Строка | ||||
| Функция ДанныеКонтекстаИсполнения() | ||||
| 	 | ||||
| 	Контекст = Новый Структура(); | ||||
| 	Контекст.Вставить("Уровень", ""); | ||||
| 	 | ||||
| 	Возврат Контекст; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| // Описание категория набора тестов. | ||||
| //  | ||||
| // Параметры: | ||||
| //  ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Описание категория набора тестов: | ||||
| // * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля | ||||
| // * Клиентские - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| // * Серверные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| // * Пропущенные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль) | ||||
| 	 | ||||
| 	КатегорииНаборов = Новый Структура(); | ||||
| 	КатегорииНаборов.Вставить("ТестовыйМодуль",  ТестовыйМодуль); | ||||
| 	КатегорииНаборов.Вставить("Клиентские",  Новый Массив()); | ||||
| 	КатегорииНаборов.Вставить("Серверные",   Новый Массив()); | ||||
| 	КатегорииНаборов.Вставить("Пропущенные", Новый Массив()); | ||||
| 	 | ||||
| 	Возврат КатегорииНаборов; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| #Если Клиент Тогда | ||||
| Процедура ПоказатьОтчет(РезультатыТестирования, Параметры) | ||||
| 	 | ||||
| 	Данные = Новый Структура("РезультатыТестирования, ПараметрыЗапуска", РезультатыТестирования, Параметры); | ||||
| @@ -369,6 +298,50 @@ | ||||
| 	ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Основная", Новый Структура("АдресХранилища", АдресДанных)); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| 
 | ||||
| // Записать код возврата. | ||||
| //  | ||||
| // Параметры: | ||||
| //  РезультатыТестирования - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| //  Параметры - см. ЮТФабрика.ПараметрыЗапуска | ||||
| Процедура ЗаписатьКодВозврата(РезультатыТестирования, Параметры) | ||||
| 	 | ||||
| 	Успешно = Истина; | ||||
| 	 | ||||
| 	Если ПустаяСтрока(Параметры.exitCode) Тогда | ||||
| 		Возврат; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Для Каждого Набор Из РезультатыТестирования Цикл | ||||
| 		 | ||||
| 		Если ЗначениеЗаполнено(Набор.Ошибки) Тогда | ||||
| 			Успешно = Ложь; | ||||
| 			Прервать; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 		Для Каждого Тест Из Набор.Тесты Цикл | ||||
| 			 | ||||
| 			Если ЗначениеЗаполнено(Тест.Ошибки) Тогда | ||||
| 				Успешно = Ложь; | ||||
| 				Прервать; | ||||
| 			КонецЕсли; | ||||
| 			 | ||||
| 		КонецЦикла; | ||||
| 		 | ||||
| 		Если НЕ Успешно Тогда | ||||
| 			Прервать; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| #Если ВебКлиент Тогда | ||||
| 	ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТИсполнительКлиент.ЗаписатьКодВозврата"); | ||||
| #Иначе | ||||
| 	Запись = Новый ЗаписьТекста(Параметры.exitCode, КодировкаТекста.UTF8); | ||||
| 	Запись.ЗаписатьСтроку(?(Успешно, 0, 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="c9bf0e7a-6503-44eb-bef0-b37e1d3c6e22"> | ||||
|   <name>ЮТИсполнительКлиент</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Исполнитель клиент</value> | ||||
|   </synonym> | ||||
|   <clientManagedApplication>true</clientManagedApplication> | ||||
|   <clientOrdinaryApplication>true</clientOrdinaryApplication> | ||||
| </mdclass:CommonModule> | ||||
| @@ -0,0 +1,162 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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,6 +1,6 @@ | ||||
| <?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> | ||||
|   <name>ЮТИсполнительКлиентСервер</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Исполнитель</value> | ||||
| @@ -16,14 +16,6 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область ПрограммныйИнтерфейс | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции для служебного использования внутри подсистемы | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| @@ -41,14 +33,8 @@ | ||||
| //  Массив - Результат прогона наборов тестов, структура набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| Функция ВыполнитьГруппуНаборовТестов(Знач Наборы, Знач ТестовыйМодуль) Экспорт | ||||
| 	 | ||||
| 	Возврат ЮТИсполнитель.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль); | ||||
| 	Возврат ЮТИсполнительКлиентСервер.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль); | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Процедуры и функции, составляющие внутреннюю реализацию модуля  | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -191,12 +191,13 @@ | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Произвольный - Созданный объект или ссылка на него | ||||
| Функция Записать(ВернутьОбъект = Ложь) Экспорт | ||||
| Функция Записать(ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт | ||||
| 	 | ||||
| 	Контекст = Контекст(); | ||||
| 	 | ||||
| 	ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); | ||||
| 	ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства; | ||||
| 	ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка; | ||||
| 	 | ||||
| 	Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект); | ||||
| 	 | ||||
|   | ||||
| @@ -52,7 +52,7 @@ | ||||
| //  Возвращает значение вложенного контекста, вложенного реквизита контекста | ||||
| // Параметры: | ||||
| //  ИмяРеквизита - Строка - Имя реквизита/вложенного контекста | ||||
| //  | ||||
| //  ПолучитьССервера - Булево - Получить значение из серверного контекста | ||||
| // Возвращаемое значение: | ||||
| //  Структура, Неопределено - Значение реквизита/вложенного контекста | ||||
| Функция ЗначениеКонтекста(ИмяРеквизита, ПолучитьССервера = Ложь) Экспорт | ||||
| @@ -69,6 +69,7 @@ | ||||
| 		Объект = Объект[Ключи[Инд]]; | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЮТОбщий.ЗначениеСтруктуры(Объект, Ключи[Ключи.ВГраница()]); | ||||
|  | ||||
| КонецФункции | ||||
| @@ -105,10 +106,11 @@ | ||||
| //  Данные живут в рамках одного теста, но доступны в обработчиках событий `ПередКаждымТестом` и `ПослеКаждогоТеста` | ||||
| //  Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста` | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Контекст теста | ||||
| //  Неопределено - Если метод вызывается за рамками теста | ||||
| //  - Структура - Контекст теста | ||||
| //  - Неопределено - Если метод вызывается за рамками теста | ||||
| Функция КонтекстТеста() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаТеста()); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -123,10 +125,11 @@ | ||||
| //  	+ `ПослеКаждогоТеста` | ||||
| //  Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста` | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Контекст набора тестов | ||||
| //  Неопределено - Если метод вызывается за рамками тестового набора | ||||
| //  - Структура - Контекст набора тестов | ||||
| //  - Неопределено - Если метод вызывается за рамками тестового набора | ||||
| Функция КонтекстНабора() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаНабораТестов()); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -137,10 +140,11 @@ | ||||
| //  Доступны в каждом тесте модуля и в обработчиках событий  | ||||
| //  Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеВсехТестов` | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Контекст тестового модуля | ||||
| //  Неопределено - Если метод вызывается за рамками тестового модуля | ||||
| //  - Структура - Контекст тестового модуля | ||||
| //  - Неопределено - Если метод вызывается за рамками тестового модуля | ||||
| Функция КонтекстМодуля() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаМодуля()); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -162,9 +166,10 @@ | ||||
| //  Возвращает служебный контекст, содержит дополнительные детали ошибки теста | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Неопределено, Структура - Контекст ошибки, см. ЮТРегистрацияОшибок.НовыйКонтекстОшибки | ||||
| //  Неопределено, Структура - Контекст ошибки, см. ЮТФабрика.ОписаниеКонтекстаОшибки | ||||
| Функция КонтекстОшибки() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаОшибки()); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -175,6 +180,7 @@ | ||||
| //  Неопределено, Структура - Контекст проверки | ||||
| Функция КонтекстПроверки() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаУтверждений()); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -185,6 +191,7 @@ | ||||
| //  Неопределено, Структура - Контекст проверки | ||||
| Функция КонтекстЧитателя() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаЧитателя()); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -192,9 +199,10 @@ | ||||
| // КонтекстЧитателя | ||||
| //  Возвращает служебный контекста, данные используемые исполнителем тестов | ||||
| // Возвращаемое значение: | ||||
| //  см. ЮТИсполнитель.ДанныеКонтекстаИсполнения | ||||
| //  см. ЮТФабрика.НовыйКонтекстИсполнения | ||||
| Функция КонтекстИсполнения() Экспорт | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат ЗначениеКонтекста(ИмяКонтекстаИсполнения()); | ||||
| 	 | ||||
| КонецФункции | ||||
|   | ||||
| @@ -158,7 +158,7 @@ | ||||
|  | ||||
| // Обработка события "ПослеФормированияИсполняемыхНаборовТестов" | ||||
| // Параметры: | ||||
| //  КоллекцияКатегорийНаборов - Массив из см. ЮТИсполнитель.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов | ||||
| //  КоллекцияКатегорийНаборов - Массив из см. ЮТФабрика.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов | ||||
| Процедура ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов) Экспорт | ||||
| 	 | ||||
| 	Количество = 0; | ||||
|   | ||||
| @@ -0,0 +1,50 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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="a3405948-b02e-4e4b-8195-dd51bf07a4c4"> | ||||
|   <name>ЮТНастройкиВыполнения</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Параметры</value> | ||||
|   </synonym> | ||||
|   <clientManagedApplication>true</clientManagedApplication> | ||||
|   <server>true</server> | ||||
|   <clientOrdinaryApplication>true</clientOrdinaryApplication> | ||||
| </mdclass:CommonModule> | ||||
| @@ -516,7 +516,6 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| // КоллекцияВСоответствие | ||||
| // 	Возвращает соответствие элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции. | ||||
| //  | ||||
| // Параметры: | ||||
| @@ -525,7 +524,7 @@ | ||||
| // 	ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. | ||||
| // Возвращаемое значение: | ||||
| // 	Соответствие Из Произвольный - полученное соответствие. | ||||
| Функция КоллекцияВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт | ||||
| Функция ВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт | ||||
| 	 | ||||
| 	Результат = Новый Соответствие(); | ||||
| 	 | ||||
| @@ -541,6 +540,120 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Возвращает структуру элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции. | ||||
| //  | ||||
| // Параметры: | ||||
| // 	Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки. | ||||
| // 	ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия. | ||||
| // 	ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции. | ||||
| // Возвращаемое значение: | ||||
| // 	Структура Из Произвольный - полученная структура. | ||||
| Функция ВСтруктуру(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт | ||||
| 	 | ||||
| 	Результат = Новый Структура(); | ||||
| 	 | ||||
| 	Для Каждого ЭлементКоллекции Из Коллекция Цикл | ||||
| 		 | ||||
| 		Значение = ?(ИмяПоляЗначения = Неопределено, ЭлементКоллекции, ЭлементКоллекции[ИмяПоляЗначения]); | ||||
| 		 | ||||
| 		Результат.Вставить(ЭлементКоллекции[ИмяПоляКлюча], Значение); | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	Возврат Результат; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Сравнивает данные сложной структуры с учетом вложенности. | ||||
| // | ||||
| // Параметры: | ||||
| //  Данные1 - Структура | ||||
| //          - ФиксированнаяСтруктура | ||||
| //          - Соответствие из Произвольный | ||||
| //          - ФиксированноеСоответствие из Произвольный | ||||
| //          - Массив из Произвольный | ||||
| //          - ФиксированныйМассив из Произвольный | ||||
| //          - Строка | ||||
| //          - Число | ||||
| //          - Булево - сравниваемые данные. | ||||
| //  Данные2 - Произвольный - те же типы, что и для параметра Данные1. | ||||
| // | ||||
| // Возвращаемое значение: | ||||
| //  Булево - Истина, если совпадают. | ||||
| // | ||||
| Функция ДанныеСовпадают(Данные1, Данные2) Экспорт | ||||
| 	 | ||||
| 	ТипЗначенияДанные1 = ТипЗнч(Данные1); | ||||
| 	Если ТипЗначенияДанные1 <> ТипЗнч(Данные2) Тогда | ||||
| 		Возврат Ложь; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Если ТипЗначенияДанные1 = Тип("Структура") | ||||
| 	 ИЛИ ТипЗначенияДанные1 = Тип("ФиксированнаяСтруктура") Тогда | ||||
| 		 | ||||
| 		Если Данные1.Количество() <> Данные2.Количество() Тогда | ||||
| 			Возврат Ложь; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 		Для Каждого КлючИЗначение Из Данные1 Цикл | ||||
| 			СтароеЗначение = Неопределено; | ||||
| 			 | ||||
| 			Если НЕ Данные2.Свойство(КлючИЗначение.Ключ, СтароеЗначение) | ||||
| 			 ИЛИ НЕ ДанныеСовпадают(КлючИЗначение.Значение, СтароеЗначение) Тогда | ||||
| 			 | ||||
| 				Возврат Ложь; | ||||
| 			КонецЕсли; | ||||
| 		КонецЦикла; | ||||
| 		 | ||||
| 		Возврат Истина; | ||||
| 		 | ||||
| 	ИначеЕсли ТипЗначенияДанные1 = Тип("Соответствие") | ||||
| 	      ИЛИ ТипЗначенияДанные1 = Тип("ФиксированноеСоответствие") Тогда | ||||
| 		 | ||||
| 		Если Данные1.Количество() <> Данные2.Количество() Тогда | ||||
| 			Возврат Ложь; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 		КлючиНовогоСоответствия = Новый Соответствие; | ||||
| 		 | ||||
| 		Для Каждого КлючИЗначение Из Данные1 Цикл | ||||
| 			КлючиНовогоСоответствия.Вставить(КлючИЗначение.Ключ, Истина); | ||||
| 			СтароеЗначение = Данные2.Получить(КлючИЗначение.Ключ); | ||||
| 			 | ||||
| 			Если НЕ ДанныеСовпадают(КлючИЗначение.Значение, СтароеЗначение) Тогда | ||||
| 				Возврат Ложь; | ||||
| 			КонецЕсли; | ||||
| 		КонецЦикла; | ||||
| 		 | ||||
| 		Для Каждого КлючИЗначение Из Данные2 Цикл | ||||
| 			Если КлючиНовогоСоответствия[КлючИЗначение.Ключ] = Неопределено Тогда | ||||
| 				Возврат Ложь; | ||||
| 			КонецЕсли; | ||||
| 		КонецЦикла; | ||||
| 		 | ||||
| 		Возврат Истина; | ||||
| 		 | ||||
| 	ИначеЕсли ТипЗначенияДанные1 = Тип("Массив") | ||||
| 	      ИЛИ ТипЗначенияДанные1 = Тип("ФиксированныйМассив") Тогда | ||||
| 		 | ||||
| 		Если Данные1.Количество() <> Данные2.Количество() Тогда | ||||
| 			Возврат Ложь; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 		Для Индекс = 0 По Данные1.ВГраница() Цикл | ||||
| 			Если НЕ ДанныеСовпадают(Данные1[Индекс], Данные2[Индекс]) Тогда | ||||
| 				Возврат Ложь; | ||||
| 			КонецЕсли; | ||||
| 		КонецЦикла; | ||||
| 		 | ||||
| 		Возврат Истина; | ||||
| 	 | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Возврат Данные1 = Данные2; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область ЧтениеДанных | ||||
| @@ -646,8 +759,8 @@ | ||||
| //  Булево - Это каталог | ||||
| Функция ЭтоКаталог(ПутьКФайлу) Экспорт | ||||
| 	 | ||||
| 	Файл = Новый Файл(ПутьКФайлу); | ||||
| 	Возврат Файл.Существует() И Файл.ЭтоКаталог(); | ||||
| 	ВызовУстаревшегоМетода("ЮТОбщий.ЭтоКаталог", "ЮТФайлы.ЭтоКаталог"); | ||||
| 	Возврат ЮТФайлы.Существует(ПутьКФайлу) И ЮТФайлы.ЭтоКаталог(ПутьКФайлу); | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
|   | ||||
| @@ -20,86 +20,94 @@ | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область ПрограммныйИнтерфейс | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| // СформироватьОтчет | ||||
| //  Формирует отчет о результатах тестирования по заданным параметрам | ||||
| // Параметры: | ||||
| //  РезультатВыполнения - Массив - Коллекция результатов выполнения, каждый элемент - структура, см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| //  ПараметрыЗапуска - Структура - Параметры запуска, см. ЮТФабрика.ПараметрыЗапуска | ||||
| Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска) Экспорт | ||||
| //  Обработчик - ОписаниеОповещения | ||||
| Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска, Обработчик) Экспорт | ||||
| 	 | ||||
| 	Модули = ЮТРасширения.ГенераторыОтчетов(); | ||||
| 	МодульОтчета = Неопределено; | ||||
| 	Если НЕ ЗначениеЗаполнено(ПараметрыЗапуска.reportPath) Тогда | ||||
| 		ВызватьИсключение "Не указан путь сохранения отчета"; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Для Каждого Модуль Из Модули Цикл | ||||
| 		 | ||||
| 		Если Модуль.РеализуетФормат(ПараметрыЗапуска.reportFormat) Тогда | ||||
| 			МодульОтчета = Модуль; | ||||
| 			Прервать; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	МодульОтчета = МодульФормирования(ПараметрыЗапуска.reportFormat); | ||||
| 	 | ||||
| 	Если МодульОтчета = Неопределено Тогда | ||||
| 		 | ||||
| 		ВызватьИсключение СтрШаблон("Отчет в формате %1 не поддерживается", ПараметрыЗапуска.reportFormat); | ||||
| 		 | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	ИмяФайлаОтчета = ИмяФайлаОтчета(Модуль, ПараметрыЗапуска); | ||||
| 	ДанныеОтчета = Модуль.ДанныеОтчета(РезультатВыполнения); | ||||
| 	ПараметрыФормирования = Новый Структура("РезультатВыполнения, ПараметрыЗапуска, Обработчик", РезультатВыполнения, ПараметрыЗапуска, Обработчик); | ||||
| 	ПараметрыФормирования.Вставить("МодульОтчета", МодульОтчета); | ||||
| 	 | ||||
| 	Если ДанныеОтчета = Неопределено Тогда | ||||
| 		 | ||||
| 		ВызватьИсключение "Не удалось получить данные отчета"; | ||||
| 		 | ||||
| 	ИначеЕсли НЕ ЗначениеЗаполнено(ИмяФайлаОтчета) Тогда | ||||
| 		 | ||||
| 		ВызватьИсключение "Не удалось сформировать имя файла отчета"; | ||||
| 		 | ||||
| 	Иначе | ||||
| 		 | ||||
| 		ДанныеОтчета.Записать(ИмяФайлаОтчета); | ||||
| 		 | ||||
| 	КонецЕсли; | ||||
| 	ОбработчикПолученияИмениФайла = Новый ОписаниеОповещения("ПослеФормированияИмениФайла", ЭтотОбъект, ПараметрыФормирования); | ||||
| 	ИмяФайлаОтчета(ПараметрыФормирования, ОбработчикПолученияИмениФайла); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции для служебного использования внутри подсистемы | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
|  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Процедуры и функции, составляющие внутреннюю реализацию модуля  | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| Функция ИмяФайлаОтчета(Модуль, ПараметрыЗапуска) | ||||
| Процедура ИмяФайлаОтчета(ПараметрыФормирования, Обработчик) | ||||
| 	 | ||||
| 	ИмяФайла = Неопределено; | ||||
| 	ПараметрыПроверки = Новый Структура("ПараметрыФормирования, Обработчик", ПараметрыФормирования, Обработчик); | ||||
| 	 | ||||
| 	ПутьКОтчету = ПараметрыЗапуска.reportPath; | ||||
| 	ОбработчикПроверки = Новый ОписаниеОповещения("ПослеПроверкиКаталога", ЭтотОбъект, ПараметрыПроверки); | ||||
| 	ЮТФайлы.ЭтоКаталог(ПараметрыФормирования.ПараметрыЗапуска.reportPath, ОбработчикПроверки); | ||||
| 	 | ||||
| 	Если НЕ ЗначениеЗаполнено(ПутьКОтчету) Тогда | ||||
| 		ВызватьИсключение "Не указан путь сохранения отчета"; | ||||
| КонецПроцедуры | ||||
|  | ||||
| Функция МодульФормирования(Формат) | ||||
| 	 | ||||
| 	Модули = ЮТРасширения.ГенераторыОтчетов(); | ||||
| 	МодульОтчета = Неопределено; | ||||
| 	 | ||||
| 	Для Каждого Модуль Из Модули Цикл | ||||
| 		 | ||||
| 		Если Модуль.РеализуетФормат(Формат) Тогда | ||||
| 			МодульОтчета = Модуль; | ||||
| 			Прервать; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	Возврат МодульОтчета; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| Процедура ПослеФормированияИмениФайла(ИмяФайлаОтчета, Параметры) Экспорт | ||||
| 	 | ||||
| 	ДанныеОтчета = Параметры.МодульОтчета.ДанныеОтчета(Параметры.РезультатВыполнения); | ||||
| 	 | ||||
| 	Если ДанныеОтчета = Неопределено Тогда | ||||
| 		ВызватьИсключение "Не удалось получить данные отчета"; | ||||
| 	Иначе | ||||
| 		ДанныеОтчета.Записать(ИмяФайлаОтчета); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Если ЮТОбщий.ЭтоКаталог(ПутьКОтчету) Тогда | ||||
| 		ИмяФайла = ЮТОбщий.ОбъединитьПути(ПутьКОтчету, Модуль.ИмяФайлаПоУмолчанию()); | ||||
| 	ЮТИсполнительКлиент.ВызватьОбработчик(Параметры.Обработчик); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПослеПроверкиКаталога(ЭтоКаталог, Параметры) Экспорт | ||||
| 	 | ||||
| 	ПутьКОтчету = Параметры.ПараметрыФормирования.ПараметрыЗапуска.reportPath; | ||||
| 	Если ЭтоКаталог Тогда | ||||
| 		ИмяФайла = ЮТОбщий.ОбъединитьПути(ПутьКОтчету, Параметры.ПараметрыФормирования.МодульОтчета.ИмяФайлаПоУмолчанию()); | ||||
| 	Иначе | ||||
| 		ИмяФайла = ПутьКОтчету; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Возврат ИмяФайла; | ||||
| 	ЮТИсполнительКлиент.ВызватьОбработчик(Параметры.Обработчик, ИмяФайла); | ||||
| 	 | ||||
| КонецФункции | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -16,24 +16,21 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область ПрограммныйИнтерфейс | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
| 
 | ||||
| // ПараметрыЗапуска | ||||
| //  Возвращает загруженные параметры запуска тестирования | ||||
| // Параметры: | ||||
| //  ПараметрыЗапускаСтрокой - Строка - Параметры запуска приложения | ||||
| //  Обработчик - ОписаниеОповещения | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  см. ЮТФабрика.ПараметрыЗапуска | ||||
| Функция ПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой) Экспорт | ||||
| Функция ПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой, Обработчик) Экспорт | ||||
| 	 | ||||
| 	Попытка | ||||
| 		 | ||||
| 		Параметры = ПрочитатьПараметрыЗапуска(ПараметрыЗапускаСтрокой); | ||||
| 		Параметры = ПрочитатьПараметрыЗапуска(ПараметрыЗапускаСтрокой, Обработчик); | ||||
| 		 | ||||
| 	Исключение | ||||
| 		 | ||||
| @@ -54,55 +51,25 @@ | ||||
| 
 | ||||
| #КонецОбласти | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции для служебного использования внутри подсистемы | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
| 
 | ||||
| Функция ЗначениеНастройкиТеста(ИмяНастройки, ОписаниеТеста, ОписаниеТестовогоНабора, ЗначениеПоУмолчанию) Экспорт | ||||
| 	 | ||||
| 	Значение = ЗначениеПоУмолчанию; | ||||
| 	 | ||||
| 	Если ОписаниеТеста.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда | ||||
| 		Значение = ОписаниеТеста.НастройкиВыполнения[ИмяНастройки]; | ||||
| 	ИначеЕсли ОписаниеТестовогоНабора.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда | ||||
| 		Значение = ОписаниеТестовогоНабора.НастройкиВыполнения[ИмяНастройки]; | ||||
| 	Иначе | ||||
| 		 | ||||
| 		ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения(); | ||||
| 		Если ГлобальныеНастройки.Свойство(ИмяНастройки) Тогда | ||||
| 			Значение = ГлобальныеНастройки[ИмяНастройки]; | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Возврат Значение; | ||||
| 	 | ||||
| КонецФункции | ||||
| 
 | ||||
| #КонецОбласти | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Процедуры и функции, составляющие внутреннюю реализацию модуля  | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
| 
 | ||||
| // ПрочитатьПараметрыЗапуска | ||||
| // 	Читает параметры из строки запуска | ||||
| // Параметры: | ||||
| //  ПараметрыЗапускаСтрокой - Строка - Строка с параметрами запуска.  | ||||
| //  Содержит ключ запуска и строку с конфигурационным файлом.  | ||||
| //  Формат строки "RunUnitTests=/путь/к/конфигурационному/файлу", где ключ указывается обязательно, а путь - по желанию | ||||
| //                                     Содержит ключ запуска и строку с конфигурационным файлом.  | ||||
| //                                     Формат строки "RunUnitTests=/путь/к/конфигурационному/файлу",  | ||||
| //                                     где ключ указывается обязательно, а путь - по желанию | ||||
| // Обработчик - ОписаниеОповещения | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  см. ЮТФабрика.ПараметрыЗапуска | ||||
| Функция ПрочитатьПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой) | ||||
| Функция ПрочитатьПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой, Обработчик) | ||||
| 	 | ||||
| 	Параметры = ЮТФабрика.ПараметрыЗапуска(); | ||||
| 	 | ||||
| 	Если Не ЗначениеЗаполнено(ПараметрыЗапускаСтрокой) Тогда | ||||
| 		ЮТИсполнительКлиент.ВызватьОбработчик(Обработчик, Параметры); | ||||
| 		Возврат Параметры; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| @@ -139,11 +106,12 @@ | ||||
| 	Если ЗначениеЗаполнено(КонфигурационныйФайл) Тогда | ||||
| 		 | ||||
| 		ПараметрыИзФайла = ПрочитатьКонфигурационныйФайл(КонфигурационныйФайл); | ||||
| 		 | ||||
| 		ДополнитьПараметрыПрочитанными(Параметры, ПараметрыИзФайла); | ||||
| 		 | ||||
| 	КонецЕсли; | ||||
| 		 | ||||
| 	 | ||||
| 	ЮТИсполнительКлиент.ВызватьОбработчик(Обработчик, Параметры); | ||||
| 	 | ||||
| 	Возврат Параметры; | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -1,12 +1,11 @@ | ||||
| <?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> | ||||
|   <name>ЮТПараметрыЗапуска</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Параметры</value> | ||||
|   </synonym> | ||||
|   <comment>Используется для обработки и дополнения параметров запуска тестов</comment> | ||||
|   <clientManagedApplication>true</clientManagedApplication> | ||||
|   <server>true</server> | ||||
|   <clientOrdinaryApplication>true</clientOrdinaryApplication> | ||||
| </mdclass:CommonModule> | ||||
| @@ -186,7 +186,7 @@ | ||||
|  | ||||
| // Обработка события "ПослеФормированияИсполняемыхНаборовТестов" | ||||
| // Параметры: | ||||
| //  КоллекцияКатегорийНаборов - Массив из см. ЮТИсполнитель.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов | ||||
| //  КоллекцияКатегорийНаборов - Массив из см. ЮТФабрика.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов | ||||
| Процедура ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов) Экспорт | ||||
| 	 | ||||
| 	Параметры = ЮТОбщий.ЗначениеВМассиве(КоллекцияКатегорийНаборов); | ||||
| @@ -271,7 +271,7 @@ | ||||
| 	 | ||||
| 	ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции; | ||||
| 	 | ||||
| 	Возврат ЮТПараметры.ЗначениеНастройкиТеста(ИмяПараметра, ОписаниеСобытия.Тест, ОписаниеСобытия.Набор, Ложь); | ||||
| 	Возврат ЮТНастройкиВыполнения.ЗначениеНастройкиТеста(ИмяПараметра, ОписаниеСобытия.Тест, ОписаниеСобытия.Набор, Ложь); | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
|   | ||||
| @@ -369,7 +369,30 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Удаляет переданные объекта | ||||
| //  | ||||
| // Параметры: | ||||
| //  Ссылки - Массив из ЛюбаяСсылка | ||||
| Процедура Удалить(Ссылки) Экспорт | ||||
| 	 | ||||
| 	ЮТТестовыеДанныеВызовСервера.Удалить(Ссылки); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #Если Сервер Тогда | ||||
| // Возвращает мок для HTTPСервисЗапрос. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция HTTPСервисЗапрос() Экспорт | ||||
| 	 | ||||
| 	Возврат Обработки.ЮТHTTPСервисЗапрос.Создать(); | ||||
| 	 | ||||
| КонецФункции | ||||
| #КонецЕсли | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции для служебного использования внутри подсистемы | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
|   | ||||
| @@ -143,6 +143,20 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| Процедура Удалить(Знач Ссылки) Экспорт | ||||
| 	 | ||||
| 	Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда | ||||
| 		Ссылки = ЮТОбщий.ЗначениеВМассиве(Ссылки); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Для Каждого Ссылка Из Ссылки Цикл | ||||
| 		 | ||||
| 		Ссылка.ПолучитьОбъект().Удалить(); | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции для служебного использования внутри подсистемы | ||||
|   | ||||
| @@ -82,7 +82,14 @@ | ||||
| // СтатусыИсполненияТеста | ||||
| //  Возвращает перечисление возможных статусов выполнения теста, жизненный цикл теста | ||||
| // Возвращаемое значение: | ||||
| //  ФиксированнаяСтруктура - Статусы исполнения теста | ||||
| //  ФиксированнаяСтруктура - Статусы исполнения теста: | ||||
| //  * Ожидание- Строка - Тест не выполнялся | ||||
| //  * Исполнение- Строка - Тест выполняется в данный момент | ||||
| //  * Успешно- Строка - Тест успешно пройден | ||||
| //  * Ошибка- Строка - Тест упал с ошибкой выполнения | ||||
| //  * Сломан- Строка - Тест упал на проверках утверждений | ||||
| //  * Пропущен- Строка - Тест пропущен по каким либо причинам | ||||
| //  * НеРеализован- Строка - Тест не реализован | ||||
| Функция СтатусыИсполненияТеста() Экспорт | ||||
| 	 | ||||
| 	Статусы = Новый Структура(); | ||||
| @@ -102,7 +109,7 @@ | ||||
| // Типы ошибок. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ФиксированнаяСтруктура | ||||
| //  ФиксированнаяСтруктура - Типы возможных ошибок: | ||||
| //  * ТестНеРеализован - Строка | ||||
| //  * ОшибкаСравнения - Строка | ||||
| //  * ОшибкаОбработкиСобытия - Строка | ||||
| @@ -121,6 +128,7 @@ | ||||
| 		Типы.Вставить(ТипОшибки.Ключ, ТипОшибки.Ключ); | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат Новый ФиксированнаяСтруктура(Типы); | ||||
| 	 | ||||
| КонецФункции | ||||
| @@ -131,20 +139,23 @@ | ||||
| 		ЮТПовторногоИспользования.ПараметрыТиповОшибок(); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Возврат ЮТТестовыеДанные.СтруктураMarkDown("Ключ", | ||||
| 	"| Ключ                           | Представление                    | Статус       | | ||||
| 	||--------------------------------|----------------------------------|--------------| | ||||
| 	|| ТестНеРеализован               | Не реализован                    | НеРеализован | | ||||
| 	|| ОшибкаСравнения                | Ошибка сравнения                 | Ошибка       | | ||||
| 	|| ОшибкаОбработкиСобытия         | Ошибка обработки события         | Сломан       | | ||||
| 	|| Утверждений                    | Ошибка утверждений               | Ошибка       | | ||||
| 	|| Исполнения                     | Ошибка исполнения                | Сломан       | | ||||
| 	|| ЧтенияТестов                   | Загрузки тестов                  | Сломан       | | ||||
| 	|| МалоПараметров                 | Мало фактических параметров      | Сломан       | | ||||
| 	|| МногоПараметров                | Много фактических параметров     | Сломан       | | ||||
| 	|| НекорректныйКонтекстИсполнения | Некорректный контекст исполнения | Пропущен     | | ||||
| 	|| Пропущен                       | Пропущен                         | Пропущен     | | ||||
| 	|"); | ||||
| 	Статусы = СтатусыИсполненияТеста(); | ||||
| 	Реквизиты = "Ключ, Представление, Статус"; | ||||
| 	 | ||||
| 	ТипыОшибок = Новый Массив(); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ТестНеРеализован", "Не реализован", Статусы.НеРеализован)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ТестНеРеализован", "Не реализован", Статусы.НеРеализован)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ОшибкаСравнения", "Ошибка сравнения", Статусы.Ошибка)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ОшибкаОбработкиСобытия", "Ошибка обработки события", Статусы.Сломан)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Утверждений", "Ошибка утверждений", Статусы.Ошибка)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Исполнения", "Ошибка исполнения", Статусы.Сломан)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ЧтенияТестов", "Загрузки тестов", Статусы.Сломан)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "МалоПараметров", "Мало фактических параметров", Статусы.Сломан)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "МногоПараметров", "Много фактических параметров", Статусы.Сломан)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "НекорректныйКонтекстИсполнения", "Некорректный контекст исполнения", Статусы.Пропущен)); | ||||
| 	ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Пропущен", "Пропущен", Статусы.Пропущен)); | ||||
| 	 | ||||
| 	Возврат ЮТОбщий.ВСтруктуру(ТипыОшибок, "Ключ"); | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| @@ -346,6 +357,8 @@ | ||||
| // * reportFormat - Строка - Формат отчета о тестировании.  | ||||
| //                  Модули реализующие различные форматы отчетов собраны в подсистеме ЮТФормированиеОтчета | ||||
| // * logging - см. ПараметрыЛогирования | ||||
| // * showReport - Булево - Признак необходмости отобразить отчет в 1с по окончании тестирования | ||||
| // * exitCode - Строка - Путь к файлу, в который будет записан коды выхода | ||||
| Функция ПараметрыЗапуска() Экспорт | ||||
| 	 | ||||
| 	Параметры = Новый Структура; | ||||
| @@ -359,6 +372,7 @@ | ||||
| 	Параметры.Вставить("reportFormat", "jUnit"); | ||||
| 	Параметры.Вставить("showReport", Ложь); | ||||
| 	Параметры.Вставить("logging", ПараметрыЛогирования()); | ||||
| 	Параметры.Вставить("exitCode", ""); | ||||
| 	 | ||||
| 	Возврат Параметры; | ||||
| 	 | ||||
| @@ -489,6 +503,48 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Описание категория набора тестов. | ||||
| //  | ||||
| // Параметры: | ||||
| //  ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Описание категория набора тестов: | ||||
| // * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля | ||||
| // * Клиентские - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| // * Серверные - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| // * Пропущенные - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов | ||||
| Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль) Экспорт | ||||
| 	 | ||||
| 	КатегорииНаборов = Новый Структура(); | ||||
| 	КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль); | ||||
| 	КатегорииНаборов.Вставить("Клиентские",  Новый Массив()); | ||||
| 	КатегорииНаборов.Вставить("Серверные",   Новый Массив()); | ||||
| 	КатегорииНаборов.Вставить("Пропущенные", Новый Массив()); | ||||
| 	 | ||||
| 	//@skip-check constructor-function-return-section | ||||
| 	Возврат КатегорииНаборов; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область КонструкторыКонтекстов | ||||
|  | ||||
| // Данные контекста исполнения. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Структура - Данные контекста исполнения: | ||||
| //  * Уровень - Строка | ||||
| Функция НовыйКонтекстИсполнения() Экспорт | ||||
| 	 | ||||
| 	Контекст = Новый Структура(); | ||||
| 	Контекст.Вставить("Уровень", ""); | ||||
| 	 | ||||
| 	Возврат Контекст; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| // КонтекстыМодуля | ||||
|   | ||||
							
								
								
									
										75
									
								
								exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,75 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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
									
								
							
							
						
						| @@ -0,0 +1,11 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2874e686-3785-4050-994a-bf457fa32700"> | ||||
|   <name>ЮТФайлы</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Файлы</value> | ||||
|   </synonym> | ||||
|   <clientManagedApplication>true</clientManagedApplication> | ||||
|   <server>true</server> | ||||
|   <clientOrdinaryApplication>true</clientOrdinaryApplication> | ||||
| </mdclass:CommonModule> | ||||
| @@ -73,8 +73,8 @@ | ||||
| 	 | ||||
| 	ЮТТесты.ПередЧтениемСценариевМодуля(ОписаниеМодуля); | ||||
| 	 | ||||
| 	ПолноеИмяМетода = ОписаниеМодуля.Имя + ".ИсполняемыеСценарии"; | ||||
| 	Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода, ЮТОбщий.ЗначениеВМассиве(Неопределено)); | ||||
| 	ПолноеИмяМетода = ОписаниеМодуля.Имя + "." + ИмяМетодаСценариев(); | ||||
| 	Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода); | ||||
| 	 | ||||
| 	Если Ошибка <> Неопределено Тогда | ||||
| 		 | ||||
| @@ -84,12 +84,13 @@ | ||||
| 		Если ТипОшибки = ТипыОшибок.ТестНеРеализован Тогда | ||||
| 			ЭтоТестовыйМодуль = Ложь; | ||||
| 			Ошибка = Неопределено; | ||||
| 		ИначеЕсли ТипОшибки = ТипыОшибок.МногоПараметров Тогда | ||||
| 			Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода); | ||||
| 		ИначеЕсли ТипОшибки = ТипыОшибок.МалоПараметров Тогда | ||||
| 			Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода, ЮТОбщий.ЗначениеВМассиве(Неопределено)); | ||||
| 			ЮТОбщий.СообщитьПользователю("Используется устаревшая сигнатура метода `ИсполняемыеСценарии`, метод не должен принимать параметров."); | ||||
| 		КонецЕсли; | ||||
| 		 | ||||
| 	КонецЕсли; | ||||
| 		 | ||||
| 	 | ||||
| 	Если Ошибка <> Неопределено Тогда | ||||
| 		 | ||||
| 		Данные = Новый Массив(); // Фиксируем, чтобы отобразить в отчете | ||||
|   | ||||
| @@ -39,7 +39,8 @@ | ||||
|   <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> | ||||
| @@ -52,12 +53,13 @@ | ||||
|   <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> | ||||
| @@ -68,8 +70,10 @@ | ||||
|   <commonModules>CommonModule.ЮТТесты</commonModules> | ||||
|   <commonModules>CommonModule.ЮТУтверждения</commonModules> | ||||
|   <commonModules>CommonModule.ЮТФабрика</commonModules> | ||||
|   <commonModules>CommonModule.ЮТФайлы</commonModules> | ||||
|   <commonModules>CommonModule.ЮТФильтрация</commonModules> | ||||
|   <commonModules>CommonModule.ЮТЧитатель</commonModules> | ||||
|   <commonModules>CommonModule.ЮТЧитательСервер</commonModules> | ||||
|   <dataProcessors>DataProcessor.ЮТHTTPСервисЗапрос</dataProcessors> | ||||
|   <dataProcessors>DataProcessor.ЮТЮнитТесты</dataProcessors> | ||||
| </mdclass:Configuration> | ||||
|   | ||||
| @@ -35,7 +35,7 @@ | ||||
| &После("ПриНачалеРаботыСистемы") | ||||
| Процедура ЮТПриНачалеРаботыСистемы() | ||||
| 	 | ||||
| 	ЮТИсполнитель.ВыполнитьМодульноеТестирование(); | ||||
| 	ЮТИсполнительКлиент.ВыполнитьМодульноеТестирование(); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
|   | ||||
| @@ -35,7 +35,7 @@ | ||||
| &После("ПриНачалеРаботыСистемы") | ||||
| Процедура ЮТПриНачалеРаботыСистемы() | ||||
| 	 | ||||
| 	ЮТИсполнитель.ВыполнитьМодульноеТестирование(); | ||||
| 	ЮТИсполнительКлиентСервер.ВыполнитьМодульноеТестирование(); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,252 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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. | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| #Если Сервер Тогда | ||||
|  | ||||
| #Область ОписаниеПеременных | ||||
|  | ||||
| //@skip-check object-module-export-variable | ||||
| Перем HTTPМетод Экспорт; | ||||
| //@skip-check object-module-export-variable | ||||
| Перем БазовыйURL Экспорт; | ||||
| //@skip-check object-module-export-variable | ||||
| Перем Заголовки Экспорт; | ||||
| //@skip-check object-module-export-variable | ||||
| Перем ОтносительныйURL Экспорт; | ||||
| //@skip-check object-module-export-variable | ||||
| Перем ПараметрыURL Экспорт; | ||||
| //@skip-check object-module-export-variable | ||||
| Перем ПараметрыЗапроса Экспорт; | ||||
|  | ||||
| Перем Тело; | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область ПрограммныйИнтерфейс | ||||
|  | ||||
| // Возвращает тело как двоичные данные. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ДвоичныеДанные - Тело | ||||
| Функция ПолучитьТелоКакДвоичныеДанные() Экспорт | ||||
| 	 | ||||
| 	ТипТела = ТипЗнч(Тело); | ||||
| 	 | ||||
| 	Если Тело = Неопределено Тогда | ||||
| 		Возврат ПолучитьДвоичныеДанныеИзBase64Строки(""); | ||||
| 	ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда | ||||
| 		Возврат Тело; | ||||
| 	ИначеЕсли ТипТела = Тип("Строка") Тогда | ||||
| 		Возврат ПолучитьДвоичныеДанныеИзСтроки(Тело); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Возвращает тело как поток. | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Поток - Тело | ||||
| Функция ПолучитьТелоКакПоток() Экспорт | ||||
| 	 | ||||
| 	Возврат ПолучитьТелоКакДвоичныеДанные().ОткрытьПотокДляЧтения(); | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Возвращает тело как строку. | ||||
| //  | ||||
| // Параметры: | ||||
| //  Кодировка - КодировкаТекста, Строка - Кодировка | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  Строка - Тело | ||||
| Функция ПолучитьТелоКакСтроку(Кодировка = Неопределено) Экспорт | ||||
| 	 | ||||
| 	ТипТела = ТипЗнч(Тело); | ||||
| 	 | ||||
| 	Если Тело = Неопределено Тогда | ||||
| 		Возврат ""; | ||||
| 	ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда | ||||
| 		Возврат ПолучитьСтрокуИзДвоичныхДанных(Тело, Кодировка); | ||||
| 	ИначеЕсли ТипТела = Тип("Строка") Тогда | ||||
| 		Возврат Тело; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Устанавливает тело как двоичные данные. | ||||
| // При получении тела в другом формате происходит конвертация | ||||
| //  | ||||
| // Параметры: | ||||
| //  Данные - ДвоичныеДанные | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция УстановитьТелоКакДвоичныеДанные(Данные) Экспорт | ||||
| 	 | ||||
| 	Тело = Данные; | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Устанавливает тело как строку. | ||||
| // При получении тела в другом формате происходит конвертация | ||||
| //  | ||||
| // Параметры: | ||||
| //  Строка - Строка | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция УстановитьТелоКакСтроку(Строка) Экспорт | ||||
| 	 | ||||
| 	Тело = Строка; | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Устанавливает тело как строку JSON. | ||||
| // Сериализует переданный объект в строку JSON и сохраняет в тело | ||||
| // При получении тела в другом формате происходит конвертация | ||||
| //  | ||||
| // Параметры: | ||||
| //  Данные - Произвольный | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция УстановитьТелоКакСтрокуJSON(Данные) Экспорт | ||||
| 	 | ||||
| 	ЗаписьJSON = Новый ЗаписьJSON(); | ||||
| 	ЗаписьJSON.УстановитьСтроку(); | ||||
| 	ЗаписатьJSON(ЗаписьJSON, Данные); | ||||
| 	 | ||||
| 	Тело = ЗаписьJSON.Закрыть(); | ||||
| 	 | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Добавляет заголовок. | ||||
| //  | ||||
| // Параметры: | ||||
| //  ИмяЗаголовка - Строка | ||||
| //  Значение - Строка | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция ДобавитьЗаголовок(ИмяЗаголовка, Значение) Экспорт | ||||
| 	 | ||||
| 	Заголовки.Вставить(ИмяЗаголовка, Значение); | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Добавляет параметр запроса. | ||||
| //  | ||||
| // Параметры: | ||||
| //  ИмяПараметра - Строка | ||||
| //  Значение - Строка | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция ДобавитьПараметрЗапроса(ИмяПараметра, Значение) Экспорт | ||||
| 	 | ||||
| 	ПараметрыЗапроса.Вставить(ИмяПараметра, Значение); | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Добавляет параметр URL. | ||||
| //  | ||||
| // Параметры: | ||||
| //  ИмяПараметра - Строка | ||||
| //  Значение - Строка | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция ДобавитьПараметрURL(ИмяПараметра, Значение) Экспорт | ||||
| 	 | ||||
| 	ПараметрыURL.Вставить(ИмяПараметра, Значение); | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Устанавливает HTTP метод | ||||
| //  | ||||
| // Параметры: | ||||
| //  Значение - Строка - Имя http метода | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция Метод(Значение) Экспорт | ||||
| 	 | ||||
| 	HTTPМетод = Значение; | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Устанавливает базовый URL. | ||||
| //  | ||||
| // Параметры: | ||||
| //  Значение - Строка - базовый URL | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция БазовыйURL(Значение) Экспорт | ||||
| 	 | ||||
| 	БазовыйURL = Значение; | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| // Устанавливает относительный URL. | ||||
| //  | ||||
| // Параметры: | ||||
| //  Значение - Строка - относительный URL | ||||
| //  | ||||
| // Возвращаемое значение: | ||||
| //  ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок | ||||
| Функция ОтносительныйURL(Значение) Экспорт | ||||
| 	 | ||||
| 	ОтносительныйURL = Значение; | ||||
| 	Возврат ЭтотОбъект; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| Процедура Инициализировать() | ||||
| 	 | ||||
| 	HTTPМетод = "GET"; | ||||
| 	БазовыйURL = ""; | ||||
| 	Заголовки = Новый Соответствие(); | ||||
| 	ОтносительныйURL = ""; | ||||
| 	ПараметрыURL = Новый Соответствие(); | ||||
| 	ПараметрыЗапроса = Новый Соответствие(); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Инициализация | ||||
|  | ||||
| Инициализировать(); | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецЕсли | ||||
| @@ -0,0 +1,13 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="81c2b3c4-8e40-4811-aab0-e7a1371d0c51"> | ||||
|   <producedTypes> | ||||
|     <objectType typeId="5b53c341-183f-4aa0-b3ec-1f355d0f74f5" valueTypeId="26dcab52-beab-4c30-aa64-02887735d56e"/> | ||||
|     <managerType typeId="d0cecbc4-c89f-4ef2-ab8d-10bcfd8c514c" valueTypeId="50afe94b-4ccb-4a26-9a80-01121c6fef66"/> | ||||
|   </producedTypes> | ||||
|   <name>ЮТHTTPСервисЗапрос</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Мок для HTTPСервис запрос</value> | ||||
|   </synonym> | ||||
|   <useStandardCommands>true</useStandardCommands> | ||||
| </mdclass:DataProcessor> | ||||
| @@ -457,20 +457,185 @@ | ||||
|       <showInFooter>true</showInFooter> | ||||
|       <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> | ||||
|     </items> | ||||
|     <items xsi:type="form:FormField"> | ||||
|       <name>ВыводЛога</name> | ||||
|       <id>66</id> | ||||
|     <items xsi:type="form:FormGroup"> | ||||
|       <name>ГруппаФайлы</name> | ||||
|       <id>75</id> | ||||
|       <items xsi:type="form:FormField"> | ||||
|         <name>ИмяФайлаОтчета</name> | ||||
|         <id>81</id> | ||||
|         <visible>true</visible> | ||||
|         <enabled>true</enabled> | ||||
|         <userVisible> | ||||
|           <common>true</common> | ||||
|         </userVisible> | ||||
|         <dataPath xsi:type="form:DataPath"> | ||||
|           <segments>ИмяФайлаОтчета</segments> | ||||
|         </dataPath> | ||||
|         <extendedTooltip> | ||||
|           <name>ИмяФайлаОтчетаРасширеннаяПодсказка</name> | ||||
|           <id>83</id> | ||||
|           <visible>true</visible> | ||||
|           <enabled>true</enabled> | ||||
|           <userVisible> | ||||
|             <common>true</common> | ||||
|           </userVisible> | ||||
|           <type>Label</type> | ||||
|           <autoMaxWidth>true</autoMaxWidth> | ||||
|           <autoMaxHeight>true</autoMaxHeight> | ||||
|           <extInfo xsi:type="form:LabelDecorationExtInfo"> | ||||
|             <horizontalAlign>Left</horizontalAlign> | ||||
|           </extInfo> | ||||
|         </extendedTooltip> | ||||
|         <contextMenu> | ||||
|           <name>ИмяФайлаОтчетаКонтекстноеМеню</name> | ||||
|           <id>82</id> | ||||
|           <visible>true</visible> | ||||
|           <enabled>true</enabled> | ||||
|           <userVisible> | ||||
|             <common>true</common> | ||||
|           </userVisible> | ||||
|           <autoFill>true</autoFill> | ||||
|         </contextMenu> | ||||
|         <type>InputField</type> | ||||
|         <editMode>Enter</editMode> | ||||
|         <showInHeader>true</showInHeader> | ||||
|         <headerHorizontalAlign>Left</headerHorizontalAlign> | ||||
|         <showInFooter>true</showInFooter> | ||||
|         <extInfo xsi:type="form:InputFieldExtInfo"> | ||||
|           <handlers> | ||||
|             <event>StartChoice</event> | ||||
|             <name>ИмяФайлаОтчетаНачалоВыбора</name> | ||||
|           </handlers> | ||||
|           <autoMaxHeight>true</autoMaxHeight> | ||||
|           <wrap>true</wrap> | ||||
|           <choiceButton>true</choiceButton> | ||||
|           <clearButton>true</clearButton> | ||||
|           <chooseType>true</chooseType> | ||||
|           <typeDomainEnabled>true</typeDomainEnabled> | ||||
|           <textEdit>true</textEdit> | ||||
|         </extInfo> | ||||
|       </items> | ||||
|       <items xsi:type="form:FormField"> | ||||
|         <name>ВыводЛога</name> | ||||
|         <id>66</id> | ||||
|         <visible>true</visible> | ||||
|         <enabled>true</enabled> | ||||
|         <userVisible> | ||||
|           <common>true</common> | ||||
|         </userVisible> | ||||
|         <dataPath xsi:type="form:DataPath"> | ||||
|           <segments>ИмяФайлаЛога</segments> | ||||
|         </dataPath> | ||||
|         <extendedTooltip> | ||||
|           <name>ВыводЛогаРасширеннаяПодсказка</name> | ||||
|           <id>68</id> | ||||
|           <visible>true</visible> | ||||
|           <enabled>true</enabled> | ||||
|           <userVisible> | ||||
|             <common>true</common> | ||||
|           </userVisible> | ||||
|           <type>Label</type> | ||||
|           <autoMaxWidth>true</autoMaxWidth> | ||||
|           <autoMaxHeight>true</autoMaxHeight> | ||||
|           <extInfo xsi:type="form:LabelDecorationExtInfo"> | ||||
|             <horizontalAlign>Left</horizontalAlign> | ||||
|           </extInfo> | ||||
|         </extendedTooltip> | ||||
|         <contextMenu> | ||||
|           <name>ВыводЛогаКонтекстноеМеню</name> | ||||
|           <id>67</id> | ||||
|           <visible>true</visible> | ||||
|           <enabled>true</enabled> | ||||
|           <userVisible> | ||||
|             <common>true</common> | ||||
|           </userVisible> | ||||
|           <autoFill>true</autoFill> | ||||
|         </contextMenu> | ||||
|         <type>InputField</type> | ||||
|         <editMode>Enter</editMode> | ||||
|         <showInHeader>true</showInHeader> | ||||
|         <headerHorizontalAlign>Left</headerHorizontalAlign> | ||||
|         <showInFooter>true</showInFooter> | ||||
|         <extInfo xsi:type="form:InputFieldExtInfo"> | ||||
|           <handlers> | ||||
|             <event>StartChoice</event> | ||||
|             <name>ВыводЛогаНачалоВыбора</name> | ||||
|           </handlers> | ||||
|           <wrap>true</wrap> | ||||
|           <choiceButton>true</choiceButton> | ||||
|           <clearButton>true</clearButton> | ||||
|           <chooseType>true</chooseType> | ||||
|           <typeDomainEnabled>true</typeDomainEnabled> | ||||
|           <textEdit>true</textEdit> | ||||
|         </extInfo> | ||||
|       </items> | ||||
|       <items xsi:type="form:FormField"> | ||||
|         <name>ИмяФайлаКодаВозврата</name> | ||||
|         <id>72</id> | ||||
|         <visible>true</visible> | ||||
|         <enabled>true</enabled> | ||||
|         <userVisible> | ||||
|           <common>true</common> | ||||
|         </userVisible> | ||||
|         <dataPath xsi:type="form:DataPath"> | ||||
|           <segments>ИмяФайлаКодаВозврата</segments> | ||||
|         </dataPath> | ||||
|         <extendedTooltip> | ||||
|           <name>ИмяФайлаКодаВозвратаРасширеннаяПодсказка</name> | ||||
|           <id>74</id> | ||||
|           <visible>true</visible> | ||||
|           <enabled>true</enabled> | ||||
|           <userVisible> | ||||
|             <common>true</common> | ||||
|           </userVisible> | ||||
|           <type>Label</type> | ||||
|           <autoMaxWidth>true</autoMaxWidth> | ||||
|           <autoMaxHeight>true</autoMaxHeight> | ||||
|           <extInfo xsi:type="form:LabelDecorationExtInfo"> | ||||
|             <horizontalAlign>Left</horizontalAlign> | ||||
|           </extInfo> | ||||
|         </extendedTooltip> | ||||
|         <contextMenu> | ||||
|           <name>ИмяФайлаКодаВозвратаКонтекстноеМеню</name> | ||||
|           <id>73</id> | ||||
|           <visible>true</visible> | ||||
|           <enabled>true</enabled> | ||||
|           <userVisible> | ||||
|             <common>true</common> | ||||
|           </userVisible> | ||||
|           <autoFill>true</autoFill> | ||||
|         </contextMenu> | ||||
|         <type>InputField</type> | ||||
|         <editMode>Enter</editMode> | ||||
|         <showInHeader>true</showInHeader> | ||||
|         <headerHorizontalAlign>Left</headerHorizontalAlign> | ||||
|         <showInFooter>true</showInFooter> | ||||
|         <extInfo xsi:type="form:InputFieldExtInfo"> | ||||
|           <handlers> | ||||
|             <event>StartChoice</event> | ||||
|             <name>ИмяФайлаКодаВозвратаНачалоВыбора</name> | ||||
|           </handlers> | ||||
|           <autoMaxHeight>true</autoMaxHeight> | ||||
|           <wrap>true</wrap> | ||||
|           <choiceButton>true</choiceButton> | ||||
|           <clearButton>true</clearButton> | ||||
|           <chooseType>true</chooseType> | ||||
|           <typeDomainEnabled>true</typeDomainEnabled> | ||||
|           <textEdit>true</textEdit> | ||||
|         </extInfo> | ||||
|       </items> | ||||
|       <visible>true</visible> | ||||
|       <enabled>true</enabled> | ||||
|       <userVisible> | ||||
|         <common>true</common> | ||||
|       </userVisible> | ||||
|       <dataPath xsi:type="form:DataPath"> | ||||
|         <segments>ИмяФайлаЛога</segments> | ||||
|       </dataPath> | ||||
|       <title> | ||||
|         <key>ru</key> | ||||
|         <value>Вывод в файл</value> | ||||
|       </title> | ||||
|       <extendedTooltip> | ||||
|         <name>ВыводЛогаРасширеннаяПодсказка</name> | ||||
|         <id>68</id> | ||||
|         <name>ГруппаФайлыРасширеннаяПодсказка</name> | ||||
|         <id>76</id> | ||||
|         <visible>true</visible> | ||||
|         <enabled>true</enabled> | ||||
|         <userVisible> | ||||
| @@ -483,33 +648,15 @@ | ||||
|           <horizontalAlign>Left</horizontalAlign> | ||||
|         </extInfo> | ||||
|       </extendedTooltip> | ||||
|       <contextMenu> | ||||
|         <name>ВыводЛогаКонтекстноеМеню</name> | ||||
|         <id>67</id> | ||||
|         <visible>true</visible> | ||||
|         <enabled>true</enabled> | ||||
|         <userVisible> | ||||
|           <common>true</common> | ||||
|         </userVisible> | ||||
|         <autoFill>true</autoFill> | ||||
|       </contextMenu> | ||||
|       <type>InputField</type> | ||||
|       <editMode>Enter</editMode> | ||||
|       <showInHeader>true</showInHeader> | ||||
|       <headerHorizontalAlign>Left</headerHorizontalAlign> | ||||
|       <showInFooter>true</showInFooter> | ||||
|       <extInfo xsi:type="form:InputFieldExtInfo"> | ||||
|         <handlers> | ||||
|           <event>StartChoice</event> | ||||
|           <name>ВыводЛогаНачалоВыбора</name> | ||||
|         </handlers> | ||||
|         <wrap>true</wrap> | ||||
|         <choiceButton>true</choiceButton> | ||||
|         <clearButton>true</clearButton> | ||||
|         <openButton>true</openButton> | ||||
|         <chooseType>true</chooseType> | ||||
|         <typeDomainEnabled>true</typeDomainEnabled> | ||||
|         <textEdit>true</textEdit> | ||||
|       <type>UsualGroup</type> | ||||
|       <extInfo xsi:type="form:UsualGroupExtInfo"> | ||||
|         <group>Vertical</group> | ||||
|         <representation>NormalSeparation</representation> | ||||
|         <showLeftMargin>true</showLeftMargin> | ||||
|         <united>true</united> | ||||
|         <showTitle>true</showTitle> | ||||
|         <throughAlign>Auto</throughAlign> | ||||
|         <currentRowUse>DontUse</currentRowUse> | ||||
|       </extInfo> | ||||
|     </items> | ||||
|     <items xsi:type="form:FormField"> | ||||
| @@ -926,7 +1073,7 @@ | ||||
|     <name>ИмяФайлаЛога</name> | ||||
|     <title> | ||||
|       <key>ru</key> | ||||
|       <value>Вывод отладочных сообщений в файл</value> | ||||
|       <value>Отладочные сообщения</value> | ||||
|     </title> | ||||
|     <id>61</id> | ||||
|     <valueType> | ||||
| @@ -963,6 +1110,48 @@ | ||||
|       <segments>ОтобразитьОтчет</segments> | ||||
|     </settingsSavedData> | ||||
|   </attributes> | ||||
|   <attributes> | ||||
|     <name>ИмяФайлаКодаВозврата</name> | ||||
|     <title> | ||||
|       <key>ru</key> | ||||
|       <value>Код возврата</value> | ||||
|     </title> | ||||
|     <id>64</id> | ||||
|     <valueType> | ||||
|       <types>String</types> | ||||
|       <stringQualifiers/> | ||||
|     </valueType> | ||||
|     <view> | ||||
|       <common>true</common> | ||||
|     </view> | ||||
|     <edit> | ||||
|       <common>true</common> | ||||
|     </edit> | ||||
|     <settingsSavedData xsi:type="form:DataPath"> | ||||
|       <segments>ИмяФайлаКодаВозврата</segments> | ||||
|     </settingsSavedData> | ||||
|   </attributes> | ||||
|   <attributes> | ||||
|     <name>ИмяФайлаОтчета</name> | ||||
|     <title> | ||||
|       <key>ru</key> | ||||
|       <value>Отчет</value> | ||||
|     </title> | ||||
|     <id>65</id> | ||||
|     <valueType> | ||||
|       <types>String</types> | ||||
|       <stringQualifiers/> | ||||
|     </valueType> | ||||
|     <view> | ||||
|       <common>true</common> | ||||
|     </view> | ||||
|     <edit> | ||||
|       <common>true</common> | ||||
|     </edit> | ||||
|     <settingsSavedData xsi:type="form:DataPath"> | ||||
|       <segments>ИмяФайлаОтчета</segments> | ||||
|     </settingsSavedData> | ||||
|   </attributes> | ||||
|   <formCommands> | ||||
|     <name>УстановитьФлажки</name> | ||||
|     <title> | ||||
|   | ||||
| @@ -64,6 +64,20 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| &НаКлиенте | ||||
| Процедура ИмяФайлаКодаВозвратаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) | ||||
| 	 | ||||
| 	ВыбратьФайл("All files(*.*)|*.*", ИмяФайлаЛога, Новый ОписаниеОповещения("УстановитьИмяФайлаКодаВозврата", ЭтотОбъект)); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| &НаКлиенте | ||||
| Процедура ИмяФайлаОтчетаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) | ||||
| 	 | ||||
| 	ВыбратьФайл("jUnit(*.xml)|*.xml|All files(*.*)|*.*", ИмяФайлаЛога, Новый ОписаниеОповещения("УстановитьИмяФайлаОтчета", ЭтотОбъект)); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоТестов | ||||
| @@ -290,7 +304,7 @@ | ||||
| &НаКлиенте | ||||
| Процедура ОбновитьСтрокуЗапуска() | ||||
| 	 | ||||
| 	ПараметрыЗапускаЮнитТестов = СтрШаблон("%1=%2", ЮТПараметры.КлючЗапуска(), ФайлКонфигурации); | ||||
| 	ПараметрыЗапускаЮнитТестов = СтрШаблон("%1=%2", ЮТПараметрыЗапуска.КлючЗапуска(), ФайлКонфигурации); | ||||
| 	 | ||||
| 	Если ЗапускИзКонфигуратор Тогда | ||||
| 		 | ||||
| @@ -359,6 +373,24 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| &НаКлиенте | ||||
| Процедура УстановитьИмяФайлаКодаВозврата(ВыбранныйФайл, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	Если ВыбранныйФайл <> Неопределено Тогда | ||||
| 		ИмяФайлаКодаВозврата = ВыбранныйФайл; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| &НаКлиенте | ||||
| Процедура УстановитьИмяФайлаОтчета(ВыбранныйФайл, ДополнительныеПараметры) Экспорт | ||||
| 	 | ||||
| 	Если ВыбранныйФайл <> Неопределено Тогда | ||||
| 		ИмяФайлаОтчета = ВыбранныйФайл; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| &НаКлиенте | ||||
| Процедура ВыбратьФайл(Фильтр, ИмяФайла, Оповещение) | ||||
| 	 | ||||
| @@ -389,13 +421,19 @@ | ||||
| 	ВызватьИсключение "Сохранение конфигурации из веб-клиента не поддерживается"; | ||||
| #Иначе | ||||
| 	Конфигурация = ЮТФабрика.ПараметрыЗапуска(); | ||||
| 	Конфигурация.Удалить("ВыполнятьМодульноеТестирование"); | ||||
| 	 | ||||
| 	Конфигурация.showReport = ОтобразитьОтчет; | ||||
| 	Конфигурация.closeAfterTests = Истина; | ||||
| 	Конфигурация.reportPath = ЮТОбщий.Каталог(ФайлКонфигурации); | ||||
| 	Конфигурация.Удалить("ВыполнятьМодульноеТестирование"); | ||||
| 	Конфигурация.reportPath = ИмяФайлаОтчета; | ||||
| 	 | ||||
| 	Конфигурация.logging.enable = ЗначениеЗаполнено(ИмяФайлаЛога); | ||||
| 	Конфигурация.logging.file = ИмяФайлаЛога; | ||||
| 	 | ||||
| 	Если ЗначениеЗаполнено(ИмяФайлаКодаВозврата) Тогда | ||||
| 		Конфигурация.exitCode = ИмяФайлаКодаВозврата; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| 	Если НЕ (УстановленФильтрПоРасширению(Конфигурация) ИЛИ УстановленФильтрПоМодулям(Конфигурация)) Тогда | ||||
| 		УстановитьФильтрПоТестам(Конфигурация); | ||||
| 	КонецЕсли; | ||||
|   | ||||
| @@ -11,26 +11,32 @@ | ||||
|   <content>CommonModule.МокитоПроверки</content> | ||||
|   <content>CommonModule.МокитоСлужебный</content> | ||||
|   <content>CommonModule.ЮТест</content> | ||||
|   <content>CommonModule.ЮТИсполнитель</content> | ||||
|   <content>CommonModule.ЮТИсполнительКлиентСервер</content> | ||||
|   <content>CommonModule.ЮТИсполнительСервер</content> | ||||
|   <content>CommonModule.ЮТКонструкторВариантов</content> | ||||
|   <content>CommonModule.ЮТКонструкторТестовыхДанных</content> | ||||
|   <content>CommonModule.ЮТКонтекст</content> | ||||
|   <content>CommonModule.ЮТКонтекстКлиент</content> | ||||
|   <content>CommonModule.ЮТКонтекстСервер</content> | ||||
|   <content>CommonModule.ЮТКонтекстТеста</content> | ||||
|   <content>CommonModule.ЮТЛогирование</content> | ||||
|   <content>CommonModule.ЮТЛогированиеВызовСервера</content> | ||||
|   <content>CommonModule.ЮТМетаданные</content> | ||||
|   <content>CommonModule.ЮТМетаданныеПовтИсп</content> | ||||
|   <content>CommonModule.ЮТМетаданныеСервер</content> | ||||
|   <content>CommonModule.ЮТОбщий</content> | ||||
|   <content>CommonModule.ЮТОбщийВызовСервера</content> | ||||
|   <content>CommonModule.ЮТОтчет</content> | ||||
|   <content>CommonModule.ЮТОтчетJSON</content> | ||||
|   <content>CommonModule.ЮТОтчетJUnit</content> | ||||
|   <content>CommonModule.ЮТПараметры</content> | ||||
|   <content>CommonModule.ЮТПараметрыЗапуска</content> | ||||
|   <content>CommonModule.ЮТПовторногоИспользования</content> | ||||
|   <content>CommonModule.ЮТРасширения</content> | ||||
|   <content>CommonModule.ЮТРегистрацияОшибок</content> | ||||
|   <content>CommonModule.ЮТСобытия</content> | ||||
|   <content>CommonModule.ЮТТестовыеДанные</content> | ||||
|   <content>CommonModule.ЮТТестовыеДанныеВызовСервера</content> | ||||
|   <content>CommonModule.ЮТТестовыеДанныеСлужебный</content> | ||||
|   <content>CommonModule.ЮТТесты</content> | ||||
|   <content>CommonModule.ЮТУтверждения</content> | ||||
|   <content>CommonModule.ЮТФабрика</content> | ||||
| @@ -43,5 +49,7 @@ | ||||
|   <content>CommonPicture.ЮТУпал</content> | ||||
|   <content>CommonPicture.ЮТУспешно</content> | ||||
|   <content>CommonPicture.ЮТЭлементыТестов</content> | ||||
|   <content>DataProcessor.ЮТHTTPСервисЗапрос</content> | ||||
|   <content>DataProcessor.ЮТЮнитТесты</content> | ||||
|   <content>CommonTemplate.ЮТОписаниеМетаданных</content> | ||||
| </mdclass:Subsystem> | ||||
|   | ||||
							
								
								
									
										15
									
								
								sonar-project.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,15 @@ | ||||
| # must be unique in a given SonarQube instance | ||||
| sonar.projectKey=yaxunit | ||||
| # this is the name displayed in the SonarQube UI | ||||
| sonar.projectName=YAxUnit | ||||
|  | ||||
| # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. | ||||
| # Since SonarQube 4.2, this property is optional if sonar.modules is set. | ||||
| # If not set, SonarQube starts looking for source code from the directory containing | ||||
| # the sonar-project.properties file. | ||||
| sonar.sources=./ | ||||
| sonar.inclusions=**/*.bsl, **/*.os | ||||
|  | ||||
| # Encoding of the source code. Default is default system encoding | ||||
| sonar.sourceEncoding=UTF-8 | ||||
| sonar.bsl.languageserver.configurationPath=.bsl-language-server.json | ||||
| @@ -31,3 +31,19 @@ | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| &Вместо("Методы") | ||||
| Функция Расш1_Методы() Экспорт | ||||
| 	 | ||||
| 	ПараметрыМетода = Новый Массив; | ||||
| 	 | ||||
| 	ПрерватьВыполнение = Ложь; | ||||
| 	Результат = Мокито.АнализВызова(Интеграция, "Методы", ПараметрыМетода, ПрерватьВыполнение); | ||||
| 	 | ||||
| 	Если НЕ ПрерватьВыполнение Тогда | ||||
| 		Возврат ПродолжитьВызов(); | ||||
| 	Иначе | ||||
| 		Возврат Результат; | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецФункции | ||||
|   | ||||
| @@ -22,7 +22,9 @@ | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("Обучение") | ||||
| 		.ДобавитьТест("Обучение_ЦепочкаВызовов") | ||||
| 		.ДобавитьТест("Проверить") | ||||
| 		.ДобавитьТест("Прогон_НакоплениеСтатистики").СПараметрами(Истина).СПараметрами(Ложь) | ||||
| 		.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов") | ||||
| 	; | ||||
| 	 | ||||
| @@ -62,6 +64,24 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Обучение_ЦепочкаВызовов() Экспорт | ||||
| 	 | ||||
| 	Адрес = "service.com"; | ||||
| 	Мокито.Обучение(Интеграция) | ||||
| 		.Когда("ВыполнитьЗапрос").Вернуть(0) | ||||
| 		.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(1) | ||||
| 		.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(2) | ||||
| 		.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(3) | ||||
| 		.Прогон(); | ||||
| 		 | ||||
| 	ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 1").Равно(1); | ||||
| 	ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 2").Равно(2); | ||||
| 	ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 3").Равно(3); | ||||
| 	ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 4").Равно(3); | ||||
| 	ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос("Адрес"), "Вызов 5").Равно(0); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Проверить() Экспорт | ||||
| 	 | ||||
| 	ЛюбойПараметр = Мокито.ЛюбойПараметр(); | ||||
| @@ -87,6 +107,17 @@ | ||||
| 		.КоличествоВызовов(Интеграция.ВыполнитьЗапрос(Мокито.ТипизированныйПараметр(Тип("Строка")), ЛюбойПараметр)).Равно(2) | ||||
| 	; | ||||
| 	 | ||||
| 	ВызовыМетода = Мокито.Проверить(Интеграция).Вызовы("ВыполнитьЗапрос"); | ||||
| 	ЮТест.ОжидаетЧто(ВызовыМетода, "Вызовы метода ВыполнитьЗапрос") | ||||
| 		.ИмеетТип("Массив") | ||||
| 		.ИмеетДлину(3) | ||||
| 		.КаждыйЭлементСодержитСвойствоСоЗначением("Объект", Интеграция) | ||||
| 		.КаждыйЭлементСодержитСвойствоСоЗначением("ИмяМетода", "ВыполнитьЗапрос") | ||||
| 		.КаждыйЭлементСодержитСвойство("Параметры") | ||||
| 		.Свойство("[0].Параметры[0]").Равно("Адрес") | ||||
| 		.Свойство("[1].Параметры[0]").Равно(Адрес) | ||||
| 		.Свойство("[2].Параметры[1]").Равно(2); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #Если Сервер Тогда | ||||
| @@ -165,6 +196,40 @@ | ||||
| КонецПроцедуры | ||||
| #КонецЕсли | ||||
|  | ||||
| Процедура Прогон_НакоплениеСтатистики(НакоплениеСтатистики) Экспорт | ||||
| 	 | ||||
| 	Описание = ?(НакоплениеСтатистики, "Накопление статистики", "Сброс статистки"); | ||||
| 	Адрес = "service.com"; | ||||
| 	 | ||||
| 	Мокито.Обучение(Интеграция) | ||||
| 		.Когда("ВыполнитьЗапрос").Вернуть(1) | ||||
| 		.Наблюдать("Методы") | ||||
| 		.Прогон(); | ||||
| 	 | ||||
| 	Интеграция.ВыполнитьЗапрос(Адрес); | ||||
| 	Интеграция.Методы(); | ||||
| 	 | ||||
| 	Мокито.Проверить(Интеграция) | ||||
| 		.КоличествоВызовов("ВыполнитьЗапрос").Равно(1) | ||||
| 		.КоличествоВызовов("Методы").Равно(1); | ||||
| 	 | ||||
| 	Мокито.Прогон(НЕ НакоплениеСтатистики); | ||||
| 	 | ||||
| 	Интеграция.ВыполнитьЗапрос(Адрес); | ||||
| 	Интеграция.Методы(); | ||||
| 	 | ||||
| 	Если НакоплениеСтатистики Тогда | ||||
| 		Мокито.Проверить(Интеграция) | ||||
| 			.КоличествоВызовов("ВыполнитьЗапрос").Равно(2) | ||||
| 			.КоличествоВызовов("Методы").Равно(2); | ||||
| 	Иначе | ||||
| 		Мокито.Проверить(Интеграция) | ||||
| 			.КоличествоВызовов("ВыполнитьЗапрос").Равно(1) | ||||
| 			.КоличествоВызовов("Методы").Равно(1); | ||||
| 	КонецЕсли; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|   | ||||
| @@ -16,13 +16,9 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область ТестыAPI | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("ВыброситьИсключение") | ||||
| @@ -30,10 +26,6 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Тесты | ||||
|  | ||||
| Процедура ВыброситьИсключение() Экспорт | ||||
| 	 | ||||
| 	Адрес = "service.com"; | ||||
| @@ -54,7 +46,3 @@ | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -16,10 +16,6 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| @@ -28,6 +24,7 @@ | ||||
| 		.ДобавитьТест("ДобавитьСтроку") | ||||
| 		.ДобавитьТест("ОбъединитьВСтруктуру") | ||||
| 		.ДобавитьТест("СформироватьСтрокуСимволов") | ||||
| 		.ДобавитьТест("ДанныеСовпадают") | ||||
| 	; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
| @@ -146,4 +143,35 @@ | ||||
| 	 | ||||
| КонецФункции | ||||
|  | ||||
| Процедура ДанныеСовпадают() Экспорт | ||||
| 	 | ||||
| 	Массив = ЮТОбщий.ЗначениеВМассиве(1, 2, "3"); | ||||
| 	Структура = Новый Структура("Строка, Число, Массив", "1", 1, Массив); | ||||
| 	Соответствие = Новый Соответствие(); | ||||
| 	Соответствие.Вставить("Строка", "1"); | ||||
| 	Соответствие.Вставить(2, "Число"); | ||||
| 	Соответствие.Вставить("Массив", Массив); | ||||
| 	 | ||||
| 	Варианты = ЮТест.Варианты("Значение") | ||||
| 		.Добавить(Массив) | ||||
| 		.Добавить(Структура) | ||||
| 		.Добавить(Соответствие) | ||||
| 		.Добавить(Новый ФиксированныйМассив(Массив)) | ||||
| 		.Добавить(Новый ФиксированнаяСтруктура(Структура)) | ||||
| 		.Добавить(Новый ФиксированноеСоответствие(Соответствие)) | ||||
| 		.СписокВариантов(); | ||||
| 	 | ||||
| 	Для Каждого Вариант Из Варианты Цикл | ||||
| 		 | ||||
| 		Описание = Строка(ТипЗнч(Вариант.Значение)); | ||||
| 		 | ||||
| 		ЮТест.ОжидаетЧто( | ||||
| 				ЮТОбщий.ДанныеСовпадают(Вариант.Значение, Вариант.Значение), | ||||
| 				Описание) | ||||
| 			.ЭтоИстина(); | ||||
| 		 | ||||
| 	КонецЦикла; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -16,53 +16,30 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Набор тестов для общего модуля СтроковыеФункцииКлиентСервер | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Набор стандартных методов тестового модуля | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
|  | ||||
| #Область ТестыAPI | ||||
|  | ||||
| // ИсполняемыеСценарии | ||||
| // 	Сервисный метод для получения списка тестовых методов | ||||
| // Параметры: | ||||
| // 	ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов | ||||
| // Возвращаемое значение: | ||||
| // 	Массив - Имена методов тестов | ||||
| Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	Возврат; // TODO Реанимировать после реализации проброса доп параметров | ||||
| 	// Добавление теста в тестовый набор по умолчанию с указанием представления теста | ||||
| 	ЮТТесты.ДобавитьТест("ТестовыйМетод3", "Тестовый метод 3"); | ||||
| 	// Добавление теста для клиента в тестовый набор по умолчанию | ||||
| 	ЮТТесты.ТестКлиент("ТестовыйМетод4"); | ||||
| 	// Добавление теста для клиента в тестовый набор по умолчанию | ||||
| 	ЮТТесты.ТестСервер("ТестовыйМетод4"); | ||||
| 	 | ||||
| 	ЮТТесты.ТестовыйНабор("ТестовыйНабор") | ||||
| 		.ДобавитьТест("ТестовыйМетод") | ||||
| 		.ДобавитьТест("ТестовыйМетод2") | ||||
| 		.ДобавитьТест("ТестовыйМетод5", , "Тег1"); | ||||
| 	 | ||||
| 	// Создание тестового набора со списком тегов | ||||
| 	ЮТТесты.ТестовыйНабор("Тестовый набор 2", "Тег1, Тег2") | ||||
| 	 | ||||
| 	// Добавление теста в созданный тестовый набор с указанием тегов, которые будут объединены с тегами набора | ||||
| 	.ДобавитьТест("ТестовыйМетод6", , "Тег5, Тег6"); | ||||
| 	ЮТТесты | ||||
| 		// Добавление теста в тестовый набор по умолчанию с указанием представления теста | ||||
| 		.ДобавитьТест("ТестовыйМетод3", "Тестовый метод 3") | ||||
| 		// Добавление теста для клиента в тестовый набор по умолчанию | ||||
| 		.ДобавитьКлиентскийТест("ТестовыйМетод4") | ||||
| 		// Добавление теста для клиента в тестовый набор по умолчанию | ||||
| 		.ДобавитьСерверныйТест("ТестовыйМетод4") | ||||
| 		 | ||||
| 		.ДобавитьТестовыйНабор("ТестовыйНабор") | ||||
| 			.ДобавитьТест("ТестовыйМетод") | ||||
| 			.ДобавитьТест("ТестовыйМетод2") | ||||
| 			.ДобавитьТест("ТестовыйМетод5", , "Тег1") | ||||
| 		// Создание тестового набора со списком тегов | ||||
| 		.ДобавитьТестовыйНабор("Тестовый набор 2", "Тег1, Тег2") | ||||
| 		// Добавление теста в созданный тестовый набор с указанием тегов, которые будут объединены с тегами набора | ||||
| 			.ДобавитьТест("ТестовыйМетод6", , "Тег5, Тег6"); | ||||
| 	 | ||||
| 	ВызватьИсключение "Ошибка загрузки сценариев"; | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Реализация тестов | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
|  | ||||
| #Область Тесты | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -16,10 +16,6 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| @@ -33,10 +29,10 @@ | ||||
|  | ||||
| Процедура ЗаполнитьСправочник() Экспорт | ||||
| 	 | ||||
| #Если Сервер Тогда | ||||
| 	Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары); | ||||
| #Иначе | ||||
| #Если Клиент Тогда | ||||
| 	Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары"); | ||||
| #Иначе | ||||
| 	Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары); | ||||
| #КонецЕсли | ||||
| 	 | ||||
| 	Конструктор | ||||
| @@ -53,7 +49,7 @@ | ||||
| 		.Свойство("Вид").Заполнено(); | ||||
| 	 | ||||
| 	Ссылка = Конструктор.Записать(); | ||||
| #Если Сервер Тогда | ||||
| #Если НЕ Клиент Тогда | ||||
| 	ЮТест.ОжидаетЧто(Ссылка, "Созданный объект") | ||||
| 		.Заполнено() | ||||
| 		.ИмеетТип("СправочникСсылка.Товары") | ||||
| @@ -67,10 +63,10 @@ | ||||
|  | ||||
| Процедура ЗаполнитьДокумент() Экспорт | ||||
| 	 | ||||
| #Если Сервер Тогда | ||||
| 	Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара); | ||||
| #Иначе | ||||
| #Если Клиент Тогда | ||||
| 	Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара"); | ||||
| #Иначе | ||||
| 	Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара); | ||||
| #КонецЕсли | ||||
| 	 | ||||
| 	Ссылка = Конструктор | ||||
| @@ -91,7 +87,7 @@ | ||||
| 			.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество) | ||||
| 		.Провести(); | ||||
| 	 | ||||
| #Если Сервер Тогда | ||||
| #Если НЕ Клиент Тогда | ||||
| 	ЮТест.ОжидаетЧто(Ссылка, "Созданный объект") | ||||
| 		.Заполнено() | ||||
| 		.ИмеетТип("ДокументСсылка.ПриходТовара") | ||||
| @@ -114,7 +110,3 @@ | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
							
								
								
									
										59
									
								
								ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,59 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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="87209e33-355d-4495-9c74-f774c7572055"> | ||||
|   <name>ОМ_ЮТТестовыеДанные</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>О м тестовые данные</value> | ||||
|   </synonym> | ||||
|   <clientManagedApplication>true</clientManagedApplication> | ||||
|   <server>true</server> | ||||
|   <clientOrdinaryApplication>true</clientOrdinaryApplication> | ||||
| </mdclass:CommonModule> | ||||
| @@ -16,10 +16,6 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| @@ -40,7 +36,7 @@ | ||||
| 			.СПараметрами(Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыХарактеристик, СправочникСсылка.Банки, ПеречислениеСсылка.СостоянияЗаказов")) | ||||
| 			.СПараметрами(Новый ОписаниеТипов("ВидДвиженияНакопления")) | ||||
| 	; | ||||
| 		 | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Фикция(ОписаниеТипа) Экспорт | ||||
| @@ -55,6 +51,3 @@ | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -16,13 +16,9 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("СПараметрами") | ||||
|   | ||||
| @@ -16,15 +16,8 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
|  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| #Область ТестыAPI | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| @@ -77,10 +70,6 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Тесты | ||||
|  | ||||
| Процедура Что() Экспорт | ||||
| 	 | ||||
| 	ЮТУтверждения.Что(1, "Проверяемый контекст"); | ||||
| @@ -270,7 +259,7 @@ | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| 	Процедура Метод() Экспорт | ||||
| Процедура Метод() Экспорт | ||||
| 	 | ||||
| 	ЮТУтверждения.Что(ОМ_ЮТУтверждения, "Контекст метода") | ||||
| 		.Метод("МетодБезИсключение"); | ||||
| @@ -2020,8 +2009,6 @@ | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| Процедура ПроверитьОшибкуУтверждения(ИнформацияОбОшибке, ОжидаемоеОписание) | ||||
|   | ||||
| @@ -16,26 +16,18 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область ТестыAPI | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("ЭтоПодходящееРасширение") | ||||
| 		.ДобавитьТест("ЭтоПодходящийМодуль") | ||||
| 		.ДобавитьТест("ОтфильтроватьТестовыеНаборы") | ||||
| 	; | ||||
| 		 | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Тесты | ||||
|  | ||||
| Процедура ЭтоПодходящееРасширение() Экспорт | ||||
| 	 | ||||
| 	Варианты = Новый Массив(); | ||||
| @@ -228,6 +220,3 @@ | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
|  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("ИсполняемыеСценарииМодуля") | ||||
| @@ -93,7 +93,7 @@ | ||||
| 	 | ||||
| 	Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска); | ||||
| 	ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests") | ||||
| 		.ИмеетДлину(11); | ||||
| 		.ИмеетДлину(13); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| @@ -117,7 +117,7 @@ | ||||
| 		.Элемент(1).ИмеетТип("Структура") | ||||
| 		.Элемент(2).ИмеетТип("Структура") | ||||
| 	; | ||||
| 		 | ||||
| 	 | ||||
| 	НаборПоУмолчанию = Сценарии[0]; | ||||
| 	НаборЭтоТестовыйМодуль = Сценарии[1]; | ||||
| 	НаборЗагрузкаТестов = Сценарии[2]; | ||||
| @@ -157,7 +157,3 @@ | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -16,13 +16,9 @@ | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| ///////////////////////////////////////////////////////////////////////////////// | ||||
| // Экспортные процедуры и функции, предназначенные для использования другими  | ||||
| // объектами конфигурации или другими программами | ||||
| /////////////////////////////////////////////////////////////////////////////////  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("Пропустить") | ||||
| @@ -97,6 +93,3 @@ | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -0,0 +1,87 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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. | ||||
| // | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
|  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Процедура ИсполняемыеСценарии() Экспорт | ||||
| 	 | ||||
| 	ЮТТесты | ||||
| 		.ДобавитьТест("Конструктор") | ||||
| 		.ДобавитьТест("УстановитьТело") | ||||
| 	; | ||||
| 		 | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Конструктор() Экспорт | ||||
| 	 | ||||
| 	Запрос = ЮТест.Данные().HTTPСервисЗапрос() | ||||
| 		.ДобавитьЗаголовок("Заголовок", "Заголовок") | ||||
| 		.ДобавитьПараметрЗапроса("Параметр1", 1) | ||||
| 		.ДобавитьПараметрURL("Параметр2", 2) | ||||
| 		.Метод("GET"); | ||||
| 	 | ||||
| 	ЮТест.ОжидаетЧто(Запрос) | ||||
| 		.Свойство("HTTPМетод").Равно("GET") | ||||
| 		.Свойство("Заголовки.Заголовок").Равно("Заголовок") | ||||
| 		.Свойство("ПараметрыЗапроса.Параметр1").Равно(1) | ||||
| 		.Свойство("ПараметрыURL.Параметр2").Равно(2); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура УстановитьТело() Экспорт | ||||
| 	 | ||||
| 	Описание = "Тело не установлено"; | ||||
| 	 | ||||
| 	Запрос = ЮТест.Данные().HTTPСервисЗапрос(); | ||||
| 	ЮТест.ОжидаетЧто(Запрос, Описание) | ||||
| 		.Метод("ПолучитьТелоКакДвоичныеДанные").НеВыбрасываетИсключение() | ||||
| 		.Метод("ПолучитьТелоКакПоток").НеВыбрасываетИсключение() | ||||
| 		.Метод("ПолучитьТелоКакСтроку").НеВыбрасываетИсключение() | ||||
| 		.Метод("ПолучитьТелоКакСтроку", ЮТОбщий.ЗначениеВМассиве(КодировкаТекста.UTF8)).НеВыбрасываетИсключение(); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку()).Равно(""); | ||||
| 	 | ||||
| 	Тело = "Тело"; | ||||
| 	ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Тело); | ||||
| 	 | ||||
| 	Описание = "Тело установлено из двоичных данных"; | ||||
| 	Запрос = ЮТест.Данные().HTTPСервисЗапрос() | ||||
| 		.УстановитьТелоКакДвоичныеДанные(ДвоичныеДанные); | ||||
| 		 | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакДвоичныеДанные(), Описание + ". Получение двоичных данных").Равно(ДвоичныеДанные); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно(Тело); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку("UTF-8"), Описание + ". Получение строки UTF-8").Равно(Тело); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакПоток(), Описание + ". Получение потока").ИмеетТип("Поток"); | ||||
| 	 | ||||
| 	Описание = "Тело установлено из строки"; | ||||
| 	Запрос = ЮТест.Данные().HTTPСервисЗапрос() | ||||
| 		.УстановитьТелоКакСтроку(Тело); | ||||
| 	 | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакДвоичныеДанные(), Описание + ". Получение двоичных данных").Равно(ДвоичныеДанные); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно(Тело); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку("UTF-8"), Описание + ". Получение строки UTF-8").Равно(Тело); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакПоток(), Описание + ". Получение потока").ИмеетТип("Поток"); | ||||
| 	 | ||||
| 	Описание = "Тело установлено из JSON"; | ||||
| 	Запрос = ЮТест.Данные().HTTPСервисЗапрос() | ||||
| 		.УстановитьТелоКакСтрокуJSON(Новый Массив()); | ||||
| 	ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно("[]"); | ||||
| 	 | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| @@ -0,0 +1,9 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2d597d20-67f3-47c7-96e0-c0e0241f0e9b"> | ||||
|   <name>Обр_ЮТHTTPСервисЗапрос</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Обр HTTPСервис запрос</value> | ||||
|   </synonym> | ||||
|   <server>true</server> | ||||
| </mdclass:CommonModule> | ||||
| @@ -0,0 +1,37 @@ | ||||
| //©///////////////////////////////////////////////////////////////////////////©// | ||||
| // | ||||
| //  Copyright 2021-2023 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 ИЗ %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="88f72d9b-2cef-4ea0-882b-50bc299dfa4e"> | ||||
|   <name>ПомощникТестированияВызовСервера</name> | ||||
|   <synonym> | ||||
|     <key>ru</key> | ||||
|     <value>Помощник тестирования вызов сервера</value> | ||||
|   </synonym> | ||||
|   <server>true</server> | ||||
|   <serverCall>true</serverCall> | ||||
| </mdclass:CommonModule> | ||||
| @@ -24,17 +24,20 @@ | ||||
|     <languageCode>ru</languageCode> | ||||
|   </languages> | ||||
|   <commonModules>CommonModule.Интеграция</commonModules> | ||||
|   <commonModules>CommonModule.Обр_ЮТHTTPСервисЗапрос</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.ОМ_ЮТЧитатель</commonModules> | ||||
|   <commonModules>CommonModule.ПомощникТестированияВызовСервера</commonModules> | ||||
|   <catalogs>Catalog.Встречи</catalogs> | ||||
|   <catalogs>Catalog.Товары</catalogs> | ||||
|   <documents>Document.ПриходТовара</documents> | ||||
|   | ||||