Skip to content

Commit 0ca87f7

Browse files
committed
сохранять поток при закрытии чтения; убрана ненужная проверка
1 parent 0297f46 commit 0ca87f7

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

src/OneScript.StandardLibrary/Json/JSONReader.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,7 @@ public void Close()
244244
[ContextMethod("ОткрытьФайл", "OpenFile")]
245245
public void OpenFile(string JSONFileName, IValue encoding = null)
246246
{
247-
if (IsOpen())
248-
Close();
247+
Close();
249248

250249
StreamReader _fileReader;
251250

@@ -279,13 +278,12 @@ public void OpenFile(string JSONFileName, IValue encoding = null)
279278
[ContextMethod("ОткрытьПоток", "OpenStream")]
280279
public void OpenStream(IStreamWrapper streamContext, IValue encoding = null)
281280
{
282-
if (IsOpen())
283-
Close();
281+
Close();
284282

285283
var stream = streamContext.GetUnderlyingStream();
286284
var enc = encoding != null ? TextEncodingEnum.GetEncoding(encoding) : System.Text.Encoding.UTF8;
287285

288-
_reader = new JsonReaderInternal(new StreamReader(stream, enc))
286+
_reader = new JsonReaderInternal(new StreamReader(stream, enc, leaveOpen:true))
289287
{
290288
SupportMultipleContent = true
291289
};
@@ -333,8 +331,7 @@ public bool Read()
333331
[ContextMethod("УстановитьСтроку", "SetString")]
334332
public void SetString(string JSONString)
335333
{
336-
if (IsOpen())
337-
Close();
334+
Close();
338335

339336
_reader = new JsonReaderInternal(new StringReader(JSONString))
340337
{

tests/json/test-json_reader.os

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
СписокТестов.Добавить("Тест_Должен_ПроверитьПропускОбъектаСВложениями");
2727

2828
СписокТестов.Добавить("Тест_Должен_ПроверитьОткрытиеПотока");
29+
СписокТестов.Добавить("Тест_Должен_ПроверитьПовторноеОткрытиеПотока");
30+
СписокТестов.Добавить("Тест_Должен_ПроверитьСохранениеПотокаПослеЗакрытияЧтения");
2931
Возврат СписокТестов;
3032

3133
КонецФункции
@@ -231,3 +233,25 @@
231233

232234
юТест.ПроверитьРавенство(42, Json.Ответ);
233235
КонецПроцедуры
236+
237+
Процедура Тест_Должен_ПроверитьПовторноеОткрытиеПотока() Экспорт
238+
БДД = ПолучитьБуферДвоичныхДанныхИзСтроки("{""ответ"":42}");
239+
Поток = Новый ПотокВПамяти(БДД);
240+
Чтение = Новый ЧтениеJSON;
241+
Чтение.ОткрытьПоток(Поток);
242+
Чтение.ОткрытьПоток(Поток); // повторно
243+
Json = ПрочитатьJSON(Чтение);
244+
245+
юТест.ПроверитьРавенство(42, Json.Ответ);
246+
КонецПроцедуры
247+
248+
Процедура Тест_Должен_ПроверитьСохранениеПотокаПослеЗакрытияЧтения() Экспорт
249+
БДД = ПолучитьБуферДвоичныхДанныхИзСтроки("{""ответ"":42}");
250+
Поток = Новый ПотокВПамяти(БДД);
251+
Чтение = Новый ЧтениеJSON;
252+
Чтение.Закрыть();
253+
Чтение.ОткрытьПоток(Поток); // Поток должен остаться открытым
254+
Json = ПрочитатьJSON(Чтение);
255+
256+
юТест.ПроверитьРавенство(42, Json.Ответ);
257+
КонецПроцедуры

0 commit comments

Comments
 (0)