Skip to content

Commit bbc5c2c

Browse files
committed
Распаковка одного файла epf в заданный каталог. (Портировано на 1Script) xDrivenDevelopment#30
1 parent 1ffe436 commit bbc5c2c

File tree

2 files changed

+164
-0
lines changed

2 files changed

+164
-0
lines changed

tests/v8files-extractor-test.os

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#Использовать tempfiles
2+
#Использовать asserts
3+
4+
Перем юТест;
5+
6+
Процедура Инициализация()
7+
8+
КонецПроцедуры
9+
10+
Функция ПолучитьСписокТестов(Знач Контекст) Экспорт
11+
12+
юТест = Контекст;
13+
14+
ВсеТесты = Новый Массив;
15+
16+
ВсеТесты.Добавить("Тест_ДолженРазложитьФайлОбработкиИзЗаданнойПапки");
17+
18+
Возврат ВсеТесты;
19+
20+
КонецФункции
21+
22+
Процедура ПослеЗапускаТеста() Экспорт
23+
//ВременныеФайлы.Удалить();
24+
КонецПроцедуры
25+
26+
Процедура Тест_ДолженРазложитьФайлОбработкиИзЗаданнойПапки() Экспорт
27+
28+
ИмяКаталога = ТекущийСценарий().Каталог;
29+
ИмяФайла = "Fixture";
30+
ИмяФайлаСРасширением = ИмяФайла+".epf";
31+
32+
ПутьФайла = ОбъединитьПути(ИмяКаталога, ИмяФайлаСРасширением);
33+
Ожидаем.Что(Новый Файл(ПутьФайла).Существует(), "Исходный файл должен существовать").ЭтоИстина();
34+
35+
КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог();
36+
37+
Исполнитель = ЗагрузитьСценарий(ОбъединитьПути(ИмяКаталога,"../v8files-extractor.os"));
38+
Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor");
39+
Лог.УстановитьУровень(УровниЛога.Отладка);
40+
41+
Исполнитель.РазобратьФайл(ПутьФайла, КаталогВыгрузки);
42+
43+
МассивФайлов = НайтиФайлы(КаталогВыгрузки, ПолучитьМаскуВсеФайлы());
44+
Ожидаем.Что(МассивФайлов, "В каталоге выгрузки должны быть файлы").Заполнено();
45+
Нашли = Ложь;
46+
для Каждого КаталогИсходников Из МассивФайлов Цикл
47+
Нашли = КаталогИсходников.Имя = ИмяФайла;
48+
Если Нашли Тогда
49+
Прервать;
50+
КонецЕсли;
51+
КонецЦикла;
52+
Ожидаем.Что(Нашли, "Должны были найти имя каталога обработки ").ЭтоИстина();
53+
ВыгруженныеФайлы = НайтиФайлы(КаталогИсходников.ПолноеИмя, ПолучитьМаскуВсеФайлы());
54+
ИменаВыгруженныхФайлов = РазвернутьМассивФайловВИменаФайлов(ВыгруженныеФайлы);
55+
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("renames.txt");
56+
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("Form");
57+
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("Макеты");
58+
Ожидаем.Что(ИменаВыгруженныхФайлов, "Должны были найти выгруженный файл").Содержит("und");
59+
КонецПроцедуры
60+
61+
Функция РазвернутьМассивФайловВИменаФайлов(Знач МассивОбъектовФайл)
62+
63+
ИменаФайлов = Новый Массив;
64+
Для Каждого Файл Из МассивОбъектовФайл Цикл
65+
ИменаФайлов.Добавить(Файл.Имя);
66+
КонецЦикла;
67+
68+
Возврат ИменаФайлов;
69+
70+
КонецФункции
71+
72+
Инициализация();

