1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-10 19:41:26 +02:00

Merge pull request #277 from bia-technologies/feature/269

269 / Методы генераторы случайных дат
This commit is contained in:
Koryakin Aleksey 2024-03-10 03:01:44 +03:00 committed by GitHub
commit c35b7c8dd4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 360 additions and 25 deletions

View File

@ -0,0 +1,28 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 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.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
Функция НекорректныеПараметрыМетода(ИмяМетода, Пояснение = Неопределено) Экспорт
Сообщение = СтрШаблон("Некорректные параметры метода `%1`");
Возврат ЮТОбщий.ДобавитьСтроку(Сообщение, Пояснение, ", ");
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="526a1410-3071-4fc0-b8a7-e60ad04d36ee">
<name>ЮТИсключения</name>
<synonym>
<key>ru</key>
<value>Исключения</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
// Copyright 2021-2024 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.
@ -74,7 +74,7 @@
Функция СоздатьКомпоненту(ОписаниеКомпоненты, Кэшировать = Ложь) Экспорт
Если Кэшировать Тогда
Возврат ЮТПовторногоИспользования.СоздатьКомпоненту(ОписаниеКомпоненты);
Возврат ЮТСлужебныйПовторногоИспользования.СоздатьКомпоненту(ОписаниеКомпоненты);
КонецЕсли;
#Если Сервер Тогда
@ -107,7 +107,7 @@
Функция ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты, Кэшировать) Экспорт
Если Кэшировать Тогда
Возврат ЮТПовторногоИспользования.ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты);
Возврат ЮТСлужебныйПовторногоИспользования.ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты);
КонецЕсли;
Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native);

View File

@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
// Copyright 2021-2024 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.
@ -68,7 +68,7 @@
Если Кэшировать Тогда
Возврат ЮТПовторногоИспользования.АдресСерверногоКонтекста();
Возврат ЮТСлужебныйПовторногоИспользования.АдресСерверногоКонтекста();
Иначе

View File

@ -55,16 +55,19 @@
КонецФункции
// Вычисляет хеш по алгоритму md5.
//
// Параметры:
// Данные - Строка, ДвоичныеДанные - Данные, для которых необходимо вычислить хеш
//
// Возвращаемое значение:
// Строка
Функция ХешMD5(Данные) Экспорт
Возврат ЮТОбщийВызовСервера.ХешMD5(Данные);
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область Строки
// ДобавитьСтроку
@ -143,6 +146,34 @@
#КонецОбласти
#Область ДатаВремя
// Добавляет к дате указанное значение временных интервалов
//
// Параметры:
// Дата - Дата
// Интервал - Число - Добавляемое
// ТипИнтервала - Строка - Тип интервала
//
// Возвращаемое значение:
// Дата
Функция ДобавитьКДате(Дата, Интервал, ТипИнтервала) Экспорт
Если ЭтоМесяц(ТипИнтервала) Тогда
Возврат ДобавитьМесяц(Дата, Интервал);
КонецЕсли;
Множитель = МножительПериода(ТипИнтервала);
Возврат Дата + Множитель * Интервал;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область Числа
// Инкрементирует значение
@ -640,7 +671,7 @@
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяМетода, Тип("Строка"), "ЮТОбщий.МетодМодуляСуществует", "ИмяМетода");
Если Кешировать Тогда
Возврат ЮТПовторногоИспользования.МетодМодуляСуществует(ИмяМодуля, ИмяМетода, КоличествоПараметров);
Возврат ЮТСлужебныйПовторногоИспользования.МетодМодуляСуществует(ИмяМодуля, ИмяМетода, КоличествоПараметров);
КонецЕсли;
ПолноеИмяМетода = СтрШаблон("%1.%2", ИмяМодуля, ИмяМетода);
@ -788,6 +819,7 @@
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
Если ИспользоватьСериализатор Тогда
//@skip-check undefined-variable
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Значение);
Иначе
ЗаписатьJSON(ЗаписьJSON, Значение);
@ -845,7 +877,7 @@
// ОписаниеТипов - Описание типов любая ссылка
Функция ОписаниеТиповЛюбаяСсылка() Экспорт
Возврат ЮТПовторногоИспользования.ОписаниеТиповЛюбаяСсылка();
Возврат ЮТСлужебныйПовторногоИспользования.ОписаниеТиповЛюбаяСсылка();
КонецФункции
@ -1147,4 +1179,19 @@
Возврат Ложь;
КонецФункции
Функция МножительПериода(ТипИнтервала)
Множители = ЮТСлужебныйПовторногоИспользования.МножителиИнтервалов();
Возврат Множители[ТипИнтервала];
КонецФункции
Функция ЭтоМесяц(ТипИнтервала)
Возврат СтрСравнить(ТипИнтервала, "месяц") = 0
Или СтрСравнить(ТипИнтервала, "месяца") = 0
Или СтрСравнить(ТипИнтервала, "месяцев") = 0;
КонецФункции
#КонецОбласти

