Skip to content

Commit d4aaf34

Browse files
committed
v2: дефолтные значения в конструкторе сценария +тест
1 parent 5a45a40 commit d4aaf34

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/ScriptEngine/Machine/Contexts/UserScriptContextInstance.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected override void OnInstanceCreation()
6565

6666
base.OnInstanceCreation();
6767
var methId = GetScriptMethod(OnInstanceCreationTerms.Russian, OnInstanceCreationTerms.English);
68-
int constructorParamsCount = ConstructorParams.Count();
68+
int constructorParamsCount = ConstructorParams.Length;
6969

7070
if (methId > -1)
7171
{
@@ -83,7 +83,18 @@ protected override void OnInstanceCreation()
8383
else if (parameters.Skip(constructorParamsCount).Any(param => !param.HasDefaultValue))
8484
throw RuntimeException.TooFewArgumentsPassed();
8585

86-
CallScriptMethod(methId, ConstructorParams);
86+
if (constructorParamsCount < procParamsCount)
87+
{
88+
var ctorParameters = new IValue[procParamsCount];
89+
ConstructorParams.CopyTo(ctorParameters, 0);
90+
for (int i = constructorParamsCount; i < procParamsCount; i++)
91+
{
92+
ctorParameters[i] = (IValue)parameters[i].DefaultValue;
93+
}
94+
CallScriptMethod(methId, ctorParameters);
95+
}
96+
else
97+
CallScriptMethod(methId, ConstructorParams);
8798
}
8899
else
89100
{

tests/native-lib/test-native-use.os

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
Тесты.Добавить("ТестДолжен_ПроверитьВызовМетодовСПропущеннымиПараметрами");
1515
Тесты.Добавить("ТестДолжен_ПроверитьВызовМетодовСОшибочноПропущеннымиПараметрами");
1616
Тесты.Добавить("ТестДолжен_ПроверитьВызовМетодовСЛишнимиПараметрами");
17-
17+
Тесты.Добавить("ТестДолжен_ПроверитьВызовКонструктораСПараметрамиПоУмолчанию");
18+
1819
Возврат Тесты;
1920

2021
КонецФункции
@@ -86,4 +87,8 @@
8687
КонецПопытки;
8788

8889
юТест.ПроверитьИстину(ОК, "Не было исключения о лишнем параметре."+Ошибка);
89-
КонецПроцедуры
90+
КонецПроцедуры
91+
92+
Процедура ТестДолжен_ПроверитьВызовКонструктораСПараметрамиПоУмолчанию() Экспорт
93+
Сценарий = Новый ПараметрыКонструктораПоУмолчанию("Парам1");
94+
КонецПроцедуры
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#native
2+
3+
Процедура ПриСозданииОбъекта(Параметр1, Параметр2="Парам2")
4+
5+
КонецПроцедуры
6+

0 commit comments

Comments
 (0)