diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..873ff5c --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.vscode +.DS_Store +*.ospx +out/ +oscript_modules/ diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..05c81e6 --- /dev/null +++ b/README.MD @@ -0,0 +1,77 @@ + +# autumn-annotation-types - набор аннотаций ОСени, для удобной инициализации стандартных типов. + +## Что это и зачем ? + +Очень часто приходится писать вот такой код: + +```bsl +Перем МойМассив; + +&Желудь +Процедура ПриСозданииОбъекта() + МойМассив = Новый Массив; +КонецПроцедуры +``` + +Мы обозначаем переменные(поля класса), и где-то из конструктора инициализируем значения. Данная библиотека содержит набор аннотаций, которые помогают сократить написание количество кода, и его читаемость. Благодаря этим аннотациям ОСень берет на себя всю работу по инициализации полей. + +```bsl +&Массив +Перем МойМассив; + +&Желудь +Процедура ПриСозданииОбъекта() +КонецПроцедуры +``` + +## Поддерживаемые типы + +```&Массив(Размер)``` - В поле внедряется новый массив. Параметр ```Размер``` необязательный, позволяет задать размер массива. + +```&Соответствие``` - В поле внедряется новое соответствие. + +```&Структура(Ключи)``` - В поле внедряется новая структура. Параметр ```Ключи``` необязательный. Строка, содержащая список ключей структуры, разделенные запятой "```,```" + +```&ТаблицаЗначений(Колонки)``` - В поле внедряется новая таблица значений. Параметр ```Колонки``` необязательный. Строка, содержащая список имен колонок, разделенных запятой "```,```" + +## Подключение и использование + +В точке входа вашего приложения подключить библиотеку + +```bsl +#Использовать autumn +#Использовать autumn-annotation-types + +Поделка = Новый Поделка(); +. . . +``` + +Пример внедрения типов в поля желудя: + +```bsl +&Массив +Перем ПустойМассив Экспорт; + +&ТаблицаЗначений("Колонка1, Колонка2") +Перем ТЗ Экспорт; + +&ТаблицаЗначений +Перем ТЗБезКолонок Экспорт; + +&Соответствие +Перем Соответствие Экспорт; + +&Структура("Ключ1, Ключ2") +Перем СтруктураСКлючами Экспорт; + +&Структура +Перем ПустаяСтруктура Экспорт; + +Перем МассивСРазмером1 Экспорт; + +&Желудь +Процедура ПриСозданииОбъекта(&Массив(1) _Массив) + МассивСРазмером1 = _Массив; +КонецПроцедуры +``` \ No newline at end of file diff --git a/package-loader.os b/package-loader.os new file mode 100644 index 0000000..fff9fba --- /dev/null +++ b/package-loader.os @@ -0,0 +1,108 @@ +// Пояснения по переменным даны в конце модуля +Перем ПоказатьСообщенияЗагрузки; +Перем ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей; + +Перем КэшМодулей; + +Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ) + Вывести(" + |ПриЗагрузкеБиблиотеки " + Путь); + + Если Осень <> Неопределено Тогда + ПутьДоЗаготовки = ОбъединитьПути(Путь, "src/Заготовки/ИнициализацияАннотацийТипов.os"); + ПодключитьСценарий(ПутьДоЗаготовки, "ИнициализацияАннотацийТипов"); + Осень.ДобавитьЗаготовкуДляАвтоИнициализации("ИнициализацияАннотацийТипов"); + + мКаталог = ОбъединитьПути(Путь, "src/Классы"); + ОбработатьКаталогКлассов(мКаталог, СтандартнаяОбработка, Отказ); + Иначе + ВызватьИсключение "Некорректный порядок импорта библиотек. Сначала подключите autumn"; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьКаталогКлассов(Знач Путь, СтандартнаяОбработка, Отказ) + + КаталогКлассов = Новый Файл(Путь); + + Если КаталогКлассов.Существует() Тогда + Файлы = НайтиФайлы(КаталогКлассов.ПолноеИмя, "*.os"); + Для Каждого Файл Из Файлы Цикл + Вывести(СтрШаблон(" класс (по соглашению) %1, файл %2", Файл.ИмяБезРасширения, Файл.ПолноеИмя)); + СтандартнаяОбработка = Ложь; + // ДобавитьКласс(Файл.ПолноеИмя, Файл.ИмяБезРасширения); + ДобавитьКлассЕслиРанееНеДобавляли(Файл.ПолноеИмя, Файл.ИмяБезРасширения); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьКлассЕслиРанееНеДобавляли(ПутьФайла, ИмяКласса) + Вывести("Добавляю класс, если ранее не добавляли " + ИмяКласса); + Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда + Вывести("Добавляю класс " + ИмяКласса); + ДобавитьКласс(ПутьФайла, ИмяКласса); + Возврат; + КонецЕсли; + + КлассУжеЕсть = Ложь; + Попытка + Объект = Новый(ИмяКласса); + КлассУжеЕсть = Истина; + Исключение + СообщениеОшибки = ОписаниеОшибки(); + ИскомаяОшибка = СтрШаблон("Конструктор не найден (%1)", ИмяКласса); + КлассУжеЕсть = СтрНайти(СообщениеОшибки, ИскомаяОшибка) = 0; + КонецПопытки; + Если Не КлассУжеЕсть Тогда + + Вывести("Добавляю класс, т.к. он не найден - " + ИмяКласса); + ДобавитьКласс(ПутьФайла, ИмяКласса); + + Иначе + Вывести("Пропускаю загрузку класса " + ИмяКласса); + + КонецЕсли; +КонецПроцедуры + +Процедура Вывести(Знач Сообщение) + Если ПоказатьСообщенияЗагрузки Тогда + Сообщить(Сообщение); + КонецЕсли; +КонецПроцедуры + +Функция ПолучитьБулевоИзПеременнойСреды(Знач ИмяПеременнойСреды, Знач ЗначениеПоУмолчанию) + Рез = ЗначениеПоУмолчанию; + РезИзСреды = ПолучитьПеременнуюСреды(ИмяПеременнойСреды); + Если ЗначениеЗаполнено(РезИзСреды) Тогда + РезИзСреды = СокрЛП(РезИзСреды); + Попытка + Рез = Число(РезИзСреды) <> 0 ; + Исключение + Рез = ЗначениеПоУмолчанию; + Сообщить(СтрШаблон("Неверный формат переменной среды %1. Ожидали 1 или 0, а получили %2", ИмяПеременнойСреды, РезИзСреды)); + КонецПопытки; + КонецЕсли; + + Возврат Рез; +КонецФункции + +// Если Истина, то выдаются подробные сообщения о порядке загрузке пакетов, классов, модулей, что помогает при анализе проблем +// очень полезно при анализе ошибок загрузки +// Переменная среды может принимать значение 0 (выключено) или 1 (включено) +// Значение флага по умолчанию - Ложь +ПоказатьСообщенияЗагрузки = ПолучитьБулевоИзПеременнойСреды( + "OSLIB_LOADER_TRACE", Ложь); + +// Если Ложь, то пропускаются ошибки повторной загрузки классов/модулей, +//что важно при разработке/тестировании стандартных библиотек +// Если Истина, то выдается ошибка при повторной загрузке классов библиотек из движка +// Переменная среды может принимать значение 0 (выключено) или 1 (включено) +// Значение флага по умолчанию - Истина +ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей = ПолучитьБулевоИзПеременнойСреды( + "OSLIB_LOADER_DUPLICATES", Ложь); + +// для установки других значений переменных среды и запуска скриптов можно юзать следующую командную строку +// (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os) + +КэшМодулей = Новый Массив; diff --git a/packagedef b/packagedef new file mode 100644 index 0000000..b177e80 --- /dev/null +++ b/packagedef @@ -0,0 +1,17 @@ +//////////////////////////////////////////////////////////// +// Описание пакета для сборки и установки +// Полную документацию см. на hub.oscript.io/packaging +// + + +Описание.Имя("autumn-annotation-types") + .Версия("1.0.0") + .Автор("nikita ivanchenko") + .АдресАвтора("https://github.com/Nivanchenko") + .Описание("Набор аннотаций ОСени, для удобной инициализации стандартных типов") + .ВерсияСреды("1.8.3") + .ВключитьФайл("src") + .ВключитьФайл("package-loader.os") + .ЗависитОт("autumn", "3.1.1") + ; + diff --git "a/src/\320\227\320\260\320\263\320\276\321\202\320\276\320\262\320\272\320\270/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271\320\242\320\270\320\277\320\276\320\262.os" "b/src/\320\227\320\260\320\263\320\276\321\202\320\276\320\262\320\272\320\270/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271\320\242\320\270\320\277\320\276\320\262.os" new file mode 100644 index 0000000..5d3c577 --- /dev/null +++ "b/src/\320\227\320\260\320\263\320\276\321\202\320\276\320\262\320\272\320\270/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271\320\242\320\270\320\277\320\276\320\262.os" @@ -0,0 +1,11 @@ + +Процедура ПриИнициализацииПоделки(Поделка) Экспорт + + КаталогМодуля = ОбъединитьПути(ТекущийСценарий().Каталог, "../Классы"); + Поделка.ПросканироватьКаталог(КаталогМодуля); + +КонецПроцедуры + +&Заготовка +Процедура ПриСозданииОбъекта() +КонецПроцедуры 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\242\320\270\320\277\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\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262.os" new file mode 100644 index 0000000..bd7a5e0 --- /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\242\320\270\320\277\320\234\320\260\321\201\321\201\320\270\320\262.os" @@ -0,0 +1,14 @@ +Перем Размер; + +Процедура ПриРазворачиванииАннотации(ОпределениеАннотации, ПодчиненныеАннотации, ТипВладельцаСвойств, Свойство) Экспорт + + Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин"); + Аннотация.Параметры[1].Значение = Размер; + +КонецПроцедуры + +&Аннотация("Массив") +&Пластилин(Значение = "Массив", Блестяшка = 0) +Процедура ПриСозданииОбъекта(Значение = 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\242\320\270\320\277\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\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\242\320\270\320\277\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..ef26d74 --- /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\242\320\270\320\277\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,10 @@ + +Процедура ПриРазворачиванииАннотации(ОпределениеАннотации, ПодчиненныеАннотации, ТипВладельцаСвойств, Свойство) Экспорт + +КонецПроцедуры + +&Аннотация("Соответствие") +&Пластилин(Значение = "Соответствие") +Процедура ПриСозданииОбъекта(Значение = "") + +КонецПроцедуры \ 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\242\320\270\320\277\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260.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\242\320\270\320\277\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260.os" new file mode 100644 index 0000000..69f2886 --- /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\242\320\270\320\277\320\241\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260.os" @@ -0,0 +1,14 @@ +Перем Ключи; + +Процедура ПриРазворачиванииАннотации(ОпределениеАннотации, ПодчиненныеАннотации, ТипВладельцаСвойств, Свойство) Экспорт + + Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин"); + Аннотация.Параметры[1].Значение = Ключи; + +КонецПроцедуры + +&Аннотация("Структура") +&Пластилин(Значение = "Структура", Блестяшка = "") +Процедура ПриСозданииОбъекта(Значение = "") + Ключи = Значение; +КонецПроцедуры \ 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\242\320\270\320\277\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\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\242\320\270\320\277\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..1e2e2f9 --- /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\242\320\270\320\277\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,14 @@ +Перем Колонки; + +Процедура ПриРазворачиванииАннотации(ОпределениеАннотации, ПодчиненныеАннотации, ТипВладельцаСвойств, Свойство) Экспорт + + Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин"); + Аннотация.Параметры[1].Значение = Колонки; + +КонецПроцедуры + +&Аннотация("ТаблицаЗначений") +&Пластилин(Значение = "ТаблицаЗначений", Блестяшка = "") +Процедура ПриСозданииОбъекта(Значение = "") + Колонки = Значение; +КонецПроцедуры \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\220\320\275\320\275\320\276\321\202\320\270\321\200\320\276\320\262\320\260\320\275\321\213\321\205\320\242\320\270\320\277\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\220\320\275\320\275\320\276\321\202\320\270\321\200\320\276\320\262\320\260\320\275\321\213\321\205\320\242\320\270\320\277\320\276\320\262.os" new file mode 100644 index 0000000..3cfbe4e --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\220\320\275\320\275\320\276\321\202\320\270\321\200\320\276\320\262\320\260\320\275\321\213\321\205\320\242\320\270\320\277\320\276\320\262.os" @@ -0,0 +1,43 @@ + +&Дуб +Процедура ПриСозданииОбъекта() + +КонецПроцедуры + +&Завязь +&Характер("Компанейский") +Функция Массив(&Блестяшка Размер) Экспорт + Если Размер > 0 Тогда + Массив = Новый Массив(Размер); + Иначе + Массив = Новый Массив(); + КонецЕсли; + + Возврат Массив; +КонецФункции + +&Завязь +&Характер("Компанейский") +Функция Структура(&Блестяшка Ключи) Экспорт + Возврат Новый Структура(Ключи); +КонецФункции + +&Завязь +&Характер("Компанейский") +Функция Соответствие() Экспорт + Возврат Новый Соответствие(); +КонецФункции + +&Завязь +&Характер("Компанейский") +Функция ТаблицаЗначений(&Блестяшка Колонки) Экспорт + ТаблицаЗначений = Новый ТаблицаЗначений(); + + Если НЕ ПустаяСтрока(Колонки) Тогда + Для каждого ИмяКолонки Из СтрРазделить(Колонки, ",") Цикл + ТаблицаЗначений.Колонки.Добавить(СокрЛП(ИмяКолонки)); + КонецЦикла; + КонецЕсли; + + Возврат ТаблицаЗначений; +КонецФункции \ No newline at end of file diff --git a/tasks/test.os b/tasks/test.os new file mode 100644 index 0000000..10059c3 --- /dev/null +++ b/tasks/test.os @@ -0,0 +1,82 @@ +#Использовать 1bdd +#Использовать 1testrunner +#Использовать fs + +Функция ПрогнатьТесты() + + Тестер = Новый Тестер; + Тестер.УстановитьФорматЛогФайла(Тестер.ФорматыЛогФайла().GenericExec); + + ПутьКТестам = "tests"; + ПутьКОтчетуJUnit = "out"; + + ФС.ОбеспечитьПустойКаталог(ПутьКОтчетуJUnit); + + РезультатТестирования = Тестер.ТестироватьКаталог( + Новый Файл(ПутьКТестам), + Новый Файл(ПутьКОтчетуJUnit) + ); + + Успешно = РезультатТестирования = 0; + + Возврат Успешно; +КонецФункции // ПрогнатьТесты() + +Функция ПрогнатьФичи() + + ПутьОтчетаJUnit = ОбъединитьПути(ТекущийКаталог(), "out", "bdd-log.xml"); + + КаталогФич = ОбъединитьПути(".", "features"); + + Файл_КаталогФич = Новый Файл(КаталогФич); + + ИсполнительБДД = Новый ИсполнительБДД; + РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); + ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); + + СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся; + Если РезультатыВыполнения.Строки.Количество() > 0 Тогда + + СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); + + КонецЕсли; + + ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; + ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit); + + Сообщить(СтрШаблон("Результат прогона фич <%1> + |", ИтоговыйРезультатВыполнения)); + + Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался; +КонецФункции // ПрогнатьФичи() + +// основной код + +ТекКаталог = ТекущийКаталог(); + +Попытка + ТестыПрошли = ПрогнатьТесты(); +Исключение + ТестыПрошли = Ложь; + Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); +КонецПопытки; + +УстановитьТекущийКаталог(ТекКаталог); + +Попытка + ФичиПрошли = ПрогнатьФичи(); +Исключение + ФичиПрошли = Ложь; + Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); +КонецПопытки; + +Если Не ТестыПрошли Или Не ФичиПрошли Тогда + ВызватьИсключение "Тестирование завершилось неудачно!"; +Иначе + Сообщить(СтрШаблон("Результат прогона тестов <%1> + |", ТестыПрошли)); + Сообщить(СтрШаблон("Результат прогона основных фич <%1> + |", ФичиПрошли)); +КонецЕсли; diff --git a/tests/alltests.os b/tests/alltests.os new file mode 100644 index 0000000..893a038 --- /dev/null +++ b/tests/alltests.os @@ -0,0 +1,89 @@ +#Использовать autumn +#Использовать asserts +#Использовать ".." +#Использовать "." + +Функция ПолучитьПоделку() + Поделка = Новый Поделка(); + Поделка + .ДобавитьЖелудь(Тип("ТестовыйЖелудь")) + .ЗапуститьПриложение(); + + Возврат Поделка; +КонецФункции + +&Тест +Процедура ПроверкаМассива() Экспорт + + // Дано + Поделка = ПолучитьПоделку(); + + // Когда + ТестовыйЖелудь = Поделка.НайтиЖелудь("ТестовыйЖелудь"); + + // Тогда + Ожидаем.Что(ТестовыйЖелудь.ПустойМассив).ИмеетТип("Массив"); + Ожидаем.Что(ТестовыйЖелудь.ПустойМассив.Количество()).Равно(0); + + Ожидаем.Что(ТестовыйЖелудь.МассивСРазмером1).ИмеетТип("Массив"); + Ожидаем.Что(ТестовыйЖелудь.МассивСРазмером1.Количество()).Равно(1); + +КонецПроцедуры + +&Тест +Процедура ПроверкаСоответствие() Экспорт + + // Дано + Поделка = ПолучитьПоделку(); + + // Когда + ТестовыйЖелудь = Поделка.НайтиЖелудь("ТестовыйЖелудь"); + + // Тогда + Ожидаем.Что(ТестовыйЖелудь.Соответствие).ИмеетТип("Соответствие"); + Ожидаем.Что(ТестовыйЖелудь.Соответствие.Количество()).Равно(0); + +КонецПроцедуры + +&Тест +Процедура ПроверкаСтруктура() Экспорт + + // Дано + Поделка = ПолучитьПоделку(); + + // Когда + ТестовыйЖелудь = Поделка.НайтиЖелудь("ТестовыйЖелудь"); + + // Тогда + Ожидаем.Что(ТестовыйЖелудь.СтруктураСКлючами).ИмеетТип("Структура"); + Ожидаем.Что(ТестовыйЖелудь.СтруктураСКлючами.Количество()).Равно(2); + + Ожидаем.Что(ТестовыйЖелудь.СтруктураСКлючами.Свойство("Ключ1")).Равно(Истина); + Ожидаем.Что(ТестовыйЖелудь.СтруктураСКлючами.Свойство("Ключ2")).Равно(Истина); + + Ожидаем.Что(ТестовыйЖелудь.ПустаяСтруктура).ИмеетТип("Структура"); + Ожидаем.Что(ТестовыйЖелудь.ПустаяСтруктура.Количество()).Равно(0); + +КонецПроцедуры + +&Тест +Процедура ПроверкаТаблицаЗначений() Экспорт + + // Дано + Поделка = ПолучитьПоделку(); + + // Когда + ТестовыйЖелудь = Поделка.НайтиЖелудь("ТестовыйЖелудь"); + + // Тогда + Ожидаем.Что(ТестовыйЖелудь.ТЗБезКолонок).ИмеетТип("ТаблицаЗначений"); + Ожидаем.Что(ТестовыйЖелудь.ТЗБезКолонок.Количество()).Равно(0); + Ожидаем.Что(ТестовыйЖелудь.ТЗБезКолонок.Колонки.Количество()).Равно(0); + + Ожидаем.Что(ТестовыйЖелудь.ТЗ).ИмеетТип("ТаблицаЗначений"); + Ожидаем.Что(ТестовыйЖелудь.ТЗ.Количество()).Равно(0); + Ожидаем.Что(ТестовыйЖелудь.ТЗ.Колонки.Количество()).Равно(2); + Ожидаем.Что(ТестовыйЖелудь.ТЗ.Колонки[0].Имя).Равно("Колонка1"); + Ожидаем.Что(ТестовыйЖелудь.ТЗ.Колонки[1].Имя).Равно("Колонка2"); + +КонецПроцедуры \ No newline at end of file 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\276\320\262\321\213\320\271\320\226\320\265\320\273\321\203\320\264\321\214.os" "b/tests/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\226\320\265\320\273\321\203\320\264\321\214.os" new file mode 100644 index 0000000..5e120e5 --- /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\276\320\262\321\213\320\271\320\226\320\265\320\273\321\203\320\264\321\214.os" @@ -0,0 +1,25 @@ + +&Массив +Перем ПустойМассив Экспорт; + +&ТаблицаЗначений("Колонка1, Колонка2") +Перем ТЗ Экспорт; + +&ТаблицаЗначений +Перем ТЗБезКолонок Экспорт; + +&Соответствие +Перем Соответствие Экспорт; + +&Структура("Ключ1, Ключ2") +Перем СтруктураСКлючами Экспорт; + +&Структура +Перем ПустаяСтруктура Экспорт; + +Перем МассивСРазмером1 Экспорт; + +&Желудь +Процедура ПриСозданииОбъекта(&Массив(1) _Массив) + МассивСРазмером1 = _Массив; +КонецПроцедуры \ No newline at end of file