Skip to content

Commit a029e30

Browse files
committed
свойство Параметры; ПараметрыЗаписиJSON по умолчанию +тесты
1 parent f4a1a41 commit a029e30

3 files changed

Lines changed: 68 additions & 26 deletions

File tree

src/OneScript.StandardLibrary/Json/JSONWriter.cs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public class JSONWriter : AutoContext<JSONWriter>, IDisposable
3636
private bool _escapeNonAscii;
3737

3838
public JSONWriter()
39-
{
40-
39+
{
40+
_settings = new JSONWriterSettings();
4141
}
4242

4343
/// <summary>
@@ -85,9 +85,17 @@ private void SetOptions(JSONWriterSettings settings)
8585
_writer.QuoteChar = '\'';
8686
}
8787

88-
_writer.IndentChar = !string.IsNullOrEmpty(_settings.PaddingSymbols) ? _settings.PaddingSymbols[0] : ' ';
89-
_writer.Indentation = !string.IsNullOrEmpty(_settings.PaddingSymbols) ? 1 : INDENT_SIZE;
90-
_writer.Formatting = Formatting.Indented;
88+
if (string.IsNullOrEmpty(_settings.PaddingSymbols))
89+
{
90+
_writer.IndentChar = ' ';
91+
_writer.Indentation = INDENT_SIZE;
92+
}
93+
else
94+
{
95+
_writer.IndentChar = _settings.PaddingSymbols[0];
96+
_writer.Indentation = 1;
97+
}
98+
_writer.Formatting = Formatting.Indented;
9199

92100
if (_settings.EscapeCharacters != JSONCharactersEscapeModeEnum.None)
93101
{
@@ -189,6 +197,7 @@ void SetNewLineChars(TextWriter textWriter)
189197
}
190198
}
191199
}
200+
192201
[ScriptConstructor]
193202
public static JSONWriter Constructor()
194203
{
@@ -200,11 +209,7 @@ public static JSONWriter Constructor()
200209
/// </summary>
201210
/// <value>ПараметрыЗаписиJSON (JSONWriterSettings)</value>
202211
[ContextProperty("Параметры", "Settings")]
203-
public IValue Settings
204-
{
205-
get { throw new NotImplementedException(); }
206-
207-
}
212+
public IValue Settings => _settings;
208213

209214
/// <summary>
210215
/// Показывает, будет ли проводиться проверка правильности структуры записываемого JSON объекта. В случае обнаружение ошибки, будет сгенерировано исключение. Например: при попытке записать значение без имени вне массива или записать окончание объекта без начала. Установка данного свойства не имеет немедленного эффекта. Установленное значение свойства будет использовано только после открытия файла или установки строки.

src/OneScript.StandardLibrary/Json/JSONWriterSettings.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public JSONWriterSettings(JSONLineBreakEnum NewLines = JSONLineBreakEnum.Auto, s
6161
/// <param name="paddingSymbols">
6262
/// Определяет символы отступа, используемые при записи данных JSON.
6363
/// Применяется только, если значение ПереносСтрокJSON отлично от Нет.
64-
/// Значение по умолчанию: " ". </param>
64+
/// Значение по умолчанию: "". </param>
6565
/// <param name="useDoubleQuotes">
6666
/// Определяет, будут ли при записи имена свойств JSON записываться в двойных кавычках.
6767
/// Значение по умолчанию: Истина. </param>
@@ -86,8 +86,8 @@ public JSONWriterSettings(JSONLineBreakEnum NewLines = JSONLineBreakEnum.Auto, s
8686
/// Значение по умолчанию: Ложь. </param>
8787
[ScriptConstructor(Name = "По описанию параметров записи")]
8888
public static JSONWriterSettings ParametrizedConstructor(
89-
JSONLineBreakEnum newLines = JSONLineBreakEnum.None,
90-
string paddingSymbols = null,
89+
JSONLineBreakEnum newLines = JSONLineBreakEnum.Auto,
90+
string paddingSymbols = "",
9191
bool useDoubleQuotes = true,
9292
JSONCharactersEscapeModeEnum escapeCharacters = JSONCharactersEscapeModeEnum.None,
9393
bool escapeAngleBrackets = false,
@@ -147,7 +147,7 @@ public static JSONWriterSettings Constructor()
147147
/// </summary>
148148
/// <value>Строка (String)</value>
149149
[ContextProperty("СимволыОтступа", "PaddingSymbols")]
150-
public string PaddingSymbols => _paddingSymbols;
150+
public string PaddingSymbols => _paddingSymbols ?? string.Empty;
151151

152152

153153
/// <summary>

tests/json/test-json_writer.os

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
СписокТестов = Новый Массив;
1111

12+
СписокТестов.Добавить("Тест_Должен_ПроверитьПараметрыЗаписиJSONПоУмолчанию");
13+
СписокТестов.Добавить("Тест_Должен_ПроверитьУстановленныеПараметрыПоУмолчанию");
1214
СписокТестов.Добавить("Тест_Должен_СверитьСтрокуСоСпецСимволами");
1315
СписокТестов.Добавить("Тест_Должен_СверитьСтрокуСЭкранированнымиКириллическимиСимволами");
1416
СписокТестов.Добавить("Тест_Должен_СверитьСтрокуСЭкранированнымиСимволами_БезПараметров");
@@ -30,7 +32,10 @@
3032
Процедура Тест_Должен_СверитьХешСуммуСгенерированнойСтрокиJSON() Экспорт
3133

3234
Запись = Новый ЗаписьJson();
33-
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows));
35+
Параметры = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows);
36+
юТест.ПроверитьРавенство(ПереносСтрокJSON.Windows, Параметры.ПереносСтрок, "ПереносСтрок.Windows");
37+
38+
Запись.УстановитьСтроку(Параметры);
3439
Запись.ЗаписатьНачалоОбъекта();
3540
Запись.ЗаписатьИмяСвойства("firstName");
3641
Запись.ЗаписатьЗначение("Иван");
@@ -60,7 +65,7 @@
6065
Запись.ЗаписатьКонецОбъекта();
6166

6267
Текст = Запись.Закрыть();
63-
68+
6469
Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);
6570
Хеширование.Добавить(Текст);
6671

