From 75b89afa4cb9a1652815894d3bd808ab87a425b3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 14:17:16 +0300 Subject: [PATCH 01/42] CI Appveyor #98 --- appveyor-runtests.cmd | 11 +++++++++++ appveyor.yml | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 appveyor-runtests.cmd create mode 100644 appveyor.yml diff --git a/appveyor-runtests.cmd b/appveyor-runtests.cmd new file mode 100644 index 0000000..01e50ec --- /dev/null +++ b/appveyor-runtests.cmd @@ -0,0 +1,11 @@ +@chcp 65001 + +"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 testrunner.os -runall tests xddReportPath tests + +@if %ERRORLEVEL%==2 GOTO good_exit +@if %ERRORLEVEL%==0 GOTO good_exit + +exit /B 1 + +:good_exit +exit /B 0 \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..eddc9c8 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,20 @@ +version: 1.2.{build} +pull_requests: + do_not_increment_build_number: true +init: +- ps: Set-WinSystemLocale ru-RU +#environment: +# oscript: C:\Program Files (x86)\OneScript\bin\oscript.exe +install: +- cmd: "git submodule update --init --recursive\n\ncurl -o %temp%\\oscript-setup.exe http://oscript.io/downloads/night-build/exe\n\nrem \n%temp%\\oscript-setup.exe /silent /log=\"%temp%\\oscript-setup.log\" /saveinf=\"%temp%\\oscript-setup-settings.txt\"\n\nSET PATH=%PATH%;%ProgramFiles(x86)%\\OneScript\\bin\n\nrem type %temp%\\oscript-setup.log\n\"%ProgramFiles(x86)%\\OneScript\\bin\\oscript.exe\" -version" +# to disable automatic builds +build: off +test_script: +- cmd: appveyor-runtests.cmd +after_test: +- ps: # upload results to AppVeyor +- ps: Write-Host "Загружаю результаты тестов на CI" +- ps: $wc = New-Object 'System.Net.WebClient' +- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\tests.xml)) +artifacts: +- path: tests\tests.xml \ No newline at end of file From b692d9df4094334ffe3971e4c8d17b780fb204a4 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 14:33:11 +0300 Subject: [PATCH 02/42] =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=201testrunner=20=D0=B8=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=BD=D0=B5=D0=B3=D0=BE=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor-runtests.cmd | 3 ++- appveyor.yml | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/appveyor-runtests.cmd b/appveyor-runtests.cmd index 01e50ec..79a4ee8 100644 --- a/appveyor-runtests.cmd +++ b/appveyor-runtests.cmd @@ -1,6 +1,7 @@ @chcp 65001 -"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 testrunner.os -runall tests xddReportPath tests +rem "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 testrunner.os -runall tests xddReportPath tests +"%ProgramFiles(x86)%\OneScript\bin\testrunner.bat" -runall tests xddReportPath tests @if %ERRORLEVEL%==2 GOTO good_exit @if %ERRORLEVEL%==0 GOTO good_exit diff --git a/appveyor.yml b/appveyor.yml index eddc9c8..84ae239 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,7 +6,24 @@ init: #environment: # oscript: C:\Program Files (x86)\OneScript\bin\oscript.exe install: -- cmd: "git submodule update --init --recursive\n\ncurl -o %temp%\\oscript-setup.exe http://oscript.io/downloads/night-build/exe\n\nrem \n%temp%\\oscript-setup.exe /silent /log=\"%temp%\\oscript-setup.log\" /saveinf=\"%temp%\\oscript-setup-settings.txt\"\n\nSET PATH=%PATH%;%ProgramFiles(x86)%\\OneScript\\bin\n\nrem type %temp%\\oscript-setup.log\n\"%ProgramFiles(x86)%\\OneScript\\bin\\oscript.exe\" -version" +- cmd: >- + git submodule update --init --recursive + + curl -o %temp%\oscript-setup.exe http://oscript.io/downloads/night-build/exe + + rem + %temp%\oscript-setup.exe /silent /log="%temp%\oscript-setup.log" /saveinf="%temp%\oscript-setup-settings.txt" + + SET PATH=%PATH%;%ProgramFiles(x86)%\OneScript\bin + + rem type %temp%\oscript-setup.log + dir "%ProgramFiles(x86)%\OneScript\bin" + + "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -version + + "%ProgramFiles(x86)%\OneScript\bin\opm.bat" update 1testrunner + + dir "%ProgramFiles(x86)%\OneScript\bin" # to disable automatic builds build: off test_script: From f0fd3d9e5cffbe84bbbba50e5759f4d605061d0c Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 14:36:46 +0300 Subject: [PATCH 03/42] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20-=20=D0=BD=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=BB=D0=B0=D1=81=D1=8C=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0=201=D1=81?= =?UTF-8?q?=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 84ae239..612230c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,7 +11,6 @@ install: curl -o %temp%\oscript-setup.exe http://oscript.io/downloads/night-build/exe - rem %temp%\oscript-setup.exe /silent /log="%temp%\oscript-setup.log" /saveinf="%temp%\oscript-setup-settings.txt" SET PATH=%PATH%;%ProgramFiles(x86)%\OneScript\bin From 957e4fcf39f11bdeedb10f919d679c8a24a5c711 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 14:43:06 +0300 Subject: [PATCH 04/42] =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=201testrunner=20=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=20git=20clone=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor-runtests.cmd | 3 ++- appveyor.yml | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/appveyor-runtests.cmd b/appveyor-runtests.cmd index 79a4ee8..66ec64d 100644 --- a/appveyor-runtests.cmd +++ b/appveyor-runtests.cmd @@ -1,7 +1,8 @@ @chcp 65001 rem "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 testrunner.os -runall tests xddReportPath tests -"%ProgramFiles(x86)%\OneScript\bin\testrunner.bat" -runall tests xddReportPath tests +"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 c:\projects\1testrunner\testrunner.os -runall tests xddReportPath tests +REM "%ProgramFiles(x86)%\OneScript\bin\testrunner.bat" -runall tests xddReportPath tests @if %ERRORLEVEL%==2 GOTO good_exit @if %ERRORLEVEL%==0 GOTO good_exit diff --git a/appveyor.yml b/appveyor.yml index 612230c..0fe8d06 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,12 +16,21 @@ install: SET PATH=%PATH%;%ProgramFiles(x86)%\OneScript\bin rem type %temp%\oscript-setup.log + dir "%ProgramFiles(x86)%\OneScript\bin" "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -version - "%ProgramFiles(x86)%\OneScript\bin\opm.bat" update 1testrunner + rem "%ProgramFiles(x86)%\OneScript\bin\opm.bat" update 1testrunner + + git clone -q --branch=master https://github.com/artbear/1testrunner.git c:\projects\1testrunner + dir c:\projects\1testrunner + + rem pushd c:\projects\1testrunner + rem "%ProgramFiles(x86)%\OneScript\bin\opm.bat" app 1testrunner + rem popd + dir "%ProgramFiles(x86)%\OneScript\bin" # to disable automatic builds build: off From 43994421a2b8644ec02f9386bbf24f74c4df97b3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 14:53:15 +0300 Subject: [PATCH 05/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=20=D1=84=D0=B8?= =?UTF-8?q?=D1=87=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor-runtests.cmd | 11 +++++++++-- appveyor.yml | 10 +--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/appveyor-runtests.cmd b/appveyor-runtests.cmd index 66ec64d..f35a763 100644 --- a/appveyor-runtests.cmd +++ b/appveyor-runtests.cmd @@ -1,8 +1,6 @@ @chcp 65001 -rem "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 testrunner.os -runall tests xddReportPath tests "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 c:\projects\1testrunner\testrunner.os -runall tests xddReportPath tests -REM "%ProgramFiles(x86)%\OneScript\bin\testrunner.bat" -runall tests xddReportPath tests @if %ERRORLEVEL%==2 GOTO good_exit @if %ERRORLEVEL%==0 GOTO good_exit @@ -10,4 +8,13 @@ REM "%ProgramFiles(x86)%\OneScript\bin\testrunner.bat" -runall tests xddReportPa exit /B 1 :good_exit + +"%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -encoding=utf-8 src\bdd.os features/core -junit-out tests/bdd-log.xml + +@if %ERRORLEVEL%==2 GOTO good_exit_bdd +@if %ERRORLEVEL%==0 GOTO good_exit_bdd + +exit /B 1 + +:good_exit_bdd exit /B 0 \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 0fe8d06..84fa24f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,8 +3,6 @@ pull_requests: do_not_increment_build_number: true init: - ps: Set-WinSystemLocale ru-RU -#environment: -# oscript: C:\Program Files (x86)\OneScript\bin\oscript.exe install: - cmd: >- git submodule update --init --recursive @@ -25,13 +23,6 @@ install: git clone -q --branch=master https://github.com/artbear/1testrunner.git c:\projects\1testrunner - dir c:\projects\1testrunner - - rem pushd c:\projects\1testrunner - rem "%ProgramFiles(x86)%\OneScript\bin\opm.bat" app 1testrunner - rem popd - - dir "%ProgramFiles(x86)%\OneScript\bin" # to disable automatic builds build: off test_script: @@ -41,5 +32,6 @@ after_test: - ps: Write-Host "Загружаю результаты тестов на CI" - ps: $wc = New-Object 'System.Net.WebClient' - ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\tests.xml)) +- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\bdd-log.xml.xml)) artifacts: - path: tests\tests.xml \ No newline at end of file From d8c9f701f41c876c6afa754479adfa87e3efaa0d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 14:58:10 +0300 Subject: [PATCH 06/42] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B5=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=B1=D0=B4=D0=B4=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 84fa24f..15caaef 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -32,6 +32,6 @@ after_test: - ps: Write-Host "Загружаю результаты тестов на CI" - ps: $wc = New-Object 'System.Net.WebClient' - ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\tests.xml)) -- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\bdd-log.xml.xml)) +- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\bdd-log.xml)) artifacts: - path: tests\tests.xml \ No newline at end of file From a9d07ddb08aa6cfb4cd191a674b0e386ee802c02 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 15:01:30 +0300 Subject: [PATCH 07/42] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B6?= =?UTF-8?q?=D0=B0=D1=8E=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=91?= =?UTF-8?q?=D0=94=D0=94=20=D0=BA=D0=B0=D0=BA=20=D0=B0=D1=80=D1=82=D0=B5?= =?UTF-8?q?=D1=84=D0=B0=D0=BA=D1=82=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 15caaef..bad2e2d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,16 +11,10 @@ install: %temp%\oscript-setup.exe /silent /log="%temp%\oscript-setup.log" /saveinf="%temp%\oscript-setup-settings.txt" - SET PATH=%PATH%;%ProgramFiles(x86)%\OneScript\bin - - rem type %temp%\oscript-setup.log - dir "%ProgramFiles(x86)%\OneScript\bin" "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -version - rem "%ProgramFiles(x86)%\OneScript\bin\opm.bat" update 1testrunner - git clone -q --branch=master https://github.com/artbear/1testrunner.git c:\projects\1testrunner # to disable automatic builds @@ -34,4 +28,5 @@ after_test: - ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\tests.xml)) - ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\bdd-log.xml)) artifacts: -- path: tests\tests.xml \ No newline at end of file +- path: tests\tests.xml +- path: tests\bdd-log.xml \ No newline at end of file From 74201b589940b13b966651c2d0a166df366c62f1 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Dec 2016 15:11:31 +0300 Subject: [PATCH 08/42] Project status badge from appveyor fix #98 --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bfe4764..b5db0f5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # 1BDD для OneScript +[![Build status](https://ci.appveyor.com/api/projects/status/vbnk445352crljjn?svg=true)](https://ci.appveyor.com/project/artbear/1bdd) + +[![Join the chat at https://gitter.im/artbear/1bdd](https://badges.gitter.im/artbear/1bdd.svg)](https://gitter.im/artbear/1bdd?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам. + `1bdd` - инструмент для выполнения автоматизированных требований/тестов, написанных на обычном, не программном языке. Иными словами, это консольный фреймворк, реализующий `BDD` для проекта [OneScript](https://github.com/EvilBeaver/OneScript). @@ -7,8 +11,6 @@ Идеи черпаются из проекта [Cucumber](https://cucumber.io). -[![Join the chat at https://gitter.im/artbear/1bdd](https://badges.gitter.im/artbear/1bdd.svg)](https://gitter.im/artbear/1bdd?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Здесь вы можете задавать любые вопросы разработчикам и активным участникам. - # Командная строка запуска ``` From 27b2938cf6db19a931086b935f305ad04bb72f63 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 8 Dec 2016 19:02:29 +0300 Subject: [PATCH 09/42] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20API=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=20?= =?UTF-8?q?=D0=B8=D1=82=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D1=85=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D0=BE=D0=B2=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20fix=20?= =?UTF-8?q?#100?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 6 +++++- src/bdd.os | 4 +--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 0dc6e42..16c00bb 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -126,10 +126,14 @@ Возврат СтруктураИтогов; КонецФункции -Процедура ВывестиИтоговыеРезультатыВыполнения(Знач МассивИтогов, Знач СтруктураИтогов, Знач ПоказыватьИтогиФич, Знач СтатусВыполнения) Экспорт +Процедура ВывестиИтоговыеРезультатыВыполнения(Знач РезультатыВыполнения, Знач ПоказыватьИтогиФич) Экспорт ТекущийУровень = 0; Лог.Информация(""); + + МассивИтогов = Неопределено; + СтруктураИтогов = ПолучитьИтоговыеРезультатыВыполнения(РезультатыВыполнения, МассивИтогов); + СтатусВыполнения = ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); ИмяПоляИтога = "Итог"; Для каждого Элем Из МассивИтогов Цикл diff --git a/src/bdd.os b/src/bdd.os index e93020b..deda2be 100644 --- a/src/bdd.os +++ b/src/bdd.os @@ -211,9 +211,7 @@ Если РезультатыВыполнения.Строки.Количество() > 0 Тогда СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); - МассивШагов = Неопределено; - СтруктураИтогов = ИсполнительБДД.ПолучитьИтоговыеРезультатыВыполнения(РезультатыВыполнения, МассивШагов); - ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(МассивШагов, СтруктураИтогов, ФайлФичи.ЭтоКаталог(), СтатусВыполнения); + ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, ФайлФичи.ЭтоКаталог()); КонецЕсли; Если Не ПустаяСтрока(ПутьОтчетаJUnit) Тогда From 596f58dedeb30692430b290f79785e955c6f7630 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 8 Dec 2016 19:05:02 +0300 Subject: [PATCH 10/42] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=98=D1=81=D1=82=D0=B8=D0=BD=D0=B0=20-=20API=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=B0=20=D0=B8=D1=82=D0=BE=D0=B3=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20fix=20#100?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 16c00bb..e94e6ab 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -126,7 +126,7 @@ Возврат СтруктураИтогов; КонецФункции -Процедура ВывестиИтоговыеРезультатыВыполнения(Знач РезультатыВыполнения, Знач ПоказыватьИтогиФич) Экспорт +Процедура ВывестиИтоговыеРезультатыВыполнения(Знач РезультатыВыполнения, Знач ПоказыватьИтогиФич = Истина) Экспорт ТекущийУровень = 0; Лог.Информация(""); From cb7f8ef590653d450829dfd32262423cc0984364 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 9 Dec 2016 16:46:11 +0300 Subject: [PATCH 11/42] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20VSC?= =?UTF-8?q?=20=D0=BE=D1=82=20=D0=B7=D0=BD=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D1=8F=D0=BC=D1=8B=D1=85=20=D0=BF=D1=83=D1=82=D0=B5=D0=B9?= =?UTF-8?q?=201testrunner=20=D0=B8=201bdd=20=D0=94=D0=BE=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5?= =?UTF-8?q?=D0=BC=20=D1=81=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=BE=D0=B9=20=D0=B2=20VSC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 63a3632..1863155 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,7 +2,7 @@ "version": "0.1.0", "windows": { "command": "cmd", - "args": ["/c"] + "args": ["/c", "chcp 65001 >nul &"] }, "linux": { "command": "sh", @@ -14,9 +14,7 @@ { "taskName": "Testing project", "args": [ - "oscript", - "-encoding=utf-8", - "${workspaceRoot}/../oscript-library/src/1testrunner/testrunner.os", + "1testrunner", "-runall", "${workspaceRoot}/tests" ], @@ -39,7 +37,6 @@ "taskName": "Exec all features", "args": [ "oscript", - "-encoding=utf-8", "${workspaceRoot}/src/bdd.os", "${workspaceRoot}/features/core", "-fail-fast", @@ -65,7 +62,6 @@ "taskName": "Exec feature", "args": [ "oscript", - "-encoding=utf-8", "${workspaceRoot}/src/bdd.os", "${file}", "-fail-fast", @@ -104,7 +100,6 @@ "taskName": "Exec feature + debug", "args": [ "oscript", - "-encoding=utf-8", "${workspaceRoot}/src/bdd.os", "${file}", "-fail-fast", @@ -132,7 +127,6 @@ "taskName": "Generate feature steps", "args": [ "oscript", - "-encoding=utf-8", "${workspaceRoot}/src/bdd.os", "gen", "${file}", @@ -160,7 +154,6 @@ "taskName": "Generate feature steps + debug", "args": [ "oscript", - "-encoding=utf-8", "${workspaceRoot}/src/bdd.os", "gen", "${file}", @@ -188,7 +181,6 @@ "taskName": "Test current test-file", "args": [ "oscript", - "-encoding=utf-8", "${workspaceRoot}/../oscript-library/src/1testrunner/testrunner.os", "-run", "${file}" From 48a847f35ffd99e7075e3148216e4c8e9d2404eb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 16 Dec 2016 22:24:28 +0300 Subject: [PATCH 12/42] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=85=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/FileLineReader.os | 18 ++++- src/bdd-exec.os | 166 +++++++++++++++++++++++++--------------- src/bdd-generate.os | 118 +++++++++++++++++----------- src/bdd.os | 36 +++++---- src/gherkin-read.os | 2 +- src/junit-report-gen.os | 35 +++++---- 6 files changed, 238 insertions(+), 137 deletions(-) diff --git a/src/FileLineReader.os b/src/FileLineReader.os index e6905d9..afc6c74 100644 --- a/src/FileLineReader.os +++ b/src/FileLineReader.os @@ -18,6 +18,8 @@ //////////////////////////////////////////////////////////////////// //{ Программный интерфейс +// Пост-конструктор класса из файла +// Процедура Инициализировать(Знач ПутьФайла, Знач Кодировка = "UTF-8") Экспорт КоллекцияСтрок = Новый Массив; ПозицияВКоллекции = -1; @@ -26,6 +28,11 @@ ПрочитатьТекстВКоллекцию(); КонецПроцедуры +// Пост-конструктор класса из строки +// +// Параметры: +// Строка - тип Строка +// Процедура ИнициализироватьИзСтроки(Знач Строка) Экспорт КоллекцияСтрок = Новый Массив; ПозицияВКоллекции = -1; @@ -34,12 +41,19 @@ ПрочитатьСтрокуВКоллекцию(Строка); КонецПроцедуры +// Закрывает объект +// Процедура Закрыть() Экспорт Если ЧтениеТекста <> Неопределено Тогда ЧтениеТекста.Закрыть(); КонецЕсли; КонецПроцедуры +// Прочесть очередную строку +// +// Возвращаемое значение: +// Строка или Неопределено - очередная строка или признак завершения чтения +// Функция ПрочитатьСтроку() Экспорт ПозицияВКоллекции = ПозицияВКоллекции + 1; Если ПозицияВКоллекции >= КоллекцияСтрок.Количество() Тогда @@ -50,6 +64,8 @@ Возврат ОчереднаяСтрока; КонецФункции // ОчереднаяСтрока() +// Вернуться на одну строку обратно для возможности повторного ее прочтения +// Процедура ВернутьсяНаСтрокуНазад() Экспорт ПозицияВКоллекции = ПозицияВКоллекции - 1; КонецПроцедуры @@ -68,7 +84,7 @@ КонецПроцедуры Процедура ПрочитатьСтрокуВКоллекцию(Знач Строка) - Для Счетчик=1 По СтрЧислоСтрок(Строка) Цикл + Для Счетчик = 1 По СтрЧислоСтрок(Строка) Цикл ОчереднаяСтрока = СтрПолучитьСтроку(Строка, Счетчик); КоллекцияСтрок.Добавить(ОчереднаяСтрока); КонецЦикла; diff --git a/src/bdd-exec.os b/src/bdd-exec.os index e94e6ab..1c3a08f 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -31,12 +31,12 @@ Перем Контекст; -Перем мФайлФичи; -Перем мНаборБиблиотечныхШагов; -Перем мИспользоватьБыстрыйОстановНаОшибке; -Перем мИмяЭлементаСценария; +Перем ФайлФичи; +Перем НаборБиблиотечныхШагов; +Перем ИспользоватьБыстрыйОстановНаОшибке; +Перем ИмяЭлементаСценария; -Перем мКешИсполнителейШагов; +Перем КешИсполнителейШагов; //////////////////////////////////////////////////////////////////// //{ Программный интерфейс @@ -48,6 +48,14 @@ Контекст.Вставить(Ключ, Значение); КонецПроцедуры +// Возвращает ранее сохраненное значение из контекста по ключу +// +// Параметры: +// Ключ - Любой - Ключ для выбора значения +// +// Возвращаемое значение: +// Любой - значение +// Функция ПолучитьИзКонтекста(Знач Ключ) Экспорт Возврат Контекст[Ключ]; КонецФункции // ПолучитьИзКонтекста(Знач Ключ) Экспорт @@ -57,7 +65,7 @@ Процедура ВыполнитьШаг(Знач НаименованиеШагаСценария) Экспорт ТекстФичи = СтрШаблон("# language: ru%1%2", Символы.ПС, НаименованиеШагаСценария); РезультатыРазбора = ЧитательГеркин.ПрочитатьТекстФичи(ТекстФичи); - РезультатыВыполнения = ВыполнитьДеревоФич(РезультатыРазбора, мНаборБиблиотечныхШагов, Неопределено); + РезультатыВыполнения = ВыполнитьДеревоФич(РезультатыРазбора, НаборБиблиотечныхШагов, Неопределено); СтатусВыполнения = ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); Если СтатусВыполнения <> ВозможныеСтатусыВыполнения().Пройден Тогда @@ -67,35 +75,37 @@ // } Функция ВыполнитьФичу(Знач ПарамФайлФичи, Знач ФайлБиблиотек = Неопределено, Знач ИскатьВПодкаталогах = Истина, - Знач ПарамИспользоватьБыстрыйОстановНаОшибке = Ложь, Знач ПарамИмяЭлементаСценария = "") Экспорт + Знач арамИспользоватьБыстрыйОстановНаОшибке = Ложь, Знач арамИмяЭлементаСценария = "") Экспорт - мФайлФичи = ПарамФайлФичи; - мИспользоватьБыстрыйОстановНаОшибке = ПарамИспользоватьБыстрыйОстановНаОшибке; - мИмяЭлементаСценария = ПарамИмяЭлементаСценария; + ФайлФичи = ПарамФайлФичи; + ИспользоватьБыстрыйОстановНаОшибке = арамИспользоватьБыстрыйОстановНаОшибке; + ИмяЭлементаСценария = арамИмяЭлементаСценария; - мНаборБиблиотечныхШагов = ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек); - Лог.Отладка(СтрШаблон("Найдено библиотечных шагов: %1 шт.", ?(ЗначениеЗаполнено(мНаборБиблиотечныхШагов), мНаборБиблиотечныхШагов.Количество(), "0"))); + НаборБиблиотечныхШагов = ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек); + Лог.Отладка("Найдено библиотечных шагов: %1 шт.", + ?(ЗначениеЗаполнено(НаборБиблиотечныхШагов), НаборБиблиотечныхШагов.Количество(), "0")); - Если мФайлФичи.ЭтоКаталог() Тогда - Лог.Отладка("Подготовка к выполнению сценариев в каталоге "+мФайлФичи.ПолноеИмя); - МассивФайлов = НайтиФайлы(мФайлФичи.ПолноеИмя, "*.feature", ИскатьВПодкаталогах); + Если ФайлФичи.ЭтоКаталог() Тогда + Лог.Отладка("Подготовка к выполнению сценариев в каталоге %1", ФайлФичи.ПолноеИмя); + МассивФайлов = НайтиФайлы(ФайлФичи.ПолноеИмя, "*.feature", ИскатьВПодкаталогах); НаборРезультатовВыполнения = Новый Массив; Для каждого НовыйФайлФичи Из МассивФайлов Цикл Если НовыйФайлФичи.ЭтоКаталог() Тогда - ВызватьИсключение "Нашли каталог вместо файла-фичи "+НовыйФайлФичи.ПолноеИмя; + ВызватьИсключение "Нашли каталог вместо файла-фичи " + НовыйФайлФичи.ПолноеИмя; КонецЕсли; РезультатВыполнения = ВыполнитьФичуСУчетомБиблиотечныхШагов(НовыйФайлФичи); НаборРезультатовВыполнения.Добавить(РезультатВыполнения); - Если мИспользоватьБыстрыйОстановНаОшибке И ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения) <> ВозможныеСтатусыВыполнения().Пройден Тогда - Прервать; + Если ИспользоватьБыстрыйОстановНаОшибке + И ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения) <> ВозможныеСтатусыВыполнения().Пройден Тогда + Прервать; КонецЕсли; КонецЦикла; РезультатыВыполнения = СобратьЕдиноеДеревоИзНабораРезультатовВыполнения(НаборРезультатовВыполнения); Иначе - РезультатыВыполнения = ВыполнитьФичуСУчетомБиблиотечныхШагов(мФайлФичи); + РезультатыВыполнения = ВыполнитьФичуСУчетомБиблиотечныхШагов(ФайлФичи); КонецЕсли; @@ -126,6 +136,13 @@ Возврат СтруктураИтогов; КонецФункции +// Вывести итоговые результаты выполнения в консоль +// сколько фич, сценариев, шагов выполнено, пройдено, упало, не реализовано +// +// Параметры: +// РезультатыВыполнения - ДеревоЗначений - дерево результатов +// ПоказыватьИтогиФич - Булево - Истина = показывать итоги по фичам; Ложь - не показывать +// Процедура ВывестиИтоговыеРезультатыВыполнения(Знач РезультатыВыполнения, Знач ПоказыватьИтогиФич = Истина) Экспорт ТекущийУровень = 0; @@ -162,6 +179,12 @@ Возврат ВозможныеСтатусыВыполнения; КонецФункции +// Возвращает соответствие статусов выполнения (ключ) и кодов возврата процесса (значение) +// Используется кеширование на время работы. +// +// Возвращаемое значение: +// Соответствие - соответствие статусов выполнения (ключ) и кодов возврата процесса (значение) +// Функция ВозможныеКодыВозвратовПроцесса() Экспорт Если ВозможныеКодыВозвратовПроцесса = Неопределено Тогда Рез = Новый Соответствие; @@ -184,16 +207,17 @@ //{ Реализация Функция ВыполнитьФичуСУчетомБиблиотечныхШагов(Знач ФайлФичи) - Лог.Отладка("Подготовка к выполнению сценария "+ФайлФичи.ПолноеИмя); + Лог.Отладка("Подготовка к выполнению сценария %1", ФайлФичи.ПолноеИмя); Лог.Отладка("Читаю фичу"); - Лог.Отладка(СтрШаблон("Найдено библиотечных шагов: %1 шт.", ?(ЗначениеЗаполнено(мНаборБиблиотечныхШагов), мНаборБиблиотечныхШагов.Количество(), "0"))); + Лог.Отладка("Найдено библиотечных шагов: %1 шт.", + ?(ЗначениеЗаполнено(НаборБиблиотечныхШагов), НаборБиблиотечныхШагов.Количество(), "0")); РезультатыРазбора = ЧитательГеркин.ПрочитатьФайлСценария(ФайлФичи); ОписаниеИсполнителяШагов = Неопределено; - НовыйНаборБиблиотечныхШагов = ДополнитьНаборШаговИзИсполнителяШаговФичи(ФайлФичи, мНаборБиблиотечныхШагов, ОписаниеИсполнителяШагов); + НовыйНаборБиблиотечныхШагов = ДополнитьНаборШаговИзИсполнителяШаговФичи(ФайлФичи, НаборБиблиотечныхШагов, ОписаниеИсполнителяШагов); РезультатыВыполнения = ВыполнитьДеревоФич(РезультатыРазбора, НовыйНаборБиблиотечныхШагов, ОписаниеИсполнителяШагов); @@ -206,11 +230,11 @@ // "Файл" - объект-файл с информацией о файле-исполнителе шага Функция ПолучитьНаборБиблиотечныхШагов(Знач ФайлБиблиотек) Экспорт //TODO перенести в секцию публичных методов или вообще в другой класс Если Не ЗначениеЗаполнено(ФайлБиблиотек) Тогда - Возврат Неопределено + Возврат Неопределено; КонецЕсли; КоллекцияШагов = Новый Структура; - Лог.Отладка("Получение всех шагов из библиотеки "+ФайлБиблиотек.ПолноеИмя); + Лог.Отладка("Получение всех шагов из библиотеки %1", ФайлБиблиотек.ПолноеИмя); МассивОписанийИсполнителяШагов = ПолучитЬМассивОписанийИсполнителяШагов(ФайлБиблиотек); Для каждого ОписаниеИсполнителяШагов Из МассивОписанийИсполнителяШагов Цикл Исполнитель = ОписаниеИсполнителяШагов.Исполнитель; @@ -233,7 +257,7 @@ ОписаниеИсполнителяШагов = НайтиИсполнителяШагов(ФайлБиблиотек); Если ЗначениеЗаполнено(ОписаниеИсполнителяШагов) Тогда МассивОписанийИсполнителяШагов.Добавить(ОписаниеИсполнителяШагов); - Лог.Отладка("Нашли исполнителя шагов "+ФайлБиблиотек.ПолноеИмя); + Лог.Отладка("Нашли исполнителя шагов %1", ФайлБиблиотек.ПолноеИмя); КонецЕсли; Иначе МассивФайлов = НайтиФайлы(ФайлБиблиотек.ПолноеИмя, "*.os", Истина); @@ -241,14 +265,14 @@ Для каждого ФайлИсполнителя Из МассивФайлов Цикл Лог.Отладка("Нашли файл, скрипт-кандидат %1", ФайлБиблиотек.ПолноеИмя); Если ФайлИсполнителя.ЭтоКаталог() Тогда - ВызватьИсключение "Нашли каталог вместо файла-шага "+ФайлИсполнителя.ПолноеИмя; + ВызватьИсключение "Нашли каталог вместо файла-шага " + ФайлИсполнителя.ПолноеИмя; КонецЕсли; ПоказыватьОшибкиИсполнителей = ФайлНаходитсяВСпециальномКаталогеРеализацииШагов(ФайлИсполнителя); ОписаниеИсполнителяШагов = ПолучитьИсполнителяШагов(ФайлИсполнителя, ПоказыватьОшибкиИсполнителей); Если ЗначениеЗаполнено(ОписаниеИсполнителяШагов) Тогда МассивОписанийИсполнителяШагов.Добавить(ОписаниеИсполнителяШагов); - Лог.Отладка("Нашли исполнителя шагов "+ФайлИсполнителя.ПолноеИмя); + Лог.Отладка("Нашли исполнителя шагов %1", ФайлИсполнителя.ПолноеИмя); КонецЕсли; КонецЦикла; КонецЕсли; @@ -259,12 +283,14 @@ Функция ВыполнитьДеревоФич(РезультатыРазбора, Знач НаборБиблиотечныхШагов, Знач ОписаниеИсполнителяШагов) ДеревоФич = РезультатыРазбора.ДеревоФич; - Ожидаем.Что(ДеревоФич, "Ожидали, что дерево фич будет передано как дерево значений, а это не так").ИмеетТип("ДеревоЗначений"); + Ожидаем.Что(ДеревоФич, "Ожидали, что дерево фич будет передано как дерево значений, а это не так") + .ИмеетТип("ДеревоЗначений"); РезультатыВыполнения = ДеревоФич.Скопировать(); РекурсивноУстановитьСтатусДляВсехУзлов(РезультатыВыполнения.Строки[0], ВозможныеСтатусыВыполнения.НеВыполнялся); - РезультатыВыполнения.Строки[0].СтатусВыполнения = РекурсивноВыполнитьШаги(ОписаниеИсполнителяШагов, НаборБиблиотечныхШагов, РезультатыВыполнения.Строки[0]); + РезультатыВыполнения.Строки[0].СтатусВыполнения = РекурсивноВыполнитьШаги(ОписаниеИсполнителяШагов, + НаборБиблиотечныхШагов, РезультатыВыполнения.Строки[0]); Возврат РезультатыВыполнения; КонецФункции @@ -275,11 +301,12 @@ НаборШаговИсполнителя = ПолучитьНаборБиблиотечныхШагов(ФайлСценария); Если ЗначениеЗаполнено(НаборШаговИсполнителя) Тогда - Лог.Отладка(СтрШаблон("найдено шагов исполнителя %1", НаборШаговИсполнителя.Количество())); + Лог.Отладка("найдено шагов исполнителя %1", НаборШаговИсполнителя.Количество()); КонецЕсли; Если ЗначениеЗаполнено(НаборБиблиотечныхШагов) Тогда Для каждого КлючЗначение Из НаборШаговИсполнителя Цикл - ДобавитьАдресШагаВКоллекциюШагов(НаборБиблиотечныхШагов, КлючЗначение.Ключ, КлючЗначение.Ключ, КлючЗначение.Значение, Истина); + ДобавитьАдресШагаВКоллекциюШагов(НаборБиблиотечныхШагов, КлючЗначение.Ключ, КлючЗначение.Ключ, + КлючЗначение.Значение, Истина); КонецЦикла; Иначе НаборБиблиотечныхШагов = НаборШаговИсполнителя; @@ -291,19 +318,23 @@ Возврат НаборБиблиотечныхШагов; КонецФункции -Процедура ДобавитьАдресШагаВКоллекциюШагов(КоллекцияШагов, Знач АдресШага, Знач ИмяШага, Знач ОписаниеИсполнителяШагов, Знач ВставлятьДублиШагов) +Процедура ДобавитьАдресШагаВКоллекциюШагов(КоллекцияШагов, Знач АдресШага, Знач ИмяШага, + Знач ОписаниеИсполнителяШагов, Знач ВставлятьДублиШагов) + ОписаниеИсполнителяШаговДляСравнения = Неопределено; КоллекцияШагов.Свойство(АдресШага, ОписаниеИсполнителяШаговДляСравнения); ВставлятьШаг = Истина; - Если ОписаниеИсполнителяШаговДляСравнения <> Неопределено И ОписаниеИсполнителяШаговДляСравнения.Файл.ПолноеИмя <> ОписаниеИсполнителяШагов.Файл.ПолноеИмя Тогда - Лог.Предупреждение(СтрШаблон("Обнаружено дублирование шага <%1> в 2-х разных файлах шагов <%2> и <%3>", ИмяШага, + Если ОписаниеИсполнителяШаговДляСравнения <> Неопределено + И ОписаниеИсполнителяШаговДляСравнения.Файл.ПолноеИмя <> ОписаниеИсполнителяШагов.Файл.ПолноеИмя Тогда + + Лог.Предупреждение(СтрШаблон("Обнаружено дублирование шага <%1> в 2-х разных файлах шагов <%2> и <%3>", ИмяШага, ОписаниеИсполнителяШаговДляСравнения.Файл.ПолноеИмя, ОписаниеИсполнителяШагов.Файл.ПолноеИмя)); ВставлятьШаг = ВставлятьДублиШагов; КонецЕсли; Если ВставлятьШаг Тогда КоллекцияШагов.Вставить(АдресШага, ОписаниеИсполнителяШагов); - Лог.Отладка(СтрШаблон("Найдено имя шага <%1>, источник %2", ИмяШага, ОписаниеИсполнителяШагов.Файл.Имя)); + Лог.Отладка("Найдено имя шага <%1>, источник %2", ИмяШага, ОписаниеИсполнителяШагов.Файл.Имя); КонецЕсли; КонецПроцедуры @@ -323,13 +354,15 @@ Если Рефлектор.МетодСуществует(ИсполнительШагов, АдресШага) Тогда РезМассивОписанийШагов.Добавить(АдресШага); Иначе - Лог.Предупреждение("Пропускаю использование метода шага %1, т.к. в модуле шага нет реализации этого метода, хотя в методе ""%2"" шаг %1 указан.", + Лог.Предупреждение("Пропускаю использование метода шага %1, + |т.к. в модуле шага нет реализации этого метода, хотя в методе ""%2"" шаг %1 указан.", АдресШага, ИмяМетода); КонецЕсли; КонецЦикла; Возврат РезМассивОписанийШагов; Исключение + //пропускаю ошибки КонецПопытки; КонецЕсли; Возврат Новый Массив; @@ -342,7 +375,7 @@ // "Файл" - объект-файл с информацией о файле-исполнителе шага Функция НайтиИсполнителяШагов(Знач ФайлФичи) ПутьФичи = ФайлФичи.Путь; - Лог.Отладка("Ищу исполнителя шагов в каталоге "+ПутьФичи); + Лог.Отладка("Ищу исполнителя шагов в каталоге %1", ПутьФичи); ПутьКИсполнителю = ОбъединитьПути(ПутьФичи, "step_definitions"); ПутьКИсполнителю = ОбъединитьПути(ПутьКИсполнителю, ФайлФичи.ИмяБезРасширения+ ".os"); @@ -357,23 +390,24 @@ // "Файл" - объект-файл с информацией о файле-исполнителе шага Функция ПолучитьИсполнителяШагов(Знач ФайлИсполнителя, Знач ПоказыватьОшибкиИсполнителей = Ложь) ПутьИсполнителя = ФайлИсполнителя.ПолноеИмя; - Лог.Отладка("Ищу исполнителя шагов в файле "+ПутьИсполнителя); + Лог.Отладка("Ищу исполнителя шагов в файле %1", ПутьИсполнителя); - Если мКешИсполнителейШагов = Неопределено Тогда - мКешИсполнителейШагов = Новый Соответствие(); + Если КешИсполнителейШагов = Неопределено Тогда + КешИсполнителейШагов = Новый Соответствие(); КонецЕсли; - ОписаниеИсполнителя = мКешИсполнителейШагов.Получить(ПутьИсполнителя); + ОписаниеИсполнителя = КешИсполнителейШагов.Получить(ПутьИсполнителя); Если ОписаниеИсполнителя = Неопределено Тогда Если ФайлИсполнителя.Существует() Тогда Попытка ИсполнительШагов = ЗагрузитьСценарий(ПутьИсполнителя); ОписаниеИсполнителя = Новый Структура("Исполнитель,Файл", ИсполнительШагов, ФайлИсполнителя); - мКешИсполнителейШагов.Вставить(ПутьИсполнителя, ОписаниеИсполнителя); + КешИсполнителейШагов.Вставить(ПутьИсполнителя, ОписаниеИсполнителя); Исключение Инфо = ИнформацияОбОшибке(); Если ПоказыватьОшибкиИсполнителей Тогда - Лог.Предупреждение("Ошибка при загрузке файла %1 %2%3", ПутьИсполнителя, Символы.ПС, ПодробноеПредставлениеОшибки(Инфо)); + Лог.Предупреждение("Ошибка при загрузке файла %1 %2%3", + ПутьИсполнителя, Символы.ПС, ПодробноеПредставлениеОшибки(Инфо)); КонецЕсли; ОписаниеИсполнителя = Неопределено; @@ -394,10 +428,10 @@ Функция РекурсивноВыполнитьШаги(Знач ОписаниеИсполнителяШагов, Знач НаборБиблиотечныхШагов, Знач Узел) ТекущийУровень = Узел.Уровень(); - ПредставлениеЛексемы = ?(Узел.ТипШага <> ВозможныеТипыШагов.Описание, Узел.Лексема +" ", ""); + ПредставлениеЛексемы = ?(Узел.ТипШага <> ВозможныеТипыШагов.Описание, Узел.Лексема + " ", ""); СтатусВыполнения = ВозможныеСтатусыВыполнения.НеВыполнялся; - Если Узел.ТипШага = ВозможныеТипыШагов.Сценарий И Не ИмяСценарияПодходитПодФильтр(Узел.Тело, мИмяЭлементаСценария) Тогда + Если Узел.ТипШага = ВозможныеТипыШагов.Сценарий И Не ИмяСценарияПодходитПодФильтр(Узел.Тело, ИмяЭлементаСценария) Тогда Возврат СтатусВыполнения; КонецЕсли; @@ -405,9 +439,10 @@ Лог.Информация(ПредставлениеЛексемы + Узел.Тело); КонецЕсли; - Лог.Отладка(СтрШаблон("Выполняю узел <%1>, адрес <%2>, тело <%3>", Узел.ТипШага, Узел.АдресШага, Узел.Тело)); + Лог.Отладка("Выполняю узел <%1>, адрес <%2>, тело <%3>", Узел.ТипШага, Узел.АдресШага, Узел.Тело); - ХукВыполненУспешно = ВыполнитьХукУзла(ЧитательГеркин.ВозможныеХуки().ПередЗапускомСценария, ОписаниеИсполнителяШагов, Узел); + ХукВыполненУспешно = ВыполнитьХукУзла(ЧитательГеркин.ВозможныеХуки().ПередЗапускомСценария, + ОписаниеИсполнителяШагов, Узел); Если Не ХукВыполненУспешно Тогда СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался; Иначе @@ -418,10 +453,9 @@ Для Каждого СтрокаДерева Из Узел.Строки Цикл НовыйСтатус = РекурсивноВыполнитьШаги(ОписаниеИсполнителяШагов, НаборБиблиотечныхШагов, СтрокаДерева); СтатусВыполнения = ЗапомнитьСамоеХудшееСостояние(СтатусВыполнения, НовыйСтатус); - Если СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден Тогда - Если мИспользоватьБыстрыйОстановНаОшибке или СтрокаДерева.ТипШага = ВозможныеТипыШагов.Шаг Тогда + ВыходитьПриНеудачномВыполнении = ИспользоватьБыстрыйОстановНаОшибке Или СтрокаДерева.ТипШага = ВозможныеТипыШагов.Шаг; + Если СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден И ВыходитьПриНеудачномВыполнении Тогда Прервать; - КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; @@ -460,15 +494,16 @@ Если Узел.ТипШага = ОписаниеХука.ТипШага Тогда АдресХука = ОписаниеХука.АдресШага; Рефлектор = Новый Рефлектор; - Если ОписаниеИсполнителяШагов <> Неопределено И Рефлектор.МетодСуществует(ОписаниеИсполнителяШагов.Исполнитель, АдресХука) Тогда + Если ОписаниеИсполнителяШагов <> Неопределено + И Рефлектор.МетодСуществует(ОписаниеИсполнителяШагов.Исполнитель, АдресХука) Тогда СтрокаПараметров = "Узел"; МассивПараметров = Новый Массив; МассивПараметров.Добавить(Узел); ИмяФайлаШагов = ОписаниеИсполнителяШагов.Файл.Имя; - Лог.Отладка(СтрШаблон(" Выполняю шаг <%1>, параметры <%2>, источник %3", - АдресХука, СтрокаПараметров, ИмяФайлаШагов)); + Лог.Отладка(" Выполняю шаг <%1>, параметры <%2>, источник %3", + АдресХука, СтрокаПараметров, ИмяФайлаШагов); Попытка Рефлектор.ВызватьМетод(ОписаниеИсполнителяШагов.Исполнитель, АдресХука, МассивПараметров); @@ -497,7 +532,8 @@ СтатусВыполнения = ВозможныеСтатусыВыполнения.НеВыполнялся; Если Узел.ТипШага = ВозможныеТипыШагов.Шаг Тогда - СтатусВыполнения = ВыполнитьШагСценария(Узел.АдресШага, Узел.Параметры, НаборБиблиотечныхШагов, Узел.Тело, Узел.ОписаниеОшибкиВыполнения); + СтатусВыполнения = ВыполнитьШагСценария(Узел.АдресШага, Узел.Параметры, + НаборБиблиотечныхШагов, Узел.Тело, Узел.ОписаниеОшибкиВыполнения); Если СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден Тогда Отступ = ПолучитьОтступ(ТекущийУровень); @@ -511,12 +547,16 @@ Возврат СтатусВыполнения; КонецФункции -Функция ВыполнитьШагСценария(Знач АдресШага, Знач ПараметрыШага, Знач НаборБиблиотечныхШагов, Знач ПредставлениеШага, ОписаниеОшибкиВыполнения) +Функция ВыполнитьШагСценария(Знач АдресШага, Знач ПараметрыШага, Знач НаборБиблиотечныхШагов, + Знач ПредставлениеШага, ОписаниеОшибкиВыполнения) + СтатусВыполнения = ВозможныеСтатусыВыполнения.НеВыполнялся; ОписаниеОшибкиВыполнения = ""; ОписаниеИсполнителяШагов = Неопределено; - ШагРеализован = НаборБиблиотечныхШагов.Свойство(ЧитательГеркин.НормализоватьАдресШага(АдресШага), ОписаниеИсполнителяШагов); + ШагРеализован = НаборБиблиотечныхШагов.Свойство(ЧитательГеркин.НормализоватьАдресШага(АдресШага), + ОписаниеИсполнителяШагов); + Если Не ШагРеализован ИЛИ ОписаниеИсполнителяШагов = Неопределено Тогда СтатусВыполнения = ВозможныеСтатусыВыполнения.НеРеализован; Иначе @@ -530,9 +570,9 @@ МассивПараметров = Новый Массив; ПолучитьМассивПараметров(МассивПараметров, ПараметрыШага, СтрокаПараметров); - СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров)-1); - Лог.Отладка(СтрШаблон(" Выполняю шаг <%1>, параметры <%2>, источник %3", - АдресШага, СтрокаПараметров, ОписаниеИсполнителяШагов.Файл.Имя)); + СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 1); + Лог.Отладка(" Выполняю шаг <%1>, параметры <%2>, источник %3", + АдресШага, СтрокаПараметров, ОписаниеИсполнителяШагов.Файл.Имя); Попытка Рефлектор.ВызватьМетод(ОписаниеИсполнителяШагов.Исполнитель, АдресШага, МассивПараметров); @@ -549,7 +589,8 @@ ИначеЕсли Инфо.Описание = "Слишком много фактических параметров" Тогда //в случае неверного разбора можем получить неверный адрес или неверные параметры СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался; ПредставлениеШага = ПредставлениеШага + Символы.ПС + текстОшибки + Символы.ПС + - СтрШаблон("Дополнительно: Для шага <%1> передано или неверное количество параметров %2 или неверные параметры <%3>", АдресШага, МассивПараметров.Количество(), СтрокаПараметров); + СтрШаблон("Дополнительно: Для шага <%1> передано или неверное количество параметров %2 + |или неверные параметры <%3>", АдресШага, МассивПараметров.Количество(), СтрокаПараметров); Иначе СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался; ПредставлениеШага = ПредставлениеШага + Символы.ПС + текстОшибки; @@ -591,7 +632,8 @@ Функция ПолучитьИтоговыйСтатусВыполнения(Знач РезультатыВыполнения) Экспорт //TODO перенести в секцию публичных методов или вообще в другой класс ИтоговыйСтатусВыполнения = ВозможныеСтатусыВыполнения.НеВыполнялся; Для каждого РезультатВыполненияФичи Из РезультатыВыполнения.Строки Цикл - ИтоговыйСтатусВыполнения = ЗапомнитьСамоеХудшееСостояние(РезультатВыполненияФичи.СтатусВыполнения, ИтоговыйСтатусВыполнения); + ИтоговыйСтатусВыполнения = ЗапомнитьСамоеХудшееСостояние(РезультатВыполненияФичи.СтатусВыполнения, + ИтоговыйСтатусВыполнения); КонецЦикла; Возврат ИтоговыйСтатусВыполнения; @@ -656,7 +698,7 @@ НаименованиеУровня = ""; Если Уровень = УровниЛога.Информация Тогда - НаименованиеУровня = ?(Лог.Уровень() <> Уровень, УровниЛога.НаименованиеУровня(Уровень) +Символы.Таб+ "- ", ""); + НаименованиеУровня = ?(Лог.Уровень() <> Уровень, УровниЛога.НаименованиеУровня(Уровень) + Символы.Таб + "- ", ""); Сообщение = СтроковыеФункции.ДополнитьСлеваМногострочнуюСтроку(Сообщение, Отступ); Возврат СтрШаблон("%1%2", НаименованиеУровня, Сообщение); КонецЕсли; diff --git a/src/bdd-generate.os b/src/bdd-generate.os index 127489b..4421024 100644 --- a/src/bdd-generate.os +++ b/src/bdd-generate.os @@ -29,17 +29,18 @@ // возвращает массив созданных файлов шагов Функция СгенерироватьФайлыШагов(Знач ФайлФичи, Знач ФайлБиблиотек = Неопределено, Знач ИскатьВПодкаталогах = Истина) Экспорт НаборБиблиотечныхШагов = ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек); - Лог.Отладка(СтрШаблон("Найдено библиотечных шагов: %1 шт.", ?(ЗначениеЗаполнено(НаборБиблиотечныхШагов), НаборБиблиотечныхШагов.Количество(), "0"))); + Лог.Отладка("Найдено библиотечных шагов: %1 шт.", + ?(ЗначениеЗаполнено(НаборБиблиотечныхШагов), НаборБиблиотечныхШагов.Количество(), "0")); РезМассивФайлов = Новый Массив; Если ФайлФичи.ЭтоКаталог() Тогда - Лог.Информация("Подготовка к генерации шагов в каталоге "+ФайлФичи.ПолноеИмя); + Лог.Информация("Подготовка к генерации шагов в каталоге " + ФайлФичи.ПолноеИмя); МассивФайлов = НайтиФайлы(ФайлФичи.ПолноеИмя, "*.feature", ИскатьВПодкаталогах); НаборРезультатовВыполнения = Новый Массив; Для каждого ФайлФичи Из МассивФайлов Цикл Если ФайлФичи.ЭтоКаталог() Тогда - ВызватьИсключение "Нашли каталог вместо файла-фичи "+ФайлФичи.ПолноеИмя; + ВызватьИсключение "Нашли каталог вместо файла-фичи " + ФайлФичи.ПолноеИмя; КонецЕсли; РезМассивФайлов.Добавить(СоздатьФайлРеализацииШагов(ФайлФичи, НаборБиблиотечныхШагов)); КонецЦикла; @@ -50,6 +51,10 @@ Возврат РезМассивФайлов; КонецФункции +// Возвращает имя лога 1bdd +// +// Возвращаемое значение: +// Строка - имя лога Функция ИмяЛога() Экспорт Возврат "bdd"; КонецФункции @@ -60,12 +65,13 @@ //{ Реализация Функция СоздатьФайлРеализацииШагов(Знач ФайлФичи, Знач НаборБиблиотечныхШагов) - Лог.Отладка("Подготовка к генерации шагов спецификации "+ФайлФичи.ПолноеИмя); + Лог.Отладка("Подготовка к генерации шагов спецификации %1", ФайлФичи.ПолноеИмя); Ожидаем.Что(ФайлФичи, "Ожидали, что файл фичи будет передан как файл, а это не так").ИмеетТип("Файл"); РезультатыРазбора = ЧитательГеркин.ПрочитатьФайлСценария(ФайлФичи); ДеревоФич = РезультатыРазбора.ДеревоФич; - Ожидаем.Что(ДеревоФич, "Ожидали, что дерево фич будет передано как дерево значений, а это не так").ИмеетТип("ДеревоЗначений"); + Ожидаем.Что(ДеревоФич, "Ожидали, что дерево фич будет передано как дерево значений, а это не так") + .ИмеетТип("ДеревоЗначений"); ФайлШагов = ПолучитьФайлШагов(ФайлФичи); @@ -100,10 +106,10 @@ Процедура ПодготовитьКаталогФайловШагов(Знач ФайлФичи, Знач ФайлШагов) КаталогШагов = Новый Файл(ФайлШагов.Путь); Если Не КаталогШагов.Существует() Тогда - Лог.Отладка("Каталог шагов не существует. Создаю новый. "+КаталогШагов.ПолноеИмя); + Лог.Отладка("Каталог шагов не существует. Создаю новый. %1", КаталогШагов.ПолноеИмя); СоздатьКаталог(КаталогШагов.ПолноеИмя); Иначе - Лог.Отладка("Каталог шагов уже существует."+КаталогШагов.ПолноеИмя); + Лог.Отладка("Каталог шагов уже существует. %1", КаталогШагов.ПолноеИмя); КонецЕсли; КонецПроцедуры @@ -112,9 +118,9 @@ ЭтоПервичнаяГенерация = Не ФайлШагов.Существует(); Если ЭтоПервичнаяГенерация Тогда - Лог.Информация("Начинаю генерацию шагов для спецификации "+ФайлФичи.ПолноеИмя); + Лог.Информация("Начинаю генерацию шагов для спецификации " + ФайлФичи.ПолноеИмя); Иначе - Лог.Информация("Выполняю перегенерацию шагов для спецификации "+ФайлФичи.ПолноеИмя); + Лог.Информация("Выполняю перегенерацию шагов для спецификации " + ФайлФичи.ПолноеИмя); КонецЕсли; Буфер = Новый Массив; @@ -138,10 +144,11 @@ КонецЕсли; ЗаписатьОписанияШаговВФайлШагов(ОписаниеЗаписываемогоФайла, НаборШаговФичи); - ЗаписатьОписанияХуковВФайлШагов(ЧитательГеркин.ВозможныеХуки().ПередЗапускомСценария, "Процедура выполняется перед запуском каждого сценария", - ОписаниеЗаписываемогоФайла); - ЗаписатьОписанияХуковВФайлШагов(ЧитательГеркин.ВозможныеХуки().ПослеЗапускаСценария, "Процедура выполняется после завершения каждого сценария", - ОписаниеЗаписываемогоФайла); + ЗаписатьОписанияХуковВФайлШагов(ЧитательГеркин.ВозможныеХуки().ПередЗапускомСценария, + "Процедура выполняется перед запуском каждого сценария", ОписаниеЗаписываемогоФайла); + + ЗаписатьОписанияХуковВФайлШагов(ЧитательГеркин.ВозможныеХуки().ПослеЗапускаСценария, + "Процедура выполняется после завершения каждого сценария", ОписаниеЗаписываемогоФайла); Если Не ЭтоПервичнаяГенерация Тогда ЗаписатьМетодыВФайл(ТаблицаМодуляШагов, НаборМетодовМодуляШагов, Буфер); @@ -151,7 +158,7 @@ НормализованныйАдресШага = ОписаниеИсполнителяШагов.Ключ; ПервыйУзелСТакимАдресом = ОписаниеИсполнителяШагов.Значение; АдресШага = ПервыйУзелСТакимАдресом.АдресШага; - Лог.Отладка(СтрШаблон("Перед записью шага, адрес %1, тело %2", АдресШага, ПервыйУзелСТакимАдресом.Тело)); + Лог.Отладка("Перед записью шага, адрес %1, тело %2", АдресШага, ПервыйУзелСТакимАдресом.Тело); ЗаписатьШаг(АдресШага, ПервыйУзелСТакимАдресом, ОписаниеЗаписываемогоФайла); КонецЦикла; @@ -172,14 +179,14 @@ Функция ПрочитатьФайлВТаблицуМодуляШагов(ФайлШагов) Если Не ФайлШагов.Существует() Тогда - ВызватьИсключение "Файл исполнителя шагов не найден."+ФайлШагов.ПолноеИмя; + ВызватьИсключение "Файл исполнителя шагов не найден." + ФайлШагов.ПолноеИмя; КонецЕсли; Рез = Новый ТаблицаЗначений; Рез.Колонки.Добавить("Строка"); ЧтениеТекста = Новый ЧтениеТекста; - ЧтениеТекста.Открыть(ФайлШагов.ПолноеИмя,"UTF-8"); + ЧтениеТекста.Открыть(ФайлШагов.ПолноеИмя, "UTF-8"); Строка = ЧтениеТекста.ПрочитатьСтроку(); Пока Строка <> Неопределено Цикл @@ -241,7 +248,7 @@ ТаблицаМетодов.Индексы.Добавить("НормализованноеИмяМетода"); Для каждого Строка Из ТаблицаМетодов Цикл - Лог.Отладка(СтрШаблон("Получили имя экспортного метода в файле шагов <%1>", Строка.ИмяМетода)); + Лог.Отладка("Получили имя экспортного метода в файле шагов <%1>", Строка.ИмяМетода); КонецЦикла; Возврат ТаблицаМетодов; КонецФункции // ПолучитьЭкспортныеМетоды(ТаблицаМодуляШагов) @@ -260,18 +267,21 @@ НаборМетодовМодуляШагов = ОписаниеЗаписываемогоФайла.НаборМетодовМодуляШагов; ФайлШагов = ОписаниеЗаписываемогоФайла.ФайлШагов; + ИмяСпецМетода = ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов(); Если Не ЭтоПервичнаяГенерация Тогда - ОписаниеМетода = НаборМетодовМодуляШагов.Найти(ЧитательГеркин.НормализоватьАдресШага(ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов()), "НормализованноеИмяМетода"); + НормализованныйАдресШага = ЧитательГеркин.НормализоватьАдресШага(ИмяСпецМетода); + ОписаниеМетода = НаборМетодовМодуляШагов.Найти(НормализованныйАдресШага, "НормализованноеИмяМетода"); Если ОписаниеМетода = Неопределено Тогда //TODO если в коде непустого файла шагов нет метода ПолучитьСписокШагов, значит, нужно его туда добавить - ВызватьИсключение СтрШаблон("Не найден метод %2 для файла шагов <%1>", ФайлШагов.ПолноеИмя, ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов()); + ВызватьИсключение СтрШаблон("Не найден метод %2 для файла шагов <%1>", ФайлШагов.ПолноеИмя, ИмяСпецМетода); КонецЕсли; - ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, ОписаниеМетода.НомерСтрокиНачала-1); + ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, + ОписаниеМетода.НомерСтрокиНачала - 1); Иначе Буфер.Добавить("// Метод выдает список шагов, реализованных в данном файле-шагов"); КонецЕсли; - Буфер.Добавить(СтрШаблон("Функция %1(КонтекстФреймворкаBDD) Экспорт", ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов())); + Буфер.Добавить(СтрШаблон("Функция %1(КонтекстФреймворкаBDD) Экспорт", ИмяСпецМетода)); Буфер.Добавить(Символы.Таб + "БДД = КонтекстФреймворкаBDD;"); Буфер.Добавить(""); Буфер.Добавить(Символы.Таб + "ВсеШаги = Новый Массив;"); @@ -303,7 +313,8 @@ Если Не ЭтоПервичнаяГенерация Тогда ОписаниеМетода = НаборМетодовМодуляШагов.Найти(АдресХука, "НормализованноеИмяМетода"); Если ОписаниеМетода <> Неопределено Тогда - ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, ОписаниеМетода.НомерСтрокиНачала-1); + ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, + ОписаниеМетода.НомерСтрокиНачала - 1); Иначе Возврат; КонецЕсли; @@ -325,21 +336,26 @@ КонецПроцедуры Процедура ЗаписатьМетодыВФайл(ТаблицаМодуляШагов, НаборМетодовМодуляШагов, Буфер) - АдресФункцииПолученияСпискаШагов = ЧитательГеркин.НормализоватьАдресШага(ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов()); + АдресФункцииПолученияСпискаШагов = ЧитательГеркин.НормализоватьАдресШага( + ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов()); + Для каждого ОписаниеМетода Из НаборМетодовМодуляШагов Цикл Если ОписаниеМетода.НормализованноеИмяМетода = АдресФункцииПолученияСпискаШагов Тогда - Продолжить + Продолжить; КонецЕсли; - ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, ОписаниеМетода.НомерСтрокиКонец); + ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, + ОписаниеМетода.НомерСтрокиКонец); КонецЦикла; КонецПроцедуры Процедура ЗаписатьОставшеесяТелоВФайл(ТаблицаМодуляШагов, НаборМетодовМодуляШагов, Буфер) - Ожидаем.Что(НаборМетодовМодуляШагов.Количество(), "Ожидали, что НаборМетодовМодуляШагов имеет количество > 0, а это не так").Больше(0); + Ожидаем.Что(НаборМетодовМодуляШагов.Количество(), "Ожидали, что НаборМетодовМодуляШагов имеет количество > 0, а это не так") + .Больше(0); ПоследняяСтрока = НаборМетодовМодуляШагов[НаборМетодовМодуляШагов.Количество() - 1]; - ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ПоследняяСтрока.НомерСтрокиКонец + 1, ТаблицаМодуляШагов.Количество() - 1); + ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ПоследняяСтрока.НомерСтрокиКонец + 1, + ТаблицаМодуляШагов.Количество() - 1); КонецПроцедуры Процедура ЗаписатьБуферВФайл(Буфер, ФайлДляЗаписи) @@ -348,7 +364,7 @@ Для каждого Строка Из Буфер Цикл ЗаписьФайла.ЗаписатьСтроку(Строка); - Лог.Отладка("Записываю в файл шагов ----- "+Строка); + Лог.Отладка("Записываю в файл шагов ----- %1", Строка); КонецЦикла; ЗаписьФайла.Закрыть(); @@ -359,21 +375,25 @@ КонецПроцедуры Процедура ПолучитьНаборШаговФичи(Знач Узел, Знач НаборБиблиотечныхШагов, НаборШаговФичи, Знач ФайлШагов) - Лог.Отладка("ПолучитьНаборШаговФичи Обхожу узел "+Узел.ТипШага+", "+Узел.Лексема+", <"+Узел.Тело+">, АдресШага "+Узел.АдресШага); + Лог.Отладка("ПолучитьНаборШаговФичи Обхожу узел %1, %2, <%3>, АдресШага %4", + Узел.ТипШага, Узел.Лексема, Узел.Тело, Узел.АдресШага); Если Узел.ТипШага = ВозможныеТипыШагов.Шаг Тогда АдресШага = Узел.АдресШага; НормализованныйАдресШага = ЧитательГеркин.НормализоватьАдресШага(АдресШага); ОписаниеИсполнителяШагов = Неопределено; - ШагИзБиблиотеки = ЗначениеЗаполнено(НаборБиблиотечныхШагов) И НаборБиблиотечныхШагов.Свойство(НормализованныйАдресШага, ОписаниеИсполнителяШагов); + ШагИзБиблиотеки = ЗначениеЗаполнено(НаборБиблиотечныхШагов) + И НаборБиблиотечныхШагов.Свойство(НормализованныйАдресШага, ОписаниеИсполнителяШагов); + Если ШагИзБиблиотеки Тогда ШагИзБиблиотеки = ОписаниеИсполнителяШагов.Файл.ПолноеИмя <> ФайлШагов.ПолноеИмя; КонецЕсли; Если Не ШагИзБиблиотеки И Не НаборШаговФичи.Свойство(НормализованныйАдресШага) Тогда НаборШаговФичи.Вставить(НормализованныйАдресШага, Узел); - Лог.Отладка("Нашел адрес шага для вставки в файл шагов: "+АдресШага+", "+Узел.Лексема+", <"+Узел.Тело+">"); + Лог.Отладка("Нашел адрес шага для вставки в файл шагов: %1, %2, <%3>", + АдресШага, Узел.Лексема, Узел.Тело); КонецЕсли; КонецЕсли; @@ -389,15 +409,15 @@ НормализованныйАдресШага = ОписаниеШага.Ключ; УзелШага = ОписаниеШага.Значение; АдресШага = УзелШага.АдресШага; - Буфер.Добавить(Символы.Таб + "ВсеШаги.Добавить("""+АдресШага+""");"); - Лог.Отладка(СтрШаблон("ЗаписатьКодОписанияШаговВБуфер - В НаборШаговФичи добавляю шаг с адресом %1, тело %2", - АдресШага, УзелШага.Тело)); + Буфер.Добавить(Символы.Таб + "ВсеШаги.Добавить(""" + АдресШага + """);"); + Лог.Отладка("ЗаписатьКодОписанияШаговВБуфер - В НаборШаговФичи добавляю шаг с адресом %1, тело %2", + АдресШага, УзелШага.Тело); КонецЦикла; КонецПроцедуры Процедура ЗаписатьШаг(ЗНач ИмяМетода, Знач Узел, ОписаниеЗаписываемогоФайла) - Лог.Отладка("Записываю шаг <"+ИмяМетода+">"); + Лог.Отладка("Записываю шаг <%1>", ИмяМетода); Буфер = ОписаниеЗаписываемогоФайла.Буфер; ЭтоПервичнаяГенерация = ОписаниеЗаписываемогоФайла.ЭтоПервичнаяГенерация; @@ -411,7 +431,7 @@ Возврат; КонецЕсли; КонецЕсли; - Лог.Отладка("Адрес шага <"+АдресШага+">"); + Лог.Отладка("Адрес шага <%1>", АдресШага); СтрокаПараметров = ПолучитьСтрокуПараметров(Узел.Параметры); @@ -419,22 +439,24 @@ Для Счетчик = 1 По СтрЧислоСтрок(Тело) Цикл Строка = СтрПолучитьСтроку(Тело, Счетчик); СтрокаДляЗаписи = СтрШаблон("//%1", Строка); - Лог.Отладка("СтрокаДляЗаписи <"+СтрокаДляЗаписи+">"); + Лог.Отладка("СтрокаДляЗаписи <%1>", СтрокаДляЗаписи); Буфер.Добавить(СтрокаДляЗаписи); КонецЦикла; ШаблонЗаписи = "%1 %2(%3) %4"; СтрокаДляЗаписи = СтрШаблон(ШаблонЗаписи, "Процедура", ИмяМетода, СтрокаПараметров, "Экспорт"); - Лог.Отладка("СтрокаДляЗаписи <"+СтрокаДляЗаписи+">"); + Лог.Отладка("СтрокаДляЗаписи <%1>", СтрокаДляЗаписи); Буфер.Добавить(СтрокаДляЗаписи); ШаблонЗаписи = "%1ВызватьИсключение Новый ИнформацияОбОшибке(""Шаг <%3> не реализован"", ""%2"");"; - СтрокаДляЗаписи = СтрШаблон(ШаблонЗаписи, Символы.Таб, ЧитательГеркин.ПараметрИсключенияДляЕщеНеРеализованногоШага(), ИмяМетода); - Лог.Отладка("СтрокаДляЗаписи <"+СтрокаДляЗаписи+">"); + СтрокаДляЗаписи = СтрШаблон(ШаблонЗаписи, Символы.Таб, + ЧитательГеркин.ПараметрИсключенияДляЕщеНеРеализованногоШага(), ИмяМетода); + + Лог.Отладка("СтрокаДляЗаписи <%1>", СтрокаДляЗаписи); Буфер.Добавить(СтрокаДляЗаписи); СтрокаДляЗаписи = "КонецПроцедуры"; - Лог.Отладка("СтрокаДляЗаписи <"+СтрокаДляЗаписи+">"+Символы.ПС); + Лог.Отладка("СтрокаДляЗаписи <%1>%2", СтрокаДляЗаписи, Символы.ПС); Буфер.Добавить(СтрокаДляЗаписи); Буфер.Добавить(""); @@ -445,12 +467,12 @@ Если ЗначениеЗаполнено(Параметры) Тогда Номер = 1; Для Каждого ОписаниеПараметра Из Параметры Цикл - Лог.Отладка("ОписаниеПараметра.Тип " + ОписаниеПараметра.Тип); + Лог.Отладка("ОписаниеПараметра.Тип %1", ОписаниеПараметра.Тип); ПредставлениеПараметра = ПолучитьПредставлениеПараметра(ОписаниеПараметра, Номер); СтрокаПараметров = СтрШаблон("%1Знач %2, ", СтрокаПараметров, ПредставлениеПараметра); Номер = Номер + 1; КонецЦикла; - СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров)-2); + СтрокаПараметров = Лев(СтрокаПараметров, СтрДлина(СтрокаПараметров) - 2); КонецЕсли; Возврат СтрокаПараметров; КонецФункции // ПолучитьСтрокуПараметров() @@ -492,9 +514,15 @@ Функция СоздатьРегулярныеВыражения() Рез = Новый Структура; - Рез.Вставить("НачалоЭкспортногоМетода", Новый РегулярноеВыражение("^\s*(Функция|Процедура)\s+([_\w\dа-яё]+)\s*\(.+(Экспорт)+")); + Рез.Вставить("НачалоЭкспортногоМетода", + Новый РегулярноеВыражение("^\s*(Функция|Процедура)\s+([_\w\dа-яё]+)\s*\(.+(Экспорт)+")); + Рез.Вставить("КонецМетода", Новый РегулярноеВыражение("^\s*(КонецФункции|КонецПроцедуры)")); - Рез.Вставить("ФункцияПолучитьСписокШагов", Новый РегулярноеВыражение(СтрШаблон("^\s*Функция\s+%1\s*\(.+Экспорт", ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов()))); + + ИмяСпецМетода =ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов(); + Рез.Вставить("ФункцияПолучитьСписокШагов", + Новый РегулярноеВыражение(СтрШаблон("^\s*Функция\s+%1\s*\(.+Экспорт", ИмяСпецМетода))); + Возврат Новый ФиксированнаяСтруктура(Рез); КонецФункции // } diff --git a/src/bdd.os b/src/bdd.os index deda2be..56e1524 100644 --- a/src/bdd.os +++ b/src/bdd.os @@ -87,8 +87,10 @@ Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-name", " | -name <ЧастьИмениСценария> - Выполнение сценариев, в имени которого есть указанная часть"); - Парсер.ДобавитьПараметрФлагКоманды(Команда, "-fail-fast", "Немедленное завершение выполнения на первом же не пройденном сценарии"); - Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-junit-out", " -junit-out <путь-файла-отчета> - выводить отчет тестирования в формате JUnit.xml + Парсер.ДобавитьПараметрФлагКоманды(Команда, "-fail-fast", + "Немедленное завершение выполнения на первом же не пройденном сценарии"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-junit-out", + " -junit-out <путь-файла-отчета> - выводить отчет тестирования в формате JUnit.xml |");// перевод строки нужен для визуального отделения общих ключей в подсказке ДобавитьОбщиеПараметрыКоманд(Парсер, Команда); @@ -114,13 +116,16 @@ Процедура ДобавитьОбщиеПараметрыКоманд(Парсер, Команда) Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-require", " - | -require <путь каталога или путь файла> - путь к каталогу фича-файлов или к фича-файлу, содержащим библиотечные шаги. + | -require <путь каталога или путь файла> - путь к каталогу фича-файлов или к фича-файлу, + | содержащим библиотечные шаги. | Если эта опция не задана, загружаются все os-файлы шагов из каталога исходной фичи и его подкаталогов. - | Если опция задана, загружаются только os-файлы шагов из каталога фича-файлов или к фича-файла, содержащих библиотечные шаги. + | Если опция задана, загружаются только os-файлы шагов из каталога фича-файлов или к фича-файла, + | содержащих библиотечные шаги. |" ); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-out", "<путь лог-файла>"); - Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-debug", "-debug - включает режим отладки (полный лог + остаются временные файлы)"); + Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-debug", + "-debug - включает режим отладки (полный лог + остаются временные файлы)"); Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "-verbose", "-verbose - включается полный лог"); КонецПроцедуры @@ -184,14 +189,14 @@ Возврат КодВозврата; КонецФункции -Функция ВыполнитьФичу(Знач ПутьФичи, Знач ПутьКБиблиотекам, Знач ИспользоватьБыстрыйОстановНаОшибке, Знач ИмяЭлементаСценария, - Знач ПутьОтчетаJUnit) +Функция ВыполнитьФичу(Знач ПутьФичи, Знач ПутьКБиблиотекам, Знач ИспользоватьБыстрыйОстановНаОшибке, + Знач ИмяЭлементаСценария, Знач ПутьОтчетаJUnit) - Лог.Отладка("ПутьФичи "+ПутьФичи); + Лог.Отладка("ПутьФичи %1", ПутьФичи); ТекущийКаталогСохр = ТекущийКаталог(); ПутьИсполнителя = ОбъединитьПути(ТекущийСценарий().Каталог, "bdd-exec.os"); - Лог.Отладка("Создаю исполнителя. Путь "+ПутьИсполнителя); + Лог.Отладка("Создаю исполнителя. Путь %1", ПутьИсполнителя); ИсполнительБДД = Новый ИсполнительБДД; ДопЛог = Логирование.ПолучитьЛог(ИсполнительБДД.ИмяЛога()); @@ -204,7 +209,8 @@ СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся; ИскатьВПодкаталогах = Истина; - РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(ФайлФичи, ФайлБиблиотек, ИскатьВПодкаталогах, ИспользоватьБыстрыйОстановНаОшибке, ИмяЭлементаСценария); + РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(ФайлФичи, ФайлБиблиотек, ИскатьВПодкаталогах, + ИспользоватьБыстрыйОстановНаОшибке, ИмяЭлементаСценария); УстановитьТекущийКаталог(ТекущийКаталогСохр); @@ -224,10 +230,10 @@ КонецФункции Процедура СгенерироватьФайлыШагов(Знач ПутьФичи, Знач ПутьКБиблиотекам) - Лог.Отладка("ПутьФичи "+ПутьФичи); + Лог.Отладка("ПутьФичи %1", ПутьФичи); ПутьГенератора = ОбъединитьПути(ТекущийСценарий().Каталог, "bdd-generate.os"); - Лог.Отладка("Создаю помощника для генерации файла шагов. Путь "+ПутьГенератора); + Лог.Отладка("Создаю помощника для генерации файла шагов. Путь %1", ПутьГенератора); ГенераторШагов = Новый ГенераторШагов; ДопЛог = Логирование.ПолучитьЛог(ГенераторШагов.ИмяЛога()); @@ -242,11 +248,11 @@ Функция ПолучитьФайлБиблиотек(Знач ФайлФичи, Знач ПутьКБиблиотекам) Если Не ПустаяСтрока(ПутьКБиблиотекам) Тогда ФайлБиблиотек = ПолучитьФайлПоПути(ПутьКБиблиотекам); - Лог.Отладка("Использую путь к библиотечным шагам "+ПутьКБиблиотекам); + Лог.Отладка("Использую путь к библиотечным шагам %1", ПутьКБиблиотекам); Иначе //по умолчанию загружаем все файлы шагов из каталога фичи и подкаталогов для использования в качестве библиотечных шагов ПутьКаталогаФичи = ?(ФайлФичи.ЭтоКаталог(), ФайлФичи.ПолноеИмя, ФайлФичи.Путь); - Лог.Отладка("Использую автозагрузку библиотечных шагов из "+ПутьКаталогаФичи); + Лог.Отладка("Использую автозагрузку библиотечных шагов из %1", ПутьКаталогаФичи); ФайлБиблиотек = Новый Файл(ПутьКаталогаФичи); КонецЕсли; Возврат ФайлБиблиотек; @@ -317,7 +323,7 @@ КонецПроцедуры Процедура ВосстановитьТекущийКаталог() - УстановитьТекущийКаталог(СохраненныйТекущийКаталог) + УстановитьТекущийКаталог(СохраненныйТекущийКаталог); КонецПроцедуры Процедура ЗавершитьСкрипт(КодВозврата) diff --git a/src/gherkin-read.os b/src/gherkin-read.os index e21dfd8..1eb1ae2 100644 --- a/src/gherkin-read.os +++ b/src/gherkin-read.os @@ -38,7 +38,7 @@ Функция ПрочитатьФайлСценария(Знач ФайлСценария) Экспорт Если НРег(ФайлСценария.Расширение) <> ".feature" Тогда - ВызватьИсключение "Неверный файл фичи "+ФайлСценария.ПолноеИмя; + ВызватьИсключение "Неверный файл фичи " + ФайлСценария.ПолноеИмя; КонецЕсли; Лог.Отладка("Читаю сценарий "+ФайлСценария.ПолноеИмя); diff --git a/src/junit-report-gen.os b/src/junit-report-gen.os index ce8e86e..d5801da 100644 --- a/src/junit-report-gen.os +++ b/src/junit-report-gen.os @@ -2,6 +2,13 @@ Перем ВозможныеСтатусыВыполнения; Перем ТипыСостоянияJUnit; +// Сформировать лог-файл проверки в формате Ant.JUnit +// +// Параметры: +// РезультатыВыполнения - ДеревоЗначение +// СтатусВыполнения - СтатусыВыполнения +// ПутьОтчетаJUnit - Строка - путь к лог-файлу проверки в формате Ant.JUnit +// Процедура Сформировать(Знач РезультатыВыполнения, Знач СтатусВыполнения, Знач ПутьОтчетаJUnit) Экспорт // ДатаНачала = Неопределено; ИсполнительБДД = Новый ИсполнительБДД; @@ -22,7 +29,8 @@ КоличествоОшибок = СтруктураИтогов[ТипШага_Функциональность][ВозможныеСтатусыВыполнения.Сломался]; КоличествоНереализованныхТестов = СтруктураИтогов[ТипШага_Функциональность][ВозможныеСтатусыВыполнения.НеРеализован]; - ВсегоТестов = СтруктураИтогов[ТипШага_Функциональность][ВозможныеСтатусыВыполнения.Пройден] + КоличествоОшибок + КоличествоНереализованныхТестов; + ВсегоТестов = СтруктураИтогов[ТипШага_Функциональность][ВозможныеСтатусыВыполнения.Пройден] + + КоличествоОшибок + КоличествоНереализованныхТестов; // // ВремяВыполнения = ТекущаяДата() - ДатаНачала; ВремяВыполнения = 0;//TODO вычислять время выполнения прогона фич, шагов и сценариев @@ -43,16 +51,17 @@ ЗаписьXML.ЗаписатьКонецЭлемента(); Для Каждого УзелСценария Из Узел.Строки Цикл - Если УзелСценария.ТипШага = ВозможныеТипыШагов.Сценарий Тогда - Для Каждого УзелШага Из УзелСценария.Строки Цикл - Если УзелШага.ТипШага = ВозможныеТипыШагов.Шаг Тогда - ЗаполнитьРезультатТестовогоСлучая(ЗаписьXML, УзелСценария, УзелШага); - Если УзелШага.СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден Тогда - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; + Если УзелСценария.ТипШага <> ВозможныеТипыШагов.Сценарий Тогда + Продолжить + КонецЕсли; + Для Каждого УзелШага Из УзелСценария.Строки Цикл + Если УзелШага.ТипШага = ВозможныеТипыШагов.Шаг Тогда + ЗаполнитьРезультатТестовогоСлучая(ЗаписьXML, УзелСценария, УзелШага); + Если УзелШага.СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); @@ -69,7 +78,7 @@ ЗаписьXML.ЗаписатьБезОбработки(СтрокаХМЛ);// таким образом файл будет записан всего один раз, и не будет проблем с обработкой на билд-сервере TeamCity ЗаписьXML.Закрыть(); Сообщить(" "); - Сообщить("Путь к лог-файлу проверки в формате Ant.JUnit <"+ФайлОтчета.ПолноеИмя+">"); + Сообщить(СтрШаблон("Путь к лог-файлу проверки в формате Ant.JUnit <%1>", ФайлОтчета.ПолноеИмя)); КонецПроцедуры @@ -85,7 +94,7 @@ Если УзелШага.СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался Тогда ЗаписьXML.ЗаписатьНачалоЭлемента(ТипСостоянияJUnit); ОписаниеОшибкиВыполнения = УзелШага.ОписаниеОшибкиВыполнения; - Сообщить("ОписаниеОшибкиВыполнения "+ОписаниеОшибкиВыполнения); + Сообщить(СтрШаблон("ОписаниеОшибкиВыполнения %1", ОписаниеОшибкиВыполнения)); // TODO: НайтиНедопустимыеСимволыXML() XMLОписаниеОшибкиВыполнения = XMLСтрока(ОписаниеОшибкиВыполнения); ЗаписьXML.ЗаписатьАтрибут("message", XMLОписаниеОшибкиВыполнения); From a9d01366ffcf8dd6f5b559617424334eb91aa0ba Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 17 Dec 2016 15:21:38 +0300 Subject: [PATCH 13/42] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=85=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 4 + src/gherkin-read.os | 236 ++++++++++++++++++++++++++++++-------------- 2 files changed, 168 insertions(+), 72 deletions(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 1c3a08f..def8998 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -197,6 +197,10 @@ Возврат ВозможныеКодыВозвратовПроцесса; КонецФункции // ВозможныеКодыВозвратовПроцесса() +// Возвращает имя лога 1bdd +// +// Возвращаемое значение: +// Строка - имя лога Функция ИмяЛога() Экспорт Возврат "bdd"; КонецФункции diff --git a/src/gherkin-read.os b/src/gherkin-read.os index 1eb1ae2..e3da635 100644 --- a/src/gherkin-read.os +++ b/src/gherkin-read.os @@ -41,7 +41,7 @@ ВызватьИсключение "Неверный файл фичи " + ФайлСценария.ПолноеИмя; КонецЕсли; - Лог.Отладка("Читаю сценарий "+ФайлСценария.ПолноеИмя); + Лог.Отладка("Читаю сценарий %1", ФайлСценария.ПолноеИмя); Фича = Новый ЧитательСтрокФайла; Фича.Инициализировать(ФайлСценария.ПолноеИмя); @@ -53,6 +53,14 @@ Возврат СтруктураФичи; КонецФункции +// Прочитать текст фичи +// +// Параметры: +// ТекстФичи - Строка - текст фичи +// +// Возвращаемое значение: +// Структура - структура описания разбора фичи +// Функция ПрочитатьТекстФичи(Знач ТекстФичи) Экспорт Лог.Отладка("Читаю текст фичи"); @@ -66,6 +74,12 @@ Возврат СтруктураФичи; КонецФункции +// Возвращает фиксированную структуру с типами шагов. +// Выполняется кеширование этой структуры +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Ключ - тип шага, значение - соответствующее уникальное имя шага +// Функция ВозможныеТипыШагов() Экспорт Если ВозможныеТипыШагов = Неопределено Тогда Рез = Новый Структура; @@ -81,6 +95,12 @@ Возврат ВозможныеТипыШагов; КонецФункции +// Возвращает фиксированную структуру с ключевыми словами Gherkin. +// Выполняется кеширование этой структуры +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Ключ - русское имя ключевого слова, значение - уникальное имя +// Функция ВозможныеКлючевыеСлова() Экспорт Если ВозможныеКлючевыеСлова = Неопределено Тогда Рез = Новый Структура; @@ -101,6 +121,12 @@ Возврат ВозможныеКлючевыеСлова; КонецФункции +// Возвращает фиксированную структуру с кодовыми ключами параметров шагов. +// Выполняется кеширование этой структуры +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - Ключ - русское имя параметра, значение - уникальный код параметра +// Функция ВозможныеКлючиПараметров() Экспорт Если ВозможныеКлючиПараметров = Неопределено Тогда Рез = Новый Структура; @@ -120,13 +146,20 @@ Рез = Новый Структура; //TODO добавить возможность единого набора хуков "до выполнения" и "после выполнения" шагов различных типов //Например, перед запуском - для сценариев, шагов - Рез.Вставить("ПередЗапускомСценария", Новый Структура("АдресШага,ТипШага", "ПередЗапускомСценария", ВозможныеТипыШагов.Сценарий)); - Рез.Вставить("ПослеЗапускаСценария", Новый Структура("АдресШага,ТипШага", "ПослеЗапускаСценария", ВозможныеТипыШагов.Сценарий)); + Рез.Вставить("ПередЗапускомСценария", + Новый Структура("АдресШага,ТипШага", "ПередЗапускомСценария", ВозможныеТипыШагов.Сценарий)); + Рез.Вставить("ПослеЗапускаСценария", + Новый Структура("АдресШага,ТипШага", "ПослеЗапускаСценария", ВозможныеТипыШагов.Сценарий)); ВозможныеХуки = Новый ФиксированнаяСтруктура(Рез); КонецЕсли; Возврат ВозможныеХуки; КонецФункции // ВозможныеХуки() +// Создает пустое дерево фич +// +// Возвращаемое значение: +// ДеревоЗначений - +// Функция СоздатьДеревоФич() Экспорт Рез = Новый ДеревоЗначений; Рез.Колонки.Добавить("Лексема"); @@ -142,6 +175,14 @@ Возврат Рез; КонецФункции +// Нормализовать адрес шага, приведя его к единому формату шагов +// +// Параметры: +// АдресШага - Строка - идентификатор шага +// +// Возвращаемое значение: +// Строка - единый формат шага +// Функция НормализоватьАдресШага(Знач АдресШага) Экспорт Возврат ВРег(АдресШага); КонецФункции // НормализоватьАдресШага() @@ -150,16 +191,31 @@ Возврат "Не реализовано."; КонецФункции +// Возвращает уникальное имя функции получения списка шагов в файлах реализаций шагов +// +// Возвращаемое значение: +// Строка - "ПолучитьСписокШагов" +// Функция НаименованиеФункцииПолученияСпискаШагов() Экспорт Возврат "ПолучитьСписокШагов"; КонецФункции +// Возвращает имя лога 1bdd +// +// Возвращаемое значение: +// Строка - имя лога Функция ИмяЛога() Экспорт Возврат "bdd"; КонецФункции +// Скопировать все реквизиты узла дерева и все подчиненные строки +// +// Параметры: +// Узел - ДеревоЗначений, СтрокаДереваЗначений - источник +// УзелИсходногоДерева - ДеревоЗначений, СтрокаДереваЗначений - получатель +// Процедура СкопироватьДерево(Узел, УзелИсходногоДерева) Экспорт - ЗаполнитьЗначенияСвойств(Узел, УзелИсходногоДерева,, "Родитель,Строки,Параметры,ПараметрыДляТаблицы"); + ЗаполнитьЗначенияСвойств(Узел, УзелИсходногоДерева, , "Родитель, Строки, Параметры, ПараметрыДляТаблицы"); Узел.Параметры = СоздатьТаблицуПараметров(); ДобавитьПараметры(Узел.Параметры, УзелИсходногоДерева.Параметры); @@ -172,24 +228,34 @@ КонецЦикла; КонецПроцедуры +// Вывести отладочные сообщения о полном составе дерева +// +// Параметры: +// Узел - ДеревоЗначений, СтрокаДереваЗначений - исходный узел для показа +// Отступ - Строка - Количество пробелов слева для форматирования вывода каждого узла +// ВыводитьШапку - Истина - заголовочные и конечные сообщения для обрамления +// Процедура ПоказатьДеревоВРежимеОтладки(Узел, Знач Отступ = "", Знач ВыводитьШапку = Истина) Экспорт - Если ВыводитьШапку = Истина Тогда + Если ВыводитьШапку Тогда Лог.Отладка(СтроковыеФункции.ДополнитьСлеваМногострочнуюСтроку(" | ------------------- Текущее дерево ------------------- |", Отступ)); КонецЕсли; Попытка - Лог.Отладка(СтрШаблон("%4 тип шага %1, лексема %2, тело %3", Узел.ТипШага, Узел.Лексема, Узел.Тело, Отступ)); + Лог.Отладка(СтрШаблон("%4 тип шага %1, лексема %2, тело %3", + Узел.ТипШага, Узел.Лексема, Узел.Тело, Отступ)); Родитель = Узел.Родитель; - Лог.Отладка(СтрШаблон("%4 родитель тип шага %1, лексема %2, тело %3", Родитель.ТипШага, Родитель.Лексема, Родитель.Тело, Отступ)); + Лог.Отладка(СтрШаблон("%4 родитель тип шага %1, лексема %2, тело %3", + Родитель.ТипШага, Родитель.Лексема, Родитель.Тело, Отступ)); Исключение + // скрываем ошибки КонецПопытки; Для каждого Строка Из Узел.Строки Цикл ПоказатьДеревоВРежимеОтладки(Строка, Отступ + " ", Ложь); КонецЦикла; - Если ВыводитьШапку = Истина Тогда + Если ВыводитьШапку Тогда Лог.Отладка(СтроковыеФункции.ДополнитьСлеваМногострочнуюСтроку(" | ------------------- ------------------- |", Отступ)); @@ -220,7 +286,7 @@ Если ЗначениеЗаполнено(НовыйЯзык) Тогда Язык = НовыйЯзык; СоответствиеКлючевыеСлова = СоответствиеЯзыкКлючевыеСлова.Получить(Язык); - Лог.Отладка(" Получили язык фичи "+Язык); + Лог.Отладка(" Получили язык фичи " + Язык); КонецЕсли; Продолжить; @@ -228,8 +294,9 @@ Лог.Отладка(" Первый символ строки - это метка. Пропускаю строку"); Продолжить; - ИначеЕсли ПервыйСимвол = ВозможныеТипыНачалаСтроки.Таблица И НЕ ПредыдущиеПараметрыЛексемы.ДалееБудутДополнительныеСтроки Тогда - Лог.Отладка("Очередная строка фичи <"+ОчереднаяСтрока+">"); + ИначеЕсли ПервыйСимвол = ВозможныеТипыНачалаСтроки.Таблица + И НЕ ПредыдущиеПараметрыЛексемы.ДалееБудутДополнительныеСтроки Тогда + Лог.Отладка("Очередная строка фичи <%1>", ОчереднаяСтрока); ПредыдущиеПараметрыЛексемы.ЕстьТелоТаблицы = Истина; ПредыдущиеПараметрыЛексемы.ДопТело = ПолучитьТелоТаблицыДанных(Фича, ОчереднаяСтрока); @@ -238,40 +305,43 @@ Продолжить; ИначеЕсли Лев(ОчереднаяСтрока, ДлинаСтрокиНачалаМногострочногоТекста) = ВозможныеТипыНачалаСтроки.МногострочныйТекст Тогда - Лог.Отладка("Очередная строка фичи <"+ОчереднаяСтрока+">"); + Лог.Отладка("Очередная строка фичи <%1>", ОчереднаяСтрока); ПредыдущиеПараметрыЛексемы.ЕстьМногострочнаяСтрока = Истина; - ПраваяЧасть = ПредыдущиеПараметрыЛексемы.ПраваяЧасть + ?(ПустаяСтрока(ПредыдущиеПараметрыЛексемы.ПраваяЧасть), "", Символы.ПС); + ПраваяЧасть = ПредыдущиеПараметрыЛексемы.ПраваяЧасть + + ?(ПустаяСтрока(ПредыдущиеПараметрыЛексемы.ПраваяЧасть), "", Символы.ПС); ПредыдущиеПараметрыЛексемы.ПраваяЧасть = ПраваяЧасть + ПолучитьМногострочныйТекст(Фича); - Лог.Отладка("Добавляю многострочный текст как часть предыдущей лексемы. Тело "+ПредыдущиеПараметрыЛексемы.ПраваяЧасть); + Лог.Отладка("Добавляю многострочный текст как часть предыдущей лексемы. Тело %1", + ПредыдущиеПараметрыЛексемы.ПраваяЧасть); Продолжить; КонецЕсли; - Лог.Отладка("Очередная строка фичи <"+ОчереднаяСтрока+">"); + Лог.Отладка("Очередная строка фичи <%1>", ОчереднаяСтрока); - Ожидаем.Что(Язык, "Ожидали, что язык фичи "+Язык+" будет установлен в тексте фичи, но это не так").Заполнено(); + Ожидаем.Что(Язык, "Ожидали, что язык фичи " + Язык + " будет установлен в тексте фичи, но это не так").Заполнено(); - ИспользоватьНовуюЛексемуКакЧастьПредыдущейЛексемы = ЗначениеЗаполнено(ПредыдущиеПараметрыЛексемы) И ПредыдущиеПараметрыЛексемы.ДалееБудутДополнительныеСтроки; + ИспользоватьНовуюЛексемуКакЧастьПредыдущейЛексемы = ЗначениеЗаполнено(ПредыдущиеПараметрыЛексемы) + И ПредыдущиеПараметрыЛексемы.ДалееБудутДополнительныеСтроки; ПараметрыЛексемы = НайтиЛексему(ОчереднаяСтрока); - Если ЗначениеЗаполнено(ПараметрыЛексемы) И (НЕ ИспользоватьНовуюЛексемуКакЧастьПредыдущейЛексемы ИЛИ ПараметрыЛексемы.Лексема <> ВозможныеКлючевыеСлова.Описание) Тогда + Если ЗначениеЗаполнено(ПараметрыЛексемы) И (НЕ ИспользоватьНовуюЛексемуКакЧастьПредыдущейЛексемы + ИЛИ ПараметрыЛексемы.Лексема <> ВозможныеКлючевыеСлова.Описание) Тогда Лог.Отладка("Использую новую лексему как основную"); ПредыдущиеПараметрыЛексемы = ПараметрыЛексемы; НайденныеЛексемы.Добавить(ПараметрыЛексемы); Иначе Лог.Отладка("Добавляю новую лексему как часть предыдущей лексемы"); - ПраваяЧасть = ПредыдущиеПараметрыЛексемы.ПраваяЧасть + ?(ПустаяСтрока(ПредыдущиеПараметрыЛексемы.ПраваяЧасть), "", Символы.ПС); + ПраваяЧасть = ПредыдущиеПараметрыЛексемы.ПраваяЧасть + + ?(ПустаяСтрока(ПредыдущиеПараметрыЛексемы.ПраваяЧасть), "", Символы.ПС); ПредыдущиеПараметрыЛексемы.ПраваяЧасть = ПраваяЧасть + ОчереднаяСтрока; КонецЕсли; КонецЦикла; - Лог.Отладка("Нашли лексем "+НайденныеЛексемы.Количество()); - // Ожидаем.Что(НайденныеЛексемы.Количество(), "Ожидали, что заданы функциональность и хотя бы один сценарий, а их нет").БольшеИлиРавно(2); + Лог.Отладка("Нашли лексем %1", НайденныеЛексемы.Количество()); ДеревоФич = ПолучитьДеревоФич(НайденныеЛексемы); - // Ожидаем.Что(ДеревоФич.Строки.Количество(), "Ожидали, что заданы функциональность, а их не удалось найти в файле").Равно(1); РезультатыРазбора = Новый Структура; РезультатыРазбора.Вставить("Язык", Язык); @@ -320,14 +390,15 @@ Рез.Вставить("ПраваяЧасть", ПраваяЧасть); Рез.Вставить("ДалееБудутДополнительныеСтроки", ДалееБудутДополнительныеСтроки); - лог.Отладка(СтрШаблон("Нашел лексему <%1>, правая часть <%2>, ДалееБудутДополнительныеСтроки %3", Рез.Лексема, Рез.ПраваяЧасть, ДалееБудутДополнительныеСтроки)); + лог.Отладка(СтрШаблон("Нашел лексему <%1>, правая часть <%2>, ДалееБудутДополнительныеСтроки %3", + Рез.Лексема, Рез.ПраваяЧасть, ДалееБудутДополнительныеСтроки)); Возврат Рез; КонецЕсли; КонецЦикла; Рез.Вставить("Лексема", ВозможныеКлючевыеСлова.Описание); Рез.Вставить("ПраваяЧасть", Строка); - лог.Отладка("Нашел лексему <"+Рез.Лексема+">, правая часть <"+Рез.ПраваяЧасть+">"); + Лог.Отладка("Нашел лексему <%1>, правая часть <%2>", Рез.Лексема, Рез.ПраваяЧасть); Возврат Рез; КонецФункции @@ -395,20 +466,22 @@ ОчереднаяЛексема = ПараметрыОчереднойЛексемы.Лексема; УровеньЛексемы = УровниЛексем[ОчереднаяЛексема]; - Лог.Отладка("Получил Очередная лексема <"+ОчереднаяЛексема+">, Индекс "+Индекс+", уровень <"+УровеньЛексемы+">, тело <"+ПараметрыОчереднойЛексемы.ПраваяЧасть+">"); + Лог.Отладка("Получил Очередная лексема <%1>, Индекс %2, уровень <%3>, тело <%4>", + ОчереднаяЛексема, Индекс, УровеньЛексемы, ПараметрыОчереднойЛексемы.ПраваяЧасть); НайденныеПараметры = Неопределено; ПараметрыДляТаблицы = Неопределено; ЕстьПараметрыДляТаблицы = Ложь; - ПраваяЧастьСДобавленнымиКлючамиПараметров = ИзвлечьПараметры(ПараметрыОчереднойЛексемы, НайденныеПараметры, ПараметрыДляТаблицы, ЕстьПараметрыДляТаблицы); - Лог.Отладка("ПраваяЧастьСДобавленнымиКлючамиПараметров "+ПраваяЧастьСДобавленнымиКлючамиПараметров); + ПраваяЧастьСДобавленнымиКлючамиПараметров = ИзвлечьПараметры(ПараметрыОчереднойЛексемы, НайденныеПараметры, + ПараметрыДляТаблицы, ЕстьПараметрыДляТаблицы); + Лог.Отладка("ПраваяЧастьСДобавленнымиКлючамиПараметров %1", ПраваяЧастьСДобавленнымиКлючамиПараметров); ПолнаяПраваяЧасть = ПараметрыОчереднойЛексемы.ПраваяЧасть; Если Не ПустаяСтрока(ПараметрыОчереднойЛексемы.ДопТело) Тогда ПолнаяПраваяЧасть = ПолнаяПраваяЧасть + Символы.ПС + ПараметрыОчереднойЛексемы.ДопТело; КонецЕсли; НоваяСтрока = ЗаполнитьУзелДереваФич(СтрокиДерева, ОчереднаяЛексема, ПолнаяПраваяЧасть); - Лог.Отладка("НоваяСтрока.Лексема <"+НоваяСтрока.Лексема+">"); + Лог.Отладка("НоваяСтрока.Лексема <%1>", НоваяСтрока.Лексема); НоваяСтрока.Параметры = НайденныеПараметры; НоваяСтрока.ПараметрыДляТаблицы = ПараметрыДляТаблицы; НоваяСтрока.ЕстьПараметрыДляТаблицы = ЕстьПараметрыДляТаблицы; @@ -418,15 +491,15 @@ Индекс = Индекс + 1; Если Индекс >= НайденныеЛексемы.Количество() Тогда - Лог.Отладка("Завершаю изучать лексемы. Индекс "+Индекс); + Лог.Отладка("Завершаю изучать лексемы. Индекс %1", Индекс); Прервать; КонецЕсли; НоваяЛексема = НайденныеЛексемы[Индекс].Лексема; НовыйУровеньЛексемы = УровниЛексем[НоваяЛексема]; - Лог.Отладка(СтрШаблон("Проверяю следующую лексему <%1>, Индекс %2, уровень <%3>, верхний уровень %4", - НоваяЛексема, Индекс, НовыйУровеньЛексемы, УровеньЛексемы)); + Лог.Отладка("Проверяю следующую лексему <%1>, Индекс %2, уровень <%3>, верхний уровень %4", + НоваяЛексема, Индекс, НовыйУровеньЛексемы, УровеньЛексемы); Если НовыйУровеньЛексемы = УровеньЛексемы Тогда Продолжить; @@ -454,7 +527,6 @@ Родитель = Родитель.Родитель; Если Родитель = Неопределено Тогда Прервать; - Иначе КонецЕсли; УровеньЛексемыРодителя = Родитель.УровеньЛексемы; КонецЕсли; @@ -468,7 +540,9 @@ Функция ЗаполнитьУзелДереваФич(СтрокиДерева, Лексема, Тело) НоваяСтрока = СтрокиДерева.Добавить(); - ОписаниеЛексемы = Новый Структура("Лексема,Тело,Строки,Параметры", Лексема, Тело, Новый Массив, Новый Массив); + ОписаниеЛексемы = Новый Структура("Лексема,Тело", Лексема, Тело); + ОписаниеЛексемы.Вставить("Строки", Новый Массив); + ОписаниеЛексемы.Вставить("Параметры", Новый Массив); ЗаполнитьЗначенияСвойств(НоваяСтрока, ОписаниеЛексемы); Возврат НоваяСтрока; КонецФункции @@ -500,7 +574,7 @@ Возврат Тело; КонецФункции -Функция ВыделитьПростыеЗначенияНеСтроки(Знач Тело, НайденныеПараметры); +Функция ВыделитьПростыеЗначенияНеСтроки(Знач Тело, НайденныеПараметры) Тело = ВыделитьПараметрыДата(Тело, НайденныеПараметры); Тело = ВыделитьЧисловыеПараметры(Тело, НайденныеПараметры); @@ -518,15 +592,15 @@ НоваяСтрока = ""; Пока Итератор > 0 Цикл - НоваяСтрока = НоваяСтрока + Лев(ОстатокСтроки, Итератор-1); - ОстатокСтроки = Сред(ОстатокСтроки, Итератор+1); + НоваяСтрока = НоваяСтрока + Лев(ОстатокСтроки, Итератор - 1); + ОстатокСтроки = Сред(ОстатокСтроки, Итератор + 1); Итератор = Найти(ОстатокСтроки, ЗнакКавычки); ИндексВТеле = ИндексВТеле + Итератор; Если Итератор > 0 Тогда - ЗначениеПараметра = Лев(ОстатокСтроки, Итератор-1); - ОстатокСтроки = Сред(ОстатокСтроки, Итератор+1); + ЗначениеПараметра = Лев(ОстатокСтроки, Итератор - 1); + ОстатокСтроки = Сред(ОстатокСтроки, Итератор + 1); ОписаниеПараметра = ВозможныеКлючиПараметров.Строка; НоваяСтрока = НоваяСтрока + ОписаниеПараметра; @@ -578,10 +652,10 @@ НовоеТело = Тело; - Для к = -КоллекцияГруппСовпадений.Количество()+1 По 0 Цикл - Группа = КоллекцияГруппСовпадений[-к]; + Для к = - КоллекцияГруппСовпадений.Количество() + 1 По 0 Цикл + Группа = КоллекцияГруппСовпадений[ - к]; ЗначениеПараметра = Группа.Значение; - Лог.Отладка("ЗначениеПараметра "+ЗначениеПараметра); + Лог.Отладка("ЗначениеПараметра %1", ЗначениеПараметра); ЭтоЧисловойПараметр = ЭтоЧисло(ЗначениеПараметра); ОписаниеПараметра = ?(ЭтоЧисловойПараметр, ВозможныеКлючиПараметров.Число, ВозможныеКлючиПараметров.Строка); Если ЭтоЧисловойПараметр Тогда @@ -608,16 +682,16 @@ НовоеТело = Тело; - Для к = -КоллекцияГруппСовпадений.Количество()+1 По 0 Цикл - Группа = КоллекцияГруппСовпадений[-к]; + Для к = - КоллекцияГруппСовпадений.Количество() + 1 По 0 Цикл + Группа = КоллекцияГруппСовпадений[ - к]; ЗначениеПараметра = Группа.Значение; Группы = Группа.Группы; - Лог.Отладка("ЗначениеПараметра "+ЗначениеПараметра); + Лог.Отладка("ЗначениеПараметра %1", ЗначениеПараметра); ОписаниеПараметра = ВозможныеКлючиПараметров.Дата; Год = Группы[3].Значение; Если СтрДлина(Год) = 2 Тогда - Год = "20"+Год; + Год = "20" + Год; КонецЕсли; СтрокаДаты = СтрШаблон("%1%2%3", Год, Группы[2].Значение, Группы[1].Значение); ЗначениеПараметра = Дата(СтрокаДаты); @@ -643,10 +717,10 @@ НовоеТело = Тело; - Для к = 0 По КоллекцияГруппСовпадений.Количество()-1 Цикл + Для к = 0 По КоллекцияГруппСовпадений.Количество() - 1 Цикл Группа = КоллекцияГруппСовпадений[к]; ЗначениеПараметра = Группа.Группы[1].Значение; - Лог.Отладка("ЗначениеПараметра (для подстановки из таблицы) "+ЗначениеПараметра); + Лог.Отладка("ЗначениеПараметра (для подстановки из таблицы) %1", ЗначениеПараметра); ОписаниеПараметра = ВозможныеКлючиПараметров.ПараметрДляТаблицы; Начало = Группа.Индекс; @@ -692,7 +766,8 @@ Для к = 0 По ТабИсточник.Количество() - 1 Цикл СтрокаПараметров = ТабИсточник[к]; ДобавитьПараметр(ТабНазначение, СтрокаПараметров.Тип, СтрокаПараметров.Значение, СтрокаПараметров.Начало); - Лог.Отладка(СтрШаблон("ДобавитьПараметры %1, тип %2, начало %3", СтрокаПараметров.Значение, СтрокаПараметров.Тип, СтрокаПараметров.Начало)); + Лог.Отладка("ДобавитьПараметры %1, тип %2, начало %3", + СтрокаПараметров.Значение, СтрокаПараметров.Тип, СтрокаПараметров.Начало); КонецЦикла; КонецПроцедуры @@ -712,7 +787,7 @@ МассивПодстрок = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ТелоШага, " ", Истина); Для Каждого Элемент Из МассивПодстрок Цикл Если ЭтоКлючПараметра(Элемент) Тогда - Лог.Отладка("Пропускаю Элемент "+Элемент); + Лог.Отладка("Пропускаю Элемент %1", Элемент); Продолжить; КонецЕсли; АдресШага = АдресШага + ТРег(Элемент); @@ -763,7 +838,8 @@ СтрокаДерева.Строки.Удалить(УзелПримеры); СтрокиДерева.Удалить(СтрокаДерева); - МассивНовыхСтрок = СоздатьНовыеСтрокиСценариевСПараметрамиИзПримеров(СтрокиДерева, Счетчик, СтрокаДерева, ТаблицаПримеров); + МассивНовыхСтрок = СоздатьНовыеСтрокиСценариевСПараметрамиИзПримеров( + СтрокиДерева, Счетчик, СтрокаДерева, ТаблицаПримеров); Для каждого СтрокаДерева Из МассивНовыхСтрок Цикл СоздатьНовыеСценарииВУзлахДереваВместоСтруктурыСценария(СтрокаДерева.Строки); @@ -777,19 +853,22 @@ Возврат Узел; КонецЕсли; КонецЦикла; - ВызватьИсключение СтрШаблон("Ошибка формата файла-фичи - Для структуры сценария не удалось найти примеры. Название структуры сценария %1", ИсходныйУзел.Тело); + ВызватьИсключение СтрШаблон("Ошибка формата файла-фичи - Для структуры сценария не удалось найти примеры. + |Название структуры сценария %1", ИсходныйУзел.Тело); КонецФункции // НайтиШагПримеры(Строка) Функция ПолучитьТаблицу(Знач ТекстТаблицы) ЧислоСтрок = СтрЧислоСтрок(ТекстТаблицы); - Ожидаем.Что(ЧислоСтрок, СтрШаблон("Количество строк из таблицы должно быть больше 0, а это не так. Текст %1", ТекстТаблицы)).Больше(0); + + ОписаниеОшибки = "Количество строк из таблицы должно быть больше 0, а это не так. Текст %1"; + Ожидаем.Что(ЧислоСтрок, СтрШаблон(ОписаниеОшибки, ТекстТаблицы)).Больше(0); РезТаблица = Новый ТаблицаЗначений; МассивЗначенийПервойСтроки = ПолучитьНаборЗначенийИзТекстовойСтрокиТаблицы(ТекстТаблицы, 1); Для НомерКолонки = 0 По МассивЗначенийПервойСтроки.Количество() - 1 Цикл - РезТаблица.Колонки.Добавить("К"+НомерКолонки); + РезТаблица.Колонки.Добавить("К" + НомерКолонки); КонецЦикла; НоваяСтрока = РезТаблица.Добавить(); @@ -800,7 +879,8 @@ Если МассивЗначений = Неопределено Тогда Прервать; КонецЕсли; - Ожидаем.Что(МассивЗначений, СтрШаблон("Получили неверное количество строк из таблицы. Текст %1", ТекстТаблицы)).ИмеетДлину(МассивЗначенийПервойСтроки.Количество()); + Ожидаем.Что(МассивЗначений, СтрШаблон("Получили неверное количество строк из таблицы. Текст %1", ТекстТаблицы)) + .ИмеетДлину(МассивЗначенийПервойСтроки.Количество()); НоваяСтрока = РезТаблица.Добавить(); ЗаполнитьСтрокуТаблицы(МассивЗначений, НоваяСтрока, НомерСтроки); @@ -811,9 +891,9 @@ Функция ПолучитьНаборЗначенийИзТекстовойСтрокиТаблицы(Знач ТекстТаблицы, Знач НомерСтроки) СтрокаТекстовойТаблицы = СтрПолучитьСтроку(ТекстТаблицы, НомерСтроки); Если НомерСтроки = 1 Тогда - Лог.Отладка(СтрШаблон("Первая СтрокаПримеров %1", СтрокаТекстовойТаблицы)); + Лог.Отладка("Первая СтрокаПримеров %1", СтрокаТекстовойТаблицы); Иначе - Лог.Отладка(СтрШаблон(" СтрокаПримеров №%2 %1", СтрокаТекстовойТаблицы, НомерСтроки-1)); + Лог.Отладка(" СтрокаПримеров №%2 %1", СтрокаТекстовойТаблицы, НомерСтроки - 1); КонецЕсли; МассивЗначений = ПолучитьНаборИзСтрокиТаблицы(СтрокаТекстовойТаблицы); Возврат МассивЗначений; @@ -830,13 +910,15 @@ ЗначениеПараметра = НайденныеПараметры[0].Значение; КонецЕсли; - Лог.Отладка(СтрШаблон("номер строки %3, значение из колонки %1 (для подстановки из таблицы) <%2>", к, ЗначениеПараметра, НомерСтроки-1)); + Лог.Отладка("номер строки %3, значение из колонки %1 (для подстановки из таблицы) <%2>", + к, ЗначениеПараметра, НомерСтроки - 1); НоваяСтрока[к] = ЗначениеПараметра; КонецЦикла; КонецПроцедуры Процедура ИспользоватьПервуюСтрокуКакИменаКолонокТаблицы(Таблица) - Ожидаем.Что(Таблица.Количество(), "Количество строк из таблицы примеров должно быть больше 1, а это не так").Больше(1); + Ожидаем.Что(Таблица.Количество(), "Количество строк из таблицы примеров должно быть больше 1, а это не так") + .Больше(1); ПерваяСтрока = Таблица[0]; @@ -857,7 +939,7 @@ КонецЕсли; РезМассив = Новый Массив; - Для к = 0 По КоллекцияГруппСовпадений.Количество()-1 Цикл + Для к = 0 По КоллекцияГруппСовпадений.Количество() - 1 Цикл Совпадение = КоллекцияГруппСовпадений[к]; ЗначениеПараметра = СокрП(Совпадение.Группы[1].Значение);// из-за особенностей регулярки могут быть пробелы сзади РезМассив.Добавить(ЗначениеПараметра); @@ -865,7 +947,8 @@ Возврат РезМассив; КонецФункции // ПолучитьНаборИзСтрокиТаблицы() -Функция СоздатьНовыеСтрокиСценариевСПараметрамиИзПримеров(СтрокиДерева, Знач СчетчикСтрокиВДереве, Знач СтрокаДерева, Знач ТаблицаПримеров) +Функция СоздатьНовыеСтрокиСценариевСПараметрамиИзПримеров(СтрокиДерева, Знач СчетчикСтрокиВДереве, + Знач СтрокаДерева, Знач ТаблицаПримеров) МассивНовыхСтрок = Новый Массив; Для каждого СтрокаТаблицыПримеров Из ТаблицаПримеров Цикл НоваяСтрокаДерева = СтрокиДерева.Вставить(СчетчикСтрокиВДереве); @@ -875,7 +958,8 @@ НоваяСтрокаДерева.ТипШага = ВозможныеТипыШагов.Сценарий; НоваяСтрокаДерева.Лексема = ВозможныеКлючевыеСлова.Сценарий; - Лог.Отладка(СтрШаблон("Заменяю структуру сценария на узел, в котором тип шага %1, лексема <%2>, тело <%3>", НоваяСтрокаДерева.ТипШага, НоваяСтрокаДерева.Лексема, НоваяСтрокаДерева.Тело)); + Лог.Отладка("Заменяю структуру сценария на узел, в котором тип шага %1, лексема <%2>, тело <%3>", + НоваяСтрокаДерева.ТипШага, НоваяСтрокаДерева.Лексема, НоваяСтрокаДерева.Тело); МассивНовыхСтрок.Добавить(НоваяСтрокаДерева); @@ -884,7 +968,8 @@ Возврат МассивНовыхСтрок; КонецФункции // СоздатьНовыеСтрокиСценариевСПараметрамиИзПримеров(Строка, УзелПримеры) -Процедура ЗаменитьПараметрыУзлаНаПараметрыИзСтрокиПримеров(СтрокаДерева, Знач СтрокаТаблицыПримеров, Знач КолонкиТаблицыПримеров) +Процедура ЗаменитьПараметрыУзлаНаПараметрыИзСтрокиПримеров(СтрокаДерева, Знач СтрокаТаблицыПримеров, + Знач КолонкиТаблицыПримеров) Если СтрокаДерева.ЕстьПараметрыДляТаблицы Тогда ЗначенияПараметров = Новый Соответствие; Для каждого Колонка Из КолонкиТаблицыПримеров Цикл @@ -892,8 +977,9 @@ ИмяПараметра = Колонка.Заголовок; ЗначенияПараметров.Вставить(ИмяПараметра, СтрокаТаблицыПримеров[ИмяКолонки]); - Лог.Отладка(СтрШаблон("представление колонки <%3>, значение колонки <%2>, ИмяКолонки из таблицы <%1>, тело узла - %4 ", - ИмяКолонки, СтрокаТаблицыПримеров[ИмяКолонки], ИмяПараметра, СтрокаДерева.Тело)); + Лог.Отладка("представление колонки <%3>, значение колонки <%2>, ИмяКолонки из таблицы <%1>, + |тело узла - %4 ", + ИмяКолонки, СтрокаТаблицыПримеров[ИмяКолонки], ИмяПараметра, СтрокаДерева.Тело); КонецЦикла; Для каждого Параметр Из СтрокаДерева.Параметры Цикл Если Параметр.Тип <> ВозможныеКлючиПараметров.ПараметрДляТаблицы Тогда @@ -902,10 +988,12 @@ ИмяПараметра = Параметр.Значение; Параметр.Значение = ЗначенияПараметров[ИмяПараметра]; - СтрокаДерева.Тело = СтрЗаменить(СтрокаДерева.Тело, "<"+ИмяПараметра+">", "<"+Параметр.Значение+">"); + СтрокаДерева.Тело = СтрЗаменить(СтрокаДерева.Тело, + "<" + ИмяПараметра + ">", "<" + Параметр.Значение + ">"); - Лог.Отладка(СтрШаблон("ИмяПараметра из таблицы <%1>, новое значение <%2>, ЗначенияПараметров[ИмяПараметра] <%3>, тело узла - %4, тип %5 ", - ИмяПараметра, Параметр.Значение, ЗначенияПараметров[ИмяПараметра], СтрокаДерева.Тело, Параметр.Тип)); + Лог.Отладка("ИмяПараметра из таблицы <%1>, новое значение <%2>, ЗначенияПараметров[ИмяПараметра] <%3>, + |тело узла - %4, тип %5 ", + ИмяПараметра, Параметр.Значение, ЗначенияПараметров[ИмяПараметра], СтрокаДерева.Тело, Параметр.Тип); КонецЦикла; КонецЕсли; Для каждого ПодчиненнаяСтрока Из СтрокаДерева.Строки Цикл @@ -913,11 +1001,13 @@ КонецЦикла; КонецПроцедуры -Процедура ВставитьУзлыКонтекстовВУзлыСценариевПодчиненныхКонтексту(СтрокиДерева, Знач СчетчикСтрокиВДереве = 0, Знач УзелКонтекста = Неопределено) +Процедура ВставитьУзлыКонтекстовВУзлыСценариевПодчиненныхКонтексту(СтрокиДерева, Знач СчетчикСтрокиВДереве = 0, + Знач УзелКонтекста = Неопределено) Для Счетчик = СчетчикСтрокиВДереве По СтрокиДерева.Количество() -1 Цикл СтрокаДерева = СтрокиДерева[Счетчик]; - Лог.Отладка(" Лексема <%1>, Тело <%2>, уровень <%3>, уровень() %4", СтрокаДерева.Лексема, СтрокаДерева.Тело, СтрокаДерева.УровеньЛексемы, СтрокаДерева.Уровень()); + Лог.Отладка(" Лексема <%1>, Тело <%2>, уровень <%3>, уровень() %4", + СтрокаДерева.Лексема, СтрокаДерева.Тело, СтрокаДерева.УровеньЛексемы, СтрокаДерева.Уровень()); Если СтрокаДерева.Уровень() > 1 Тогда Прервать; КонецЕсли; @@ -946,7 +1036,7 @@ Процедура ВставитьУзелКонтекста(Знач МассивСтрокДляВставкиКонтекста, Знач УзелКонтекста) Для каждого СтрокаСценария Из МассивСтрокДляВставкиКонтекста Цикл - Лог.Отладка(СтрШаблон("Вставляю контекст для строки <%1>, контекст <%2>", СтрокаСценария.Тело, УзелКонтекста.Тело)); + Лог.Отладка("Вставляю контекст для строки <%1>, контекст <%2>", СтрокаСценария.Тело, УзелКонтекста.Тело); НоваяСтрока = СтрокаСценария.Строки.Вставить(0); СкопироватьДерево(НоваяСтрока, УзелКонтекста); @@ -999,7 +1089,8 @@ КонецЕсли; КонецЦикла; КонецЕсли; - Если ОчереднаяСтрока = Неопределено или Лев(СокрЛ(ОчереднаяСтрока), ДлинаСтрокиНачалаМногострочногоТекста) = ВозможныеТипыНачалаСтроки.МногострочныйТекст Тогда + Если ОчереднаяСтрока = Неопределено + или Лев(СокрЛ(ОчереднаяСтрока), ДлинаСтрокиНачалаМногострочногоТекста) = ВозможныеТипыНачалаСтроки.МногострочныйТекст Тогда Прервать; КонецЕсли; // проверю, нет ли в отсекаемоей левой части строки непробельных символов, которые нужно сохранить @@ -1011,7 +1102,8 @@ Если Прав(МногострочнаяСтрока, 1) = Символы.ПС Тогда МногострочнаяСтрока = Сред(МногострочнаяСтрока, 1, СтрДлина(МногострочнаяСтрока) - 1); КонецЕсли; - МногострочнаяСтрока = ВозможныеТипыНачалаСтроки.МногострочныйТекст + Символы.ПС + МногострочнаяСтрока + Символы.ПС + ВозможныеТипыНачалаСтроки.МногострочныйТекст; + МногострочнаяСтрока = ВозможныеТипыНачалаСтроки.МногострочныйТекст + Символы.ПС + МногострочнаяСтрока + + Символы.ПС + ВозможныеТипыНачалаСтроки.МногострочныйТекст; Возврат МногострочнаяСтрока; КонецФункции // ПолучитьМногострочныйТекст() From dd7ae1d31f8f800d3aebf1efec1e586766d53812 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 17 Dec 2016 19:15:55 +0300 Subject: [PATCH 14/42] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=85=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 22 ++++++++------ src/bdd-generate.os | 5 ++-- src/gherkin-read.os | 64 ++++++++++++++++++++--------------------- src/junit-report-gen.os | 2 +- 4 files changed, 49 insertions(+), 44 deletions(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index def8998..52ef1fd 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -75,11 +75,11 @@ // } Функция ВыполнитьФичу(Знач ПарамФайлФичи, Знач ФайлБиблиотек = Неопределено, Знач ИскатьВПодкаталогах = Истина, - Знач арамИспользоватьБыстрыйОстановНаОшибке = Ложь, Знач арамИмяЭлементаСценария = "") Экспорт + Знач ПарамИспользоватьБыстрыйОстановНаОшибке = Ложь, Знач ПарамИмяЭлементаСценария = "") Экспорт ФайлФичи = ПарамФайлФичи; - ИспользоватьБыстрыйОстановНаОшибке = арамИспользоватьБыстрыйОстановНаОшибке; - ИмяЭлементаСценария = арамИмяЭлементаСценария; + ИспользоватьБыстрыйОстановНаОшибке = ПарамИспользоватьБыстрыйОстановНаОшибке; + ИмяЭлементаСценария = ПарамИмяЭлементаСценария; НаборБиблиотечныхШагов = ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек); Лог.Отладка("Найдено библиотечных шагов: %1 шт.", @@ -221,7 +221,8 @@ РезультатыРазбора = ЧитательГеркин.ПрочитатьФайлСценария(ФайлФичи); ОписаниеИсполнителяШагов = Неопределено; - НовыйНаборБиблиотечныхШагов = ДополнитьНаборШаговИзИсполнителяШаговФичи(ФайлФичи, НаборБиблиотечныхШагов, ОписаниеИсполнителяШагов); + НовыйНаборБиблиотечныхШагов = ДополнитьНаборШаговИзИсполнителяШаговФичи(ФайлФичи, + НаборБиблиотечныхШагов, ОписаниеИсполнителяШагов); РезультатыВыполнения = ВыполнитьДеревоФич(РезультатыРазбора, НовыйНаборБиблиотечныхШагов, ОписаниеИсполнителяШагов); @@ -299,7 +300,8 @@ Возврат РезультатыВыполнения; КонецФункции -Функция ДополнитьНаборШаговИзИсполнителяШаговФичи(Знач ФайлСценария, Знач НаборБиблиотечныхШагов, ОписаниеИсполнителяШагов) +Функция ДополнитьНаборШаговИзИсполнителяШаговФичи(Знач ФайлСценария, Знач НаборБиблиотечныхШагов, + ОписаниеИсполнителяШагов) ОписаниеИсполнителяШагов = НайтиИсполнителяШагов(ФайлСценария); Если ОписаниеИсполнителяШагов <> Неопределено Тогда @@ -457,7 +459,8 @@ Для Каждого СтрокаДерева Из Узел.Строки Цикл НовыйСтатус = РекурсивноВыполнитьШаги(ОписаниеИсполнителяШагов, НаборБиблиотечныхШагов, СтрокаДерева); СтатусВыполнения = ЗапомнитьСамоеХудшееСостояние(СтатусВыполнения, НовыйСтатус); - ВыходитьПриНеудачномВыполнении = ИспользоватьБыстрыйОстановНаОшибке Или СтрокаДерева.ТипШага = ВозможныеТипыШагов.Шаг; + ВыходитьПриНеудачномВыполнении = ИспользоватьБыстрыйОстановНаОшибке + Или СтрокаДерева.ТипШага = ВозможныеТипыШагов.Шаг; Если СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден И ВыходитьПриНеудачномВыполнении Тогда Прервать; КонецЕсли; @@ -465,7 +468,8 @@ КонецЕсли; КонецЕсли; - ХукВыполненУспешно = ВыполнитьХукУзла(ЧитательГеркин.ВозможныеХуки().ПослеЗапускаСценария, ОписаниеИсполнителяШагов, Узел); + ХукВыполненУспешно = ВыполнитьХукУзла(ЧитательГеркин.ВозможныеХуки().ПослеЗапускаСценария, + ОписаниеИсполнителяШагов, Узел); Если Не ХукВыполненУспешно Тогда СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался; КонецЕсли; @@ -515,12 +519,12 @@ Исключение Инфо = ИнформацияОбОшибке(); - текстОшибки = ПодробноеПредставлениеОшибки(Инфо); + ТекстОшибки = ПодробноеПредставлениеОшибки(Инфо); Рез = Ложь; ПредставлениеШага = СтрШаблон("Не удалось выполнить хук <%1> для шага <%2> |%3 - |%4", АдресХука, ИмяФайлаШагов, ПредставлениеШага, текстОшибки); + |%4", АдресХука, ИмяФайлаШагов, ПредставлениеШага, ТекстОшибки); ВывестиСообщение(ПредставлениеШага, ВозможныеСтатусыВыполнения.Сломался); Узел.ОписаниеОшибкиВыполнения = ПредставлениеШага; diff --git a/src/bdd-generate.os b/src/bdd-generate.os index 4421024..8853f57 100644 --- a/src/bdd-generate.os +++ b/src/bdd-generate.os @@ -350,7 +350,8 @@ КонецПроцедуры Процедура ЗаписатьОставшеесяТелоВФайл(ТаблицаМодуляШагов, НаборМетодовМодуляШагов, Буфер) - Ожидаем.Что(НаборМетодовМодуляШагов.Количество(), "Ожидали, что НаборМетодовМодуляШагов имеет количество > 0, а это не так") + Ожидаем.Что(НаборМетодовМодуляШагов.Количество(), + "Ожидали, что НаборМетодовМодуляШагов имеет количество > 0, а это не так") .Больше(0); ПоследняяСтрока = НаборМетодовМодуляШагов[НаборМетодовМодуляШагов.Количество() - 1]; @@ -519,7 +520,7 @@ Рез.Вставить("КонецМетода", Новый РегулярноеВыражение("^\s*(КонецФункции|КонецПроцедуры)")); - ИмяСпецМетода =ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов(); + ИмяСпецМетода = ЧитательГеркин.НаименованиеФункцииПолученияСпискаШагов(); Рез.Вставить("ФункцияПолучитьСписокШагов", Новый РегулярноеВыражение(СтрШаблон("^\s*Функция\s+%1\s*\(.+Экспорт", ИмяСпецМетода))); diff --git a/src/gherkin-read.os b/src/gherkin-read.os index e3da635..9c677ac 100644 --- a/src/gherkin-read.os +++ b/src/gherkin-read.os @@ -1003,7 +1003,7 @@ Процедура ВставитьУзлыКонтекстовВУзлыСценариевПодчиненныхКонтексту(СтрокиДерева, Знач СчетчикСтрокиВДереве = 0, Знач УзелКонтекста = Неопределено) - Для Счетчик = СчетчикСтрокиВДереве По СтрокиДерева.Количество() -1 Цикл + Для Счетчик = СчетчикСтрокиВДереве По СтрокиДерева.Количество() - 1 Цикл СтрокаДерева = СтрокиДерева[Счетчик]; Лог.Отладка(" Лексема <%1>, Тело <%2>, уровень <%3>, уровень() %4", @@ -1052,7 +1052,7 @@ Язык = ""; Поз = Найти(ОчереднаяСтрока, МЕТКА_ЯЗЫКА); Если Поз > 0 Тогда - Язык = СокрЛП(Сред(ОчереднаяСтрока, Поз+СтрДлина(МЕТКА_ЯЗЫКА))); + Язык = СокрЛП(Сред(ОчереднаяСтрока, Поз + СтрДлина(МЕТКА_ЯЗЫКА))); КонецЕсли; Возврат Язык; КонецФункции @@ -1094,7 +1094,7 @@ Прервать; КонецЕсли; // проверю, нет ли в отсекаемоей левой части строки непробельных символов, которые нужно сохранить - ПозицияПервогоНеПробельногоСимвола = НайтиПозициюПервогоНеПробельногоСимвола(Лев(ОчереднаяСтрока, Отступ-1)); + ПозицияПервогоНеПробельногоСимвола = НайтиПозициюПервогоНеПробельногоСимвола(Лев(ОчереднаяСтрока, Отступ - 1)); ДобавляемаяСтрока = Сред(ОчереднаяСтрока, Мин(Отступ, ПозицияПервогоНеПробельногоСимвола)); МногострочнаяСтрока = МногострочнаяСтрока + ДобавляемаяСтрока + Символы.ПС; @@ -1110,7 +1110,7 @@ Функция НайтиПозициюПервогоНеПробельногоСимвола(Знач Строка) КоллекцияГруппСовпадений = РегулярныеВыражения.ПробельныеСимволы.НайтиСовпадения(Строка); Если КоллекцияГруппСовпадений.Количество() = 0 Тогда - Возврат СтрДлина(Строка)+1; + Возврат СтрДлина(Строка) + 1; КонецЕсли; Совпадение = КоллекцияГруппСовпадений[0]; Значение = Совпадение.Группы[0].Значение; @@ -1278,34 +1278,34 @@ Функция СоздатьНаборЗаменДляНормализацииАдресаШага() Соответствие = Новый Соответствие; - Соответствие.Вставить(" ","_"); - Соответствие.Вставить(",","_"); - Соответствие.Вставить("(","_"); - Соответствие.Вставить(")","_"); - Соответствие.Вставить(";","_"); - Соответствие.Вставить(".","_"); - - Соответствие.Вставить("`","_"); - Соответствие.Вставить("~","_"); - Соответствие.Вставить("!","_"); - Соответствие.Вставить("@","_"); - Соответствие.Вставить("#","_"); - Соответствие.Вставить("$","_"); - Соответствие.Вставить("%","_"); - Соответствие.Вставить("^","_"); - Соответствие.Вставить("&","_"); - Соответствие.Вставить("*","_"); - Соответствие.Вставить("'","_"); - Соответствие.Вставить("/","_"); - Соответствие.Вставить("\","_"); - Соответствие.Вставить(":","_"); - Соответствие.Вставить("-","_"); - Соответствие.Вставить("+","_"); - Соответствие.Вставить("=","_"); - Соответствие.Вставить("№","_"); - Соответствие.Вставить("?","_"); - Соответствие.Вставить("<","_"); - Соответствие.Вставить(">","_"); + Соответствие.Вставить(" ", "_"); + Соответствие.Вставить(",", "_"); + Соответствие.Вставить("(", "_"); + Соответствие.Вставить(")", "_"); + Соответствие.Вставить(";", "_"); + Соответствие.Вставить(".", "_"); + + Соответствие.Вставить("`", "_"); + Соответствие.Вставить("~", "_"); + Соответствие.Вставить("!", "_"); + Соответствие.Вставить("@", "_"); + Соответствие.Вставить("#", "_"); + Соответствие.Вставить("$", "_"); + Соответствие.Вставить("%", "_"); + Соответствие.Вставить("^", "_"); + Соответствие.Вставить("&", "_"); + Соответствие.Вставить("*", "_"); + Соответствие.Вставить("'", "_"); + Соответствие.Вставить("/", "_"); + Соответствие.Вставить("\", "_"); + Соответствие.Вставить(":", "_"); + Соответствие.Вставить("-", "_"); + Соответствие.Вставить("+", "_"); + Соответствие.Вставить("=", "_"); + Соответствие.Вставить("№", "_"); + Соответствие.Вставить("?", "_"); + Соответствие.Вставить("<", "_"); + Соответствие.Вставить(">", "_"); Возврат Соответствие; КонецФункции // СоздатьНаборЗаменДляНормализацииАдресаШага() diff --git a/src/junit-report-gen.os b/src/junit-report-gen.os index d5801da..a5403af 100644 --- a/src/junit-report-gen.os +++ b/src/junit-report-gen.os @@ -52,7 +52,7 @@ Для Каждого УзелСценария Из Узел.Строки Цикл Если УзелСценария.ТипШага <> ВозможныеТипыШагов.Сценарий Тогда - Продолжить + Продолжить; КонецЕсли; Для Каждого УзелШага Из УзелСценария.Строки Цикл Если УзелШага.ТипШага = ВозможныеТипыШагов.Шаг Тогда From 3557f4e13cb12235a17db844c92d26acd5175bc7 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 20 Dec 2016 19:34:33 +0300 Subject: [PATCH 15/42] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20=D0=94=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=B8=D0=BD=D1=81=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20=D1=80=D1=83=D1=81=D1=81=D0=BA=D0=BE=D0=B9=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B5=20=D0=9C?= =?UTF-8?q?=D0=B5=D0=BB=D0=BA=D0=B8=D0=B9=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B2=D1=8B=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20=D1=81?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3abf4d1..bfaa176 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,11 +1,22 @@ #!groovy node("slave") { + // ВНИМАНИЕ: + // Jenkins и его ноды нужно запускать с кодировкой UTF-8 + // строка конфигурации для запуска Jenkins + // -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -Dfile.encoding=UTF-8 -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war" + // + // строка для запуска нод + // @"C:\Program Files (x86)\Jenkins\jre\bin\java.exe" -Dfile.encoding=UTF-8 -jar slave.jar -jnlpUrl http://localhost:8080/computer/slave/slave-agent.jnlp -secret XXX + // подставляйте свой путь к java, порту Jenkins и секретному ключу + // + // Если запускать Jenkins не в режиме UTF-8, тогда нужно поменять метод cmd в конце кода, применив комментарий к методу + def isUnix = isUnix(); stage "checkout" checkout scm - if (isUnix) {sh 'git submodule update --init'} else {bat "git submodule update --init"} + cmd('git submodule update --init') stage "checkout 1testrunner" checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: '1testrunner']], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/artbear/1testrunner.git']]]) @@ -13,7 +24,7 @@ node("slave") { stage "testing with testrunner.os" command = """oscript ./1testrunner/testrunner.os -runall ./tests xddReportPath ./tests""" - if (isUnix) {sh "${command}"} else {bat "@chcp 1251 > nul \n${command}"} + cmd(command) step([$class: 'JUnitResultArchiver', testResults: '**/tests/*.xml']) @@ -23,11 +34,7 @@ node("slave") { def errors = [] try{ - if (isUnix){ - sh "${command}" - } else { - bat "@chcp 1251 > nul \n${command}" - } + cmd(command) } catch (e) { errors << "BDD status : ${e}" } @@ -41,4 +48,9 @@ node("slave") { step([$class: 'ArtifactArchiver', artifacts: '**/bdd-exec.log', fingerprint: true]) step([$class: 'JUnitResultArchiver', testResults: '**/bdd*.xml']) -} \ No newline at end of file +} + +def cmd(command) { + // TODO при запуске Jenkins не в режиме UTF-8 нужно написать chcp 1251 вместо chcp 65001 + if (isUnix()){ sh "${command}" } else {bat "chcp 65001\n${command}"} +} From b2054c98eacca4f39f6f361b7d3fe329688ba5ca Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 20 Dec 2016 19:50:02 +0300 Subject: [PATCH 16/42] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B,=20=D1=80=D0=B5?= =?UTF-8?q?=D1=88=D0=B8=D0=B2=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 69 +++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 52ef1fd..847756d 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -112,6 +112,16 @@ Возврат РезультатыВыполнения; КонецФункции +Функция ПолучитьИтоговыйСтатусВыполнения(Знач РезультатыВыполнения) Экспорт + ИтоговыйСтатусВыполнения = ВозможныеСтатусыВыполнения.НеВыполнялся; + Для каждого РезультатВыполненияФичи Из РезультатыВыполнения.Строки Цикл + ИтоговыйСтатусВыполнения = ЗапомнитьСамоеХудшееСостояние(РезультатВыполненияФичи.СтатусВыполнения, + ИтоговыйСтатусВыполнения); + КонецЦикла; + + Возврат ИтоговыйСтатусВыполнения; +КонецФункции + // Возвращается структура, ключ - ТипШага, значение - соответствие из СтатусыВыполненияДляПодсчета (ключ - статус выполнения, значение - количество) Функция ПолучитьИтоговыеРезультатыВыполнения(РезультатыВыполнения, МассивИтогов) Экспорт Если МассивИтогов = Неопределено Тогда @@ -197,6 +207,30 @@ Возврат ВозможныеКодыВозвратовПроцесса; КонецФункции // ВозможныеКодыВозвратовПроцесса() + +// возвращает Неопределено, если не найдено, или соответствие, где ключ - имя шага, значение - Структура. +// В структуре есть поля +// "Исполнитель" - объект-исполнитель шага (os-скрипт) +// "Файл" - объект-файл с информацией о файле-исполнителе шага +Функция ПолучитьНаборБиблиотечныхШагов(Знач ФайлБиблиотек) Экспорт + Если Не ЗначениеЗаполнено(ФайлБиблиотек) Тогда + Возврат Неопределено; + КонецЕсли; + КоллекцияШагов = Новый Структура; + + Лог.Отладка("Получение всех шагов из библиотеки %1", ФайлБиблиотек.ПолноеИмя); + МассивОписанийИсполнителяШагов = ПолучитЬМассивОписанийИсполнителяШагов(ФайлБиблиотек); + Для каждого ОписаниеИсполнителяШагов Из МассивОписанийИсполнителяШагов Цикл + Исполнитель = ОписаниеИсполнителяШагов.Исполнитель; + МассивОписанийШагов = ПолучитьМассивОписанийШагов(Исполнитель); + Для каждого ИмяШага Из МассивОписанийШагов Цикл + АдресШага = ЧитательГеркин.НормализоватьАдресШага(ИмяШага); + ДобавитьАдресШагаВКоллекциюШагов(КоллекцияШагов, АдресШага, ИмяШага, ОписаниеИсполнителяШагов, Ложь); + КонецЦикла; + КонецЦикла; + Возврат КоллекцияШагов; +КонецФункции // ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек) + // Возвращает имя лога 1bdd // // Возвращаемое значение: @@ -229,29 +263,6 @@ Возврат РезультатыВыполнения; КонецФункции -// возвращает Неопределено, если не найдено, или соответствие, где ключ - имя шага, значение - Структура. -// В структуре есть поля -// "Исполнитель" - объект-исполнитель шага (os-скрипт) -// "Файл" - объект-файл с информацией о файле-исполнителе шага -Функция ПолучитьНаборБиблиотечныхШагов(Знач ФайлБиблиотек) Экспорт //TODO перенести в секцию публичных методов или вообще в другой класс - Если Не ЗначениеЗаполнено(ФайлБиблиотек) Тогда - Возврат Неопределено; - КонецЕсли; - КоллекцияШагов = Новый Структура; - - Лог.Отладка("Получение всех шагов из библиотеки %1", ФайлБиблиотек.ПолноеИмя); - МассивОписанийИсполнителяШагов = ПолучитЬМассивОписанийИсполнителяШагов(ФайлБиблиотек); - Для каждого ОписаниеИсполнителяШагов Из МассивОписанийИсполнителяШагов Цикл - Исполнитель = ОписаниеИсполнителяШагов.Исполнитель; - МассивОписанийШагов = ПолучитьМассивОписанийШагов(Исполнитель); - Для каждого ИмяШага Из МассивОписанийШагов Цикл - АдресШага = ЧитательГеркин.НормализоватьАдресШага(ИмяШага); - ДобавитьАдресШагаВКоллекциюШагов(КоллекцияШагов, АдресШага, ИмяШага, ОписаниеИсполнителяШагов, Ложь); - КонецЦикла; - КонецЦикла; - Возврат КоллекцияШагов; -КонецФункции // ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек) - // возвращает Массив структур. // В структуре есть поля // "Исполнитель" - объект-исполнитель шага (os-скрипт) @@ -589,7 +600,7 @@ Исключение Инфо = ИнформацияОбОшибке(); - текстОшибки = ПодробноеПредставлениеОшибки(Инфо); + ТекстОшибки = ПодробноеПредставлениеОшибки(Инфо); ПредставлениеШага = ""; Если Инфо.Параметры = ЧитательГеркин.ПараметрИсключенияДляЕщеНеРеализованногоШага() Тогда @@ -637,16 +648,6 @@ Возврат РезультатВыполнения; КонецФункции // СобратьЕдиноеДеревоИзНабораРезультатовВыполнения(НаборРезультатовВыполнения) -Функция ПолучитьИтоговыйСтатусВыполнения(Знач РезультатыВыполнения) Экспорт //TODO перенести в секцию публичных методов или вообще в другой класс - ИтоговыйСтатусВыполнения = ВозможныеСтатусыВыполнения.НеВыполнялся; - Для каждого РезультатВыполненияФичи Из РезультатыВыполнения.Строки Цикл - ИтоговыйСтатусВыполнения = ЗапомнитьСамоеХудшееСостояние(РезультатВыполненияФичи.СтатусВыполнения, - ИтоговыйСтатусВыполнения); - КонецЦикла; - - Возврат ИтоговыйСтатусВыполнения; -КонецФункции - Процедура РекурсивноПосчитатьИтогиВыполнения(Узел, СтруктураИтогов) Если ТипЗнч(Узел) <> Тип("ДеревоЗначений") Тогда НужныйИтог = СтруктураИтогов.Получить(Узел.ТипШага); From 511ec25ee92279cd4041f268a2abc278040b9fd3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 20 Dec 2016 19:55:59 +0300 Subject: [PATCH 17/42] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B,=20=D1=80=D0=B5?= =?UTF-8?q?=D1=88=D0=B8=D0=B2=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-generate.os | 1 - src/bdd.os | 1 - src/gherkin-read.os | 42 ++++++++++++++++++++--------------------- src/junit-report-gen.os | 4 ++-- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/bdd-generate.os b/src/bdd-generate.os index 8853f57..c18edab 100644 --- a/src/bdd-generate.os +++ b/src/bdd-generate.os @@ -272,7 +272,6 @@ НормализованныйАдресШага = ЧитательГеркин.НормализоватьАдресШага(ИмяСпецМетода); ОписаниеМетода = НаборМетодовМодуляШагов.Найти(НормализованныйАдресШага, "НормализованноеИмяМетода"); Если ОписаниеМетода = Неопределено Тогда - //TODO если в коде непустого файла шагов нет метода ПолучитьСписокШагов, значит, нужно его туда добавить ВызватьИсключение СтрШаблон("Не найден метод %2 для файла шагов <%1>", ФайлШагов.ПолноеИмя, ИмяСпецМетода); КонецЕсли; ВывестиВБуферСтрокиТаблицы(Буфер, ТаблицаМодуляШагов, ОписаниеМетода.НомерСтрокиБлокаДоМетода, diff --git a/src/bdd.os b/src/bdd.os index 56e1524..12402e6 100644 --- a/src/bdd.os +++ b/src/bdd.os @@ -258,7 +258,6 @@ Возврат ФайлБиблиотек; КонецФункции // () -// TODO обход бага https://github.com/EvilBeaver/OneScript/issues/273 Функция ПолучитьФайлПоПути(Знач Путь) РезФайл = Новый Файл(Путь); Если Не ЗначениеЗаполнено(РезФайл.Путь) Тогда diff --git a/src/gherkin-read.os b/src/gherkin-read.os index 9c677ac..dd293ae 100644 --- a/src/gherkin-read.os +++ b/src/gherkin-read.os @@ -187,6 +187,26 @@ Возврат ВРег(АдресШага); КонецФункции // НормализоватьАдресШага() +// TODO перенести экспортный метод СформироватьАдресШага в начало метода +Функция СформироватьАдресШага(Знач ТелоШага) Экспорт + АдресШага = ""; + + МассивПодстрок = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ТелоШага, " ", Истина); + Для Каждого Элемент Из МассивПодстрок Цикл + Если ЭтоКлючПараметра(Элемент) Тогда + Лог.Отладка("Пропускаю Элемент %1", Элемент); + Продолжить; + КонецЕсли; + АдресШага = АдресШага + ТРег(Элемент); + КонецЦикла; + + Для каждого КлючЗначение Из НаборЗаменДляНормализацииАдресаШага Цикл + АдресШага = СтрЗаменить(АдресШага, КлючЗначение.Ключ, КлючЗначение.Значение); + КонецЦикла; + + Возврат АдресШага; +КонецФункции + Функция ПараметрИсключенияДляЕщеНеРеализованногоШага() Экспорт Возврат "Не реализовано."; КонецФункции @@ -503,7 +523,7 @@ Если НовыйУровеньЛексемы = УровеньЛексемы Тогда Продолжить; - ИначеЕсли НовыйУровеньЛексемы > УровеньЛексемы Тогда // TODO здесь должны быть равнозначные узлы. Например, сценарий/примеры + ИначеЕсли НовыйУровеньЛексемы > УровеньЛексемы Тогда // здесь должны быть равнозначные узлы. Например, сценарий/примеры Лог.Отладка(СтрШаблон("Создаю подчиненный узел дерева фич, лексема %1, Индекс %2, уровень %3", НоваяЛексема, Индекс, НовыйУровеньЛексемы)); ЗаполнитьДеревоФич(НайденныеЛексемы, НоваяСтрока.Строки, Индекс); @@ -780,26 +800,6 @@ Возврат ТипыШагов[Лексема]; КонецФункции -// TODO перенести экспортный метод СформироватьАдресШага в начало метода -Функция СформироватьАдресШага(Знач ТелоШага) Экспорт - АдресШага = ""; - - МассивПодстрок = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ТелоШага, " ", Истина); - Для Каждого Элемент Из МассивПодстрок Цикл - Если ЭтоКлючПараметра(Элемент) Тогда - Лог.Отладка("Пропускаю Элемент %1", Элемент); - Продолжить; - КонецЕсли; - АдресШага = АдресШага + ТРег(Элемент); - КонецЦикла; - - Для каждого КлючЗначение Из НаборЗаменДляНормализацииАдресаШага Цикл - АдресШага = СтрЗаменить(АдресШага, КлючЗначение.Ключ, КлючЗначение.Значение); - КонецЦикла; - - Возврат АдресШага; -КонецФункции - Функция ЭтоКлючПараметра(Знач Строка) Для Каждого КлючЗначение Из ВозможныеКлючиПараметров Цикл Если КлючЗначение.Значение = Строка Тогда diff --git a/src/junit-report-gen.os b/src/junit-report-gen.os index a5403af..e433af0 100644 --- a/src/junit-report-gen.os +++ b/src/junit-report-gen.os @@ -47,7 +47,7 @@ ЗаписьXML.ЗаписатьАтрибут("name", Узел.Тело); - ЗаписьXML.ЗаписатьНачалоЭлемента("properties");//TODO нужен ли пустой блок properties + ЗаписьXML.ЗаписатьНачалоЭлемента("properties"); ЗаписьXML.ЗаписатьКонецЭлемента(); Для Каждого УзелСценария Из Узел.Строки Цикл @@ -85,7 +85,7 @@ Процедура ЗаполнитьРезультатТестовогоСлучая(ЗаписьXML, Знач УзелСценария, Знач УзелШага) ЗаписьXML.ЗаписатьНачалоЭлемента("testcase"); - ЗаписьXML.ЗаписатьАтрибут("classname", УзелСценария.Тело);//TODO решить, какое выбрать classname для сценария + ЗаписьXML.ЗаписатьАтрибут("classname", УзелСценария.Тело); ЗаписьXML.ЗаписатьАтрибут("name", УзелШага.Тело); ТипСостоянияJUnit = ПолучитьТипыСостоянияJUnit()[УзелШага.СтатусВыполнения]; From 19bf561d23ff1dc75fbbc9d95d6a79b31f67acf8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 15:50:11 +0300 Subject: [PATCH 18/42] =?UTF-8?q?=D0=92=20=D1=81=D0=BB=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=B0=D0=BB=D0=B8=D1=81=D1=8C=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81=D0=BE=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B0=D1=85=20:(=20=D0=B1=D0=B5=D0=B7=20?= =?UTF-8?q?=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D1=83=D1=89=D0=B5=D0=B3=D0=BE=20=D1=88=D0=B0=D0=B3=D0=B0?= =?UTF-8?q?=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 847756d..70de4e3 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -553,7 +553,7 @@ Если Узел.ТипШага = ВозможныеТипыШагов.Шаг Тогда СтатусВыполнения = ВыполнитьШагСценария(Узел.АдресШага, Узел.Параметры, НаборБиблиотечныхШагов, Узел.Тело, Узел.ОписаниеОшибкиВыполнения); - + Если СтатусВыполнения <> ВозможныеСтатусыВыполнения.Пройден Тогда Отступ = ПолучитьОтступ(ТекущийУровень); Лог.Информация(Отступ + ПредставленияСтатусовВыполнения[СтатусВыполнения]); @@ -602,21 +602,22 @@ Инфо = ИнформацияОбОшибке(); ТекстОшибки = ПодробноеПредставлениеОшибки(Инфо); - ПредставлениеШага = ""; + ОписаниеОшибкиВыполнения = СтрШаблон("У шага <%1>", ПредставлениеШага); Если Инфо.Параметры = ЧитательГеркин.ПараметрИсключенияДляЕщеНеРеализованногоШага() Тогда СтатусВыполнения = ВозможныеСтатусыВыполнения.НеРеализован; ИначеЕсли Инфо.Описание = "Слишком много фактических параметров" Тогда //в случае неверного разбора можем получить неверный адрес или неверные параметры СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался; - ПредставлениеШага = ПредставлениеШага + Символы.ПС + текстОшибки + Символы.ПС + + ОписаниеОшибкиВыполнения = ОписаниеОшибкиВыполнения + Символы.ПС + текстОшибки + Символы.ПС + СтрШаблон("Дополнительно: Для шага <%1> передано или неверное количество параметров %2 |или неверные параметры <%3>", АдресШага, МассивПараметров.Количество(), СтрокаПараметров); Иначе СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался; - ПредставлениеШага = ПредставлениеШага + Символы.ПС + текстОшибки; + ОписаниеОшибкиВыполнения = ОписаниеОшибкиВыполнения + Символы.ПС + текстОшибки; КонецЕсли; - ОписаниеОшибкиВыполнения = ПредставлениеШага; - Лог.Ошибка("ОписаниеОшибкиВыполнения %1", ОписаниеОшибкиВыполнения); + Если СтатусВыполнения = ВозможныеСтатусыВыполнения.Сломался Тогда + Лог.Ошибка(ОписаниеОшибкиВыполнения); + КонецЕсли; КонецПопытки; КонецЕсли; КонецЕсли; From 07af069ca6a84a075415c7960f451c6f45619b7d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 15:51:59 +0300 Subject: [PATCH 19/42] =?UTF-8?q?=D0=A2=D0=B8=D0=BF=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D1=87?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D1=84=D0=B8=D1=87=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D1=83=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=B8=20=D0=B5=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\274\320\260\320\275\320\264.os" | 87 +++++++++++++++++++ ...6\320\274\320\260\320\275\320\264.feature" | 17 ++++ 2 files changed, 104 insertions(+) create mode 100644 "features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" create mode 100644 "features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" diff --git "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" new file mode 100644 index 0000000..de03089 --- /dev/null +++ "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -0,0 +1,87 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать 1commands + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ОчищаюПараметрыКомандыВКонтексте"); + ВсеШаги.Добавить("ЯВключаюОтладкуЛогаСИменем"); + ВсеШаги.Добавить("ЯВыключаюОтладкуЛогаСИменем"); + ВсеШаги.Добавить("ЯВыполняюКоманду"); + ВсеШаги.Добавить("ВыводКомандыСодержит"); + ВсеШаги.Добавить("КодВозвратаКомандыРавен"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + +//очищаю параметры команды "git" в контексте +Процедура ОчищаюПараметрыКомандыВКонтексте(Знач ИмяКоманды) Экспорт + БДД.СохранитьВКонтекст("Параметры" + КлючКоманды(ИмяКоманды), ""); +КонецПроцедуры + +//я включаю отладку лога с именем "bdd" +Процедура ЯВключаюОтладкуЛогаСИменем(Знач ИмяЛога) Экспорт + Лог = Логирование.ПолучитьЛог(ИмяЛога); + Лог.УстановитьУровень(УровниЛога.Отладка); +КонецПроцедуры + +//я выключаю отладку лога с именем "bdd" +Процедура ЯВыключаюОтладкуЛогаСИменем(Знач ИмяЛога) Экспорт + Лог = Логирование.ПолучитьЛог(ИмяЛога); + Лог.УстановитьУровень(УровниЛога.Информация); +КонецПроцедуры + +//Я выполняю команду "git" +Процедура ЯВыполняюКоманду(Знач ИмяИлиТекстКоманды) Экспорт + КлючКонтекста = КлючКоманды(ИмяИлиТекстКоманды); + + Команда = БДД.ПолучитьИзКонтекста(КлючКонтекста); + Если Не ЗначениеЗаполнено(Команда) Тогда + Команда = Новый Команда; + КонецЕсли; + Команда.УстановитьКоманду(ИмяИлиТекстКоманды); + БДД.СохранитьВКонтекст(КлючКонтекста, Команда); + + Команда.Исполнить(); + +КонецПроцедуры + +//Вывод команды "git" содержит "[--version]" +Процедура ВыводКомандыСодержит(Знач ИмяКоманды, Знач ОжидаемыйВыводКоманды) Экспорт + Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); + + ВыводКоманды = Команда.ПолучитьВывод(); + Ожидаем.Что(ВыводКоманды).Содержит(ОжидаемыйВыводКоманды); +КонецПроцедуры + +//Код возврата команды "git" равен 1 +Процедура КодВозвратаКомандыРавен(Знач ИмяКоманды, Знач ОжидаемыйКодВозврата) Экспорт + + Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); + + Ожидаем.Что(Команда.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата); +КонецПроцедуры + +// { Служебные функции + +Функция КлючКоманды(Знач ИмяКоманды) + Возврат "Команда-" + ИмяКоманды; +КонецФункции +//} diff --git "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" new file mode 100644 index 0000000..4d6eda7 --- /dev/null +++ "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" @@ -0,0 +1,17 @@ +# language: ru + +Функционал: Получение версии продукта + Как Пользователь + Я хочу получать версию продукта 1bdd + Чтобы понимать актуальность продукта + +Контекст: Очищаю параметры команды + Допустим очищаю параметры команды "git" в контексте + И я включаю отладку лога с именем "git" + И я выключаю отладку лога с именем "git" + +Сценарий: Выполнение команды без параметров + Когда Я выполняю команду "git" + Тогда Вывод команды "git" содержит "[--version]" + И Код возврата команды "git" равен 1 + From 87d257bb7707b176e9dba176b19ebdf6bdf1268a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 15:52:42 +0300 Subject: [PATCH 20/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B2=20120=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20VSC=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index 80e970c..c87340e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,4 +2,5 @@ { // Entry point for OneScriptLinter. Relative path from project root folder "language-1c-bsl.linterEntryPoint": "src\bdd.os", + "editor.rulers": [120] } \ No newline at end of file From d88d916fd3928369e1ccb8ae8dd786d7584f1450 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 17:11:31 +0300 Subject: [PATCH 21/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=83=20"=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=B9=20?= =?UTF-8?q?=D1=84=D0=B8=D1=87=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D1=80=D1=8B=D1=82=D0=BE=D0=BC=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=B5=20=D1=88=D0=B0=D0=B3=D0=BE=D0=B2"=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20VSC=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1863155..13029c8 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -123,6 +123,32 @@ } } }, + { + "taskName": "Exec feature for current step def", + "args": [ + "1bdd", + "${fileDirname}/../${fileBasenameNoExtension}.feature", + "-fail-fast", + "-out", + "${workspaceRoot}/exec.log" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false, + "isTestCommand": true, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": [ + { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + ] + } + }, { "taskName": "Generate feature steps", "args": [ From 59b913f5eb662400d1f2b4ef429fb8096dce1d8b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 17:12:45 +0300 Subject: [PATCH 22/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=88=D0=B0=D0=B3=D0=B8=20=D0=BF=D0=BE=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=B8=20=D0=B8=D1=85=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\274\320\260\320\275\320\264.os" | 49 ++++++++++++++++--- ...6\320\274\320\260\320\275\320\264.feature" | 12 +++++ 2 files changed, 53 insertions(+), 8 deletions(-) diff --git "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" index de03089..0a06644 100644 --- "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" +++ "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -15,6 +15,9 @@ ВсеШаги.Добавить("ЯВыполняюКоманду"); ВсеШаги.Добавить("ВыводКомандыСодержит"); ВсеШаги.Добавить("КодВозвратаКомандыРавен"); + ВсеШаги.Добавить("ЯВыполняюКомандуCПараметрами"); + ВсеШаги.Добавить("ЯСообщаюВыводКоманды"); + ВсеШаги.Добавить("ЯДобавляюПараметрДляКоманды"); Возврат ВсеШаги; КонецФункции @@ -50,19 +53,28 @@ //Я выполняю команду "git" Процедура ЯВыполняюКоманду(Знач ИмяИлиТекстКоманды) Экспорт - КлючКонтекста = КлючКоманды(ИмяИлиТекстКоманды); - - Команда = БДД.ПолучитьИзКонтекста(КлючКонтекста); - Если Не ЗначениеЗаполнено(Команда) Тогда - Команда = Новый Команда; - КонецЕсли; - Команда.УстановитьКоманду(ИмяИлиТекстКоманды); - БДД.СохранитьВКонтекст(КлючКонтекста, Команда); + Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды); Команда.Исполнить(); КонецПроцедуры +//Я выполняю команду "git" c параметрами "--version" +Процедура ЯВыполняюКомандуCПараметрами(Знач ИмяКоманды, Знач ПараметрыКоманды) Экспорт + Команда = ПолучитьКомандуИзКонтекста(ИмяКоманды); + + Команда.ДобавитьПараметр(ПараметрыКоманды); + + Команда.Исполнить(); +КонецПроцедуры + +//Я добавляю параметр "--version" для команды "git" +Процедура ЯДобавляюПараметрДляКоманды(Знач ПараметрКоманды, Знач ИмяКоманды) Экспорт + Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); + + Команда.ДобавитьПараметр(ПараметрКоманды); +КонецПроцедуры + //Вывод команды "git" содержит "[--version]" Процедура ВыводКомандыСодержит(Знач ИмяКоманды, Знач ОжидаемыйВыводКоманды) Экспорт Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); @@ -79,7 +91,28 @@ Ожидаем.Что(Команда.ПолучитьКодВозврата(), "Код возврата").Равно(ОжидаемыйКодВозврата); КонецПроцедуры +//Я сообщаю вывод команды "git" +Процедура ЯСообщаюВыводКоманды(Знач ИмяКоманды) Экспорт + Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); + + ВыводКоманды = Команда.ПолучитьВывод(); + Сообщить(ВыводКоманды); +КонецПроцедуры + // { Служебные функции +Функция ПолучитьКомандуИзКонтекста(Знач ИмяКоманды) + + КлючКонтекста = КлючКоманды(ИмяКоманды); + Команда = БДД.ПолучитьИзКонтекста(КлючКонтекста); + + Если Не ЗначениеЗаполнено(Команда) Тогда + Команда = Новый Команда; + Команда.УстановитьКоманду(ИмяКоманды); + БДД.СохранитьВКонтекст(КлючКонтекста, Команда); + КонецЕсли; + + Возврат Команда; +КонецФункции Функция КлючКоманды(Знач ИмяКоманды) Возврат "Команда-" + ИмяКоманды; diff --git "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" index 4d6eda7..9b21de4 100644 --- "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" +++ "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" @@ -15,3 +15,15 @@ Тогда Вывод команды "git" содержит "[--version]" И Код возврата команды "git" равен 1 +Сценарий: Выполнение команды с параметрами в одной строке + Когда Я выполняю команду "git" c параметрами "--version" + Тогда Я сообщаю вывод команды "git" + И Вывод команды "git" содержит "version" + И Код возврата команды "git" равен 0 + +Сценарий: Выполнение команды с параметрами, добавляемыми раздельно + Когда Я добавляю параметр "--version" для команды "git" + И Я выполняю команду "git" + Тогда Я сообщаю вывод команды "git" + И Вывод команды "git" содержит "version" + И Код возврата команды "git" равен 0 From 5d99de863b57211520b0ba1e328cfc1897840800 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 21:45:47 +0300 Subject: [PATCH 23/42] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=B4=D0=B0=D1=80=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=88=D0=B0=D0=B3=D0=BE=D0=B2=20=D0=B8=D0=B7=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0=20"lib"=20fix=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/core/OneScriptRunner.feature | 29 ++++ ...6\320\274\320\260\320\275\320\264.feature" | 4 +- src/bdd-exec.os | 156 ++++++++++++++---- 3 files changed, 156 insertions(+), 33 deletions(-) create mode 100644 features/core/OneScriptRunner.feature diff --git a/features/core/OneScriptRunner.feature b/features/core/OneScriptRunner.feature new file mode 100644 index 0000000..871f566 --- /dev/null +++ b/features/core/OneScriptRunner.feature @@ -0,0 +1,29 @@ +# language: ru + +Функционал: Получение версии продукта + Как Пользователь + Я хочу иметь возможность запускать скрипты oscript + Чтобы я мог проще автоматизировать больше действий на OneScript + +Контекст: Очищаю параметры команды + Допустим очищаю параметры команды "oscript" в контексте + И я включаю отладку лога с именем "oscript" + И я выключаю отладку лога с именем "oscript" + +Сценарий: Выполнение команды без параметров + Когда Я выполняю команду "oscript" + Тогда Вывод команды "oscript" содержит "Version" + И Код возврата команды "oscript" равен 0 + +Сценарий: Выполнение команды с параметрами в одной строке + Когда Я выполняю команду "oscript" c параметрами "-version" + Тогда Я сообщаю вывод команды "oscript" + И Вывод команды "oscript" содержит "." + И Код возврата команды "oscript" равен 0 + +Сценарий: Выполнение команды с параметрами, добавляемыми раздельно + Когда Я добавляю параметр "-version" для команды "oscript" + И Я выполняю команду "oscript" + Тогда Я сообщаю вывод команды "oscript" + И Вывод команды "oscript" содержит "." + И Код возврата команды "oscript" равен 0 diff --git "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" index 9b21de4..30eb412 100644 --- "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" +++ "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" @@ -2,8 +2,8 @@ Функционал: Получение версии продукта Как Пользователь - Я хочу получать версию продукта 1bdd - Чтобы понимать актуальность продукта + Я хочу иметь возможность выполнять команды + Чтобы я мог проще автоматизировать больше действий на OneScript Контекст: Очищаю параметры команды Допустим очищаю параметры команды "git" в контексте diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 70de4e3..c0b74de 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -74,13 +74,25 @@ КонецПроцедуры // } +// Выполняет прогон фичи +// +// Параметры: +// ПарамФайлФичи - Файл - Файл фичи +// ФайлБиблиотек - Файл - Файл/каталог библиотечных шагов +// ИскатьВПодкаталогах - <Тип.Вид> - <описание параметра> +// ПарамИспользоватьБыстрыйОстановНаОшибке - <Тип.Вид> - <описание параметра> +// ПарамИмяЭлементаСценария - <Тип.Вид> - <описание параметра> +// +// Возвращаемое значение: +// ДеревоЗначений - Результаты выполнения фичи в виде дерева фичи +// Функция ВыполнитьФичу(Знач ПарамФайлФичи, Знач ФайлБиблиотек = Неопределено, Знач ИскатьВПодкаталогах = Истина, Знач ПарамИспользоватьБыстрыйОстановНаОшибке = Ложь, Знач ПарамИмяЭлементаСценария = "") Экспорт ФайлФичи = ПарамФайлФичи; ИспользоватьБыстрыйОстановНаОшибке = ПарамИспользоватьБыстрыйОстановНаОшибке; ИмяЭлементаСценария = ПарамИмяЭлементаСценария; - + НаборБиблиотечныхШагов = ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек); Лог.Отладка("Найдено библиотечных шагов: %1 шт.", ?(ЗначениеЗаполнено(НаборБиблиотечныхШагов), НаборБиблиотечныхШагов.Количество(), "0")); @@ -208,18 +220,35 @@ КонецФункции // ВозможныеКодыВозвратовПроцесса() -// возвращает Неопределено, если не найдено, или соответствие, где ключ - имя шага, значение - Структура. -// В структуре есть поля -// "Исполнитель" - объект-исполнитель шага (os-скрипт) -// "Файл" - объект-файл с информацией о файле-исполнителе шага -Функция ПолучитьНаборБиблиотечныхШагов(Знач ФайлБиблиотек) Экспорт +// Получает коллекцию библиотечных шагов +// +// Параметры: +// ФайлБиблиотек - Файл/Массив файлов - один файл/каталог библиотеки фич или массив файлов/каталогов библиотек фич +// +// Возвращаемое значение: +// Неопределено, если не найдено, или соответствие, где ключ - имя шага, значение - Структура. +// В структуре есть поля +// "Исполнитель" - объект-исполнитель шага (os-скрипт) +// "Файл" - объект-файл с информацией о файле-исполнителе шага +// +Функция ПолучитьНаборБиблиотечныхШагов(Знач ФайлБиблиотек, Знач ПодключатьСтандартныеБиблиотеки = Истина) Экспорт Если Не ЗначениеЗаполнено(ФайлБиблиотек) Тогда Возврат Неопределено; КонецЕсли; + + МассивФайловБиблиотек = Новый Массив; + Если ПодключатьСтандартныеБиблиотеки Тогда + ПутьСтандартнойБиблиотекиШагов = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "features", "lib"); + ФайлСтандартнойБиблиотекиШагов = Новый Файл(ПутьСтандартнойБиблиотекиШагов); + МассивФайловБиблиотек.Добавить(ФайлСтандартнойБиблиотекиШагов); + КонецЕсли; + МассивФайловБиблиотек.Добавить(ФайлБиблиотек); + КоллекцияШагов = Новый Структура; Лог.Отладка("Получение всех шагов из библиотеки %1", ФайлБиблиотек.ПолноеИмя); - МассивОписанийИсполнителяШагов = ПолучитЬМассивОписанийИсполнителяШагов(ФайлБиблиотек); + + МассивОписанийИсполнителяШагов = ПолучитЬМассивОписанийИсполнителяШагов(МассивФайловБиблиотек); Для каждого ОписаниеИсполнителяШагов Из МассивОписанийИсполнителяШагов Цикл Исполнитель = ОписаниеИсполнителяШагов.Исполнитель; МассивОписанийШагов = ПолучитьМассивОписанийШагов(Исполнитель); @@ -229,7 +258,7 @@ КонецЦикла; КонецЦикла; Возврат КоллекцияШагов; -КонецФункции // ПолучитьНаборБиблиотечныхШагов(ФайлБиблиотек) +КонецФункции // ПолучитьНаборБиблиотечныхШагов // Возвращает имя лога 1bdd // @@ -263,38 +292,103 @@ Возврат РезультатыВыполнения; КонецФункции -// возвращает Массив структур. -// В структуре есть поля -// "Исполнитель" - объект-исполнитель шага (os-скрипт) -// "Файл" - объект-файл с информацией о файле-исполнителе шага -Функция ПолучитьМассивОписанийИсполнителяШагов(Знач ФайлБиблиотек) +// <Описание функции> +// +// Параметры: +// МассивФайловБиблиотек - Массив - массив файлов/каталогов библиотек фич +// +// Возвращаемое значение: +// Массив структур - <описание возвращаемого значения> +// В структуре есть поля +// "Исполнитель" - объект-исполнитель шага (os-скрипт) +// "Файл" - объект-файл с информацией о файле-исполнителе шага +// +Функция ПолучитьМассивОписанийИсполнителяШагов(Знач МассивФайловБиблиотек) МассивОписанийИсполнителяШагов = Новый Массив; - Если Не ФайлБиблиотек.ЭтоКаталог() Тогда + + МассивФайловФич = ВыделитьПростыеФайлыФичИзМассиваБиблиотек(МассивФайловБиблиотек); + ДобавитьИсполнителейШаговДляФайловФич(МассивФайловФич, МассивОписанийИсполнителяШагов); + + МассивКаталоговФич = МассивФайловБиблиотек; + МассивИсполнителей = ПолучитьМассивФайловИсполнителейПоМассивуКаталоговФич(МассивКаталоговФич); + ДобавитьИсполнителейШаговИзМассиваФайловШагов(МассивИсполнителей, МассивОписанийИсполнителяШагов); + + Возврат МассивОписанийИсполнителяШагов; +КонецФункции // ПолучитЬМассивОписанийИсполнителяШагов + +// <Описание функции> +// +// Параметры: +// МассивФайловБиблиотек - Массив - массив файлов/каталогов библиотек фич +// +// Возвращаемое значение: +// Массив файлов фич +// +Функция ВыделитьПростыеФайлыФичИзМассиваБиблиотек(МассивФайловБиблиотек) + МассивПростыхФайловФич = Новый Массив; + МассивДляУдаления = Новый Массив; + Для Счетчик = 0 По МассивФайловБиблиотек.ВГраница() Цикл + Файл = МассивФайловБиблиотек[Счетчик]; + Если Не Файл.ЭтоКаталог() Тогда + МассивПростыхФайловФич.Добавить(Файл); + МассивДляУдаления.Вставить(0, Счетчик); + КонецЕсли; + КонецЦикла; + Для каждого Счетчик Из МассивДляУдаления Цикл + МассивФайловБиблиотек.Удалить(Счетчик); + КонецЦикла; + + Возврат МассивПростыхФайловФич; +КонецФункции + +Процедура ДобавитьИсполнителейШаговДляФайловФич(Знач МассивПростыхФайловФич, МассивОписанийИсполнителяШагов) + Для каждого ФайлБиблиотек Из МассивПростыхФайловФич Цикл ОписаниеИсполнителяШагов = НайтиИсполнителяШагов(ФайлБиблиотек); Если ЗначениеЗаполнено(ОписаниеИсполнителяШагов) Тогда МассивОписанийИсполнителяШагов.Добавить(ОписаниеИсполнителяШагов); Лог.Отладка("Нашли исполнителя шагов %1", ФайлБиблиотек.ПолноеИмя); КонецЕсли; - Иначе - МассивФайлов = НайтиФайлы(ФайлБиблиотек.ПолноеИмя, "*.os", Истина); + КонецЦикла; +КонецПроцедуры + +Процедура ДобавитьИсполнителейШаговИзМассиваФайловШагов(Знач МассивФайлов, МассивОписанийИсполнителяШагов) + Для каждого ФайлИсполнителя Из МассивФайлов Цикл + Лог.Отладка("Нашли файл, скрипт-кандидат %1", ФайлИсполнителя.ПолноеИмя); + Если ФайлИсполнителя.ЭтоКаталог() Тогда + ВызватьИсключение "Нашли каталог вместо файла-шага " + ФайлИсполнителя.ПолноеИмя; + КонецЕсли; - Для каждого ФайлИсполнителя Из МассивФайлов Цикл - Лог.Отладка("Нашли файл, скрипт-кандидат %1", ФайлБиблиотек.ПолноеИмя); - Если ФайлИсполнителя.ЭтоКаталог() Тогда - ВызватьИсключение "Нашли каталог вместо файла-шага " + ФайлИсполнителя.ПолноеИмя; - КонецЕсли; - - ПоказыватьОшибкиИсполнителей = ФайлНаходитсяВСпециальномКаталогеРеализацииШагов(ФайлИсполнителя); - ОписаниеИсполнителяШагов = ПолучитьИсполнителяШагов(ФайлИсполнителя, ПоказыватьОшибкиИсполнителей); - Если ЗначениеЗаполнено(ОписаниеИсполнителяШагов) Тогда - МассивОписанийИсполнителяШагов.Добавить(ОписаниеИсполнителяШагов); - Лог.Отладка("Нашли исполнителя шагов %1", ФайлИсполнителя.ПолноеИмя); + ПоказыватьОшибкиИсполнителей = ФайлНаходитсяВСпециальномКаталогеРеализацииШагов(ФайлИсполнителя); + ОписаниеИсполнителяШагов = ПолучитьИсполнителяШагов(ФайлИсполнителя, ПоказыватьОшибкиИсполнителей); + Если ЗначениеЗаполнено(ОписаниеИсполнителяШагов) Тогда + МассивОписанийИсполнителяШагов.Добавить(ОписаниеИсполнителяШагов); + Лог.Отладка("Нашли исполнителя шагов %1", ФайлИсполнителя.ПолноеИмя); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// МассивКаталоговФич - Файл/Массив файлов - один каталог библиотеки фич или массив каталогов библиотек фич +Функция ПолучитьМассивФайловИсполнителейПоМассивуКаталоговФич(Знач МассивКаталоговФич) + МассивФайлов = Неопределено; + Если ТипЗнч(МассивКаталоговФич) = Тип("Массив") Тогда + МассивФайлов = Новый Массив; + Для каждого Файл Из МассивКаталоговФич Цикл + Если Файл.ЭтоКаталог() Тогда + Лог.Отладка("Получение всех шагов из библиотеки %1", Файл.ПолноеИмя); + + ВременныйМассивФайлов = НайтиФайлы(Файл.ПолноеИмя, "*.os", Истина); + Для каждого ДопФайл Из ВременныйМассивФайлов Цикл + МассивФайлов.Добавить(ДопФайл); + КонецЦикла; КонецЕсли; КонецЦикла; + + Иначе + ВызватьИсключение "ПолучитьМассивОписанийИсполнителяШагов: параметр МассивКаталоговФич не задан!"; КонецЕсли; - - Возврат МассивОписанийИсполнителяШагов; -КонецФункции // ПолучитЬМассивОписанийИсполнителяШагов(ФайлБиблиотек) + + Возврат МассивФайлов; +КонецФункции // ПолучитьМассивФайловИсполнителейПоМассивуКаталоговФич() Функция ВыполнитьДеревоФич(РезультатыРазбора, Знач НаборБиблиотечныхШагов, Знач ОписаниеИсполнителяШагов) @@ -316,7 +410,7 @@ ОписаниеИсполнителяШагов = НайтиИсполнителяШагов(ФайлСценария); Если ОписаниеИсполнителяШагов <> Неопределено Тогда - НаборШаговИсполнителя = ПолучитьНаборБиблиотечныхШагов(ФайлСценария); + НаборШаговИсполнителя = ПолучитьНаборБиблиотечныхШагов(ФайлСценария, Ложь); Если ЗначениеЗаполнено(НаборШаговИсполнителя) Тогда Лог.Отладка("найдено шагов исполнителя %1", НаборШаговИсполнителя.Количество()); КонецЕсли; From e206a7d86ed7c87ac28910c779230ef18e7346b5 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 21:46:36 +0300 Subject: [PATCH 24/42] =?UTF-8?q?=D0=92=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=D1=85=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D1=8F?= =?UTF-8?q?=D1=85=20=D0=BF=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BA=D1=82=20=D0=B7=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D0=B0?= =?UTF-8?q?=D0=BB=D1=81=D1=8F=20=D1=81=20=D0=BD=D0=B5=D1=88=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=BD=D0=BE=D0=B9=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/junit-report-gen.os | 1 + 1 file changed, 1 insertion(+) diff --git a/src/junit-report-gen.os b/src/junit-report-gen.os index e433af0..7554f8e 100644 --- a/src/junit-report-gen.os +++ b/src/junit-report-gen.os @@ -112,6 +112,7 @@ ТипыСостоянияJUnit.Вставить(ВозможныеСтатусыВыполнения.Пройден, "passed"); ТипыСостоянияJUnit.Вставить(ВозможныеСтатусыВыполнения.Сломался, "failure"); ТипыСостоянияJUnit.Вставить(ВозможныеСтатусыВыполнения.НеРеализован, "skipped"); + ТипыСостоянияJUnit.Вставить(ВозможныеСтатусыВыполнения.НеВыполнялся, "skipped"); ТипыСостоянияJUnit = Новый ФиксированноеСоответствие(ТипыСостоянияJUnit); КонецЕсли; Возврат ТипыСостоянияJUnit; From a065868d072dce84d4418adb23ff6acec384dae2 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 22:10:11 +0300 Subject: [PATCH 25/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=82=201commands=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/core/OneScriptRunner.feature | 2 +- packagedef | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/features/core/OneScriptRunner.feature b/features/core/OneScriptRunner.feature index 871f566..6903b2f 100644 --- a/features/core/OneScriptRunner.feature +++ b/features/core/OneScriptRunner.feature @@ -1,6 +1,6 @@ # language: ru -Функционал: Получение версии продукта +Функционал: Выполнение команд системы Как Пользователь Я хочу иметь возможность запускать скрипты oscript Чтобы я мог проще автоматизировать больше действий на OneScript diff --git a/packagedef b/packagedef index e229ecf..f22d762 100644 --- a/packagedef +++ b/packagedef @@ -5,6 +5,7 @@ .ЗависитОт("cmdline") .ЗависитОт("tempfiles") .ЗависитОт("asserts") + .ЗависитОт("1commands") .ВключитьФайл("src") .ВключитьФайл("tests") .ВключитьФайл("features") From 161de8f7bdda53ed5c879e4f977f87edc1eb643b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 25 Dec 2016 22:18:11 +0300 Subject: [PATCH 26/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=201commands=20#101?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index bad2e2d..d23252b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,11 +12,14 @@ install: %temp%\oscript-setup.exe /silent /log="%temp%\oscript-setup.log" /saveinf="%temp%\oscript-setup-settings.txt" dir "%ProgramFiles(x86)%\OneScript\bin" + dir "%ProgramFiles(x86)%\OneScript\lib" "%ProgramFiles(x86)%\OneScript\bin\oscript.exe" -version git clone -q --branch=master https://github.com/artbear/1testrunner.git c:\projects\1testrunner + git clone -q --branch=master https://github.com/artbear/1commands.git "%ProgramFiles(x86)%\OneScript\lib\1commands" + # to disable automatic builds build: off test_script: From 413af9a77041c766b662e160b21644b51b8cb71f Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 17:55:34 +0300 Subject: [PATCH 27/42] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B3=D0=BB=D0=B0=D1=81=D0=BD=D0=BE=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=20=D0=B2=201commands?= =?UTF-8?q?=20https://github.com/artbear/1commands/issues/10=20=D0=98?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B8=D0=BC=D1=8F?= =?UTF-8?q?=20=D1=88=D0=B0=D0=B3=D0=B0=20=D0=BD=D0=B0=20"=D0=AF=20=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D1=89=D0=B0=D1=8E=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B"=20#104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/core/OneScriptRunner.feature | 2 +- ...20\232\320\276\320\274\320\260\320\275\320\264.os" | 11 ++++++----- ...2\320\276\320\274\320\260\320\275\320\264.feature" | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/features/core/OneScriptRunner.feature b/features/core/OneScriptRunner.feature index 6903b2f..f1324ee 100644 --- a/features/core/OneScriptRunner.feature +++ b/features/core/OneScriptRunner.feature @@ -6,7 +6,7 @@ Чтобы я мог проще автоматизировать больше действий на OneScript Контекст: Очищаю параметры команды - Допустим очищаю параметры команды "oscript" в контексте + Допустим Я очищаю параметры команды "oscript" в контексте И я включаю отладку лога с именем "oscript" И я выключаю отладку лога с именем "oscript" diff --git "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" index 0a06644..aade06f 100644 --- "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" +++ "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -9,7 +9,7 @@ ВсеШаги = Новый Массив; - ВсеШаги.Добавить("ОчищаюПараметрыКомандыВКонтексте"); + ВсеШаги.Добавить("ЯОчищаюПараметрыКомандыВКонтексте"); ВсеШаги.Добавить("ЯВключаюОтладкуЛогаСИменем"); ВсеШаги.Добавить("ЯВыключаюОтладкуЛогаСИменем"); ВсеШаги.Добавить("ЯВыполняюКоманду"); @@ -34,9 +34,10 @@ КонецПроцедуры -//очищаю параметры команды "git" в контексте -Процедура ОчищаюПараметрыКомандыВКонтексте(Знач ИмяКоманды) Экспорт - БДД.СохранитьВКонтекст("Параметры" + КлючКоманды(ИмяКоманды), ""); +//Я очищаю параметры команды "git" в контексте +Процедура ЯОчищаюПараметрыКомандыВКонтексте(Знач ИмяКоманды) Экспорт + Команда = ПолучитьКомандуИзКонтекста(ИмяКоманды); + Команда.УстановитьПараметры(""); КонецПроцедуры //я включаю отладку лога с именем "bdd" @@ -63,7 +64,7 @@ Процедура ЯВыполняюКомандуCПараметрами(Знач ИмяКоманды, Знач ПараметрыКоманды) Экспорт Команда = ПолучитьКомандуИзКонтекста(ИмяКоманды); - Команда.ДобавитьПараметр(ПараметрыКоманды); + Команда.УстановитьПараметры(ПараметрыКоманды); Команда.Исполнить(); КонецПроцедуры diff --git "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" index 30eb412..8fd184a 100644 --- "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" +++ "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" @@ -6,7 +6,7 @@ Чтобы я мог проще автоматизировать больше действий на OneScript Контекст: Очищаю параметры команды - Допустим очищаю параметры команды "git" в контексте + Допустим Я очищаю параметры команды "git" в контексте И я включаю отладку лога с именем "git" И я выключаю отладку лога с именем "git" From 6e1022fe524c31d83f85ea365034ab7fbe5b6c9f Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 17:57:21 +0300 Subject: [PATCH 28/42] =?UTF-8?q?=D0=A1=D1=82=D0=B0=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=BD=D1=8B=D0=B5=20=D1=88=D0=B0=D0=B3=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20#10?= =?UTF-8?q?4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2\320\265\321\200\320\272\320\260.feature" | 88 +++++++ ...21\200\320\260\321\206\320\270\320\270.os" | 217 ++++++++++++++++++ ...0\320\260\321\206\320\270\320\270.feature" | 50 ++++ 3 files changed, 355 insertions(+) create mode 100644 "features/core/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260.feature" create mode 100644 "features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" create mode 100644 "features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" diff --git "a/features/core/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260.feature" "b/features/core/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260.feature" new file mode 100644 index 0000000..5ac8c16 --- /dev/null +++ "b/features/core/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260.feature" @@ -0,0 +1,88 @@ +# language: ru + +Функционал: Выполнение файловых операций + Как Пользователь + Я хочу иметь возможность выполнять различные файловые операции в тексте фич + Чтобы я мог проще протестировать и автоматизировать больше действий на OneScript + +Контекст: Инициализация рабочего каталога и создание каталогов + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + + И Я создаю каталог "folder0" в рабочем каталоге + И Я создаю каталог "folder0/folder01" в рабочем каталоге + И Я создаю каталог "folder02" в подкаталоге "folder0" рабочего каталога + И Я создаю каталог "folder011" в подкаталоге "folder0/folder01" рабочего каталога + +Сценарий: Создание каталогов + Тогда В рабочем каталоге существует каталог "folder0" + И В рабочем каталоге существует каталог "folder0/folder01" + И В подкаталоге "folder0" рабочего каталога существует каталог "folder02" + И В подкаталоге "folder0/folder01" рабочего каталога существует каталог "folder011" + +Сценарий: Создание файлов + Когда Я создаю файл "file0.txt" в рабочем каталоге + И Я создаю файл "folder0/file01.txt" в рабочем каталоге + И Я создаю файл "file02" в подкаталоге "folder0" рабочего каталога + И Я создаю файл "file01" в подкаталоге "folder0/folder01" рабочего каталога + Тогда В рабочем каталоге существует файл "file0.txt" + И В рабочем каталоге существует файл "folder0/file01.txt" + И В подкаталоге "folder0" рабочего каталога существует файл "file02" + И В подкаталоге "folder0/folder01" рабочего каталога существует файл "file01" + +Сценарий: Копирование файлов + Когда Я копирую файл "steps-generate-tests.os" из каталога "tests" проекта в рабочий каталог + И Я копирую файл "test-report.xml" из каталога "tests/fixtures" проекта в рабочий каталог + И Я копирую файл "fixtures/БезПараметров.feature" из каталога "tests" проекта в рабочий каталог + + И Я копирую файл "steps-generate-tests.os" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога + И Я копирую файл "exec-feature-tests.os" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога + И Я копирую файл "test-report.xml" из каталога "tests/fixtures" проекта в подкаталог "folder0" рабочего каталога + И Я копирую файл "fixtures/test-report.xml" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога + + Тогда В рабочем каталоге существует файл "steps-generate-tests.os" + И В рабочем каталоге существует файл "test-report.xml" + И В рабочем каталоге существует файл "БезПараметров.feature" + И В подкаталоге "folder0" рабочего каталога существует файл "steps-generate-tests.os" + И В подкаталоге "folder0/folder01" рабочего каталога существует файл "exec-feature-tests.os" + И В подкаталоге "folder0" рабочего каталога существует файл "test-report.xml" + И В подкаталоге "folder0/folder01" рабочего каталога существует файл "test-report.xml" + +Сценарий: Копирование каталогов + Когда Я копирую каталог "fixtures" из каталога "tests" проекта в рабочий каталог + И Я копирую каталог "fixtures/step_definitions" из каталога "tests" проекта в рабочий каталог + И Я копирую каталог "step_definitions" из каталога "tests/fixtures" проекта в рабочий каталог + + И Я копирую каталог "fixtures" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога + И Я копирую каталог "fixtures/step_definitions" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога + И Я копирую каталог "step_definitions" из каталога "tests/fixtures" проекта в подкаталог "folder0/folder02" рабочего каталога + + Тогда В рабочем каталоге существует каталог "fixtures" + И В рабочем каталоге существует каталог "step_definitions" + И В подкаталоге "folder0" рабочего каталога существует каталог "fixtures" + И В подкаталоге "folder0/folder01" рабочего каталога существует каталог "step_definitions" + И В подкаталоге "folder0/folder02" рабочего каталога существует каталог "step_definitions" + +Сценарий: Управление текущим каталогом + Когда Я создаю файл "folder0/file01.txt" в рабочем каталоге + И Я установил рабочий каталог как текущий каталог + Тогда Каталог "folder0/folder01" существует + И Файл "folder0/file01.txt" существует + И Я восстановил предыдущий каталог + +Сценарий: Управление стеком текущих каталогов + Когда Я создаю файл "folder0/file01.txt" в рабочем каталоге + И Я установил рабочий каталог как текущий каталог + И Я установил подкаталог "folder0" рабочего каталога как текущий каталог + + Тогда Каталог "folder01" существует + И Файл "file01.txt" существует + И Каталог "folder0/folder01" не существует + И Файл "folder0/file01.txt" не существует + + И Я восстановил предыдущий каталог + И Каталог "folder0/folder01" существует + И Файл "folder0/file01.txt" существует + И Каталог "folder01" не существует + И Файл "file01.txt" не существует + И Я восстановил предыдущий каталог diff --git "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" new file mode 100644 index 0000000..26bea2f --- /dev/null +++ "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" @@ -0,0 +1,217 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать asserts +#Использовать fs + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВКонтекст"); + ВсеШаги.Добавить("ЯУстанавливаюВременныйКаталогКакРабочийКаталог"); + ВсеШаги.Добавить("ЯСоздаюКаталогВРабочемКаталоге"); + ВсеШаги.Добавить("ЯСоздаюКаталогВПодкаталогеРабочегоКаталога"); + ВсеШаги.Добавить("ВРабочемКаталогеСуществуетКаталог"); + ВсеШаги.Добавить("ВПодкаталогеРабочегоКаталогаСуществуетКаталог"); + ВсеШаги.Добавить("ЯСоздаюФайлВРабочемКаталоге"); + ВсеШаги.Добавить("ЯСоздаюФайлВПодкаталогеРабочегоКаталога"); + ВсеШаги.Добавить("ВРабочемКаталогеСуществуетФайл"); + ВсеШаги.Добавить("ВПодкаталогеРабочегоКаталогаСуществуетФайл"); + ВсеШаги.Добавить("ЯКопируюФайлИзКаталогаПроектаВРабочийКаталог"); + ВсеШаги.Добавить("ЯКопируюФайлИзКаталогаПроектаВПодкаталогРабочегоКаталога"); + ВсеШаги.Добавить("ЯКопируюКаталогИзКаталогаПроектаВРабочийКаталог"); + ВсеШаги.Добавить("ЯКопируюКаталогИзКаталогаПроектаВПодкаталогРабочегоКаталога"); + ВсеШаги.Добавить("ЯУстановилРабочийКаталогКакТекущийКаталог"); + ВсеШаги.Добавить("ЯУстановилПодкаталогРабочегоКаталогаКакТекущийКаталог"); + ВсеШаги.Добавить("КаталогСуществует"); + ВсеШаги.Добавить("ФайлСуществует"); + ВсеШаги.Добавить("КаталогНеСуществует"); + ВсеШаги.Добавить("ФайлНеСуществует"); + ВсеШаги.Добавить("ЯВосстановилПредыдущийКаталог"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + +//Я создаю временный каталог и сохраняю его в контекст +Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВКонтекст() Экспорт + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + БДД.СохранитьВКонтекст("ВременныйКаталог", ВременныйКаталог); +КонецПроцедуры + +//Я устанавливаю временный каталог как рабочий каталог +Процедура ЯУстанавливаюВременныйКаталогКакРабочийКаталог() Экспорт + БДД.СохранитьВКонтекст("РабочийКаталог", БДД.ПолучитьИзКонтекста("ВременныйКаталог")); +КонецПроцедуры + +//Я создаю каталог "folder0" в рабочем каталоге +Процедура ЯСоздаюКаталогВРабочемКаталоге(Знач ПутьНовогоКаталога) Экспорт + НовыйПуть = ОбъединитьПути(РабочийКаталог(), ПутьНовогоКаталога); + СоздатьКаталог(НовыйПуть); +КонецПроцедуры + +//Я создаю каталог "folder02" в подкаталоге "folder0" рабочего каталога +Процедура ЯСоздаюКаталогВПодкаталогеРабочегоКаталога(Знач ПутьНовогоКаталога, Знач ПутьКаталога) Экспорт + НовыйПуть = ОбъединитьПути(РабочийКаталог(), ПутьКаталога, ПутьНовогоКаталога); + СоздатьКаталог(НовыйПуть); +КонецПроцедуры + +//Я создаю файл "file0.txt" в рабочем каталоге +Процедура ЯСоздаюФайлВРабочемКаталоге(Знач ПутьФайла) Экспорт + НовыйПуть = ОбъединитьПути(РабочийКаталог(), ПутьФайла); + ЗаписьТекста = Новый ЗаписьТекста(НовыйПуть); + ЗаписьТекста.Записать("Текст файла"); + ЗаписьТекста.Закрыть(); +КонецПроцедуры + +//Я создаю файл "file02" в подкаталоге "folder0" рабочего каталога +Процедура ЯСоздаюФайлВПодкаталогеРабочегоКаталога(Знач ПутьФайла, Знач ПутьКаталога) Экспорт + НовыйПуть = ОбъединитьПути(РабочийКаталог(), ПутьКаталога, ПутьФайла); + ЗаписьТекста = Новый ЗаписьТекста(НовыйПуть); + ЗаписьТекста.Записать("Текст файла"); + ЗаписьТекста.Закрыть(); +КонецПроцедуры + +//Я копирую файл "fixture.epf" из каталога "tests" проекта в рабочий каталог +Процедура ЯКопируюФайлИзКаталогаПроектаВРабочийКаталог(Знач ПутьФайла, Знач ПодКаталогПроекта) Экспорт + ПолныйПутьФайла = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьФайла); + Файл = Новый Файл(ПолныйПутьФайла); + КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), Файл.Имя)); +КонецПроцедуры + +//Я копирую файл "fixture.epf" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога +Процедура ЯКопируюФайлИзКаталогаПроектаВПодкаталогРабочегоКаталога(Знач ПутьФайла, Знач ПодКаталогПроекта, Знач ПутьПодКаталога) Экспорт + ПолныйПутьФайла = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьФайла); + Файл = Новый Файл(ПолныйПутьФайла); + КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, Файл.Имя)); +КонецПроцедуры + +//Я копирую каталог "fixtures" из каталога "tests" проекта в рабочий каталог +Процедура ЯКопируюКаталогИзКаталогаПроектаВРабочийКаталог(Знач ПутьНовогоКаталога, Знач ПодКаталогПроекта) Экспорт + ПолныйПутьКаталога = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьНовогоКаталога); + ОбъектКаталога = Новый Файл(ПолныйПутьКаталога); + // КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, Файл.Имя)); + ПутьНовогоКаталога = ОбъединитьПути(РабочийКаталог(), ОбъектКаталога.Имя); + ФС.ОбеспечитьКаталог(ПутьНовогоКаталога); + ФС.КопироватьСодержимоеКаталога(ПолныйПутьКаталога, РабочийКаталог()); +КонецПроцедуры + +//Я копирую каталог "fixtures" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога +Процедура ЯКопируюКаталогИзКаталогаПроектаВПодкаталогРабочегоКаталога(Знач ПутьНовогоКаталога, Знач ПодКаталогПроекта, Знач ПутьПодКаталога) Экспорт + ПолныйПутьКаталога = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьНовогоКаталога); + ОбъектКаталога = Новый Файл(ПолныйПутьКаталога); + + ПутьНовогоКаталога = ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, ОбъектКаталога.Имя); + ФС.ОбеспечитьКаталог(ПутьНовогоКаталога); + ФС.КопироватьСодержимоеКаталога(ПолныйПутьКаталога, РабочийКаталог()); +КонецПроцедуры + +//В рабочем каталоге существует каталог "folder0" +Процедура ВРабочемКаталогеСуществуетКаталог(Знач ПутьКаталога) Экспорт + ОбъектКаталога = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьКаталога)); + Ожидаем.Что(ОбъектКаталога.Существует(), СтрШаблон("Ожидаем, что каталог <%1> существует, а его нет!", ОбъектКаталога.ПолноеИмя)).ЭтоИстина(); +КонецПроцедуры + +//В подкаталоге "folder0" рабочего каталога существует каталог "folder02" +Процедура ВПодкаталогеРабочегоКаталогаСуществуетКаталог(Знач ПутьПодКаталога, Знач ПутьПроверяемогоКаталога) Экспорт + ОбъектКаталога = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, ПутьПроверяемогоКаталога)); + Ожидаем.Что(ОбъектКаталога.Существует(), СтрШаблон("Ожидаем, что каталог <%1> существует, а его нет!", ОбъектКаталога.ПолноеИмя)).ЭтоИстина(); +КонецПроцедуры + +//В рабочем каталоге существует файл "file0.txt" +Процедура ВРабочемКаталогеСуществуетФайл(Знач ПутьФайла) Экспорт + ОбъектФайл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьФайла)); + Ожидаем.Что(ОбъектФайл.Существует(), СтрШаблон("Ожидаем, что файл <%1> существует, а его нет!", ОбъектФайл.ПолноеИмя)).ЭтоИстина(); +КонецПроцедуры + +//В подкаталоге "folder0" рабочего каталога существует файл "file02" +Процедура ВПодкаталогеРабочегоКаталогаСуществуетФайл(Знач ПутьПодКаталога, Знач ПутьФайла) Экспорт + ОбъектФайл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, ПутьФайла)); + Ожидаем.Что(ОбъектФайл.Существует(), СтрШаблон("Ожидаем, что файл <%1> существует, а его нет!", ОбъектФайл.ПолноеИмя)).ЭтоИстина(); +КонецПроцедуры + +//Каталог "folder0/folder01" существует +Процедура КаталогСуществует(Знач ПутьКаталога) Экспорт + ОбъектКаталога = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьКаталога)); + Ожидаем.Что(ОбъектКаталога.Существует(), СтрШаблон("Ожидаем, что каталог <%1> существует, а его нет!", ОбъектКаталога.ПолноеИмя)).ЭтоИстина(); +КонецПроцедуры + +//Каталог "folder0/folder01" не существует +Процедура КаталогНеСуществует(Знач ПутьКаталога) Экспорт + ОбъектКаталога = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьКаталога)); + Ожидаем.Что(ОбъектКаталога.Существует(), СтрШаблон("Ожидаем, что каталог <%1> нет, а он существует!", ОбъектКаталога.ПолноеИмя)).ЭтоЛожь(); +КонецПроцедуры + +//Файл "folder0/file01.txt" существует +Процедура ФайлСуществует(Знач ПутьФайла) Экспорт + ОбъектФайл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); + Ожидаем.Что(ОбъектФайл.Существует(), СтрШаблон("Ожидаем, что файл <%1> существует, а его нет!", ОбъектФайл.ПолноеИмя)).ЭтоИстина(); +КонецПроцедуры + +//Файл "folder0/file01.txt" не существует +Процедура ФайлНеСуществует(Знач ПутьФайла) Экспорт + ОбъектФайл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); + Ожидаем.Что(ОбъектФайл.Существует(), СтрШаблон("Ожидаем, что файла <%1> нет, а он существует!", ОбъектФайл.ПолноеИмя)).ЭтоЛожь(); +КонецПроцедуры + +//Я установил рабочий каталог как текущий каталог +Процедура ЯУстановилРабочийКаталогКакТекущийКаталог() Экспорт + СтекТекущихКаталогов = ПолучитьСтекТекущихКаталогов(); + СтекТекущихКаталогов.Вставить(0, ТекущийКаталог()); + + УстановитьТекущийКаталог(РабочийКаталог()); +КонецПроцедуры + +//Я установил подкаталог "folder0" рабочего каталога как текущий каталог +Процедура ЯУстановилПодкаталогРабочегоКаталогаКакТекущийКаталог(Знач ПутьКаталога) Экспорт + ПолныйПутьКаталога = ОбъединитьПути(РабочийКаталог(), ПутьКаталога); + + СтекТекущихКаталогов = ПолучитьСтекТекущихКаталогов(); + СтекТекущихКаталогов.Вставить(0, ТекущийКаталог()); + + УстановитьТекущийКаталог(ПолныйПутьКаталога); +КонецПроцедуры + +//Я восстановил предыдущий каталог +Процедура ЯВосстановилПредыдущийКаталог() Экспорт + СтекТекущихКаталогов = ПолучитьСтекТекущихКаталогов(); + Если Не ЗначениеЗаполнено(СтекТекущихКаталогов) Тогда + ВызватьИсключение "Невозможно восстановить каталог, т.к. стек текущих каталогов пуст"; + КонецЕсли; + + УстановитьТекущийКаталог(СтекТекущихКаталогов[0]); + СтекТекущихКаталогов.Удалить(0); +КонецПроцедуры + +//{ Служебные методы +Функция РабочийКаталог() + Возврат БДД.ПолучитьИзКонтекста("РабочийКаталог"); +КонецФункции + +Функция КаталогПроекта() + Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", ".."); +КонецФункции + +Функция ПолучитьСтекТекущихКаталогов() + СтекТекущихКаталогов = БДД.ПолучитьИзКонтекста("СтекТекущихКаталогов"); + Если СтекТекущихКаталогов = Неопределено Тогда + СтекТекущихКаталогов = Новый Массив; + БДД.СохранитьВКонтекст("СтекТекущихКаталогов", СтекТекущихКаталогов); + КонецЕсли; + Возврат СтекТекущихКаталогов; +КонецФункции // Получить() +//} diff --git "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" new file mode 100644 index 0000000..aeffbf1 --- /dev/null +++ "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" @@ -0,0 +1,50 @@ +# language: ru + +Функционал: Выполнение файловых операций + Как Пользователь + Я хочу иметь возможность выполнять различные файловые операции в тексте фич + Чтобы я мог проще протестировать и автоматизировать больше действий на OneScript + +Контекст: Инициализация рабочего каталога и создание каталогов + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + + И Я создаю каталог "folder0/folder01" в рабочем каталоге + И Я создаю каталог "folder011" в подкаталоге "folder0/folder01" рабочего каталога + +Сценарий: Создание каталогов + Тогда В рабочем каталоге существует каталог "folder0/folder01" + И В подкаталоге "folder0/folder01" рабочего каталога существует каталог "folder011" + +Сценарий: Создание файлов + Когда Я создаю файл "folder0/file01.txt" в рабочем каталоге + И Я создаю файл "file01" в подкаталоге "folder0/folder01" рабочего каталога + Тогда В рабочем каталоге существует файл "folder0/file01.txt" + И В подкаталоге "folder0/folder01" рабочего каталога существует файл "file01" + +Сценарий: Копирование файлов + Когда Я копирую файл "step_definitions/БезПараметров.os" из каталога "tests/fixtures" проекта в рабочий каталог + И Я копирую файл "fixtures/test-report.xml" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога + + Тогда В рабочем каталоге существует файл "БезПараметров.os" + И В подкаталоге "folder0/folder01" рабочего каталога существует файл "test-report.xml" + +Сценарий: Копирование каталогов + Когда Я копирую каталог "fixtures/step_definitions" из каталога "tests/fixtures" проекта в рабочий каталог + И Я копирую каталог "fixtures/step_definitions" из каталога "tests" проекта в подкаталог "folder0/folder01" рабочего каталога + + Тогда В рабочем каталоге существует каталог "step_definitions" + И В подкаталоге "folder0/folder01" рабочего каталога существует каталог "step_definitions" + +Сценарий: Управление стеком текущих каталогов + Когда Я создаю файл "folder0/file01.txt" в рабочем каталоге + И Я установил рабочий каталог как текущий каталог + И Я установил подкаталог "folder0" рабочего каталога как текущий каталог + + Тогда Каталог "folder01" существует + И Каталог "folder0/folder01" не существует + И Файл "file01.txt" существует + И Файл "folder0/file01.txt" не существует + + И Я восстановил предыдущий каталог + И Я восстановил предыдущий каталог From 29a087745299281ceb40c9fa681cfc13d7729124 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 17:58:12 +0300 Subject: [PATCH 29/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=82=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=20fs=20#104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + 1 file changed, 1 insertion(+) diff --git a/packagedef b/packagedef index f22d762..599cce3 100644 --- a/packagedef +++ b/packagedef @@ -6,6 +6,7 @@ .ЗависитОт("tempfiles") .ЗависитОт("asserts") .ЗависитОт("1commands") + .ЗависитОт("fs") .ВключитьФайл("src") .ВключитьФайл("tests") .ВключитьФайл("features") From b9df538512af39079429057153dffa403f1f16a3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 19:32:18 +0300 Subject: [PATCH 30/42] =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BE=D0=B5=20API=20"?= =?UTF-8?q?=D0=91=D0=94=D0=94::=D0=9A=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5=D0=BC=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0"=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=83=D0=BD=D0=B8=D0=B2=D0=B5=D1=80=D1=81?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B0=20#105?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\200\320\260\321\206\320\270\320\270.os" | 28 +++++++++++++------ ...0\320\260\321\206\320\270\320\270.feature" | 4 +++ src/bdd-exec.os | 20 +++++++++++++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" index 26bea2f..b87b09a 100644 --- "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" +++ "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" @@ -27,10 +27,12 @@ ВсеШаги.Добавить("ЯУстановилРабочийКаталогКакТекущийКаталог"); ВсеШаги.Добавить("ЯУстановилПодкаталогРабочегоКаталогаКакТекущийКаталог"); ВсеШаги.Добавить("КаталогСуществует"); - ВсеШаги.Добавить("ФайлСуществует"); ВсеШаги.Добавить("КаталогНеСуществует"); + ВсеШаги.Добавить("ФайлСуществует"); ВсеШаги.Добавить("ФайлНеСуществует"); ВсеШаги.Добавить("ЯВосстановилПредыдущийКаталог"); + ВсеШаги.Добавить("ЯСохраняюКаталогПроектаВКонтекст"); + ВсеШаги.Добавить("ЯПоказываюКаталогПроекта"); Возврат ВсеШаги; КонецФункции @@ -88,21 +90,21 @@ //Я копирую файл "fixture.epf" из каталога "tests" проекта в рабочий каталог Процедура ЯКопируюФайлИзКаталогаПроектаВРабочийКаталог(Знач ПутьФайла, Знач ПодКаталогПроекта) Экспорт - ПолныйПутьФайла = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьФайла); + ПолныйПутьФайла = ОбъединитьПути(БДД.КаталогПроверяемогоПроекта(), ПодКаталогПроекта, ПутьФайла); Файл = Новый Файл(ПолныйПутьФайла); КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), Файл.Имя)); КонецПроцедуры //Я копирую файл "fixture.epf" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога Процедура ЯКопируюФайлИзКаталогаПроектаВПодкаталогРабочегоКаталога(Знач ПутьФайла, Знач ПодКаталогПроекта, Знач ПутьПодКаталога) Экспорт - ПолныйПутьФайла = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьФайла); + ПолныйПутьФайла = ОбъединитьПути(БДД.КаталогПроверяемогоПроекта(), ПодКаталогПроекта, ПутьФайла); Файл = Новый Файл(ПолныйПутьФайла); КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, Файл.Имя)); КонецПроцедуры //Я копирую каталог "fixtures" из каталога "tests" проекта в рабочий каталог Процедура ЯКопируюКаталогИзКаталогаПроектаВРабочийКаталог(Знач ПутьНовогоКаталога, Знач ПодКаталогПроекта) Экспорт - ПолныйПутьКаталога = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьНовогоКаталога); + ПолныйПутьКаталога = ОбъединитьПути(БДД.КаталогПроверяемогоПроекта(), ПодКаталогПроекта, ПутьНовогоКаталога); ОбъектКаталога = Новый Файл(ПолныйПутьКаталога); // КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, Файл.Имя)); ПутьНовогоКаталога = ОбъединитьПути(РабочийКаталог(), ОбъектКаталога.Имя); @@ -112,7 +114,7 @@ //Я копирую каталог "fixtures" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога Процедура ЯКопируюКаталогИзКаталогаПроектаВПодкаталогРабочегоКаталога(Знач ПутьНовогоКаталога, Знач ПодКаталогПроекта, Знач ПутьПодКаталога) Экспорт - ПолныйПутьКаталога = ОбъединитьПути(КаталогПроекта(), ПодКаталогПроекта, ПутьНовогоКаталога); + ПолныйПутьКаталога = ОбъединитьПути(БДД.КаталогПроверяемогоПроекта(), ПодКаталогПроекта, ПутьНовогоКаталога); ОбъектКаталога = Новый Файл(ПолныйПутьКаталога); ПутьНовогоКаталога = ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, ОбъектКаталога.Имя); @@ -197,15 +199,23 @@ СтекТекущихКаталогов.Удалить(0); КонецПроцедуры +//Я сохраняю каталог проекта в контекст +Процедура ЯСохраняюКаталогПроектаВКонтекст() Экспорт + КаталогТекущегоПроекта = БДД.КаталогПроверяемогоПроекта(); + БДД.СохранитьВКонтекст("КаталогПроекта", КаталогТекущегоПроекта); +КонецПроцедуры + +//Я показываю каталог проекта +Процедура ЯПоказываюКаталогПроекта() Экспорт + Сообщить(БДД.ПолучитьИзКонтекста("КаталогПроекта")); +КонецПроцедуры + + //{ Служебные методы Функция РабочийКаталог() Возврат БДД.ПолучитьИзКонтекста("РабочийКаталог"); КонецФункции -Функция КаталогПроекта() - Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..", ".."); -КонецФункции - Функция ПолучитьСтекТекущихКаталогов() СтекТекущихКаталогов = БДД.ПолучитьИзКонтекста("СтекТекущихКаталогов"); Если СтекТекущихКаталогов = Неопределено Тогда diff --git "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" index aeffbf1..08a53e3 100644 --- "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" +++ "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" @@ -48,3 +48,7 @@ И Я восстановил предыдущий каталог И Я восстановил предыдущий каталог + +Сценарий: Каталог проекта + Когда Я сохраняю каталог проекта в контекст + Тогда Я показываю каталог проекта \ No newline at end of file diff --git a/src/bdd-exec.os b/src/bdd-exec.os index c0b74de..892fa64 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -61,6 +61,26 @@ КонецФункции // ПолучитьИзКонтекста(Знач Ключ) Экспорт // } +//{ Поиск каталога проверяемого контекста + +// Вернуть каталог проверяемого проекта в зависимости от условий запуска +// Используется в библиотечном шаге "Я сохраняю каталог проекта в контекст". +// +// Возвращаемое значение: +// Строка - +// либо каталог, в который входит каталог features, если в полном пути текущего каталога есть features, +// либо текущий каталог, если нету +// +Функция КаталогПроверяемогоПроекта() Экспорт + ПутьКаталога = ФайлФичи.Путь; + Поз = СтрНайти(ПутьКаталога, "features"); + Если Поз = 0 Тогда + Возврат ТекущийКаталог(); + КонецЕсли; + Возврат Лев(ПутьКаталога, Поз - 1); +КонецФункции // КаталогПроверяемогоПроекта() +//} + //{ вызов шагов сценариев Процедура ВыполнитьШаг(Знач НаименованиеШагаСценария) Экспорт ТекстФичи = СтрШаблон("# language: ru%1%2", Символы.ПС, НаименованиеШагаСценария); From 4d10f3b0ab32dbe96e8363322770adb0ddf63f55 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 19:43:31 +0300 Subject: [PATCH 31/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D0=B0=D1=80=D1=82=D0=BD=D1=8B=D1=85=20=D1=82?= =?UTF-8?q?=D0=B8=D0=BF=D0=BE=D0=B2=D1=8B=D1=85=20=D1=84=D0=B8=D1=87=20#10?= =?UTF-8?q?4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index bfaa176..697f4f0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -46,7 +46,26 @@ node("slave") { } } + stage "exec libs features" + + command = """oscript ./src/bdd.os ./features/lib -out ./bdd-lib.log -junit-out ./bdd-lib.xml""" + + def errors = [] + try{ + cmd(command) + } catch (e) { + errors << "BDD status (lib) : ${e}" + } + + if (errors.size() > 0) { + currentBuild.result = 'UNSTABLE' + for (int i = 0; i < errors.size(); i++) { + echo errors[i] + } + } + step([$class: 'ArtifactArchiver', artifacts: '**/bdd-exec.log', fingerprint: true]) + step([$class: 'ArtifactArchiver', artifacts: '**/bdd-lib.log', fingerprint: true]) step([$class: 'JUnitResultArchiver', testResults: '**/bdd*.xml']) } From 0ae109d254398aa73871df2363a33ebb7e133cd8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 19:44:26 +0300 Subject: [PATCH 32/42] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20Jenkinsfile=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=B4=D0=B0=D1=80=D1=82=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=D1=8B=D1=85=20=D1=84=D0=B8=D1=87?= =?UTF-8?q?=20#104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 697f4f0..e2ba58a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -50,7 +50,7 @@ node("slave") { command = """oscript ./src/bdd.os ./features/lib -out ./bdd-lib.log -junit-out ./bdd-lib.xml""" - def errors = [] + errors = [] try{ cmd(command) } catch (e) { From 0475f4799dadf0d1a7dbb57ad3da62b4f8783b63 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 19:52:46 +0300 Subject: [PATCH 33/42] =?UTF-8?q?=D0=92=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=D1=85=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D1=8F?= =?UTF-8?q?=D1=85=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=BB?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BF=D1=83=D1=82=D1=8C,=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE=20=D0=BF=D1=80=D0=B8=D0=B2=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=20=D0=BA=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=D0=BC=20?= =?UTF-8?q?#105?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 892fa64..5ac8716 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -72,12 +72,13 @@ // либо текущий каталог, если нету // Функция КаталогПроверяемогоПроекта() Экспорт + Рез = ""; ПутьКаталога = ФайлФичи.Путь; Поз = СтрНайти(ПутьКаталога, "features"); - Если Поз = 0 Тогда - Возврат ТекущийКаталог(); + Если Поз > 0 Тогда + Рез = Лев(ПутьКаталога, Поз - 1); КонецЕсли; - Возврат Лев(ПутьКаталога, Поз - 1); + Возврат ОбъединитьПути(ТекущийКаталог(), Рез); КонецФункции // КаталогПроверяемогоПроекта() //} From 4d764cceee2d7811643dbac2c36ac15574046abf Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 27 Dec 2016 20:02:34 +0300 Subject: [PATCH 34/42] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D0=BE=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD=D0=B0=D1=8E=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B8=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D1=83=D1=8E=20=D0=B5=D0=B3=D0=BE=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=B0=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=8F=D0=B5=D0=BC=D0=BE=D0=B3=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20#105?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bdd-exec.os | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 5ac8716..5deeb27 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -37,6 +37,7 @@ Перем ИмяЭлементаСценария; Перем КешИсполнителейШагов; +Перем ПервичныйТекущийКаталог; //////////////////////////////////////////////////////////////////// //{ Программный интерфейс @@ -78,7 +79,7 @@ Если Поз > 0 Тогда Рез = Лев(ПутьКаталога, Поз - 1); КонецЕсли; - Возврат ОбъединитьПути(ТекущийКаталог(), Рез); + Возврат ОбъединитьПути(ПервичныйТекущийКаталог, Рез); КонецФункции // КаталогПроверяемогоПроекта() //} @@ -904,6 +905,7 @@ ВозможныеКлючиПараметров = ЧитательГеркин.ВозможныеКлючиПараметров(); Контекст = Новый Соответствие(); + ПервичныйТекущийКаталог = ТекущийКаталог(); КонецФункции // } From 4534d05a9e4947a1b00781e9d0b69a3b9b87067a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 28 Dec 2016 14:35:47 +0300 Subject: [PATCH 35/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=B5=D0=B4=D0=BE=D1=81=D1=82=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BA=D1=83=20=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packagedef b/packagedef index 599cce3..6daf8da 100644 --- a/packagedef +++ b/packagedef @@ -10,5 +10,11 @@ .ВключитьФайл("src") .ВключитьФайл("tests") .ВключитьФайл("features") + .ВключитьФайл(".vscode") + .ВключитьФайл("readme.md") + .ВключитьФайл("LICENSE") + .ВключитьФайл("Jenkinsfile") + .ВключитьФайл("appveyor.yml") + .ВключитьФайл("appveyor-runtests.cmd") .ВключитьФайл("lib.config") .ИсполняемыйФайл("src/bdd.os", "1bdd"); \ No newline at end of file From 17944fea49ac92f7d4735623b21b09f2dde6b368 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 28 Dec 2016 17:28:17 +0300 Subject: [PATCH 36/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=83=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8=20=D1=88=D0=B0?= =?UTF-8?q?=D0=B3=D0=BE=D0=B2=20#107?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\276\320\274\320\260\320\275\320\264.os" | 18 ++++++++++++++++++ ...76\320\274\320\260\320\275\320\264.feature" | 6 ++++++ 2 files changed, 24 insertions(+) diff --git "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" index aade06f..d8157ec 100644 --- "a/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" +++ "b/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" @@ -18,6 +18,7 @@ ВсеШаги.Добавить("ЯВыполняюКомандуCПараметрами"); ВсеШаги.Добавить("ЯСообщаюВыводКоманды"); ВсеШаги.Добавить("ЯДобавляюПараметрДляКоманды"); + ВсеШаги.Добавить("ВыводКомандыНеСодержит"); Возврат ВсеШаги; КонецФункции @@ -64,6 +65,7 @@ Процедура ЯВыполняюКомандуCПараметрами(Знач ИмяКоманды, Знач ПараметрыКоманды) Экспорт Команда = ПолучитьКомандуИзКонтекста(ИмяКоманды); + ПараметрыКоманды = ЗаменитьШаблоныВПараметрахКоманды(ПараметрыКоманды); Команда.УстановитьПараметры(ПараметрыКоманды); Команда.Исполнить(); @@ -73,6 +75,7 @@ Процедура ЯДобавляюПараметрДляКоманды(Знач ПараметрКоманды, Знач ИмяКоманды) Экспорт Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); + ПараметрКоманды = ЗаменитьШаблоныВПараметрахКоманды(ПараметрКоманды); Команда.ДобавитьПараметр(ПараметрКоманды); КонецПроцедуры @@ -84,6 +87,14 @@ Ожидаем.Что(ВыводКоманды).Содержит(ОжидаемыйВыводКоманды); КонецПроцедуры +//Вывод команды "oscript" не содержит "КаталогПроекта" +Процедура ВыводКомандыНеСодержит(Знач ИмяКоманды, Знач ОжидаемыйВыводКоманды) Экспорт + Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); + + ВыводКоманды = Команда.ПолучитьВывод(); + Ожидаем.Что(ВыводКоманды).Не_().Содержит(ОжидаемыйВыводКоманды); +КонецПроцедуры + //Код возврата команды "git" равен 1 Процедура КодВозвратаКомандыРавен(Знач ИмяКоманды, Знач ОжидаемыйКодВозврата) Экспорт @@ -100,6 +111,7 @@ Сообщить(ВыводКоманды); КонецПроцедуры + // { Служебные функции Функция ПолучитьКомандуИзКонтекста(Знач ИмяКоманды) @@ -118,4 +130,10 @@ Функция КлючКоманды(Знач ИмяКоманды) Возврат "Команда-" + ИмяКоманды; КонецФункции + +Функция ЗаменитьШаблоныВПараметрахКоманды(Знач ПараметрыКоманды) + Рез = СтрЗаменить(ПараметрыКоманды, "<КаталогПроекта>", БДД.КаталогПроверяемогоПроекта()); + Рез = СтрЗаменить(Рез, "<РабочийКаталог>", БДД.ПолучитьИзКонтекста("РабочийКаталог")); + Возврат Рез; +КонецФункции //} diff --git "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" index 8fd184a..631d470 100644 --- "a/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" +++ "b/features/lib/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.feature" @@ -27,3 +27,9 @@ Тогда Я сообщаю вывод команды "git" И Вывод команды "git" содержит "version" И Код возврата команды "git" равен 0 + +Сценарий: Выполнение команды с параметрами-шаблонами + Когда Я выполняю команду "oscript" c параметрами "<КаталогПроекта>" + Тогда Я сообщаю вывод команды "oscript" + И Код возврата команды "oscript" равен 2 + И Вывод команды "oscript" не содержит "КаталогПроекта" From b6bd9438814238075f79786a1ae69a161bd52d72 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 28 Dec 2016 17:29:07 +0300 Subject: [PATCH 37/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=88=D0=B0=D0=B3=20"=D0=AF=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0=D1=8E=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D0=B9=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3"=20#107=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D1=88=D0=B0=D0=B3=D0=BE=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\200\320\260\321\206\320\270\320\270.os" | 11 +++++++++-- ...5\321\200\320\260\321\206\320\270\320\270.feature" | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" index b87b09a..a7bd2cd 100644 --- "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" +++ "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" @@ -33,6 +33,7 @@ ВсеШаги.Добавить("ЯВосстановилПредыдущийКаталог"); ВсеШаги.Добавить("ЯСохраняюКаталогПроектаВКонтекст"); ВсеШаги.Добавить("ЯПоказываюКаталогПроекта"); + ВсеШаги.Добавить("ЯПоказываюРабочийКаталог"); Возврат ВсеШаги; КонецФункции @@ -109,7 +110,7 @@ // КопироватьФайл(ПолныйПутьФайла, ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, Файл.Имя)); ПутьНовогоКаталога = ОбъединитьПути(РабочийКаталог(), ОбъектКаталога.Имя); ФС.ОбеспечитьКаталог(ПутьНовогоКаталога); - ФС.КопироватьСодержимоеКаталога(ПолныйПутьКаталога, РабочийКаталог()); + ФС.КопироватьСодержимоеКаталога(ПолныйПутьКаталога, ПутьНовогоКаталога); КонецПроцедуры //Я копирую каталог "fixtures" из каталога "tests" проекта в подкаталог "folder0" рабочего каталога @@ -119,7 +120,7 @@ ПутьНовогоКаталога = ОбъединитьПути(РабочийКаталог(), ПутьПодКаталога, ОбъектКаталога.Имя); ФС.ОбеспечитьКаталог(ПутьНовогоКаталога); - ФС.КопироватьСодержимоеКаталога(ПолныйПутьКаталога, РабочийКаталог()); + ФС.КопироватьСодержимоеКаталога(ПолныйПутьКаталога, ПутьНовогоКаталога); КонецПроцедуры //В рабочем каталоге существует каталог "folder0" @@ -210,6 +211,12 @@ Сообщить(БДД.ПолучитьИзКонтекста("КаталогПроекта")); КонецПроцедуры +//Я показываю рабочий каталог +Процедура ЯПоказываюРабочийКаталог() Экспорт + Сообщить(БДД.ПолучитьИзКонтекста("РабочийКаталог")); +КонецПроцедуры + + //{ Служебные методы Функция РабочийКаталог() diff --git "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" index 08a53e3..71b540c 100644 --- "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" +++ "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" @@ -51,4 +51,5 @@ Сценарий: Каталог проекта Когда Я сохраняю каталог проекта в контекст - Тогда Я показываю каталог проекта \ No newline at end of file + Тогда Я показываю каталог проекта + И Я показываю рабочий каталог \ No newline at end of file From 07b7c2bf980d3f9139f229793f5cddbdee71abaf Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 28 Dec 2016 17:54:23 +0300 Subject: [PATCH 38/42] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B5=D0=B9=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...277\320\265\321\200\320\260\321\206\320\270\320\270.feature" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" index 71b540c..9efe3e6 100644 --- "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" +++ "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" @@ -52,4 +52,4 @@ Сценарий: Каталог проекта Когда Я сохраняю каталог проекта в контекст Тогда Я показываю каталог проекта - И Я показываю рабочий каталог \ No newline at end of file + И Я показываю рабочий каталог From 46abfab5196dca05a46ed5072a0fa913d42590c5 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 28 Dec 2016 18:53:43 +0300 Subject: [PATCH 39/42] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=88?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=20=D0=BF=D0=BE=20=D0=B0=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D1=83=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20#104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\200\320\260\321\206\320\270\320\270.os" | 65 +++++++++++++++++-- ...0\320\260\321\206\320\270\320\270.feature" | 12 ++++ 2 files changed, 70 insertions(+), 7 deletions(-) diff --git "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" index a7bd2cd..594a787 100644 --- "a/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" +++ "b/features/lib/step_definitions/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.os" @@ -34,6 +34,10 @@ ВсеШаги.Добавить("ЯСохраняюКаталогПроектаВКонтекст"); ВсеШаги.Добавить("ЯПоказываюКаталогПроекта"); ВсеШаги.Добавить("ЯПоказываюРабочийКаталог"); + ВсеШаги.Добавить("ФайлВРабочемКаталогеСодержит"); + ВсеШаги.Добавить("ФайлВРабочемКаталогеНеСодержит"); + ВсеШаги.Добавить("ФайлСодержит"); + ВсеШаги.Добавить("ФайлНеСодержит"); Возврат ВсеШаги; КонецФункции @@ -76,17 +80,13 @@ //Я создаю файл "file0.txt" в рабочем каталоге Процедура ЯСоздаюФайлВРабочемКаталоге(Знач ПутьФайла) Экспорт НовыйПуть = ОбъединитьПути(РабочийКаталог(), ПутьФайла); - ЗаписьТекста = Новый ЗаписьТекста(НовыйПуть); - ЗаписьТекста.Записать("Текст файла"); - ЗаписьТекста.Закрыть(); + СоздатьФайлПример(НовыйПуть); КонецПроцедуры //Я создаю файл "file02" в подкаталоге "folder0" рабочего каталога Процедура ЯСоздаюФайлВПодкаталогеРабочегоКаталога(Знач ПутьФайла, Знач ПутьКаталога) Экспорт НовыйПуть = ОбъединитьПути(РабочийКаталог(), ПутьКаталога, ПутьФайла); - ЗаписьТекста = Новый ЗаписьТекста(НовыйПуть); - ЗаписьТекста.Записать("Текст файла"); - ЗаписьТекста.Закрыть(); + СоздатьФайлПример(НовыйПуть); КонецПроцедуры //Я копирую файл "fixture.epf" из каталога "tests" проекта в рабочий каталог @@ -213,9 +213,32 @@ //Я показываю рабочий каталог Процедура ЯПоказываюРабочийКаталог() Экспорт - Сообщить(БДД.ПолучитьИзКонтекста("РабочийКаталог")); + Сообщить(РабочийКаталог()); +КонецПроцедуры + +//Файл "folder0/file01.txt" в рабочем каталоге содержит "Текст файла" +Процедура ФайлВРабочемКаталогеСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьФайла)); + ПроверитьСодержимоеФайла(Файл, ЧтоИщем); КонецПроцедуры +//Файл "folder0/file01.txt" в рабочем каталоге не содержит "Не существующий текст" +Процедура ФайлВРабочемКаталогеНеСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + Файл = Новый Файл(ОбъединитьПути(РабочийКаталог(), ПутьФайла)); + ПроверитьОтсутствиеВФайле(Файл, ЧтоИщем); +КонецПроцедуры + +//Файл "folder0/file01.txt" содержит "Текст файла" +Процедура ФайлСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); + ПроверитьСодержимоеФайла(Файл, ЧтоИщем); +КонецПроцедуры + +//Файл "folder0/file01.txt" не содержит "Не существующий текст" +Процедура ФайлНеСодержит(Знач ПутьФайла, Знач ЧтоИщем) Экспорт + Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); + ПроверитьОтсутствиеВФайле(Файл, ЧтоИщем); +КонецПроцедуры //{ Служебные методы @@ -231,4 +254,32 @@ КонецЕсли; Возврат СтекТекущихКаталогов; КонецФункции // Получить() + +Процедура СоздатьФайлПример(Знач ПутьФайла) Экспорт + ЗаписьТекста = Новый ЗаписьТекста(ПутьФайла); + ЗаписьТекста.Записать("Текст файла"); + ЗаписьТекста.Закрыть(); +КонецПроцедуры + +Функция ПрочитатьТекстФайла(Знач Файл, Кодировка = "UTF-8") + ЧтениеТекста = Новый ЧтениеТекста; + ЧтениеТекста.Открыть(Файл.ПолноеИмя, Кодировка); + + Строка = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + Возврат Строка; +КонецФункции // ПрочитатьТекстФайла() + +Процедура ПроверитьСодержимоеФайла(Знач Файл, Знач ЧтоИщем) + ТекстФайла = ПрочитатьТекстФайла(Файл); + ОписаниеОшибки = СтрШаблон("Ожидали, что файл <%1> содержит `<%2>`, а это не так!", Файл.ПолноеИмя, ЧтоИщем); + Ожидаем.Что(ТекстФайла, ОписаниеОшибки).Содержит(ЧтоИщем); +КонецПроцедуры + +Процедура ПроверитьОтсутствиеВФайле(Знач Файл, Знач ЧтоИщем) + ТекстФайла = ПрочитатьТекстФайла(Файл); + ОписаниеОшибки = СтрШаблон("Ожидали, что файл <%1> не содержит `<%2>`, а это не так!", Файл.ПолноеИмя, ЧтоИщем); + Ожидаем.Что(ТекстФайла, ОписаниеОшибки).Не_().Содержит(ЧтоИщем); +КонецПроцедуры + //} diff --git "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" index 9efe3e6..499bc20 100644 --- "a/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" +++ "b/features/lib/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\265\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\270.feature" @@ -53,3 +53,15 @@ Когда Я сохраняю каталог проекта в контекст Тогда Я показываю каталог проекта И Я показываю рабочий каталог + +Контекст: + Допустим Я создаю файл "folder0/file01.txt" в рабочем каталоге + +Сценарий: Анализ текста файлов в рабочем каталоге + Тогда Файл "folder0/file01.txt" в рабочем каталоге содержит "Текст файла" + И Файл "folder0/file01.txt" в рабочем каталоге не содержит "Не существующий текст" + +Сценарий: Анализ текста файлов в текущем каталоге + Когда Я установил рабочий каталог как текущий каталог + Тогда Файл "folder0/file01.txt" содержит "Текст файла" + И Файл "folder0/file01.txt" не содержит "Не существующий текст" From d2f742db5663c7ebe3cbb802f76b03f86c3f1b5d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 28 Dec 2016 19:33:58 +0300 Subject: [PATCH 40/42] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=88=D0=B5?= =?UTF-8?q?=D0=BB=20=D0=BA=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8E=20=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=B4=D0=B0=D1=80=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=88=D0=B0?= =?UTF-8?q?=D0=B3=D0=B0=20"=D0=A4=D0=B0=D0=B9=D0=BB=20=D1=81=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=B8=D1=82"=20#104=20=D0=A3=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8C=D1=88=D0=B8=D0=BB=20=D0=B4=D1=83=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/core/junit-xml.feature | 10 +-- ...20\270\320\265\320\244\320\270\321\207.os" | 80 +------------------ 2 files changed, 6 insertions(+), 84 deletions(-) diff --git a/features/core/junit-xml.feature b/features/core/junit-xml.feature index 2332306..63e5e36 100644 --- a/features/core/junit-xml.feature +++ b/features/core/junit-xml.feature @@ -13,7 +13,7 @@ Тогда проверка поведения фичи "БезПараметров" с передачей параметра "-junit-out ./test-report.xml" закончилась с кодом возврата 0 И файл "./test-report.xml" существует - И в файле "./test-report.xml" есть строка + И файл "./test-report.xml" содержит """ @@ -28,7 +28,7 @@ Тогда проверка поведения фичи "ПадающийШаг" с передачей параметра "-junit-out ./test-report.xml" закончилась с кодом возврата 2 И файл "./test-report.xml" существует - И в файле "./test-report.xml" есть строка + И файл "./test-report.xml" содержит """ @@ -36,11 +36,11 @@ """ @@ -49,7 +49,7 @@ Тогда проверка поведения фичи "НеРеализованныйШаг" с передачей параметра "-junit-out ./test-report.xml" закончилась с кодом возврата 1 И файл "./test-report.xml" существует - И в файле "./test-report.xml" есть строка + И файл "./test-report.xml" содержит """ diff --git "a/features/core/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\244\320\270\321\207.os" "b/features/core/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\244\320\270\321\207.os" index 723e3ba..af3094b 100644 --- "a/features/core/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\244\320\270\321\207.os" +++ "b/features/core/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\244\320\270\321\207.os" @@ -11,7 +11,6 @@ ВсеШаги.Добавить("УстановилКаталогПроектаКакТекущий"); ВсеШаги.Добавить("ВЛог_ФайлеЗапускаПродуктаЕстьСтрока"); ВсеШаги.Добавить("ВЛог_ФайлеЗапускаПродуктаОтсутствуетСтрока"); - ВсеШаги.Добавить("ВФайлеЕстьСтрока"); Возврат ВсеШаги; КонецФункции @@ -27,86 +26,9 @@ //в лог-файле запуска продукта есть строка "ЯЗапускаюПадающийШагСПараметром-Первый падающий шаг" Процедура ВЛог_ФайлеЗапускаПродуктаЕстьСтрока(Знач ПроверяемаяСтрока) Экспорт ТекстЛогФайла = БДД.ПолучитьИзКонтекста("ТекстЛогФайлаПродукта"); - Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда - Ожидаем.Что(ТекстЛогФайла).Содержит(ПроверяемаяСтрока); - Иначе - ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(ТекстЛогФайла, ПроверяемаяСтрока); - КонецЕсли; + Ожидаем.Что(ТекстЛогФайла).Содержит(ПроверяемаяСтрока); КонецПроцедуры -//в файле "clean.log" есть строка "ыва" -Процедура ВФайлеЕстьСтрока(Знач ПутьФайла, Знач ПроверяемаяСтрока) Экспорт - Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла)); - ЕстьПодстрока(ПрочитатьТекстФайла(Файл), ПроверяемаяСтрока); -КонецПроцедуры - -Функция ПрочитатьТекстФайла(Знач Файл) - ЧтениеТекста = Новый ЧтениеТекста; - ЧтениеТекста.Открыть(Файл.ПолноеИмя,"UTF-8"); - - Строка = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - Возврат Строка; -КонецФункции // ПрочитатьТекстФайла() - -Процедура ЕстьПодстрока(Знач Строка, Знач ПроверяемаяСтрока) - Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда - Ожидаем.Что(Строка, "Проверяем одиночную строку").Содержит(ПроверяемаяСтрока); - Иначе - ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, ПроверяемаяСтрока); - КонецЕсли; -КонецПроцедуры - -//TODO перенести в ассерты oscript-library -Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "") - СообщениеОшибки = ""; - Нашли = МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, Подстрока, СообщениеОшибки); - Если Не Нашли Тогда - ВызватьИсключение СтрШаблон("Ожидали, что в строке < - |%1 - |> - |найдем подстроку< - |%2 - |> - |А это не так. - |Уточнение: %3. - |%4", Строка, Подстрока, СообщениеОшибки, ДопСообщениеОшибки); - КонецЕсли; -КонецПроцедуры - -Функция МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, СообщениеОшибки = "") - ПерваяСтрока = СокрЛП(СтрПолучитьСтроку(Подстрока, 1)); - НашлиПервуюСтроку = Ложь; - Для Счетчик = 1 По СтрЧислоСтрок(Строка) Цикл - ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик)); - НашлиПервуюСтроку = Найти(ОчереднаяСтрока, ПерваяСтрока) <> 0; - Если НашлиПервуюСтроку Тогда - Прервать; - КонецЕсли; - КонецЦикла; - Если Не НашлиПервуюСтроку Тогда - СообщениеОшибки = СтрШаблон("Не нашли первую же подстроку <%1>", ПерваяСтрока); - Возврат Ложь; - КонецЕсли; - - СчетчикЧтоИщем = 2; - Для Счетчик = Счетчик+1 По СтрЧислоСтрок(Строка) Цикл - ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик)); - ЧтоИщем = СокрЛП(СтрПолучитьСтроку(Подстрока, СчетчикЧтоИщем)); - Поз = Найти(ОчереднаяСтрока, ЧтоИщем); - Если Поз = 0 Тогда - СообщениеОшибки = СтрШаблон("Не нашли подстроку № %1 <%2>", СчетчикЧтоИщем, ЧтоИщем); - Возврат Ложь; - Иначе - СчетчикЧтоИщем = СчетчикЧтоИщем + 1; - Если СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока) Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока); -КонецФункции - //в лог-файле запуска продукта отсутствует строка "ДоЭтогоШагаВыполнениеДойтиНеДолжно" Процедура ВЛог_ФайлеЗапускаПродуктаОтсутствуетСтрока(Знач ПроверяемаяСтрока) Экспорт ТекстЛогФайла = БДД.ПолучитьИзКонтекста("ТекстЛогФайлаПродукта"); From b31a1d39c8e57dd4f8ffa4a9fdc0f7f5c708e894 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 29 Dec 2016 09:59:14 +0300 Subject: [PATCH 41/42] =?UTF-8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=201.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- src/bdd.os | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packagedef b/packagedef index 6daf8da..850bc59 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@  Описание.Имя("1bdd") - .Версия("1.2") + .Версия("1.3") .ЗависитОт("logos") .ЗависитОт("cmdline") .ЗависитОт("tempfiles") diff --git a/src/bdd.os b/src/bdd.os index 12402e6..490cf50 100644 --- a/src/bdd.os +++ b/src/bdd.os @@ -19,7 +19,7 @@ Перем СохраненныйТекущийКаталог; Функция Версия() - Возврат "1.2"; + Возврат "1.3"; КонецФункции // Версия() //{ Точка входа в приложение From f0f636a7569d1f24b1808ba46b11d95dc762537a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 29 Dec 2016 09:59:33 +0300 Subject: [PATCH 42/42] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B2?= =?UTF-8?q?=201.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ src/bdd-exec.os | 3 +++ 2 files changed, 66 insertions(+) diff --git a/README.md b/README.md index b5db0f5..346fa55 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,48 @@ oscript bdd.os <команда> <параметры команды> [ключи] Для подсказки по конкретной команде наберите `bdd help <команда>`. +# Формат файла фичи + +Файл фичи должен иметь расширение `feature` и написан согласно синтаксису языка `Gherkin` + +## Пример файла фичи + + +```gherkin +# language: ru + +Функционал: Выполнение файловых операций + Как Пользователь + Я хочу иметь возможность выполнять различные файловые операции в тексте фич + Чтобы я мог проще протестировать и автоматизировать больше действий на OneScript + +Сценарий: Каталог проекта + Допустим Я создаю временный каталог и сохраняю его в контекст + И Я устанавливаю временный каталог как рабочий каталог + Когда Я сохраняю каталог проекта в контекст + Тогда Я показываю каталог проекта + И Я показываю рабочий каталог +``` + +или + +```gherkin +# language: ru + +Функционал: Использование программного контекста + Как Разработчик + Я Хочу чтобы шаги разных сценариев могли обмениваться данными через програмнный контекст продукта + +Сценарий: Первый сценарий + + Когда Я сохранил ключ "Ключ1" и значение 10 в программном контексте + И я получаю ключ "Ключ1" и значение 10 из программного контекста + +Сценарий: Следующий сценарий + + Тогда я получаю ключ "Ключ1" и значение 10 из программного контекста +``` + # Формат файла шагов Это обычный os-скрипт, который располагает в подкаталоге `step_definitions` относительно файла фичи. @@ -127,3 +169,24 @@ oscript bdd.os <команда> <параметры команды> [ключи] НаименованиеШагаСценария = "я записываю """ШагСценария""" в файл журнала"; БДД.ВыполнитьШаг(НаименованиеШагаСценария); ``` + +### Получение каталога текущего проекта внутри шагов сценария + +Из кода скрипта-реализации шагов фичи можно узнать каталог текущего/проверяемого проекта +в зависимости от условий запуска. + +Возвращаемое значение: + либо каталог, в который входит каталог features, если в полном пути текущего каталога есть features, + либо текущий каталог, если нету +Например, если файл фичи находится по пути `c:\projects\myproject\features\core\my.feature`, +вернется значение `c:\projects\myproject\` + +Сигнатура вызова: `БДД::КаталогПроверяемогоПроекта()` + +Используется в библиотечном шаге `Я сохраняю каталог проекта в контекст`. + +## Стандартная библиотека + +Стандартные библиотечные шаги, подключаемые автоматически для любой фичи, находятся в каталоге `features/lib` ++ `ВыполнениеКоманд.feature` - выполнение команд системы и запуск процессов ++ `ФайловыеОперации.feature` - создание файлов/каталогов, их копирование, анализ содержимого файлов diff --git a/src/bdd-exec.os b/src/bdd-exec.os index 5deeb27..d30acc2 100644 --- a/src/bdd-exec.os +++ b/src/bdd-exec.os @@ -72,6 +72,9 @@ // либо каталог, в который входит каталог features, если в полном пути текущего каталога есть features, // либо текущий каталог, если нету // +// Например, если файл фичи находится по пути `c:\projects\myproject\features\core\my.feature`, +// вернется значение `c:\projects\myproject\` +// Функция КаталогПроверяемогоПроекта() Экспорт Рез = ""; ПутьКаталога = ФайлФичи.Путь;