Skip to content

Commit 6a2168b

Browse files
committed
Рекурсивная распаковка каталога с внешними обработками/отчетами xDrivenDevelopment#31
1 parent 8e29d3c commit 6a2168b

File tree

2 files changed

+111
-29
lines changed

2 files changed

+111
-29
lines changed

tests/v8files-extractor-test.os

Lines changed: 60 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,49 +14,90 @@
1414
ВсеТесты = Новый Массив;
1515

1616
ВсеТесты.Добавить("Тест_ДолженРазложитьФайлОбработкиИзЗаданнойПапки");
17+
ВсеТесты.Добавить("Тест_ДолженРазложитьКаталог");
1718

1819
Возврат ВсеТесты;
1920

2021
КонецФункции
2122

2223
Процедура ПослеЗапускаТеста() Экспорт
23-
//ВременныеФайлы.Удалить();
24+
ВременныеФайлы.Удалить();
2425
КонецПроцедуры
2526

26-
Процедура Тест_ДолженРазложитьФайлОбработкиИзЗаданнойПапки() Экспорт
27+
Функция ЗагрузитьИсполнителя()
28+
29+
ИмяКаталога = ТекущийСценарий().Каталог;
30+
Исполнитель = ЗагрузитьСценарий(ОбъединитьПути(ИмяКаталога,"../v8files-extractor.os"));
31+
Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor");
32+
Лог.УстановитьУровень(УровниЛога.Отладка);
33+
34+
Возврат Исполнитель;
35+
36+
КонецФункции
2737

38+
Функция ПолучитьФайлТестовойОбработки()
39+
2840
ИмяКаталога = ТекущийСценарий().Каталог;
2941
ИмяФайла = "Fixture";
3042
ИмяФайлаСРасширением = ИмяФайла+".epf";
3143

3244
ПутьФайла = ОбъединитьПути(ИмяКаталога, ИмяФайлаСРасширением);
33-
Ожидаем.Что(Новый Файл(ПутьФайла).Существует(), "Исходный файл должен существовать").ЭтоИстина();
45+
ФайлОбработки = Новый Файл(ПутьФайла);
46+
Ожидаем.Что(ФайлОбработки.Существует(), "Исходный файл должен существовать").ЭтоИстина();
47+
48+
Возврат ФайлОбработки;
49+
50+
КонецФункции
51+
52+
Процедура Тест_ДолженРазложитьФайлОбработкиИзЗаданнойПапки() Экспорт
53+
54+
ФайлОбработки = ПолучитьФайлТестовойОбработки();
3455

3556
КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог();
3657

37-
Исполнитель = ЗагрузитьСценарий(ОбъединитьПути(ИмяКаталога,"../v8files-extractor.os"));
38-
Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor");
39-
Лог.УстановитьУровень(УровниЛога.Отладка);
58+
Исполнитель = ЗагрузитьИсполнителя();
59+
Исполнитель.РазобратьФайл(ФайлОбработки.ПолноеИмя, КаталогВыгрузки);
4060

41-
Исполнитель.РазобратьФайл(ПутьФайла, КаталогВыгрузки);
61+
КаталогИсходников = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ФайлОбработки.ИмяБезРасширения));
62+
Ожидаем.Что(КаталогИсходников.Существует()).ЭтоИстина();
63+
Ожидаем.Что(КаталогИсходников.ЭтоКаталог(), "Должны были найти каталог с именем обработки").ЭтоИстина();
64+
Ожидаем.Что(КаталогСодержитИсходникиОбработки(КаталогИсходников.ПолноеИмя)).ЭтоИстина();
65+
КонецПроцедуры
66+
67+
Процедура Тест_ДолженРазложитьКаталог() Экспорт
68+
69+
ФайлОбработки = ПолучитьФайлТестовойОбработки();
4270

