1
0
mirror of https://github.com/ret-Phoenix/SmartConfigurator.git synced 2026-06-16 00:57:28 +02:00
Files

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 Тогда
Возврат Истина;
КонецЕсли;
ВызватьИсключение ОписаниеОшибки;
КонецПопытки
КонецФункции
Функция ПолучитьСтрокуСимволов(НачалоДиапазона, КонецДиапазона)
СтрРезультат = "";
Для КодСимвола = НачалоДиапазона По КонецДиапазона Цикл
СтрРезультат = СтрРезультат + Символ(КодСимвола);
КонецЦикла;
Возврат СтрРезультат;
КонецФункции
Функция ПривестиОкончанияСтрок(Знач ИсходныйТекст)
Возврат СтрЗаменить(ИсходныйТекст, Символы.ВК + Символы.ПС, Символы.ПС);
КонецФункции
///////////////////////////////////////////////////////////////////
// Точка входа
Инициализация();