-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathreadReadmeExplainer.test.ts
241 lines (174 loc) · 8.52 KB
/
readReadmeExplainer.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
import { describe, expect, it } from "vitest";
import { readReadmeExplainer } from "./readReadmeExplainer.js";
describe(readReadmeExplainer, () => {
it("resolves with undefined when an h2 cannot be found", async () => {
const actual = await readReadmeExplainer(() => Promise.resolve(`nothing.`));
expect(actual).toBeUndefined();
});
it("resolves with undefined before h2 when a Usage h2 exists and there are no preceding tags", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`# Title
## Usage`),
);
expect(actual).toBeUndefined();
});
it("resolves with undefined before h2 when a non-Usage h2 exists and there are no preceding tags", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`# Title
## What?`),
);
expect(actual).toBeUndefined();
});
it("parses a line after badges", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
</p>
This is my project.
## Usage
...`),
);
expect(actual).toEqual("This is my project.");
});
it("parses multiple lines after badges", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
</p>
This is my project.
It is good.
## Usage
...`),
);
expect(actual).toEqual("This is my project.\nIt is good.");
});
it("parses multiple lines after full badges and a logo", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<p align="center">
<!-- prettier-ignore-start -->
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<a href="#contributors" target="_blank"><img alt="👪 All Contributors: 52" src="https://img.shields.io/badge/%F0%9F%91%AA_all_contributors-52-21bb42.svg" /></a>
<!-- ALL-CONTRIBUTORS-BADGE:END -->
<!-- prettier-ignore-end -->
<a href="https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/.github/CODE_OF_CONDUCT.md" target="_blank"><img alt="🤝 Code of Conduct: Kept" src="https://img.shields.io/badge/%F0%9F%A4%9D_code_of_conduct-kept-21bb42" /></a>
<a href="https://codecov.io/gh/JoshuaKGoldberg/create-typescript-app" target="_blank"><img alt="🧪 Coverage" src="https://img.shields.io/codecov/c/github/JoshuaKGoldberg/create-typescript-app?label=%F0%9F%A7%AA%20coverage" /></a>
<a href="https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/LICENSE.md" target="_blank"><img alt="📝 License: MIT" src="https://img.shields.io/badge/%F0%9F%93%9D_license-MIT-21bb42.svg"></a>
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" height="128" src="./docs/create-typescript-app.png" width="128">
This is my project.
It is good.
## Usage
...`),
);
expect(actual).toEqual("This is my project.\nIt is good.");
});
it("parses a non-Usage h2 after full badges", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<p align="center">
<!-- prettier-ignore-start -->
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<a href="#contributors" target="_blank"><img alt="👪 All Contributors: 52" src="https://img.shields.io/badge/%F0%9F%91%AA_all_contributors-52-21bb42.svg" /></a>
<!-- ALL-CONTRIBUTORS-BADGE:END -->
<!-- prettier-ignore-end -->
<a href="https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/.github/CODE_OF_CONDUCT.md" target="_blank"><img alt="🤝 Code of Conduct: Kept" src="https://img.shields.io/badge/%F0%9F%A4%9D_code_of_conduct-kept-21bb42" /></a>
<a href="https://codecov.io/gh/JoshuaKGoldberg/create-typescript-app" target="_blank"><img alt="🧪 Coverage" src="https://img.shields.io/codecov/c/github/JoshuaKGoldberg/create-typescript-app?label=%F0%9F%A7%AA%20coverage" /></a>
<a href="https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/LICENSE.md" target="_blank"><img alt="📝 License: MIT" src="https://img.shields.io/badge/%F0%9F%93%9D_license-MIT-21bb42.svg"></a>
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
## What?
This is my project.
It is good.
## Usage
...`),
);
expect(actual).toEqual("## What?\n\nThis is my project.\nIt is good.");
});
it("parses a non-Usage h2 with a block quote after full badges", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
## What?
This is my project.
It is good.
> See here.
## Usage
...`),
);
expect(actual).toEqual(
"## What?\n\nThis is my project.\nIt is good.\n\n> See here.",
);
});
it("parses a non-Usage h2 after full badges and a logo", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" height="128" src="./docs/create-typescript-app.png" width="128">
## What?
This is my project.
It is good.
## Usage
...`),
);
expect(actual).toEqual("## What?\n\nThis is my project.\nIt is good.");
});
it("parses a non-Usage h2 with a block quote after full badges and a logo", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" height="128" src="./docs/create-typescript-app.png" width="128">
## What?
This is my project.
It is good.
> See here.
## Usage
...`),
);
expect(actual).toEqual(
"## What?\n\nThis is my project.\nIt is good.\n\n> See here.",
);
});
it("returns existing content before a non-Usage h2 when the Usage h2 does not exist", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" height="128" src="./docs/create-typescript-app.png" width="128">
## What?
This is my project.
It is good.
> See here.
## Contributing
...`),
);
expect(actual).toEqual(
"## What?\n\nThis is my project.\nIt is good.\n\n> See here.",
);
});
it("returns existing content until the end of the file when no subsequent h2 exists", async () => {
const actual = await readReadmeExplainer(() =>
Promise.resolve(`
<a href="http://npmjs.com/package/create-typescript-app"><img alt="📦 npm version" src="https://img.shields.io/npm/v/create-typescript-app?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>
<img align="right" alt="Project logo: the TypeScript blue square with rounded corners, but a plus sign instead of 'TS'" height="128" src="./docs/create-typescript-app.png" width="128">
## What?
This is my project.
It is good.
> See here.
`),
);
expect(actual).toEqual(
"## What?\n\nThis is my project.\nIt is good.\n\n> See here.",
);
});
});