-
Notifications
You must be signed in to change notification settings - Fork 11
/
hydrate.test.ts
129 lines (110 loc) · 3.79 KB
/
hydrate.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import { assert, assertEquals, assertRejects } from "@std/assert"
import { describe, it } from "@std/testing/bdd"
import { PackageRequirement } from "../types.ts"
import * as semver from "../utils/semver.ts"
import hydrate from "./hydrate.ts"
describe("hydrate()", () => {
it("hydrates.1", async function() {
const pkgs = [
{ project: 'nodejs.org', constraint: new semver.Range('*') },
{ project: 'nodejs.org', constraint: new semver.Range('>=18.14') }
]
const rv1 = semver.intersect(pkgs[0].constraint, pkgs[1].constraint)
assertEquals(rv1.toString(), '>=18.14')
const rv = await hydrate(pkgs, (_a: PackageRequirement, _b: boolean) => Promise.resolve([]))
let nodes = 0
for (const pkg of rv.pkgs) {
if (pkg.project === 'nodejs.org') {
nodes++
assertEquals(pkg.constraint.toString(), '>=18.14')
}
}
assertEquals(nodes, 1)
})
it("hydrates.2", async function() {
const pkgs = [
{ project: 'pipenv.pypa.io', constraint: new semver.Range('*') },
{ project: 'python.org', constraint: new semver.Range('~3.9') }
]
const rv = await hydrate(pkgs, (pkg: PackageRequirement, _dry: boolean) => {
if (pkg.project === 'pipenv.pypa.io') {
return Promise.resolve([
{ project: 'python.org', constraint: new semver.Range('>=3.7') }
])
} else {
return Promise.resolve([])
}
})
let nodes = 0
for (const pkg of rv.pkgs) {
if (pkg.project === 'python.org') {
assertEquals(pkg.constraint.toString(), '~3.9')
nodes++
}
}
assertEquals(nodes, 1)
})
it("hydrates.3", async function() {
const pkgs = [
{ project: 'pipenv.pypa.io', constraint: new semver.Range('*') },
{ project: 'python.org', constraint: new semver.Range('~3.9') }
]
const rv = await hydrate(pkgs, (pkg: PackageRequirement, _dry: boolean) => {
if (pkg.project === 'pipenv.pypa.io') {
return Promise.resolve([
{ project: 'python.org', constraint: new semver.Range('~3.9.1') }
])
} else {
return Promise.resolve([])
}
})
let nodes = 0
for (const pkg of rv.pkgs) {
if (pkg.project === 'python.org') {
assertEquals(pkg.constraint.toString(), '~3.9.1')
nodes++
}
}
assertEquals(nodes, 1)
})
it("hydrates.unicode.org", async function() {
const pkgs = [
{ project: 'npmjs.com', constraint: new semver.Range('*') },
{ project: 'python.org', constraint: new semver.Range('~3.9') }
]
const rv = await hydrate(pkgs, (pkg: PackageRequirement, _dry: boolean) => {
if (pkg.project === 'python.org') {
return Promise.resolve([
{ project: 'unicode.org', constraint: new semver.Range('^73') }
])
} else {
return Promise.resolve([
{ project: 'unicode.org', constraint: new semver.Range('^71') }
])
}
})
const unicodes = rv.pkgs.filter(x => x.project === 'unicode.org')
const constraints = new Set(unicodes.map(x => x.constraint.toString()))
assertEquals(constraints.size, 2)
assert(constraints.has("^71"))
assert(constraints.has("^73"))
})
it("hydrates.cannot-intersect", async function() {
const pkgs = [
{ project: 'npmjs.com', constraint: new semver.Range('*') },
{ project: 'python.org', constraint: new semver.Range('~3.9') }
]
const rv = hydrate(pkgs, (pkg: PackageRequirement, _dry: boolean) => {
if (pkg.project === 'python.org') {
return Promise.resolve([
{ project: 'nodejs.com', constraint: new semver.Range('^73') }
])
} else {
return Promise.resolve([
{ project: 'nodejs.com', constraint: new semver.Range('^71') }
])
}
})
await assertRejects(() => rv)
})
})