Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/OneScript.StandardLibrary/Json/JSONReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ public void OpenFile(string JSONFileName, IValue encoding = null)
_reader = new JsonReaderInternal(_fileReader)
{
SupportMultipleContent = true
,DateParseHandling = DateParseHandling.None
};
}

Expand All @@ -255,6 +256,7 @@ public void OpenStream(IStreamWrapper streamContext, IValue encoding = null)
_reader = new JsonReaderInternal(new StreamReader(stream, enc, leaveOpen:true))
{
SupportMultipleContent = true
,DateParseHandling = DateParseHandling.None
};
}

Expand Down Expand Up @@ -298,6 +300,7 @@ public void SetString(string JSONString)
_reader = new JsonReaderInternal(new StringReader(JSONString))
{
SupportMultipleContent = true
,DateParseHandling = DateParseHandling.None
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обе эти инициализации во всех трех местах стоит перенести в конструктор JsonReaderInternal

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Исправлено. Ошибки в тестах тоже исправлены

};
}

Expand Down
1 change: 1 addition & 0 deletions tests/json/json-mock_isodate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "lastSignInTime": "2026-05-13T22:51:46Z" }
117 changes: 117 additions & 0 deletions tests/json/test-json_reader.os
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@
СписокТестов.Добавить("Тест_Должен_ПроверитьОткрытиеПотока");
СписокТестов.Добавить("Тест_Должен_ПроверитьПовторноеОткрытиеПотока");
СписокТестов.Добавить("Тест_Должен_ПроверитьСохранениеПотокаПослеЗакрытияЧтения");

СписокТестов.Добавить("Тест_Должен_ОпределятьСтрокуСДатойВФорматеISOКакСтроку");
СписокТестов.Добавить("Тест_Должен_ЧитатьСтрокуСДатойВФорматеISOКакСтроку");
СписокТестов.Добавить("Тест_Должен_ОткрытьПотокЧитаетСтрокуСДатойВФорматеISOКакСтроку");
СписокТестов.Добавить("Тест_Должен_ОткрытьФайлЧитаетСтрокуСДатойВФорматеISOКакСтроку");
СписокТестов.Добавить("Тест_Должен_ЧитатьДатуВФорматеISOКакСтрокуПриИспользованииПрочитатьJSON");

Возврат СписокТестов;

КонецФункции
Expand Down Expand Up @@ -256,3 +263,113 @@

юТест.ПроверитьРавенство(42, Json.Ответ);
КонецПроцедуры

Процедура Тест_Должен_ОпределятьСтрокуСДатойВФорматеISOКакСтроку() Экспорт

// проверяемая строка json
СтрокаJSON = "{ ""lastSignInTime"": ""2026-05-13T22:51:46Z"" }";

// какие типы должны быть при последовательном чтении
ЭталонЗначения = Новый Массив;
ЭталонЗначения.Добавить( ТипЗначенияJSON.НачалоОбъекта );
ЭталонЗначения.Добавить( ТипЗначенияJSON.ИмяСвойства );
ЭталонЗначения.Добавить( ТипЗначенияJSON.Строка );
ЭталонЗначения.Добавить( ТипЗначенияJSON.КонецОбъекта );

// читаем последовательно строку json и собираем типы значений по порядку
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ФактЗначения = Новый Массив;
Пока ЧтениеJSON.Прочитать() Цикл
ФактЗначения.Добавить( ЧтениеJSON.ТипТекущегоЗначения );
КонецЦикла;
ЧтениеJSON.Закрыть();

Для Сч = 0 По ЭталонЗначения.ВГраница() Цикл
юТест.ПроверитьРавенство(ЭталонЗначения[Сч], ФактЗначения[Сч]);
КонецЦикла;

КонецПроцедуры
Comment thread
coderabbitai[bot] marked this conversation as resolved.

Процедура Тест_Должен_ЧитатьСтрокуСДатойВФорматеISOКакСтроку() Экспорт

// проверяемая строка json
СтрокаJSON = "{ ""lastSignInTime"": ""2026-05-13T22:51:46Z"" }";

// читаем последовательно строку json и собираем типы значений по порядку
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ЧтениеJSON.Прочитать();
ЧтениеJSON.Прочитать();
ЧтениеJSON.Прочитать();

ТекущееЗначение = ЧтениеJSON.ТекущееЗначение;

ЧтениеJSON.Закрыть();

юТест.ПроверитьРавенство(ТекущееЗначение, "2026-05-13T22:51:46Z");

КонецПроцедуры

Процедура Тест_Должен_ЧитатьДатуВФорматеISOКакСтрокуПриИспользованииПрочитатьJSON() Экспорт

// проверяемая строка json
СтрокаJSON = "{ ""lastSignInTime"": ""2026-05-13T22:51:46.230Z"" }";

// читаем json в структуру
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Объект = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Ожидаем = Тип("Строка");
Факт = ТипЗнч( Объект.lastSignInTime );
юТест.ПроверитьРавенство(Ожидаем, Факт);
юТест.ПроверитьРавенство(Объект.lastSignInTime, "2026-05-13T22:51:46.230Z");

КонецПроцедуры


Процедура Тест_Должен_ОткрытьПотокЧитаетСтрокуСДатойВФорматеISOКакСтроку() Экспорт

// проверяемая строка json
СтрокаJSON = "{ ""lastSignInTime"": ""2026-05-13T22:51:46Z"" }";

БДД = ПолучитьБуферДвоичныхДанныхИзСтроки(СтрокаJSON);
Поток = Новый ПотокВПамяти(БДД);
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьПоток(Поток);

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ЧтениеJSON.Прочитать();
ЧтениеJSON.Прочитать();
ЧтениеJSON.Прочитать();

ТекущееЗначение = ЧтениеJSON.ТекущееЗначение;
ТипТекущегоЗначения = ЧтениеJSON.ТипТекущегоЗначения;

ЧтениеJSON.Закрыть();

юТест.ПроверитьРавенство(ТекущееЗначение, "2026-05-13T22:51:46Z");
юТест.ПроверитьРавенство(ТипТекущегоЗначения, ТипЗначенияJSON.Строка);

КонецПроцедуры
Comment thread
coderabbitai[bot] marked this conversation as resolved.

Процедура Тест_Должен_ОткрытьФайлЧитаетСтрокуСДатойВФорматеISOКакСтроку() Экспорт

Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("json/json-mock_isodate.json");
ЧтениеJSON.Прочитать();
ЧтениеJSON.Прочитать();
ЧтениеJSON.Прочитать();

ТекущееЗначение = ЧтениеJSON.ТекущееЗначение;
ТипТекущегоЗначения = ЧтениеJSON.ТипТекущегоЗначения;

ЧтениеJSON.Закрыть();

юТест.ПроверитьРавенство(ТекущееЗначение, "2026-05-13T22:51:46Z");
юТест.ПроверитьРавенство(ТипТекущегоЗначения, ТипЗначенияJSON.Строка);

КонецПроцедуры
Comment thread
coderabbitai[bot] marked this conversation as resolved.