Skip to content

Commit 10de20c

Browse files
committed
правки по замечаниям coderabbit; добавлены тесты
1 parent bdfaf96 commit 10de20c

File tree

4 files changed

+93
-42
lines changed

4 files changed

+93
-42
lines changed

src/OneScript.Core/Exceptions/RuntimeException.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ public static RuntimeException InvalidEncoding(string encoding)
180180
public static RuntimeException IncorrectOffset()
181181
{
182182
return new RuntimeException(
183-
$"Неправильное смещение внутри коллекции",
184-
$"Incorrect offset within collection");
183+
"Неправильное смещение внутри коллекции",
184+
"Incorrect offset within collection");
185185
}
186186
#endregion
187187
}

src/OneScript.Language/Localization/BilingualString.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,6 @@ public static string Localize(string russian, string english)
7373

7474
return russian;
7575
}
76-
77-
public static bool BiEquals(string str, string lang1, string lang2)
78-
{
79-
StringComparison comparison = StringComparison.CurrentCultureIgnoreCase;
80-
return string.Equals(str, lang1, comparison) || string.Equals(str, lang2, comparison);
81-
}
8276
}
8377

8478
public static class BilingualStringExtension

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

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

8-
using System;
9-
using System.Collections.Generic;
10-
using System.Linq;
118
using OneScript.Contexts;
12-
using OneScript.StandardLibrary.Collections.Indexes;
139
using OneScript.Exceptions;
1410
using OneScript.Execution;
11+
using OneScript.Localization;
12+
using OneScript.StandardLibrary.Collections.Exceptions;
13+
using OneScript.StandardLibrary.Collections.Indexes;
1514
using OneScript.Types;
1615
using OneScript.Values;
1716
using ScriptEngine.Machine;
1817
using ScriptEngine.Machine.Contexts;
19-
using OneScript.StandardLibrary.Collections.Exceptions;
20-
using OneScript.Localization;
18+
using System;
19+
using System.Collections.Generic;
20+
using System.Data.Common;
21+
using System.Linq;
2122

2223
namespace OneScript.StandardLibrary.Collections.ValueTable
2324
{
@@ -242,39 +243,51 @@ public int IndexOf(IValue row)
242243
[ContextMethod("Итог", "Total")]
243244
public IValue Total(IValue columnIndex)
244245
{
245-
var Column = Columns.GetColumnByIIndex(columnIndex);
246-
bool has_data = false;
247-
decimal result = 0;
246+
var column = Columns.GetColumnByIIndex(columnIndex);
248247

249-
var types = Column.ValueType.Types();
248+
var types = column.ValueType.Types();
250249
if (types.Count() == 1) // единственный тип
251250
{
252-
foreach (var row in _rows)
253-
{
254-
try
255-
{
256-
result += row.Get(Column).AsNumber();
257-
has_data = true;
258-
}
259-
catch (RuntimeException)
260-
{ }
261-
}
251+
return TotalAllAsNumber(column);
262252
}
263-
else if (types.Count() == 0 // нет типов
253+
254+
if (types.Count() == 0 // нет типов
264255
|| types.Any(x => ((BslTypeValue)x).TypeValue == BasicTypes.Number)) // среди типов есть Число
265256
{
266-
foreach (var row in _rows)
257+
return TotalNumbersOnly(column);
258+
}
259+
260+
// несколько типов и нет типа Число
261+
return ValueFactory.Create();
262+
}
263+
264+
private IValue TotalAllAsNumber(ValueTableColumn column)
265+
{
266+
decimal result = 0;
267+
foreach (var row in _rows)
268+
{
269+
try
267270
{
268-
var current_value = row.Get(Column);
269-
if (current_value.SystemType == BasicTypes.Number)
270-
{
271-
result += current_value.AsNumber();
272-
has_data = true;
273-
}
274-
}
275-
}
276-
277-
return has_data ? ValueFactory.Create(result) : ValueFactory.Create();
271+
result += row.Get(column).AsNumber();
272+
}
273+
catch (RuntimeException)
274+
{ }
275+
}
276+
return ValueFactory.Create(result);
277+
}
278+
279+
private IValue TotalNumbersOnly(ValueTableColumn column)
280+
{
281+
decimal result = 0;
282+
foreach (var row in _rows)
283+
{
284+
var current_value = row.Get(column);
285+
if (current_value.SystemType == BasicTypes.Number)
286+
{
287+
result += current_value.AsNumber();
288+
}
289+
}
290+
return ValueFactory.Create(result);
278291
}
279292

