@@ -4,17 +4,30 @@ import path from "node:path";
4
4
import os from "node:os" ;
5
5
import { fileURLToPath } from "node:url" ;
6
6
import { readFile } from "node:fs/promises" ;
7
- import AbstractResolver from "../../../lib/ui5Framework/AbstractResolver.js " ;
7
+ import esmock from "esmock " ;
8
8
9
- class MyResolver extends AbstractResolver {
10
- static async fetchAllVersions ( ) { }
11
- }
9
+ test . beforeEach ( async ( t ) => {
10
+ t . context . osHomeDirStub = sinon . stub ( ) . callsFake ( ( ) => os . homedir ( ) ) ;
11
+ t . context . AbstractResolver = await esmock . p ( "../../../lib/ui5Framework/AbstractResolver.js" , {
12
+ "node:os" : {
13
+ homedir : t . context . osHomeDirStub
14
+ }
15
+ } ) ;
12
16
13
- test . afterEach . always ( ( ) => {
17
+ class MyResolver extends t . context . AbstractResolver {
18
+ static async fetchAllVersions ( ) { }
19
+ }
20
+
21
+ t . context . MyResolver = MyResolver ;
22
+ } ) ;
23
+
24
+ test . afterEach . always ( ( t ) => {
25
+ esmock . purge ( t . context . AbstractResolver ) ;
14
26
sinon . restore ( ) ;
15
27
} ) ;
16
28
17
29
test ( "AbstractResolver: abstract constructor should throw" , async ( t ) => {
30
+ const { AbstractResolver} = t . context ;
18
31
await t . throwsAsync ( async ( ) => {
19
32
new AbstractResolver ( {
20
33
cwd : "/test-project/" ,
@@ -24,6 +37,7 @@ test("AbstractResolver: abstract constructor should throw", async (t) => {
24
37
} ) ;
25
38
26
39
test ( "AbstractResolver: constructor" , ( t ) => {
40
+ const { MyResolver, AbstractResolver} = t . context ;
27
41
const resolver = new MyResolver ( {
28
42
cwd : "/test-project/" ,
29
43
version : "1.75.0"
@@ -33,12 +47,14 @@ test("AbstractResolver: constructor", (t) => {
33
47
} ) ;
34
48
35
49
test ( "AbstractResolver: constructor requires 'version'" , ( t ) => {
50
+ const { MyResolver} = t . context ;
36
51
t . throws ( ( ) => {
37
52
new MyResolver ( { } ) ;
38
53
} , { message : `AbstractResolver: Missing parameter "version"` } ) ;
39
54
} ) ;
40
55
41
56
test ( "AbstractResolver: Set absolute 'cwd'" , ( t ) => {
57
+ const { MyResolver} = t . context ;
42
58
const resolver = new MyResolver ( {
43
59
version : "1.75.0" ,
44
60
cwd : "/my-cwd"
@@ -47,6 +63,7 @@ test("AbstractResolver: Set absolute 'cwd'", (t) => {
47
63
} ) ;
48
64
49
65
test ( "AbstractResolver: Set relative 'cwd'" , ( t ) => {
66
+ const { MyResolver} = t . context ;
50
67
const resolver = new MyResolver ( {
51
68
version : "1.75.0" ,
52
69
cwd : "./my-cwd"
@@ -55,6 +72,7 @@ test("AbstractResolver: Set relative 'cwd'", (t) => {
55
72
} ) ;
56
73
57
74
test ( "AbstractResolver: Defaults 'cwd' to process.cwd()" , ( t ) => {
75
+ const { MyResolver} = t . context ;
58
76
const resolver = new MyResolver ( {
59
77
version : "1.75.0" ,
60
78
ui5HomeDir : "/ui5home"
@@ -63,6 +81,7 @@ test("AbstractResolver: Defaults 'cwd' to process.cwd()", (t) => {
63
81
} ) ;
64
82
65
83
test ( "AbstractResolver: Set absolute 'ui5HomeDir'" , ( t ) => {
84
+ const { MyResolver} = t . context ;
66
85
const resolver = new MyResolver ( {
67
86
version : "1.75.0" ,
68
87
ui5HomeDir : "/my-ui5HomeDir"
@@ -71,14 +90,27 @@ test("AbstractResolver: Set absolute 'ui5HomeDir'", (t) => {
71
90
} ) ;
72
91
73
92
test ( "AbstractResolver: Set relative 'ui5HomeDir'" , ( t ) => {
93
+ const { MyResolver} = t . context ;
74
94
const resolver = new MyResolver ( {
75
95
version : "1.75.0" ,
76
96
ui5HomeDir : "./my-ui5HomeDir"
77
97
} ) ;
78
98
t . is ( resolver . _ui5HomeDir , path . resolve ( "./my-ui5HomeDir" ) , "Should be resolved 'ui5HomeDir'" ) ;
79
99
} ) ;
80
100
101
+ test ( "AbstractResolver: 'ui5HomeDir' overriden os.homedir()" , ( t ) => {
102
+ const { MyResolver, osHomeDirStub} = t . context ;
103
+
104
+ osHomeDirStub . returns ( "./" ) ;
105
+
106
+ const resolver = new MyResolver ( {
107
+ version : "1.75.0"
108
+ } ) ;
109
+ t . is ( resolver . _ui5HomeDir , path . resolve ( "./.ui5" ) , "Should be resolved 'ui5HomeDir'" ) ;
110
+ } ) ;
111
+
81
112
test ( "AbstractResolver: Defaults 'ui5HomeDir' to ~/.ui5" , ( t ) => {
113
+ const { MyResolver} = t . context ;
82
114
const resolver = new MyResolver ( {
83
115
version : "1.75.0" ,
84
116
cwd : "/test-project/"
@@ -87,6 +119,7 @@ test("AbstractResolver: Defaults 'ui5HomeDir' to ~/.ui5", (t) => {
87
119
} ) ;
88
120
89
121
test ( "AbstractResolver: getLibraryMetadata should throw an Error when not implemented" , async ( t ) => {
122
+ const { MyResolver} = t . context ;
90
123
await t . throwsAsync ( async ( ) => {
91
124
const resolver = new MyResolver ( {
92
125
cwd : "/test-project/" ,
@@ -97,6 +130,7 @@ test("AbstractResolver: getLibraryMetadata should throw an Error when not implem
97
130
} ) ;
98
131
99
132
test ( "AbstractResolver: handleLibrary should throw an Error when not implemented" , async ( t ) => {
133
+ const { MyResolver} = t . context ;
100
134
await t . throwsAsync ( async ( ) => {
101
135
const resolver = new MyResolver ( {
102
136
cwd : "/test-project/" ,
@@ -107,6 +141,7 @@ test("AbstractResolver: handleLibrary should throw an Error when not implemented
107
141
} ) ;
108
142
109
143
test ( "AbstractResolver: install" , async ( t ) => {
144
+ const { MyResolver} = t . context ;
110
145
const resolver = new MyResolver ( {
111
146
cwd : "/test-project/" ,
112
147
version : "1.75.0"
@@ -175,6 +210,7 @@ test("AbstractResolver: install", async (t) => {
175
210
} ) ;
176
211
177
212
test ( "AbstractResolver: install error handling (rejection of metadata/install)" , async ( t ) => {
213
+ const { MyResolver} = t . context ;
178
214
const resolver = new MyResolver ( {
179
215
cwd : "/test-project/" ,
180
216
version : "1.75.0"
@@ -204,6 +240,7 @@ Failed to resolve library sap.ui.lib2: Error installing sap.ui.lib2`});
204
240
} ) ;
205
241
206
242
test ( "AbstractResolver: install error handling (rejection of dependency metadata/install)" , async ( t ) => {
243
+ const { MyResolver} = t . context ;
207
244
const resolver = new MyResolver ( {
208
245
cwd : "/test-project/" ,
209
246
version : "1.75.0"
@@ -234,6 +271,7 @@ Failed to resolve library sap.ui.lib2: Error installing sap.ui.lib2`});
234
271
} ) ;
235
272
236
273
test ( "AbstractResolver: install error handling (rejection of dependency install)" , async ( t ) => {
274
+ const { MyResolver} = t . context ;
237
275
const resolver = new MyResolver ( {
238
276
cwd : "/test-project/" ,
239
277
version : "1.75.0"
@@ -276,6 +314,7 @@ Failed to resolve library sap.ui.lib3: Error installing sap.ui.lib3`});
276
314
} ) ;
277
315
278
316
test ( "AbstractResolver: install error handling (handleLibrary throws error)" , async ( t ) => {
317
+ const { MyResolver} = t . context ;
279
318
const resolver = new MyResolver ( {
280
319
cwd : "/test-project/" ,
281
320
version : "1.75.0"
@@ -297,12 +336,14 @@ Failed to resolve library sap.ui.lib2: Error within handleLibrary: sap.ui.lib2`}
297
336
} ) ;
298
337
299
338
test ( "AbstractResolver: static fetchAllVersions should throw an Error when not implemented" , async ( t ) => {
339
+ const { AbstractResolver} = t . context ;
300
340
await t . throwsAsync ( async ( ) => {
301
341
await AbstractResolver . fetchAllVersions ( ) ;
302
342
} , { message : `AbstractResolver: static fetchAllVersions must be implemented!` } ) ;
303
343
} ) ;
304
344
305
345
test . serial ( "AbstractResolver: Static resolveVersion resolves 'latest'" , async ( t ) => {
346
+ const { MyResolver} = t . context ;
306
347
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" )
307
348
. returns ( [ "1.75.0" , "1.75.1" , "1.76.0" ] ) ;
308
349
@@ -321,6 +362,7 @@ test.serial("AbstractResolver: Static resolveVersion resolves 'latest'", async (
321
362
} ) ;
322
363
323
364
test . serial ( "AbstractResolver: Static resolveVersion resolves 'MAJOR.MINOR'" , async ( t ) => {
365
+ const { MyResolver} = t . context ;
324
366
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" )
325
367
. returns ( [ "1.75.0" , "1.75.1" , "1.76.0" ] ) ;
326
368
@@ -339,6 +381,7 @@ test.serial("AbstractResolver: Static resolveVersion resolves 'MAJOR.MINOR'", as
339
381
} ) ;
340
382
341
383
test . serial ( "AbstractResolver: Static resolveVersion resolves 'MAJOR.MINOR.PATCH'" , async ( t ) => {
384
+ const { MyResolver} = t . context ;
342
385
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" )
343
386
. returns ( [ "1.75.0" , "1.75.1" , "1.76.0" ] ) ;
344
387
@@ -357,6 +400,7 @@ test.serial("AbstractResolver: Static resolveVersion resolves 'MAJOR.MINOR.PATCH
357
400
} ) ;
358
401
359
402
test . serial ( "AbstractResolver: Static resolveVersion resolves 'MAJOR.MINOR.PATCH-prerelease'" , async ( t ) => {
403
+ const { MyResolver} = t . context ;
360
404
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" )
361
405
. returns ( [ "1.76.0" , "1.77.0" , "1.78.0" , "1.79.0-SNAPSHOT" ] ) ;
362
406
@@ -375,6 +419,7 @@ test.serial("AbstractResolver: Static resolveVersion resolves 'MAJOR.MINOR.PATCH
375
419
} ) ;
376
420
377
421
test . serial ( "AbstractResolver: Static resolveVersion does not include prereleases for 'latest' version" , async ( t ) => {
422
+ const { MyResolver} = t . context ;
378
423
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" )
379
424
. returns ( [ "1.76.0" , "1.77.0" , "1.78.0" , "1.79.0-SNAPSHOT" ] ) ;
380
425
@@ -393,6 +438,7 @@ test.serial("AbstractResolver: Static resolveVersion does not include prerelease
393
438
} ) ;
394
439
395
440
test . serial ( "AbstractResolver: Static resolveVersion without options" , async ( t ) => {
441
+ const { MyResolver} = t . context ;
396
442
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" )
397
443
. returns ( [ "1.75.0" ] ) ;
398
444
@@ -406,6 +452,7 @@ test.serial("AbstractResolver: Static resolveVersion without options", async (t)
406
452
} ) ;
407
453
408
454
test . serial ( "AbstractResolver: Static resolveVersion throws error for 'lts'" , async ( t ) => {
455
+ const { MyResolver} = t . context ;
409
456
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" ) ;
410
457
411
458
const error = await t . throwsAsync ( MyResolver . resolveVersion ( "lts" , {
@@ -419,6 +466,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for 'lts'", as
419
466
} ) ;
420
467
421
468
test . serial ( "AbstractResolver: Static resolveVersion throws error for '1'" , async ( t ) => {
469
+ const { MyResolver} = t . context ;
422
470
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" ) ;
423
471
424
472
const error = await t . throwsAsync ( MyResolver . resolveVersion ( "1" , {
@@ -432,6 +480,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for '1'", asyn
432
480
} ) ;
433
481
434
482
test . serial ( "AbstractResolver: Static resolveVersion throws error for '1.x'" , async ( t ) => {
483
+ const { MyResolver} = t . context ;
435
484
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" ) ;
436
485
437
486
const error = await t . throwsAsync ( MyResolver . resolveVersion ( "1.x" , {
@@ -445,6 +494,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for '1.x'", as
445
494
} ) ;
446
495
447
496
test . serial ( "AbstractResolver: Static resolveVersion throws error for '1.75.x'" , async ( t ) => {
497
+ const { MyResolver} = t . context ;
448
498
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" ) ;
449
499
450
500
const error = await t . throwsAsync ( MyResolver . resolveVersion ( "1.75.x" , {
@@ -458,6 +508,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for '1.75.x'",
458
508
} ) ;
459
509
460
510
test . serial ( "AbstractResolver: Static resolveVersion throws error for '^1.75.0'" , async ( t ) => {
511
+ const { MyResolver} = t . context ;
461
512
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" ) ;
462
513
463
514
const error = await t . throwsAsync ( MyResolver . resolveVersion ( "^1.75.0" , {
@@ -471,6 +522,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for '^1.75.0'"
471
522
} ) ;
472
523
473
524
test . serial ( "AbstractResolver: Static resolveVersion throws error for '~1.75.0'" , async ( t ) => {
525
+ const { MyResolver} = t . context ;
474
526
const fetchAllVersionsStub = sinon . stub ( MyResolver , "fetchAllVersions" ) ;
475
527
476
528
const error = await t . throwsAsync ( MyResolver . resolveVersion ( "~1.75.0" , {
@@ -484,6 +536,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for '~1.75.0'"
484
536
} ) ;
485
537
486
538
test . serial ( "AbstractResolver: Static resolveVersion throws error for version not found" , async ( t ) => {
539
+ const { MyResolver} = t . context ;
487
540
sinon . stub ( MyResolver , "fetchAllVersions" )
488
541
. returns ( [ "1.75.0" , "1.75.1" , "1.76.0" ] ) ;
489
542
@@ -498,6 +551,7 @@ test.serial("AbstractResolver: Static resolveVersion throws error for version no
498
551
499
552
test . serial (
500
553
"AbstractResolver: Static resolveVersion throws error for version lower than lowest OpenUI5 version" , async ( t ) => {
554
+ const { AbstractResolver} = t . context ;
501
555
class Openui5Resolver extends AbstractResolver {
502
556
static async fetchAllVersions ( ) { }
503
557
}
@@ -517,6 +571,7 @@ test.serial(
517
571
518
572
test . serial (
519
573
"AbstractResolver: Static resolveVersion throws error for version lower than lowest SAPUI5 version" , async ( t ) => {
574
+ const { AbstractResolver} = t . context ;
520
575
class Sapui5Resolver extends AbstractResolver {
521
576
static async fetchAllVersions ( ) { }
522
577
}
@@ -536,6 +591,7 @@ test.serial(
536
591
537
592
test . serial (
538
593
"AbstractResolver: Static resolveVersion throws error when latest OpenUI5 version cannot be found" , async ( t ) => {
594
+ const { AbstractResolver} = t . context ;
539
595
class Openui5Resolver extends AbstractResolver {
540
596
static async fetchAllVersions ( ) { }
541
597
}
@@ -554,6 +610,7 @@ test.serial(
554
610
555
611
test . serial (
556
612
"AbstractResolver: Static resolveVersion throws error when latest SAPUI5 version cannot be found" , async ( t ) => {
613
+ const { AbstractResolver} = t . context ;
557
614
class Sapui5Resolver extends AbstractResolver {
558
615
static async fetchAllVersions ( ) { }
559
616
}
@@ -572,6 +629,7 @@ test.serial(
572
629
573
630
test . serial (
574
631
"AbstractResolver: Static resolveVersion throws error when OpenUI5 version range cannot be resolved" , async ( t ) => {
632
+ const { AbstractResolver} = t . context ;
575
633
class Openui5Resolver extends AbstractResolver {
576
634
static async fetchAllVersions ( ) { }
577
635
}
@@ -590,6 +648,7 @@ test.serial(
590
648
591
649
test . serial (
592
650
"AbstractResolver: Static resolveVersion throws error when SAPUI5 version range cannot be resolved" , async ( t ) => {
651
+ const { AbstractResolver} = t . context ;
593
652
class Sapui5Resolver extends AbstractResolver {
594
653
static async fetchAllVersions ( ) { }
595
654
}
@@ -607,6 +666,8 @@ test.serial(
607
666
} ) ;
608
667
609
668
test . serial ( "AbstractResolver: SEMVER_VERSION_REGEXP should be aligned with JSON schema" , async ( t ) => {
669
+ const { AbstractResolver} = t . context ;
670
+
610
671
const projectSchema = JSON . parse (
611
672
await readFile ( fileURLToPath (
612
673
new URL ( "../../../lib/validation/schema/specVersion/kind/project.json" , import . meta. url )
0 commit comments