View File

@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
// Copyright 2021-2024 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.
@ -67,4 +67,28 @@
КонецФункции
Функция МножителиИнтервалов() Экспорт
СекундВМинуте = 60;
СекундВЧасе = 60 * СекундВМинуте;
СекундВДне = СекундВЧасе * 24;
Множители = Новый Структура;
Множители.Вставить("секунда", 1);
Множители.Вставить("секунды", 1);
Множители.Вставить("секунд", 1);
Множители.Вставить("минута", СекундВМинуте);
Множители.Вставить("минуты", СекундВМинуте);
Множители.Вставить("минут", СекундВМинуте);
Множители.Вставить("час", СекундВЧасе);
Множители.Вставить("часа", СекундВЧасе);
Множители.Вставить("часов", СекундВЧасе);
Множители.Вставить("день", СекундВДне);
Множители.Вставить("дня", СекундВДне);
Множители.Вставить("дней", СекундВДне);
Возврат Множители;
КонецФункции
#КонецОбласти

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="30e72b21-62ac-4f48-999d-0ffc07e6e8a2">
<name>ЮТПовторногоИспользования</name>
<name>ЮТСлужебныйПовторногоИспользования</name>
<synonym>
<key>ru</key>
<value>Повторного использования</value>

View File

@ -238,22 +238,143 @@
//
// Возвращаемое значение:
// Дата - Случайная дата
Функция СлучайнаяДата(Знач Минимум = Неопределено, Знач Максимум = Неопределено) Экспорт
Функция СлучайнаяДата(Знач Минимум = '00010101', Знач Максимум = '39991231') Экспорт
Если Минимум = Неопределено Тогда
Минимум = '00010101';
Если Минимум = Максимум Тогда
Возврат Минимум;
ИначеЕсли Максимум < Минимум Тогда
ВызватьИсключение ЮТИсключения.НекорректныеПараметрыМетода("СлучайнаяДата", "максимальное значение должно быть больше минимального");
КонецЕсли;
Если Максимум = Неопределено Тогда
Максимум = '39991231';
РазностьДат = Максимум - Минимум;
Если РазностьДат <= МаксимумГенератора() Тогда
Возврат Минимум + СлучайноеЧисло(0, РазностьДат);
КонецЕсли;
СекундВДне = 86400;
КоличествоДней = Цел((Максимум - Минимум) / СекундВДне);
КоличествоДней = Цел((РазностьДат) / СекундВДне);
Возврат Минимум + СлучайноеЧисло(0, КоличествоДней) * СекундВДне + СлучайноеЧисло(0, СекундВДне);
КонецФункции
// Генерирует случайное время
//
// Возвращаемое значение:
// Дата - Случайное время
Функция СлучайноеВремя() Экспорт
СекундВСутках = 60*60*24;
Возврат '00010101000000' + СлучайноеЧисло(0, СекундВСутках - 1);
КонецФункции
// Генерирует случайную дату в будущем.
// Максимальное значение генерируемой даты можно ограничить параметрами.
// Например: СлучайнаяДатаВБудущем(2, "часа") - будет сформирована дата в интервали (ТекущаяДата, ТекущаяДата + 2 часа]
//
// Параметры:
// Интервал - Число - Интервал
// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения
// * секунда, секунды, секунд
// * минута, минуты, минут
// * час, часа, часов
// * день, дня, дней
// * месяц, месяца, месяцев
//
// Возвращаемое значение:
// Дата - Случайная дата в будущем
Функция СлучайнаяДатаВБудущем(Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт
//@skip-check use-non-recommended-method
Возврат СлучайнаяДатаПосле(ТекущаяДата(), Интервал, ТипИнтервала);
КонецФункции
// Генерирует случайную дату в прошлом.
// Минимальное значение генерируемой даты можно ограничить параметрами.
// Например: СлучайнаяДатаВПрошлом(2, "часа") - будет сформирована дата в интервали [ТекущаяДата - 2 часа, ТекущаяДата)
//
// Параметры:
// Интервал - Число - Интервал
// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения
// * секунда, секунды, секунд
// * минута, минуты, минут
// * час, часа, часов
// * день, дня, дней
// * месяц, месяца, месяцев
//
// Возвращаемое значение:
// Дата - Случайная дата в прошлом
Функция СлучайнаяДатаВПрошлом(Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт
//@skip-check use-non-recommended-method
Возврат СлучайнаяДатаДо(ТекущаяДата(), Интервал, ТипИнтервала);
КонецФункции
// Генерирует случайную дату, значение которой больше указанной.
// Максимальное значение генерируемой даты можно ограничить параметрами.
// Например: СлучайнаяДатаПосле(Дата, 2, "часа") - будет сформирована дата в интервали [Дата - 2 часа, Дата)
//
// Параметры:
// Дата - Дата
// Интервал - Число - Интервал
// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения
// * секунда, секунды, секунд
// * минута, минуты, минут
// * час, часа, часов
// * день, дня, дней
// * месяц, месяца, месяцев
//
// Возвращаемое значение:
// Дата
Функция СлучайнаяДатаПосле(Дата, Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт
ИнтервалНеУказан = Интервал = Неопределено И ТипИнтервала = Неопределено;
Если ИнтервалНеУказан Тогда
Возврат СлучайнаяДата(Дата + 1);
Иначе
Минимум = Дата + 1;
Максимум = ЮТОбщий.ДобавитьКДате(Дата, Интервал, ТипИнтервала);
Возврат СлучайнаяДата(Минимум, Максимум);
КонецЕсли;
КонецФункции
// Генерирует случайную дату, значение которой меньше указанной.
// Минимальное значение генерируемой даты можно ограничить параметрами.
// Например: СлучайнаяДатаПосле(Дата, 2, "часа") - будет сформирована дата в интервали [Дата - 2 часа, Дата)
//
// Параметры:
// Дата - Дата
// Интервал - Число - Интервал
// ТипИнтервала - Строка - Строковое представление интервала времени, возможные значения
// * секунда, секунды, секунд
// * минута, минуты, минут
// * час, часа, часов
// * день, дня, дней
// * месяц, месяца, месяцев
//
// Возвращаемое значение:
// Дата
Функция СлучайнаяДатаДо(Дата, Интервал = Неопределено, ТипИнтервала = Неопределено) Экспорт
ИнтервалНеУказан = Интервал = Неопределено И ТипИнтервала = Неопределено;
Если ИнтервалНеУказан Тогда
Возврат СлучайнаяДата(, Дата - 1);
Иначе
Минимум = ЮТОбщий.ДобавитьКДате(Дата, -Интервал, ТипИнтервала);
Максимум = Дата - 1;
Возврат СлучайнаяДата(Минимум, Максимум);
КонецЕсли;
КонецФункции
// Генерирует и возвращает случайный IP адрес.
//
// Возвращаемое значение:
@ -716,4 +837,25 @@
КонецПроцедуры
Функция МножительПериода(ТипИнтервала)
Множители = ЮТСлужебныйПовторногоИспользования.МножителиИнтервалов();
Возврат Множители[ТипИнтервала];
КонецФункции
Функция ЭтоМесяц(ТипИнтервала)
Возврат СтрСравнить(ТипИнтервала, "месяц") = 0
Или СтрСравнить(ТипИнтервала, "месяца") = 0
Или СтрСравнить(ТипИнтервала, "месяцев") = 0;
КонецФункции
Функция МаксимумГенератора()
Возврат 4294967295;
КонецФункции
#КонецОбласти

View File

@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
// Copyright 2021-2024 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.
@ -163,7 +163,7 @@
Функция ЭтоПримитивныйТип(Тип) Экспорт
ПримитивныеТипы = ЮТПовторногоИспользования.ПримитивныеТипы();
ПримитивныеТипы = ЮТСлужебныйПовторногоИспользования.ПримитивныеТипы();
ТипПараметра = ТипЗнч(Тип);

View File

@ -138,7 +138,7 @@
Функция ПараметрыТиповОшибок(Кешировать = Истина) Экспорт
Если Кешировать Тогда
ЮТПовторногоИспользования.ПараметрыТиповОшибок();
ЮТСлужебныйПовторногоИспользования.ПараметрыТиповОшибок();
КонецЕсли;
Статусы = СтатусыИсполненияТеста();

View File

@ -59,6 +59,7 @@
<commonModules>CommonModule.ЮТЗапросы</commonModules>
<commonModules>CommonModule.ЮТЗапросыВызовСервера</commonModules>
<commonModules>CommonModule.ЮТЗапросыКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТИсключения</commonModules>
<commonModules>CommonModule.ЮТИсполнительГлобальный</commonModules>
<commonModules>CommonModule.ЮТИсполнительКлиент</commonModules>
<commonModules>CommonModule.ЮТИсполнительКлиентСервер</commonModules>
@ -86,7 +87,6 @@
<commonModules>CommonModule.ЮТОтчетJSON</commonModules>
<commonModules>CommonModule.ЮТОтчетJUnit</commonModules>
<commonModules>CommonModule.ЮТПараметрыЗапуска</commonModules>
<commonModules>CommonModule.ЮТПовторногоИспользования</commonModules>
<commonModules>CommonModule.ЮТПодражатель</commonModules>
<commonModules>CommonModule.ЮТПодражатель_Банки</commonModules>
<commonModules>CommonModule.ЮТПодражатель_Компании</commonModules>
@ -100,6 +100,7 @@
<commonModules>CommonModule.ЮТПроверкиСлужебный</commonModules>
<commonModules>CommonModule.ЮТРасширения</commonModules>
<commonModules>CommonModule.ЮТРегистрацияОшибок</commonModules>
<commonModules>CommonModule.ЮТСлужебныйПовторногоИспользования</commonModules>
<commonModules>CommonModule.ЮТСобытия</commonModules>
<commonModules>CommonModule.ЮТСообщенияСлужебный</commonModules>
<commonModules>CommonModule.ЮТСравнениеКлиентСервер</commonModules>

View File

@ -11,6 +11,7 @@
<value>Сервисная функциональность работы движка</value>
</explanation>
<content>CommonModule.ЮТАсинхроннаяОбработкаСлужебныйКлиент</content>
<content>CommonModule.ЮТИсключения</content>
<content>CommonModule.ЮТКомпоненты</content>
<content>CommonModule.ЮТКомпонентыВызовСервера</content>
<content>CommonModule.ЮТКомпонентыКлиент</content>
@ -21,10 +22,10 @@
<content>CommonModule.ЮТНастройкиВыполнения</content>
<content>CommonModule.ЮТОбщийВызовСервера</content>
<content>CommonModule.ЮТОтчет</content>
<content>CommonModule.ЮТПовторногоИспользования</content>
<content>CommonModule.ЮТПроверкиСлужебный</content>
<content>CommonModule.ЮТРасширения</content>
<content>CommonModule.ЮТРегистрацияОшибок</content>
<content>CommonModule.ЮТСлужебныйПовторногоИспользования</content>
<content>CommonModule.ЮТСобытия</content>
<content>CommonModule.ЮТСообщенияСлужебный</content>
<content>CommonModule.ЮТТипыДанныхСлужебный</content>

View File

@ -48,8 +48,12 @@
.СПараметрами(Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 1, ДопустимыйЗнак.Неотрицательный)))
.СПараметрами(Новый ОписаниеТипов("СправочникСсылка.Банки, ДокументСсылка.Заказ"))
.ДобавитьТест("СлучайноеПредопределенноеЗначение")
.ДобавитьТест("СлучайнаяДата")
.ДобавитьТест("СлучайноеВремя")
.ДобавитьТест("СлучайнаяДатаПосле")
.ДобавитьТест("СлучайнаяДатаДо")
;
КонецПроцедуры
Процедура Удалить() Экспорт
@ -531,4 +535,81 @@
КонецПроцедуры
Процедура СлучайнаяДата() Экспорт
Варианты = ЮТест.Варианты("Начало, Окончание")
.Добавить('20000101', '20000101')
.Добавить('20000101', '20000102')
.Добавить('20000101', '20000101235959')
.Добавить('20000101', '20000101010000')
.Добавить('20000101', '20000101000001');
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
Результат = ЮТТестовыеДанные.СлучайнаяДата(Вариант.Начало, Вариант.Окончание);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Дата")
.МеждуВключаяГраницы(Вариант.Начало, Вариант.Окончание);
КонецЦикла;
КонецПроцедуры
Процедура СлучайноеВремя() Экспорт
Для Инд = 1 По 50 Цикл
Результат = ЮТТестовыеДанные.СлучайноеВремя();
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Дата")
.МеждуВключаяГраницы('00010101000000', '00010101235959');
КонецЦикла;
КонецПроцедуры
Процедура СлучайнаяДатаПосле() Экспорт
Варианты = ЮТест.Варианты("Начало, Интервал, ТипИнтервала, Максимум")
.Добавить('20000101', 1, "час", '20000101010000')
.Добавить('20000101', 7, "дней", '20000108')
.Добавить('20000101', 12, "месяцев", '20010101')
.Добавить('20000101', 3, "секунды", '20000101000003')
.Добавить('20000101', Неопределено, Неопределено, '39991231');
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
Результат = ЮТТестовыеДанные.СлучайнаяДатаПосле(Вариант.Начало, Вариант.Интервал, Вариант.ТипИнтервала);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Дата")
.МеждуВключаяОкончаниеГраницы(Вариант.Начало, Вариант.Максимум);
КонецЦикла;
КонецПроцедуры
Процедура СлучайнаяДатаДо() Экспорт
Варианты = ЮТест.Варианты("Дата, Интервал, ТипИнтервала, Минимум")
.Добавить('20010101', 1, "час", '20001231230000')
.Добавить('20010101', 7, "дней", '20001225')
.Добавить('20010101', 12, "месяцев", '20000101')
.Добавить('20010101', 3, "секунды", '20001231235957')
.Добавить('20010101', Неопределено, Неопределено, '00010101');
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
Результат = ЮТТестовыеДанные.СлучайнаяДатаДо(Вариант.Дата, Вариант.Интервал, Вариант.ТипИнтервала);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Дата")
.МеждуВключаяНачалоГраницы(Вариант.Минимум, Вариант.Дата);
КонецЦикла;
КонецПроцедуры
#КонецОбласти