Тестовое задание для летней стажировки на проект "Развитие интеграции Kotlin проектов с CocoaPods зависимостями"
В рамках отбора на данный проект кандидату предлагается сделать форк репозитория, содержащего шаблон Gradle плагина, и выполнить ряд заданий.
Выделите ветку с названием Task_1
и реализуйте в ней возможность вызова из терминала ./gradlew calculateSha1
на
проекте/подпроекте с подключенным плагином.
В результате данного вызова в build директории проекта и каждого из его подпроектов должен быть сгенерирован текстовый файл, в котором записана хэш-сумма всех файлов с расширением .java и .kt по алгоритму SHA-1.
Ожидается, что в результате выполнения задачи тест org.jetbrains.internship.HashSumPluginTest#task1Test
успешно пройден.
После завершения задания 1 выделите из нее ветку с названием Task_2
и расширьте свою реализацию возможностью
выбора алгоритма подсчета хэш-суммы из реализованных в классе MessageDigest.
Подумайте над тем, как пользователь может выбирать необходимый ему алгоритм. Перечислите письменно найденные вами варианты, опишите их плюсы и минусы. Реализуйте один из вариантов на выбор, опишите, почему вы выбрали именно этот вариант.
Доработайте тесты так, чтобы продемонстрировать работоспособность.
После завершения задания 2 выделите из нее ветку с названием Task_3
. В рамках данного задания необходимо подумать
и улучшить свою реализацию в 2 аспектах:
-
инкрементальность - если не изменились параметры, влияющие на результат выполнения, то вычисления не должны производиться повторно;
-
параллелизм - поскольку результат вычисления хэш-суммы исходных файлов для одного подпроекта не зависит от результата вычисления для другого, то эти вычисления можно выполнять параллельно (почитайте про Worker API).
Это задание сложное и не имеет конкретных критериев выполнения. Если вы начали решать, но у вас не получилось, выложите в ветку свой промежуточный прогресс. Если не получилось написать код, изложите текстом предлагаемые доработки, приложите ссылки, которые считаете полезными для реализации. В данном задании важно показать, как вы исследовали проблему, даже если это исследование не завершено.
В директории проекта лежит подпроект example-project, который используется в тестах. Для того, чтобы протестировать реализованную функциональность, необходимо:
- создать в классе
HashSumPluginTest
новый метод, помеченный аннотацией@Test
без аргументов. - в данном методе создать экземпляр класса
Project
аналогично тому, как это сделано в методеbasicTest
- установить в качестве
projectDir
директорию проекта example-project или созданного самостоятельно - подключить к полученному экземпляру плагин по его id
- реализовать дальнейшую логику теста, используя assertions
Запуская тесты в Debug режиму можно, выставляя breakpoint'ы в коде плагина и т.д., смотреть как меняется состояние.
При выполнении данного задания будет крайне полезно ознакомиться с гайдом от Gradle и циклом статей от Baeldung.
Если появился вопрос, ответ на который не получается найти в течение 10 минут, спроси у меня в telegram или напиши на yaroslav.chernyshev@jetbrains.com