Skip to content

Commit

Permalink
test: ✅ cover latest implement
Browse files Browse the repository at this point in the history
  • Loading branch information
huang-xiao-jian committed Dec 4, 2020
1 parent 812ea52 commit 5f2d6f3
Show file tree
Hide file tree
Showing 4 changed files with 199 additions and 104 deletions.
193 changes: 193 additions & 0 deletions __tests__/NodeResolver.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
// package
import { join, relative } from 'path';
import { promises } from 'fs';
// internal
import { NodeResolver } from '../src/NodeResolver';
import { FileSystem } from '../src/interface/fs';
import { Material } from '../src/interface/resolver';

describe('Relative Module Resolver', () => {
const fs: FileSystem = {
stat(path) {
return promises.stat(path);
},
readFile(path) {
return promises.readFile(path);
},
};

it('should consider original extension as highest priority', async () => {
const m: Material = {
context: __dirname,
referencePath: './__fixture__/extension/assign.js',
};
const resolver = new NodeResolver({
fs,
modules: [],
mainFiles: [],
mainFields: [],
descriptionFiles: [],
extensions: ['.ts', '.mjs', '.js'],
});
const terminal = await resolver.resolve(m);
const readable = relative(__dirname, terminal.absPath);

expect(readable).toEqual('__fixture__/extension/assign.js');
});

it('should fullfil missing extension', async () => {
const m: Material = {
context: __dirname,
referencePath: './__fixture__/extension/assign',
};
const resolver1 = new NodeResolver({
fs,
modules: [],
mainFiles: [],
mainFields: [],
descriptionFiles: [],
extensions: ['.ts', '.mjs', '.js'],
});
const resolver2 = new NodeResolver({
fs,
modules: [],
mainFiles: [],
mainFields: [],
descriptionFiles: [],
extensions: ['.mjs', '.js', '.ts'],
});

const terminal1 = await resolver1.resolve(m);
const readable1 = relative(__dirname, terminal1.absPath);

expect(readable1).toEqual('__fixture__/extension/assign.ts');

const terminal2 = await resolver2.resolve(m);
const readable2 = relative(__dirname, terminal2.absPath);

expect(readable2).toEqual('__fixture__/extension/assign.mjs');
});

it('should fullfil directory indexes', async () => {
const m: Material = {
context: __dirname,
referencePath: './__fixture__/directory',
};
const resolver1 = new NodeResolver({
fs,
modules: [],
mainFields: [],
descriptionFiles: [],
extensions: ['.ts'],
mainFiles: ['index.wechat', 'index.alipay', 'index'],
});

const terminal1 = await resolver1.resolve(m);
const readable1 = relative(__dirname, terminal1.absPath);

expect(readable1).toEqual('__fixture__/directory/index.wechat.ts');

const resolver2 = new NodeResolver({
fs,
modules: [],
mainFields: [],
descriptionFiles: [],
extensions: ['.ts'],
mainFiles: ['index.alipay', 'index.wechat', 'index'],
});

const terminal2 = await resolver2.resolve(m);
const readable2 = relative(__dirname, terminal2.absPath);

expect(readable2).toEqual('__fixture__/directory/index.alipay.ts');
});

it('should support npm installed module by index', async () => {
const m: Material = {
context: __dirname,
referencePath: 'rxjs/operators',
};
const resolver = new NodeResolver({
fs,
modules: [join(__dirname, '../node_modules')],
mainFiles: ['index'],
mainFields: [],
descriptionFiles: [],
extensions: ['.js'],
});
const terminal = await resolver.resolve(m);
const readable = relative(__dirname, terminal.absPath);

expect(readable).toEqual('../node_modules/rxjs/operators/index.js');
});

it('should support npm installed module by package.json', async () => {
const m: Material = {
context: __dirname,
referencePath: 'rxjs',
};
const resolver1 = new NodeResolver({
fs,
modules: [join(__dirname, '../node_modules')],
mainFiles: [],
mainFields: ['main'],
descriptionFiles: ['package.json'],
extensions: ['.js'],
});
const resolver2 = new NodeResolver({
fs,
modules: [join(__dirname, '../node_modules')],
mainFiles: [],
mainFields: ['module', 'main'],
descriptionFiles: ['package.json'],
extensions: ['.js'],
});
const terminal1 = await resolver1.resolve(m);
const readable1 = relative(__dirname, terminal1.absPath);

expect(readable1).toEqual('../node_modules/rxjs/index.js');

const terminal2 = await resolver2.resolve(m);
const readable2 = relative(__dirname, terminal2.absPath);

expect(readable2).toEqual('../node_modules/rxjs/_esm5/index.js');
});

it('should support npm installed module by package.json', async () => {
const m: Material = {
context: __dirname,
referencePath: 'preact/hooks',
};
const resolver1 = new NodeResolver({
fs,
modules: [join(__dirname, '../node_modules')],
mainFiles: [],
mainFields: ['main'],
descriptionFiles: ['package.json'],
extensions: ['.js'],
});

const terminal1 = await resolver1.resolve(m);
const readable1 = relative(__dirname, terminal1.absPath);

expect(readable1).toEqual('../node_modules/preact/hooks/dist/hooks.js');
});

it('should reject when no match', () => {
const m: Material = {
context: __dirname,
referencePath: './unknown',
};
const resolver = new NodeResolver({
fs,
modules: [],
mainFiles: [],
mainFields: [],
descriptionFiles: [],
extensions: [],
});

// default empty error
expect(resolver.resolve(m)).rejects.toBeInstanceOf(Error);
});
});
104 changes: 0 additions & 104 deletions __tests__/RelativeResolver.spec.ts

This file was deleted.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"jest": "^24.1.0",
"lint-staged": "^10.5.1",
"npm-run-all": "^4.1.5",
"preact": "^10.5.7",
"prettier": "^2.0.0",
"typescript": "^4.0.2"
},
Expand Down
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5173,6 +5173,11 @@ posix-character-classes@^0.1.0:
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=

preact@^10.5.7:
version "10.5.7"
resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.7.tgz#f1d84725539e18f7ccbea937cf3db5895661dbd3"
integrity sha512-4oEpz75t/0UNcwmcsjk+BIcDdk68oao+7kxcpc1hQPNs2Oo3ZL9xFz8UBf350mxk/VEdD41L5b4l2dE3Ug3RYg==

prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
Expand Down

0 comments on commit 5f2d6f3

Please sign in to comment.