Skip to content

Commit 9e820b5

Browse files
committed
проверка правильности индекса колонки
1 parent a1c65e9 commit 9e820b5

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,13 @@ public ValueTableColumn FindColumnByName(string name)
156156
return _columns.Find(column => _namesComparer.Equals(name, column.Name));
157157
}
158158

159-
public ValueTableColumn FindColumnByIndex(int index) => _columns[index];
159+
public ValueTableColumn FindColumnByIndex(int index)
160+
{
161+
if (index < 0 || index >= _columns.Count)
162+
throw RuntimeException.IndexOutOfRange();
163+
return _columns[index];
164+
}
165+
160166

161167
public IEnumerator<ValueTableColumn> GetEnumerator()
162168
{
@@ -209,11 +215,7 @@ public ValueTableColumn GetColumnByIIndex(IValue index)
209215

210216
if (index.SystemType == BasicTypes.Number)
211217
{
212-
int i_index = Decimal.ToInt32(index.AsNumber());
213-
if (i_index < 0 || i_index >= Count())
214-
throw RuntimeException.IndexOutOfRange();
215-
216-
return FindColumnByIndex(i_index);
218+
return FindColumnByIndex(decimal.ToInt32(index.AsNumber()));
217219
}
218220

219221
if (index is ValueTableColumn column)

tests/valuetable.os

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@
8383
ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеНаПоискеИндексаКолонкиСНевернымПримитивнымТипом");
8484
ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеНаПоискеИндексаКолонкиСНевернымОбъектнымТипом");
8585

86+
ВсеТесты.Добавить("ТестДолжен_ПроверитьИсключениеПолученияКолонкиСНевернымНомером");
87+
8688

8789
Возврат ВсеТесты;
8890

@@ -1288,3 +1290,30 @@
12881290

12891291
ВызватьИсключение "Должно было быть выдано исключение, но его не было";
12901292
КонецПроцедуры
1293+
1294+
Процедура ТестДолжен_ПроверитьИсключениеПолученияКолонкиСНевернымНомером() Экспорт
1295+
ТЗ = Новый ТаблицаЗначений();
1296+
ТЗ.Колонки.Добавить("Тест");
1297+
СтрокаТЗ = ТЗ.Добавить();
1298+
1299+
БылоИсключение = Ложь;
1300+
Попытка
1301+
Рез = СтрокаТЗ.Получить(-1);
1302+
Исключение
1303+
Ошибка = ИнформацияОбОшибке().Описание;
1304+
юТест.ПроверитьНеРавенство(Найти(Ошибка,"Значение индекса выходит за пределы"), 0, "Неверный вид ошибки: "+Ошибка);
1305+
БылоИсключение = Истина;
1306+
КонецПопытки;
1307+
юТест.ПроверитьИстину(БылоИсключение, "Получение колонки с неверным номером");
1308+
1309+
БылоИсключение = Ложь;
1310+
Попытка
1311+
Рез = СтрокаТЗ[-1];
1312+
Исключение
1313+
Ошибка = ИнформацияОбОшибке().Описание;
1314+
юТест.ПроверитьНеРавенство(Найти(Ошибка,"Значение индекса выходит за пределы"), 0, "Неверный вид ошибки: "+Ошибка);
1315+
БылоИсключение = Истина;
1316+
КонецПопытки;
1317+
юТест.ПроверитьИстину(БылоИсключение, "Получение колонки по неверному индексу");
1318+
1319+
КонецПроцедуры

0 commit comments

Comments
 (0)