Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit264b5d0

Browse files
committed
feat: throw exception if we cannot get back feature reducer (like in indexed array state)
1 parentb33dc3b commit264b5d0

File tree

7 files changed

+182
-8
lines changed

7 files changed

+182
-8
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespaceReduxSimple.Tests.Setup.NestedArrayStore
2+
{
3+
publicclassUpdateNumberAction
4+
{
5+
publicintNumber{get;set;}
6+
}
7+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
usingConverto;
2+
usingSystem.Collections.Generic;
3+
usingstaticReduxSimple.Reducers;
4+
5+
namespaceReduxSimple.Tests.Setup.NestedArrayStore
6+
{
7+
publicstaticclassReducers
8+
{
9+
publicstaticIEnumerable<On<NestedState>>CreateReducers()
10+
{
11+
returnnewList<On<NestedState>>
12+
{
13+
On<UpdateNumberAction,NestedState>(
14+
(state,action)=>state.With(new{RandomNumber=action.Number})
15+
)
16+
};
17+
}
18+
}
19+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
usingstaticReduxSimple.Selectors;
2+
3+
namespaceReduxSimple.Tests.Setup.NestedArrayStore
4+
{
5+
publicstaticclassSelectors
6+
{
7+
publicstaticISelectorWithoutProps<RootState,NestedState?>SelectNested1=CreateSelector(
8+
(RootStatestate)=>state.States[0]
9+
);
10+
publicstaticISelectorWithoutProps<RootState,NestedState?>SelectNested2=CreateSelector(
11+
(RootStatestate)=>state.States[1]
12+
);
13+
publicstaticISelectorWithoutProps<RootState,NestedState?>SelectNested3=CreateSelector(
14+
(RootStatestate)=>state.States[2]
15+
);
16+
publicstaticISelectorWithoutProps<RootState,NestedState?>SelectNested4=CreateSelector(
17+
(RootStatestate)=>state.States[3]
18+
);
19+
20+
publicstaticISelectorWithoutProps<RootState,int?>SelectRandomNumber1=CreateSelector(
21+
SelectNested1,
22+
nested=>nested?.RandomNumber
23+
);
24+
publicstaticISelectorWithoutProps<RootState,int?>SelectRandomNumber2=CreateSelector(
25+
SelectNested2,
26+
nested=>nested?.RandomNumber
27+
);
28+
publicstaticISelectorWithoutProps<RootState,int?>SelectRandomNumber3=CreateSelector(
29+
SelectNested3,
30+
nested=>nested?.RandomNumber
31+
);
32+
publicstaticISelectorWithoutProps<RootState,int?>SelectRandomNumber4=CreateSelector(
33+
SelectNested4,
34+
nested=>nested?.RandomNumber
35+
);
36+
}
37+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
usingSystem.Collections.Generic;
2+
usingSystem.Collections.Immutable;
3+
4+
namespaceReduxSimple.Tests.Setup.NestedArrayStore
5+
{
6+
publicclassRootState
7+
{
8+
publicImmutableArray<NestedState>States{get;set;}
9+
10+
publicstaticRootStateInitialState=>
11+
newRootState
12+
{
13+
States=
14+
newList<NestedState>
15+
{
16+
NestedState.InitialState,
17+
NestedState.InitialState,
18+
NestedState.InitialState,
19+
NestedState.InitialState
20+
}
21+
.ToImmutableArray()
22+
};
23+
}
24+
25+
publicclassNestedState
26+
{
27+
publicint?RandomNumber{get;set;}
28+
29+
publicstaticNestedStateInitialState=>
30+
newNestedState
31+
{
32+
RandomNumber=0
33+
};
34+
}
35+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
usingReduxSimple.Tests.Setup.NestedArrayStore;
2+
usingSystem;
3+
usingSystem.Linq;
4+
usingXunit;
5+
usingRootStore=ReduxSimple.ReduxStore<ReduxSimple.Tests.Setup.NestedArrayStore.RootState>;
6+
usingstaticReduxSimple.Reducers;
7+
usingstaticReduxSimple.Tests.Setup.NestedArrayStore.Reducers;
8+
usingstaticReduxSimple.Tests.Setup.NestedArrayStore.Selectors;
9+
10+
namespaceReduxSimple.Tests
11+
{
12+
publicclassNestedArrayStoreTest
13+
{
14+
[Fact]
15+
publicvoidThrowExceptionIfUsingIndexedArrayForNestedStates()
16+
{
17+
// Arrange
18+
varnestedReducers=CreateReducers();
19+
20+
varreducers1=CreateSubReducers(
21+
nestedReducers.ToArray(),
22+
SelectNested1
23+
);
24+
25+
varreducers=reducers1;
26+
27+
varstore=newRootStore(
28+
reducers,
29+
RootState.InitialState
30+
);
31+
32+
// Act
33+
intobserveCount=0;
34+
int?lastResult1=null;
35+
int?lastResult2=null;
36+
int?lastResult3=null;
37+
int?lastResult4=null;
38+
39+
store.Select(SelectRandomNumber1)
40+
.Subscribe(number=>
41+
{
42+
observeCount++;
43+
lastResult1=number;
44+
});
45+
store.Select(SelectRandomNumber2)
46+
.Subscribe(number=>
47+
{
48+
observeCount++;
49+
lastResult2=number;
50+
});
51+
store.Select(SelectRandomNumber3)
52+
.Subscribe(number=>
53+
{
54+
observeCount++;
55+
lastResult3=number;
56+
});
57+
store.Select(SelectRandomNumber4)
58+
.Subscribe(number=>
59+
{
60+
observeCount++;
61+
lastResult4=number;
62+
});
63+
64+
varexception=Assert.Throws<NotSupportedException>(()=>
65+
store.Dispatch(newUpdateNumberAction{Number=10})
66+
);
67+
68+
// Assert
69+
Assert.Equal("A sub-reducer cannot find the feature reducer of `NestedState` inside `RootState`.",exception.Message);
70+
}
71+
}
72+
}

‎ReduxSimple.Tests/ReusedStateStoreTest.cs‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ public void CanCreateAndUseSubReducers()
1717
// Arrange
1818
varnestedReducers=CreateReducers();
1919

20-
varreducers2=CreateSubReducers(
21-
nestedReducers.ToArray(),
22-
SelectNested2
23-
);
2420
varreducers1=CreateSubReducers(
2521
nestedReducers.ToArray(),
2622
SelectNested1
2723
);
24+
varreducers2=CreateSubReducers(
25+
nestedReducers.ToArray(),
26+
SelectNested2
27+
);
2828
varreducers3=CreateSubReducers(
2929
nestedReducers.ToArray(),
3030
SelectNested3

‎ReduxSimple/Reducers.Sub.cs‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,16 @@ Func<TState, TFeatureState> selectFeature
4242
}
4343

4444
varfeatureProperty=parentStateProperties
45-
.FirstOrDefault(p=>
45+
.SingleOrDefault(p=>
4646
{
4747
returnp.GetValue(state)==featureState;
4848
});
4949

5050
if(featureProperty==null)
5151
{
52-
returnstate;
52+
thrownewNotSupportedException(
53+
$"A sub-reducer cannot find the feature reducer of `{typeof(TFeatureState).Name}` inside `{typeof(TState).Name}`."
54+
);
5355
}
5456

5557
varstateCopy=state.Copy();
@@ -102,14 +104,16 @@ public static On<TState>[] CreateSubReducers<TState, TFeatureState>(
102104
}
103105

104106
varfeatureProperty=parentStateProperties
105-
.FirstOrDefault(p=>
107+
.SingleOrDefault(p=>
106108
{
107109
returnp.GetValue(state)==featureState;
108110
});
109111

110112
if(featureProperty==null)
111113
{
112-
returnstate;
114+
thrownewNotSupportedException(
115+
$"A sub-reducer cannot find the feature reducer of `{typeof(TFeatureState).Name}` inside `{typeof(TState).Name}`."
116+
);
113117
}
114118

115119
varstateCopy=state.Copy();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp