/
get-sorted-nodes.spec.ts
81 lines (76 loc) · 2.02 KB
/
get-sorted-nodes.spec.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
import type { ImportDeclaration } from '@babel/types';
import { expect, test } from 'vitest';
import { DEFAULT_IMPORT_ORDER } from '../../constants';
import { getImportNodes } from '../get-import-nodes';
import { getSortedNodes } from '../get-sorted-nodes';
import { getSortedNodesModulesNames } from '../get-sorted-nodes-modules-names';
import { getSortedNodesNamesAndNewlines } from '../get-sorted-nodes-names-and-newlines';
import { testingOnly } from '../normalize-plugin-options';
const code = `
import "se3";
import z from 'z';
import c, { cD } from 'c';
import g from 'g';
import { tC, tA, tB } from 't';
import k, { kE, kB } from 'k';
import "se4";
import "se1";
import * as a from 'a';
import * as x from 'x';
import path from 'path';
import BY from 'BY';
import Ba from 'Ba';
import XY from 'XY';
import Xa from 'Xa';
import "se2";
`;
test('it returns all sorted nodes, preserving the order side effect nodes', () => {
const result = getImportNodes(code);
const sorted = getSortedNodes(result, {
importOrder:
testingOnly.normalizeImportOrderOption(DEFAULT_IMPORT_ORDER),
importOrderCombineTypeAndValueImports: true,
}) as ImportDeclaration[];
expect(getSortedNodesNamesAndNewlines(sorted)).toEqual([
'se3',
'c',
'g',
'k',
't',
'z',
'se4',
'se1',
'path', // Builtins are not sorted past side-effects either
'a',
'Ba',
'BY',
'x',
'Xa',
'XY',
'se2',
'',
]);
const result2 = sorted
.filter((node) => node.type === 'ImportDeclaration')
.map((importDeclaration) =>
getSortedNodesModulesNames(importDeclaration.specifiers),
);
expect(result2).toEqual([
[],
['c', 'cD'],
['g'],
['k', 'kB', 'kE'],
['tA', 'tB', 'tC'],
['z'],
[],
[],
['path'],
['a'],
['Ba'],
['BY'],
['x'],
['Xa'],
['XY'],
[],
]);
});