@@ -56,6 +56,48 @@ test('<TabProvider /> should update to new tab on click', () => {
56
56
expect ( tabs . find ( '#second' ) . prop ( 'aria-expanded' ) ) . toBe ( false ) ;
57
57
} ) ;
58
58
59
+ test ( '<TabProvider /> should not reset to default tab when parent updates' , ( ) => {
60
+ class TestComponent extends React . Component {
61
+ state = {
62
+ state : 'one' ,
63
+ }
64
+
65
+ render ( ) {
66
+ return (
67
+ < TabProvider defaultTab = "second" >
68
+ < div className = "rwt__tabs" >
69
+ < TabList >
70
+ < Tab tabFor = "first" > < span > Tab 1</ span > </ Tab >
71
+ < Tab tabFor = "second" > < span > Tab 2</ span > </ Tab >
72
+ </ TabList >
73
+ < TabPanel tabId = "first" > < p > TabPanel 1</ p > </ TabPanel >
74
+ < TabPanel tabId = "second" > < p > TabPanel 2</ p > </ TabPanel >
75
+ </ div >
76
+ </ TabProvider >
77
+ ) ;
78
+ }
79
+ }
80
+ const tabs = mount ( (
81
+ < TestComponent />
82
+ ) ) ;
83
+
84
+ expect ( tabs . find ( '#second-tab' ) . prop ( 'aria-selected' ) ) . toBe ( true ) ;
85
+ expect ( tabs . find ( '#second' ) . prop ( 'aria-expanded' ) ) . toBe ( true ) ;
86
+
87
+ tabs . find ( '#first-tab' ) . simulate ( 'click' ) ;
88
+
89
+ expect ( tabs . find ( '#first-tab' ) . prop ( 'aria-selected' ) ) . toBe ( true ) ;
90
+ expect ( tabs . find ( '#first' ) . prop ( 'aria-expanded' ) ) . toBe ( true ) ;
91
+
92
+ tabs . setState ( { state : 'two' } ) ;
93
+
94
+ expect ( tabs . find ( '#first-tab' ) . prop ( 'aria-selected' ) ) . toBe ( true ) ;
95
+ expect ( tabs . find ( '#first' ) . prop ( 'aria-expanded' ) ) . toBe ( true ) ;
96
+
97
+ expect ( tabs . find ( '#second-tab' ) . prop ( 'aria-selected' ) ) . toBe ( false ) ;
98
+ expect ( tabs . find ( '#second' ) . prop ( 'aria-expanded' ) ) . toBe ( false ) ;
99
+ } ) ;
100
+
59
101
test ( '<TabProvider /> should call onChange callback on selection' , ( ) => {
60
102
const onChange = jest . fn ( ) ;
61
103
@@ -77,7 +119,7 @@ test('<TabProvider /> should call onChange callback on selection', () => {
77
119
expect ( onChange ) . toHaveBeenCalledWith ( 'first' ) ;
78
120
} ) ;
79
121
80
- test ( '<TabProvider /> should select correct tab when selected prop updates ' , ( ) => {
122
+ test ( '<TabProvider /> should select correct tab when default tab prop changes ' , ( ) => {
81
123
const onChange = jest . fn ( ) ;
82
124
83
125
const tabs = mount ( (
@@ -95,11 +137,29 @@ test('<TabProvider /> should select correct tab when selected prop updates', ()
95
137
96
138
expect ( tabs . find ( '#second-tab' ) . prop ( 'aria-selected' ) ) . toBe ( true ) ;
97
139
expect ( tabs . find ( '#second' ) . prop ( 'aria-expanded' ) ) . toBe ( true ) ;
98
- tabs . find ( '# first-tab' ) . simulate ( 'click' ) ;
140
+ tabs . setProps ( { defaultTab : ' first' } ) ;
99
141
expect ( tabs . find ( '#first-tab' ) . prop ( 'aria-selected' ) ) . toBe ( true ) ;
100
142
expect ( tabs . find ( '#first' ) . prop ( 'aria-expanded' ) ) . toBe ( true ) ;
101
143
expect ( tabs . find ( '#second-tab' ) . prop ( 'aria-selected' ) ) . toBe ( false ) ;
102
144
expect ( tabs . find ( '#second' ) . prop ( 'aria-expanded' ) ) . toBe ( false ) ;
145
+ } ) ;
146
+
147
+ test ( '<TabProvider /> should not change tab when props are unchanged' , ( ) => {
148
+ const onChange = jest . fn ( ) ;
149
+
150
+ const tabs = mount ( (
151
+ < TabProvider defaultTab = "second" onChange = { onChange } >
152
+ < div className = "rwt__tabs" >
153
+ < TabList >
154
+ < Tab tabFor = "first" > < span > Tab 1</ span > </ Tab >
155
+ < Tab tabFor = "second" > < span > Tab 2</ span > </ Tab >
156
+ </ TabList >
157
+ < TabPanel tabId = "first" > < p > TabPanel 1</ p > </ TabPanel >
158
+ < TabPanel tabId = "second" > < p > TabPanel 2</ p > </ TabPanel >
159
+ </ div >
160
+ </ TabProvider >
161
+ ) ) ;
162
+
103
163
tabs . setProps ( { defaultTab : 'second' } ) ;
104
164
expect ( tabs . find ( '#second-tab' ) . prop ( 'aria-selected' ) ) . toBe ( true ) ;
105
165
expect ( tabs . find ( '#second' ) . prop ( 'aria-expanded' ) ) . toBe ( true ) ;
0 commit comments