summaryrefslogtreecommitdiff
path: root/core/src/test/scala/forge/ApplicativeTests.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-09 04:56:36 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-09 04:56:36 -0800
commitfd545a9ae9f41a4bfdc2bf13a4554943f206f92b (patch)
treebfb76d137529f95026d4b576cd9bef154dabe531 /core/src/test/scala/forge/ApplicativeTests.scala
parentcdecfeedc1900aff0c4acfd284b07bf36087c3c9 (diff)
downloadmill-fd545a9ae9f41a4bfdc2bf13a4554943f206f92b.tar.gz
mill-fd545a9ae9f41a4bfdc2bf13a4554943f206f92b.tar.bz2
mill-fd545a9ae9f41a4bfdc2bf13a4554943f206f92b.zip
Make `Applicative` macros able to inject a configurable `Ctx` object, used in `Target` to inject the `dest` folder for the `T{...}` block to use
Diffstat (limited to 'core/src/test/scala/forge/ApplicativeTests.scala')
-rw-r--r--core/src/test/scala/forge/ApplicativeTests.scala10
1 files changed, 7 insertions, 3 deletions
diff --git a/core/src/test/scala/forge/ApplicativeTests.scala b/core/src/test/scala/forge/ApplicativeTests.scala
index 1da21a5c..682414d3 100644
--- a/core/src/test/scala/forge/ApplicativeTests.scala
+++ b/core/src/test/scala/forge/ApplicativeTests.scala
@@ -7,13 +7,14 @@ import language.experimental.macros
object ApplicativeTests extends TestSuite {
implicit def optionToOpt[T](o: Option[T]): Opt[T] = new Opt(o)
class Opt[T](val o: Option[T]) extends Applicative.Applyable[T]
- object Opt extends define.Applicative.Applyer[Opt, Option]{
+ object Opt extends define.Applicative.Applyer[Opt, Option, String]{
+ val injectedCtx = "helloooo"
def underlying[A](v: Opt[A]) = v.o
- def apply[T](t: T): Option[T] = macro Applicative.impl[Option, T]
+ def apply[T](t: T): Option[T] = macro Applicative.impl[Option, T, String]
type O[+T] = Option[T]
- def map[A, B](a: O[A], f: A => B) = a.map(f)
+ def mapCtx[A, B](a: O[A])(f: (A, String) => B): Option[B] = a.map(f(_, injectedCtx))
def zip() = Some(())
def zip[A](a: O[A]) = a.map(Tuple1(_))
def zip[A, B](a: O[A], b: O[B]) = {
@@ -53,6 +54,9 @@ object ApplicativeTests extends TestSuite {
'singleNone - assert(Opt("lol " + None()) == None)
'twoNones - assert(Opt("lol " + None() + None()) == None)
}
+ 'context - {
+ assert(Opt(Opt.ctx() + Some("World")()) == Some("hellooooWorld"))
+ }
'capturing - {
val lol = "lol "
def hell(o: String) = "hell" + o