From 091b168142b479205fa39d4288cd09228fa35490 Mon Sep 17 00:00:00 2001 From: wwall Date: Sat, 5 Nov 2022 17:20:53 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 39 ++++++++++++++++++++++++++++++++++++++ build.cmd | 10 ++++++++++ data/start.dt | Bin 0 -> 32813 bytes designer.cmd | 2 ++ env.json | 21 ++++++++++++++++++++ test.cmd | 3 +++ tools/README.md | 3 +++ tools/vanessaTddConf.json | 8 ++++++++ 8 files changed, 86 insertions(+) create mode 100644 .gitattributes create mode 100644 build.cmd create mode 100644 data/start.dt create mode 100644 designer.cmd create mode 100644 env.json create mode 100644 test.cmd create mode 100644 tools/README.md create mode 100644 tools/vanessaTddConf.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..98058a0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,39 @@ +* text=auto +*.htm text eol=crlf +*.html text eol=crlf +renames.txt text eol=crlf + +*.bsl text eol=crlf +*.os text eol=crlf + +*.xml text eol=crlf +*.feature text +*.md text +*.json text + +*.bat text eol=crlf +*.cmd text eol=crlf +*.ps1 text eol=crlf + +*.sh text eol=lf +*.groovy text eol=lf +Form.bin binary +*.bin binary + +*.png binary +*.ico binary +*.jpg binary +*.jpeg binary + +# Archives +*.7z binary +*.gz binary +*.tar binary +*.tgz binary +*.zip binary + +*.cf binary +*.cfe binary +*.epf binary +*.erf binary +ParentConfigurations.bin binary diff --git a/build.cmd b/build.cmd new file mode 100644 index 0000000..9768865 --- /dev/null +++ b/build.cmd @@ -0,0 +1,10 @@ +@chcp 65001 + +call vrunner init-dev %* + +@call vrunner restore --db-user ""%* + +@rem собрать внешние обработчики и отчеты в каталоге build +call vrunner compileepf src/ПарсерВстроенногоЯзыка build %* +call vrunner compileepf console/src/Консоль build %* + diff --git a/data/start.dt b/data/start.dt new file mode 100644 index 0000000000000000000000000000000000000000..017a25c30a98db8113517f6623423b7e08c53561 GIT binary patch literal 32813 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 Q(Zmb6urd)JP*6|+0R1d3k^lez literal 0 HcmV?d00001 diff --git a/designer.cmd b/designer.cmd new file mode 100644 index 0000000..7fd1016 --- /dev/null +++ b/designer.cmd @@ -0,0 +1,2 @@ +@chcp 65001 +call vrunner designer --no-wait %* \ No newline at end of file diff --git a/env.json b/env.json new file mode 100644 index 0000000..2f775d2 --- /dev/null +++ b/env.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://raw.githubusercontent.com/vanessa-opensource/vanessa-runner/develop/vanessa-runner-schema.json", + "default": { + "--ibconnection": "/F./.tempdb/ib", + "--db-user": "Administrator", + "--db-pwd": "", + "--root": ".", + "--workspace": ".", + "--v8version": "8.3.22", + "--ordinaryapp": "-1", + "dtpath": "./data/start.dt" + }, + + "xunit": { + "--xddConfig": "./tools/vanessaTddConf.json", + "testsPath": "$addRoot/tests/", + "--reportsxunit": "ГенераторОтчетаJUnitXML{out/smoke/junit/junit.xml};ГенераторОтчетаAllureXMLВерсия2{out/smoke/allure/allure.xml}", + "--xddExitCodePath": "./.tempdb/xddExitCodePath.txt" + } + +} \ No newline at end of file diff --git a/test.cmd b/test.cmd new file mode 100644 index 0000000..dab28b8 --- /dev/null +++ b/test.cmd @@ -0,0 +1,3 @@ +@chcp 65001 + +call vrunner xunit ./tests/async.epf --xdddebug %* diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 0000000..5832d1a --- /dev/null +++ b/tools/README.md @@ -0,0 +1,3 @@ +### Каталог tools + +Предназначен для хранения любых сторонних утилит, необходимых для настройки проекта или для дополнительно установки diff --git a/tools/vanessaTddConf.json b/tools/vanessaTddConf.json new file mode 100644 index 0000000..1260094 --- /dev/null +++ b/tools/vanessaTddConf.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://raw.githubusercontent.com/vanessa-opensource/vanessa-runner/develop/xunit-schema.json", + "ДелатьЛогВыполненияСценариевВТекстовыйФайл": true, + "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/.tempdb/log-xunit.txt", + "Отладка": true, + "ДобавлятьИмяПользователяВПредставлениеТеста": true + +} \ No newline at end of file From 183fce20251a0b754ee309451afdc7fda9d1fbce Mon Sep 17 00:00:00 2001 From: wwall Date: Sat, 5 Nov 2022 17:29:17 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=90=D1=81=D0=B8=D0=BD?= =?UTF-8?q?=D1=85=20=D0=B8=20=D0=96=D0=B4=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.cmd | 5 +- ...0\257\320\267\321\213\320\272\320\260.xml" | 2 +- .../Ext/ObjectModule.bsl" | 63 +++++++++++++++-- test.cmd | 2 +- tests/async.xml | 23 ++++++ tests/async/Ext/ObjectModule.bsl | 70 +++++++++++++++++++ 6 files changed, 154 insertions(+), 11 deletions(-) create mode 100644 tests/async.xml create mode 100644 tests/async/Ext/ObjectModule.bsl diff --git a/build.cmd b/build.cmd index 9768865..20f5084 100644 --- a/build.cmd +++ b/build.cmd @@ -5,6 +5,7 @@ call vrunner init-dev %* @call vrunner restore --db-user ""%* @rem собрать внешние обработчики и отчеты в каталоге build -call vrunner compileepf src/ПарсерВстроенногоЯзыка build %* -call vrunner compileepf console/src/Консоль build %* +call vrunner compileepf src/ПарсерВстроенногоЯзыка .tempdb %* +call vrunner compileepf console/src/Консоль .tempdb %* +call vrunner compileepf testa/async .tempdb %* diff --git "a/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.xml" "b/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.xml" index 9079ec3..a368bce 100644 --- "a/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.xml" +++ "b/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.xml" @@ -1,5 +1,5 @@  - + diff --git "a/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" "b/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" index 4172d16..189a9a3 100644 --- "a/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" +++ "b/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" @@ -80,6 +80,9 @@ Перем Парсер_ДанныеПредыдущегоТокена; // один из ТаблицаТокенов Перем Парсер_Узлы; // структура как соответствие[строка] (таблица значений) +Перем Состояние_РазрешеноАсинх; // Если истина то возможно чтение Асинх, если ложь, то Асмнх будет переменной +Перем Состояние_РазрешеноЖдать; // Если истина то Ждать ключевое слово, если ложь, то переменная +Перем ЭтоАсинхроннныйМетод; // Признак асинхронного метода #КонецОбласти // СостояниеПарсера #Область СостояниеПосетителя @@ -443,6 +446,7 @@ Поля.Добавить("Аннотации"); // массив (ОбъявлениеАннотации) Поля.Добавить("Параметры"); // массив (ОбъявлениеПараметра) Поля.Добавить("Экспорт"); // булево + Поля.Добавить("Асинх"); // булево Поля.Добавить("Начало"); // один из ТаблицаТокенов Поля.Добавить("Конец"); // один из ТаблицаТокенов @@ -460,6 +464,7 @@ Поля.Добавить("Аннотации"); // массив (ОбъявлениеАннотации) Поля.Добавить("Параметры"); // массив (ОбъявлениеПараметра) Поля.Добавить("Экспорт"); // булево + Поля.Добавить("Асинх"); // булево Поля.Добавить("Начало"); // один из ТаблицаТокенов Поля.Добавить("Конец"); // один из ТаблицаТокенов @@ -886,6 +891,16 @@ Поля.Добавить("ОбработчикСобытия"); // структура (ВыражениеИдентификатор) Поля.Добавить("Начало"); // один из ТаблицаТокенов Поля.Добавить("Конец"); // один из ТаблицаТокенов + + + Парсер_Узлы.Вставить("ОператорВызоваОбещания", Новый ТаблицаЗначений); + // Хранит вызов процедуры или функции как процедуры. + Поля = Парсер_Узлы.ОператорВызоваОбещания.Колонки; + Поля.Добавить("Тип"); // строка (один из Типы) + Поля.Добавить("Обещание"); // вызываемая процедура. + Поля.Добавить("Начало"); // один из ТаблицаТокенов + Поля.Добавить("Конец"); // один из ТаблицаТокенов + КонецПроцедуры @@ -1105,8 +1120,9 @@ |И.And, Или.Or, Не.Not, ДобавитьОбработчик.AddHandler, УдалитьОбработчик.RemoveHandler, |Попытка.Try, Исключение.Except, ВызватьИсключение.Raise, КонецПопытки.EndTry, |Новый.New, Выполнить.Execute, Экспорт.Export, Перейти.Goto, - |Истина.True, Ложь.False, Неопределено.Undefined, Null" - ); + |Истина.True, Ложь.False, Неопределено.Undefined, Null, + |Асинх, Ждать" + ); КонецФункции // КлючевыеСлова() Функция Токены(КлючевыеСлова = Неопределено) Экспорт @@ -1171,7 +1187,8 @@ |ИнструкцияПрепроцессораУдаление, ИнструкцияПрепроцессораКонецУдаления, |ИнструкцияПрепроцессораИспользовать, |ВыражениеПрепроцессораБинарное, ВыражениеПрепроцессораНе, - |ВыражениеПрепроцессораСимвол, ВыражениеПрепроцессораСкобочное" + |ВыражениеПрепроцессораСимвол, ВыражениеПрепроцессораСкобочное, + |ОператорВызоваОбещания" ); КонецФункции // Типы() @@ -1290,6 +1307,8 @@ Парсер_Значение = Ложь; ИначеЕсли Парсер_Токен = Токены.Null Тогда Парсер_Значение = Null; + ИначеЕсли Парсер_Токен = Токены.Ждать и не Состояние_РазрешеноЖдать Тогда + Парсер_Токен = Токены.Идентификатор; КонецЕсли; Иначе Парсер_Токен = Токены.Идентификатор; @@ -1448,7 +1467,7 @@ КонецЦикла; Парсер_Символ = Сред(Парсер_Исходник, Парсер_ТекущаяПозиция, 1); Парсер_Литерал = Сред(Парсер_Исходник, Начало, Парсер_ТекущаяПозиция - Начало); - + Состояние_РазрешеноАсинх = Истина; Если Директивы.Свойство(Парсер_Литерал) Тогда Парсер_Токен = Токены.Директива; ИначеЕсли Аннотации.Свойство(Парсер_Литерал) Тогда @@ -1456,6 +1475,7 @@ Иначе Ошибка(3, Парсер_Литерал, Ложь); Парсер_Токен = Токены.Директива; + Состояние_РазрешеноАсинх = Ложь; КонецЕсли; ИначеЕсли ПредыдущийСимвол = "#" Тогда @@ -1692,7 +1712,10 @@ Функция Разобрать(Исходник, ВнешнееОкружение = Неопределено) Экспорт Перем Объявления, Переменные, ОбъявлениеАвтоПеременной, ЭлементОкружения, Операторы, Модуль, ТочкиВызова, ИндексТокена, ПоследнийТокен; - + + Состояние_РазрешеноАсинх = Ложь; + Состояние_РазрешеноЖдать = Ложь; + Парсер_Исходник = Исходник; Парсер_ТекущаяПозиция = 0; Парсер_НомерТекущейСтроки = 1; @@ -2231,7 +2254,8 @@ Функция РазобратьОбъявленияМодуля(Переменные) Перем Объявления, ОбъявлениеДирективы; - Объявления = Новый Массив; + Объявления = Новый Массив; + ЭтоАсинхроннныйМетод = Ложь; Пока Истина Цикл Парсер_СписокДиректив = Новый Массив; Парсер_СписокАннотаций = Новый Массив; @@ -2261,14 +2285,18 @@ ОбъявлениеАннотации.Начало = НачалоАннотации; ОбъявлениеАннотации.Конец = Парсер_ДанныеТекущегоТокена; Парсер_СписокАннотаций.Добавить(ОбъявлениеАннотации); + СледующийТокен(); + ИначеЕсли Парсер_Токен = Токены.Асинх Тогда + ЭтоАсинхроннныйМетод = Истина; СледующийТокен(); + Прервать; Иначе Прервать; КонецЕсли; КонецЦикла; Если Парсер_Токен = Токены.Перем И Парсер_ПеременныеРазрешены Тогда Объявления.Добавить(РазобратьОбъявлениеСпискаПеременныхМодуля(Переменные)); - ИначеЕсли Парсер_Токен = Токены.Функция Тогда + ИначеЕсли Парсер_Токен = Токены.Функция Тогда Парсер_ЭтоФункция = Истина; Объявления.Добавить(РазобратьОбъявлениеМетода()); Парсер_ЭтоФункция = Ложь; @@ -2417,6 +2445,10 @@ Перем Сигнатура, ЭлементОкружения, Имя, Переменные, Параметры, ЕстьЭкспорт, Операторы, Объявления, ОбъявлениеАвтоПеременной, Начало; Начало = Парсер_ДанныеТекущегоТокена; ЕстьЭкспорт = Ложь; + Если ЭтоАсинхроннныйМетод тогда + Состояние_РазрешеноЖдать = Истина; + КонецЕсли; + СледующийТокен(); Ожидать(Токены.Идентификатор); Имя = Парсер_Литерал; @@ -2435,6 +2467,7 @@ Сигнатура.Аннотации = Парсер_СписокАннотаций; Сигнатура.Параметры = Параметры; Сигнатура.Экспорт = ЕстьЭкспорт; + Сигнатура.Асинх = ЭтоАсинхроннныйМетод; Сигнатура.Начало = Начало; Сигнатура.Конец = Парсер_ДанныеПредыдущегоТокена; Иначе @@ -2445,6 +2478,7 @@ Сигнатура.Аннотации = Парсер_СписокАннотаций; Сигнатура.Параметры = Параметры; Сигнатура.Экспорт = ЕстьЭкспорт; + Сигнатура.Асинх = ЭтоАсинхроннныйМетод; Сигнатура.Начало = Начало; Сигнатура.Конец = Парсер_ДанныеПредыдущегоТокена; КонецЕсли; @@ -2475,6 +2509,7 @@ Иначе Ожидать(Токены.КонецПроцедуры); КонецЕсли; + Состояние_РазрешеноЖдать = Ложь; Для Каждого ОбъявлениеАвтоПеременной Из Парсер_Окружение.АвтоПеременные Цикл Переменные.Добавить(ОбъявлениеАвтоПеременной); КонецЦикла; @@ -2629,12 +2664,26 @@ Оператор = РазобратьИнструкциюПрепроцессораУдаление(); ИначеЕсли Парсер_Токен = Токены._КонецУдаления Тогда Оператор = РазобратьИнструкциюПрепроцессораКонецУдаления(); + ИначеЕсли Парсер_Токен = Токены.Ждать Тогда + Оператор = РазобратьОператорЖдать(); ИначеЕсли Парсер_Токен = Токены.ТочкаСЗапятой Тогда // NOP КонецЕсли; Возврат Оператор; КонецФункции // РазобратьОператор() +Функция РазобратьОператорЖдать() + Начало = Парсер_ДанныеТекущегоТокена; + СледующийТокен(); + Обещание = РазобратьОператорПрисваиванияИлиВызоваПроцедуры(); + Оператор = Парсер_Узлы.ОператорВызоваОбещания.Добавить(); + Оператор.Тип = Типы.ОператорВызоваОбещания; + Оператор.Обещание = Обещание; + Оператор.Начало = Начало; + Оператор.Конец = Парсер_ДанныеПредыдущегоТокена; + Возврат Оператор; +КонецФункции // РазобратьОператорВызватьИсключение() + Функция РазобратьОператорВызватьИсключение() Перем Выражение, Начало; Начало = Парсер_ДанныеТекущегоТокена; diff --git a/test.cmd b/test.cmd index dab28b8..180d53c 100644 --- a/test.cmd +++ b/test.cmd @@ -1,3 +1,3 @@ @chcp 65001 -call vrunner xunit ./tests/async.epf --xdddebug %* +call vrunner xunit .tempdb/async.epf --xdddebug %* diff --git a/tests/async.xml b/tests/async.xml new file mode 100644 index 0000000..ac22fa9 --- /dev/null +++ b/tests/async.xml @@ -0,0 +1,23 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + be609b87-1378-44c3-851c-02afb3116ab4 + + + b9e81a18-e66e-439f-b47c-c44b4e235b8a + ae000df2-8503-4507-aa6d-b9cf4f688710 + + + + ВнешняяОбработка1 + + + + + + + + \ No newline at end of file diff --git a/tests/async/Ext/ObjectModule.bsl b/tests/async/Ext/ObjectModule.bsl new file mode 100644 index 0000000..904062f --- /dev/null +++ b/tests/async/Ext/ObjectModule.bsl @@ -0,0 +1,70 @@ +Перем КонтекстЯдра; +Перем Утверждения; +перем Ожидаем; +//{ основная процедура для юнит-тестирования xUnitFor1C +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения"); + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); +КонецПроцедуры + +Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + НаборТестов.Добавить("ТестДолжен_РазобратьКодСАсинх"); + НаборТестов.Добавить("ТестДолжен_РазобратьКодСИдентификаторомЖдать"); + +КонецПроцедуры + +//} + +//{ Блок юнит-тестов + + +Функция ВернутьОбработку(Имя) + + Файл = новый Файл(ЭтотОбъект.ИспользуемоеИмяФайла); + ИмяОбработки = файл.Путь+"..\"+Имя+?(СтрЗаканчиваетсяНа(Имя,".epf"),"",".epf"); + УбраннаяЗащита = новый ОписаниеЗащитыОтОпасныхДействий; + УбраннаяЗащита.ПредупреждатьОбОпасныхДействиях = Ложь; + Возврат ВнешниеОбработки.Создать(ИмяОбработки,Истина,УбраннаяЗащита); + + +КонецФункции + +Процедура ПередЗапускомТеста() Экспорт +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт +КонецПроцедуры + + +процедура ТестДолжен_РазобратьКодСАсинх() экспорт + + Парсер = ВернутьОбработку("ПарсерВстроенногоЯзыка"); + + ТекстМодуля = "&НаКлиенте + |   Асинх Процедура НашаПроцедура() + |   Ждать ЧтоТоЖдем(); + |   КонецПроцедуры"; + + Модуль = Парсер.Разобрать(ТекстМодуля, Неопределено); + + Ожидаем.Что(Модуль.Объявления[0].Сигнатура.Асинх,"Корректно прочли определение").ЭтоИстина(); + Ожидаем.Что(Модуль.Объявления[0].Операторы[0].Тип,"Прочши обещание").Равно("ОператорВызоваОбещания"); + +КонецПроцедуры + + +процедура ТестДолжен_РазобратьКодСИдентификаторомЖдать() экспорт + + Парсер = ВернутьОбработку("ПарсерВстроенногоЯзыка"); + + ТекстМодуля = "Процедура НашаПроцедура() + |   Ждать = 1; + |   КонецПроцедуры"; + + Модуль = Парсер.Разобрать(ТекстМодуля, Неопределено); + + Ожидаем.Что(Модуль.Объявления[0].Операторы[0].ЛевыйОперанд.Голова.Имя,"Корректно прочли Ждать как идентификатор").Равно("Ждать"); + +КонецПроцедуры \ No newline at end of file From 1e88af743afbace3087ae47f51977125e8261916 Mon Sep 17 00:00:00 2001 From: wwall Date: Sat, 5 Nov 2022 17:43:56 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=20=D0=90=D1=81?= =?UTF-8?q?=D0=B8=D0=BD=D1=85=20=D0=B8=20=D0=96=D0=B4=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=9D=D0=B5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.cmd | 8 ++++---- env.json | 2 +- test.cmd | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build.cmd b/build.cmd index 20f5084..31bb310 100644 --- a/build.cmd +++ b/build.cmd @@ -4,8 +4,8 @@ call vrunner init-dev %* @call vrunner restore --db-user ""%* -@rem собрать внешние обработчики и отчеты в каталоге build -call vrunner compileepf src/ПарсерВстроенногоЯзыка .tempdb %* -call vrunner compileepf console/src/Консоль .tempdb %* -call vrunner compileepf testa/async .tempdb %* +@rem собрать внешние обработчики и отчеты в каталоге .tempdb +call vrunner compileepf src/ПарсерВстроенногоЯзыка .tempdb/ПарсерВстроенногоЯзыка.epf %* +call vrunner compileepf console/src/Консоль .tempdb/Консоль.epf %* +call vrunner compileepf tests/async .tempdb/tests/async.epf %* diff --git a/env.json b/env.json index 2f775d2..f6c4581 100644 --- a/env.json +++ b/env.json @@ -14,7 +14,7 @@ "xunit": { "--xddConfig": "./tools/vanessaTddConf.json", "testsPath": "$addRoot/tests/", - "--reportsxunit": "ГенераторОтчетаJUnitXML{out/smoke/junit/junit.xml};ГенераторОтчетаAllureXMLВерсия2{out/smoke/allure/allure.xml}", + "--reportsxunit": "ГенераторОтчетаJUnitXML{.tempdb/out/smoke/junit/junit.xml};ГенераторОтчетаAllureXMLВерсия2{.tempdb/out/smoke/allure/allure.xml}", "--xddExitCodePath": "./.tempdb/xddExitCodePath.txt" } diff --git a/test.cmd b/test.cmd index 180d53c..688f476 100644 --- a/test.cmd +++ b/test.cmd @@ -1,3 +1,3 @@ @chcp 65001 -call vrunner xunit .tempdb/async.epf --xdddebug %* +call vrunner xunit .tempdb/tests/async.epf %* From bc28ea4e7a1f8cc0c48de68d98108e312e9afa93 Mon Sep 17 00:00:00 2001 From: wwall Date: Mon, 16 Jan 2023 20:03:58 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=97=D0=B0=20=D0=BD=D0=B0=D0=B9=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D1=83=D1=8E=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B0=D1=81=D0=B8=D0=B1=D0=BE=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D0=BC=D1=83=20(@ZhokhovM=20(https://github.c?= =?UTF-8?q?om/ZhokhovM))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\275\321\201\320\276\320\273\321\214.xml" | 2 +- ...0\244\320\276\321\200\320\274\320\260.xml" | 2 +- .../Ext/Form.xml" | 8 +++++- .../Ext/Form/Module.bsl" | 9 ++++--- .../Ext/ObjectModule.bsl" | 10 +++---- tests/async/Ext/ObjectModule.bsl | 26 ++++++++++++++++--- 6 files changed, 43 insertions(+), 14 deletions(-) diff --git "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214.xml" "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214.xml" index f773484..4d91d12 100644 --- "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214.xml" +++ "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214.xml" @@ -1,5 +1,5 @@  - + diff --git "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260.xml" index 031adb2..3ae877d 100644 --- "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260.xml" +++ "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -1,5 +1,5 @@  - +
Форма diff --git "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" index ee97ebc..b6644ae 100644 --- "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" +++ "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -1,5 +1,5 @@  - + <v8:item> <v8:lang>en</v8:lang> @@ -33,6 +33,7 @@ <v8:content>Группа0</v8:content> </v8:item> </ToolTip> + <Behavior>Usual</Behavior> <Representation>None</Representation> <ShowTitle>false</ShowTitle> <ExtendedTooltip name="Группа0РасширеннаяПодсказка" id="31"/> @@ -180,6 +181,7 @@ <v8:content>Группа1</v8:content> </v8:item> </ToolTip> + <Behavior>Usual</Behavior> <Representation>None</Representation> <ShowTitle>false</ShowTitle> <ExtendedTooltip name="Группа1РасширеннаяПодсказка" id="13"/> @@ -208,6 +210,7 @@ </v8:item> </ToolTip> <Group>Horizontal</Group> + <Behavior>Usual</Behavior> <Representation>None</Representation> <ShowTitle>false</ShowTitle> <ExtendedTooltip name="Группа2РасширеннаяПодсказка" id="18"/> @@ -233,6 +236,7 @@ <v8:content>Страницы1</v8:content> </v8:item> </ToolTip> + <PagesRepresentation>TabsOnTop</PagesRepresentation> <ExtendedTooltip name="Страницы1РасширеннаяПодсказка" id="75"/> <ChildItems> <Page name="СтраницаИсходник" id="76"> @@ -437,6 +441,7 @@ <v8:content>Страницы2</v8:content> </v8:item> </ToolTip> + <PagesRepresentation>TabsOnTop</PagesRepresentation> <ExtendedTooltip name="Страницы2РасширеннаяПодсказка" id="107"/> <ChildItems> <Page name="СтраницаРезультатТекст" id="78"> @@ -860,6 +865,7 @@ <v8:content>Группа поиска</v8:content> </v8:item> </ToolTip> + <Behavior>Usual</Behavior> <Representation>None</Representation> <ShowTitle>false</ShowTitle> <ExtendedTooltip name="ГруппаПоискаРасширеннаяПодсказка" id="168"/> diff --git "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 8d2e8bd..a8f27c2 100644 --- "a/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/console/src/\320\232\320\276\320\275\321\201\320\276\320\273\321\214/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -204,9 +204,12 @@ ПутьКФайлуПарсера = ФайлОбработки.Путь + "ПарсерВстроенногоЯзыка.epf"; Парсер = ВнешниеОбработки.Создать(ПутьКФайлуПарсера, Ложь); - ПутьКФайлуГлобальногоОкружения = ФайлОбработки.Путь + "ГлобальноеОкружение.epf"; - ГлобальноеОкружение = ВнешниеОбработки.Создать(ПутьКФайлуГлобальногоОкружения, Ложь); - + ГлобальноеОкружение = Неопределено; + Если СоздаватьГлобальноеОкружение тогда + ПутьКФайлуГлобальногоОкружения = ФайлОбработки.Путь + "ГлобальноеОкружение.epf"; + ГлобальноеОкружение = ВнешниеОбработки.Создать(ПутьКФайлуГлобальногоОкружения, Ложь); + КонецЕсли; + НовыйХэшПарсера = SHA1(Новый ДвоичныеДанные(ПутьКФайлуПарсера)); Если НовыйХэшПарсера <> ЭтотОбъект.ХэшПарсера Тогда ЭтотОбъект.ХэшИсходника = ""; diff --git "a/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" "b/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" index 189a9a3..4795e83 100644 --- "a/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" +++ "b/src/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260/Ext/ObjectModule.bsl" @@ -1944,6 +1944,8 @@ Операнд.Начало = Парсер_ДанныеТекущегоТокена; Операнд.Конец = Парсер_ДанныеТекущегоТокена; СледующийТокен(); + ИначеЕсли Парсер_Токен = Токены.Ждать Тогда + Операнд = РазобратьОператорЖдать(); ИначеЕсли Парсер_Токен = Токены.Идентификатор Тогда Операнд = РазобратьВыражениеИдентификатор(); ИначеЕсли Парсер_Токен = Токены.ЛеваяКруглаяСкобка Тогда @@ -2062,7 +2064,7 @@ Возврат Узел; КонецФункции // РазобратьВыражениеНовый() -Функция РазобратьВыражениеИдентификатор(Знач НоваяПеременнаяРазрешена = Ложь, НоваяПеременная = Неопределено, ЭтоВызов = Неопределено) +Функция РазобратьВыражениеИдентификатор(Знач НоваяПеременнаяРазрешена = Ложь, НоваяПеременная = Неопределено, ЭтоВызов = Неопределено, ЭтоЖдать = Ложь) Перем Имя, ЭлементОкружения, Хвост, Аргументы, НачалоАвтоПеременной, ТочкиВызова, Начало; Начало = Парсер_ДанныеТекущегоТокена; Имя = Парсер_Литерал; @@ -2111,7 +2113,7 @@ ЭлементОкружения.Объявление.Имя = Имя; ЭлементОкружения.Объявление.Начало = НачалоАвтоПеременной; ЭлементОкружения.Объявление.Конец = НачалоАвтоПеременной;; - НоваяПеременная = ЭлементОкружения; + НоваяПеременная = ЭлементОкружения; Иначе ЭлементОкружения = Парсер_Узлы.ЭлементОкружения.Добавить(); ЭлементОкружения.Тип = Типы.ЭлементОкружения; @@ -2664,8 +2666,6 @@ Оператор = РазобратьИнструкциюПрепроцессораУдаление(); ИначеЕсли Парсер_Токен = Токены._КонецУдаления Тогда Оператор = РазобратьИнструкциюПрепроцессораКонецУдаления(); - ИначеЕсли Парсер_Токен = Токены.Ждать Тогда - Оператор = РазобратьОператорЖдать(); ИначеЕсли Парсер_Токен = Токены.ТочкаСЗапятой Тогда // NOP КонецЕсли; @@ -2675,7 +2675,7 @@ Функция РазобратьОператорЖдать() Начало = Парсер_ДанныеТекущегоТокена; СледующийТокен(); - Обещание = РазобратьОператорПрисваиванияИлиВызоваПроцедуры(); + Обещание = РазобратьВыражениеИдентификатор(); Оператор = Парсер_Узлы.ОператорВызоваОбещания.Добавить(); Оператор.Тип = Типы.ОператорВызоваОбещания; Оператор.Обещание = Обещание; diff --git a/tests/async/Ext/ObjectModule.bsl b/tests/async/Ext/ObjectModule.bsl index 904062f..db73c8d 100644 --- a/tests/async/Ext/ObjectModule.bsl +++ b/tests/async/Ext/ObjectModule.bsl @@ -12,6 +12,7 @@ КонтекстЯдра = КонтекстЯдраПараметр; НаборТестов.Добавить("ТестДолжен_РазобратьКодСАсинх"); НаборТестов.Добавить("ТестДолжен_РазобратьКодСИдентификаторомЖдать"); + НаборТестов.Добавить("ТестДолжен_РазобратьКодПроцедуры"); КонецПроцедуры @@ -44,13 +45,13 @@ ТекстМодуля = "&НаКлиенте |   Асинх Процедура НашаПроцедура() - |   Ждать ЧтоТоЖдем(); + |   х = Ждать ЧтоТоЖдем; |   КонецПроцедуры"; Модуль = Парсер.Разобрать(ТекстМодуля, Неопределено); Ожидаем.Что(Модуль.Объявления[0].Сигнатура.Асинх,"Корректно прочли определение").ЭтоИстина(); - Ожидаем.Что(Модуль.Объявления[0].Операторы[0].Тип,"Прочши обещание").Равно("ОператорВызоваОбещания"); + Ожидаем.Что(Модуль.Объявления[0].Операторы[0].ПравыйОперанд.Тип,"Прочли обещание").Равно("ОператорВызоваОбещания"); КонецПроцедуры @@ -67,4 +68,23 @@ Ожидаем.Что(Модуль.Объявления[0].Операторы[0].ЛевыйОперанд.Голова.Имя,"Корректно прочли Ждать как идентификатор").Равно("Ждать"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + +процедура ТестДолжен_РазобратьКодПроцедуры() экспорт + + Парсер = ВернутьОбработку("ПарсерВстроенногоЯзыка"); + + ТекстМодуля = "&НаКлиенте + |Асинх Процедура Демо_НайтиФайлыАсинх() + | ПутьКПапкеСФайлами = ""C:\Program Files\1cv8\conf""; + | Обещание = НайтиФайлыАсинх(ПутьКПапкеСФайлами, ""*.*"", Ложь); + | Результат = Ждать Обещание; + |КонецПроцедуры"; + + Модуль = Парсер.Разобрать(ТекстМодуля, Неопределено); + + Ожидаем.Что(Модуль.Объявления[0].Операторы[2].ПравыйОперанд.Тип,"Разобрали код корректно").Равно("ОператорВызоваОбещания"); + +КонецПроцедуры +