/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
v2.0-alpha-1
tests/json/json_reader.os
120 строк
7 KB
alexkmbk
Реализован метод глобального контекста ПрочитатьJson (ReadJson).
12 авг 2018, 08:02
12 авг 2018, 08:02
5bad792
Код
Авторство
О чём код?
#Использовать asserts Перем юТест; Перем ТекстПроверки; Функция ПолучитьСписокТестов(Тестирование) Экспорт юТест = Тестирование; СписокТестов = Новый Массив; СписокТестов.Добавить("Тест_Должен_СверитьХешСуммуРезультатаПарсингаJSON"); СписокТестов.Добавить("Тест_Должен_СверитьХешСуммуРезультатаПарсингаJSONВСтруктуру"); СписокТестов.Добавить("Тест_Должен_СверитьХешСуммуРезультатаПарсингаJSONМассива"); СписокТестов.Добавить("Тест_Должен_ПроверитьПолучениеВсехЭлементовПеречисленияТипЗначенияJSON"); СписокТестов.Добавить("Тест_Должен_СверитьСвойствоСДвойнымиКавычками"); Возврат СписокТестов; КонецФункции Процедура Тест_Должен_ПроверитьПолучениеВсехЭлементовПеречисленияТипЗначенияJSON() Экспорт юТест.ПроверитьРавенство("Null", Строка(ТипЗначенияJSON.Null)); юТест.ПроверитьРавенство("Комментарий", Строка(ТипЗначенияJSON.Комментарий)); юТест.ПроверитьРавенство("ИмяСвойства", Строка(ТипЗначенияJSON.ИмяСвойства)); юТест.ПроверитьРавенство("КонецМассива", Строка(ТипЗначенияJSON.КонецМассива)); юТест.ПроверитьРавенство("КонецОбъекта", Строка(ТипЗначенияJSON.КонецОбъекта)); юТест.ПроверитьРавенство("НачалоМассива", Строка(ТипЗначенияJSON.НачалоМассива)); юТест.ПроверитьРавенство("НачалоОбъекта", Строка(ТипЗначенияJSON.НачалоОбъекта)); юТест.ПроверитьРавенство("Ничего", Строка(ТипЗначенияJSON.Ничего)); юТест.ПроверитьРавенство("Строка", Строка(ТипЗначенияJSON.Строка)); юТест.ПроверитьРавенство("Число", Строка(ТипЗначенияJSON.Число)); КонецПроцедуры Процедура Тест_Должен_СверитьСвойствоСДвойнымиКавычками() Экспорт СтруктураДанных = ПолучитьСтруктуруДанных("json\json-mock_struct.json"); юТест.ПроверитьРавенство(СтруктураДанных.lastName, """Иванов"""); КонецПроцедуры Процедура Тест_Должен_СверитьХешСуммуРезультатаПарсингаJSON() Экспорт СтруктураДанных = ПолучитьСтруктуруДанных("json\json-mock.json", Истина); юТест.ПроверитьРавенство(РассчитатьХешСумму(СтруктураДанных), 4014703816); КонецПроцедуры Процедура Тест_Должен_СверитьХешСуммуРезультатаПарсингаJSONВСтруктуру() Экспорт СтруктураДанных = ПолучитьСтруктуруДанных("json\json-mock_struct.json", Ложь); юТест.ПроверитьРавенство(РассчитатьХешСумму(СтруктураДанных), 2800700943); КонецПроцедуры Процедура Тест_Должен_СверитьХешСуммуРезультатаПарсингаJSONМассива() Экспорт СтруктураДанных = ПолучитьСтруктуруДанных("json\json-mock_array.json", Истина); юТест.ПроверитьРавенство(РассчитатьХешСумму(СтруктураДанных), 3633637665); КонецПроцедуры Функция ЗначениеВСтроку(Значение, Уровень = 0) Текст = ""; Отступы = ""; Для Счетчик = 1 По Уровень Цикл Отступы = Отступы + Символы.Таб; КонецЦикла; Если ТипЗнч(Значение) = Тип("Массив") Тогда Для Каждого Элемент Из Значение Цикл Если ТипЗнч(Элемент) = Тип("Структура") ИЛИ ТипЗнч(Элемент) = Тип("Соответствие") ИЛИ ТипЗнч(Элемент) = Тип("Массив") Тогда Текст = Текст + ЗначениеВСтроку(Элемент, Уровень + 1); Иначе Текст = Текст + Отступы + ?(Элемент = Undefined, "Undefined", Элемент) + Символы.ПС; КонецЕсли; КонецЦикла; Иначе Для Каждого ТекСтрока Из Значение Цикл Если ТипЗнч(ТекСтрока.Значение) = Тип("Структура") ИЛИ ТипЗнч(ТекСтрока.Значение) = Тип("Соответствие") ИЛИ ТипЗнч(ТекСтрока.Значение) = Тип("Массив") Тогда Текст = Текст + Отступы + ТекСтрока.Ключ + ":" + Символы.ПС + ЗначениеВСтроку(ТекСтрока.Значение, Уровень + 1); Иначе Текст = Текст + Отступы + ТекСтрока.Ключ + ":" + ?(ТекСтрока.Значение = Undefined, "Undefined", ТекСтрока.Значение) + Символы.ПС; КонецЕсли; КонецЦикла; КонецЕсли; Возврат Текст; КонецФункции Функция РассчитатьХешСумму(СтруктураДанных) Текст = ЗначениеВСтроку(СтруктураДанных); Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32); Хеширование.Добавить(Текст); Возврат Хеширование.ХешСумма; КонецФункции Функция ПолучитьСтруктуруДанных(ПутьКФайлу, КакСоответствие = Ложь) Текст = Новый ТекстовыйДокумент(); Текст.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8); Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Текст.ПолучитьТекст()); Результат = ПрочитатьJSON(Чтение, КакСоответствие); Возврат Результат; КонецФункции