@@ -5,6 +5,7 @@ import { JSDOM } from "jsdom"
5
5
import {
6
6
getNlsConfiguration ,
7
7
nlsConfigElementId ,
8
+ registerRequireOnSelf ,
8
9
setBodyBackgroundToThemeBackgroundColor ,
9
10
} from "../../../src/browser/pages/vscode"
10
11
@@ -175,4 +176,180 @@ describe("vscode", () => {
175
176
localStorage . removeItem ( "colorThemeData" )
176
177
} )
177
178
} )
179
+ describe ( "registerRequireOnSelf" , ( ) => {
180
+ beforeAll ( ( ) => {
181
+ const { window } = new JSDOM ( )
182
+ // @ts -expect-error We know these are the exact same type
183
+ // but we need to do this for the test to work
184
+ global . self = window . self
185
+ global . window = window as unknown as Window & typeof globalThis
186
+ global . document = window . document
187
+ global . navigator = window . navigator
188
+ global . location = location as Location
189
+ } )
190
+
191
+ beforeEach ( ( ) => {
192
+ jest . clearAllMocks ( )
193
+ } )
194
+
195
+ afterEach ( ( ) => {
196
+ jest . resetModules ( )
197
+ } )
198
+
199
+ afterAll ( ( ) => {
200
+ jest . restoreAllMocks ( )
201
+
202
+ global . window = undefined as unknown as Window & typeof globalThis
203
+ global . document = undefined as unknown as Document & typeof globalThis
204
+ global . navigator = undefined as unknown as Navigator & typeof globalThis
205
+ global . location = undefined as unknown as Location & typeof globalThis
206
+ } )
207
+ it ( "should throw an error if self is undefined" , ( ) => {
208
+ const options = {
209
+ base : "/" ,
210
+ csStaticBase : "/hello" ,
211
+ logLevel : 1 ,
212
+ }
213
+ const nlsConfig = {
214
+ first : "Jane" ,
215
+ last : "Doe" ,
216
+ locale : "en" ,
217
+ availableLanguages : { } ,
218
+ }
219
+ const errorMsgPrefix = "[vscode]"
220
+ const errorMessage = `${ errorMsgPrefix } Could not register require on self. self is undefined.`
221
+ expect ( ( ) => {
222
+ registerRequireOnSelf ( {
223
+ // @ts -expect-error We are checking what happens if self is undefined.
224
+ self : undefined ,
225
+ window : global . window ,
226
+ nlsConfig : nlsConfig ,
227
+ options,
228
+ } )
229
+ } ) . toThrowError ( errorMessage )
230
+ } )
231
+
232
+ it ( "should throw an error if window is undefined" , ( ) => {
233
+ const options = {
234
+ base : "/" ,
235
+ csStaticBase : "/hello" ,
236
+ logLevel : 1 ,
237
+ }
238
+ const nlsConfig = {
239
+ first : "Jane" ,
240
+ last : "Doe" ,
241
+ locale : "en" ,
242
+ availableLanguages : { } ,
243
+ }
244
+ const errorMsgPrefix = "[vscode]"
245
+ const errorMessage = `${ errorMsgPrefix } Could not register require on self. window is undefined.`
246
+ const mockSelf = { } as Window & typeof globalThis
247
+ expect ( ( ) => {
248
+ registerRequireOnSelf ( {
249
+ self : mockSelf ,
250
+ // @ts -expect-error We need to test if window is undefined
251
+ window : undefined ,
252
+ nlsConfig : nlsConfig ,
253
+ options,
254
+ } )
255
+ } ) . toThrowError ( errorMessage )
256
+ } )
257
+ it ( "should throw an error if options.csStaticBase is undefined or an empty string" , ( ) => {
258
+ const options = {
259
+ base : "/" ,
260
+ csStaticBase : "" ,
261
+ logLevel : 1 ,
262
+ }
263
+ const nlsConfig = {
264
+ first : "Jane" ,
265
+ last : "Doe" ,
266
+ locale : "en" ,
267
+ availableLanguages : { } ,
268
+ }
269
+ const errorMsgPrefix = "[vscode]"
270
+ const errorMessage = `${ errorMsgPrefix } Could not register require on self. options or options.csStaticBase is undefined or missing.`
271
+ const mockSelf = { } as Window & typeof globalThis
272
+ expect ( ( ) => {
273
+ registerRequireOnSelf ( {
274
+ self : mockSelf ,
275
+ window : window ,
276
+ nlsConfig : nlsConfig ,
277
+ options,
278
+ } )
279
+ } ) . toThrowError ( errorMessage )
280
+ expect ( ( ) => {
281
+ registerRequireOnSelf ( {
282
+ self : mockSelf ,
283
+ window : window ,
284
+ nlsConfig : nlsConfig ,
285
+ // @ts -expect-error We need to check what happens when options is undefined
286
+ options : undefined ,
287
+ } )
288
+ } ) . toThrowError ( errorMessage )
289
+ } )
290
+ it ( "should throw an error if nlsConfig is undefined" , ( ) => {
291
+ const options = {
292
+ base : "/" ,
293
+ csStaticBase : "/" ,
294
+ logLevel : 1 ,
295
+ }
296
+ const errorMsgPrefix = "[vscode]"
297
+ const errorMessage = `${ errorMsgPrefix } Could not register require on self. nlsConfig is undefined.`
298
+ const mockSelf = { } as Window & typeof globalThis
299
+ expect ( ( ) => {
300
+ registerRequireOnSelf ( {
301
+ self : mockSelf ,
302
+ window : window ,
303
+ // @ts -expect-error We need to check that it works when this is undefined
304
+ nlsConfig : undefined ,
305
+ options,
306
+ } )
307
+ } ) . toThrowError ( errorMessage )
308
+ } )
309
+ it ( "should declare require on self" , ( ) => {
310
+ const options = {
311
+ base : "/" ,
312
+ csStaticBase : "/" ,
313
+ logLevel : 1 ,
314
+ }
315
+ const nlsConfig = {
316
+ first : "Jane" ,
317
+ last : "Doe" ,
318
+ locale : "en" ,
319
+ availableLanguages : { } ,
320
+ }
321
+ const mockSelf = { } as Window & typeof globalThis
322
+ registerRequireOnSelf ( {
323
+ self : mockSelf ,
324
+ window : window ,
325
+ nlsConfig : nlsConfig ,
326
+ options,
327
+ } )
328
+
329
+ const hasRequireProperty = Object . prototype . hasOwnProperty . call ( mockSelf , "require" )
330
+ expect ( hasRequireProperty ) . toBeTruthy ( )
331
+ } )
332
+ it ( "should return true if it registered succesfully" , ( ) => {
333
+ const options = {
334
+ base : "/" ,
335
+ csStaticBase : "/" ,
336
+ logLevel : 1 ,
337
+ }
338
+ const nlsConfig = {
339
+ first : "Jane" ,
340
+ last : "Doe" ,
341
+ locale : "en" ,
342
+ availableLanguages : { } ,
343
+ }
344
+ const mockSelf = { } as Window & typeof globalThis
345
+ const didRegister = registerRequireOnSelf ( {
346
+ self : mockSelf ,
347
+ window : window ,
348
+ nlsConfig : nlsConfig ,
349
+ options,
350
+ } )
351
+
352
+ expect ( didRegister ) . toBe ( true )
353
+ } )
354
+ } )
178
355
} )
0 commit comments