Skip to content

Commit cd31900

Browse files
committed
к EvilBeaver#1424: ПолучитьТаблицуСвойств для Структур +тесты
1 parent 985c65d commit cd31900

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

src/OneScript.StandardLibrary/Collections/FixedStructureImpl.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ This Source Code Form is subject to the terms of the
66
----------------------------------------------------------*/
77

88
using System.Collections.Generic;
9+
using Newtonsoft.Json.Linq;
910
using OneScript.Contexts;
1011
using OneScript.Exceptions;
1112
using OneScript.Values;
@@ -57,6 +58,11 @@ public override int GetPropertyNumber(string name)
5758
return _structure.GetPropertyNumber(name);
5859
}
5960

61+
public override int GetPropCount()
62+
{
63+
return _structure.GetPropCount();
64+
}
65+
6066
public override BslMethodInfo GetMethodInfo(int methodNumber)
6167
{
6268
return _methods.GetRuntimeMethod(methodNumber);

src/OneScript.StandardLibrary/Collections/StructureImpl.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ This Source Code Form is subject to the terms of the
55
at http://mozilla.org/MPL/2.0/.
66
----------------------------------------------------------*/
77

8+
using System;
89
using System.Collections.Generic;
910
using OneScript.Commons;
1011
using OneScript.Contexts;
@@ -133,6 +134,17 @@ public override string GetPropName(int propNum)
133134
return GetPropertyName(propNum);
134135
}
135136

137+
public override BslPropertyInfo GetPropertyInfo(int propNum)
138+
{
139+
return BslPropertyBuilder.Create()
140+
.Name(GetPropName(propNum))
141+
.CanRead(true)
142+
.CanWrite(true)
143+
.ReturnType(_values[propNum].GetType())
144+
.DeclaringType(GetType())
145+
.Build();
146+
}
147+
136148
public override BslMethodInfo GetMethodInfo(int methodNumber)
137149
{
138150
return _methods.GetRuntimeMethod(methodNumber);

tests/reflector.os

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюВнешнегоПараметра");
5555
ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюВнешнегоПараметраВРежимеПриватных");
5656

57+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляСтруктуры");
58+
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляФиксированнойСтруктуры");
59+
5760
#Если Windows Тогда
5861
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаComОбъекта");
5962
#КонецЕсли
@@ -928,3 +931,19 @@
928931
юТест.ПроверитьИстину(ТаблицаСвойств[1].Экспорт);
929932

930933
КонецПроцедуры
934+
935+
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляСтруктуры() Экспорт
936+
Рефлектор = Новый Рефлектор;
937+
Структура = Новый Структура("Поле1, Поле2", -1, -2);
938+
Таблица = Рефлектор.ПолучитьТаблицуСвойств(Структура);
939+
юТест.ПроверитьРавенство(2, Таблица.Количество());
940+
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("Поле1"));
941+
КонецПроцедуры
942+
943+
Процедура ТестДолжен_ПроверитьПолучитьТаблицуСвойствДляФиксированнойСтруктуры() Экспорт
944+
Рефлектор = Новый Рефлектор;
945+
ФиксСтруктура = Новый ФиксированнаяСтруктура("Поле1, Поле2", -1, -2);
946+
Таблица = Рефлектор.ПолучитьТаблицуСвойств(ФиксСтруктура);
947+
юТест.ПроверитьРавенство(2, Таблица.Количество());
948+
юТест.ПроверитьНеРавенство(Неопределено, Таблица.Найти("Поле1"));
949+
КонецПроцедуры

0 commit comments

Comments
 (0)