diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-09 04:56:36 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-09 04:56:36 -0800 |
commit | fd545a9ae9f41a4bfdc2bf13a4554943f206f92b (patch) | |
tree | bfb76d137529f95026d4b576cd9bef154dabe531 /core/src/test/scala | |
parent | cdecfeedc1900aff0c4acfd284b07bf36087c3c9 (diff) | |
download | mill-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')
-rw-r--r-- | core/src/test/scala/forge/ApplicativeTests.scala | 10 |
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 |