You've already forked SmartConfigurator
mirror of
https://github.com/ret-Phoenix/SmartConfigurator.git
synced 2026-06-16 00:57:28 +02:00
265 lines
14 KiB
Plaintext
265 lines
14 KiB
Plaintext
///////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Тест для парсера JSON
|
|
//
|
|
///////////////////////////////////////////////////////////////////////
|
|
#Использовать asserts
|
|
|
|
#Использовать ".."
|
|
|
|
Перем юТест;
|
|
Перем _преобразовательJSON;
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Программный интерфейс
|
|
|
|
Функция Инициализация()
|
|
|
|
_преобразовательJSON = Новый ПарсерJSON();
|
|
|
|
КонецФункции
|
|
|
|
|
|
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
|
|
|
|
юТест = ЮнитТестирование;
|
|
|
|
ВсеТесты = Новый Массив;
|
|
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьПростойJSON");
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьФайлMockНаЧтение");
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьФайлMockНаЗапись");
|
|
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоОбъектПриводитсяКСтруктуре");
|
|
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСимволыМаскируютсяПолностью");
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСимволыНеМаскируются");
|
|
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКириллицаМаскируется");
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКириллицаНеМаскируется");
|
|
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейПреобразуютсяКСтроке");
|
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейВызываютИсключение");
|
|
|
|
Возврат ВсеТесты;
|
|
КонецФункции
|
|
|
|
Процедура ТестДолжен_ПроверитьПростойJSON() Экспорт
|
|
|
|
тестовыйJSON = "{
|
|
| ""firstName"": ""Иван"",
|
|
| ""lastName"": ""Иванов"",
|
|
| ""address"": {
|
|
| ""streetAddress"": ""Московское ш., 101, кв.101"",
|
|
| ""city"": ""Ленинград"",
|
|
| ""postalCode"": 101101
|
|
| },
|
|
| ""phoneNumbers"": [
|
|
| ""812 123-1234"",
|
|
| ""916 123-4567""
|
|
| ]
|
|
|}";
|
|
|
|
типаОбъект = _преобразовательJSON.ПрочитатьJSON(тестовыйJSON);
|
|
|
|
ОбъектСтрокой = _преобразовательJSON.ЗаписатьJSON(типаОбъект);
|
|
|
|
Утверждения.ПроверитьРавенство(ПривестиОкончанияСтрок(ОбъектСтрокой), ПривестиОкончанияСтрок(тестовыйJSON));
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьФайлMockНаЧтение() Экспорт
|
|
|
|
КаталогСкрипта = Новый Файл(ТекущийСценарий().Источник).Путь;
|
|
ЧтениеТекста = Новый ЧтениеТекста(КаталогСкрипта + "/json-mock.json");
|
|
|
|
СтрокаJSON = ЧтениеТекста.Прочитать();
|
|
ЧтениеТекста.Закрыть();
|
|
|
|
Объект = _преобразовательJSON.ПрочитатьJSON(СтрокаJSON);
|
|
|
|
Утверждения.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Объект));
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьФайлMockНаЗапись() Экспорт
|
|
КаталогСкрипта = Новый Файл(ТекущийСценарий().Источник).Путь;
|
|
ЧтениеТекста = Новый ЧтениеТекста(КаталогСкрипта + "/json-mock.json");
|
|
|
|
СтрокаJSON = ЧтениеТекста.Прочитать();
|
|
ЧтениеТекста.Закрыть();
|
|
|
|
Объект = _преобразовательJSON.ПрочитатьJSON(СтрокаJSON);
|
|
|
|
СтрокаJSON2 = _преобразовательJSON.ЗаписатьJSON(Объект);
|
|
// assert примитивный, желающие могут сделать проверку получше.
|
|
Утверждения.ПроверитьЛожь(ПустаяСтрока(СтрокаJSON2));
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоОбъектПриводитсяКСтруктуре() Экспорт
|
|
|
|
тестовыйJSON = "{
|
|
| ""firstName"": ""Иван"",
|
|
| ""lastName"": ""Иванов"",
|
|
| ""address"": {
|
|
| ""streetAddress"": ""Московское ш., 101, кв.101"",
|
|
| ""city"": ""Ленинград"",
|
|
| ""postalCode"": 101101
|
|
| },
|
|
| ""phoneNumbers"": [
|
|
| ""812 123-1234"",
|
|
| ""916 123-4567""
|
|
| ]
|
|
|}";
|
|
|
|
Объект = _преобразовательJSON.ПрочитатьJSON(тестовыйJSON,,,Истина);
|
|
Утверждения.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Объект));
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоСимволыМаскируютсяПолностью() Экспорт
|
|
|
|
Эталон ="{
|
|
| ""SymbolsToEscape"": ""\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00ad"",
|
|
| ""Cyrillic"": ""АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ""
|
|
|}";
|
|
|
|
Объект = Новый Соответствие;
|
|
Объект.Вставить("SymbolsToEscape", ПолучитьСтрокуСимволов(127, 159) + Символ(173));
|
|
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
|
|
|
|
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект);
|
|
|
|
Утверждения.ПроверитьРавенство(Эталон, СтрокаJSON);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоСимволыНеМаскируются() Экспорт
|
|
|
|
СтрокаОсобыхСимволов = ПолучитьСтрокуСимволов(127, 159) + Символ(173);
|
|
|
|
Эталон ="{
|
|
| ""SymbolsToEscape"": """ + СтрокаОсобыхСимволов + """,
|
|
| ""Cyrillic"": ""АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ""
|
|
|}";
|
|
|
|
Объект = Новый Соответствие;
|
|
Объект.Вставить("SymbolsToEscape", СтрокаОсобыхСимволов);
|
|
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
|
|
|
|
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект,,,Ложь);
|
|
|
|
Утверждения.ПроверитьРавенство(Эталон, СтрокаJSON);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоКириллицаМаскируется() Экспорт
|
|
|
|
Эталон ="{
|
|
| ""SymbolsToEscape"": ""\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00ad"",
|
|
| ""Cyrillic"": ""\u0410\u0411\u0412\u0413\u0490\u0414\u0402\u0403\u0415\u0400\u0401\u0404\u0416\u0417\u0405\u0418\u040d\u0406\u0407\u0419\u0408\u041a\u041b\u0409\u041c\u041d\u040a\u041e\u041f\u0420\u0421\u0422\u040b\u040c\u0423\u040e\u0424\u0425\u0426\u0427\u040f\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f""
|
|
|}";
|
|
|
|
Объект = Новый Соответствие;
|
|
Объект.Вставить("SymbolsToEscape", ПолучитьСтрокуСимволов(127, 159) + Символ(173));
|
|
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
|
|
|
|
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект,,,,Истина);
|
|
|
|
Утверждения.ПроверитьРавенство(Эталон, СтрокаJSON);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоКириллицаНеМаскируется() Экспорт
|
|
|
|
Эталон ="{
|
|
| ""SymbolsToEscape"": ""\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00ad"",
|
|
| ""Cyrillic"": ""АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ""
|
|
|}";
|
|
|
|
Объект = Новый Соответствие;
|
|
Объект.Вставить("SymbolsToEscape", ПолучитьСтрокуСимволов(127, 159) + Символ(173));
|
|
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
|
|
|
|
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект);
|
|
|
|
Утверждения.ПроверитьРавенство(Эталон, СтрокаJSON);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейПреобразуютсяКСтроке() Экспорт
|
|
|
|
УникальныйИдентификатор = Новый УникальныйИдентификатор;
|
|
|
|
Эталон = "{
|
|
| """": ""Null"",
|
|
| ""Да"": ""Истина"",
|
|
| ""42"": ""Ответ на самый главный вопрос жизни, Вселенной и всего такого"",
|
|
| ""31.12.2015 0:00:00"": ""С Новым Годом!"",
|
|
| """ + Строка(УникальныйИдентификатор) + """: ""Это GUID""
|
|
|}";
|
|
|
|
Объект = Новый Соответствие;
|
|
Объект.Вставить(Null, "Null");
|
|
Объект.Вставить(Истина, "Истина");
|
|
Объект.Вставить(42, "Ответ на самый главный вопрос жизни, Вселенной и всего такого");
|
|
Объект.Вставить(Дата(2015,12,31), "С Новым Годом!");
|
|
Объект.Вставить(УникальныйИдентификатор, "Это GUID");
|
|
|
|
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект,,,,,Истина);
|
|
|
|
Утверждения.ПроверитьРавенство(Эталон, СтрокаJSON);
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейВызываютИсключение() Экспорт
|
|
|
|
Утверждения.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Null),
|
|
"Null-значение использовано в качестве ключа, а должно вызывать исключение");
|
|
|
|
Утверждения.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Истина),
|
|
"Булево значение в использовано качестве ключа, а должно вызывать исключение");
|
|
|
|
Утверждения.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(42),
|
|
"Число использовано в качестве ключа, а должно вызывать исключение");
|
|
|
|
Утверждения.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Дата(2015,12,31)),
|
|
"Дата использована в качестве ключа, а должна вызывать исключение");
|
|
|
|
Утверждения.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Новый УникальныйИдентификатор),
|
|
"Уникальный идентификатор использован в качестве ключа, а должно вызывать исключение");
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция НедопустимыйТипЗначенияКлючаВызываетИсключение(ЗначениеКлюча)
|
|
Объект = Новый Соответствие;
|
|
Объект.Вставить(ЗначениеКлюча, "Значение");
|
|
Попытка
|
|
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект);
|
|
Возврат Ложь;
|
|
Исключение
|
|
ОписаниеОшибки = ОписаниеОшибки();
|
|
Если Найти(ОписаниеОшибки, "JSON: Недопустимый тип значения ключа") > 0 Тогда
|
|
Возврат Истина;
|
|
КонецЕсли;
|
|
ВызватьИсключение ОписаниеОшибки;
|
|
КонецПопытки
|
|
КонецФункции
|
|
|
|
Функция ПолучитьСтрокуСимволов(НачалоДиапазона, КонецДиапазона)
|
|
СтрРезультат = "";
|
|
Для КодСимвола = НачалоДиапазона По КонецДиапазона Цикл
|
|
СтрРезультат = СтрРезультат + Символ(КодСимвола);
|
|
КонецЦикла;
|
|
Возврат СтрРезультат;
|
|
КонецФункции
|
|
|
|
Функция ПривестиОкончанияСтрок(Знач ИсходныйТекст)
|
|
Возврат СтрЗаменить(ИсходныйТекст, Символы.ВК + Символы.ПС, Символы.ПС);
|
|
КонецФункции
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// Точка входа
|
|
|
|
Инициализация(); |