mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-07 19:30:17 +02:00
ORAIS-676 / Отчет о тестировании в режиме предприятия
This commit is contained in:
parent
34ba9fb9e8
commit
f09633b5a1
@ -1,3 +1,3 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Runtime-Version: 8.3.10
|
Runtime-Version: 8.3.10
|
||||||
Base-Project: BSP
|
Base-Project: configuration
|
||||||
|
@ -66,7 +66,9 @@
|
|||||||
|
|
||||||
ЮТОтчет.СформироватьОтчет(РезультатыТестирования, Параметры);
|
ЮТОтчет.СформироватьОтчет(РезультатыТестирования, Параметры);
|
||||||
|
|
||||||
Если Параметры.CloseAfterTests Тогда
|
Если Параметры.showReport Тогда
|
||||||
|
ПоказатьОтчет(РезультатыТестирования, Параметры);
|
||||||
|
ИначеЕсли Параметры.CloseAfterTests Тогда
|
||||||
ПрекратитьРаботуСистемы(Ложь);
|
ПрекратитьРаботуСистемы(Ложь);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
@ -120,7 +122,7 @@
|
|||||||
ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль);
|
ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль);
|
||||||
|
|
||||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль);
|
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат Наборы;
|
Возврат Наборы;
|
||||||
@ -324,4 +326,15 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
#Если Клиент Тогда
|
||||||
|
Процедура ПоказатьОтчет(РезультатыТестирования, Параметры)
|
||||||
|
|
||||||
|
Данные = Новый Структура("РезультатыТестирования, ПараметрыЗапуска", РезультатыТестирования, Параметры);
|
||||||
|
АдресДанных = ПоместитьВоВременноеХранилище(Данные);
|
||||||
|
|
||||||
|
ОткрытьФорму("Обработка.ЮнитТесты.Форма.Основная", Новый Структура("АдресХранилища", АдресДанных));
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
#КонецЕсли
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
@ -105,6 +105,49 @@
|
|||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область Числа
|
||||||
|
|
||||||
|
// Инкрементирует значение
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Значение - Число
|
||||||
|
// Шаг - Число
|
||||||
|
Процедура Инкремент(Значение, Знач Шаг = 1) Экспорт
|
||||||
|
|
||||||
|
Значение = Значение + Шаг;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ЧислоВСтроку(Значение) Экспорт
|
||||||
|
|
||||||
|
Возврат Формат(Значение, "ЧН = 0; ЧГ=");
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ДатаВремя
|
||||||
|
|
||||||
|
// Человекочитаемое представление продолжительности
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Продолжительность - Число - Продолжительность в миллисекундах
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Представление продолжительности
|
||||||
|
Функция ПредставлениеПродолжительности(Знач Продолжительность) Экспорт
|
||||||
|
|
||||||
|
Представление = ЧислоВСтроку(Цел(Продолжительность / 1000));
|
||||||
|
Представление = ДобавитьСтроку(Представление, Продолжительность % 1000, ".");
|
||||||
|
|
||||||
|
Инкремент(Представление, " сек");
|
||||||
|
|
||||||
|
Возврат Представление;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
#Область Коллекции
|
#Область Коллекции
|
||||||
|
|
||||||
// ЗначениеСтруктуры
|
// ЗначениеСтруктуры
|
||||||
@ -776,6 +819,22 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция МестноеВремяПоВременнойМетке(Метка) Экспорт
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Метка) Тогда
|
||||||
|
Возврат МестноеВремя('00010101' + Метка / 1000);
|
||||||
|
Иначе
|
||||||
|
Возврат Неопределено;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПродолжительностьВСекундах(Продолжительность) Экспорт
|
||||||
|
|
||||||
|
Возврат Продолжительность / 1000;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -100,7 +100,7 @@
|
|||||||
ЗаписьXML.ЗаписатьНачалоЭлемента("testcase");
|
ЗаписьXML.ЗаписатьНачалоЭлемента("testcase");
|
||||||
ЗаписьXML.ЗаписатьАтрибут("name", РезультатТеста.Имя);
|
ЗаписьXML.ЗаписатьАтрибут("name", РезультатТеста.Имя);
|
||||||
ЗаписьXML.ЗаписатьАтрибут("classname", РезультатТеста.ПолноеИмяМетода);
|
ЗаписьXML.ЗаписатьАтрибут("classname", РезультатТеста.ПолноеИмяМетода);
|
||||||
ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ПродолжительностьВСекундах(РезультатТеста.Длительность)));
|
ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ЮТОбщий.ПродолжительностьВСекундах(РезультатТеста.Длительность)));
|
||||||
ЗаписьXML.ЗаписатьАтрибут("context", РезультатТеста.Режим);
|
ЗаписьXML.ЗаписатьАтрибут("context", РезультатТеста.Режим);
|
||||||
|
|
||||||
Для Каждого ОписаниеОшибки Из РезультатТеста.Ошибки Цикл
|
Для Каждого ОписаниеОшибки Из РезультатТеста.Ошибки Цикл
|
||||||
@ -221,8 +221,8 @@
|
|||||||
ЗаписьXML.ЗаписатьАтрибут("errors", XMLСтрока(КоличествоСломанных));
|
ЗаписьXML.ЗаписатьАтрибут("errors", XMLСтрока(КоличествоСломанных));
|
||||||
ЗаписьXML.ЗаписатьАтрибут("skipped", XMLСтрока(КоличествоПропущенных));
|
ЗаписьXML.ЗаписатьАтрибут("skipped", XMLСтрока(КоличествоПропущенных));
|
||||||
ЗаписьXML.ЗаписатьАтрибут("failures", XMLСтрока(КоличествоУпавших));
|
ЗаписьXML.ЗаписатьАтрибут("failures", XMLСтрока(КоличествоУпавших));
|
||||||
ЗаписьXML.ЗаписатьАтрибут("timestamp", XMLСтрока(МестноеВремяПоВременнойМетке(Набор.ДатаСтарта)));
|
ЗаписьXML.ЗаписатьАтрибут("timestamp", XMLСтрока(ЮТОбщий.МестноеВремяПоВременнойМетке(Набор.ДатаСтарта)));
|
||||||
ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ПродолжительностьВСекундах(Набор.Длительность)));
|
ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(ЮТОбщий.ПродолжительностьВСекундах(Набор.Длительность)));
|
||||||
ЗаписьXML.ЗаписатьАтрибут("package", Набор.МетаданныеМодуля.Расширение);
|
ЗаписьXML.ЗаписатьАтрибут("package", Набор.МетаданныеМодуля.Расширение);
|
||||||
ЗаписьXML.ЗаписатьАтрибут("context", Набор.Режим);
|
ЗаписьXML.ЗаписатьАтрибут("context", Набор.Режим);
|
||||||
|
|
||||||
@ -325,22 +325,6 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция МестноеВремяПоВременнойМетке(Метка)
|
|
||||||
|
|
||||||
Если ЗначениеЗаполнено(Метка) Тогда
|
|
||||||
Возврат МестноеВремя('00010101' + Метка / 1000);
|
|
||||||
Иначе
|
|
||||||
Возврат Неопределено;
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
Функция ПродолжительностьВСекундах(Продолжительность)
|
|
||||||
|
|
||||||
Возврат Продолжительность / 1000;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
Процедура ЗаписатьСвойства(ЗаписьXML, Свойства)
|
Процедура ЗаписатьСвойства(ЗаписьXML, Свойства)
|
||||||
|
|
||||||
ЗаписьXML.ЗаписатьНачалоЭлемента("properties");
|
ЗаписьXML.ЗаписатьНачалоЭлемента("properties");
|
||||||
|
@ -46,6 +46,12 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КлючЗапуска() Экспорт
|
||||||
|
|
||||||
|
Возврат "RunUnitTests";
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -116,7 +122,7 @@
|
|||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
ЗначениеКлючаЗапуска = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска, "RunUnitTests", Ложь);
|
ЗначениеКлючаЗапуска = ЮТОбщий.ЗначениеСтруктуры(ПараметрыЗапуска, КлючЗапуска(), Ложь);
|
||||||
|
|
||||||
Если ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Булево") Тогда
|
Если ТипЗнч(ЗначениеКлючаЗапуска) = Тип("Булево") Тогда
|
||||||
|
|
||||||
@ -147,7 +153,7 @@
|
|||||||
#Если НЕ ВебКлиент Тогда
|
#Если НЕ ВебКлиент Тогда
|
||||||
|
|
||||||
Если ЮТОбщий.УстановленБезопасныйРежим() Тогда
|
Если ЮТОбщий.УстановленБезопасныйРежим() Тогда
|
||||||
ВызватьИсключение "Раширение подключено в безопасном режиме. Чтение конфигурационного файла недоступно";
|
ВызватьИсключение "Расширение подключено в безопасном режиме. Чтение конфигурационного файла недоступно";
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Файл = Новый Файл(ПутьКФайлу);
|
Файл = Новый Файл(ПутьКФайлу);
|
||||||
|
@ -94,7 +94,7 @@
|
|||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
// Вызввает ошибку выполнения теста, на основании перехваченной ошибки
|
// Вызывает ошибку выполнения теста, на основании перехваченной ошибки
|
||||||
//
|
//
|
||||||
// Параметры:
|
// Параметры:
|
||||||
// ИнформацияОбОшибке - ИнформацияОбОшибке
|
// ИнформацияОбОшибке - ИнформацияОбОшибке
|
||||||
@ -107,7 +107,7 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
// Вызввает ошибку сравнения значений
|
// Вызывает ошибку сравнения значений
|
||||||
// При этом сохраняет в контекст состояние, для дальнейшей обработки
|
// При этом сохраняет в контекст состояние, для дальнейшей обработки
|
||||||
//
|
//
|
||||||
// Параметры:
|
// Параметры:
|
||||||
@ -123,7 +123,7 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
// Вызввает ошибку проверки утверждений
|
// Вызывает ошибку проверки утверждений
|
||||||
// При этом сохраняет в контекст состояние, для дальнейшей обработки
|
// При этом сохраняет в контекст состояние, для дальнейшей обработки
|
||||||
//
|
//
|
||||||
// Параметры:
|
// Параметры:
|
||||||
@ -165,7 +165,7 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
#Область СлужебныйПрограммныйИнтерфейс
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
|
|
||||||
// Вызввает ошибку выполнения теста
|
// Вызывает ошибку выполнения теста
|
||||||
// Служебный метод, предварительно нужно самостоятельно настроить контекст (см. ЮТКонтекст.КонтекстОшибки)
|
// Служебный метод, предварительно нужно самостоятельно настроить контекст (см. ЮТКонтекст.КонтекстОшибки)
|
||||||
// Параметры:
|
// Параметры:
|
||||||
// ТекстСообщения - Строка
|
// ТекстСообщения - Строка
|
||||||
@ -247,7 +247,7 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция СтатусВыполненияТеста(Тест) Экспорт
|
Функция СтатусВыполненияТеста(Тест) Экспорт
|
||||||
|
|
||||||
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
||||||
|
|
||||||
|
@ -313,15 +313,7 @@
|
|||||||
Функция ОписаниеИсполняемогоТеста(Тест, Режим, ТестовыйМодуль) Экспорт
|
Функция ОписаниеИсполняемогоТеста(Тест, Режим, ТестовыйМодуль) Экспорт
|
||||||
|
|
||||||
ПолноеИмяМетода = СтрШаблон("%1.%2", ТестовыйМодуль.МетаданныеМодуля.Имя, Тест.Имя);
|
ПолноеИмяМетода = СтрШаблон("%1.%2", ТестовыйМодуль.МетаданныеМодуля.Имя, Тест.Имя);
|
||||||
|
Представление = ПредставлениеТеста(Тест);
|
||||||
Если ЗначениеЗаполнено(Тест.Представление) Тогда
|
|
||||||
Представление = Тест.Представление;
|
|
||||||
ИначеЕсли ЗначениеЗаполнено(Тест.Параметры) Тогда
|
|
||||||
ПредставлениеПараметров = СтрСоединить(Тест.Параметры, ", ");
|
|
||||||
Представление = СтрШаблон("%1(%2)", Тест.Имя, ПредставлениеПараметров);
|
|
||||||
Иначе
|
|
||||||
Представление = Тест.Имя;
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
ОписаниеТеста = Новый Структура;
|
ОписаниеТеста = Новый Структура;
|
||||||
ОписаниеТеста.Вставить("Имя", Представление);
|
ОписаниеТеста.Вставить("Имя", Представление);
|
||||||
@ -364,13 +356,14 @@
|
|||||||
Параметры.Вставить("filter", ПараметрыФильтрации());
|
Параметры.Вставить("filter", ПараметрыФильтрации());
|
||||||
Параметры.Вставить("settings", НастройкиВыполнения());
|
Параметры.Вставить("settings", НастройкиВыполнения());
|
||||||
Параметры.Вставить("reportFormat", "jUnit");
|
Параметры.Вставить("reportFormat", "jUnit");
|
||||||
|
Параметры.Вставить("showReport", Ложь);
|
||||||
|
|
||||||
Возврат Параметры;
|
Возврат Параметры;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
// ОписаниеКонтекстаОшибки
|
// ОписаниеКонтекстаОшибки
|
||||||
// Возвращает описание детелей/расшифровки ошибки
|
// Возвращает описание деталей/расшифровки ошибки
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Структура - Детали ошибки:
|
// Структура - Детали ошибки:
|
||||||
// * ОшибкаУтверждения - Булево - Признак, это ошибка проверки утверждения
|
// * ОшибкаУтверждения - Булево - Признак, это ошибка проверки утверждения
|
||||||
@ -580,6 +573,28 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
// Формирует представление теста
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Тест - см. ОписаниеТеста
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Представление теста
|
||||||
|
Функция ПредставлениеТеста(Тест) Экспорт
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Тест.Представление) Тогда
|
||||||
|
Представление = Тест.Представление;
|
||||||
|
ИначеЕсли ЗначениеЗаполнено(Тест.Параметры) Тогда
|
||||||
|
ПредставлениеПараметров = СтрСоединить(Тест.Параметры, ", ");
|
||||||
|
Представление = СтрШаблон("%1(%2)", Тест.Имя, ПредставлениеПараметров);
|
||||||
|
Иначе
|
||||||
|
Представление = Тест.Имя;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Представление;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
12
exts/yaxunit/src/CommonPictures/ЮТНеизвестный/Picture.svg
Normal file
12
exts/yaxunit/src/CommonPictures/ЮТНеизвестный/Picture.svg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||||
|
<rect x="4" y="4" rx="10" ry="10" width="42" height="42" style="fill:none;stroke:#9400d3;stroke-width:4"/>
|
||||||
|
<g transform="scale(0.8) translate(6, 4)">
|
||||||
|
<line style="fill:none;stroke:#9400d3;stroke-width:8;stroke-linecap:round;stroke-miterlimit:10;" x1="25" y1="41" x2="25" y2="43"/>
|
||||||
|
<path style="fill:none;stroke:#9400d3;stroke-width:8;stroke-linecap:round;stroke-miterlimit:10;" d="M18,16
|
||||||
|
c0-3.899,3.188-7.054,7.1-6.999c3.717,0.052,6.848,3.182,6.9,6.9c0.035,2.511-1.252,4.723-3.21,5.986
|
||||||
|
C26.355,23.457,25,26.261,25,29.158V32"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 924 B |
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2fa60d62-90ab-4c69-92b0-a2424b08692e">
|
||||||
|
<name>ЮТНеизвестный</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Неизвестный</value>
|
||||||
|
</synonym>
|
||||||
|
</mdclass:CommonPicture>
|
8
exts/yaxunit/src/CommonPictures/ЮТОшибка/Picture.svg
Normal file
8
exts/yaxunit/src/CommonPictures/ЮТОшибка/Picture.svg
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||||
|
<rect x="4" y="4" rx="10" ry="10" width="42" height="42" style="fill:none;stroke:#D75A4A;stroke-width:4"/>
|
||||||
|
<polyline style="fill:none;stroke:#D75A4A;stroke-width:8;stroke-linecap:round;stroke-miterlimit:10;" points="14,36 25,25 36,14 "/>
|
||||||
|
<polyline style="fill:none;stroke:#D75A4A;stroke-width:8;stroke-linecap:round;stroke-miterlimit:10;" points="14,14 25,25 36,36 "/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 755 B |
8
exts/yaxunit/src/CommonPictures/ЮТОшибка/ЮТОшибка.mdo
Normal file
8
exts/yaxunit/src/CommonPictures/ЮТОшибка/ЮТОшибка.mdo
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="64f99c40-dd74-493b-99f2-4cde101037ab">
|
||||||
|
<name>ЮТОшибка</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Ошибка</value>
|
||||||
|
</synonym>
|
||||||
|
</mdclass:CommonPicture>
|
15
exts/yaxunit/src/CommonPictures/ЮТПропущен/Picture.svg
Normal file
15
exts/yaxunit/src/CommonPictures/ЮТПропущен/Picture.svg
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 54 54;" xml:space="preserve">
|
||||||
|
<rect x="4" y="4" rx="10" ry="10" width="42" height="42" style="fill:none;stroke:#999999;stroke-width:4"/>
|
||||||
|
<g transform="translate(-2,-2)">
|
||||||
|
<path style="fill:none;stroke:#999999;stroke-width:4;stroke-linecap:round;stroke-miterlimit:10;" d="M27.707,14.293c-0.391-0.391-1.023-0.391-1.414,0s-0.391,1.023,0,1.414L37.586,27L26.293,38.293
|
||||||
|
c-0.391,0.391-0.391,1.023,0,1.414C26.488,39.902,26.744,40,27,40s0.512-0.098,0.707-0.293l11.498-11.498
|
||||||
|
c0.667-0.667,0.667-1.751,0-2.418L27.707,14.293z"/>
|
||||||
|
<path style="fill:none;stroke:#999999;stroke-width:4;stroke-linecap:round;stroke-miterlimit:10;" d="M29.205,25.791L17.707,14.293c-0.391-0.391-1.023-0.391-1.414,0s-0.391,1.023,0,1.414L27.586,27L16.293,38.293
|
||||||
|
c-0.391,0.391-0.391,1.023,0,1.414C16.488,39.902,16.744,40,17,40s0.512-0.098,0.707-0.293l11.498-11.498
|
||||||
|
C29.872,27.542,29.872,26.458,29.205,25.791z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="52d4711c-930f-453c-a761-c1a0a1428860">
|
||||||
|
<name>ЮТПропущен</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Пропущен</value>
|
||||||
|
</synonym>
|
||||||
|
</mdclass:CommonPicture>
|
8
exts/yaxunit/src/CommonPictures/ЮТУпал/Picture.svg
Normal file
8
exts/yaxunit/src/CommonPictures/ЮТУпал/Picture.svg
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||||
|
<rect x="4" y="4" rx="10" ry="10" width="42" height="42" style="fill:none;stroke:#EFCE4A;stroke-width:4"/>
|
||||||
|
<line style="fill:none;stroke:#EFCE4A;stroke-width:8;stroke-linecap:round;stroke-miterlimit:10;" x1="25" y1="14" x2="25" y2="28"/>
|
||||||
|
<line style="fill:none;stroke:#EFCE4A;stroke-width:8;stroke-linecap:round;stroke-miterlimit:10;" x1="25" y1="37" x2="25" y2="37"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 754 B |
8
exts/yaxunit/src/CommonPictures/ЮТУпал/ЮТУпал.mdo
Normal file
8
exts/yaxunit/src/CommonPictures/ЮТУпал/ЮТУпал.mdo
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a631ba97-5787-4937-aa95-db6ccde8467f">
|
||||||
|
<name>ЮТУпал</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Упал</value>
|
||||||
|
</synonym>
|
||||||
|
</mdclass:CommonPicture>
|
7
exts/yaxunit/src/CommonPictures/ЮТУспешно/Picture.svg
Normal file
7
exts/yaxunit/src/CommonPictures/ЮТУспешно/Picture.svg
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||||
|
<rect x="4" y="4" rx="10" ry="10" width="42" height="42" style="fill:none;stroke:#25AE88;stroke-width:4"/>
|
||||||
|
<polyline style="fill:none;stroke:#25AE88;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" points="37,15 21,36 12,26 "/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 645 B |
8
exts/yaxunit/src/CommonPictures/ЮТУспешно/ЮТУспешно.mdo
Normal file
8
exts/yaxunit/src/CommonPictures/ЮТУспешно/ЮТУспешно.mdo
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bf60188c-c7ce-48d4-9a1c-a70087ee2821">
|
||||||
|
<name>ЮТУспешно</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Успешно</value>
|
||||||
|
</synonym>
|
||||||
|
</mdclass:CommonPicture>
|
30
exts/yaxunit/src/CommonPictures/ЮТЭлементыТестов/Picture.svg
Normal file
30
exts/yaxunit/src/CommonPictures/ЮТЭлементыТестов/Picture.svg
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80px" height="20px"
|
||||||
|
viewBox="0 0 2000 500" xml:space="preserve">
|
||||||
|
<g transform="translate(-20, -20) scale(15)" style="fill:#ff713b">
|
||||||
|
<path d="M29.81,16H29V8.83a2,2,0,0,0-2-2H21A5.14,5.14,0,0,0,16.51,2,5,5,0,0,0,11,6.83H4a2,2,0,0,0-2,2V17H4.81A3.13,3.13,0,0,1,8,19.69,3,3,0,0,1,7.22,22,3,3,0,0,1,5,23H2v8.83a2,2,0,0,0,2,2H27a2,2,0,0,0,2-2V26h1a5,5,0,0,0,5-5.51A5.15,5.15,0,0,0,29.81,16Zm2.41,7A3,3,0,0,1,30,24H27v7.83H4V25H5a5,5,0,0,0,5-5.51A5.15,5.15,0,0,0,4.81,15H4V8.83h9V7a3,3,0,0,1,1-2.22A3,3,0,0,1,16.31,4,3.13,3.13,0,0,1,19,7.19V8.83h8V18h2.81A3.13,3.13,0,0,1,33,20.69,3,3,0,0,1,32.22,23Z"></path>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(500, 0) scale(34)" style="fill:#3980ed">
|
||||||
|
<path d="M3 2.5C3 2.22386 3.22386 2 3.5 2H9.08579C9.21839 2 9.34557 2.05268 9.43934 2.14645L11.8536 4.56066C11.9473 4.65443 12 4.78161
|
||||||
|
12 4.91421V12.5C12 12.7761 11.7761 13 11.5 13H3.5C3.22386 13 3 12.7761 3 12.5V2.5ZM3.5 1C2.67157 1 2 1.67157 2 2.5V12.5C2 13.3284
|
||||||
|
2.67157 14 3.5 14H11.5C12.3284 14 13 13.3284 13 12.5V4.91421C13 4.51639 12.842 4.13486 12.5607 3.85355L10.1464 1.43934C9.86514 1.15804
|
||||||
|
9.48361 1 9.08579 1H3.5ZM4.5 4C4.22386 4 4 4.22386 4 4.5C4 4.77614 4.22386 5 4.5 5H7.5C7.77614 5 8 4.77614 8 4.5C8 4.22386 7.77614 4
|
||||||
|
7.5 4H4.5ZM4.5 7C4.22386 7 4 7.22386 4 7.5C4 7.77614 4.22386 8 4.5 8H10.5C10.7761 8 11 7.77614 11 7.5C11 7.22386 10.7761 7 10.5 7H4.5ZM4.5
|
||||||
|
10C4.22386 10 4 10.2239 4 10.5C4 10.7761 4.22386 11 4.5 11H10.5C10.7761 11 11 10.7761 11 10.5C11 10.2239 10.7761 10 10.5 10H4.5Z"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(1000, 0)" style="fill:#16a706">
|
||||||
|
<path d="M192.5,0H20.8C9.4,0,0,9.4,0,20.8v171.7c0,11.4,9.4,20.8,20.8,20.8h171.7c11.4,0,20.8-9.4,20.8-20.8V20.8
|
||||||
|
C213.3,9.4,203.9,0,192.5,0z M171.7,172.7H40.6V40.6h131.1L171.7,172.7L171.7,172.7z"/>
|
||||||
|
<path d="M192.5,275.7H20.8C9.4,275.7,0,285.1,0,296.5v171.7C0,479.6,9.4,489,20.8,489h171.7c11.4,0,20.8-9.4,20.8-19.8V296.5
|
||||||
|
C213.3,285.1,203.9,275.7,192.5,275.7z M171.7,448.4H40.6V316.3h131.1L171.7,448.4L171.7,448.4z"/>
|
||||||
|
<path d="M262.2,126.9h206c11.4,0,20.8-9.4,20.8-20.8s-9.4-20.8-20.8-20.8h-206c-11.4,0-20.8,9.4-20.8,20.8
|
||||||
|
C241.4,117.6,250.7,126.9,262.2,126.9z"/>
|
||||||
|
<path d="M468.2,361h-206c-11.4,0-20.8,9.4-20.8,20.8s9.4,20.8,20.8,20.8h206c11.4,0,20.8-9.4,20.8-20.8S479.6,361,468.2,361z"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(1500, 130)" style="fill:#67db5a">
|
||||||
|
<path d="M192.5,0H20.8C9.4,0,0,9.4,0,20.8v171.7c0,11.4,9.4,20.8,20.8,20.8h171.7c11.4,0,20.8-9.4,20.8-20.8V20.8
|
||||||
|
C213.3,9.4,203.9,0,192.5,0z M171.7,172.7H40.6V40.6h131.1L171.7,172.7L171.7,172.7z"/>
|
||||||
|
<path d="M262.2,126.9h206c11.4,0,20.8-9.4,20.8-20.8s-9.4-20.8-20.8-20.8h-206c-11.4,0-20.8,9.4-20.8,20.8
|
||||||
|
C241.4,117.6,250.7,126.9,262.2,126.9z"/>
|
||||||
|
</g></svg>
|
After Width: | Height: | Size: 2.9 KiB |
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="341ee107-1c3b-488b-8890-02d2129fa2a4">
|
||||||
|
<name>ЮТЭлементыТестов</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Элементы тестов</value>
|
||||||
|
</synonym>
|
||||||
|
</mdclass:CommonPicture>
|
@ -31,6 +31,12 @@
|
|||||||
</languages>
|
</languages>
|
||||||
<subsystems>Subsystem.ЮТДвижок</subsystems>
|
<subsystems>Subsystem.ЮТДвижок</subsystems>
|
||||||
<subsystems>Subsystem.ЮТФункциональность</subsystems>
|
<subsystems>Subsystem.ЮТФункциональность</subsystems>
|
||||||
|
<commonPictures>CommonPicture.ЮТНеизвестный</commonPictures>
|
||||||
|
<commonPictures>CommonPicture.ЮТОшибка</commonPictures>
|
||||||
|
<commonPictures>CommonPicture.ЮТПропущен</commonPictures>
|
||||||
|
<commonPictures>CommonPicture.ЮТУпал</commonPictures>
|
||||||
|
<commonPictures>CommonPicture.ЮТУспешно</commonPictures>
|
||||||
|
<commonPictures>CommonPicture.ЮТЭлементыТестов</commonPictures>
|
||||||
<commonModules>CommonModule.Мокито</commonModules>
|
<commonModules>CommonModule.Мокито</commonModules>
|
||||||
<commonModules>CommonModule.МокитоОбучение</commonModules>
|
<commonModules>CommonModule.МокитоОбучение</commonModules>
|
||||||
<commonModules>CommonModule.МокитоПроверки</commonModules>
|
<commonModules>CommonModule.МокитоПроверки</commonModules>
|
||||||
@ -62,4 +68,5 @@
|
|||||||
<commonModules>CommonModule.ЮТФильтрация</commonModules>
|
<commonModules>CommonModule.ЮТФильтрация</commonModules>
|
||||||
<commonModules>CommonModule.ЮТЧитатель</commonModules>
|
<commonModules>CommonModule.ЮТЧитатель</commonModules>
|
||||||
<commonModules>CommonModule.ЮТЧитательСервер</commonModules>
|
<commonModules>CommonModule.ЮТЧитательСервер</commonModules>
|
||||||
|
<dataProcessors>DataProcessor.ЮТЮнитТесты</dataProcessors>
|
||||||
</mdclass:Configuration>
|
</mdclass:Configuration>
|
||||||
|
@ -0,0 +1,160 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ConditionalAppearance xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
|
||||||
|
<item>
|
||||||
|
<selection>
|
||||||
|
<item>
|
||||||
|
<field>ДеревоТестовПрогресс</field>
|
||||||
|
</item>
|
||||||
|
</selection>
|
||||||
|
<filter>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.Набор</left>
|
||||||
|
<comparisonType>Equal</comparisonType>
|
||||||
|
<right xsi:type="xs:boolean">false</right>
|
||||||
|
</item>
|
||||||
|
</filter>
|
||||||
|
<appearance>
|
||||||
|
<dcscor:item xsi:type="SettingsParameterValue">
|
||||||
|
<dcscor:parameter>Видимость</dcscor:parameter>
|
||||||
|
<dcscor:value xsi:type="xs:boolean">false</dcscor:value>
|
||||||
|
</dcscor:item>
|
||||||
|
</appearance>
|
||||||
|
<presentation xsi:type="v8:LocalStringType">
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Скрытие колонок. Тест</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</presentation>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<selection>
|
||||||
|
<item>
|
||||||
|
<field>ДеревоТестовИконка</field>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<field>ДеревоТестовСостояние</field>
|
||||||
|
</item>
|
||||||
|
</selection>
|
||||||
|
<filter>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.Набор</left>
|
||||||
|
<comparisonType>Equal</comparisonType>
|
||||||
|
<right xsi:type="xs:boolean">true</right>
|
||||||
|
</item>
|
||||||
|
</filter>
|
||||||
|
<appearance>
|
||||||
|
<dcscor:item xsi:type="SettingsParameterValue">
|
||||||
|
<dcscor:parameter>Видимость</dcscor:parameter>
|
||||||
|
<dcscor:value xsi:type="xs:boolean">false</dcscor:value>
|
||||||
|
</dcscor:item>
|
||||||
|
</appearance>
|
||||||
|
<presentation xsi:type="v8:LocalStringType">
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Скрытие колонок. Набор</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</presentation>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<selection>
|
||||||
|
<item>
|
||||||
|
<field>ДеревоТестовКонтекст</field>
|
||||||
|
</item>
|
||||||
|
</selection>
|
||||||
|
<filter>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.Контекст</left>
|
||||||
|
<comparisonType>Equal</comparisonType>
|
||||||
|
<right xsi:type="xs:string">Сервер</right>
|
||||||
|
</item>
|
||||||
|
</filter>
|
||||||
|
<appearance>
|
||||||
|
<dcscor:item xsi:type="SettingsParameterValue">
|
||||||
|
<dcscor:parameter>ЦветТекста</dcscor:parameter>
|
||||||
|
<dcscor:value xsi:type="v8ui:Color">#B46C00</dcscor:value>
|
||||||
|
</dcscor:item>
|
||||||
|
</appearance>
|
||||||
|
<presentation xsi:type="v8:LocalStringType">
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Контекст. Сервер</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</presentation>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<selection>
|
||||||
|
<item>
|
||||||
|
<field>ДеревоТестовКонтекст</field>
|
||||||
|
</item>
|
||||||
|
</selection>
|
||||||
|
<filter>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.Контекст</left>
|
||||||
|
<comparisonType>Equal</comparisonType>
|
||||||
|
<right xsi:type="xs:string">Клиент</right>
|
||||||
|
</item>
|
||||||
|
</filter>
|
||||||
|
<appearance>
|
||||||
|
<dcscor:item xsi:type="SettingsParameterValue">
|
||||||
|
<dcscor:parameter>ЦветТекста</dcscor:parameter>
|
||||||
|
<dcscor:value xsi:type="v8ui:Color">#058BC0</dcscor:value>
|
||||||
|
</dcscor:item>
|
||||||
|
</appearance>
|
||||||
|
<presentation xsi:type="v8:LocalStringType">
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Контекст. Клиент</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</presentation>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<selection>
|
||||||
|
<item>
|
||||||
|
<field>ДеревоТестовВремяВыполнения</field>
|
||||||
|
</item>
|
||||||
|
</selection>
|
||||||
|
<filter>
|
||||||
|
<item xsi:type="FilterItemGroup">
|
||||||
|
<groupType>OrGroup</groupType>
|
||||||
|
<item xsi:type="FilterItemGroup">
|
||||||
|
<groupType>AndGroup</groupType>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.Набор</left>
|
||||||
|
<comparisonType>Equal</comparisonType>
|
||||||
|
<right xsi:type="xs:boolean">false</right>
|
||||||
|
</item>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.ВремяВыполнения</left>
|
||||||
|
<comparisonType>Greater</comparisonType>
|
||||||
|
<right xsi:type="xs:decimal">1</right>
|
||||||
|
</item>
|
||||||
|
</item>
|
||||||
|
<item xsi:type="FilterItemGroup">
|
||||||
|
<groupType>AndGroup</groupType>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.Набор</left>
|
||||||
|
<comparisonType>Equal</comparisonType>
|
||||||
|
<right xsi:type="xs:boolean">true</right>
|
||||||
|
</item>
|
||||||
|
<item xsi:type="FilterItemComparison">
|
||||||
|
<left xsi:type="dcscor:Field">ДеревоТестов.ВремяВыполнения</left>
|
||||||
|
<comparisonType>Greater</comparisonType>
|
||||||
|
<right xsi:type="xs:decimal">10</right>
|
||||||
|
</item>
|
||||||
|
</item>
|
||||||
|
</item>
|
||||||
|
</filter>
|
||||||
|
<appearance>
|
||||||
|
<dcscor:item xsi:type="SettingsParameterValue">
|
||||||
|
<dcscor:parameter>ЦветТекста</dcscor:parameter>
|
||||||
|
<dcscor:value xsi:type="v8ui:Color">#D2000F</dcscor:value>
|
||||||
|
</dcscor:item>
|
||||||
|
</appearance>
|
||||||
|
<presentation xsi:type="v8:LocalStringType">
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Время выполнения > 1 сек</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</presentation>
|
||||||
|
</item>
|
||||||
|
</ConditionalAppearance>
|
1423
exts/yaxunit/src/DataProcessors/ЮТЮнитТесты/Forms/Основная/Form.form
Normal file
1423
exts/yaxunit/src/DataProcessors/ЮТЮнитТесты/Forms/Основная/Form.form
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,352 @@
|
|||||||
|
//©///////////////////////////////////////////////////////////////////////////©//
|
||||||
|
//
|
||||||
|
// Copyright 2021-2022 BIA-Technologies Limited Liability Company
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
//©///////////////////////////////////////////////////////////////////////////©//
|
||||||
|
|
||||||
|
#Область ОбработчикиСобытийФормы
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||||
|
|
||||||
|
Если Параметры.Свойство("АдресХранилища") И ЭтоАдресВременногоХранилища(Параметры.АдресХранилища) Тогда
|
||||||
|
|
||||||
|
ОтобразитьРезультатыТестирования(Параметры.АдресХранилища);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоТестов
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ДеревоТестовПриАктивизацииСтроки(Элемент)
|
||||||
|
|
||||||
|
Данные = Элементы.ДеревоТестов.ТекущиеДанные;
|
||||||
|
|
||||||
|
Если Данные = Неопределено Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Данные.Ошибки.Количество() Тогда
|
||||||
|
Элементы.ДеревоТестовОшибки.ТекущаяСтрока = Данные.Ошибки[0].ПолучитьИдентификатор();
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ОбновитьДоступностьСравнения();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоТестовОшибки
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ДеревоТестовОшибкиПриАктивизацииСтроки(Элемент)
|
||||||
|
|
||||||
|
ОбновитьДоступностьСравнения();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОбработчикиКомандФормы
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура Сравнить(Команда)
|
||||||
|
|
||||||
|
Данные = Элементы.ДеревоТестовОшибки.ТекущиеДанные;
|
||||||
|
|
||||||
|
Если Данные = Неопределено Или ПустаяСтрока(Данные.ОжидаемоеЗначение) И ПустаяСтрока(Данные.ФактическоеЗначение) Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПараметрыФормы = Новый Структура("ОжидаемоеЗначение, ФактическоеЗначение", Данные.ОжидаемоеЗначение, Данные.ФактическоеЗначение);
|
||||||
|
ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Сравнение", ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ОтобразитьРезультатыТестирования(АдресХранилища)
|
||||||
|
|
||||||
|
Данные = ПолучитьИзВременногоХранилища(АдресХранилища);
|
||||||
|
УдалитьИзВременногоХранилища(АдресХранилища);
|
||||||
|
|
||||||
|
РезультатТестирования = Данные.РезультатыТестирования;
|
||||||
|
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||||
|
|
||||||
|
ОбщаяСтатистика = Статистика();
|
||||||
|
|
||||||
|
Для Каждого Набор Из РезультатТестирования Цикл
|
||||||
|
|
||||||
|
СтрокаНабора = ДеревоТестов.ПолучитьЭлементы().Добавить();
|
||||||
|
СтрокаНабора.Набор = Истина;
|
||||||
|
СтрокаНабора.Представление = Набор.Представление;
|
||||||
|
СтрокаНабора.Контекст = НормализоватьКонтекст(Набор.Режим);
|
||||||
|
СтрокаНабора.ПредставлениеВремяВыполнения = ЮТОбщий.ПредставлениеПродолжительности(Набор.Длительность);
|
||||||
|
СтрокаНабора.ВремяВыполнения = Набор.Длительность / 1000;
|
||||||
|
СтрокаНабора.ТипОбъекта = 2;
|
||||||
|
|
||||||
|
ЗаполнитьОшибки(СтрокаНабора, Набор);
|
||||||
|
|
||||||
|
СтатистикаНабора = Статистика();
|
||||||
|
|
||||||
|
Для Каждого Тест Из Набор.Тесты Цикл
|
||||||
|
|
||||||
|
СтрокаТеста = СтрокаНабора.ПолучитьЭлементы().Добавить();
|
||||||
|
СтрокаТеста.Представление = Тест.Имя;
|
||||||
|
СтрокаТеста.Контекст = НормализоватьКонтекст(Набор.Режим);
|
||||||
|
СтрокаТеста.ПредставлениеВремяВыполнения = ЮТОбщий.ПредставлениеПродолжительности(Тест.Длительность);
|
||||||
|
СтрокаТеста.ВремяВыполнения = Тест.Длительность / 1000;
|
||||||
|
СтрокаТеста.Состояние = Тест.Статус;
|
||||||
|
СтрокаТеста.ТипОбъекта = 3;
|
||||||
|
|
||||||
|
СтрокаТеста.Иконка = КартинкаСтатуса(Тест.Статус);
|
||||||
|
ЗаполнитьОшибки(СтрокаТеста, Тест);
|
||||||
|
ИнкрементСтатистики(СтатистикаНабора, Тест.Статус, Статусы);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если СтатистикаНабора.Сломано Тогда
|
||||||
|
СтрокаНабора.Состояние = Статусы.Сломан;
|
||||||
|
ИначеЕсли СтатистикаНабора.Упало Тогда
|
||||||
|
СтрокаНабора.Состояние = Статусы.Ошибка;
|
||||||
|
ИначеЕсли СтатистикаНабора.Пропущено Тогда
|
||||||
|
СтрокаНабора.Состояние = Статусы.Пропущен;
|
||||||
|
ИначеЕсли СтатистикаНабора.Неизвестно Тогда
|
||||||
|
СтрокаНабора.Состояние = Статусы.Ошибка;
|
||||||
|
Иначе
|
||||||
|
СтрокаНабора.Состояние = Статусы.Успешно;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтрокаНабора.Прогресс = ГрафическоеПредставлениеСтатистики(СтатистикаНабора);
|
||||||
|
|
||||||
|
СтрокаНабора.Иконка = КартинкаСтатуса(СтрокаНабора.Состояние);
|
||||||
|
|
||||||
|
Для Каждого Элемент Из СтатистикаНабора Цикл
|
||||||
|
ЮТОбщий.Инкремент(ОбщаяСтатистика[Элемент.Ключ], Элемент.Значение);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Элементы.СтатистикаВыполнения.Заголовок = ПредставлениеСтатистики(ОбщаяСтатистика);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Процедура ЗаполнитьОшибки(СтрокаДерева, ОписаниеОбъекта)
|
||||||
|
|
||||||
|
Для Каждого Ошибка Из ОписаниеОбъекта.Ошибки Цикл
|
||||||
|
|
||||||
|
СтрокаОшибки = СтрокаДерева.Ошибки.Добавить();
|
||||||
|
СтрокаОшибки.Сообщение = Ошибка.Сообщение;
|
||||||
|
СтрокаОшибки.Стек = Ошибка.Стек;
|
||||||
|
СтрокаОшибки.ОжидаемоеЗначение = ЮТОбщий.ЗначениеСтруктуры(Ошибка, "ОжидаемоеЗначение");
|
||||||
|
СтрокаОшибки.ФактическоеЗначение = ЮТОбщий.ЗначениеСтруктуры(Ошибка, "ПроверяемоеЗначение");
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Функция Статистика()
|
||||||
|
|
||||||
|
Статистика = Новый Структура();
|
||||||
|
Статистика.Вставить("Всего", 0);
|
||||||
|
Статистика.Вставить("Успешно", 0);
|
||||||
|
Статистика.Вставить("Упало", 0);
|
||||||
|
Статистика.Вставить("Сломано", 0);
|
||||||
|
Статистика.Вставить("Пропущено", 0);
|
||||||
|
Статистика.Вставить("Неизвестно", 0);
|
||||||
|
|
||||||
|
Возврат Статистика;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Функция НормализоватьКонтекст(Контекст)
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(Контекст, "Клиент") Тогда
|
||||||
|
Возврат "Клиент";
|
||||||
|
Иначе
|
||||||
|
Возврат Контекст;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Процедура ИнкрементСтатистики(Статистика, Статус, Знач Статусы = Неопределено)
|
||||||
|
|
||||||
|
Если Статусы = Неопределено Тогда
|
||||||
|
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ЮТОбщий.Инкремент(Статистика.Всего);
|
||||||
|
|
||||||
|
Если Статус = Статусы.Успешно Тогда
|
||||||
|
|
||||||
|
ЮТОбщий.Инкремент(Статистика.Успешно);
|
||||||
|
|
||||||
|
ИначеЕсли Статус = Статусы.Сломан ИЛИ Статус = Статусы.НеРеализован Тогда
|
||||||
|
|
||||||
|
ЮТОбщий.Инкремент(Статистика.Сломано);
|
||||||
|
|
||||||
|
ИначеЕсли Статус = Статусы.Ошибка Тогда
|
||||||
|
|
||||||
|
ЮТОбщий.Инкремент(Статистика.Упало);
|
||||||
|
|
||||||
|
ИначеЕсли Статус = Статусы.Пропущен Тогда
|
||||||
|
|
||||||
|
ЮТОбщий.Инкремент(Статистика.Пропущено);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
ЮТОбщий.Инкремент(Статистика.Неизвестно);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#Область Интерфейсное
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Функция КартинкаСтатуса(Статус)
|
||||||
|
|
||||||
|
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||||
|
|
||||||
|
Если Статус = Статусы.Успешно Тогда
|
||||||
|
|
||||||
|
Возврат БиблиотекаКартинок.ЮТУспешно;
|
||||||
|
|
||||||
|
ИначеЕсли Статус = Статусы.Сломан ИЛИ Статус = Статусы.НеРеализован Тогда
|
||||||
|
|
||||||
|
Возврат БиблиотекаКартинок.ЮТОшибка;
|
||||||
|
|
||||||
|
ИначеЕсли Статус = Статусы.Ошибка Тогда
|
||||||
|
|
||||||
|
Возврат БиблиотекаКартинок.ЮТУпал;
|
||||||
|
|
||||||
|
ИначеЕсли Статус = Статусы.Пропущен Тогда
|
||||||
|
|
||||||
|
Возврат БиблиотекаКартинок.ЮТПропущен;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Возврат БиблиотекаКартинок.ЮТНеизвестный;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Функция ПредставлениеСтатистики(Статистика)
|
||||||
|
|
||||||
|
БлокиСтатистики = Новый Массив();
|
||||||
|
Разделитель = "; ";
|
||||||
|
|
||||||
|
БлокиСтатистики.Добавить(СтрШаблон("Тестов: %1/%2", Статистика.Всего, Статистика.Всего - Статистика.Пропущено));
|
||||||
|
|
||||||
|
Если Статистика.Пропущено Тогда
|
||||||
|
БлокиСтатистики.Добавить(Разделитель);
|
||||||
|
БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТПропущен);
|
||||||
|
БлокиСтатистики.Добавить(" Пропущено: " + Статистика.Пропущено);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
БлокиСтатистики.Добавить(Разделитель);
|
||||||
|
БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТУспешно);
|
||||||
|
БлокиСтатистики.Добавить(" Успешно: " + Статистика.Успешно);
|
||||||
|
|
||||||
|
БлокиСтатистики.Добавить(Разделитель);
|
||||||
|
БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТОшибка);
|
||||||
|
БлокиСтатистики.Добавить(" Сломано: " + Статистика.Сломано);
|
||||||
|
|
||||||
|
БлокиСтатистики.Добавить(Разделитель);
|
||||||
|
БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТУпал);
|
||||||
|
БлокиСтатистики.Добавить(" Упало: " + Статистика.Упало);
|
||||||
|
|
||||||
|
Если Статистика.Неизвестно Тогда
|
||||||
|
БлокиСтатистики.Добавить(Разделитель);
|
||||||
|
БлокиСтатистики.Добавить(БиблиотекаКартинок.ЮТНеизвестный);
|
||||||
|
БлокиСтатистики.Добавить(" Неизвестно: " + Статистика.Неизвестно);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Новый ФорматированнаяСтрока(БлокиСтатистики);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Функция ГрафическоеПредставлениеСтатистики(Статистика)
|
||||||
|
|
||||||
|
Текст = БлокиСтатистики(Статистика);
|
||||||
|
|
||||||
|
Возврат Новый Картинка(ПолучитьДвоичныеДанныеИзСтроки(Текст));
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Функция БлокиСтатистики(Статистика)
|
||||||
|
|
||||||
|
Блоки = Новый Массив();
|
||||||
|
Блоки.Добавить(Новый Структура("Количество, Цвет", Статистика.Успешно, "25AE88"));
|
||||||
|
Блоки.Добавить(Новый Структура("Количество, Цвет", Статистика.Пропущено, "999999"));
|
||||||
|
Блоки.Добавить(Новый Структура("Количество, Цвет", Статистика.Упало, "EFCE4A"));
|
||||||
|
Блоки.Добавить(Новый Структура("Количество, Цвет", Статистика.Сломано, "D75A4A"));
|
||||||
|
Блоки.Добавить(Новый Структура("Количество, Цвет", Статистика.Неизвестно, "9400d3"));
|
||||||
|
|
||||||
|
Сдвиг = 0;
|
||||||
|
Высота = 20;
|
||||||
|
|
||||||
|
Текст = "";
|
||||||
|
|
||||||
|
Для Инд = 0 По Блоки.ВГраница() Цикл
|
||||||
|
|
||||||
|
Если Блоки[Инд].Количество = 0 Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Текст = Текст + СтрШаблон(" <rect x=""%1"" y=""2"" width=""%2"" height=""%3"" rx=""4"" ry=""4"" style=""fill:none;stroke:#%4;stroke-width:2""/>
|
||||||
|
| <text x=""%5"" y=""%6"" dominant-baseline=""middle"" text-anchor=""middle"" style=""fill:#%4;"">%7</text>
|
||||||
|
|", Сдвиг + 2, Высота * 2 - 4, Высота - 4, Блоки[Инд].Цвет, Сдвиг + Высота, Высота - 4, Блоки[Инд].Количество);
|
||||||
|
ЮТОбщий.Инкремент(Сдвиг, Высота * 2 + 2);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат СтрШаблон("<svg version=""1.1"" xmlns=""http://www.w3.org/2000/svg"" xmlns:xlink=""http://www.w3.org/1999/xlink"" x=""0px"" y=""0px"" width=""%1px"" height=""%2px""
|
||||||
|
| viewBox=""0 0 %1 %2"">
|
||||||
|
| %3
|
||||||
|
|</svg>", Сдвиг, Высота + 2, Текст);
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ОбновитьДоступностьСравнения()
|
||||||
|
|
||||||
|
Данные = Элементы.ДеревоТестовОшибки.ТекущиеДанные;
|
||||||
|
Элементы.Сравнить.Доступность = Данные <> Неопределено И (НЕ ПустаяСтрока(Данные.ОжидаемоеЗначение) Или НЕ ПустаяСтрока(Данные.ФактическоеЗначение));
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,101 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
|
||||||
|
<items xsi:type="form:FormField">
|
||||||
|
<name>Скрипт</name>
|
||||||
|
<id>4</id>
|
||||||
|
<visible>true</visible>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<userVisible>
|
||||||
|
<common>true</common>
|
||||||
|
</userVisible>
|
||||||
|
<dataPath xsi:type="form:DataPath">
|
||||||
|
<segments>Скрипт</segments>
|
||||||
|
</dataPath>
|
||||||
|
<defaultItem>true</defaultItem>
|
||||||
|
<titleLocation>None</titleLocation>
|
||||||
|
<extendedTooltip>
|
||||||
|
<name>СкриптРасширеннаяПодсказка</name>
|
||||||
|
<id>3</id>
|
||||||
|
<visible>true</visible>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<userVisible>
|
||||||
|
<common>true</common>
|
||||||
|
</userVisible>
|
||||||
|
<type>Label</type>
|
||||||
|
<autoMaxWidth>true</autoMaxWidth>
|
||||||
|
<autoMaxHeight>true</autoMaxHeight>
|
||||||
|
<extInfo xsi:type="form:LabelDecorationExtInfo">
|
||||||
|
<horizontalAlign>Left</horizontalAlign>
|
||||||
|
</extInfo>
|
||||||
|
</extendedTooltip>
|
||||||
|
<contextMenu>
|
||||||
|
<name>СкриптКонтекстноеМеню</name>
|
||||||
|
<id>2</id>
|
||||||
|
<visible>true</visible>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<userVisible>
|
||||||
|
<common>true</common>
|
||||||
|
</userVisible>
|
||||||
|
<autoFill>true</autoFill>
|
||||||
|
</contextMenu>
|
||||||
|
<type>HTMLDocumentField</type>
|
||||||
|
<editMode>Enter</editMode>
|
||||||
|
<showInHeader>true</showInHeader>
|
||||||
|
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||||
|
<showInFooter>true</showInFooter>
|
||||||
|
<extInfo xsi:type="form:HtmlFieldExtInfo">
|
||||||
|
<width>50</width>
|
||||||
|
<height>10</height>
|
||||||
|
<horizontalStretch>true</horizontalStretch>
|
||||||
|
<verticalStretch>true</verticalStretch>
|
||||||
|
<borderColor xsi:type="core:ColorRef">
|
||||||
|
<color>Style.FormBackColor</color>
|
||||||
|
</borderColor>
|
||||||
|
</extInfo>
|
||||||
|
</items>
|
||||||
|
<commandBarLocation>None</commandBarLocation>
|
||||||
|
<autoCommandBar>
|
||||||
|
<name>ФормаКоманднаяПанель</name>
|
||||||
|
<id>-1</id>
|
||||||
|
<visible>true</visible>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<userVisible>
|
||||||
|
<common>true</common>
|
||||||
|
</userVisible>
|
||||||
|
<horizontalAlign>Left</horizontalAlign>
|
||||||
|
<autoFill>true</autoFill>
|
||||||
|
</autoCommandBar>
|
||||||
|
<handlers>
|
||||||
|
<event>OnCreateAtServer</event>
|
||||||
|
<name>ПриСозданииНаСервере</name>
|
||||||
|
</handlers>
|
||||||
|
<autoTitle>true</autoTitle>
|
||||||
|
<autoUrl>true</autoUrl>
|
||||||
|
<group>Vertical</group>
|
||||||
|
<autoFillCheck>true</autoFillCheck>
|
||||||
|
<allowFormCustomize>true</allowFormCustomize>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
<showCloseButton>true</showCloseButton>
|
||||||
|
<attributes>
|
||||||
|
<name>Скрипт</name>
|
||||||
|
<title>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Скрипт</value>
|
||||||
|
</title>
|
||||||
|
<id>1</id>
|
||||||
|
<valueType>
|
||||||
|
<types>String</types>
|
||||||
|
<stringQualifiers/>
|
||||||
|
</valueType>
|
||||||
|
<view>
|
||||||
|
<common>true</common>
|
||||||
|
</view>
|
||||||
|
<edit>
|
||||||
|
<common>true</common>
|
||||||
|
</edit>
|
||||||
|
</attributes>
|
||||||
|
<commandInterface>
|
||||||
|
<navigationPanel/>
|
||||||
|
<commandBar/>
|
||||||
|
</commandInterface>
|
||||||
|
</form:Form>
|
@ -0,0 +1,34 @@
|
|||||||
|
//©///////////////////////////////////////////////////////////////////////////©//
|
||||||
|
//
|
||||||
|
// Copyright 2021-2022 BIA-Technologies Limited Liability Company
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
//©///////////////////////////////////////////////////////////////////////////©//
|
||||||
|
|
||||||
|
#Область ОбработчикиСобытийФормы
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||||
|
|
||||||
|
ТекстСтраницы = Обработки.ЮТЮнитТесты.ПолучитьМакет("СравнениеOld").ПолучитьТекст();
|
||||||
|
|
||||||
|
ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "ИсходныйТекст", Параметры.ОжидаемоеЗначение);
|
||||||
|
ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "СравниваемыйТекст", Параметры.ФактическоеЗначение);
|
||||||
|
|
||||||
|
АдресСтраницы = ПоместитьВоВременноеХранилище(ПолучитьДвоичныеДанныеИзСтроки(ТекстСтраницы), УникальныйИдентификатор);
|
||||||
|
Скрипт = СтрШаблон("%1/%2", ПолучитьНавигационнуюСсылкуИнформационнойБазы(), АдресСтраницы);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,61 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="GENERATOR" content="MSHTML 11.00.9600.19003">
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<!-- jsdiff -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsdiff/5.1.0/diff.min.js" integrity="sha512-vco9RAxEuv4PQ+iTQyuKElwoUOcsVdp+WgU6Lgo82ASpDfF7vI66LlWz+CZc2lMdn52tjjLOuHvy8BQJFp8a1A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
|
<!-- diff2html -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/diff2html/bundles/css/diff2html.min.css" />
|
||||||
|
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/diff2html/bundles/js/diff2html-ui.min.js"></script>
|
||||||
|
<style>
|
||||||
|
//.d2h-file-collapse, .d2h-info, .hidden, .d2h-tag { display: none !important; }
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
padding-top: 1em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function renderDiff() {
|
||||||
|
var renderTo = document.getElementById("container");
|
||||||
|
var expected = document.getElementById("expected").value;
|
||||||
|
var actual = document.getElementById("actual").value;
|
||||||
|
var diff = Diff.createTwoFilesPatch("expected", "actual", expected, actual);
|
||||||
|
var render =new Diff2HtmlUI(renderTo, diff,
|
||||||
|
{
|
||||||
|
inputFormat: 'diff',
|
||||||
|
synchronisedScroll: true,
|
||||||
|
matching: 'words',
|
||||||
|
diffStyle: 'char',
|
||||||
|
outputFormat: 'side-by-side',
|
||||||
|
renderNothingWhenEmpty: false,
|
||||||
|
drawFileList: false,
|
||||||
|
showFiles: false,
|
||||||
|
highlight: false,
|
||||||
|
stickyFileHeaders: false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
render.draw();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="renderDiff();">
|
||||||
|
<div class="hidden">
|
||||||
|
<textarea id="expected">ИсходныйТекст</textarea>
|
||||||
|
</div>
|
||||||
|
<div class="hidden">
|
||||||
|
<textarea id="actual">СравниваемыйТекст</textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="container"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,936 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Diff test</title>
|
||||||
|
<script>
|
||||||
|
var SourceDiff = SourceDiff || {};
|
||||||
|
|
||||||
|
SourceDiff.Diff = function(ignoreLeadingWS) {
|
||||||
|
var trimTrailingWhiteSpace = function(str) {
|
||||||
|
if (str) {
|
||||||
|
return str.trim();
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
var checkTrimLeadingWhiteSpace = function(str) {
|
||||||
|
if (str && ignoreLeadingWS) {
|
||||||
|
return str.trim();
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
var trimWhiteSpace = function(str) {
|
||||||
|
if (!str) return str;
|
||||||
|
|
||||||
|
if (ignoreLeadingWS) {
|
||||||
|
return str.trim();
|
||||||
|
} else {
|
||||||
|
return str.trim();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var lineDiff = function(originalLine, editedLine) {
|
||||||
|
var originalTrimmed = checkTrimLeadingWhiteSpace(originalLine);
|
||||||
|
var editedTrimmed = checkTrimLeadingWhiteSpace(editedLine);
|
||||||
|
|
||||||
|
var originalOffset = originalLine.length - originalTrimmed.length;
|
||||||
|
var editOffset = editedLine.length - editedTrimmed.length;
|
||||||
|
|
||||||
|
originalTrimmed = trimTrailingWhiteSpace(originalTrimmed);
|
||||||
|
editedTrimmed = trimTrailingWhiteSpace(editedTrimmed);
|
||||||
|
|
||||||
|
var matrix = createMatrix(0, originalTrimmed, editedTrimmed);
|
||||||
|
|
||||||
|
fillMatrix(0, originalTrimmed, editedTrimmed, matrix);
|
||||||
|
|
||||||
|
return createLineDiff(originalTrimmed, editedTrimmed, originalOffset, editOffset, matrix);
|
||||||
|
};
|
||||||
|
|
||||||
|
var createLineDiff = function(originalTrimmed, editedTrimmed, originalOffset, editOffset, matrix) {
|
||||||
|
var diff = new SourceDiff.LineDiff();
|
||||||
|
|
||||||
|
var i = originalTrimmed.length;
|
||||||
|
var j = editedTrimmed.length;
|
||||||
|
|
||||||
|
while (i >= 0 && j >= 0) {
|
||||||
|
if (originalTrimmed[i - 1] === editedTrimmed[j - 1]) {
|
||||||
|
if (originalTrimmed[i - 1]) {
|
||||||
|
diff.addCommon(originalOffset + i - 1, editOffset + j - 1);
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
j--;
|
||||||
|
} else if (j >= 0 && (i === 0 || matrix[i][j - 1] >= matrix[i - 1][j])) {
|
||||||
|
if (editedTrimmed[j - 1].length > 0) {
|
||||||
|
diff.addInsert(editOffset + j - 1);
|
||||||
|
}
|
||||||
|
j--;
|
||||||
|
} else if (i >= 0 && (j === 0 || matrix[i][j - 1] < matrix[i - 1][j])) {
|
||||||
|
if (originalTrimmed[i - 1].length > 0) {
|
||||||
|
diff.addDelete(originalOffset + i - 1);
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return diff;
|
||||||
|
};
|
||||||
|
|
||||||
|
var diff = function(originalText, editedText) {
|
||||||
|
var originalLines = SourceDiff.split(originalText);
|
||||||
|
var editedLines = SourceDiff.split(editedText);
|
||||||
|
|
||||||
|
SourceDiff.padBlankLines(originalLines);
|
||||||
|
SourceDiff.padBlankLines(editedLines);
|
||||||
|
|
||||||
|
var startPos = trimCommonLines(originalLines, editedLines);
|
||||||
|
|
||||||
|
var matrix = createMatrix(startPos, originalLines, editedLines);
|
||||||
|
|
||||||
|
fillMatrix(startPos, originalLines, editedLines, matrix);
|
||||||
|
|
||||||
|
var results = findAddsAndDeletes(originalLines, editedLines, startPos, matrix);
|
||||||
|
|
||||||
|
checkShiftEdits(SourceDiff.split(originalText), results.deleted);
|
||||||
|
checkShiftEdits(SourceDiff.split(editedText), results.added);
|
||||||
|
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
var findAddsAndDeletes = function(originalLines, editedLines, startPos, matrix) {
|
||||||
|
var i = originalLines.length;
|
||||||
|
var j = editedLines.length;
|
||||||
|
|
||||||
|
var added = new SourceDiff.EditSet();
|
||||||
|
var deleted = new SourceDiff.EditSet();
|
||||||
|
|
||||||
|
var allAddsOrDeletes = checkAllAddsOrDeletes(originalLines, editedLines, added) ||
|
||||||
|
checkAllAddsOrDeletes(editedLines, originalLines, deleted);
|
||||||
|
|
||||||
|
if (!allAddsOrDeletes) {
|
||||||
|
while (i >= startPos && j >= startPos) {
|
||||||
|
var m = i - startPos;
|
||||||
|
var n = j - startPos;
|
||||||
|
if (m > 0 && n > 0 && linesAreEqual(originalLines[i - 1], editedLines[j - 1])) {
|
||||||
|
i--;
|
||||||
|
j--;
|
||||||
|
} else if (j >= startPos && (i === startPos || matrix[m][n - 1] >= matrix[m - 1][n])) {
|
||||||
|
if (j - 1 >= startPos && editedLines[j - 1].length > 0) {
|
||||||
|
added.add(j - 1);
|
||||||
|
}
|
||||||
|
j--;
|
||||||
|
} else if (i >= startPos && (j === startPos || matrix[m][n - 1] < matrix[m - 1][n])) {
|
||||||
|
if (i - 1 >= startPos && originalLines[i - 1].length > 0) {
|
||||||
|
deleted.add(i - 1);
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
added: added,
|
||||||
|
deleted: deleted
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var checkAllAddsOrDeletes = function(lines, otherLines, editSet) {
|
||||||
|
if (lines.length === 1 && lines[0] === '') {
|
||||||
|
for (var i = 0; i < otherLines.length; i++) {
|
||||||
|
editSet.add(i);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
var linesAreEqual = function(line1, line2) {
|
||||||
|
return trimWhiteSpace(line1) === trimWhiteSpace(line2);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Find all continuous runs of inserts or deletes. For each run, see if it can be shifted forward 1 line.
|
||||||
|
//This is useful for properly pairing opening and closing braces in C-like languages, for example.
|
||||||
|
var checkShiftEdits = function(textLines, editSet) {
|
||||||
|
var editArray = editSet.all();
|
||||||
|
if (editArray.length > 0) {
|
||||||
|
var startRun = editArray[0];
|
||||||
|
|
||||||
|
var current = startRun;
|
||||||
|
for (var i = 1; i < editArray.length; i++) {
|
||||||
|
if (i === editArray.length - 1) { //end of the run and the edits
|
||||||
|
if (editArray[i] === current + 1) {
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
checkShiftRun(textLines, editSet, startRun, current);
|
||||||
|
} else if (editArray[i] === current + 1) {
|
||||||
|
current++;
|
||||||
|
} else { //end of the run
|
||||||
|
checkShiftRun(textLines, editSet, startRun, current);
|
||||||
|
|
||||||
|
startRun = current = editArray[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var checkShiftRun = function(textLines, editSet, startRun, endRun) {
|
||||||
|
if (linesAreEqual(textLines[startRun], textLines[endRun + 1]) && lineIsBlank(textLines[startRun + 1])) {
|
||||||
|
editSet.remove(startRun);
|
||||||
|
editSet.add(endRun + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var lineIsBlank = function(line) {
|
||||||
|
return /^\s*$/.test(line);
|
||||||
|
};
|
||||||
|
|
||||||
|
var createMatrix = function(startPos, originalLines, editedLines) {
|
||||||
|
var matrix = [];
|
||||||
|
for (var i = 0; i <= originalLines.length - startPos; i++) {
|
||||||
|
matrix[i] = new Array(editedLines.length - startPos + 1);
|
||||||
|
matrix[i][0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var j = 1; j <= editedLines.length - startPos; j++) {
|
||||||
|
matrix[0][j] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return matrix;
|
||||||
|
};
|
||||||
|
|
||||||
|
var fillMatrix = function(startPos, originalLines, editedLines, matrix) {
|
||||||
|
for (var i = 1; i <= originalLines.length - startPos; i++) {
|
||||||
|
var originalTrimmed = trimWhiteSpace(originalLines[i + startPos - 1]);
|
||||||
|
for (var j = 1; j <= editedLines.length - startPos; j++) {
|
||||||
|
var trimmedEdit = trimWhiteSpace(editedLines[j + startPos - 1]);
|
||||||
|
if (originalTrimmed === trimmedEdit) {
|
||||||
|
matrix[i][j] = matrix[i - 1][j - 1] + 1;
|
||||||
|
} else {
|
||||||
|
matrix[i][j] = Math.max(matrix[i][j - 1], matrix[i - 1][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var trimCommonLines = function(originalLines, editedLines) {
|
||||||
|
var linesRemaining = function(startPos) {
|
||||||
|
return originalLines.length > startPos && editedLines.length > startPos
|
||||||
|
};
|
||||||
|
|
||||||
|
var startPos = 0;
|
||||||
|
|
||||||
|
while (linesRemaining(startPos) && linesAreEqual(originalLines[startPos], editedLines[startPos])) {
|
||||||
|
startPos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (linesRemaining(startPos) && linesAreEqual(originalLines[originalLines.length - 1], editedLines[editedLines.length - 1])) {
|
||||||
|
originalLines.pop();
|
||||||
|
editedLines.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return startPos;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
diff: diff,
|
||||||
|
trimCommonLines: trimCommonLines, //exposed for testing
|
||||||
|
lineDiff: lineDiff
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.padBlankLines = function(lines) {
|
||||||
|
if (lines.length === 1 && lines[0] === '') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var l = 0; l < lines.length; l++) {
|
||||||
|
if (lines[l] === '') {
|
||||||
|
lines[l] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.split = function(string) {
|
||||||
|
return string.split(/\r?\n/);
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.LineFormatter = function(results, lineDiffs) {
|
||||||
|
var anchors = new SourceDiff.EditSet();
|
||||||
|
|
||||||
|
var added = results.added.all();
|
||||||
|
var deleted = results.deleted.all();
|
||||||
|
|
||||||
|
var lineIsCommon = function(i) {
|
||||||
|
return !results.added.contains(i) && !results.deleted.contains(i)
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!lineIsCommon(0)) {
|
||||||
|
anchors.add(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < Math.max(Math.max.apply(null, added), Math.max.apply(null, deleted)); i++) {
|
||||||
|
if (lineIsCommon(i) && !lineIsCommon(i + 1)) {
|
||||||
|
anchors.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var formatLeftText = function(text1Lines) {
|
||||||
|
var deletedText = '';
|
||||||
|
|
||||||
|
var startingPos = getStartingPos(results);
|
||||||
|
var text1EndingPos = getEndingPos(results, text1Lines);
|
||||||
|
|
||||||
|
for (var i = startingPos; i < text1EndingPos; i++) {
|
||||||
|
if (anchors.contains(i)) {
|
||||||
|
deletedText += '<a name="' + i + '"></a>';
|
||||||
|
}
|
||||||
|
if (lineDiffs.contains(i) && results.modifiedLeft.contains(i)) {
|
||||||
|
var lineDiff = lineDiffs.get(i);
|
||||||
|
deletedText += appendModifiedLine(text1Lines[i], lineDiff.deleted);
|
||||||
|
} else {
|
||||||
|
var className = getClassNameLeft(results, i);
|
||||||
|
deletedText += appendLine(className, text1Lines[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return deletedText;
|
||||||
|
};
|
||||||
|
|
||||||
|
var formatRightText = function(text2Lines) {
|
||||||
|
var addedText = '';
|
||||||
|
|
||||||
|
var startingPos = getStartingPos(results);
|
||||||
|
var text2EndingPos = getEndingPos(results, text2Lines);
|
||||||
|
|
||||||
|
for (var i = startingPos; i < text2EndingPos; i++) {
|
||||||
|
if (lineDiffs.contains(i) && results.modifiedRight.contains(i)) {
|
||||||
|
var lineDiff = lineDiffs.get(i);
|
||||||
|
addedText += appendModifiedLine(text2Lines[i], lineDiff.added);
|
||||||
|
} else {
|
||||||
|
var className = getClassNameRight(results, i);
|
||||||
|
addedText += appendLine(className, text2Lines[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return addedText;
|
||||||
|
};
|
||||||
|
|
||||||
|
var appendModifiedLine = function(textLine, lineEdits) {
|
||||||
|
var formattedText = '<span class="modified">';
|
||||||
|
var startIndex = 0;
|
||||||
|
for (var j = 0; j < lineEdits.length; j++) {
|
||||||
|
formattedText += escapeHtml(textLine.substring(startIndex, lineEdits[j].position));
|
||||||
|
startIndex = lineEdits[j].endPosition + 1;
|
||||||
|
formattedText += '<span class="modified-light">' + escapeHtml(textLine.substring(lineEdits[j].position, startIndex)) +
|
||||||
|
'</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (startIndex < textLine.length) {
|
||||||
|
formattedText += escapeHtml(textLine.substring(startIndex, textLine.length));
|
||||||
|
}
|
||||||
|
|
||||||
|
formattedText += '</span><br>';
|
||||||
|
|
||||||
|
return formattedText;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getStartingPos = function(results) {
|
||||||
|
var allDeletes = results.deleted.all();
|
||||||
|
|
||||||
|
var firstDelete = allDeletes.length > 0 ?
|
||||||
|
allDeletes[0] :
|
||||||
|
-1;
|
||||||
|
|
||||||
|
var allAdds = results.added.all();
|
||||||
|
|
||||||
|
var firstAdd = allAdds.length > 0 ?
|
||||||
|
allAdds[0] :
|
||||||
|
-1;
|
||||||
|
|
||||||
|
var firstEdit;
|
||||||
|
if (firstDelete === -1) {
|
||||||
|
firstEdit = firstAdd;
|
||||||
|
} else if (firstAdd === -1) {
|
||||||
|
firstEdit = firstDelete;
|
||||||
|
} else {
|
||||||
|
firstEdit = Math.min(firstDelete, firstAdd)
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.max(0, firstEdit - 10);
|
||||||
|
};
|
||||||
|
|
||||||
|
var getEndingPos = function(results, lines) {
|
||||||
|
var allDeletes = results.deleted.all();
|
||||||
|
|
||||||
|
var lastDelete = allDeletes.length > 0 ?
|
||||||
|
allDeletes[allDeletes.length - 1] :
|
||||||
|
0;
|
||||||
|
|
||||||
|
var allAdds = results.added.all();
|
||||||
|
|
||||||
|
var lastAdd = allAdds.length > 0 ?
|
||||||
|
allAdds[allAdds.length - 1] :
|
||||||
|
0;
|
||||||
|
|
||||||
|
var lastEdit = Math.max(lastDelete, lastAdd);
|
||||||
|
|
||||||
|
return Math.min(lines.length, lastEdit + 11);
|
||||||
|
};
|
||||||
|
|
||||||
|
var getClassNameLeft = function(results, i) {
|
||||||
|
var className = '';
|
||||||
|
if (results.modifiedLeft.contains(i)) {
|
||||||
|
className = 'modified';
|
||||||
|
} else if (results.paddingLeft.contains(i)) {
|
||||||
|
className = 'padding';
|
||||||
|
} else if (results.deleted.contains(i)) {
|
||||||
|
className = 'deleted';
|
||||||
|
}
|
||||||
|
return className;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getClassNameRight = function(results, i) {
|
||||||
|
var className = '';
|
||||||
|
if (results.modifiedRight.contains(i)) {
|
||||||
|
className = 'modified';
|
||||||
|
} else if (results.paddingRight.contains(i)) {
|
||||||
|
className = 'padding';
|
||||||
|
} else if (results.added.contains(i)) {
|
||||||
|
className = 'inserted';
|
||||||
|
}
|
||||||
|
return className;
|
||||||
|
};
|
||||||
|
|
||||||
|
var appendLine = function(className, line) {
|
||||||
|
var append = '';
|
||||||
|
|
||||||
|
if (className != '') {
|
||||||
|
append += '<span class="' + className + '">';
|
||||||
|
}
|
||||||
|
append += escapeHtml(line);
|
||||||
|
if (className != '') {
|
||||||
|
append += '</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
append += '<br>';
|
||||||
|
|
||||||
|
return append;
|
||||||
|
};
|
||||||
|
|
||||||
|
var escapeHtml = function(string) {
|
||||||
|
var entityMap = {
|
||||||
|
'&': '&',
|
||||||
|
'<': '<',
|
||||||
|
'>': '>',
|
||||||
|
'"': '"',
|
||||||
|
"'": ''',
|
||||||
|
'/': '/'
|
||||||
|
};
|
||||||
|
|
||||||
|
var replacedTabs = string.replace(/\t/g, ' ');
|
||||||
|
|
||||||
|
return String(replacedTabs).replace(/[&<>"'\/]/g, function(s) {
|
||||||
|
return entityMap[s];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getEditIterator = function() {
|
||||||
|
return new SourceDiff.AnchorIterator(anchors);
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
formatLeftText: formatLeftText,
|
||||||
|
formatRightText: formatRightText,
|
||||||
|
getEditIterator: getEditIterator
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.LineDiff = function() {
|
||||||
|
var _added = [];
|
||||||
|
var _deleted = [];
|
||||||
|
var _common = [];
|
||||||
|
|
||||||
|
var addCommon = function(leftPosition, rightPosition) {
|
||||||
|
_common.unshift({
|
||||||
|
leftPosition: leftPosition,
|
||||||
|
leftEndPosition: leftPosition,
|
||||||
|
rightPosition: rightPosition,
|
||||||
|
rightEndPosition: rightPosition
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var addDelete = function(position) {
|
||||||
|
_deleted.unshift({
|
||||||
|
position: position,
|
||||||
|
endPosition: position
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var addInsert = function(position) {
|
||||||
|
_added.unshift({
|
||||||
|
position: position,
|
||||||
|
endPosition: position
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var editLength = function(edit) {
|
||||||
|
if (!edit) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return edit.endPosition - edit.position + 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
var cleanUp = function() {
|
||||||
|
mergeAdjacent(_added);
|
||||||
|
mergeAdjacent(_deleted);
|
||||||
|
mergeAdjacentCommon();
|
||||||
|
|
||||||
|
do {
|
||||||
|
var didMerge = false;
|
||||||
|
for (var i = 0; i < _common.length; i++) {
|
||||||
|
var equalityLength = _common[i].leftEndPosition - _common[i].leftPosition + 1;
|
||||||
|
|
||||||
|
var leftDelete = findEditWithEndingPosition(_deleted, _common[i].leftPosition - 1);
|
||||||
|
var rightDelete = findEditWithPosition(_deleted, _common[i].leftEndPosition + 1);
|
||||||
|
|
||||||
|
var leftAdd = findEditWithEndingPosition(_added, _common[i].rightPosition - 1);
|
||||||
|
var rightAdd = findEditWithPosition(_added, _common[i].rightEndPosition + 1);
|
||||||
|
if (equalityLength <= 8 && editLength(leftDelete) + editLength(leftAdd) >= equalityLength &&
|
||||||
|
editLength(rightDelete) + editLength(rightAdd) >= equalityLength) {
|
||||||
|
didMerge = true;
|
||||||
|
if (leftDelete && rightDelete) {
|
||||||
|
leftDelete.endPosition = rightDelete.endPosition;
|
||||||
|
removeEdit(_deleted, rightDelete);
|
||||||
|
} else if (leftDelete) {
|
||||||
|
leftDelete.endPosition = _common[i].leftEndPosition;
|
||||||
|
} else if (rightDelete) {
|
||||||
|
rightDelete.position = _common[i].leftPosition;
|
||||||
|
} else {
|
||||||
|
addEdit(_deleted, _common[i].leftPosition, _common[i].leftEndPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (leftAdd && rightAdd) {
|
||||||
|
leftAdd.endPosition = rightAdd.endPosition;
|
||||||
|
removeEdit(_added, rightAdd);
|
||||||
|
} else if (leftAdd) {
|
||||||
|
leftAdd.endPosition = _common[i].rightEndPosition;
|
||||||
|
} else if (rightAdd) {
|
||||||
|
rightAdd.position = _common[i].rightPosition;
|
||||||
|
} else {
|
||||||
|
addEdit(_added, _common[i].rightPosition, _common[i].rightEndPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
_common.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (didMerge)
|
||||||
|
};
|
||||||
|
|
||||||
|
var mergeAdjacentCommon = function() {
|
||||||
|
for (var i = 0; i < _common.length; i++) {
|
||||||
|
if (i + 1 < _common.length &&
|
||||||
|
_common[i].leftEndPosition + 1 === _common[i + 1].leftPosition &&
|
||||||
|
_common[i].rightEndPosition + 1 === _common[i + 1].rightPosition) {
|
||||||
|
_common[i].leftEndPosition = _common[i + 1].leftEndPosition;
|
||||||
|
_common[i].rightEndPosition = _common[i + 1].rightEndPosition;
|
||||||
|
_common.splice(i + 1, 1);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var addEdit = function(edits, position, endPosition) {
|
||||||
|
var newEdit = {
|
||||||
|
position: position,
|
||||||
|
endPosition: endPosition
|
||||||
|
};
|
||||||
|
|
||||||
|
if (edits.length === 0) {
|
||||||
|
edits.push(newEdit);
|
||||||
|
} else if (position < edits[0].position) {
|
||||||
|
edits.unshift(newEdit);
|
||||||
|
} else {
|
||||||
|
for (var i = edits.length - 1; i >= 0; i--) {
|
||||||
|
if (position > edits[i].position) {
|
||||||
|
edits.splice(i + 1, 0, newEdit);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var removeEdit = function(edits, item) {
|
||||||
|
for (var i = 0; i < edits.length; i++) {
|
||||||
|
if (edits[i] === item) {
|
||||||
|
edits.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var findEditWithPosition = function(edits, pos) {
|
||||||
|
for (var i = 0; i < edits.length; i++) {
|
||||||
|
if (edits[i].position === pos) {
|
||||||
|
return edits[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var findEditWithEndingPosition = function(edits, endPos) {
|
||||||
|
for (var i = 0; i < edits.length; i++) {
|
||||||
|
if (edits[i].endPosition === endPos) {
|
||||||
|
return edits[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var mergeAdjacent = function(edits) {
|
||||||
|
for (var i = 0; i < edits.length; i++) {
|
||||||
|
if (i + 1 < edits.length && edits[i].endPosition + 1 === edits[i + 1].position) {
|
||||||
|
edits[i].endPosition = edits[i + 1].endPosition;
|
||||||
|
edits.splice(i + 1, 1);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
addDelete: addDelete,
|
||||||
|
addInsert: addInsert,
|
||||||
|
addCommon: addCommon,
|
||||||
|
cleanUp: cleanUp,
|
||||||
|
added: _added,
|
||||||
|
deleted: _deleted,
|
||||||
|
common: _common
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.EditSet = function() {
|
||||||
|
var _set = {};
|
||||||
|
|
||||||
|
var add = function(line) {
|
||||||
|
_set[line] = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
var addValue = function(line, value) {
|
||||||
|
_set[line] = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
var remove = function(line) {
|
||||||
|
_set[line] = undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
var count = function() {
|
||||||
|
return all().length;
|
||||||
|
};
|
||||||
|
|
||||||
|
var get = function(line) {
|
||||||
|
return _set[line];
|
||||||
|
}
|
||||||
|
|
||||||
|
var sortIntegers = function(a, b) {
|
||||||
|
return a - b;
|
||||||
|
};
|
||||||
|
|
||||||
|
var all = function() {
|
||||||
|
var arr = [];
|
||||||
|
|
||||||
|
for (var prop in _set) {
|
||||||
|
if (_set[prop]) {
|
||||||
|
arr.push(parseInt(prop));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr.sort(sortIntegers);
|
||||||
|
};
|
||||||
|
|
||||||
|
var contains = function(lineNumber) {
|
||||||
|
return _set[lineNumber] !== undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateNumbers = function(lineNumber) {
|
||||||
|
var newSet = {};
|
||||||
|
|
||||||
|
for (var prop in _set) {
|
||||||
|
var value = _set[prop];
|
||||||
|
if (value) {
|
||||||
|
var parsed = parseInt(prop);
|
||||||
|
if (parsed >= lineNumber) {
|
||||||
|
newSet[parsed + 1] = value;
|
||||||
|
} else {
|
||||||
|
newSet[parsed] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_set = newSet;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
add: add,
|
||||||
|
addValue: addValue,
|
||||||
|
get: get,
|
||||||
|
remove: remove,
|
||||||
|
count: count,
|
||||||
|
all: all,
|
||||||
|
updateNumbers: updateNumbers,
|
||||||
|
contains: contains
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.DiffFormatter = function(diff) {
|
||||||
|
var formattedDiff = function(originalText, editedText) {
|
||||||
|
var results = diff.diff(originalText, editedText);
|
||||||
|
|
||||||
|
var lines = lineUpText(originalText, editedText, results);
|
||||||
|
|
||||||
|
var originalLines = lines[0];
|
||||||
|
var editedLines = lines[1];
|
||||||
|
|
||||||
|
findModifiedLines(originalLines, editedLines, results);
|
||||||
|
|
||||||
|
var lineDiffs = diffModifiedLines(originalLines, editedLines, results);
|
||||||
|
|
||||||
|
var lineFormatter = SourceDiff.LineFormatter(results, lineDiffs);
|
||||||
|
|
||||||
|
var deletedText = lineFormatter.formatLeftText(originalLines);
|
||||||
|
var addedText = lineFormatter.formatRightText(editedLines);
|
||||||
|
|
||||||
|
return [deletedText, addedText, lineFormatter.getEditIterator()];
|
||||||
|
};
|
||||||
|
|
||||||
|
var lineUpText = function(originalText, editedText, results) {
|
||||||
|
var originalLines = SourceDiff.split(originalText);
|
||||||
|
var editedLines = SourceDiff.split(editedText);
|
||||||
|
|
||||||
|
SourceDiff.padBlankLines(originalLines);
|
||||||
|
SourceDiff.padBlankLines(editedLines);
|
||||||
|
|
||||||
|
results.paddingLeft = new SourceDiff.EditSet();
|
||||||
|
results.paddingRight = new SourceDiff.EditSet();
|
||||||
|
|
||||||
|
for (var i = 0; i < Math.max(originalLines.length, editedLines.length); i++) {
|
||||||
|
if (!results.deleted.contains(i) && results.added.contains(i)) {
|
||||||
|
originalLines.splice(i, 0, ' ');
|
||||||
|
results.deleted.updateNumbers(i);
|
||||||
|
results.paddingLeft.add(i);
|
||||||
|
} else if (results.deleted.contains(i) && !results.added.contains(i)) {
|
||||||
|
editedLines.splice(i, 0, ' ');
|
||||||
|
results.added.updateNumbers(i);
|
||||||
|
results.paddingRight.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [originalLines, editedLines];
|
||||||
|
};
|
||||||
|
|
||||||
|
var findModifiedLines = function(originalLines, editedLines, results) {
|
||||||
|
results.modifiedRight = new SourceDiff.EditSet();
|
||||||
|
results.modifiedLeft = new SourceDiff.EditSet();
|
||||||
|
for (var i = 0; i < originalLines.length && i < editedLines.length; i++) {
|
||||||
|
if (results.added.contains(i) && results.deleted.contains(i)) {
|
||||||
|
results.modifiedLeft.add(i);
|
||||||
|
results.modifiedRight.add(i);
|
||||||
|
} else if (results.added.contains(i) && results.modifiedRight.contains(i - 1)) {
|
||||||
|
results.modifiedRight.add(i);
|
||||||
|
} else if (results.deleted.contains(i) && results.modifiedLeft.contains(i - 1)) {
|
||||||
|
results.modifiedLeft.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var diffModifiedLines = function(originalLines, editedLines, results) {
|
||||||
|
var lineDiffs = new SourceDiff.EditSet();
|
||||||
|
|
||||||
|
for (var i = 0; i < originalLines.length && i < editedLines.length; i++) {
|
||||||
|
if (results.modifiedLeft.contains(i) || results.modifiedRight.contains(i)) {
|
||||||
|
var lineDiff = diff.lineDiff(originalLines[i], editedLines[i]);
|
||||||
|
lineDiff.cleanUp();
|
||||||
|
|
||||||
|
lineDiffs.addValue(i, lineDiff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lineDiffs;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
lineUpText: lineUpText, //exposed for testing
|
||||||
|
formattedDiff: formattedDiff
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SourceDiff.AnchorIterator = function(anchors) {
|
||||||
|
var allAnchors = anchors.all();
|
||||||
|
var currentIndex = 0;
|
||||||
|
|
||||||
|
var getNextEdit = function() {
|
||||||
|
if (currentIndex + 1 < allAnchors.length) {
|
||||||
|
currentIndex++;
|
||||||
|
return allAnchors[currentIndex];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getPrevEdit = function() {
|
||||||
|
if (currentIndex - 1 >= 0) {
|
||||||
|
currentIndex--;
|
||||||
|
return allAnchors[currentIndex];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
getNextEdit: getNextEdit,
|
||||||
|
getPrevEdit: getPrevEdit
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
pre {
|
||||||
|
background-color: white;
|
||||||
|
margin: 5px;
|
||||||
|
white-space: pre;
|
||||||
|
word-wrap: normal;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
width: 98%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
float: left;
|
||||||
|
width: 49%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
float: right;
|
||||||
|
width: 49%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll {
|
||||||
|
overflow-x: scroll;
|
||||||
|
overflow-y: auto;
|
||||||
|
height: 98%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inserted {
|
||||||
|
background-color: #9E9;
|
||||||
|
min-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deleted {
|
||||||
|
background-color: #E99;
|
||||||
|
min-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modified {
|
||||||
|
background-color: #FD8;
|
||||||
|
min-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modified-light {
|
||||||
|
background-color: #fcffb6;
|
||||||
|
/*min-width: 100%;*/
|
||||||
|
/*display: inline-block;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.padding {
|
||||||
|
background-color: lightgray;
|
||||||
|
min-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
position: fixed;
|
||||||
|
background: white;
|
||||||
|
width: 50%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spacer {
|
||||||
|
width: 100%;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="doDiff()">
|
||||||
|
<textarea id="original">ИсходныйТекст</textarea>
|
||||||
|
<textarea id="edited">СравниваемыйТекст</textarea>
|
||||||
|
<div class="wrapper header">
|
||||||
|
<div class="right">
|
||||||
|
<h3>Edit</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="left scroll diff-content" id="scrollLeft">
|
||||||
|
<div class="header">
|
||||||
|
<h3>Ожидаемое значение</h3>
|
||||||
|
</div>
|
||||||
|
<div class="spacer"></div>
|
||||||
|
<pre id="original_result"></pre>
|
||||||
|
</div>
|
||||||
|
<div class="right scroll diff-content" id="scrollRight">
|
||||||
|
<div class="header">
|
||||||
|
<h3>Фактическое значение</h3>
|
||||||
|
</div>
|
||||||
|
<div class="spacer"></div>
|
||||||
|
<pre id="edited_result"></pre>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var scrollLeft = document.getElementById('scrollLeft');
|
||||||
|
var scrollRight = document.getElementById('scrollRight');
|
||||||
|
|
||||||
|
scrollLeft.addEventListener('scroll', function() {
|
||||||
|
scrollRight.scrollLeft = scrollLeft.scrollLeft;
|
||||||
|
scrollRight.scrollTop = scrollLeft.scrollTop;
|
||||||
|
});
|
||||||
|
|
||||||
|
scrollRight.addEventListener('scroll', function() {
|
||||||
|
scrollLeft.scrollLeft = scrollRight.scrollLeft;
|
||||||
|
scrollLeft.scrollTop = scrollRight.scrollTop;
|
||||||
|
});
|
||||||
|
|
||||||
|
function doDiff() {
|
||||||
|
var diff = new SourceDiff.Diff(true); //ignore leading whitespace
|
||||||
|
var formatter = new SourceDiff.DiffFormatter(diff);
|
||||||
|
|
||||||
|
var text1 = document.getElementById('original').value;
|
||||||
|
var text2 = document.getElementById('edited').value;
|
||||||
|
|
||||||
|
var results = formatter.formattedDiff(text1, text2);
|
||||||
|
|
||||||
|
document.getElementById('original_result').innerHTML = results[0];
|
||||||
|
document.getElementById('edited_result').innerHTML = results[1];
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
48
exts/yaxunit/src/DataProcessors/ЮТЮнитТесты/ЮТЮнитТесты.mdo
Normal file
48
exts/yaxunit/src/DataProcessors/ЮТЮнитТесты/ЮТЮнитТесты.mdo
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c1bdc484-8502-4c5d-bead-0a5861739c3c">
|
||||||
|
<producedTypes>
|
||||||
|
<objectType typeId="5b4ab199-21bb-4d2c-9b3f-76400ff90d09" valueTypeId="46e26617-02e4-4719-87a0-982b4820504f"/>
|
||||||
|
<managerType typeId="cea40759-07dd-409f-8c26-be7e738c7fbe" valueTypeId="e3a7e7ca-1e0d-4fdf-9390-258825a6bba5"/>
|
||||||
|
</producedTypes>
|
||||||
|
<name>ЮТЮнитТесты</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Юнит тесты</value>
|
||||||
|
</synonym>
|
||||||
|
<useStandardCommands>true</useStandardCommands>
|
||||||
|
<defaultForm>DataProcessor.ЮТЮнитТесты.Form.Основная</defaultForm>
|
||||||
|
<forms uuid="c3c0fc7f-1c5e-47d9-b103-201517e2c100">
|
||||||
|
<name>Основная</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Основная</value>
|
||||||
|
</synonym>
|
||||||
|
<usePurposes>PersonalComputer</usePurposes>
|
||||||
|
<usePurposes>MobileDevice</usePurposes>
|
||||||
|
</forms>
|
||||||
|
<forms uuid="7b2e6e42-7ce3-4e80-b14c-6c492850cc66">
|
||||||
|
<name>Сравнение</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Сравнение</value>
|
||||||
|
</synonym>
|
||||||
|
<usePurposes>PersonalComputer</usePurposes>
|
||||||
|
<usePurposes>MobileDevice</usePurposes>
|
||||||
|
</forms>
|
||||||
|
<templates uuid="2b46baf7-b195-4fa1-8014-1130b555872f">
|
||||||
|
<name>Сравнение</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Сравнение</value>
|
||||||
|
</synonym>
|
||||||
|
<templateType>TextDocument</templateType>
|
||||||
|
</templates>
|
||||||
|
<templates uuid="44459710-21e4-4399-a5ba-253d36a7fbbc">
|
||||||
|
<name>СравнениеOld</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Сравнение old</value>
|
||||||
|
</synonym>
|
||||||
|
<templateType>TextDocument</templateType>
|
||||||
|
</templates>
|
||||||
|
</mdclass:DataProcessor>
|
@ -36,4 +36,11 @@
|
|||||||
<content>CommonModule.ЮТТестовыеДанныеВызовСервера</content>
|
<content>CommonModule.ЮТТестовыеДанныеВызовСервера</content>
|
||||||
<content>CommonModule.ЮТест</content>
|
<content>CommonModule.ЮТест</content>
|
||||||
<content>CommonModule.ЮТКонтекстТеста</content>
|
<content>CommonModule.ЮТКонтекстТеста</content>
|
||||||
|
<content>CommonPicture.ЮТНеизвестный</content>
|
||||||
|
<content>CommonPicture.ЮТОшибка</content>
|
||||||
|
<content>CommonPicture.ЮТПропущен</content>
|
||||||
|
<content>CommonPicture.ЮТУпал</content>
|
||||||
|
<content>CommonPicture.ЮТУспешно</content>
|
||||||
|
<content>CommonPicture.ЮТЭлементыТестов</content>
|
||||||
|
<content>DataProcessor.ЮТЮнитТесты</content>
|
||||||
</mdclass:Subsystem>
|
</mdclass:Subsystem>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Runtime-Version: 8.3.10
|
Runtime-Version: 8.3.10
|
||||||
Base-Project: BSP
|
Base-Project: configuration
|
||||||
|
Loading…
x
Reference in New Issue
Block a user