Как протестировать макросы Scala?

Каков предложенный способ проведения тестов на макросах scala?

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

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

Я думаю, что это утверждение потребует другого макроса формы

errors(code: => _): List[CompileError]

который возвращает ошибки компиляции внутреннего макроса. То же самое потребуется для проверки того, что предупреждения возникают, если они должны и т.д.

Существуют ли существующие средства тестирования для макросов scala?

Ответ 1

Вы можете использовать assertDoesNotCompile из ScalaTest. Ниже приведен пример использования этого метода для проверки Scala typechecker:

import org.scalatest.FunSuite

class TypeTest extends FunSuite {
  test("String vals can't hold ints") {
    assertDoesNotCompile("val x: String = 1")
  }
}

Вы можете передать строку, содержащую пример того, когда расширение макроса должно assertDoesNotCompile. Обратите внимание, что существует также assertCompiles, если вы чувствуете необходимость в этом.