@@ -5,6 +5,7 @@ import { JSDOM } from "jsdom"
55import {
66 getNlsConfiguration ,
77 nlsConfigElementId ,
8+ registerRequireOnSelf ,
89 setBodyBackgroundToThemeBackgroundColor ,
910} from "../../../src/browser/pages/vscode"
1011
@@ -175,4 +176,180 @@ describe("vscode", () => {
175176 localStorage . removeItem ( "colorThemeData" )
176177 } )
177178 } )
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+ } )
178355} )
0 commit comments