/
smwwiki
/
OneScript_fork
Обзор
Документация
Войти
/
smwwiki
/
OneScript_fork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
tests/managed-com.os
192 строки
12 KB
EvilBeaver
Доработки выходных параметров COM-объектов see #1331
26 сен 2023, 16:16
26 сен 2023, 16:16
dc0bbf0
Код
Авторство
О чём код?
Перем юТест; Функция Версия() Экспорт Возврат "0.1"; КонецФункции Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт юТест = ЮнитТестирование; ВсеТесты = Новый Массив; СИ = Новый СистемнаяИнформация; Если (Найти(СИ.ВерсияОС, "Windows") > 0) И Не (ПеременныеСреды().Получить("APPVEYOR") = "True") Тогда ВсеТесты.Добавить("ТестДолжен_ПроверитьУстановкуЧисловыхСвойств"); ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовСОпциональнымиПараметрами"); ВсеТесты.Добавить("ПроверитьВыходныеПараметрыComОбъекта"); КонецЕсли; ВсеТесты.Добавить("ТестДолжен_ПроверитьСозданиеClrОбъекта"); ВсеТесты.Добавить("ТестДолжен_ПроверитьСозданиеClrКоллекции"); ВсеТесты.Добавить("ТестДолжен_ПроверитьСозданиеClrКоллекцииШаблона"); ВсеТесты.Добавить("ТестДолжен_ПроверитьТипыClrОбъектов"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуGetType"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуGetTypeДляЭлементовСписка"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуGetTypeДляCLRКоллекции"); ВсеТесты.Добавить("ТестДолжен_ПроверитьРаботуТипаНеИзЯдра"); Возврат ВсеТесты; КонецФункции Процедура ТестДолжен_ПроверитьУстановкуЧисловыхСвойств() Экспорт conn = Новый ComObject("ADODB.Connection"); conn.ConnectionString = "Driver={MySQL ODBC 3.51 Driver}; Server=obr-mdb-01; Port=3306; UID=v8; PWD=G0bl1n76; database=db1cprod; option=3;"; conn.CommandTimeOut= 30; КонецПроцедуры Процедура ТестДолжен_ПроверитьВызовСОпциональнымиПараметрами() Экспорт conn = Новый ComObject("ADODB.Connection"); conn.ConnectionString = "Driver={fake driver}; Server=obr-mdb-01; Port=3306; UID=v8; PWD=G0bl1n76; database=db1cprod; option=3;"; conn.CommandTimeOut= 30; Попытка conn.Open(,,); Исключение Инфо = ИнформацияОбОшибке().Причина; Если Инфо = Неопределено Тогда Инфо = ИнформацияОбОшибке(); КонецЕсли; юТест.ПроверитьИстину(Найти(Инфо.Описание,"[Microsoft]") > 0, Инфо.Описание); КонецПопытки; КонецПроцедуры Процедура ТестДолжен_ПроверитьСозданиеClrОбъекта() Экспорт РоднойОбъект = Новый COMОбъект("System.Random"); РоднойОбъект.Next(); РоднойОбъект.Next(10); РоднойОбъект.Next(10, 20); РоднойОбъект.NextDouble(); КонецПроцедуры Процедура ТестДолжен_ПроверитьСозданиеClrКоллекции() Экспорт РоднаяКоллекцияНеШаблон = Новый COMОбъект("System.Collections.ArrayList"); РоднаяКоллекцияНеШаблон.Add(1); РоднаяКоллекцияНеШаблон.Add("string"); РоднаяКоллекцияНеШаблон.Add('20170808'); юТест.ПроверитьРавенство(РоднаяКоллекцияНеШаблон.Count, 3); юТест.ПроверитьРавенство(РоднаяКоллекцияНеШаблон[0], 1); юТест.ПроверитьРавенство(РоднаяКоллекцияНеШаблон[1], "string"); юТест.ПроверитьРавенство(РоднаяКоллекцияНеШаблон[2], '20170808'); КонецПроцедуры Процедура ТестДолжен_ПроверитьСозданиеClrКоллекцииШаблона() Экспорт РоднаяКоллекцияШаблон = Новый COMОбъект("System.Collections.Generic.List`1"); РоднаяКоллекцияШаблон.Add(1); РоднаяКоллекцияШаблон.Add("string"); РоднаяКоллекцияШаблон.Add('20170808'); юТест.ПроверитьРавенство(РоднаяКоллекцияШаблон.Count, 3); юТест.ПроверитьРавенство(РоднаяКоллекцияШаблон[0], 1); юТест.ПроверитьРавенство(РоднаяКоллекцияШаблон[1], "string"); юТест.ПроверитьРавенство(РоднаяКоллекцияШаблон[2], '20170808'); КонецПроцедуры Процедура ТестДолжен_ПроверитьТипыClrОбъектов() Экспорт РодноеСоответствие = Новый ComОбъект("System.Collections.Generic.Dictionary`2"); РодноеСоответствие.Add("str", 123); юТест.ПроверитьРавенство (ТипЗнч(РодноеСоответствие), Тип("COMОбъект"), "CLR-тип как COM-объект"); Для Каждого мКлючЗначение Из РодноеСоответствие Цикл юТест.ПроверитьРавенство(ТипЗнч(мКлючЗначение), Тип("COMОбъект"), "CLR-тип как COM-объект"); КонецЦикла; КонецПроцедуры Процедура ПроверитьРаботуGetTypeДляОдногоТипа(ИмяПроверяемогоТипаИлиОбъект, ПространствоИмен, Имя, ЭтоОбъект = Ложь) Экспорт Если ТипЗнч(ИмяПроверяемогоТипаИлиОбъект) = Тип("Строка") И НЕ ЭтоОбъект Тогда ИмяПроверяемогоТипа = ИмяПроверяемогоТипаИлиОбъект; Объект = Новый COMОбъект(ИмяПроверяемогоТипа); Иначе Объект = ИмяПроверяемогоТипаИлиОбъект; юТест.ПроверитьРавенство(ТипЗнч(Объект), Тип("COMОбъект"), "Объект как COM-объект"); КонецЕсли; Рефлектор = Новый Рефлектор; юТест.ПроверитьИстину(Рефлектор.МетодСуществует(Объект, "GetType"), "Существует метод `GetType()`, Имя типа " + ИмяПроверяемогоТипа); ТипОбъекта = Объект.GetType(); юТест.ПроверитьРавенство(ТипЗнч(ТипОбъекта), Тип("COMОбъект"), "Тип - COM-объект " + ИмяПроверяемогоТипа); юТест.ПроверитьРавенство(ВРЕГ(ПространствоИмен), ВРЕГ(ТипОбъекта.Namespace), "Получили тот тип, который просили " + ИмяПроверяемогоТипа); юТест.ПроверитьРавенство(ВРЕГ(Имя), ВРЕГ(ТипОбъекта.Name), "Получили тот тип, который просили " + ИмяПроверяемогоТипа); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуGetType() Экспорт ПроверитьРаботуGetTypeДляОдногоТипа("System.Random", "System", "Random"); ПроверитьРаботуGetTypeДляОдногоТипа("System.Collections.ArrayList", "System.Collections", "ArrayList"); ПроверитьРаботуGetTypeДляОдногоТипа("System.Collections.Generic.List`1", "System.Collections.Generic", "List`1"); ПроверитьРаботуGetTypeДляОдногоТипа("System.Collections.Generic.Dictionary`2", "System.Collections.Generic", "Dictionary`2"); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуGetTypeДляЭлементовСписка() Экспорт РоднаяКоллекция = Новый COMОбъект("System.Collections.ArrayList"); РоднаяКоллекция.Add(1); РоднаяКоллекция.Add("string"); РоднаяКоллекция.Add('20170808'); РоднаяКоллекция.Add(Новый COMОбъект("System.Random")); юТест.ПроверитьРавенство(ТипЗнч(РоднаяКоллекция[0]), Тип("Число"), "Элемент [0] - это число"); юТест.ПроверитьРавенство(ТипЗнч(РоднаяКоллекция[1]), Тип("Строка"), "Элемент [1] - это строка"); юТест.ПроверитьРавенство(ТипЗнч(РоднаяКоллекция[2]), Тип("Дата"), "Элемент [2] - это дата"); ПроверитьРаботуGetTypeДляОдногоТипа(РоднаяКоллекция[3], "System", "Random"); КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуGetTypeДляCLRКоллекции() Экспорт РоднаяКоллекция = Новый ComОбъект("System.Collections.Generic.Dictionary`2"); РоднаяКоллекция.Add("str", 123); Для Каждого мКлючЗначение Из РоднаяКоллекция Цикл юТест.ПроверитьРавенство(ТипЗнч(мКлючЗначение), Тип("COMОбъект"), "CLR-тип как COM-объект"); ПроверитьРаботуGetTypeДляОдногоТипа(мКлючЗначение, "System.Collections.Generic", "KEYVALUEPAIR`2"); юТест.ПроверитьРавенство(ТипЗнч(мКлючЗначение.Key), Тип("Строка"), "мКлючЗначение.Key - это строка"); юТест.ПроверитьРавенство(ТипЗнч(мКлючЗначение.Value), Тип("Число"), "мКлючЗначение.Value - это число"); КонецЦикла; КонецПроцедуры Процедура ТестДолжен_ПроверитьРаботуТипаНеИзЯдра() Экспорт Ури = Новый COMОбъект("System.Uri", "file:///some/file.txt"); // тип НЕ из mscorlib.dll. Должен просто создаться и не упасть юТест.ПроверитьРавенство(Ури.IsFile, Истина); ПроверитьРаботуGetTypeДляОдногоТипа(Ури, "System", "Uri"); КонецПроцедуры Процедура ПроверитьВыходныеПараметрыComОбъекта() Экспорт // Проверяем, что выходной параметр установился, а также то, что попытки записи во входной параметр не было. Рег = Новый ФиксированнаяСтруктура("HKEY_LOCAL_MACHINE", "2147483650"); ИмяФайлаКласса = ""; РеестрОС = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"); Рез=РеестрОС.GetStringValue(Рег.HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion","DevicePath", ИмяФайлаКласса); юТест.ПроверитьРавенство(0, Рез); юТест.ПроверитьНеравенство("", ИмяФайлаКласса); КонецПроцедуры