Skip to content

Commit 1b53e82

Browse files
updateUntilIdle mounts program only once
1 parent 9d0b21e commit 1b53e82

1 file changed

Lines changed: 5 additions & 12 deletions

File tree

tea-cup/src/TeaCup/Testing.tsx

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,20 +88,20 @@ export function updateUntilIdle<Model, Msg, T>(
8888
fun: Trigger<Model, Msg, T>,
8989
): Promise<[Model, T]> {
9090
return new Promise((resolve) => {
91-
fun(<Program {...testableProps(resolve, props, fun)} />);
91+
let wrapper = fun(<Program {...testableProps(resolve, props, () => wrapper)} />);
9292
});
9393
}
9494

9595
function testableProps<Model, Msg, T>(
9696
resolve: ResolveType<Model, T>,
9797
props: ProgramProps<Model, Msg>,
98-
fun: Trigger<Model, Msg, T>,
98+
getWrapper: () => T,
9999
) {
100100
const tprops: ProgramProps<TestableModel<Model, Msg, T>, Msg> = {
101101
init: initTestable(resolve, props.init),
102102
view: viewTestable(props.view),
103103
update: updateTestable(props.update),
104-
subscriptions: subscriptionsTestable(props, fun),
104+
subscriptions: subscriptionsTestable(props, getWrapper),
105105
};
106106
return tprops;
107107
}
@@ -152,19 +152,12 @@ function updateTestable<Model, Msg, T>(
152152

153153
function subscriptionsTestable<Model, Msg, T>(
154154
props: ProgramProps<Model, Msg>,
155-
fun: Trigger<Model, Msg, T>,
155+
getWrapper: () => T,
156156
): ProgramProps<TestableModel<Model, Msg, T>, Msg>['subscriptions'] {
157157
return (model: TestableModel<Model, Msg, T>) => {
158158
const subs = props.subscriptions(model.model);
159159
if (model.cmds.length === 0) {
160-
const result = fun(
161-
<Program
162-
init={() => [model.model, Cmd.none()]}
163-
update={(msg, model) => [model, Cmd.none()]}
164-
view={(d, m) => props.view(d, m)}
165-
subscriptions={(d) => Sub.none()}
166-
/>,
167-
);
160+
const result = getWrapper();
168161
model.resolve([model.model, result]);
169162
return subs;
170163
}

0 commit comments

Comments
 (0)