Skip to content

Commit 0c115e4

Browse files
committed
More realistic, failing BackstackTransitionsTest
`BackstackTransitionsTest` now uses a map, to expose problems hidden when key and content are the same thing. As a result we crash when popping. Reproduces #63.
1 parent 82429b4 commit 0c115e4

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

compose-backstack/src/androidTest/java/com/zachklipp/compose/backstack/BackstackTransitionsTest.kt

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ class BackstackTransitionsTest {
4343
assertInitialStateWithMultipleScreens(Crossfade)
4444
}
4545

46+
@Test
47+
fun transition_noop_forward() {
48+
assertTransition(null, forward = true)
49+
}
50+
4651
@Test
4752
fun transition_slide_forward() {
4853
assertTransition(Slide, forward = true)
@@ -53,6 +58,11 @@ class BackstackTransitionsTest {
5358
assertTransition(Crossfade, forward = true)
5459
}
5560

61+
@Test
62+
fun transition_noop_backward() {
63+
assertTransition(null, forward = false)
64+
}
65+
5666
@Test
5767
fun transition_slide_backward() {
5868
assertTransition(Slide, forward = false)
@@ -82,19 +92,29 @@ class BackstackTransitionsTest {
8292
compose.onNodeWithText("one").assertDoesNotExist()
8393
}
8494

85-
private fun assertTransition(transition: BackstackTransition, forward: Boolean) {
86-
val firstBackstack = listOf("one")
87-
val secondBackstack = listOf("one", "two")
95+
private fun assertTransition(transition: BackstackTransition?, forward: Boolean) {
96+
val firstBackstack = mapOf(1 to "one")
97+
val secondBackstack = mapOf(1 to "one", 2 to "two")
8898
var backstack by mutableStateOf(if (forward) firstBackstack else secondBackstack)
8999
compose.mainClock.autoAdvance = false
90-
compose.setContent {
91-
Backstack(
92-
backstack,
93-
frameController = rememberTransitionController(
94-
animationSpec = animation,
95-
transition = transition
96-
)
97-
) { BasicText(it) }
100+
101+
if (transition != null) {
102+
compose.setContent {
103+
Backstack(
104+
backstack.keys.toList(),
105+
frameController = rememberTransitionController(
106+
animationSpec = animation,
107+
transition = transition
108+
)
109+
) { BasicText(backstack.getValue(it)) }
110+
}
111+
} else {
112+
compose.setContent {
113+
Backstack(
114+
backstack.keys.toList(),
115+
frameController = NoopFrameController()
116+
) { BasicText(backstack.getValue(it)) }
117+
}
98118
}
99119
val initialText = if (forward) "one" else "two"
100120
val newText = if (forward) "two" else "one"

0 commit comments

Comments
 (0)