|
| 1 | +#Использовать asserts |
| 2 | +#Использовать collectionos |
| 3 | +#Использовать fs |
| 4 | +#Использовать ".." |
| 5 | +#Использовать "." |
| 6 | + |
| 7 | + |
| 8 | +Перем ПутьКТестовымДанным; |
| 9 | +Перем ТестовыеДанные; |
| 10 | +Перем ИмяТега; |
| 11 | + |
| 12 | + |
| 13 | +&ТестовыйНабор(Характер = "Одиночка") |
| 14 | +Процедура ПриСозданииОбъекта() |
| 15 | + |
| 16 | + // В качестве источника тестов используется: |
| 17 | + // https://github.com/yaml/yaml-test-suite.git |
| 18 | + |
| 19 | + ИмяТега = "anchor"; // Имя Файла должно быть именем тега |
| 20 | + |
| 21 | + ПутьКТестовымДанным = ТестовыеУтилиты.ПолучитьПутьКТестовымДанным("yaml-test-suite"); |
| 22 | + |
| 23 | + ТестовыеДанные = Новый ТаблицаЗначений(); |
| 24 | + ТестовыеДанные.Колонки.Добавить("Каталог"); |
| 25 | + ТестовыеДанные.Колонки.Добавить("Описание"); |
| 26 | + |
| 27 | + ПропускаемыеКаталоги = ТестовыеУтилиты.ПрочитатьТекстФайла( |
| 28 | + ОбъединитьПути(ПутьКТестовымДанным, "not-implemented.txt") |
| 29 | + ); |
| 30 | + |
| 31 | + // Ищем файлы в папке тегов для выбранного тега |
| 32 | + ПутьКТегу = ОбъединитьПути(ПутьКТестовымДанным, "tags", ИмяТега); |
| 33 | + |
| 34 | + Если НЕ ФС.КаталогСуществует(ПутьКТегу) Тогда |
| 35 | + ВызватьИсключение("Тег """ + ИмяТега + """ не найден в каталоге tags"); |
| 36 | + КонецЕсли; |
| 37 | + |
| 38 | + НайденныеФайлыТегов = НайтиФайлы(ПутьКТегу, "*", Истина); |
| 39 | + Для Каждого ФайлТега Из НайденныеФайлыТегов Цикл |
| 40 | + Если ФайлТега.ЭтоКаталог() Тогда |
| 41 | + Продолжить; |
| 42 | + КонецЕсли; |
| 43 | + |
| 44 | + // Читаем путь к каталогу теста из файла тега |
| 45 | + ОтносительныйПутьКТесту = СокрЛП(ТестовыеУтилиты.ПрочитатьТекстФайла(ФайлТега.ПолноеИмя)); |
| 46 | + ПутьККаталогуТеста = ОбъединитьПути(ПутьКТегу, ОтносительныйПутьКТесту); |
| 47 | + |
| 48 | + // Проверяем наличие файла описания теста |
| 49 | + ПутьКОписанию = ОбъединитьПути(ПутьККаталогуТеста, "==="); |
| 50 | + Если ФС.ФайлСуществует(ПутьКОписанию) Тогда |
| 51 | + |
| 52 | + Каталог = ФС.ОтносительныйПуть(ПутьКТестовымДанным, ПутьККаталогуТеста); |
| 53 | + Описание = СокрЛП(ТестовыеУтилиты.ПрочитатьТекстФайла(ПутьКОписанию)); |
| 54 | + Если Не СтрНайти(ПропускаемыеКаталоги, Каталог) Тогда |
| 55 | + // Добавляем только те каталоги, которые не помечены как "не реализовано" |
| 56 | + НоваяСтрока = ТестовыеДанные.Добавить(); |
| 57 | + НоваяСтрока.Каталог = Каталог; |
| 58 | + НоваяСтрока.Описание = Описание; |
| 59 | + КонецЕсли; |
| 60 | + |
| 61 | + КонецЕсли; |
| 62 | + |
| 63 | + КонецЦикла; |
| 64 | + |
| 65 | +КонецПроцедуры |
| 66 | + |
| 67 | +&ПараметризованныйТест |
| 68 | +&ИсточникВыражение("() -> КоллекцияТестовыхДанных()") |
| 69 | +Процедура ВыполнитьТест(Каталог, Описание) Экспорт |
| 70 | + |
| 71 | + ПутьККаталогу = ОбъединитьПути(ПутьКТестовымДанным, Каталог); |
| 72 | + |
| 73 | + ПутьYAML = ОбъединитьПути(ПутьККаталогу, "in.yaml"); |
| 74 | + СодержимоеYAML = ТестовыеУтилиты.ПрочитатьТекстФайла(ПутьYAML); |
| 75 | + ЧтениеYaml = ТестовыеУтилиты.СоздатьЭкземплярПарсера(); |
| 76 | + |
| 77 | + РезультатYAML = ЧтениеYaml.ПрочитатьYaml(СодержимоеYAML); |
| 78 | + РезультатСтрокой = ДанныеВСтрокуJSON(РезультатYAML); |
| 79 | + |
| 80 | + ПутьКФайлуОшибки = ОбъединитьПути(ПутьККаталогу, "error"); |
| 81 | + ПутьКФайлуJson = ОбъединитьПути(ПутьККаталогу, "in.json"); |
| 82 | + Если ФС.ФайлСуществует(ПутьКФайлуОшибки) Тогда |
| 83 | + // Это ошибка |
| 84 | + МассивПараметров = Новый Массив; |
| 85 | + МассивПараметров.Добавить(СодержимоеYAML); |
| 86 | + |
| 87 | + Ожидаем.Что(ЧтениеYaml) |
| 88 | + .Метод("ПрочитатьYaml", МассивПараметров) |
| 89 | + .ВыбрасываетИсключение(); |
| 90 | + |
| 91 | + ИначеЕсли ФС.ФайлСуществует(ПутьКФайлуJson) Тогда |
| 92 | + РезультатJSON = ПрочитатьJSONизФайла(ПутьКФайлуJson); |
| 93 | + ОбразецСтрокой = ДанныеВСтрокуJSON(РезультатJSON); |
| 94 | + |
| 95 | + Ожидаем.Что(РезультатСтрокой).Равно(ОбразецСтрокой); |
| 96 | + Иначе |
| 97 | + Возврат; // !TODO: Тут вообще было бы хорошо помечать тест как broken |
| 98 | + КонецЕсли; |
| 99 | + |
| 100 | +КонецПроцедуры |
| 101 | + |
| 102 | +Функция КоллекцияТестовыхДанных() Экспорт |
| 103 | + |
| 104 | + Возврат ПроцессорыКоллекций.ИзКоллекции(ТестовыеДанные) |
| 105 | + .Обработать("Элемент -> Списки.ИзЭлементов(Элемент.Каталог, Элемент.Описание)") |
| 106 | + ; |
| 107 | + |
| 108 | +КонецФункции |
| 109 | + |
| 110 | +Функция ПрочитатьJSONизФайла(ПутьКФайлу) |
| 111 | + |
| 112 | + ЧтениеJSON = Новый ЧтениеJSON(); |
| 113 | + ЧтениеJSON.ОткрытьФайл(ПутьКФайлу); |
| 114 | + Результат = ПрочитатьJSON(ЧтениеJSON, Истина); |
| 115 | + ЧтениеJSON.Закрыть(); |
| 116 | + |
| 117 | + Возврат Результат; |
| 118 | + |
| 119 | +КонецФункции |
| 120 | + |
| 121 | +Функция ДанныеВСтрокуJSON(Данные) |
| 122 | + |
| 123 | + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( |
| 124 | + ПереносСтрокJSON.Нет |
| 125 | + ); |
| 126 | + |
| 127 | + ЗаписьJSON = Новый ЗаписьJSON(); |
| 128 | + ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); |
| 129 | + ЗаписатьJSON(ЗаписьJSON, Данные); |
| 130 | + Результат = ЗаписьJSON.Закрыть(); |
| 131 | + |
| 132 | + Возврат Результат; |
| 133 | + |
| 134 | +КонецФункции |
0 commit comments