Skip to content

Commit 37616a1

Browse files
author
e.ivanov
committed
Разделение по тегам и генерация
1 parent 961e52f commit 37616a1

34 files changed

+4230
-139
lines changed

tests/alias.os

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
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+
ИмяТега = "alias"; // Имя Файла должно быть именем тега
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+
КонецФункции

tests/anchor.os

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
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

Comments
 (0)