суббота, 12 апреля 2014 г.

Тестирование

После собеседования мне наконец-то выслали задание:
В браузере Google Chrome есть такой пункт контекстного меню “Inspect Element”, который показывает информацию о текущем элементе на страничке с возможностью посмотреть свойства его “детей” и “родителей”. Выглядит примерно так.
Суть технического задания: ­написать плагин для IntelliJ IDEA 13, который бы эмитировал данную функциональность. Как это можно сделать? Зарегистрируйте свой action, назовите его “Inspect UI Element” и поместите в меню “Main Menu ­> Tools”.
Это заняло у меня несколько минут, включая настройку проекта, ибо в IDEA уже встроена поддержка разработки плагинов.
После вызова action ожидайте пока пользователь не кликнет куда­-нибудь в идее с зажатой кнопкой Alt. Т.е. нас интересует исключительно Alt+Click, остальные мы игнорируем.
Вот тут уже пришлось задуматься. Игнорировать можно по-разному. Сначала я начал писать обрабоку событий через GlassPane, но потом обнаружил, что полное игнорирование событий не позволяет нам найти нужный элемент UI после того, как выбран наш пункт меню. Поэтому я решил рассматривать слово "игнорировать" как "пропускать остатьные события в систему" и стал использовать AWTEventListener. Так и код короче и можно анализировать UI других приложений, запущенных из IDEA.
После Alt+Click нужно определить на каком компоненте был произведен Click (стартовый компонент) и показать информацию о нём в новом немодальном диалоге. В этом немодальном диалоге, как и в панельке Google Chrome, хочется иметь всё дерево доступных компонентов в распахнутом состоянии с выделенным стартовым компонентом. Справа от дерева нужно отобразить панель свойств (Insets, Border, Font, и другие, которые соответствуют JavaBeans нотации) Панель можно показать в виде таблицы. Конечно, большинство из свойств захочется редактировать. Чем больше их будет, тем лучше.
Теперь осталось найти время и написать этот новый диалог.
Максимальный срок выполнения задания 3 недели.
А вот с этим самое сложное. С работы уходить в отпуск нет желания, поэтому остаётся 6 выходных дней, если учесть, что мы с Мишкой на этих выходных вдвоём, то всего 5.

4 комментария:

  1. Кул.
    Эмитировать - грамматическая ошибка.
    В простейшем варианте после обнаружения компонента и чтения дерева всех компонентов остается совсем мало - отобразить в виде нередактируемой таблицы свойства.

    Это вроде как задача очень несложная.
    Могут быть хитрости в динамическом изменении дерева компонентов, а также в изменении свойств компонентов.
    Ну и красота также требует жертв. Чем красивее, тем больше времени потратишь.

    В двух словах, простейший вариант можно написать за пару-тройку часов, а усложнять можно очень долго и много. Мне задание понравилось :)

    ОтветитьУдалить
    Ответы
    1. Мне эта ошибка тоже понравилась.

      Я уже написал прототип. Осталось добавить редактирование свойств. Ну а потом наводить марафет.

      Удалить
    2. Для плагина не рекомендуется даже 7 использовать. Даже на <> ругается...

      Удалить