@@ -70,24 +75,56 @@
7075

7176
Процедура Тест_Должен_СверитьСтрокуСЭкранированнымиКириллическимиСимволами() Экспорт
7277

73-
ЗаписьJSON = Новый ЗаписьJSON;
74-
Параметры = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, , , ЭкранированиеСимволовJSON.СимволыВнеASCII);
75-
76-
ЗаписьJSON.УстановитьСтроку(Параметры);
78+
ЗаписьJSON = Новый ЗаписьJSON;
79+
Параметры = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, , , ЭкранированиеСимволовJSON.СимволыВнеASCII);
80+
81+
ЗаписьJSON.УстановитьСтроку(Параметры);
7782

78-
ЗаписатьJSON(ЗаписьJSON, "Символы кириллицы");
83+
ЗаписатьJSON(ЗаписьJSON, "Символы кириллицы");
7984

80-
юТест.ПроверитьРавенство(ЗаписьJSON.Закрыть(), """\\u0421\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b \\u043a\\u0438\\u0440\\u0438\\u043b\\u043b\\u0438\\u0446\\u044b""");
85+
юТест.ПроверитьРавенство(ЗаписьJSON.Закрыть(), """\\u0421\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b \\u043a\\u0438\\u0440\\u0438\\u043b\\u043b\\u0438\\u0446\\u044b""");
8186

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

8489
Процедура Тест_Должен_СверитьСтрокуСоСпецСимволами() Экспорт
90+
91+
ЗаписьJSON = Новый ЗаписьJSON;
92+
ЗаписьJSON.УстановитьСтроку();
93+
94+
ЗаписатьJSON(ЗаписьJSON, Символ(1) + Символ(31));
95+
юТест.ПроверитьРавенство(ЗаписьJSON.Закрыть(), """\u0001\u001f""");
96+
97+
КонецПроцедуры
98+
99+
Процедура Тест_Должен_ПроверитьПараметрыЗаписиJSONПоУмолчанию() Экспорт
100+
Параметры = Новый ПараметрыЗаписиJSON;
101+
102+
юТест.ПроверитьРавенство(ПереносСтрокJSON.Авто, Параметры.ПереносСтрок, "ПереносСтрок");
103+
юТест.ПроверитьРавенство("", Параметры.СимволыОтступа, "СимволыОтступа");
104+
юТест.ПроверитьИстину(Параметры.ИспользоватьДвойныеКавычки, "ИспользоватьДвойныеКавычки");
105+
юТест.ПроверитьРавенство( ЭкранированиеСимволовJSON.Нет, Параметры.ЭкранированиеСимволов, "ЭкранированиеСимволов");
106+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьУгловыеСкобки, "ЭкранироватьУгловыеСкобки");
107+
юТест.ПроверитьИстину(Параметры.ЭкранироватьРазделителиСтрок, "ЭкранироватьРазделителиСтрок");
108+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьАмперсанд, "ЭкранироватьАмперсанд");
109+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьОдинарныеКавычки, "ЭкранироватьОдинарныеКавычки");
110+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьСлеш, "ЭкранироватьСлеш");
85111

86-
ЗаписьJSON = Новый ЗаписьJSON;
87-
ЗаписьJSON.УстановитьСтроку();
112+
КонецПроцедуры
113+
114+
Процедура Тест_Должен_ПроверитьУстановленныеПараметрыПоУмолчанию() Экспорт
115+
ЗаписьJSON = Новый ЗаписьJSON;
116+
Параметры = ЗаписьJSON.Параметры;
117+
ЗаписьJSON.Закрыть();
88118

89-
ЗаписатьJSON(ЗаписьJSON, Символ(1) + Символ(31));
90-
юТест.ПроверитьРавенство(ЗаписьJSON.Закрыть(), """\u0001\u001f""");
119+
юТест.ПроверитьРавенство(ПереносСтрокJSON.Авто, Параметры.ПереносСтрок, "ПереносСтрок");
120+
юТест.ПроверитьРавенство("", Параметры.СимволыОтступа, "СимволыОтступа");
121+
юТест.ПроверитьИстину(Параметры.ИспользоватьДвойныеКавычки, "ИспользоватьДвойныеКавычки");
122+
юТест.ПроверитьРавенство( ЭкранированиеСимволовJSON.Нет, Параметры.ЭкранированиеСимволов, "ЭкранированиеСимволов");
123+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьУгловыеСкобки, "ЭкранироватьУгловыеСкобки");
124+
юТест.ПроверитьИстину(Параметры.ЭкранироватьРазделителиСтрок, "ЭкранироватьРазделителиСтрок");
125+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьАмперсанд, "ЭкранироватьАмперсанд");
126+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьОдинарныеКавычки, "ЭкранироватьОдинарныеКавычки");
127+
юТест.ПроверитьЛожь(Параметры.ЭкранироватьСлеш, "ЭкранироватьСлеш");
91128

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

0 commit comments

Comments
 (0)