8000 Generalize Test Aspects by adamgfraser · Pull Request #6012 · zio/zio · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Generalize Test Aspects #6012

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Nov 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions core-tests/shared/src/test/scala/zio/ZIOBaseSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@ import zio.test._
import scala.annotation.tailrec

trait ZIOBaseSpec extends DefaultRunnableSpec {
override def aspects: List[TestAspectAtLeastR[Has[Live]]] =
override def aspects: List[TestAspect.WithOut[
Nothing,
TestEnvironment,
Nothing,
Any,
({ type OutEnv[Env] = Env })#OutEnv,
({ type OutErr[Err] = Err })#OutErr
]] =
if (TestPlatform.isJVM) List(TestAspect.timeout(120.seconds))
else List(TestAspect.sequential, TestAspect.timeout(120.seconds))

Expand All @@ -30,7 +37,14 @@ trait ZIOBaseSpec extends DefaultRunnableSpec {
case object supervision extends ZIOTag { override val value = "supervision" }
}

def zioTag(zioTag: ZIOTag, zioTags: ZIOTag*): TestAspectPoly = {
def zioTag(zioTag: ZIOTag, zioTags: ZIOTag*): TestAspect.WithOut[
Nothing,
Any,
Nothing,
Any,
({ type OutEnv[Env] = Env })#OutEnv,
({ type OutErr[Err] = Err })#OutErr
] = {
val tags = zioTags.map(_.value) ++ getSubTags(zioTag) ++ zioTags.flatMap(getSubTags)
TestAspect.tag(zioTag.value, tags.distinct: _*)
}
Expand Down
191 changes: 191 additions & 0 deletions core/shared/src/main/scala/zio/ZCompose.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
/*
* Copyright 2017-2021 John A. De Goes and the ZIO Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package zio

trait ZCompose[+LeftLower, -LeftUpper, LeftOut[In], +RightLower, -RightUpper, RightOut[In]] {
type Lower
type Upper
type Out[In]
}

object ZCompose extends ComposeLowPriorityImplicits {
type WithOut[LeftLower, LeftUpper, LeftOut[In], RightLower, RightUpper, RightOut[In], Lower0, Upper0, Out0[In]] =
ZCompose[LeftLower, LeftUpper, LeftOut, RightLower, RightUpper, RightOut] {
type Lower = Lower0
type Upper = Upper0
type Out[In] = Out0[In]
}

implicit def compose[
LeftLower,
LeftUpper,
LeftOut >: RightLower <: RightUpper,
RightLower,
RightUpper,
RightOut
]: ZCompose.WithOut[
LeftLower,
LeftUpper,
({ type Out[In] = LeftOut })#Out,
RightLower,
RightUpper,
({ type Out[In] = RightOut })#Out,
LeftLower,
LeftUpper,
({ type Out[In] = RightOut })#Out
] =
new ZCompose[
LeftLower,
LeftUpper,
({ type Out[In] = LeftOut })#Out,
RightLower,
RightUpper,
({ type Out[In] = RightOut })#Out
] {
type Lower = LeftLower
type Upper = LeftUpper
type Out[In] = RightOut
}

implicit def identity[LeftLower <: RightLower, LeftUpper, RightLower, RightUpper]: ZCompose.WithOut[
LeftLower,
LeftUpper,
Identity,
RightLower,
RightUpper,
Identity,
RightLower,
LeftUpper with RightUpper,
Identity
] =
new ZCompose[
LeftLower,
LeftUpper,
Identity,
RightLower,
RightUpper,
Identity
] {
type Lower = RightLower
type Upper = LeftUpper with RightUpper
type Out[In] = In
}

implicit def leftIdentity[LeftLower <: RightLower, LeftUpper, RightLower, RightUpper, RightOut]: ZCompose.WithOut[
LeftLower,
LeftUpper,
Identity,
RightLower,
RightUpper,
({ type Out[In] = RightOut })#Out,
RightLower,
LeftUpper with RightUpper,
({ type Out[In] = RightOut })#Out
] =
new ZCompose[
LeftLower,
LeftUpper,
Identity,
RightLower,
RightUpper,
({ type Out[In] = RightOut })#Out
] {
type Lower = RightLower
type Upper = LeftUpper with RightUpper
type Out[In] = RightOut
}

implicit def rightIdentity[LeftLower, LeftUpper, LeftOut >: RightLower <: RightUpper, RightLower, RightUpper]
: ZCompose.WithOut[
LeftLower,
LeftUpper,
({ type Out[In] = LeftOut })#Out,
RightLower,
RightUpper,
Identity,
LeftLower,
LeftUpper,
({ type Out[In] = LeftOut })#Out
] =
new ZCompose[
LeftLower,
LeftUpper,
({ type Out[In] = LeftOut })#Out,
RightLower,
RightUpper,
Identity
] {
type Lower = LeftLower
type Upper = LeftUpper
type Out[In] = LeftOut
}
}

trait ComposeLowPriorityImplicits {

type Identity[A] = A

implicit def identityLowPriority[LeftLowerElem, LeftUpperElem, RightLowerElem <: LeftLowerElem, RightUpperElem]
: ZCompose.WithOut[
LeftLowerElem,
LeftUpperElem,
Identity,
RightLowerElem,
RightUpperElem,
Identity,
LeftLowerElem,
LeftUpperElem with RightUpperElem,
Identity
] =
new ZCompose[
LeftLowerElem,
LeftUpperElem,
Identity,
RightLowerElem,
RightUpperElem,
Identity
] {
type Lower = LeftLowerElem
type Upper = LeftUpperElem with RightUpperElem
type Out[In] = In
}

implicit def leftIdentityLowPriority[LeftLower, LeftUpper, RightLower <: LeftLower, RightUpper, RightOut]
: ZCompose.WithOut[
LeftLower,
LeftUpper,
Identity,
RightLower,
RightUpper,
({ type Out[In] = RightOut })#Out,
LeftLower,
LeftUpper with RightUpper,
({ type Out[In] = RightOut })#Out
] =
new ZCompose[
LeftLower,
LeftUpper,
Identity,
RightLower,
RightUpper,
({ type Out[In] = RightOut })#Out
] {
type Lower = LeftLower
type Upper = LeftUpper with RightUpper
type Out[In] = RightOut
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,14 @@ import zio.test.Assertion._
import java.util.zip.Deflater

object ZPipelinePlatformSpecificSpec extends ZIOBaseSpec {
override def aspects: List[TestAspectAtLeastR[Has[Live]]] =
override def aspects: List[TestAspect.WithOut[
Nothing,
TestEnvironment,
Nothing,
Any,
({ type OutEnv[Env] = Env })#OutEnv,
({ type OutErr[Err] = Err })#OutErr
]] =
List(TestAspect.timeout(300.seconds))

def spec: ZSpec[Environment, Failure] = suite("ZPipeline JVM")(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import scala.annotation.unchecked.uncheckedVariance

trait ZPipelineVersionSpecific[+LowerEnv, -UpperEnv, +LowerErr, -UpperErr, +LowerElem, -UpperElem] {
self: ZPipeline[LowerEnv, UpperEnv, LowerErr, UpperErr, LowerElem, UpperElem] =>
import ZPipeline._

/**
* Composes two pipelines into one pipeline, by first applying the
Expand All @@ -40,9 +39,9 @@ trait ZPipelineVersionSpecific[+LowerEnv, -UpperEnv, +LowerErr, -UpperErr, +Lowe
UpperElem2
]
)(implicit
composeEnv: Compose[LowerEnv2, UpperEnv2, that.OutEnv, LowerEnv, UpperEnv, OutEnv] @uncheckedVariance,
composeErr: Compose[LowerErr2, UpperErr2, that.OutErr, LowerErr, UpperErr, OutErr] @uncheckedVariance,
composeElem: Compose[LowerElem2, UpperElem2, that.OutElem, LowerElem, UpperElem, OutElem] @uncheckedVariance
composeEnv: ZCompose[LowerEnv2, UpperEnv2, that.OutEnv, LowerEnv, UpperEnv, OutEnv] @uncheckedVariance,
composeErr: ZCompose[LowerErr2, UpperErr2, that.OutErr, LowerErr, UpperErr, OutErr] @uncheckedVariance,
composeElem: ZCompose[LowerElem2, UpperElem2, that.OutElem, LowerElem, UpperElem, OutElem] @uncheckedVariance
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -93,9 +92,9 @@ trait ZPipelineVersionSpecific[+LowerEnv, -UpperEnv, +LowerErr, -UpperErr, +Lowe
UpperElem2
]
)(implicit
composeEnv: Compose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, that.OutEnv] @uncheckedVariance,
composeErr: Compose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, that.OutErr] @uncheckedVariance,
composeElem: Compose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, that.OutElem] @uncheckedVariance
composeEnv: ZCompose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, that.OutEnv] @uncheckedVariance,
composeErr: ZCompose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, that.OutErr] @uncheckedVariance,
composeElem: ZCompose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, that.OutElem] @uncheckedVariance
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -146,9 +145,9 @@ trait ZPipelineVersionSpecific[+LowerEnv, -UpperEnv, +LowerErr, -UpperErr, +Lowe
UpperElem2
]
)(implicit
composeEnv: Compose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, that.OutEnv] @uncheckedVariance,
composeErr: Compose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, that.OutErr] @uncheckedVariance,
composeElem: Compose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, that.OutElem] @uncheckedVariance
composeEnv: ZCompose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, that.OutEnv] @uncheckedVariance,
composeErr: ZCompose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, that.OutErr] @uncheckedVariance,
composeElem: ZCompose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, that.OutElem] @uncheckedVariance
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -197,9 +196,9 @@ trait ZPipelineVersionSpecific[+LowerEnv, -UpperEnv, +LowerErr, -UpperErr, +Lowe
UpperElem2
]
)(implicit
composeEnv: Compose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, that.OutEnv] @uncheckedVariance,
composeErr: Compose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, that.OutErr] @uncheckedVariance,
composeElem: Compose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, that.OutElem] @uncheckedVariance
composeEnv: ZCompose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, that.OutEnv] @uncheckedVariance,
composeErr: ZCompose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, that.OutErr] @uncheckedVariance,
composeElem: ZCompose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, that.OutElem] @uncheckedVariance
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -248,9 +247,9 @@ trait ZPipelineVersionSpecific[+LowerEnv, -UpperEnv, +LowerErr, -UpperErr, +Lowe
UpperElem2
]
)(implicit
composeEnv: Compose[LowerEnv2, UpperEnv2, that.OutEnv, LowerEnv, UpperEnv, OutEnv] @uncheckedVariance,
composeErr: Compose[LowerErr2, UpperErr2, that.OutErr, LowerErr, UpperErr, OutErr] @uncheckedVariance,
composeElem: Compose[LowerElem2, UpperElem2, that.OutElem, LowerElem, UpperElem, OutElem] @uncheckedVariance
composeEnv: ZCompose[LowerEnv2, UpperEnv2, that.OutEnv, LowerEnv, UpperEnv, OutEnv] @uncheckedVariance,
composeErr: ZCompose[LowerErr2, UpperErr2, that.OutErr, LowerErr, UpperErr, OutErr] @uncheckedVariance,
composeElem: ZCompose[LowerElem2, UpperElem2, that.OutElem, LowerElem, UpperElem, OutElem] @uncheckedVariance
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import zio._
import zio.stacktracer.TracingImplicits.disableAutoTrace

trait ZPipelineCompanionVersionSpecific {
import ZPipeline._

implicit final class ZPipelineSyntax[LowerEnv, UpperEnv, LowerErr, UpperErr, LowerElem, UpperElem, OutEnv[
Env
Expand Down Expand Up @@ -58,9 +57,9 @@ trait ZPipelineCompanionVersionSpecific {
OutElem2
]
)(implicit
composeEnv: Compose[LowerEnv2, UpperEnv2, OutEnv2, LowerEnv, UpperEnv, OutEnv],
composeErr: Compose[LowerErr2, UpperErr2, OutErr2, LowerErr, UpperErr, OutErr],
composeElem: Compose[LowerElem2, UpperElem2, OutElem2, LowerElem, UpperElem, OutElem]
composeEnv: ZCompose[LowerEnv2, UpperEnv2, OutEnv2, LowerEnv, UpperEnv, OutEnv],
composeErr: ZCompose[LowerErr2, UpperErr2, OutErr2, LowerErr, UpperErr, OutErr],
composeElem: ZCompose[LowerElem2, UpperElem2, OutElem2, LowerElem, UpperElem, OutElem]
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -94,9 +93,9 @@ trait ZPipelineCompanionVersionSpecific {
OutElem2
]
)(implicit
composeEnv: Compose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, OutEnv2],
composeErr: Compose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, OutErr2],
composeElem: Compose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, OutElem2]
composeEnv: ZCompose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, OutEnv2],
composeErr: ZCompose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, OutErr2],
composeElem: ZCompose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, OutElem2]
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -152,9 +151,9 @@ trait ZPipelineCompanionVersionSpecific {
OutElem2
]
)(implicit
composeEnv: Compose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, OutEnv2],
composeErr: Compose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, OutErr2],
composeElem: Compose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, OutElem2]
composeEnv: ZCompose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, OutEnv2],
composeErr: ZCompose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, OutErr2],
composeElem: ZCompose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, OutElem2]
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -186,9 +185,9 @@ trait ZPipelineCompanionVersionSpecific {
OutElem2
]
)(implicit
composeEnv: Compose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, OutEnv2],
composeErr: Compose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, OutErr2],
composeElem: Compose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, OutElem2]
composeEnv: ZCompose[LowerEnv, UpperEnv, OutEnv, LowerEnv2, UpperEnv2, OutEnv2],
composeErr: ZCompose[LowerErr, UpperErr, OutErr, LowerErr2, UpperErr2, OutErr2],
composeElem: ZCompose[LowerElem, UpperElem, OutElem, LowerElem2, UpperElem2, OutElem2]
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down Expand Up @@ -220,9 +219,9 @@ trait ZPipelineCompanionVersionSpecific {
OutElem2
]
)(implicit
composeEnv: Compose[LowerEnv2, UpperEnv2, OutEnv2, LowerEnv, UpperEnv, OutEnv],
composeErr: Compose[LowerErr2, UpperErr2, OutErr2, LowerErr, UpperErr, OutErr],
composeElem: Compose[LowerElem2, UpperElem2, OutElem2, LowerElem, UpperElem, OutElem]
composeEnv: ZCompose[LowerEnv2, UpperEnv2, OutEnv2, LowerEnv, UpperEnv, OutEnv],
composeErr: ZCompose[LowerErr2, UpperErr2, OutErr2, LowerErr, UpperErr, OutErr],
composeElem: ZCompose[LowerElem2, UpperElem2, OutElem2, LowerElem, UpperElem, OutElem]
): ZPipeline.WithOut[
composeEnv.Lower,
composeEnv.Upper,
Expand Down
Loading
0