v8files-extractor.os

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#Использовать cmdline
2+
#Использовать logos
3+
#Использовать tempfiles
4+
#Использовать asserts
5+
#Использовать v8runner
6+
7+
Перем Лог;
8+
9+
Процедура ЗапускВКоманднойСтроке()
10+
11+
Парсер = Новый ПарсерАргументовКоманднойСтроки();
12+
Парсер.ДобавитьПараметр("ВходящиеФайлы");
13+
14+
Аргументы = Парсер.Разобрать(АргументыКоманднойСтроки);
15+
16+
Для Каждого Параметр Из Аргументы Цикл
17+
Лог.Отладка(Параметр);
18+
КонецЦикла;
19+
20+
КонецПроцедуры
21+
22+
Процедура Инициализация()
23+
Лог = Логирование.ПолучитьЛог("oscript.app.v8files-extractor");
24+
Лог.Отладка("Параметры командной строки:");
25+
КонецПроцедуры
26+
27+
Процедура РазобратьФайл(Знач ПутьФайла, Знач КаталогВыгрузки) Экспорт
28+
29+
Файл = Новый Файл(ПутьФайла);
30+
Ожидаем.Что(Файл.Существует(), "Файл " + ПутьФайла + " должен существовать").ЭтоИстина();
31+
32+
ПапкаИсходников = Новый Файл(ОбъединитьПути(КаталогВыгрузки, Файл.ИмяБезРасширения));
33+
Лог.Отладка("Подготовка выгрузки файла "+ПутьФайла+" в каталог " + ПапкаИсходников.ПолноеИмя);
34+
ОбеспечитьПустойКаталог(ПапкаИсходников);
35+
ЗапуститьРаспаковку(Файл, ПапкаИсходников);
36+
37+
КонецПроцедуры
38+
39+
Процедура ЗапуститьРаспаковку(Знач Файл, Знач ПапкаИсходников)
40+
41+
Лог.Отладка("Запускаем распаковку файла");
42+
43+
Конфигуратор = Новый УправлениеКонфигуратором();
44+
ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner");
45+
ЛогКонфигуратора.УстановитьУровень(Лог.Уровень());
46+
47+
Параметры = Конфигуратор.ПолучитьПараметрыЗапуска();
48+
Параметры[0] = "ENTERPRISE";
49+
50+
ПутьV8Reader = ОбъединитьПути(ТекущийСценарий().Каталог, "v8Reader", "V8Reader.epf");
51+
Лог.Отладка("Путь к V8Reader: " + ПутьV8Reader);
52+
Ожидаем.Что(Новый Файл(ПутьV8Reader).Существует()).ЭтоИстина();
53+
54+
КоманднаяСтрокаV8Reader = СтрЗаменить("/C""decompile;pathtocf;%1;pathout;%2;ЗавершитьРаботуПосле;""","%1", Файл.ПолноеИмя);
55+
КоманднаяСтрокаV8Reader = СтрЗаменить(КоманднаяСтрокаV8Reader,"%2", ПапкаИсходников.ПолноеИмя);
56+
57+
Лог.Отладка("Командная строка V8Reader: " + КоманднаяСтрокаV8Reader);
58+
59+
Параметры.Добавить("/RunModeOrdinaryApplication");
60+
Параметры.Добавить("/Execute """ + ПутьV8Reader + """");
61+
Параметры.Добавить(КоманднаяСтрокаV8Reader);
62+
63+
Конфигуратор.ВыполнитьКоманду(Параметры);
64+
Лог.Отладка("Вывод 1С:Предприятия - " + Конфигуратор.ВыводКоманды());
65+
66+
КонецПроцедуры
67+
68+
Процедура ОбеспечитьПустойКаталог(Знач ФайлОбъектКаталога)
69+
70+
Если Не ФайлОбъектКаталога.Существует() Тогда
71+
Лог.Отладка("Создаем новый каталог " + ФайлОбъектКаталога.ПолноеИмя);
72+
СоздатьКаталог(ФайлОбъектКаталога.ПолноеИмя);
73+
ИначеЕсли ФайлОбъектКаталога.ЭтоКаталог() Тогда
74+
Лог.Отладка("Очищаем каталог " + ФайлОбъектКаталога.ПолноеИмя);
75+
УдалитьФайлы(ФайлОбъектКаталога.ПолноеИмя, ПолучитьМаскуВсеФайлы());
76+
Иначе
77+
ВызватьИсключение "Путь " + ФайлОбъектКаталога.ПолноеИмя + " не является каталогом. Выгрузка невозможна";
78+
КонецЕсли;
79+
80+
КонецПроцедуры
81+
82+
Функция ЭтоЗапускТеста()
83+
Возврат ТекущийСценарий().Источник <> СтартовыйСценарий().Источник;
84+
КонецФункции
85+
86+
Инициализация();
87+
88+
Если Не ЭтоЗапускТеста() Тогда
89+
ЗапускВКоманднойСтроке();
90+
КонецЕсли;
91+
92+

0 commit comments

Comments
 (0)