43-
МассивФайлов = НайтиФайлы(КаталогВыгрузки, ПолучитьМаскуВсеФайлы());
44-
Ожидаем.Что(МассивФайлов, "В каталоге выгрузки должны быть файлы").Заполнено();
45-
Нашли = Ложь;
46-
для Каждого КаталогИсходников Из МассивФайлов Цикл
47-
Нашли = КаталогИсходников.Имя = ИмяФайла;
48-
Если Нашли Тогда
49-
Прервать;
50-
КонецЕсли;
51-
КонецЦикла;
52-
Ожидаем.Что(Нашли, "Должны были найти имя каталога обработки ").ЭтоИстина();
53-
ВыгруженныеФайлы = НайтиФайлы(КаталогИсходников.ПолноеИмя, ПолучитьМаскуВсеФайлы());
71+
ИмяВложенногоКаталога = "1";
72+
73+
КаталогИсходников = ВременныеФайлы.СоздатьКаталог();
74+
СоздатьКаталог(ОбъединитьПути(КаталогИсходников, ИмяВложенногоКаталога));
75+
76+
КопироватьФайл(ФайлОбработки.ПолноеИмя, ОбъединитьПути(КаталогИсходников, ИмяВложенногоКаталога, ФайлОбработки.Имя));
77+
78+
КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог();
79+
80+
Исполнитель = ЗагрузитьИсполнителя();
81+
Исполнитель.РазобратьКаталог(КаталогИсходников, КаталогВыгрузки);
82+
83+
ВложенныйКаталогВыгрузки = ОбъединитьПути(КаталогВыгрузки, ИмяВложенногоКаталога);
84+
ФайлВложенныйКаталогИсходников = Новый Файл(ВложенныйКаталогВыгрузки);
85+
Ожидаем.Что(ФайлВложенныйКаталогИсходников.Существует(), "Должны были найти имя вложенного каталога").ЭтоИстина();
86+
Ожидаем.Что(ФайлВложенныйКаталогИсходников.ЭтоКаталог(), "Должны были найти вложенный каталог").ЭтоИстина();
87+
88+
ПутьКаталогаВыгрузкиДляОбработки = ОбъединитьПути(ВложенныйКаталогВыгрузки, ФайлОбработки.ИмяБезРасширения);
89+
Ожидаем.Что(КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки)).ЭтоИстина();
90+
91+
КонецПроцедуры
92+
93+
Функция КаталогСодержитИсходникиОбработки(Знач Каталог)
94+
ВыгруженныеФайлы = НайтиФайлы(Каталог, ПолучитьМаскуВсеФайлы());
5495
ИменаВыгруженныхФайлов = РазвернутьМассивФайловВИменаФайлов(ВыгруженныеФайлы);
5596
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("renames.txt");
5697
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("Form");
5798
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("Макеты");
5899
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("und");
59-
КонецПроцедуры
100+
КонецФункции
60101

61102
Функция РазвернутьМассивФайловВИменаФайлов(Знач МассивОбъектовФайл)
62103

v8files-extractor.os

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
Перем Лог;
88

9-
Процедура ЗапускВКоманднойСтроке()
9+
Функция ЗапускВКоманднойСтроке()
10+
11+
Если ТекущийСценарий().Источник <> СтартовыйСценарий().Источник Тогда
12+
Возврат Ложь;
13+
КонецЕсли;
1014

1115
Парсер = Новый ПарсерАргументовКоманднойСтроки();
1216
Парсер.ДобавитьПараметр("ВходящиеФайлы");
@@ -17,24 +21,65 @@
1721
Лог.Отладка(Параметр);
1822
КонецЦикла;
1923

20-
КонецПроцедуры
24+
Возврат Истина;
25+
26+
КонецФункции
2127

2228
Процедура Инициализация()
2329
Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor");
2430
Лог.Отладка("Параметры командной строки:");
2531
КонецПроцедуры
2632

33+
Процедура РазобратьКаталог(Знач ПутьКаталога, Знач КаталогВыгрузки) Экспорт
34+
Лог.Информация("Подготовка выгрузки каталога "+ПутьКаталога+" в каталог " + КаталогВыгрузки);
35+
РазобратьКаталогВнутр(ПутьКаталога, КаталогВыгрузки);
36+
Лог.Информация("Завершена выгрузки каталога "+ПутьКаталога+" в каталог " + КаталогВыгрузки);
37+
КонецПроцедуры
38+
2739
Процедура РазобратьФайл(Знач ПутьФайла, Знач КаталогВыгрузки) Экспорт
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+
Возврат Найти(".epf,.erf,", Файл.Расширение+",") > 0;
68+
КонецФункции
69+
70+
Процедура РазобратьФайлВнутр(Знач ПутьФайла, Знач КаталогВыгрузки)
2871

2972
Файл = Новый Файл(ПутьФайла);
73+
Если Не ТипФайлаПоддерживается(Файл) Тогда
74+
ВызватьИсключение "Тип файла """+Файл.Расширение+""" не поддерживается";
75+
КонецЕсли;
76+
3077
Ожидаем.Что(Файл.Существует(), "Файл " + ПутьФайла + " должен существовать").ЭтоИстина();
3178

3279
ПапкаИсходников = Новый Файл(ОбъединитьПути(КаталогВыгрузки, Файл.ИмяБезРасширения));
33-
Лог.Информация("Подготовка выгрузки файла "+ПутьФайла+" в каталог " + ПапкаИсходников.ПолноеИмя);
3480
ОбеспечитьПустойКаталог(ПапкаИсходников);
3581
ЗапуститьРаспаковку(Файл, ПапкаИсходников);
3682

37-
Лог.Информация("Завершена выгрузка файла "+ПутьФайла+" в каталог " + ПапкаИсходников.ПолноеИмя);
3883
КонецПроцедуры
3984

4085
Процедура ЗапуститьРаспаковку(Знач Файл, Знач ПапкаИсходников)
@@ -85,14 +130,10 @@
85130

86131
КонецПроцедуры
87132

88-
Функция ЭтоЗапускТеста()
89-
Возврат ТекущийСценарий().Источник <> СтартовыйСценарий().Источник;
90-
КонецФункции
91-
92133
Инициализация();
93134

94-
Если Не ЭтоЗапускТеста() Тогда
95-
ЗапускВКоманднойСтроке();
135+
Если ЗапускВКоманднойСтроке() Тогда
136+
// TODO Сообщить код возврата в оболочку ОС
96137
КонецЕсли;
97138

98139

0 commit comments

Comments
 (0)