File tree 4 files changed +43
-4
lines changed
4 files changed +43
-4
lines changed Original file line number Diff line number Diff line change @@ -4,11 +4,16 @@ import '@testing-library/jest-dom';
4
4
import renderer from 'react-test-renderer' ;
5
5
6
6
import { select } from 'mo/common/dom' ;
7
- import { MoleculeProvider , Workbench } from 'mo' ;
7
+ import molecule , { MoleculeProvider , Workbench } from 'mo' ;
8
8
9
9
import { customExtensions } from '../../../stories/extensions' ;
10
10
11
11
describe ( 'Test MoleculeProvider' , ( ) => {
12
+ beforeEach ( ( ) => {
13
+ // Reset the extensions loaded state
14
+ molecule . extension . setLoaded ( false ) ;
15
+ } ) ;
16
+
12
17
test ( 'Match The MoleculeProvider snapshot' , ( ) => {
13
18
const component = renderer . create (
14
19
< MoleculeProvider >
@@ -36,13 +41,13 @@ describe('Test MoleculeProvider', () => {
36
41
) . toBeInTheDocument ( ) ;
37
42
} ) ;
38
43
39
- test ( 'MoleculeProvider load the extensions' , ( ) => {
44
+ test ( 'MoleculeProvider load the extensions' , async ( ) => {
40
45
render (
41
46
< MoleculeProvider extensions = { customExtensions } >
42
47
< Workbench />
43
48
</ MoleculeProvider >
44
49
) ;
45
- expect (
50
+ await expect (
46
51
select ( 'div[data-id="ActivityBarTestPane"]' )
47
52
) . toBeInTheDocument ( ) ;
48
53
} ) ;
Original file line number Diff line number Diff line change @@ -48,7 +48,9 @@ export class MoleculeProvider extends Component<IMoleculeProps> {
48
48
}
49
49
50
50
componentDidMount ( ) {
51
- this . initialize ( ) ;
51
+ if ( ! this . extensionService . isLoaded ( ) ) {
52
+ this . initialize ( ) ;
53
+ }
52
54
}
53
55
54
56
initialize ( ) {
@@ -73,6 +75,9 @@ export class MoleculeProvider extends Component<IMoleculeProps> {
73
75
74
76
// Finally, handle the rest of extensions
75
77
this . extensionService . load ( restExts ) ;
78
+
79
+ // Mark the extensionService as loaded
80
+ this . extensionService . setLoaded ( ) ;
76
81
}
77
82
78
83
initLocaleExts ( languages : IExtension [ ] ) {
Original file line number Diff line number Diff line change @@ -181,4 +181,12 @@ describe('Test ExtensionService', () => {
181
181
expect ( languagesExts . length ) . toBe ( 1 ) ;
182
182
expect ( otherExts . length ) . toBe ( 1 ) ;
183
183
} ) ;
184
+
185
+ test ( 'The ExtensionService loaded status' , ( ) => {
186
+ expect ( instance . isLoaded ( ) ) . not . toBeTruthy ( ) ;
187
+ instance . setLoaded ( ) ;
188
+ expect ( instance . isLoaded ( ) ) . toBeTruthy ( ) ;
189
+ instance . setLoaded ( false ) ;
190
+ expect ( instance . isLoaded ( ) ) . not . toBeTruthy ( ) ;
191
+ } ) ;
184
192
} ) ;
Original file line number Diff line number Diff line change @@ -96,6 +96,14 @@ export interface IExtensionService {
96
96
* @returns [ languagesExts, otherExtensions ]
97
97
*/
98
98
splitLanguagesExts ( extensions : IExtension [ ] ) : [ IExtension [ ] , IExtension [ ] ] ;
99
+ /**
100
+ * whether the extensions are loaded
101
+ */
102
+ isLoaded ( ) : boolean ;
103
+ /**
104
+ * Set the extensions are loaded
105
+ */
106
+ setLoaded ( flag ?: boolean ) : void ;
99
107
}
100
108
101
109
@singleton ( )
@@ -105,13 +113,26 @@ export class ExtensionService implements IExtensionService {
105
113
private readonly monacoService : IMonacoService ;
106
114
private _inactive : Function | undefined ;
107
115
private readonly localeService : ILocaleService ;
116
+ /**
117
+ * TODO: This property is used for marking the extensions were loaded
118
+ * we are going to refactor this logic after redesign the Molecule lifecycle.
119
+ */
120
+ private _isLoaded : boolean = false ;
108
121
109
122
constructor ( ) {
110
123
this . colorThemeService = container . resolve ( ColorThemeService ) ;
111
124
this . monacoService = container . resolve ( MonacoService ) ;
112
125
this . localeService = container . resolve ( LocaleService ) ;
113
126
}
114
127
128
+ public setLoaded ( flag ?: boolean ) : void {
129
+ this . _isLoaded = flag !== undefined ? flag : true ;
130
+ }
131
+
132
+ public isLoaded ( ) : boolean {
133
+ return this . _isLoaded ;
134
+ }
135
+
115
136
public getExtension ( id : UniqueId ) : IExtension | undefined {
116
137
return this . extensions . find ( searchById ( id ) ) ;
117
138
}
You can’t perform that action at this time.
0 commit comments