File tree Expand file tree Collapse file tree 4 files changed +44
-0
lines changed
OneScript.StandardLibrary/Tasks Expand file tree Collapse file tree 4 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -111,6 +111,7 @@ public void ExecuteOnCurrentThread()
111111 catch ( ScriptException exception )
112112 {
113113 State = TaskStateEnum . CompletedWithErrors ;
114+ exception . RuntimeSpecificInfo = MachineInstance . Current . GetExecutionFrames ( ) ;
114115 ExceptionInfo = new ExceptionInfoContext ( exception ) ;
115116 }
116117 }
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ This Source Code Form is subject to the terms of the
88using System . Collections . Generic ;
99using System . Linq ;
1010using OneScript . Contexts ;
11+ using OneScript . Exceptions ;
1112
1213namespace ScriptEngine . Machine . Contexts
1314{
@@ -30,6 +31,11 @@ internal StackTraceCollectionContext(IEnumerable<ExecutionFrameInfo> frames)
3031 } ) . ToList ( ) ;
3132 }
3233
34+ /// <summary>
35+ /// Возвращает количество кадров в стеке вызовов
36+ /// </summary>
37+ /// <returns>Число - Количество кадров в стеке вызовов</returns>
38+ [ ContextMethod ( "Количество" , "Count" ) ]
3339 public override int Count ( )
3440 {
3541 return _frames . Count ;
@@ -39,5 +45,23 @@ public override IEnumerator<StackTraceItemContext> GetEnumerator()
3945 {
4046 return _frames . GetEnumerator ( ) ;
4147 }
48+
49+ public override bool IsIndexed => true ;
50+
51+ public override IValue GetIndexedValue ( IValue index )
52+ {
53+ var idx = ( int ) index . AsNumber ( ) ;
54+
55+ if ( idx < 0 || idx >= Count ( ) )
56+ throw IndexOutOfBoundsException ( ) ;
57+
58+ return _frames [ idx ] ;
59+ }
60+
61+ private static RuntimeException IndexOutOfBoundsException ( )
62+ {
63+ return new RuntimeException ( "Значение индекса выходит за пределы диапазона" ) ;
64+ }
65+
4266 }
4367}
Original file line number Diff line number Diff line change @@ -2451,6 +2451,7 @@ private IValue PopRawValue()
24512451
24522452 public IList < ExecutionFrameInfo > GetExecutionFrames ( )
24532453 {
2454+ CreateFullCallstack ( ) ;
24542455 return _fullCallstackCache ;
24552456 }
24562457
Original file line number Diff line number Diff line change 2424 ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВозвращаетсяРезультатДелегата" );
2525 ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоРаботаетБлокировка" );
2626 ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКодМожетОпределитьИДЗадания" );
27+ ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоВИнформацииОбОшибкеЕстьСтекВызовов" );
2728 ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоОбработчикиСобытийВызываютсяВФоновомЗадании" );
2829
2930 Возврат ВсеТесты;
271272
272273КонецПроцедуры
273274
275+ Процедура ТестДолжен_ПроверитьЧтоВИнформацииОбОшибкеЕстьСтекВызовов () Экспорт
276+
277+ Задание = ФоновыеЗадания .Выполнить(ЭтотОбъект, "ПроцедураСИсключением" );
278+ Задание.ОжидатьЗавершения();
279+
280+ СтекВызовов = Задание.ИнформацияОбОшибке.ПолучитьСтекВызовов();
281+
282+ юТест.ПроверитьТип(СтекВызовов, "КоллекцияКадровСтекаВызовов" );
283+
284+ юТест.ПроверитьРавенство(СтекВызовов.Количество(), 1 );
285+
286+ юТест.ПроверитьРавенство(СтекВызовов[0 ].Метод, "ПроцедураСИсключением" );
287+ юТест.ПроверитьЗаполненность(СтекВызовов[0 ].НомерСтроки);
288+ юТест.ПроверитьРавенство(СтекВызовов[0 ].ИмяМодуля, ТекущийСценарий().Источник);
289+
290+ КонецПроцедуры
291+
274292Процедура ТестДолжен_ПроверитьЧтоОбработчикиСобытийВызываютсяВФоновомЗадании () Экспорт
275293
276294 СобытиеВызвано = Ложь ;
You can’t perform that action at this time.
0 commit comments