/* * sbt * Copyright 2023, Scala center * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ package sbt import scala.util.control.NonFatal import org.scalacheck.* import Prop.* import sbt.BuildExtra.project import java.io.File class ProjectDefs { lazy val p = project val x = project // should not compile // def y = project val z = (project in new File("dir")) val a: Project = project lazy val aa: Project = project } object ProjectMacro extends Properties("ProjectMacro") { lazy val pd = new ProjectDefs import pd.* def secure(f: => Prop): Prop = try { Prop.secure(f) } catch { case NonFatal(e) => e.printStackTrace throw e } property("Explicit type on lazy val supported") = secure { check(aa, "aa", "aa") } property("Explicit type on val supported") = secure { check(a, "a", "a") } property("lazy vals supported") = secure { check(p, "p", "p") } property("plain vals supported") = secure { check(x, "x", "x") } property("Directory overridable") = secure { check(z, "z", "dir") } def check(p: Project, id: String, dir: String): Prop = { s"Expected id: $id" |: s"Expected dir: $dir" |: s"Actual id: ${p.id}" |: s"Actual dir: ${p.base}" |: (p.id == id) && (p.base.getName == dir) } }