Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавил возможность запуска командных файлов на язке PowerShell и др. #2

Merged
merged 6 commits into from
Oct 16, 2017

Conversation

Berckk
Copy link

@Berckk Berckk commented Oct 12, 2017

Привет.
Добавил указание расширения для командных файлов и возможность указания исполняемых файлов других сценарных языков.

Copy link
Member

@artbear artbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хорошее дополнение библиотеки.
Но есть небольшие замечания.
Исправишь?

КомандныйФайл = Новый КомандныйФайл;
КомандныйФайл.Создать();
БДД.СохранитьВКонтекст("КомандныйФайл", КомандныйФайл);
СоздатьФайл("","");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь проще и понятнее написать СоздатьФайл(), т.к. у этого метода оба параметр по умолчанию пустые строки.

@@ -9,7 +9,16 @@
Контекст: Отключение отладки в логах
Допустим Я выключаю отладку лога с именем "oscript.lib.commands"

Сценарий: Выполнение простого командного файла
Сценарий: Выполнение командного файла PowerShell
Когда Я устанавливаю приложение запуска "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На Линуксе шаг упадет.
Предлагаю в реализацию шага ЯУстанавливаюПриложениеЗапуска добавить проверку на Линукс
Если Линукс, то отмечать шаг как пропущенный.

Это лучше, чем падающий тест

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут наверно для Линукса надо вообще весь сценарий проускать, но я не представляю как.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Внутри кода реализации вызови спец.метод БДД.ВыполнитьШаг("Пропускаю шаг в Linux")
Документация на этот метод

ИМХО за счет того, что у нас нет реализации шага Пропускаю шаг в Linux, твой шаг/сценарий будет отмечен как пропущенный.

Попробуй.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В консоле добавляется сообщение "Пропускаю шаг в Linux".
В отчете bdd-log.xml шаг отмечается как status="passed".

Сценарий: Выполнение командного файла PowerShell
Когда Я устанавливаю приложение запуска "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
И Я создаю командный файл PowerShell "" ".ps1"
И Я добавляю строку "echo PowerShell" в командный файл
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю добавить какую-нибудь уникальную для PowerShell-команду, а не псевдоним, который работает и для cmd.
Например, Write-Host PowerShell

