Тестовое задание для летней стажировки на проект "Развитие интеграции Kotlin проектов с CocoaPods зависимостями"

Общее описание

В рамках отбора на данный проект кандидату предлагается сделать форк репозитория, содержащего шаблон Gradle плагина, и выполнить ряд заданий.

Задание 1

Выделите ветку с названием Task_1 и реализуйте в ней возможность вызова из терминала ./gradlew calculateSha1 на проекте/подпроекте с подключенным плагином.

В результате данного вызова в build директории проекта и каждого из его подпроектов должен быть сгенерирован текстовый файл, в котором записана хэш-сумма всех файлов с расширением .java и .kt по алгоритму SHA-1.

Ожидается, что в результате выполнения задачи тест org.jetbrains.internship.HashSumPluginTest#task1Testуспешно пройден.

Задание 2

После завершения задания 1 выделите из нее ветку с названием Task_2 и расширьте свою реализацию возможностью выбора алгоритма подсчета хэш-суммы из реализованных в классе MessageDigest.

Подумайте над тем, как пользователь может выбирать необходимый ему алгоритм. Перечислите письменно найденные вами варианты, опишите их плюсы и минусы. Реализуйте один из вариантов на выбор, опишите, почему вы выбрали именно этот вариант.

Доработайте тесты так, чтобы продемонстрировать работоспособность.

Задание 3 повышенной сложности

После завершения задания 2 выделите из нее ветку с названием Task_3. В рамках данного задания необходимо подумать и улучшить свою реализацию в 2 аспектах:

  • инкрементальность - если не изменились параметры, влияющие на результат выполнения, то вычисления не должны производиться повторно;

  • параллелизм - поскольку результат вычисления хэш-суммы исходных файлов для одного подпроекта не зависит от результата вычисления для другого, то эти вычисления можно выполнять параллельно (почитайте про Worker API).

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

Тестирование и отладка

В директории проекта лежит подпроект example-project, который используется в тестах. Для того, чтобы протестировать реализованную функциональность, необходимо:

  • создать в классе HashSumPluginTest новый метод, помеченный аннотацией @Test без аргументов.
  • в данном методе создать экземпляр класса Project аналогично тому, как это сделано в методе basicTest
  • установить в качестве projectDir директорию проекта example-project или созданного самостоятельно
  • подключить к полученному экземпляру плагин по его id
  • реализовать дальнейшую логику теста, используя assertions

Запуская тесты в Debug режиму можно, выставляя breakpoint'ы в коде плагина и т.д., смотреть как меняется состояние.

Рекомендации

При выполнении данного задания будет крайне полезно ознакомиться с гайдом от Gradle и циклом статей от Baeldung.

P.S.

Если появился вопрос, ответ на который не получается найти в течение 10 минут, спроси у меня в telegram или напиши на yaroslav.chernyshev@jetbrains.com