/
smwwiki
/
OneScript_fork
Обзор
Документация
Войти
/
smwwiki
/
OneScript_fork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
tests/global-json.os
362 строки
20 KB
Michael Rybakin
fix #1373, #1404 для v2: чтение JSON
23 май 2024, 17:03
23 май 2024, 17:03
c6c3205
Код
Авторство
О чём код?
Перем юТест; Функция ПолучитьСписокТестов(Тестирование) Экспорт юТест = Тестирование; СписокТестов = Новый Массив; СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеМассива"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеСтруктуры"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеСоответствия"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеЧисла"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеСтроки"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеПустогоМассива"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеПустойСтруктуры"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеПустогоСоответствия"); СписокТестов.Добавить("Тест_ДолженПроверить_ПолучениеВложенныхМассивов"); // issue #1373 СписокТестов.Добавить("Тест_ДолженПроверить_ОднострочныйКомментарийВКонцеМассива"); СписокТестов.Добавить("Тест_ДолженПроверить_ОднострочныйКомментарийВнутриСтуктуры"); СписокТестов.Добавить("Тест_ДолженПроверить_ОднострочныйКомментарийВНачалеМассива"); СписокТестов.Добавить("Тест_ДолженПроверить_МногострочныйКомментарийВнутриСтуктуры"); СписокТестов.Добавить("Тест_ДолженПроверить_МногострочныйКомментарийВнутриМассива"); СписокТестов.Добавить("Тест_ДолженПроверить_ПродолжениеЧтения"); СписокТестов.Добавить("Тест_ДолженПроверить_ПродолжениеЧтенияСИзменениемСтруктуры"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ДляUndefined"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриНезакрытомМассиве"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриНезакрытомОбъекте"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриНезакрытомВложенномМассиве"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриНезакрытомВложенномОбъекте"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриПропущенномЗначенииСвойства"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриНезакрытомКомментарии"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриНедопустимомКлючеСтруктуры"); СписокТестов.Добавить("Тест_ДолженПроверить_ПроизвольныйКлючСоответствия"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриПустомЗначенииВнутриМассива"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриПустомЗначенииВКонцеМассива"); СписокТестов.Добавить("Тест_ДолженВызватьОшибку_ПриПустомЗначенииСвойства"); СписокТестов.Добавить("Тест_ДолженПроверить_ЗапятуюВКонцеМассива"); СписокТестов.Добавить("Тест_ДолженПроверить_ЗапятуюВКонцеОбъекта"); Возврат СписокТестов; КонецФункции Функция ПрочитатьJSONИзСтроки(Стр, Знач ВСоответствие=Ложь) Чтение = Новый ЧтениеJSON(); Чтение.УстановитьСтроку(Стр); Результат = ПрочитатьJSON(Чтение, ВСоответствие); Чтение.Закрыть(); Возврат Результат; КонецФункции Процедура Тест_ДолженПроверить_ПолучениеМассива() Экспорт Текст = "[123,456,789]"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(Результат)); юТест.ПроверитьРавенство(3, Результат.Количество()); юТест.ПроверитьРавенство(456, Результат[1]); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеСтруктуры() Экспорт Текст = "{""Поле1"":123,""Поле2"":456}"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Результат) ); юТест.ПроверитьРавенство(2, Результат.Количество()); юТест.ПроверитьРавенство(456, Результат.Поле2); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеСоответствия() Экспорт Текст = "{""Поле1"":123,""Поле2"":456}"; Результат = ПрочитатьJSONИзСтроки(Текст,Истина); юТест.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Результат)); юТест.ПроверитьРавенство(2, Результат.Количество()); юТест.ПроверитьРавенство(456, Результат["Поле2"]); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеЧисла() Экспорт Текст = "321"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(Тип("Число"), ТипЗнч(Результат)); юТест.ПроверитьРавенство(321, Результат); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеСтроки() Экспорт Текст = """абв"""; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(ТипЗнч(Результат), Тип("Строка")); юТест.ПроверитьРавенство(Результат, "абв"); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеПустогоМассива() Экспорт Текст = "[]"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(Результат) ); юТест.ПроверитьРавенство(0, Результат.Количество()); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеПустойСтруктуры() Экспорт Текст = "{}"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Результат)); юТест.ПроверитьРавенство(Результат.Количество(), 0); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеПустогоСоответствия() Экспорт Текст = "{}"; Результат = ПрочитатьJSONИзСтроки(Текст,Истина); юТест.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Результат)); юТест.ПроверитьРавенство(Результат.Количество(), 0); КонецПроцедуры Процедура Тест_ДолженПроверить_ПолучениеВложенныхМассивов() Экспорт Текст = "[[123,456],789,[-3,-2,""-0""],{""Ф"":[""Ы"",222]}]"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(Результат)); юТест.ПроверитьРавенство(4, Результат.Количество()); юТест.ПроверитьРавенство(Тип("Число"), ТипЗнч(Результат[1])); юТест.ПроверитьРавенство(789, Результат[1]); юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(Результат[2])); юТест.ПроверитьРавенство(3, Результат[2].Количество()); юТест.ПроверитьРавенство("-0", Результат[2][2]); юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Результат[3])); КонецПроцедуры Процедура Тест_ДолженПроверить_ОднострочныйКомментарийВКонцеМассива() Экспорт Текст = "[ |{ | ""NAME"": ""n1"", | ""Method"": ""m1"", | ""PATH"": ""p1"" |}, |{ | ""NAME"": ""n2"", | //""Method"": ""m2"", | ""PATH"": ""p2"" |} |//}, |//{ |// ""NAME"": """", |]"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(2, Результат.Количество()); юТест.ПроверитьРавенство("p2", Результат[1].PATH); КонецПроцедуры Процедура Тест_ДолженПроверить_ОднострочныйКомментарийВнутриСтуктуры() Экспорт Текст = " |{ | ""test"": //fail | ""pass"" |}"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство("pass", Результат.test); КонецПроцедуры Процедура Тест_ДолженПроверить_ОднострочныйКомментарийВНачалеМассива() Экспорт Текст = " |[// !!! |""fail"",""pass""] |"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство("pass", Результат[1]); КонецПроцедуры Процедура Тест_ДолженПроверить_МногострочныйКомментарийВнутриСтуктуры() Экспорт Текст = " |{ | ""test"": /*fail | ""??""*/ ""ok"" |}"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство("ok", Результат.test); КонецПроцедуры Процедура Тест_ДолженПроверить_МногострочныйКомментарийВнутриМассива() Экспорт Текст = " |[ | ""test"", /*fail | ""??""]*/ ""ok"" |]"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство("ok", Результат[1]); КонецПроцедуры Процедура Тест_ДолженПроверить_ПродолжениеЧтения() Экспорт Текст = "[123,456] {""аб"":""вг"",""де"":""жз"",""ик"":""лм""}"; Чтение = Новый ЧтениеJSON(); Чтение.УстановитьСтроку(Текст); Результат1 = ПрочитатьJSON(Чтение); Результат2 = ПрочитатьJSON(Чтение); Чтение.Закрыть(); юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(Результат1)); юТест.ПроверитьРавенство(2, Результат1.Количество()); юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Результат2)); юТест.ПроверитьРавенство(3, Результат2.Количество()); КонецПроцедуры Процедура Тест_ДолженПроверить_ПродолжениеЧтенияСИзменениемСтруктуры() Экспорт Текст = "{""аб"":""вг"",""де"":""жз""} {""ик"":""лм""}"; Чтение = Новый ЧтениеJSON(); Чтение.УстановитьСтроку(Текст); Результат1 = ПрочитатьJSON(Чтение); Результат2 = ПрочитатьJSON(Чтение,Истина); Чтение.Закрыть(); юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Результат1)); юТест.ПроверитьРавенство(2, Результат1.Количество()); юТест.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Результат2)); юТест.ПроверитьРавенство(1, Результат2.Количество()); юТест.ПроверитьРавенство("лм", Результат2["ик"]); КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ДляUndefined() Экспорт Текст = "[123,undefined,456]"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриНезакрытомМассиве() Экспорт Текст = "[[[123,456]]"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриНезакрытомОбъекте() Экспорт Текст = "{""aбв"":456"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриНезакрытомВложенномМассиве() Экспорт Текст = "{""aбв"":[456,789}"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриНезакрытомВложенномОбъекте() Экспорт Текст = "[{""aбв"":456]"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриПропущенномЗначенииСвойства() Экспорт Текст = "{""aбв"":}"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриНезакрытомКомментарии() Экспорт Текст = "[123,456 /*]"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриНедопустимомКлючеСтруктуры() Экспорт Текст = "{""123"":""456""}"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженПроверить_ПроизвольныйКлючСоответствия() Экспорт Текст = "{""%/$!"":""456""}"; Результат = ПрочитатьJSONИзСтроки(Текст, Истина); юТест.ПроверитьРавенство("456", Результат["%/$!"]); КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриПустомЗначенииВнутриМассива() Экспорт Текст = "[123,,456]"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриПустомЗначенииВКонцеМассива() Экспорт Текст = "[123,456,,]"; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженВызватьОшибку_ПриПустомЗначенииСвойства() Экспорт Текст = "{""аб"": , ""еж"":""кл""}";; Попытка Результат = ПрочитатьJSONИзСтроки(Текст); Исключение Возврат; КонецПопытки; ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры Процедура Тест_ДолженПроверить_ЗапятуюВКонцеМассива() Экспорт Текст = "[123,456,789,]"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(3, Результат.Количество()); юТест.ПроверитьРавенство(789, Результат[2]); КонецПроцедуры Процедура Тест_ДолженПроверить_ЗапятуюВКонцеОбъекта() Экспорт Текст = "{""аб"":""гд"",""еж"":""кл"",}"; Результат = ПрочитатьJSONИзСтроки(Текст); юТест.ПроверитьРавенство(2, Результат.Количество()); юТест.ПроверитьРавенство("кл", Результат["еж"]); КонецПроцедуры