readme.md Outdated
```bsl
КомандныйФайл = Новый КомандныйФайл;
КомандныйФайл.УстановитьПриложение("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe");
КомандныйФайл.Создать(,".ps1");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю указать явное пустое имя файла через
КомандныйФайл.Создать("", ".ps1");

PS пропуск параметра выглядит очень плохо

//
// Возвращаемое значение:
// Строка - Путь созданного файла
//
Функция Создать(Знач Путь = "") Экспорт
Функция Создать(Знач Путь = "",Знач Расширение="") Экспорт
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не хватает пробела перед вторым Знач

// Установить путь к приложению.
//
// Параметры:
// ПутьПриложения - Путь приложения (Строка)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю добавить пример задания приложения в описание метода
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

@@ -125,7 +140,9 @@
Команда.УстановитьКодировкуВывода(КодировкаВывода);
Команда.ПоказыватьВыводНемедленно(НемедленнныйВывод);

Если ЭтоWindows Тогда
Если НЕ ПустаяСтрока(Приложение) Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ИМХО здесь точнее Если ЗначениеЗаполнено(Приложение) Тогда
т.к. по умолчанию, без явной инициализации, Приложение равно Неопределено
И проверка на пустую строку сработает неверно.

@artbear
Copy link
Member

artbear commented Oct 14, 2017

И последний вопрос - фичи прогонял?

@Berckk
Copy link
Author

Berckk commented Oct 15, 2017

Фичи прогонял, но только на Windows.
То что при прогоне идет обращение к "C:\Program Files (x86)\OneScript\lib\1commands\src", а не к текущему каталогу проекта. Это как исправить?

@artbear
Copy link
Member

artbear commented Oct 15, 2017

То что при прогоне идет обращение к "C:\Program Files (x86)\OneScript\lib\1commands\src", а не к текущему каталогу проекта. Это как исправить?

@Berckk А откуда такая уверенность?
фичи настроены на прогон классов из исходников

@artbear artbear self-assigned this Oct 15, 2017
@artbear
Copy link
Member

artbear commented Oct 16, 2017

После последних своих правок тесты прогонял. Шаги пропускаются?

БДД.СохранитьВКонтекст("КомандныйФайл", КомандныйФайл);
КонецПроцедуры

Функция ПропускаюШаг() Экспорт
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 Экспорт для этого метода не нужен.
2 Название метода предлагать поменять на более точное ПрпускаюШагНаLinux

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

С последними правками шаги пропускаются, но помечаются как успешные.

КонецПроцедуры

Функция ПропускаюШагВЛинукс()
Если НЕ ЗначениеЗаполнено(ЭтоWindows) Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Проверка Если НЕ ЗначениеЗаполнено(ЭтоWindows) Тогда в Линуксе всегда будет срабатывать и выполнять код внутри блока Если.
Т.к. значение ЭтоWindows будет Ложь, а ЗначениеЗаполнено(Ложь) всегда выдает Истину :(

Предлагаю исправить на Если ЭтоWindows = Неопределено Тогда

Сделай это последнее исправления и я принимаю пулл-реквест!

Тогда Вывод командного файла содержит "PowerShell"
И Код возврата командного файла равен 0

Контекст: Отключение отладки в логах
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Оказывается, я пропустил неверную правку в фиче.

Контекст в фиче должен быть один, их не должно быть несколько.
Поэтому твое добавление контекста не валидно.

Предлагаю

  • оставить один контекст.
Контекст: Отключение отладки в логах
      Допустим Я выключаю отладку лога с именем "oscript.lib.commands"
  • Добавить шаг Я пропускаю этот сценарий в Линукс как первый шаг сценария Выполнение командного файла PowerShell

@@ -75,27 +123,66 @@

//Код возврата командного файла равен 0
Процедура КодВозвратаКомандногоФайлаРавен(Знач ОжидаемыйКодВозврата) Экспорт
Если ПропускаюШагВЛинукс() Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Шаг Код возврата командного файла равен 0 является универсальным.
В него не нужно вставлять проверку на линукс, т.к. этот шаг должен работать в линукс

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, но в сценарии с PowerShell в линуксе никого файла на этом шаге нет.
И тесты валятся.
Я поэтому и добавил проверку во все шаги.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В линуксе можно создать файл с расширением ps1, т.к. расширение ни на что не влияет.
Но тесты выпадут с ошибкой на шаге Я выполняю командный файл, т.к. Write-Host PowerShell в линукс не отработает.
Поэтому я изначально спрашивал, как пропустить весь сценарий под линукс.

@@ -67,6 +110,11 @@

//Вывод командного файла содержит "командный файл"
Процедура ВыводКомандногоФайлаСодержит(Знач ОжидаемыйВыводКоманды) Экспорт
Если ПропускаюШагВЛинукс() Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Шаг Вывод командного файла содержит "командный файл" является универсальным.
В него не нужно вставлять проверку на линукс, т.к. этот шаг должен работать в линукс

ВывестиТекстФайла(ИмяФайла);
КонецПроцедуры

//Я сообщаю содержимое командного файла
Процедура ЯСообщаюСодержимоеКомандногоФайла() Экспорт
Если ПропускаюШагВЛинукс() Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Шаг Я сообщаю содержимое командного файла является универсальным.
В него не нужно вставлять проверку на линукс, т.к. этот шаг должен работать в линукс

КомандныйФайл = БДД.ПолучитьИзКонтекста("КомандныйФайл");

КомандныйФайл.Исполнить();
КонецПроцедуры

//Я сообщаю содержимое файла "ИмяФайла"
Процедура ЯСообщаюСодержимоеФайла(Знач ИмяФайла) Экспорт
Если ПропускаюШагВЛинукс() Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Шаг Я сообщаю содержимое файла "ИмяФайла" является универсальным.
В него не нужно вставлять проверку на линукс, т.к. этот шаг должен работать в линукс

КонецПроцедуры

//Я не пропускаю этот сценарий в Линукс
Процедура ЯНЕПропускаюЭтотСценарийВЛинукс() Экспорт
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Шаг ЯНЕПропускаюЭтотСценарийВЛинукс соответственно не нужен.
Его нужно удалить.

@artbear
Copy link
Member

artbear commented Oct 16, 2017

Извини за придирчивость :)

@artbear
Copy link
Member

artbear commented Oct 16, 2017

Возможно, мы друг друга не поняли.
Что происходит с прогоном шагов/фич, когда ты вставил БДД.ВыполнитьШаг("Пропустить шаг в Линукс");
Шаги падают, или отмечаются как пропущенные,
или успешно выполняются и далее выполняются следующие шаги??

@Berckk
Copy link
Author

Berckk commented Oct 16, 2017

Рассказываю все.
Запускаю в Windows, но в функции
ПропускаюШагВЛинукс() добавляю ЭтоWindows = Ложь;
В каталоге проекта запускаю командную строку и выполняю opm test
в ответ выводится...
комментарий (серым цветом) Пропускаю шаг в Linux и зеленым шаги.
Т.е. шаги успешно выполняются.

@artbear
Copy link
Member

artbear commented Oct 16, 2017

Тут важно - именно последующие шаги из этого же сценария выполняются?
или сценарий останавливается и запускаются шаги другого сценария?

можешь полный лог от opm test скинуть ?

@Berckk
Copy link
Author

Berckk commented Oct 16, 2017

Шаги выполняются, остановка не происходит.
opm_test

@artbear
Copy link
Member

artbear commented Oct 16, 2017

Все понятно, наша добавка с пропускаемым шагом на самом деле шаг не пропускает :(
Пока оставим так.
Я в 1бдд (прогонялку фич) добавлю ишуз для фиксации проблемы.

Сейчас сделаю последний код-ревью, если не увижу явных проблем, наконец-то замержу пулл-реквест

@artbear artbear merged commit 3aff8f0 into oscript-library:develop Oct 16, 2017
@artbear
Copy link
Member

artbear commented Oct 16, 2017

@Berckk Большое спасибо!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants