Skip to content

Commit 2db6acc

Browse files
authored
Merge pull request #94 from sfaqer/comparecfg
Сравнение конфигурации \ расширения с файлом + тесты.
2 parents 62d8132 + 9491f02 commit 2db6acc

File tree

5 files changed

+291
-1
lines changed

5 files changed

+291
-1
lines changed

lib.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<module name="ПраваПользователяХранилища" file="src/ПраваПользователяХранилища.os"/>
33
<module name="РежимВыгрузкиКонфигурации" file="src/РежимВыгрузкиКонфигурации.os"/>
44
<module name="ТипыГруппировкиОтчетаПоВерсиямХранилища" file="src/ТипыГруппировкиОтчетаПоВерсиямХранилища.os"/>
5+
<module name="ТипыОтчетовОСравнении" file="src/ТипыОтчетовОСравнении.os"/>
56
<class name="УправлениеКонфигуратором" file="src/v8runner.os"/>
67
<class name="КонфигурацияСтартера" file="src/v8config-file.os"/>
78
</package-def>

readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@
8888
- Процедура ВыгрузитьРасширениеВФайл(Знач ПутьФайлРасширения, Знач ИмяРасширения)
8989
- Процедура ЗагрузитьРасширениеИзФайлов(Знач КаталогЗагрузки, Знач ИмяРасширения = "–AllExtensions", Знач ПутьКСпискуФайловЗагрузки = "", Знач ФорматВыгрузки = "", Знач ОбновитьФайлВерсий = Истина)
9090
- Процедура ВыгрузитьРасширениеВФайлы(Знач КаталогВыгрузки, Знач ИмяРасширения = "–AllExtensions", Знач ФорматВыгрузки = "", Знач ТолькоИзмененные = Ложь, Знач ПутьКФайлуВерсийДляСравнения = "")
91+
- Процедура ПолучитьОтчетОСравненииКонфигурацииСФайлом(Знач ПутьКФайлуКонфигурации, Знач ПутьКОтчету, Знач ТипОтчета = Неопределено, Знач ФорматОтчета = "txt", Знач ИмяРасширения = "")
92+
- Функция КонфигурацияИФайлИдентичны(Знач ПутьКФайлуКонфигурации, Знач ИмяРасширения = "")
9193

9294
### Вспомогательные и настроечные функции
9395

src/v8runner.os

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,152 @@
15451545

15461546
КонецФункции // ИсключениеПриОшибкеВыполненияКоманды() Экспорт
15471547

1548+
// Формирует отчёт о сравнении основной конфигурации\конфигурации расширения в файл.
1549+
//
1550+
// Параметры:
1551+
// ПутьКФайлуКонфигурации - Строка - Путь к файлу cf/cfe с которым необходимо произвести сравнение
1552+
// ПутьКОтчету - Строка - Путь в который необходимо записать отчёт
1553+
// ТипОтчета - ТипыОтчетовОСравнении - Тип отчёта о сравнении полный или краткий
1554+
// ФорматОтчета - Строка - Формат файла отчета. Возмодные значения: txt, mxl
1555+
// ИмяРасширения - Строка - Имя расширения конфигурации
1556+
//
1557+
Процедура ПолучитьОтчетОСравненииКонфигурацииСФайлом(
1558+
Знач ПутьКФайлуКонфигурации,
1559+
Знач ПутьКОтчету,
1560+
Знач ТипОтчета = Неопределено,
1561+
Знач ФорматОтчета = "txt",
1562+
Знач ИмяРасширения = "") Экспорт
1563+
1564+
Если ТипОтчета = Неопределено Тогда
1565+
ТипОтчета = ТипыОтчетовОСравнении.Полный;
1566+
КонецЕсли;
1567+
1568+
ПараметрыЗапуска = СтандартныеПараметрыЗапускаКонфигуратора();
1569+
ПараметрыЗапуска.Добавить("/CompareCfg");
1570+
Если ЗначениеЗаполнено(ИмяРасширения) Тогда
1571+
ПараметрыЗапуска.Добавить("-FirstConfigurationType ExtensionConfiguration");
1572+
Если ИспользуемаяВерсияПлатформыСтаршеИлиРавна("8.3.12") Тогда
1573+
ПараметрыЗапуска.Добавить(СтрШаблон("-FirstName %1", ИмяРасширения));
1574+
Иначе
1575+
ПараметрыЗапуска.Добавить(СтрШаблон("-FirstConfigurationKey %1", ИмяРасширения));
1576+
КонецЕсли;
1577+
Иначе
1578+
ПараметрыЗапуска.Добавить("-FirstConfigurationType MainConfiguration");
1579+
КонецЕсли;
1580+
1581+
ПараметрыЗапуска.Добавить("-SecondConfigurationType File");
1582+
1583+
Если ИспользуемаяВерсияПлатформыСтаршеИлиРавна("8.3.12") Тогда
1584+
ПараметрыЗапуска.Добавить("-SecondFile ");
1585+
Иначе
1586+
ПараметрыЗапуска.Добавить("-SecondConfigurationKey ");
1587+
КонецЕсли;
1588+
1589+
ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКФайлуКонфигурации));
1590+
1591+
ПараметрыЗапуска.Добавить("-ReportType ");
1592+
ПараметрыЗапуска.Добавить(ФорматОтчета);
1593+
1594+
ПараметрыЗапуска.Добавить("-ReportFormat ");
1595+
ПараметрыЗапуска.Добавить(ТипОтчета);
1596+
1597+
ПараметрыЗапуска.Добавить("-ReportFile ");
1598+
ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКОтчету));
1599+
1600+
ВыполнитьКоманду(ПараметрыЗапуска);
1601+
1602+
КонецПроцедуры
1603+
1604+
// Функция проверяет что основная конфигурация\конфигурация расширения идентична с файлом
1605+
//
1606+
// Параметры:
1607+
// ПутьКФайлуКонфигурации - Строка - Путь к файлу cf/cfe с которым необходимо произвести сравнение
1608+
// ИмяРасширения - Строка - Имя расширения конфигурации
1609+
//
1610+
// Возвращаемое значение:
1611+
// Булево - Истина - конфигурации идентичны.
1612+
//
1613+
Функция КонфигурацияИФайлИдентичны(Знач ПутьКФайлуКонфигурации, Знач ИмяРасширения = "") Экспорт
1614+
1615+
ЭталонОтчетаБезИзменений = НСтр(
1616+
"ru = '
1617+
|***- Объект изменен
1618+
|-->- Объект присутствует только в %1 конфигурации
1619+
|<--- Объект присутствует только в файле
1620+
|^- Порядок объекта изменен'
1621+
|;
1622+
|en = '
1623+
|***- Object changed
1624+
|-->- Object available only in the %1
1625+
|<--- Object available only in the file
1626+
|^- Object order changed'",
1627+
мКонтекстКоманды.КодЯзыкаСеанса
1628+
);
1629+
1630+
Если ЗначениеЗаполнено(ИмяРасширения) Тогда
1631+
СтрокаДополнения = НСтр("ru = 'расширении'; en = 'configuration extension'", мКонтекстКоманды.КодЯзыкаСеанса);
1632+
Иначе
1633+
СтрокаДополнения = НСтр("ru = 'основной'; en = 'main configuration'", мКонтекстКоманды.КодЯзыкаСеанса);
1634+
КонецЕсли;
1635+
1636+
ОтчетБезИзменений = СтрШаблон(
1637+
ЭталонОтчетаБезИзменений,
1638+
СтрокаДополнения
1639+
);
1640+
1641+
Лог.Отладка("Сформировал эталон отчета о сравнении: " + ОтчетБезИзменений);
1642+
1643+
ПутьКФайлуОтчета = ПолучитьИмяВременногоФайла(".txt");
1644+
1645+
Лог.Отладка("Формирую отчет о сравнении конфигураций");
1646+
1647+
ПолучитьОтчетОСравненииКонфигурацииСФайлом(
1648+
ПутьКФайлуКонфигурации,
1649+
ПутьКФайлуОтчета,
1650+
ТипыОтчетовОСравнении.Краткий,
1651+
"txt",
1652+
ИмяРасширения
1653+
);
1654+
1655+
ФайлОтчета = Новый Файл(ПутьКФайлуОтчета);
1656+
1657+
Если ФайлОтчета.Существует() Тогда
1658+
1659+
Лог.Отладка("Нашёл файл отчета о сранении. Читаю файл.");
1660+
1661+
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуОтчета);
1662+
СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку();
1663+
Отчет = "";
1664+
1665+
Пока СтрокаТекста <> Неопределено Цикл
1666+
1667+
Если Не ПустаяСтрока(СтрокаТекста) Тогда
1668+
Отчет = Отчет + Символы.ПС + СокрЛП(СтрокаТекста);
1669+
КонецЕсли;
1670+
1671+
СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку();
1672+
КонецЦикла;
1673+
1674+
ЧтениеТекста.Закрыть();
1675+
1676+
Лог.Отладка("Прочитал файл отчета о сравнении: " + Отчет);
1677+
1678+
Попытка
1679+
Лог.Отладка("Удаляю файл отчёта 1С");
1680+
УдалитьФайлы(ФайлОтчета.ПолноеИмя);
1681+
Исключение
1682+
Лог.Предупреждение("Не удалось удалить файл отчёта: " + ОписаниеОшибки());
1683+
КонецПопытки;
1684+
1685+
Возврат Отчет = ОтчетБезИзменений;
1686+
1687+
Иначе
1688+
Лог.Ошибка("Не сформирован файл сравнения конфигураций");
1689+
КонецЕсли;
1690+
1691+
Возврат Ложь;
1692+
1693+
КонецФункции
15481694

15491695
//////////////////////////////////////////////////////////////////////////////////
15501696
// Служебные процедуры
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Перем Краткий Экспорт;
2+
Перем Полный Экспорт;
3+
4+
///////////////////////////////////////////////////////////////
5+
6+
Краткий = "Brief";
7+
Полный = "Full";

tests/v8runner-test.os

Lines changed: 135 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@
2828
СписокТестов.Добавить("ТестДолжен_ПроверитьСозданиеФайловПоставки");
2929
СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетПоВерсиямХранилища");
3030
СписокТестов.Добавить("ТестДолжен_СкопироватьПользователейИзХранилища");
31-
СписокТестов.Добавить("ТестДолжен_ОставитьФайлИнформации");
31+
СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииОсновнойКонфигурацииСФайлом");
32+
СписокТестов.Добавить("ТестДолжен_ПроверитьОсновнаяКонфигурацияИдентичнаФайлу");
33+
СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииКонфигурацииРасширенияСФайлом");
34+
СписокТестов.Добавить("ТестДолжен_ПроверитьКонфигурацияРасширенияИдентичнаФайлу");
35+
СписокТестов.Добавить("ТестДолжен_ОставитьФайлИнформации");
3236

3337
Возврат СписокТестов;
3438

@@ -381,6 +385,136 @@
381385

382386
КонецПроцедуры
383387

388+
Процедура ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииОсновнойКонфигурацииСФайлом() Экспорт
389+
390+
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
391+
392+
УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог);
393+
ПутьКФайлуОтчета = ПолучитьИмяВременногоФайла("txt");
394+
395+
ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf");
396+
397+
УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации);
398+
399+
УправлениеКонфигуратором.ПолучитьОтчетОСравненииКонфигурацииСФайлом(
400+
ФайлКонфигурации,
401+
ПутьКФайлуОтчета
402+
);
403+
404+
ФайлОтчетаСуществует = ФС.ФайлСуществует(ПутьКФайлуОтчета);
405+
406+
ВременныеФайлы.УдалитьФайл( ПутьКФайлуОтчета );
407+
ВременныеФайлы.УдалитьФайл( ВременныйКаталог );
408+
УправлениеКонфигуратором.УдалитьВременнуюБазу();
409+
410+
Утверждения.ПроверитьИстину(
411+
Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()),
412+
"Внутренний файл информации не должен существовать"
413+
);
414+
415+
Утверждения.ПроверитьИстину(
416+
ФайлОтчетаСуществует,
417+
"Отчет о сравнении конфигурации с файлом должен существовать"
418+
);
419+
420+
КонецПроцедуры
421+
422+
Процедура ТестДолжен_ПроверитьОсновнаяКонфигурацияИдентичнаФайлу() Экспорт
423+
424+
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
425+
426+
УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог);
427+
428+
ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf");
429+
430+
УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации);
431+
432+
КонфигурацииИдентичны = УправлениеКонфигуратором.КонфигурацияИФайлИдентичны(
433+
ФайлКонфигурации
434+
);
435+
436+
УправлениеКонфигуратором.УдалитьВременнуюБазу();
437+
УдалитьФайлы(ВременныйКаталог);
438+
439+
Утверждения.ПроверитьИстину(КонфигурацииИдентичны, "Конфигурации отличаются");
440+
Утверждения.ПроверитьИстину(
441+
Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()),
442+
"Внутренний файл информации не должен существовать"
443+
);
444+
445+
КонецПроцедуры
446+
447+
Процедура ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииКонфигурацииРасширенияСФайлом() Экспорт
448+
449+
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
450+
451+
УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог);
452+
ПутьКФайлуОтчета = ПолучитьИмяВременногоФайла("txt");
453+
454+
ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf");
455+
ФайлРасширения = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cfe");
456+
457+
ИмяРасширения = "Test_Extension";
458+
459+
УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации);
460+
УправлениеКонфигуратором.ЗагрузитьРасширениеИзФайла(ФайлРасширения, ИмяРасширения);
461+
462+
УправлениеКонфигуратором.ПолучитьОтчетОСравненииКонфигурацииСФайлом(
463+
ФайлРасширения,
464+
ПутьКФайлуОтчета,
465+
,
466+
,
467+
ИмяРасширения
468+
);
469+
470+
ФайлОтчетаСуществует = ФС.ФайлСуществует(ПутьКФайлуОтчета);
471+
472+
ВременныеФайлы.УдалитьФайл( ПутьКФайлуОтчета );
473+
ВременныеФайлы.УдалитьФайл( ВременныйКаталог );
474+
УправлениеКонфигуратором.УдалитьВременнуюБазу();
475+
476+
Утверждения.ПроверитьИстину(
477+
Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()),
478+
"Внутренний файл информации не должен существовать"
479+
);
480+
481+
Утверждения.ПроверитьИстину(
482+
ФайлОтчетаСуществует,
483+
"Отчет о сравнении конфигурации с файлом должен существовать"
484+
);
485+
486+
КонецПроцедуры
487+
488+
Процедура ТестДолжен_ПроверитьКонфигурацияРасширенияИдентичнаФайлу() Экспорт
489+
490+
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
491+
492+
УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог);
493+
494+
ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf");
495+
ФайлРасширения = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cfe");
496+
497+
ИмяРасширения = "Test_Extension";
498+
499+
УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации);
500+
УправлениеКонфигуратором.ЗагрузитьРасширениеИзФайла(ФайлРасширения, ИмяРасширения);
501+
502+
КонфигурацииИдентичны = УправлениеКонфигуратором.КонфигурацияИФайлИдентичны(
503+
ФайлРасширения,
504+
ИмяРасширения
505+
);
506+
507+
УправлениеКонфигуратором.УдалитьВременнуюБазу();
508+
ВременныеФайлы.УдалитьФайл(ВременныйКаталог);
509+
510+
Утверждения.ПроверитьИстину(КонфигурацииИдентичны, "Конфигурации отличаются");
511+
Утверждения.ПроверитьИстину(
512+
Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()),
513+
"Внутренний файл информации не должен существовать"
514+
);
515+
516+
КонецПроцедуры
517+
384518
Функция ХранилищеКонфигурацииСуществует(Знач ПапкаХранилища)
385519
Возврат ФС.ФайлСуществует( ОбъединитьПути(ПапкаХранилища, "1cv8ddb.1CD"));
386520
КонецФункции

0 commit comments

Comments
 (0)