Skip to content

Commit

Permalink
Подмена _Найти в Шпионе №25
Browse files Browse the repository at this point in the history
  • Loading branch information
asosnoviy committed Jun 29, 2018
1 parent 9aebe30 commit 82dc883
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 10 deletions.
15 changes: 9 additions & 6 deletions tests/array.os
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@
РасширенныйРефлектор = Новый РефлекторОбъекта(МокОбъекта);
Ожидаем.Что(РасширенныйРефлектор.ЕстьФункция("_Найти")).Равно(Истина);

МокШнион = Мок.Следить(Тип("Массив"));
МокШнион.Добавить("Значение");
Ожидаем.Что(МокШнион.Количество()).Равно(1);

Ожидаем.Что(МокШнион._Найти("Значение")).Равно(0);

МокШпион = Мок.Следить(Тип("Массив"));
МокШпион.Добавить("Значение");
МокШпион.Добавить("Значение1");
Ожидаем.Что(МокШпион.Количество()).Равно(2);

Ожидаем.Что(МокШпион._Найти("Значение")).Равно(0);
Ожидаем.Что(МокШпион._Найти("Значение2")).Равно(Неопределено);
Ожидаем.Что(МокШпион._Найти("Значение1")).Равно(1);

КонецПроцедуры
4 changes: 4 additions & 0 deletions Модули/Мок.os
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#Использовать logos

Перем Лог;
Перем ИменаМетодов;

Функция Получить(Знач ИсходныйОбъект) Экспорт

Expand All @@ -17,6 +18,7 @@

Функция СоздатьМок(Знач ИсходныйОбъект, Знач ЭтоШпион = Ложь)

ИменаМетодов = Новый Соответствие;
Лог.Отладка("Тип исходного объекта: %1", ТипЗнч(ИсходныйОбъект));
Лог.Отладка("Представление исходного объекта: %1", ИсходныйОбъект);

Expand Down Expand Up @@ -111,6 +113,7 @@
КонецЕсли;

ФейковыйОбъект.Мок_УстановитьМокируемыйОбъект(ИнстансИсходногоОбъекта);
ФейковыйОбъект.Мок_УстановитьИменаМетодов(ИменаМетодов);

Если ИнстансИсходногоОбъекта <> Неопределено Тогда
ИменаСвойств = Новый Массив;
Expand All @@ -136,6 +139,7 @@
ВозвращаемоеЗначение = СтрШаблон(ШаблонНовогоИмени, ИмяМетода);
КонецЕсли;

ИменаМетодов.Вставить(ВозвращаемоеЗначение, ИмяМетода);
Возврат ВозвращаемоеЗначение;
КонецФункции
Лог = Логирование.ПолучитьЛог("oscript.lib.moskito");
Expand Down
9 changes: 9 additions & 0 deletions Модули/МокОбъектСлужебный.os
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
Перем Мок_ВызываемыеМетоды;
Перем Мок_МокируемыйОбъект;
Перем Мок_ЭтоШпион;
Перем Мок_ИменаМетодов;

// {Область методов}

Expand Down Expand Up @@ -294,6 +295,14 @@
Мок_МокируемыйОбъект = Мок_Инжект_МокируемыйОбъект;
КонецПроцедуры

Процедура Мок_УстановитьИменаМетодов(Мок_Инжект_ИменаМетодов) Экспорт
Мок_ИменаМетодов = Мок_Инжект_ИменаМетодов;
КонецПроцедуры

Функция Мок_ПолучитьИмяМетода(Мок_ИмяФейковогоМетода)
Возврат Мок_ИменаМетодов.Получить(Мок_ИмяФейковогоМетода);
КонецФункции

Процедура ЗаполнитьКолонки(СтруктураПараметрыПроцедуры, Таблица)

// Заполним колонки
Expand Down
5 changes: 1 addition & 4 deletions Модули/ШаблонМокМетода.os_template
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,8 @@
Мок_ВозвращаемоеИзМетодаЗначение = Мок_НайтиСохраненноеВозвращаемоеЗначение(Мок_СтруктураПараметрыПроцедуры);
Если Мок_ВозвращаемоеИзМетодаЗначение = NULL И Мок_ЭтоШпион Тогда
Мок_Лог.Отладка("Шпионим вызов");

Если Лев(Мок_ИмяМетода, 1) = "_" Тогда
Мок_ИмяМетода = Сред(Мок_ИмяМетода, 2);
КонецЕсли;

Мок_ИмяМетода = Мок_ПолучитьИмяМетода(Мок_ИмяМетода);
Мок_ВыполняемаяСтрока = "Мок_МокируемыйОбъект." + Мок_ИмяМетода;

Мок_СтрокаПараметрыПроцедуры = ПроцессорыКоллекций.ИзКоллекции(Мок_СтруктураПараметрыПроцедуры)
Expand Down

0 comments on commit 82dc883

Please sign in to comment.