280293
/// <summary>

tests/valuetable.os

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@
6767
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_Строка");
6868
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаЧисло");
6969
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаДата");
70+
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаБезЧисел");
71+
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаЧислоБезЧисел");
72+
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаДатаБезЧисел");
73+
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтогПоКолонкеБезОписанияТипов_БезЧисел");
7074

7175
ВсеТесты.Добавить("ТестДолжен_ПроверитьИсключениеПриНеверноИмениКолонкиВОтборе");
7276
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗапятуюВИменахКолонок_БезПустых");
@@ -287,15 +291,15 @@
287291
Исключение
288292
Ошибка = ИнформацияОбОшибке().Описание;
289293
КонецПопытки;
290-
юТест.ПроверитьРавенство(Ошибка, "Неверное значение аргумента номер 2");
294+
юТест.ПроверитьРавенство(Ошибка, "Неправильное смещение внутри коллекции");
291295

292296
Ошибка = "Сдвиг за пределы вверх";
293297
Попытка
294298
Т.Сдвинуть(1, -3);
295299
Исключение
296300
Ошибка = ИнформацияОбОшибке().Описание;
297301
КонецПопытки;
298-
юТест.ПроверитьРавенство(Ошибка, "Неверное значение аргумента номер 2");
302+
юТест.ПроверитьРавенство(Ошибка, "Неправильное смещение внутри коллекции");
299303

300304
Ошибка = "Сдвиг с неверным индексом";
301305
Попытка
@@ -1121,6 +1125,46 @@
11211125
юТест.ПроверитьРавенство(ТЗ.Итог("Тест"), Неопределено);
11221126
КонецПроцедуры
11231127

1128+
Процедура ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаБезЧисел() Экспорт
1129+
ТЗ = Новый ТаблицаЗначений();
1130+
ТЗ.Колонки.Добавить("Тест", Новый ОписаниеТипов("Строка"));
1131+
ТЗ.Добавить().Тест = "без";
1132+
ТЗ.Добавить().Тест = "числовых";
1133+
ТЗ.Добавить().Тест = "значений";
1134+
1135+
юТест.ПроверитьРавенство(ТЗ.Итог("Тест"), 0);
1136+
КонецПроцедуры
1137+
1138+
Процедура ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаЧислоБезЧисел() Экспорт
1139+
ТЗ = Новый ТаблицаЗначений();
1140+
ТЗ.Колонки.Добавить("Тест", Новый ОписаниеТипов("Строка,Число"));
1141+
ТЗ.Добавить().Тест = "без";
1142+
ТЗ.Добавить().Тест = "числовых";
1143+
ТЗ.Добавить().Тест = "значений";
1144+
1145+
юТест.ПроверитьРавенство(ТЗ.Итог("Тест"), 0);
1146+
КонецПроцедуры
1147+
1148+
Процедура ТестДолжен_ПроверитьИтогПоКолонкеСОписаниемТипов_СтрокаДатаБезЧисел() Экспорт
1149+
ТЗ = Новый ТаблицаЗначений();
1150+
ТЗ.Колонки.Добавить("Тест", Новый ОписаниеТипов("Строка,Дата"));
1151+
ТЗ.Добавить().Тест = "без";
1152+
ТЗ.Добавить().Тест = "числовых";
1153+
ТЗ.Добавить().Тест = "значений";
1154+
1155+
юТест.ПроверитьРавенство(ТЗ.Итог("Тест"), Неопределено);
1156+
КонецПроцедуры
1157+
1158+
Процедура ТестДолжен_ПроверитьИтогПоКолонкеБезОписанияТипов_БезЧисел() Экспорт
1159+
ТЗ = Новый ТаблицаЗначений();
1160+
ТЗ.Колонки.Добавить("Тест");
1161+
ТЗ.Добавить().Тест = "без";
1162+
ТЗ.Добавить().Тест = "числовых";
1163+
ТЗ.Добавить().Тест = "значений";
1164+
1165+
юТест.ПроверитьРавенство(ТЗ.Итог("Тест"), 0);
1166+
КонецПроцедуры
1167+
11241168
Процедура ТестДолжен_ПроверитьИсключениеПриНеверноИмениКолонкиВОтборе() Экспорт
11251169
ТЗ = Новый ТаблицаЗначений();
11261170
ТЗ.Колонки.Добавить("Тест");

0 commit comments

Comments
 (0)