From baaff822b4829925bf046810a4bc79bbd66707ce Mon Sep 17 00:00:00 2001 From: sfaqer Date: Tue, 31 Oct 2023 14:58:33 +1000 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=D0=BB=D0=B5=D0=BF=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=D1=8B=D1=85=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=9E=D0=A1?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/testing.yml | 16 ++ .gitignore | 3 + LICENCE.md | 25 +++ README.md | 30 +++ packagedef | 15 ++ ...20\265\320\272\321\206\320\270\321\217.os" | 6 + ...20\232\320\260\321\200\321\202\320\260.os" | 16 ++ ...20\260\321\201\321\201\320\270\320\262.os" | 14 ++ ...20\265\321\201\321\202\320\262\320\276.os" | 16 ++ ...21\201\321\202\320\262\320\270\320\265.os" | 14 ++ ...20\277\320\270\321\201\320\276\320\272.os" | 16 ++ ...21\207\320\265\320\275\320\270\320\271.os" | 26 +++ ...21\206\320\270\321\217\320\274\320\270.os" | 59 +++++ tasks/coverage.os | 34 +++ tasks/oscript.cfg | 1 + tasks/test.os | 45 ++++ ...20\260\320\275\320\275\320\260\321\217.os" | 6 + ...21\202\321\200\320\276\320\272\320\260.os" | 14 ++ ...20\273\320\265\320\275\320\270\320\265.os" | 3 + ...20\265\320\272\321\206\320\270\320\270.os" | 203 ++++++++++++++++++ 20 files changed, 562 insertions(+) create mode 100644 .github/workflows/testing.yml create mode 100644 .gitignore create mode 100644 LICENCE.md create mode 100644 README.md create mode 100644 packagedef create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\232\320\260\321\200\321\202\320\260.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\260\321\201\321\201\320\270\320\262.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\277\320\270\321\201\320\276\320\272.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\242\320\260\320\261\320\273\320\270\321\206\320\260\320\227\320\275\320\260\321\207\320\265\320\275\320\270\320\271.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\270\320\271\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\274\320\270\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\274\320\270.os" create mode 100644 tasks/coverage.os create mode 100644 tasks/oscript.cfg create mode 100644 tasks/test.os create mode 100644 "tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\273\320\276\320\274\320\260\320\275\320\275\320\260\321\217.os" create mode 100644 "tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\321\202\321\200\320\276\320\272\320\260.os" create mode 100644 "tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\321\201\321\202\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265.os" create mode 100644 "tests/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\265\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270.os" diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 0000000..12cbf94 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,16 @@ +name: Тестирование + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + test: + strategy: + fail-fast: false + matrix: + oscript_version: ['1.8.5', 'stable', 'dev', 'lts-dev'] + uses: autumn-library/workflows/.github/workflows/test.yml@main + with: + oscript_version: ${{ matrix.oscript_version }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d6cace --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +build/ +.vscode/ +oscript_modules/ diff --git a/LICENCE.md b/LICENCE.md new file mode 100644 index 0000000..bfc17f3 --- /dev/null +++ b/LICENCE.md @@ -0,0 +1,25 @@ +The MIT License (MIT) +===================== + +Copyright © `2023` `Kirill Chernenko ` + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the “Software”), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b5064d3 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# autumn-collections + +Модуль реализует функциональность прилепляемых коллекций для [ОСени](https://github.com/autumn-library/autumn) + +Поставляются прилепляемые коллекции для типов: + * [Массив](https://oscript.io/syntax/page/Массив) + * [Соответствие](https://oscript.io/syntax/page/Соответствие) + * [ТаблицаЗначений](https://oscript.io/syntax/page/ТаблицаЗначений) + * [Список](https://github.com/sfaqer/collectionos) + * [Множество](https://github.com/sfaqer/collectionos) + * [Карта](https://github.com/sfaqer/collectionos) + +Так же имеется возможность добавить собственную прилепляемую коллекцию реализовав класс по примеру ниже: + +```bsl +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Добавить(Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат СтрСоединить(Коллекция, ", "); +КонецФункции + +&ПрилепляемаяКоллекция("Строка") +Процедура ПриСозданииОбъекта() + Коллекция = Новый Массив(); +КонецПроцедуры +``` diff --git a/packagedef b/packagedef new file mode 100644 index 0000000..e77bd3f --- /dev/null +++ b/packagedef @@ -0,0 +1,15 @@ +Описание.Имя("autumn-collections") + .Версия("0.1.0") + .Автор("Кирилл Черненко") + .АдресАвтора("https://github.com/sfaqer") + .Описание("Модуль прилепляемых коллекций для ОСени") + .ВерсияСреды("1.8.3") + .ВключитьФайл("src") + .РазработкаЗависитОт("1testrunner") + .РазработкаЗависитОт("coverage") + .РазработкаЗависитОт("fs") + .РазработкаЗависитОт("json") + .РазработкаЗависитОт("asserts") + .ЗависитОт("collectionos", "0.3.1") + .ЗависитОт("annotations", "0.1.0") + ; \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" new file mode 100644 index 0000000..77ddd78 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.os" @@ -0,0 +1,6 @@ +Перем _ИмяКоллекции; + +&Аннотация("ПрилепляемаяКоллекция") +Процедура ПриСозданииОбъекта(Значение) + _ИмяКоллекции = Значение; +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\232\320\260\321\200\321\202\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\232\320\260\321\200\321\202\320\260.os" new file mode 100644 index 0000000..1e27d91 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\232\320\260\321\200\321\202\320\260.os" @@ -0,0 +1,16 @@ +#Использовать collectionos + +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Вставить(ОпределениеЖелудя.Имя(), Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат Новый ФиксированнаяКарта(Коллекция); +КонецФункции + +&ПрилепляемаяКоллекция("Карта") +Процедура ПриСозданииОбъекта() + Коллекция = Новый КартаСоответствие(); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\260\321\201\321\201\320\270\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\260\321\201\321\201\320\270\320\262.os" new file mode 100644 index 0000000..4b9a85c --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -0,0 +1,14 @@ +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Добавить(Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат Новый ФиксированныйМассив(Коллекция); +КонецФункции + +&ПрилепляемаяКоллекция("Массив") +Процедура ПриСозданииОбъекта() + Коллекция = Новый Массив(); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" new file mode 100644 index 0000000..bdf734e --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\234\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\276.os" @@ -0,0 +1,16 @@ +#Использовать collectionos + +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Добавить(Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат Новый ФиксированноеМножество(Коллекция); +КонецФункции + +&ПрилепляемаяКоллекция("Множество") +Процедура ПриСозданииОбъекта() + Коллекция = Новый МножествоСоответствие(); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" new file mode 100644 index 0000000..34d8310 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" @@ -0,0 +1,14 @@ +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Вставить(ОпределениеЖелудя.Имя(), Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат Новый ФиксированноеСоответствие(Коллекция); +КонецФункции + +&ПрилепляемаяКоллекция("Соответствие") +Процедура ПриСозданииОбъекта() + Коллекция = Новый Соответствие(); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\277\320\270\321\201\320\276\320\272.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\277\320\270\321\201\320\276\320\272.os" new file mode 100644 index 0000000..fb5cb06 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\277\320\270\321\201\320\276\320\272.os" @@ -0,0 +1,16 @@ +#Использовать collectionos + +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Добавить(Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат Новый ФиксированныйСписок(Коллекция); +КонецФункции + +&ПрилепляемаяКоллекция("Список") +Процедура ПриСозданииОбъекта() + Коллекция = Новый СписокМассив(); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\242\320\260\320\261\320\273\320\270\321\206\320\260\320\227\320\275\320\260\321\207\320\265\320\275\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\242\320\260\320\261\320\273\320\270\321\206\320\260\320\227\320\275\320\260\321\207\320\265\320\275\320\270\320\271.os" new file mode 100644 index 0000000..d0903d6 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\242\320\260\320\261\320\273\320\270\321\206\320\260\320\227\320\275\320\260\321\207\320\265\320\275\320\270\320\271.os" @@ -0,0 +1,26 @@ +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + + Строка = Коллекция.Добавить(); + + Строка.Имя = ОпределениеЖелудя.Имя(); + Строка.Желудь = Желудь; + Строка.ОпределениеЖелудя = ОпределениеЖелудя; + +КонецПроцедуры + +Функция Получить() Экспорт + Возврат Коллекция.Скопировать(); +КонецФункции + +&ПрилепляемаяКоллекция("ТаблицаЗначений") +Процедура ПриСозданииОбъекта() + + Коллекция = Новый ТаблицаЗначений(); + + Коллекция.Колонки.Добавить("Имя"); + Коллекция.Колонки.Добавить("Желудь"); + Коллекция.Колонки.Добавить("ОпределениеЖелудя"); + +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\270\320\271\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\274\320\270\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\274\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\270\320\271\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\274\320\270\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\274\320\270.os" new file mode 100644 index 0000000..30cd67c --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\321\216\321\211\320\270\320\271\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\274\320\270\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\274\320\270.os" @@ -0,0 +1,59 @@ +#Использовать annotations +#Использовать collectionos +#Использовать reflector + +Перем ПрилепляемыеКоллекции; +Перем ИнтерфейсПрилепляемойКоллекции; +Перем Рефлектор; + +Процедура ПриСозданииОбъекта() + + ПрилепляемыеКоллекции = Новый КартаСоответствие(); + + ИнтерфейсПрилепляемойКоллекции = Новый ИнтерфейсОбъекта() + .ПроцедураИнтерфейса("Добавить", 2) + .ФункцияИнтерфейса("Получить", 0); + + Рефлектор = Новый Рефлектор(); + +КонецПроцедуры + +Процедура ДобавитьПрилепляемуюКоллекцию(Тип) Экспорт + + РефлекторОбъекта = Новый РефлекторОбъекта(Тип); + + Методы = РефлекторОбъекта.ПолучитьТаблицуМетодов("ПрилепляемаяКоллекция", Ложь); + + Аннотация = РаботаСАннотациями.ПолучитьАннотацию( + Методы[0], + "ПрилепляемаяКоллекция" + ); + + Имя = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация); + + Если ЕстьПрилепляемаяКоллекция(Имя) Тогда + ВызватьИсключение СтрШаблон("Прилепляемая коллекция %1 уже зарегистрирована", Имя); + КонецЕсли; + + РефлекторОбъекта.РеализуетИнтерфейс( + ИнтерфейсПрилепляемойКоллекции, + Истина + ); + + ПрилепляемыеКоллекции.Вставить(Имя, Тип); + +КонецПроцедуры + +Функция ПолучитьПрилепляемуюКоллекцию(Имя) Экспорт + + Возврат Новый( + ПрилепляемыеКоллекции + .Получить(Имя) + .ИначеВызватьИсключение("Неизвестная прилепляемая коллекция " + Имя) + ); + +КонецФункции + +Функция ЕстьПрилепляемаяКоллекция(Имя) Экспорт + Возврат ПрилепляемыеКоллекции.Получить(Имя).СодержитЗначение(); +КонецФункции diff --git a/tasks/coverage.os b/tasks/coverage.os new file mode 100644 index 0000000..907b935 --- /dev/null +++ b/tasks/coverage.os @@ -0,0 +1,34 @@ +#Использовать coverage +#Использовать 1commands +#Использовать fs + +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + +ФС.ОбеспечитьПустойКаталог(ОбъединитьПути("build", "coverage")); +ПутьКСтат = "build/coverage/stat.json"; + +Команда = Новый Команда; +Команда.УстановитьКоманду("oscript"); +Если НЕ ЭтоWindows Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); +КонецЕсли; +Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); +Команда.ДобавитьПараметр("tasks/test.os"); +Команда.ПоказыватьВыводНемедленно(Истина); + +КодВозврата = Команда.Исполнить(); + +ФайлСтатистики = Новый Файл(ПутьКСтат); + +ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); + +ПроцессорГенерации.ОтносительныеПути() + .РабочийКаталог("build/coverage") + .КаталогИсходников(ТекущийКаталог()) + .ФайлСтатистики(ФайлСтатистики.ПолноеИмя) + .GenericCoverage() + .Cobertura() + .Сформировать(); + +ЗавершитьРаботу(КодВозврата); diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg new file mode 100644 index 0000000..2303418 --- /dev/null +++ b/tasks/oscript.cfg @@ -0,0 +1 @@ +lib.system=../oscript_modules \ No newline at end of file diff --git a/tasks/test.os b/tasks/test.os new file mode 100644 index 0000000..43bba03 --- /dev/null +++ b/tasks/test.os @@ -0,0 +1,45 @@ +#Использовать 1testrunner +#Использовать fs + +Функция ПрогнатьТесты() + + Тестер = Новый Тестер; + Тестер.УстановитьФорматЛогФайла(Тестер.ФорматыЛогФайла().GenericExec); + Тестер.ПодробныеОписанияОшибок(Истина); + + ПутьКТестам = "tests"; + ПутьКОтчетуJUnit = ОбъединитьПути("build", "testsResults"); + + ФС.ОбеспечитьПустойКаталог(ПутьКОтчетуJUnit); + + РезультатТестирования = Тестер.ТестироватьКаталог( + Новый Файл(ПутьКТестам), + Новый Файл(ПутьКОтчетуJUnit) + ); + + Успешно = РезультатТестирования = 0; + + Возврат Успешно; + +КонецФункции // ПрогнатьТесты() + +// основной код + +ТекКаталог = ТекущийКаталог(); + +Попытка + ТестыПрошли = ПрогнатьТесты(); +Исключение + ТестыПрошли = Ложь; + Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); +КонецПопытки; + +УстановитьТекущийКаталог(ТекКаталог); + +Если Не ТестыПрошли Тогда + ВызватьИсключение "Тестирование завершилось неудачно!"; +Иначе + Сообщить(СтрШаблон("Результат прогона тестов <%1> + |", ТестыПрошли)); +КонецЕсли; diff --git "a/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\273\320\276\320\274\320\260\320\275\320\275\320\260\321\217.os" "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\273\320\276\320\274\320\260\320\275\320\275\320\260\321\217.os" new file mode 100644 index 0000000..c57103b --- /dev/null +++ "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\320\273\320\276\320\274\320\260\320\275\320\275\320\260\321\217.os" @@ -0,0 +1,6 @@ +Процедура Добавить(Желудь) Экспорт +КонецПроцедуры + +&ПрилепляемаяКоллекция("Сломанная") +Процедура ПриСозданииОбъекта() +КонецПроцедуры diff --git "a/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\321\202\321\200\320\276\320\272\320\260.os" "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\321\202\321\200\320\276\320\272\320\260.os" new file mode 100644 index 0000000..1681524 --- /dev/null +++ "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\320\260\321\217\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\241\321\202\321\200\320\276\320\272\320\260.os" @@ -0,0 +1,14 @@ +Перем Коллекция; + +Процедура Добавить(Желудь, ОпределениеЖелудя) Экспорт + Коллекция.Добавить(Желудь); +КонецПроцедуры + +Функция Получить() Экспорт + Возврат СтрСоединить(Коллекция, ", "); +КонецФункции + +&ПрилепляемаяКоллекция("Строка") +Процедура ПриСозданииОбъекта() + Коллекция = Новый Массив(); +КонецПроцедуры diff --git "a/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\321\201\321\202\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265.os" "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\321\201\321\202\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265.os" new file mode 100644 index 0000000..2dc4f06 --- /dev/null +++ "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\321\201\321\202\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265.os" @@ -0,0 +1,3 @@ +Функция Имя() Экспорт + Возврат "Тест"; +КонецФункции \ No newline at end of file diff --git "a/tests/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\265\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270.os" "b/tests/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\265\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270.os" new file mode 100644 index 0000000..a267a2a --- /dev/null +++ "b/tests/\320\237\321\200\320\270\320\273\320\265\320\277\320\273\321\217\320\265\320\274\321\213\320\265\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\270.os" @@ -0,0 +1,203 @@ +#Использовать ".." +#Использовать "." +#Использовать asserts + +&Тест +Процедура ПрилепляемаяКоллекцияКарта() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияКарта")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("Карта")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("Карта"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияКарта"); + + ПрилепляемаяКоллекция.Добавить(1, Новый ТестОпределение()); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("ФиксированнаяКарта"); + + Ожидаем.Что(Коллекция.Получить("Тест").ИначеВызватьИсключение("Не найден добавленный элемент")) + .Равно(1); + +КонецПроцедуры + +&Тест +Процедура ПрилепляемаяКоллекцияМассив() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияМассив")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("Массив")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("Массив"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияМассив"); + + ПрилепляемаяКоллекция.Добавить(1, Новый ТестОпределение()); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("ФиксированныйМассив"); + + Ожидаем.Что(Коллекция[0]) + .Равно(1); + +КонецПроцедуры + +&Тест +Процедура ПрилепляемаяКоллекцияМножество() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияМножество")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("Множество")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("Множество"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияМножество"); + + ПрилепляемаяКоллекция.Добавить(1, Новый ТестОпределение()); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("ФиксированноеМножество"); + + Ожидаем.Что(Коллекция.Содержит(1)) + .ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ПрилепляемаяКоллекцияСоответствие() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияСоответствие")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("Соответствие")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("Соответствие"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияСоответствие"); + + ПрилепляемаяКоллекция.Добавить(1, Новый ТестОпределение()); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("ФиксированноеСоответствие"); + + Ожидаем.Что(Коллекция.Получить("Тест")) + .Равно(1); + +КонецПроцедуры + +&Тест +Процедура ПрилепляемаяКоллекцияСписок() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияСписок")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("Список")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("Список"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияСписок"); + + ПрилепляемаяКоллекция.Добавить(1, Новый ТестОпределение()); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("ФиксированныйСписок"); + + Ожидаем.Что(Коллекция.Содержит(1)) + .ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ПрилепляемаяКоллекцияТаблицаЗначений() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияТаблицаЗначений")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("ТаблицаЗначений")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("ТаблицаЗначений"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияТаблицаЗначений"); + + ТестОпределение = Новый ТестОпределение(); + + ПрилепляемаяКоллекция.Добавить(1, ТестОпределение); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("ТаблицаЗначений"); + + Ожидаем.Что(Коллекция) + .Не_().Равно(ПрилепляемаяКоллекция.Получить()); + + Ожидаем.Что(Коллекция[0].Имя).Равно("Тест"); + Ожидаем.Что(Коллекция[0].Желудь).Равно(1); + Ожидаем.Что(Коллекция[0].ОпределениеЖелудя).Равно(ТестОпределение); + +КонецПроцедуры + +&Тест +Процедура ПользовательскаяПрилепляемаяКоллекция() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияСтрока")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями.ЕстьПрилепляемаяКоллекция("Строка")) + .ЭтоИстина(); + + ПрилепляемаяКоллекция = УправляющийПрилепляемымиКоллекциями.ПолучитьПрилепляемуюКоллекцию("Строка"); + + Ожидаем.Что(ПрилепляемаяКоллекция) + .ИмеетТип("ПрилепляемаяКоллекцияСтрока"); + + ПрилепляемаяКоллекция.Добавить(1, Новый ТестОпределение()); + ПрилепляемаяКоллекция.Добавить(2, Новый ТестОпределение()); + + Коллекция = ПрилепляемаяКоллекция.Получить(); + + Ожидаем.Что(Коллекция) + .ИмеетТип("Строка"); + + Ожидаем.Что(Коллекция).Равно("1, 2"); + +КонецПроцедуры + +&Тест +Процедура ДубльПрилепляемойКоллекции() Экспорт + + УправляющийПрилепляемымиКоллекциями = Новый УправляющийПрилепляемымиКоллекциями(); + УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип("ПрилепляемаяКоллекцияСтрока")); + + Ожидаем.Что(УправляющийПрилепляемымиКоллекциями) + .Метод("ДобавитьПрилепляемуюКоллекцию", Список.ИзЭлементов(Тип("ПрилепляемаяКоллекцияСтрока")).ВМассив()) + .ВыбрасываетИсключение("Прилепляемая коллекция Строка уже зарегистрирована"); + +КонецПроцедуры