/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
v1.9.3
tests/native-api.os
191 строка
12 KB
EvilBeaver
Исправлена прокси-библиотека NativeApi для 32-битной архитектуры
27 май 2025, 23:44
27 май 2025, 23:44
eb73a79
Код
Авторство
О чём код?
Перем юТест; Перем ВнешняяКомпонента; Перем ЗаписьXML, ЗаписьZIP, КаталогСкрипта, КаталогПакета, СуффиксВерсии; Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт юТест = ЮнитТестирование; ВсеТесты = Новый Массив; // TODO: сделать прогон этого теста еще и на 32-битной архитектуре, см. ошибку #1531 ВсеТесты.Добавить("ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыZIP"); ВсеТесты.Добавить("ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыDLL"); ВсеТесты.Добавить("ТестДолжен_ПроверитьСвойстваВнешнейКомпоненты"); ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодыВнешнейКомпоненты"); СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; Если Не ЭтоWindows Тогда Каталог = ТекущийСценарий().Каталог + "/native-api/"; ЗапуститьПриложение(Каталог + "build.sh", Каталог, Истина); КонецЕсли; Возврат ВсеТесты; КонецФункции Процедура ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыZIP() Экспорт ИмяФайлаПакета = юТест.ИмяВременногоФайла(); ЗаписьZIP = Новый ЗаписьZipФайла(ИмяФайлаПакета); МасивФайлов = Новый Массив; СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; Если ЭтоWindows Тогда Каталог = ТекущийСценарий().Каталог + "\native-api\"; МасивФайлов.Добавить("bin\AddInNativeWin32.dll"); МасивФайлов.Добавить("bin64\AddInNativeWin64.dll"); Иначе Каталог = ТекущийСценарий().Каталог + "/native-api/"; МасивФайлов.Добавить("build32/AddInNativeLin32.so"); МасивФайлов.Добавить("build64/AddInNativeLin64.so"); КонецЕсли; ЗаписьZIP.Добавить(Каталог + "MANIFEST.XML", РежимСохраненияПутейZIP.НеСохранятьПути); Для каждого ИмяФайла из МасивФайлов Цикл ПутьФайла = Каталог + ИмяФайла; Файл = Новый Файл(ПутьФайла); Если Файл.Существует() Тогда ЗаписьZIP.Добавить(ПутьФайла, РежимСохраненияПутейZIP.НеСохранятьПути); КонецЕсли; КонецЦикла; ЗаписьZIP.Записать(); Идентификатор = "AddinNativeZip"; Успешно = ПодключитьВнешнююКомпоненту(ИмяФайлаПакета, Идентификатор, ТипВнешнейКомпоненты.Native); юТест.ПроверитьРавенство(Успешно, Истина); ИмяВнешнейКомпоненты = "AddIn." + Идентификатор + ".CAddInNative"; ВнешняяКомпонента = Новый(ИмяВнешнейКомпоненты); юТест.ПроверитьРавенство(Строка(ТипЗнч(ВнешняяКомпонента)), Строка(Тип(ИмяВнешнейКомпоненты))); КонецПроцедуры Процедура ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыDLL() Экспорт Идентификатор = "AddinNativeDLL"; СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; Если ЭтоWindows Тогда ПутьБиблиотеки = ТекущийСценарий().Каталог + "\native-api\"; Это32бит = ПодключитьВнешнююКомпоненту(ПутьБиблиотеки + "bin\AddInNativeWin32.dll", Идентификатор, ТипВнешнейКомпоненты.Native); Это64бит = ПодключитьВнешнююКомпоненту(ПутьБиблиотеки + "bin64\AddInNativeWin64.dll", Идентификатор, ТипВнешнейКомпоненты.Native); Иначе ПутьБиблиотеки = ТекущийСценарий().Каталог + "/native-api/"; Это32бит = ПодключитьВнешнююКомпоненту(ПутьБиблиотеки + "build32/AddInNativeLin32.so", Идентификатор, ТипВнешнейКомпоненты.Native); Это64бит = ПодключитьВнешнююКомпоненту(ПутьБиблиотеки + "build64/AddInNativeLin64.so", Идентификатор, ТипВнешнейКомпоненты.Native); КонецЕсли; юТест.ПроверитьРавенство(Это32бит И Это64бит, Ложь); юТест.ПроверитьРавенство(Это32бит ИЛИ Это64бит, Истина); ИмяВнешнейКомпоненты = "AddIn." + Идентификатор + ".CAddInNative"; ВнешняяКомпонента = Новый(ИмяВнешнейКомпоненты); ВнешняяКомпонента.Включить(); юТест.ПроверитьРавенство(ВнешняяКомпонента.Включен, Истина); ВнешняяКомпонента.Выключить(); юТест.ПроверитьРавенство(ВнешняяКомпонента.Включен, Ложь); КонецПроцедуры Процедура ТестДолжен_ПроверитьСвойстваВнешнейКомпоненты() Экспорт ВнешняяКомпонента.Включен = Истина; юТест.ПроверитьРавенство(ВнешняяКомпонента.Включен, Истина); юТест.ПроверитьРавенство(ВнешняяКомпонента.IsEnabled, Истина); ВнешняяКомпонента.Включен = Ложь; юТест.ПроверитьРавенство(ВнешняяКомпонента.Включен, Ложь); юТест.ПроверитьРавенство(ВнешняяКомпонента.IsEnabled, Ложь); ВнешняяКомпонента["Включен"] = Истина; юТест.ПроверитьРавенство(ВнешняяКомпонента["Включен"], Истина); юТест.ПроверитьРавенство(ВнешняяКомпонента["IsEnabled"], Истина); СодержимоеСтроки = "Тест строки только на запись"; ВнешняяКомпонента.СтрокаТолькоЗапись = СодержимоеСтроки; юТест.ПроверитьРавенство(ВнешняяКомпонента.СтрокаЧтениеЗапись, СодержимоеСтроки); юТест.ПроверитьРавенство(ВнешняяКомпонента.СтрокаТолькоЧтение, СодержимоеСтроки); СодержимоеСтроки = "Тест строки на чтение и запись"; ВнешняяКомпонента.СтрокаЧтениеЗапись = СодержимоеСтроки; юТест.ПроверитьРавенство(ВнешняяКомпонента.СтрокаЧтениеЗапись, СодержимоеСтроки); юТест.ПроверитьРавенство(ВнешняяКомпонента.СтрокаТолькоЧтение, СодержимоеСтроки); Попытка ВнешняяКомпонента.СтрокаТолькоЧтение = СодержимоеСтроки; юТест.ТестПровален("Удалось изменить недоступное для записи свойство"); Исключение юТест.ТестПройден(); КонецПопытки; Попытка СодержимоеСтроки = ВнешняяКомпонента.СтрокаТолькоЗапись; юТест.ТестПровален("Удалось прочитать недоступное для чтения свойство"); Исключение юТест.ТестПройден(); КонецПопытки; Попытка ВнешняяКомпонента.СвойствоОтсутствует = СодержимоеСтроки; юТест.ТестПровален("Удалось обратиться к отсутствующему свойству"); Исключение юТест.ТестПройден(); КонецПопытки; КонецПроцедуры Процедура ТестДолжен_ПроверитьМетодыВнешнейКомпоненты() Экспорт ВнешняяКомпонента.Включить(); юТест.ПроверитьРавенство(ВнешняяКомпонента.Включен, Истина); ВнешняяКомпонента.Выключить(); юТест.ПроверитьРавенство(ВнешняяКомпонента.Включен, Ложь); Попытка ВнешняяКомпонента.Выключить(Истина); юТест.ТестПровален("Удалось передать параметр в метод без параметров"); Исключение юТест.ТестПройден(); КонецПопытки; юТест.ПроверитьРавенство(ВнешняяКомпонента.ПараметрПоУмолчанию(), Истина); юТест.ПроверитьРавенство(ВнешняяКомпонента.ПараметрПоУмолчанию(Ложь), Ложь); Попытка Значение = ВнешняяКомпонента.ПараметрПоУмолчанию(Истина, Ложь); юТест.ТестПровален("Удалось передать лишний параметр в метод с одним параметром"); Исключение юТест.ТестПройден(); КонецПопытки; ПерваяСтрока = "Первая строка"; ВтораяСтрока = "Вторая тестовая строка"; КонкатенацияСтрок = ВнешняяКомпонента.КонкатенацияСтрок(ПерваяСтрока, ВтораяСтрока); юТест.ПроверитьРавенство(КонкатенацияСтрок, ПерваяСтрока + ВтораяСтрока); СодержимоеФайла = "Тест двоичных данных"; ВременныйФайл = юТест.ИмяВременногоФайла(); ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, КодировкаТекста.UTF8); ЗаписьТекста.Записать(СодержимоеФайла); ЗаписьТекста.Закрыть(); ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл); ДвоичныеДанные = ВнешняяКомпонента.Петля(ДвоичныеДанные); Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); ЧтениеТекста = Новый ЧтениеТекста(Поток, КодировкаТекста.UTF8); юТест.ПроверитьРавенство(ЧтениеТекста.Прочитать(), СодержимоеФайла); КонецПроцедуры