Skip to content

Commit 7258924

Browse files
Improved error messages and source position for test utils
1 parent f9ecac0 commit 7258924

File tree

5 files changed

+51
-22
lines changed

5 files changed

+51
-22
lines changed

test/src/main/scala/scommons/react/test/util/RendererUtils.scala

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scommons.react.test.util
22

33
import io.github.shogowada.scalajs.reactjs.classes.ReactClass
44
import io.github.shogowada.scalajs.reactjs.elements.ReactElement
5+
import org.scalactic.source.Position
56
import org.scalatest.{Assertion, Matchers, Succeeded}
67
import scommons.react.UiComponent
78
import scommons.react.test.raw.RenderedInstance
@@ -11,17 +12,22 @@ import scala.scalajs.js
1112

1213
sealed trait RendererUtils[Instance <: RenderedInstance] extends Matchers {
1314

14-
private[util] val expectNoChildren: List[Instance] => Assertion = { children =>
15-
children.map {
15+
private[util] def expectNoChildren(implicit pos: Position): List[Instance] => Assertion = { children =>
16+
val resultChildren = children.map {
1617
case i if !scalajs.js.isUndefined(i.`type`) => i.`type`.toString
1718
case i => i.toString
18-
} shouldBe Nil
19+
}
20+
21+
assert(resultChildren.isEmpty, ": Expected no children")
1922
}
2023

21-
def findComponentProps[T](renderedComp: Instance, searchComp: UiComponent[T]): T = {
24+
def findComponentProps[T](renderedComp: Instance,
25+
searchComp: UiComponent[T]
26+
)(implicit pos: Position): T = {
27+
2228
findProps[T](renderedComp, searchComp).headOption match {
2329
case Some(comp) => comp
24-
case None => throw new IllegalStateException(s"UiComponent $searchComp not found")
30+
case None => fail(s"UiComponent $searchComp not found")
2531
}
2632
}
2733

@@ -54,7 +60,8 @@ sealed trait RendererUtils[Instance <: RenderedInstance] extends Matchers {
5460

5561
def assertComponent[T](result: Instance, expectedComp: UiComponent[T])
5662
(assertProps: T => Assertion,
57-
assertChildren: List[Instance] => Assertion): Assertion = {
63+
assertChildren: List[Instance] => Assertion
64+
)(implicit pos: Position): Assertion = {
5865

5966
result.`type` shouldBe expectedComp.apply()
6067

@@ -64,7 +71,8 @@ sealed trait RendererUtils[Instance <: RenderedInstance] extends Matchers {
6471

6572
def assertNativeComponent(result: Instance,
6673
expectedElement: ReactElement,
67-
assertChildren: List[Instance] => Assertion): Assertion = {
74+
assertChildren: List[Instance] => Assertion
75+
)(implicit pos: Position): Assertion = {
6876

6977
val expectedInstance = expectedElement.asInstanceOf[Instance]
7078

@@ -145,7 +153,10 @@ sealed trait RendererUtils[Instance <: RenderedInstance] extends Matchers {
145153
}
146154
}
147155

148-
protected def assertAttrValue(name: String, resultValue: Any, expectedValue: Any): Unit = {
156+
protected def assertAttrValue(name: String,
157+
resultValue: Any,
158+
expectedValue: Any)(implicit pos: Position): Unit = {
159+
149160
if (resultValue != expectedValue) {
150161
fail(s"Attribute value doesn't match for $name" +
151162
s"\n\texpected: $expectedValue" +
@@ -183,7 +194,8 @@ object RendererUtils {
183194

184195
override def assertNativeComponent(result: ShallowInstance,
185196
expectedElement: ReactElement,
186-
assertChildren: List[ShallowInstance] => Assertion): Assertion = {
197+
assertChildren: List[ShallowInstance] => Assertion
198+
)(implicit pos: Position): Assertion = {
187199

188200
val expectedInstance = expectedElement.asInstanceOf[ShallowInstance]
189201

test/src/main/scala/scommons/react/test/util/ShallowRendererUtils.scala

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scommons.react.test.util
22

33
import io.github.shogowada.scalajs.reactjs.classes.ReactClass
44
import io.github.shogowada.scalajs.reactjs.elements.ReactElement
5+
import org.scalactic.source.Position
56
import org.scalatest.Assertion
67
import scommons.react.UiComponent
78
import scommons.react.test.raw.{ShallowInstance, ShallowRenderer}
@@ -20,7 +21,9 @@ trait ShallowRendererUtils {
2021
renderer.getRenderOutput()
2122
}
2223

23-
def findComponentProps[T](renderedComp: ShallowInstance, searchComp: UiComponent[T]): T = {
24+
def findComponentProps[T](renderedComp: ShallowInstance,
25+
searchComp: UiComponent[T])(implicit pos: Position): T = {
26+
2427
utils.findComponentProps(renderedComp, searchComp)
2528
}
2629

@@ -38,19 +41,23 @@ trait ShallowRendererUtils {
3841

3942
def assertComponent[T](result: ShallowInstance, expectedComp: UiComponent[T])
4043
(assertProps: T => Assertion,
41-
assertChildren: List[ShallowInstance] => Assertion = utils.expectNoChildren): Assertion = {
44+
assertChildren: List[ShallowInstance] => Assertion = utils.expectNoChildren
45+
)(implicit pos: Position): Assertion = {
4246

4347
utils.assertComponent(result, expectedComp)(assertProps, assertChildren)
4448
}
4549

46-
def assertNativeComponent(result: ShallowInstance, expectedElement: ReactElement): Assertion = {
50+
def assertNativeComponent(result: ShallowInstance,
51+
expectedElement: ReactElement
52+
)(implicit pos: Position): Assertion = {
53+
4754
assertNativeComponent(result, expectedElement, utils.expectNoChildren)
4855
}
4956

5057
def assertNativeComponent(result: ShallowInstance,
5158
expectedElement: ReactElement,
5259
assertChildren: List[ShallowInstance] => Assertion
53-
): Assertion = {
60+
)(implicit pos: Position): Assertion = {
5461

5562
utils.assertNativeComponent(result, expectedElement, assertChildren)
5663
}

test/src/main/scala/scommons/react/test/util/TestRendererUtils.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scommons.react.test.util
22

33
import io.github.shogowada.scalajs.reactjs.classes.ReactClass
44
import io.github.shogowada.scalajs.reactjs.elements.ReactElement
5+
import org.scalactic.source.Position
56
import org.scalatest.{Assertion, Succeeded}
67
import scommons.react.UiComponent
78
import scommons.react.test.raw
@@ -36,7 +37,9 @@ trait TestRendererUtils {
3637
root.children(0)
3738
}
3839

39-
def findComponentProps[T](renderedComp: TestInstance, searchComp: UiComponent[T]): T = {
40+
def findComponentProps[T](renderedComp: TestInstance,
41+
searchComp: UiComponent[T])(implicit pos: Position): T = {
42+
4043
utils.findComponentProps(renderedComp, searchComp)
4144
}
4245

@@ -54,18 +57,23 @@ trait TestRendererUtils {
5457

5558
def assertTestComponent[T](result: TestInstance, expectedComp: UiComponent[T])
5659
(assertProps: T => Assertion,
57-
assertChildren: List[TestInstance] => Assertion = _ => Succeeded): Assertion = {
60+
assertChildren: List[TestInstance] => Assertion = _ => Succeeded
61+
)(implicit pos: Position): Assertion = {
5862

5963
utils.assertComponent(result, expectedComp)(assertProps, assertChildren)
6064
}
6165

62-
def assertNativeComponent(result: TestInstance, expectedElement: ReactElement): Assertion = {
66+
def assertNativeComponent(result: TestInstance,
67+
expectedElement: ReactElement
68+
)(implicit pos: Position): Assertion = {
69+
6370
assertNativeComponent(result, expectedElement, utils.expectNoChildren)
6471
}
6572

6673
def assertNativeComponent(result: TestInstance,
6774
expectedElement: ReactElement,
68-
assertChildren: List[TestInstance] => Assertion): Assertion = {
75+
assertChildren: List[TestInstance] => Assertion
76+
)(implicit pos: Position): Assertion = {
6977

7078
utils.assertNativeComponent(result, expectedElement, assertChildren)
7179
}

test/src/test/scala/scommons/react/test/util/RendererUtilsSpec.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import io.github.shogowada.scalajs.reactjs.VirtualDOM._
55
import io.github.shogowada.scalajs.reactjs.classes.ReactClass
66
import io.github.shogowada.scalajs.reactjs.elements.ReactElement
77
import io.github.shogowada.statictags.{Attribute, AttributeSpec}
8+
import org.scalactic.source.Position
9+
import org.scalatest.exceptions.TestFailedException
810
import org.scalatest.{Assertion, Failed, OutcomeOf}
911
import scommons.react.UiComponent
1012
import scommons.react.test.TestSpec
@@ -18,19 +20,19 @@ abstract class RendererUtilsSpec[Instance <: RenderedInstance] extends TestSpec
1820

1921
protected def doRender(element: ReactElement): Instance
2022

21-
def findComponentProps[T](renderedComp: Instance, searchComp: UiComponent[T]): T
23+
def findComponentProps[T](renderedComp: Instance, searchComp: UiComponent[T])(implicit pos: Position): T
2224
def findProps[T](renderedComp: Instance, searchComp: UiComponent[T]): List[T]
2325
def getComponentProps[T](component: Instance): T
2426
def findComponents(component: Instance, componentClass: ReactClass): List[Instance]
25-
def assertNativeComponent(result: Instance, expectedElement: ReactElement): Assertion
27+
def assertNativeComponent(result: Instance, expectedElement: ReactElement)(implicit pos: Position): Assertion
2628

2729
it should "fail if comp not found when findComponentProps" in {
2830
//given
2931
val comp = doRender(<(emptyComp)()())
3032
val searchComp = TestComp
3133

3234
//when
33-
val e = the[IllegalStateException] thrownBy {
35+
val e = the[TestFailedException] thrownBy {
3436
findComponentProps(comp, searchComp)
3537
}
3638

@@ -167,7 +169,7 @@ abstract class RendererUtilsSpec[Instance <: RenderedInstance] extends TestSpec
167169
}
168170

169171
//then
170-
e.getMessage should include ("""List("test1 child") was not equal to List()""")
172+
e.getMessage should include ("""List("test1 child") was not empty : Expected no children""")
171173
}
172174

173175
it should "assert props and children when assertNativeComponent" in {

test/src/test/scala/scommons/react/test/util/ShallowRendererUtilsSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class ShallowRendererUtilsSpec extends RendererUtilsSpec[ShallowInstance]
3636
}
3737

3838
//then
39-
e.getMessage should include ("""List("test2 child1") was not equal to List()""")
39+
e.getMessage should include ("""List("test2 child1") was not empty : Expected no children""")
4040
})
4141
}
4242

0 commit comments

Comments
 (0)