From 23467830514b2f77d02eed2eebfa6167e9f16057 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 13:37:39 +0300 Subject: [PATCH 01/11] =?UTF-8?q?=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20VSC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 7 ++ .vscode/spell.json | 32 ++++++ .vscode/tasks.json | 242 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 281 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 .vscode/spell.json create mode 100644 .vscode/tasks.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cf913fc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.associations": { + "packagedef" : "bsl" + }, + "editor.rulers": [ 120 ] +} \ No newline at end of file diff --git a/.vscode/spell.json b/.vscode/spell.json new file mode 100644 index 0000000..98dae49 --- /dev/null +++ b/.vscode/spell.json @@ -0,0 +1,32 @@ +{ + "ignoreWordsList": [ + "cmdline", + "tempfiles", + "json", + "xunit", + "vanessa", + "compilecurrent", + "decompilecurrent", + "decompile", + "compilediff", + "decompileext", + "compileext", + "loadext", + "loadrepo", + "decompileepf", + "compileepf", + "updatedb", + "convertfiles", + "Конфигуратор", + "Неопределено", + "Нрег", + "Врег", + "Парсер", + "Json" + ], + "ignoreRegExp": [ + "/\\(.*\\.(jpg|jpeg|png|md|gif|JPG|JPEG|PNG|MD|GIF)\\)/g", + "/((http|https|ftp|git)\\S*)/g", + "/--[А-яA-z-]{1,}/g" + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..26e307a --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,242 @@ +// Available variables which can be used inside of strings. +// ${workspaceRoot}: the root folder of the team +// ${file}: the current opened file +// ${fileBasename}: the current opened file's basename +// ${fileDirname}: the current opened file's dirname +// ${fileExtname}: the current opened file's extension +// ${cwd}: the current working directory of the spawned process + +{ + "version": "2.0.0", + "_runner": "terminal", + "windows": { + "command": "cmd", + "args": ["/c", "chcp 65001 ;"] + }, + "linux": { + "command": "sh", + "args": ["-c"] + }, + "isShellCommand": true, + // "showOutput": "silent", + "_runner": "terminal", + "tasks": [ + { + "taskName": "Testing project", + "args": [ + "1testrunner", + "-runall", + "${workspaceRoot}/tests" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + // "isBuildCommand": false, + "isTestCommand": false, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + } + }, + { + "taskName": "Testing current test-file", + "args": [ + "1testrunner", + "-run", + "${file}", + ], + "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": "Exec all features", + "args": [ + "1bdd", + "${workspaceRoot}/features", + "-fail-fast", + "-out", + "${workspaceRoot}/exec.log" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": true, + "isTestCommand": false, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + } + }, + { + "taskName": "Exec feature", + "args": [ + "1bdd", + "${file}", + "-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": "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": [ + "1bdd", + "gen", + "${file}", + "-out", + "${workspaceRoot}/exec.log" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false, + "isTestCommand": false, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + } + }, + { + "taskName": "Opm: package build", + "args": [ + "opm", + "build", + "${workspaceRoot}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: compile", + "args": [ + "oscript", + "-encoding=utf-8", + "-compile", + "${file}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: check", + "args": [ + "oscript", + "-encoding=utf-8", + "-check", + "${file}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: make", + "args": [ + "oscript", + "-encoding=utf-8", + "-make", + "${file}", + "${fileBasename}.exe" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: run", + "args": [ + "oscript", + "-encoding=utf-8", + "${file}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": true, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "^{Модуль\\s+(.*)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+(.*)}$", + "file": 1, + "location": 2, + "message": 3 + } + } + } + ] +} \ No newline at end of file From d7365f8cc2a77818c98f6b1db2fc756f9baaba8d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 13:38:26 +0300 Subject: [PATCH 02/11] =?UTF-8?q?=D0=A3=D1=80=D0=BE=D0=B2=D0=B5=D0=BD?= =?UTF-8?q?=D1=8C=20=D0=BB=D0=BE=D0=B3=D0=B0=20cmdline=20=D0=BD=D1=83?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D0=B2=D1=8B=D1=81=D1=82=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D1=82=D1=8C=20=D1=82=D0=B0=D0=BA=D0=B8=D0=BC=20=D0=B6?= =?UTF-8?q?=D0=B5,=20=D0=BA=D0=B0=D0=BA=20=D0=B8=20=D1=83=20=D0=B1=D0=B8?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8=20fix=20#16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index 2ca15e8..3c0a30b 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -76,6 +76,9 @@ Лог.УстановитьУровень(УровеньЛога); Лог.УстановитьРаскладку(ЭтотОбъект); + Лог_cmdline = Логирование.ПолучитьЛог("oscript.lib.cmdline"); + Лог_cmdline.УстановитьУровень(УровеньЛога); + Возврат Лог; КонецФункции From dc249d7ca4c43004020a0b49514f31ffe8599429 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 14:54:16 +0300 Subject: [PATCH 03/11] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D1=80=D0=B5=D0=B4=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9/=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20fix=20#13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\202\321\200\320\276\320\262.os" | 31 +++++++++++++++-- ...20\274\320\265\321\202\321\200\321\213.os" | 34 ++++++++++++++++++- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index cdc594d..b24426e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -35,7 +35,15 @@ ТаблицаКоманд = Парсер.СправкаПоПараметрам(); КонецЕсли; - СоответствиеПеременныхСреды = ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(ТаблицаКоманд, ПрефиксПеременныхСреды); + НовоеСоответствиеПеременныхСреды = ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(ТаблицаКоманд, ПрефиксПеременныхСреды); + Если Не ЗначениеЗаполнено(СоответствиеПеременныхСреды) Тогда + СоответствиеПеременныхСреды = НовоеСоответствиеПеременныхСреды; + Иначе + ДополнитьСоответствиеСУчетомПриоритета(СоответствиеПеременныхСреды, НовоеСоответствиеПеременныхСреды); + + Лог.Отладка("Коллекция переменных среды с соответствующими ключами-параметрами:"); + ПоказатьПараметрыВРежимеОтладки(СоответствиеПеременныхСреды); + КонецЕсли; Параметры = Парсер.Разобрать(Аргументы); @@ -87,6 +95,24 @@ Возврат ТекущийКаталогПроекта; КонецФункции // ПолучитьТекущийКаталогПроекта() +// Загрузить соответствие переменных окружения параметрам команд +// +// Параметры: +// Источник - <Соответствие или ФиксированноеСоответствие> - откуда загружаем +// ключ - имя переменной окружения +// значение - имя соответствующего ключа/параметра настройки +// +Процедура ЗагрузитьСоответствиеПеременныхОкруженияПараметрамКоманд(Источник) Экспорт + ТипИсточника = ТипЗнч(Источник); + Если ТипИсточника <> Тип("Соответствие") И ТипИсточника <> Тип("ФиксированноеСоответствие") Тогда + ВызватьИсключение "Неверный тип источника у метода ЗагрузитьСоответствиеПеременныхОкруженияПараметрамКоманд"; + КонецЕсли; + СоответствиеПеременныхСреды = Новый Соответствие; + Для каждого КлючЗначение Из Источник Цикл + СоответствиеПеременныхСреды.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение); + КонецЦикла; +КонецПроцедуры + #КонецОбласти Функция ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(Знач ТаблицаКоманд, Знач ПрефиксПеременныхСреды) @@ -148,8 +174,6 @@ ДополнитьАргументыИзФайлаНастроек(Команда, ЗначенияПараметровНизкийПриоритет, НастройкиИзФайла); КонецЕсли; - // СоответствиеПеременныхСреды = СоответствиеПеременныхОкруженияПараметрамКоманд(); - ЗаполнитьЗначенияИзПеременныхОкружения(ЗначенияПараметровНизкийПриоритет, СоответствиеПеременныхСреды); ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, ЗначенияПараметровНизкийПриоритет); @@ -230,6 +254,7 @@ Для каждого Элемент Из СоответствиеПеременных Цикл ЗначениеПеременной = ПолучитьПеременнуюСреды(ВРег(Элемент.Ключ)); + Лог.Отладка("В переменных среды найден параметр: <%1> = <%2>, тип %3", Элемент.Ключ, ЗначениеПеременной, ТипЗнч(ЗначениеПеременной)); Если ЗначениеПеременной <> Неопределено Тогда Если ЗначениеПеременной = """""" Или ЗначениеПеременной = "''" Тогда ЗначениеПеременной = ""; diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 3d7e60d..69e9c21 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -26,6 +26,8 @@ СписокТестов.Добавить("Тест_ЧтениеПараметровКомандыИзПеременныхСреды"); СписокТестов.Добавить("Тест_ПриоритетПеременныхСредыНадПараметрамиИзФайла"); + СписокТестов.Добавить("Тест_ПолучитьВнешнееСоответствиеПеременныхОкруженияПараметрамКоманд"); + СписокТестов.Добавить("Тест_ПроверяетВсюЦепочкуПриоритетов"); СписокТестов.Добавить("Тест_ПроверяетВсюЦепочкуПриоритетовДляКоманды"); @@ -322,6 +324,37 @@ Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры +Процедура Тест_ПолучитьВнешнееСоответствиеПеременныхОкруженияПараметрамКоманд() Экспорт + // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ИМЯ_ПАРАМЕТРА = "Параметр"; + ЗНАЧЕНИЕ_ПАРАМЕТРА = "47"; + + ИмяПеременнойСредыПоУмолчанию = СтрШаблон("%1_%2", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_ПАРАМЕТРА); + УстановитьПеременнуюСреды(ИмяПеременнойСредыПоУмолчанию, Неопределено); + + ИмяПеременнойСредыДляСоответствия = СтрШаблон("ADD_%1", ИмяПеременнойСредыПоУмолчанию); + УстановитьПеременнуюСреды(ИмяПеременнойСредыДляСоответствия, ЗНАЧЕНИЕ_ПАРАМЕТРА); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); + + СоответствиеПеременных = Новый Соответствие(); + СоответствиеПеременных.Вставить(ИмяПеременнойСредыДляСоответствия, ИМЯ_ПАРАМЕТРА); + СоответствиеПеременных = Новый ФиксированноеСоответствие(СоответствиеПеременных); + + ЧитательПараметров = Новый ЧитательПараметров; + ЧитательПараметров.ЗагрузитьСоответствиеПеременныхОкруженияПараметрамКоманд(СоответствиеПеременных); + + ПараметрыКомСтроки = Новый Массив; + + Параметры = ЧитательПараметров.Прочитать(Парсер, ПараметрыКомСтроки, "", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ); + + Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено); + Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); + Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); +КонецПроцедуры + Процедура Тест_ПроверяетВсюЦепочкуПриоритетов() Экспорт ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; ИМЯ_НАСТРОЙКИ = "Настройки"; @@ -353,7 +386,6 @@ КонецПроцедуры Процедура Тест_ПроверяетВсюЦепочкуПриоритетовДляКоманды() Экспорт - // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); ИМЯ_КОМАНДЫ = "test"; ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; ИМЯ_НАСТРОЙКИ = "Настройки"; From bf8044a3944302a4689e18b72691af57b8c840f3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 15:15:07 +0300 Subject: [PATCH 04/11] =?UTF-8?q?=D0=92=D1=8B=D0=B4=D0=B0=D1=8E=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D1=8F?= =?UTF-8?q?=D1=85=20=D1=80=D0=B0=D0=B7=D0=BB=D0=B8=D1=87=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20fix=20#10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\202\321\200\320\276\320\262.os" | 98 ++++++++++--------- ...20\274\320\265\321\202\321\200\321\213.os" | 25 +++++ 2 files changed, 79 insertions(+), 44 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index b24426e..a96f80c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -22,57 +22,67 @@ // <Соответствие> - итоговые параметры // Функция Прочитать(Парсер, Знач Аргументы = Неопределено, Знач КлючФайлаНастроек = "", Знач ПрефиксПеременныхСреды = "") Экспорт - Если Аргументы = Неопределено Тогда - Аргументы = АргументыКоманднойСтроки; - КонецЕсли; - Если ПрефиксПеременныхСреды = "" Тогда - ПрефиксПеременныхСреды = ЧтениеПараметров.ПрефиксПеременныхОкружения(); - КонецЕсли; - Лог.Отладка("Использую префикс переменных окружения %1", ПрефиксПеременныхСреды); + Параметры = Неопределено; - ТаблицаКоманд = Парсер.СправкаВозможныеКоманды(); - Если ТаблицаКоманд.Количество() = 0 Тогда - ТаблицаКоманд = Парсер.СправкаПоПараметрам(); - КонецЕсли; + Попытка + + Если Аргументы = Неопределено Тогда + Аргументы = АргументыКоманднойСтроки; + КонецЕсли; + Если ПрефиксПеременныхСреды = "" Тогда + ПрефиксПеременныхСреды = ЧтениеПараметров.ПрефиксПеременныхОкружения(); + КонецЕсли; + Лог.Отладка("Использую префикс переменных окружения %1", ПрефиксПеременныхСреды); - НовоеСоответствиеПеременныхСреды = ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(ТаблицаКоманд, ПрефиксПеременныхСреды); - Если Не ЗначениеЗаполнено(СоответствиеПеременныхСреды) Тогда - СоответствиеПеременныхСреды = НовоеСоответствиеПеременныхСреды; - Иначе - ДополнитьСоответствиеСУчетомПриоритета(СоответствиеПеременныхСреды, НовоеСоответствиеПеременныхСреды); + ТаблицаКоманд = Парсер.СправкаВозможныеКоманды(); + Если ТаблицаКоманд.Количество() = 0 Тогда + ТаблицаКоманд = Парсер.СправкаПоПараметрам(); + КонецЕсли; - Лог.Отладка("Коллекция переменных среды с соответствующими ключами-параметрами:"); - ПоказатьПараметрыВРежимеОтладки(СоответствиеПеременныхСреды); - КонецЕсли; + НовоеСоответствиеПеременныхСреды = ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(ТаблицаКоманд, ПрефиксПеременныхСреды); + Если Не ЗначениеЗаполнено(СоответствиеПеременныхСреды) Тогда + СоответствиеПеременныхСреды = НовоеСоответствиеПеременныхСреды; + Иначе + ДополнитьСоответствиеСУчетомПриоритета(СоответствиеПеременныхСреды, НовоеСоответствиеПеременныхСреды); - Параметры = Парсер.Разобрать(Аргументы); + Лог.Отладка("Коллекция переменных среды с соответствующими ключами-параметрами:"); + ПоказатьПараметрыВРежимеОтладки(СоответствиеПеременныхСреды); + КонецЕсли; - Если ТипЗнч(Параметры) = Тип("Структура") и Параметры.Свойство("Команда") Тогда - Команда = Параметры.Команда; - Параметры = Параметры.ЗначенияПараметров; - Лог.Отладка("Параметры команды %1 из командной строки, полученные от парсера cmdline:", Команда); - Иначе - Лог.Отладка("Параметры командной строки, полученные от парсера cmdline:"); - КонецЕсли; + Параметры = Парсер.Разобрать(Аргументы); - ПоказатьПараметрыВРежимеОтладки(Параметры); - - Если КлючФайлаНастроек = "" Тогда - КлючФайлаНастроек = ЧтениеПараметров.КлючФайлаНастроек(); - КонецЕсли; - Лог.Отладка("КлючФайлаНастроек <%1>", КлючФайлаНастроек); + Если ТипЗнч(Параметры) = Тип("Структура") и Параметры.Свойство("Команда") Тогда + Команда = Параметры.Команда; + Параметры = Параметры.ЗначенияПараметров; + Лог.Отладка("Параметры команды %1 из командной строки, полученные от парсера cmdline:", Команда); + Иначе + Лог.Отладка("Параметры командной строки, полученные от парсера cmdline:"); + КонецЕсли; - Если Не ЗначениеЗаполнено(ТекущийКаталогПроекта) Тогда - ТекущийКаталогПроекта = ТекущийКаталог(); - КонецЕсли; - Лог.Отладка("ТекущийКаталогПроекта <%1>", ТекущийКаталогПроекта); - - ДополнитьЗначенияПараметров(Параметры, Команда, КлючФайлаНастроек, СоответствиеПеременныхСреды); + ПоказатьПараметрыВРежимеОтладки(Параметры); + + Если КлючФайлаНастроек = "" Тогда + КлючФайлаНастроек = ЧтениеПараметров.КлючФайлаНастроек(); + КонецЕсли; + Лог.Отладка("КлючФайлаНастроек <%1>", КлючФайлаНастроек); - Параметры.Вставить("Команда", Команда); - - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(Параметры); + Если Не ЗначениеЗаполнено(ТекущийКаталогПроекта) Тогда + ТекущийКаталогПроекта = ТекущийКаталог(); + КонецЕсли; + Лог.Отладка("ТекущийКаталогПроекта <%1>", ТекущийКаталогПроекта); + + ДополнитьЗначенияПараметров(Параметры, Команда, КлючФайлаНастроек, СоответствиеПеременныхСреды); + + Параметры.Вставить("Команда", Команда); + + Лог.Отладка("Итоговые параметры:"); + ПоказатьПараметрыВРежимеОтладки(Параметры); + Исключение + Лог.Ошибка("Ошибка чтения настроек + |%1", ОписаниеОшибки()); + + ВызватьИсключение; + КонецПопытки; Возврат Параметры; КонецФункции // Прочитать @@ -210,7 +220,7 @@ ФайлСуществующий = Новый Файл(ИмяФайла); Если Не ФайлСуществующий.Существует() Тогда - Лог.Отладка("Файл настроек не существует."); + ВызватьИсключение СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла); Возврат Новый Соответствие; КонецЕсли; Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 69e9c21..e5e59be 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -31,6 +31,8 @@ СписокТестов.Добавить("Тест_ПроверяетВсюЦепочкуПриоритетов"); СписокТестов.Добавить("Тест_ПроверяетВсюЦепочкуПриоритетовДляКоманды"); + СписокТестов.Добавить("Тест_ЧтениеПараметровИзНеСуществующегоФайла"); + Возврат СписокТестов; КонецФункции @@ -101,6 +103,29 @@ Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры +Процедура Тест_ЧтениеПараметровИзНеСуществующегоФайла() Экспорт + ИМЯ_НАСТРОЙКИ = "Настройки"; + ИМЯ_ПАРАМЕТРА = "Параметр"; + ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; + + ПутьФайлаНастроек = "НесуществующийПуть"; + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ); + Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); + + ПараметрыКомСтроки = Новый Массив; + ПараметрыКомСтроки.Добавить(ПутьФайлаНастроек); + + Массив = Новый Массив; + Массив.Добавить(Парсер); + Массив.Добавить(ПараметрыКомСтроки); + Массив.Добавить(ИМЯ_НАСТРОЙКИ); + Массив.Добавить(""); + + Ожидаем.Что(ЧтениеПараметров).Метод("Прочитать", Массив).ВыбрасываетИсключение("Файл настроек не существует"); +КонецПроцедуры + Процедура Тест_ПриоритетКоманднойСтрокиНадПараметрамиИзФайла() Экспорт ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; From d0535485dbf4cccf6eda757210d00435a5806c09 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 15:21:30 +0300 Subject: [PATCH 05/11] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20"=D0=BF=D0=BB=D0=BE=D1=81=D0=BA=D0=B8=D1=85"=20json-=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20#17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\202\321\200\320\276\320\262.os" | 10 +++++-- ...20\274\320\265\321\202\321\200\321\213.os" | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index a96f80c..0266881 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -80,7 +80,7 @@ Исключение Лог.Ошибка("Ошибка чтения настроек |%1", ОписаниеОшибки()); - + ВызватьИсключение; КонецПопытки; @@ -240,7 +240,13 @@ КлючПоУмолчанию = ЧтениеПараметров.КлючКомандыВФайлеНастроекПоУмолчанию(); ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, НастройкиИзФайла.Получить(Команда)); - ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, НастройкиИзФайла.Получить(КлючПоУмолчанию)); + + НастройкиПоУмолчанию = НастройкиИзФайла.Получить(КлючПоУмолчанию); + Если НастройкиПоУмолчанию = Неопределено Тогда + ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, НастройкиИзФайла); + Иначе + ДополнитьСоответствиеСУчетомПриоритета(ЗначенияПараметров, НастройкиПоУмолчанию); + КонецЕсли; Лог.Отладка("Параметры после вставки из файла настроек:"); ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров); diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index e5e59be..88199e4 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -15,6 +15,7 @@ СписокТестов = Новый Массив; СписокТестов.Добавить("Тест_ЧтениеПараметровКоманднойСтроки"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайла"); + СписокТестов.Добавить("Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию"); СписокТестов.Добавить("Тест_ПриоритетКоманднойСтрокиНадПараметрамиИзФайла"); СписокТестов.Добавить("Тест_ЧтениеПараметровКомандыИзКоманднойСтроки"); @@ -103,6 +104,31 @@ Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры +Процедура Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию() Экспорт + ИМЯ_НАСТРОЙКИ = "Настройки"; + ИМЯ_ПАРАМЕТРА = "Параметр"; + ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; + + ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ); + Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); + + СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""%1"": %2 } ", + ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); + + ПараметрыКомСтроки = Новый Массив; + ПараметрыКомСтроки.Добавить(ПутьФайлаНастроек); + + Параметры = ЧтениеПараметров.Прочитать(Парсер, ПараметрыКомСтроки, ИМЯ_НАСТРОЙКИ); + + Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); + Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено); + Ожидаем.Что(Параметры[ИМЯ_НАСТРОЙКИ]).Равно(ПутьФайлаНастроек); + Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); +КонецПроцедуры + Процедура Тест_ЧтениеПараметровИзНеСуществующегоФайла() Экспорт ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; From 4cafae3475238498f45285b2276924af2cd68c7b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 17:37:13 +0300 Subject: [PATCH 06/11] =?UTF-8?q?=D0=AF=D0=B2=D0=BD=D0=BE=D0=B5=20=D1=83?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=83=D1=82?= =?UTF-8?q?=D0=B8=20=D0=BA=20=D1=84=D0=B0=D0=B9=D0=BB=D1=83=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#6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\202\321\200\320\276\320\262.os" | 29 ++++++++++++++++++ ...20\265\321\202\321\200\320\276\320\262.os" | 11 +++++++ ...20\274\320\265\321\202\321\200\321\213.os" | 30 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 0266881..de106e3 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -3,9 +3,25 @@ Перем ТекущийКаталогПроекта; Перем Лог; Перем СоответствиеПеременныхСреды; +Перем ПутьФайлаНастроек; #Область ПрограммныйИнтерфейс +Процедура ПриСозданииОбъекта(Знач НовыйПутьФайлаНастроек = "") + Если Не ЗначениеЗаполнено(НовыйПутьФайлаНастроек) Тогда + ПутьФайлаНастроекПоУмолчанию = ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию(); + ПутьФайлаНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталог(), ПутьФайлаНастроекПоУмолчанию); + ФайлПоУмолчанию = Новый Файл(ПутьФайлаНастроекПоУмолчанию); + Если ФайлПоУмолчанию.Существует() Тогда + НовыйПутьФайлаНастроек = ФайлПоУмолчанию; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(НовыйПутьФайлаНастроек) Тогда + УстановитьФайлПоУмолчанию(НовыйПутьФайлаНастроек); + КонецЕсли; +КонецПроцедуры + // Выполнить основной анализ и получить финальные параметры с учетом командной строки, переменных среды, файлов настроек // // Параметры: @@ -105,6 +121,19 @@ Возврат ТекущийКаталогПроекта; КонецФункции // ПолучитьТекущийКаталогПроекта() +// Установить путь к файлу настроек по умолчанию +// +// Параметры: +// ПутьФайлаНастроек - <Строка> - путь файла +// +Процедура УстановитьФайлПоУмолчанию(Знач НовыйПутьФайлаНастроек) Экспорт + Файл = Новый Файл(НовыйПутьФайлаНастроек); + СообщениеОшибки = СтрШаблон("Файл настроек не существует. Путь %1", НовыйПутьФайлаНастроек); + Ожидаем.Что(Файл.Существует(), СообщениеОшибки).ЭтоИстина(); + + ПутьФайлаНастроек = НовыйПутьФайлаНастроек; +КонецПроцедуры + // Загрузить соответствие переменных окружения параметрам команд // // Параметры: diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\247\321\202\320\265\320\275\320\270\320\265\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\247\321\202\320\265\320\275\320\270\320\265\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index deeb1e5..32f9f67 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\247\321\202\320\265\320\275\320\270\320\265\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\247\321\202\320\265\320\275\320\270\320\265\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -1,3 +1,5 @@ +Перем ЧитательПараметров; + // см. ЧитательПараметров.Прочитать Функция Прочитать(Парсер, Знач Аргументы, Знач КлючФайлаНастроек = "", Знач ПрефиксПеременныхСреды = "") Экспорт ЧитательПараметров = Новый ЧитательПараметров; @@ -31,3 +33,12 @@ Функция ПрефиксПеременныхОкружения() Экспорт Возврат "ONESCRIPT_APP_"; КонецФункции + +// Возвращает имя по умолчанию для файла с настройками +// +// Возвращаемое значение: +// <Строка> +// +Функция ИмяФайлаНастроекПоУмолчанию() Экспорт + Возврат "params.json"; +КонецФункции diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 88199e4..8556f95 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -16,6 +16,7 @@ СписокТестов.Добавить("Тест_ЧтениеПараметровКоманднойСтроки"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайла"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию"); + СписокТестов.Добавить("Тест_ЧтениеПараметровИзПереданногоФайлаПоУмолчанию"); СписокТестов.Добавить("Тест_ПриоритетКоманднойСтрокиНадПараметрамиИзФайла"); СписокТестов.Добавить("Тест_ЧтениеПараметровКомандыИзКоманднойСтроки"); @@ -104,6 +105,35 @@ Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры +Процедура Тест_ЧтениеПараметровИзПереданногоФайлаПоУмолчанию() Экспорт + ИМЯ_НАСТРОЙКИ = "Настройки"; + ИМЯ_ПАРАМЕТРА = "Параметр"; + ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; + + // ВызватьИсключение "Не реализован ПОКА что"; + ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); + + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ); + Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); + + СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""%1"": %2 } ", + ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); + + ПараметрыКомСтроки = Новый Массив; + ПараметрыКомСтроки.Добавить(ПутьФайлаНастроек); + + ЧитательПараметров = Новый ЧитательПараметров; + ЧитательПараметров.УстановитьФайлПоУмолчанию(ПутьФайлаНастроек); + + Параметры = ЧитательПараметров.Прочитать(Парсер, ПараметрыКомСтроки, ИМЯ_НАСТРОЙКИ); + + Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); + Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено); + Ожидаем.Что(Параметры[ИМЯ_НАСТРОЙКИ]).Равно(ПутьФайлаНастроек); + Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); +КонецПроцедуры + Процедура Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию() Экспорт ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; From f5491dac6d152d3489b72f29defb4ecc1ed75a5e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 21:40:20 +0300 Subject: [PATCH 07/11] =?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=BE=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= =?UTF-8?q?=20#6=20=D0=9F=D1=80=D0=B8=D0=BE=D1=80=D0=B8=D1=82=D0=B5=D1=82?= =?UTF-8?q?=20=D1=83=20=D1=8D=D1=82=D0=BE=D0=B3=D0=BE=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=B0=20=D1=81=D0=B0=D0=BC=D1=8B=D0=B9=20=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=98?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D1=81=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D0=BE=D0=BC=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\202\321\200\320\276\320\262.os" | 33 ++++++------ ...20\274\320\265\321\202\321\200\321\213.os" | 54 ++++++++++--------- 2 files changed, 46 insertions(+), 41 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index de106e3..784d2ef 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -3,15 +3,14 @@ Перем ТекущийКаталогПроекта; Перем Лог; Перем СоответствиеПеременныхСреды; -Перем ПутьФайлаНастроек; +Перем ПутьФайлаНастроекПоУмолчанию; #Область ПрограммныйИнтерфейс Процедура ПриСозданииОбъекта(Знач НовыйПутьФайлаНастроек = "") Если Не ЗначениеЗаполнено(НовыйПутьФайлаНастроек) Тогда - ПутьФайлаНастроекПоУмолчанию = ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию(); - ПутьФайлаНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталог(), ПутьФайлаНастроекПоУмолчанию); - ФайлПоУмолчанию = Новый Файл(ПутьФайлаНастроекПоУмолчанию); + ПутьФайла = ОбъединитьПути(ТекущийКаталог(), ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию()); + ФайлПоУмолчанию = Новый Файл(ПутьФайла); Если ФайлПоУмолчанию.Существует() Тогда НовыйПутьФайлаНастроек = ФайлПоУмолчанию; КонецЕсли; @@ -124,14 +123,14 @@ // Установить путь к файлу настроек по умолчанию // // Параметры: -// ПутьФайлаНастроек - <Строка> - путь файла +// НовыйПутьФайлаНастроек - <Строка> - путь файла // Процедура УстановитьФайлПоУмолчанию(Знач НовыйПутьФайлаНастроек) Экспорт Файл = Новый Файл(НовыйПутьФайлаНастроек); СообщениеОшибки = СтрШаблон("Файл настроек не существует. Путь %1", НовыйПутьФайлаНастроек); Ожидаем.Что(Файл.Существует(), СообщениеОшибки).ЭтоИстина(); - ПутьФайлаНастроек = НовыйПутьФайлаНастроек; + ПутьФайлаНастроекПоУмолчанию = НовыйПутьФайлаНастроек; КонецПроцедуры // Загрузить соответствие переменных окружения параметрам команд @@ -174,7 +173,7 @@ Процедура ДобавитьПараметрВКоллекциюСоответствияПеременныхОкружения(РезСоответствие, Параметры, ПрефиксПеременныхСреды) Для каждого Параметр Из Параметры Цикл ИмяПараметра = Параметр.Имя; - ИмяПеременнойСреды = СтрШаблон("%1_%2", + ИмяПеременнойСреды = СтрШаблон("%1%2", ПрефиксПеременныхСреды, ПреобразоватьВИмяПеременнойСреды(ИмяПараметра)); РезСоответствие.Вставить(ИмяПеременнойСреды, ИмяПараметра); КонецЦикла; @@ -205,7 +204,7 @@ Если Не ЗначениеЗаполнено(ПутьКФайлуНастройки) Тогда Лог.Отладка("В параметрах не задан ключ %1 к файлу настройки", КлючФайлаНастроек); КонецЕсли; - НастройкиИзФайла = ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, ПутьКФайлуНастройки); + НастройкиИзФайла = ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, ПутьКФайлуНастройки, ПутьФайлаНастроекПоУмолчанию); ЗначенияПараметровНизкийПриоритет = Новый Соответствие; @@ -224,14 +223,18 @@ КонецПроцедуры // Функция ПрочитатьНастройкиФайлJSON(Знач ТекущийКаталогПроекта, Знач ПутьКФайлу, Знач ПутьФайлаПоУмолчанию ) -Функция ПрочитатьНастройкиФайлJSON(Знач ТекущийКаталогПроекта, Знач ПутьКФайлу ) +Функция ПрочитатьНастройкиФайлJSON(Знач ТекущийКаталогПроекта, Знач ПутьКФайлу, Знач ПутьФайлаПоУмолчанию ) Рез = Новый Соответствие; // Лог.Отладка(":"+ПутьКФайлу+":"+ПутьФайлаПоУмолчанию); - // Если ПутьКФайлу = Неопределено ИЛИ НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда - // ПутьКФайлу = ПутьФайлаПоУмолчанию; - // КонецЕсли; + Если ПутьКФайлу = Неопределено ИЛИ НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда + ПутьКФайлу = ПутьФайлаПоУмолчанию; + Лог.Отладка("Использую путь к файлу настройки по умолчанию %1", ПутьКФайлу); + Иначе + Лог.Отладка("Передан путь к файлу настройки %1", ПутьКФайлу); + КонецЕсли; Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда + Лог.Отладка("Передана пустая строка в качестве пути к файлу настройки"); Возврат Рез; КонецЕсли; Ожидаем.Что(ПутьКФайлу, "Путь к файлу настроек должен быть заполнен").Не_().Равно("").Не_().Равно(Неопределено); @@ -314,17 +317,17 @@ Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров, Знач Родитель = "") Если Родитель = "" Тогда - Лог.Отладка("Тип параметров %1", ТипЗнч(ЗначенияПараметров)); + Лог.Отладка(" Тип параметров %1", ТипЗнч(ЗначенияПараметров)); КонецЕсли; Если ЗначенияПараметров.Количество() = 0 Тогда - Лог.Отладка("Коллекция параметров пуста!"); + Лог.Отладка(" Коллекция параметров пуста!"); КонецЕсли; Для каждого Элемент из ЗначенияПараметров Цикл ПредставлениеКлюча = Элемент.Ключ; Если Не ПустаяСтрока(Родитель) Тогда ПредставлениеКлюча = СтрШаблон("%1.%2", Родитель, ПредставлениеКлюча); КонецЕсли; - Лог.Отладка("Получен параметр <%1> = <%2>", ПредставлениеКлюча, Элемент.Значение); + Лог.Отладка(" Получен параметр <%1> = <%2>", ПредставлениеКлюча, Элемент.Значение); Если ТипЗнч(Элемент.Значение) = Тип("Соответствие") Тогда ПоказатьПараметрыВРежимеОтладки(Элемент.Значение, ПредставлениеКлюча); КонецЕсли; diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 8556f95..bca2151 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -106,31 +106,26 @@ КонецПроцедуры Процедура Тест_ЧтениеПараметровИзПереданногоФайлаПоУмолчанию() Экспорт - ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; - // ВызватьИсключение "Не реализован ПОКА что"; - ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); + ПутьФайлаНастроекПоУмолчанию = МенеджерВременныхФайлов.СоздатьФайл("json"); Парсер = Новый ПарсерАргументовКоманднойСтроки(); - Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ); Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); - СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""%1"": %2 } ", + СохранитьНастройкуВФайл(ПутьФайлаНастроекПоУмолчанию, СтрШаблон("{ ""%1"": %2 } ", ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); ПараметрыКомСтроки = Новый Массив; - ПараметрыКомСтроки.Добавить(ПутьФайлаНастроек); ЧитательПараметров = Новый ЧитательПараметров; - ЧитательПараметров.УстановитьФайлПоУмолчанию(ПутьФайлаНастроек); - - Параметры = ЧитательПараметров.Прочитать(Парсер, ПараметрыКомСтроки, ИМЯ_НАСТРОЙКИ); + ЧитательПараметров.УстановитьФайлПоУмолчанию(ПутьФайлаНастроекПоУмолчанию); + + Параметры = ЧитательПараметров.Прочитать(Парсер, ПараметрыКомСтроки); Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено); - Ожидаем.Что(Параметры[ИМЯ_НАСТРОЙКИ]).Равно(ПутьФайлаНастроек); Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры @@ -334,11 +329,11 @@ КонецПроцедуры Процедура Тест_ЧтениеПараметровИзПеременныхСреды() Экспорт - ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "47"; - УстановитьПеременнуюСреды(СтрШаблон("%1_%2", + УстановитьПеременнуюСреды(СтрШаблон("%1%2", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_ПАРАМЕТРА), ЗНАЧЕНИЕ_ПАРАМЕТРА); Парсер = Новый ПарсерАргументовКоманднойСтроки(); @@ -355,11 +350,11 @@ Процедура Тест_ЧтениеПараметровКомандыИзПеременныхСреды() Экспорт ИМЯ_КОМАНДЫ = "test"; - ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "47"; - УстановитьПеременнуюСреды(СтрШаблон("%1_%2_%3", + УстановитьПеременнуюСреды(СтрШаблон("%1%2_%3", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_КОМАНДЫ, ИМЯ_ПАРАМЕТРА), ЗНАЧЕНИЕ_ПАРАМЕТРА); Парсер = Новый ПарсерАргументовКоманднойСтроки(); @@ -378,12 +373,12 @@ КонецПроцедуры Процедура Тест_ПриоритетПеременныхСредыНадПараметрамиИзФайла() Экспорт - ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "51"; - УстановитьПеременнуюСреды(СтрШаблон("%1_%2", + УстановитьПеременнуюСреды(СтрШаблон("%1%2", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_ПАРАМЕТРА), ЗНАЧЕНИЕ_ПАРАМЕТРА); ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); @@ -407,11 +402,11 @@ Процедура Тест_ПолучитьВнешнееСоответствиеПеременныхОкруженияПараметрамКоманд() Экспорт // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); - ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "47"; - ИмяПеременнойСредыПоУмолчанию = СтрШаблон("%1_%2", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_ПАРАМЕТРА); + ИмяПеременнойСредыПоУмолчанию = СтрШаблон("%1%2", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_ПАРАМЕТРА); УстановитьПеременнуюСреды(ИмяПеременнойСредыПоУмолчанию, Неопределено); ИмяПеременнойСредыДляСоответствия = СтрШаблон("ADD_%1", ИмяПеременнойСредыПоУмолчанию); @@ -437,18 +432,22 @@ КонецПроцедуры Процедура Тест_ПроверяетВсюЦепочкуПриоритетов() Экспорт - ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "51"; - УстановитьПеременнуюСреды(СтрШаблон("%1_%2", + УстановитьПеременнуюСреды(СтрШаблон("%1%2", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_ПАРАМЕТРА), "НеверноеЗначение 2"); ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); - СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""default"" : { ""%1"": ""НеверноеЗначение"" } }", + СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""%1"": ""НеверноеЗначение"" }", ИМЯ_ПАРАМЕТРА)); - + + ПутьФайлаНастроекПоУмолчанию = МенеджерВременныхФайлов.СоздатьФайл("json"); + СохранитьНастройкуВФайл(ПутьФайлаНастроекПоУмолчанию, СтрШаблон("{ ""%1"": ""НеверноеЗначениеПоУмолчанию"" }", + ИМЯ_ПАРАМЕТРА)); + Парсер = Новый ПарсерАргументовКоманднойСтроки(); Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ); Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); @@ -458,7 +457,10 @@ ПараметрыКомСтроки.Добавить(ИМЯ_ПАРАМЕТРА); ПараметрыКомСтроки.Добавить(ЗНАЧЕНИЕ_ПАРАМЕТРА); - Параметры = ЧтениеПараметров.Прочитать(Парсер, ПараметрыКомСтроки, "", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ); + ЧитательПараметров = Новый ЧитательПараметров; + ЧитательПараметров.УстановитьФайлПоУмолчанию(ПутьФайлаНастроекПоУмолчанию); + + Параметры = ЧитательПараметров.Прочитать(Парсер, ПараметрыКомСтроки, "", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ); Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено); @@ -468,12 +470,12 @@ Процедура Тест_ПроверяетВсюЦепочкуПриоритетовДляКоманды() Экспорт ИМЯ_КОМАНДЫ = "test"; - ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST"; + ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "51"; - УстановитьПеременнуюСреды(СтрШаблон("%1_%2_%3", + УстановитьПеременнуюСреды(СтрШаблон("%1%2_%3", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_КОМАНДЫ, ИМЯ_ПАРАМЕТРА), "НеверноеЗначение 2"); ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); @@ -503,4 +505,4 @@ ЗаписьТекста = Новый ЗаписьТекста(ПутьФайлаНастроек); ЗаписьТекста.ЗаписатьСтроку(СтрокаНастроек); ЗаписьТекста.Закрыть(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры From e75ed2f7f9f5a514d0062a6208169334015a72c1 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 21:42:26 +0300 Subject: [PATCH 08/11] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=BF=D1=80=D0=B8=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20#6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\320\260\320\274\320\265\321\202\321\200\321\213.os" | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index bca2151..25efb0e 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -481,6 +481,10 @@ ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""default"" : { ""%1"": ""НеверноеЗначение"" } }", ИМЯ_ПАРАМЕТРА)); + ПутьФайлаНастроекПоУмолчанию = МенеджерВременныхФайлов.СоздатьФайл("json"); + СохранитьНастройкуВФайл(ПутьФайлаНастроекПоУмолчанию, СтрШаблон("{ ""%1"": ""НеверноеЗначениеПоУмолчанию"" }", + ИМЯ_ПАРАМЕТРА)); + Парсер = Новый ПарсерАргументовКоманднойСтроки(); ОписаниеКоманды = Парсер.ОписаниеКоманды(ИМЯ_КОМАНДЫ); Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, ИМЯ_НАСТРОЙКИ); @@ -493,7 +497,10 @@ ПараметрыКомСтроки.Добавить(ИМЯ_ПАРАМЕТРА); ПараметрыКомСтроки.Добавить(ЗНАЧЕНИЕ_ПАРАМЕТРА); - Параметры = ЧтениеПараметров.Прочитать(Парсер, ПараметрыКомСтроки, "", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ); + ЧитательПараметров = Новый ЧитательПараметров; + ЧитательПараметров.УстановитьФайлПоУмолчанию(ПутьФайлаНастроекПоУмолчанию); + + Параметры = ЧитательПараметров.Прочитать(Парсер, ПараметрыКомСтроки, "", ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ); Ожидаем.Что(Параметры).ИмеетТип("Соответствие"); Ожидаем.Что(Параметры["Команда"]).Равно(ИМЯ_КОМАНДЫ); From b22f9a204bfd0eade3e65a8bfe51c1027d20b5d3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 22:17:25 +0300 Subject: [PATCH 09/11] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=B8=D0=B7=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= =?UTF-8?q?=20#6=20=D0=9F=D1=80=D0=B8=D0=B5=D0=BC=D0=BE=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B7=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=B5=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20#6=20=D0=98?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=8B=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + ...20\265\321\202\321\200\320\276\320\262.os" | 12 +++- ...20\274\320\265\321\202\321\200\321\213.os" | 61 +++++++++++++++++-- 3 files changed, 67 insertions(+), 7 deletions(-) diff --git a/packagedef b/packagedef index c92bdf4..4a50f58 100644 --- a/packagedef +++ b/packagedef @@ -7,6 +7,7 @@ .ВерсияСреды("1.0.17") .Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта()) .ЗависитОт("logos", "0.6.2") + .ЗависитОт("1commands") .ЗависитОт("cmdline", "0.6.0") .ЗависитОт("tempfiles", "0.2.1") .ЗависитОт("asserts", "0.3.1") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 784d2ef..86f259e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -1,4 +1,6 @@ #Использовать json +#Использовать asserts +#Использовать cmdline Перем ТекущийКаталогПроекта; Перем Лог; @@ -12,7 +14,7 @@ ПутьФайла = ОбъединитьПути(ТекущийКаталог(), ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию()); ФайлПоУмолчанию = Новый Файл(ПутьФайла); Если ФайлПоУмолчанию.Существует() Тогда - НовыйПутьФайлаНастроек = ФайлПоУмолчанию; + НовыйПутьФайлаНастроек = ПутьФайла; КонецЕсли; КонецЕсли; @@ -196,7 +198,10 @@ // ПараметрыСистемы.КорневойПутьПроекта = ТекущийКаталогПроекта; - // ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, ОбщиеМетоды.ИмяФайлаНастроек()); + Если Не ЗначениеЗаполнено(ПутьФайлаНастроекПоУмолчанию) Тогда + ПутьКФайлуНастроекПоУмолчанию = ОбъединитьПути(ТекущийКаталогПроекта, + ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию()); + КонецЕсли; // НастройкиИзФайла = ОбщиеМетоды.ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, // ЗначенияПараметров[КлючФайлаНастроек], ПутьКФайлуНастроекПоУмолчанию); @@ -204,7 +209,8 @@ Если Не ЗначениеЗаполнено(ПутьКФайлуНастройки) Тогда Лог.Отладка("В параметрах не задан ключ %1 к файлу настройки", КлючФайлаНастроек); КонецЕсли; - НастройкиИзФайла = ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, ПутьКФайлуНастройки, ПутьФайлаНастроекПоУмолчанию); + НастройкиИзФайла = ПрочитатьНастройкиФайлJSON(ТекущийКаталогПроекта, ПутьКФайлуНастройки, + ПутьФайлаНастроекПоУмолчанию); ЗначенияПараметровНизкийПриоритет = Новый Соответствие; diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 25efb0e..2cc698f 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -2,6 +2,7 @@ #Использовать asserts #Использовать cmdline #Использовать tempfiles +#Использовать 1commands Перем юТест; @@ -17,6 +18,7 @@ СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайла"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию"); СписокТестов.Добавить("Тест_ЧтениеПараметровИзПереданногоФайлаПоУмолчанию"); + СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайлаПоУмолчанию"); СписокТестов.Добавить("Тест_ПриоритетКоманднойСтрокиНадПараметрамиИзФайла"); СписокТестов.Добавить("Тест_ЧтениеПараметровКомандыИзКоманднойСтроки"); @@ -110,13 +112,13 @@ ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; ПутьФайлаНастроекПоУмолчанию = МенеджерВременныхФайлов.СоздатьФайл("json"); - - Парсер = Новый ПарсерАргументовКоманднойСтроки(); - Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); СохранитьНастройкуВФайл(ПутьФайлаНастроекПоУмолчанию, СтрШаблон("{ ""%1"": %2 } ", ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); + Парсер = Новый ПарсерАргументовКоманднойСтроки(); + Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА); + ПараметрыКомСтроки = Новый Массив; ЧитательПараметров = Новый ЧитательПараметров; @@ -129,6 +131,54 @@ Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА); КонецПроцедуры +Процедура Тест_ЧтениеПараметровИзФайлаПоУмолчанию() Экспорт + // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); + ИМЯ_ПАРАМЕТРА = "Параметр"; + ЗНАЧЕНИЕ_ПАРАМЕТРА = 3; + ИМЯ_СКРИПТА = "test.os"; + + ПутьФайлаНастроекПоУмолчанию = ОбъединитьПути(МенеджерВременныхФайлов.БазовыйКаталог, + ЧтениеПараметров.ИмяФайлаНастроекПоУмолчанию()); + + СохранитьНастройкуВФайл(ПутьФайлаНастроекПоУмолчанию, СтрШаблон("{ ""%1"": %2 } ", + ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) ); + + ТекстСкрипта = " + |#Использовать cmdline + |#Использовать ""%1"" + | + |Парсер = Новый ПарсерАргументовКоманднойСтроки(); + |Парсер.ДобавитьИменованныйПараметр(""%2""); + | + |Лог = Логирование.ПолучитьЛог(""%4""); + |Лог.УстановитьУровень(УровниЛога.Отладка); + | + |Параметры = ЧтениеПараметров.Прочитать(Парсер, АргументыКоманднойСтроки); + | + |Если Параметры[""%2""] = %3 Тогда + | ЗавершитьРаботу(0); + |Иначе + | ЗавершитьРаботу(1); + |КонецЕсли; + |"; + + ТекстСкрипта = СтрШаблон(ТекстСкрипта, ПутьИсходников(), ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА, + ПараметрыСистемы.ИмяЛогаСистемы()); + + ПутьСкрипта = ОбъединитьПути(МенеджерВременныхФайлов.БазовыйКаталог, ИМЯ_СКРИПТА); + СохранитьНастройкуВФайл(ПутьСкрипта, ТекстСкрипта); + + Команда = Новый Команда; + Команда.УстановитьСтрокуЗапуска(СтрШаблон("oscript %1", ПутьСкрипта)); + // Команда.ПоказыватьВыводНемедленно(Истина); + КодВозврата = Команда.Исполнить(); + + СообщениеОшибки = СтрШаблон("Не удалось выполнить команду %1 + |%2", ПутьСкрипта, Команда.ПолучитьВывод()); + + Ожидаем.Что(КодВозврата, СообщениеОшибки).Равно(0); +КонецПроцедуры + Процедура Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию() Экспорт ИМЯ_НАСТРОЙКИ = "Настройки"; ИМЯ_ПАРАМЕТРА = "Параметр"; @@ -401,7 +451,6 @@ КонецПроцедуры Процедура Тест_ПолучитьВнешнееСоответствиеПеременныхОкруженияПараметрамКоманд() Экспорт - // ПараметрыСистемы.ИнициализироватьЛог("Отладка"); ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ = "PARAMS_TEST_"; ИМЯ_ПАРАМЕТРА = "Параметр"; ЗНАЧЕНИЕ_ПАРАМЕТРА = "47"; @@ -513,3 +562,7 @@ ЗаписьТекста.ЗаписатьСтроку(СтрокаНастроек); ЗаписьТекста.Закрыть(); КонецПроцедуры + +Функция ПутьИсходников() + Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src"); +КонецФункции // ПутьИсходников() \ No newline at end of file From 375e55b51c1c650fb8a75d5823e8cfd306ad8ff7 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 22:18:04 +0300 Subject: [PATCH 10/11] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=D0=BE=D0=B4=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=B7=D0=B0=20=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\274\320\265\321\202\321\200\320\276\320\262.os" | 12 +++++++++--- ...0\260\320\274\320\265\321\202\321\200\321\213.os" | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 86f259e..a0bbc92 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -38,7 +38,9 @@ // Возвращаемое значение: // <Соответствие> - итоговые параметры // -Функция Прочитать(Парсер, Знач Аргументы = Неопределено, Знач КлючФайлаНастроек = "", Знач ПрефиксПеременныхСреды = "") Экспорт +Функция Прочитать(Парсер, Знач Аргументы = Неопределено, + Знач КлючФайлаНастроек = "", Знач ПрефиксПеременныхСреды = "") Экспорт + Параметры = Неопределено; Попытка @@ -56,7 +58,9 @@ ТаблицаКоманд = Парсер.СправкаПоПараметрам(); КонецЕсли; - НовоеСоответствиеПеременныхСреды = ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(ТаблицаКоманд, ПрефиксПеременныхСреды); + НовоеСоответствиеПеременныхСреды = ПолучитьСоответствиеПеременныхСредыИзТаблицыКоманд(ТаблицаКоманд, + ПрефиксПеременныхСреды); + Если Не ЗначениеЗаполнено(СоответствиеПеременныхСреды) Тогда СоответствиеПеременныхСреды = НовоеСоответствиеПеременныхСреды; Иначе @@ -308,7 +312,9 @@ Для каждого Элемент Из СоответствиеПеременных Цикл ЗначениеПеременной = ПолучитьПеременнуюСреды(ВРег(Элемент.Ключ)); - Лог.Отладка("В переменных среды найден параметр: <%1> = <%2>, тип %3", Элемент.Ключ, ЗначениеПеременной, ТипЗнч(ЗначениеПеременной)); + Лог.Отладка("В переменных среды найден параметр: <%1> = <%2>, тип %3", + Элемент.Ключ, ЗначениеПеременной, ТипЗнч(ЗначениеПеременной)); + Если ЗначениеПеременной <> Неопределено Тогда Если ЗначениеПеременной = """""" Или ЗначениеПеременной = "''" Тогда ЗначениеПеременной = ""; diff --git "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index 2cc698f..01e172f 100644 --- "a/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/tests/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -528,7 +528,8 @@ ПРЕФИКС_ПЕРЕМЕННЫХ_ОКРУЖЕНИЯ, ИМЯ_КОМАНДЫ, ИМЯ_ПАРАМЕТРА), "НеверноеЗначение 2"); ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json"); - СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""default"" : { ""%1"": ""НеверноеЗначение"" } }", ИМЯ_ПАРАМЕТРА)); + СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон("{ ""default"" : { ""%1"": ""НеверноеЗначение"" } }", + ИМЯ_ПАРАМЕТРА)); ПутьФайлаНастроекПоУмолчанию = МенеджерВременныхФайлов.СоздатьФайл("json"); СохранитьНастройкуВФайл(ПутьФайлаНастроекПоУмолчанию, СтрШаблон("{ ""%1"": ""НеверноеЗначениеПоУмолчанию"" }", From bcdfeaf44f00f28c03c5d81404c8ca4d2787fbde Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 26 Aug 2017 22:22:47 +0300 Subject: [PATCH 11/11] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=200.?= =?UTF-8?q?2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\201\321\202\320\265\320\274\321\213.os" | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index 3c0a30b..43d5608 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -12,7 +12,18 @@ #Использовать logos -Перем Лог Экспорт; +Перем Лог; + +// Возвращает текущую версию продукта +// +// Возвращаемое значение: +// Строка - Значение текущей версии продукта +// +Функция ВерсияПродукта() Экспорт + + Возврат "0.2"; + +КонецФункции // ВерсияПродукта // ИмяПродукта // Возвращает имя продукта @@ -37,17 +48,6 @@ КонецФункции // ИмяЛогаСистемы -// Возвращает текущую версию продукта -// -// Возвращаемое значение: -// Строка - Значение текущей версии продукта -// -Функция ВерсияПродукта() Экспорт - - Возврат "0.1"; - -КонецФункции // ВерсияПродукта - // Форматирование логов // Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт