From 85cd3dd23df4199a4f0fd2e3c93f64fc50b21b9e Mon Sep 17 00:00:00 2001 From: e-cloud Date: Wed, 9 Nov 2016 20:55:54 +0800 Subject: [PATCH] test: add tests for enhanced-resolve --- enhanced-resolve/enhanced-resolve-tests.ts | 42 ++++++ enhanced-resolve/index.d.ts | 48 +++---- enhanced-resolve/lib/Resolver.d.ts | 4 +- enhanced-resolve/lib/Storage.d.ts | 2 +- enhanced-resolve/lib/UnsafeCachePlugin.d.ts | 2 +- enhanced-resolve/lib/common-types.d.ts | 33 ++--- enhanced-resolve/lib/concord.d.ts | 3 + enhanced-resolve/lib/lib-tests.ts | 137 ++++++++++++++++++++ enhanced-resolve/tsconfig.json | 34 ++--- 9 files changed, 245 insertions(+), 60 deletions(-) create mode 100644 enhanced-resolve/enhanced-resolve-tests.ts create mode 100644 enhanced-resolve/lib/lib-tests.ts diff --git a/enhanced-resolve/enhanced-resolve-tests.ts b/enhanced-resolve/enhanced-resolve-tests.ts new file mode 100644 index 0000000000..ed04190fbb --- /dev/null +++ b/enhanced-resolve/enhanced-resolve-tests.ts @@ -0,0 +1,42 @@ +import resolve = require('enhanced-resolve'); +import { Context } from './lib/concord'; +import { ResolveResult } from './lib/common-types' +import Resolver = require('./lib/Resolver') + +resolve('lib', 'string', function (err) { }); + +let context: Context = { + referrer: 'hi' +}; + +resolve(context, 'path', 'string', function () { }); + +let resolver: Resolver +resolver = resolve.ResolverFactory.createResolver({ + extensions: ['.js'], + fileSystem: {} +}); + +const nfs = new resolve.NodeJsInputFileSystem(); + +const snfs = new resolve.SyncNodeJsInputFileSystem(); + +const cfs = new resolve.CachedInputFileSystem(nfs, 4); +const cfs2 = new resolve.CachedInputFileSystem(snfs, 4); + +let result: ResolveResult + +result = resolve.sync(context, 'path', 'string'); +result = resolve.sync('path', 'string'); + +resolve.context('lib', 'string', function (err) { }); +resolve.context(context, 'path', 'string', function () { }); + +result = resolve.context.sync(context, 'path', 'string'); +result = resolve.context.sync('path', 'string'); + +resolve.create('lib', 'string', function (err) { }); +resolve.create(context, 'path', 'string', function () { }); + +result = resolve.create.sync(context, 'path', 'string'); +result = resolve.create.sync('path', 'string'); diff --git a/enhanced-resolve/index.d.ts b/enhanced-resolve/index.d.ts index 200f8efcca..0a1f4723e8 100644 --- a/enhanced-resolve/index.d.ts +++ b/enhanced-resolve/index.d.ts @@ -6,7 +6,7 @@ /// /// -import fs = require('fs') +import fs = require('fs'); import { ResolveResult, LoggingCallbackWrapper, @@ -14,36 +14,36 @@ import { CommonFileSystemMethod, BaseFileSystem, ResolverRequest -} from './lib/common-types' -import { Context } from './lib/concord' -import Resolver = require('./lib/Resolver') +} from './lib/common-types'; +import { Context } from './lib/concord'; +import Resolver = require('./lib/Resolver'); declare namespace Resolve { - function sync(path: string, request: string): ResolveResult - function sync(context: Context, path: string, request: string): ResolveResult + function sync(path: string, request: string): ResolveResult; + function sync(context: Context, path: string, request: string): ResolveResult; - function context(path: string, request: string, callback: LoggingCallbackWrapper): void - function context(context: Context, path: string, request: string, callback: LoggingCallbackWrapper): void + function context(path: string, request: string, callback: LoggingCallbackWrapper): void; + function context(context: Context, path: string, request: string, callback: LoggingCallbackWrapper): void; namespace context { - function sync(path: string, request: string): ResolveResult - function sync(context: Context, path: string, request: string): ResolveResult + function sync(path: string, request: string): ResolveResult; + function sync(context: Context, path: string, request: string): ResolveResult; } - function loader(path: string, request: string, callback: LoggingCallbackWrapper): void - function loader(context: Context, path: string, request: string, callback: LoggingCallbackWrapper): void + function loader(path: string, request: string, callback: LoggingCallbackWrapper): void; + function loader(context: Context, path: string, request: string, callback: LoggingCallbackWrapper): void; namespace context { - function sync(path: string, request: string): ResolveResult - function sync(context: Context, path: string, request: string): ResolveResult + function sync(path: string, request: string): ResolveResult; + function sync(context: Context, path: string, request: string): ResolveResult; } - function create(path: string, request: string, callback: LoggingCallbackWrapper): void - function create(context: Context, path: string, request: string, callback: LoggingCallbackWrapper): void + function create(path: string, request: string, callback: LoggingCallbackWrapper): void; + function create(context: Context, path: string, request: string, callback: LoggingCallbackWrapper): void; export namespace create { - function sync(path: string, request: string): ResolveResult - function sync(context: Context, path: string, request: string): ResolveResult + function sync(path: string, request: string): ResolveResult; + function sync(context: Context, path: string, request: string): ResolveResult; } export namespace ResolverFactory { @@ -54,7 +54,7 @@ declare namespace Resolve { mainFields?: string[]; aliasFields?: string[]; mainFiles?: string[]; - extensions?: string[]; + extensions: string[]; enforceExtension?: boolean; moduleExtensions?: string[]; enforceModuleExtension?: boolean; @@ -63,7 +63,7 @@ declare namespace Resolve { resolveToContext?: boolean; unsafeCache?: boolean | {}; cachePredicate?: (val: ResolverRequest) => boolean; - fileSystem?: any; + fileSystem: any; resolver?: Resolver; } interface AliasItem { @@ -81,8 +81,8 @@ declare namespace Resolve { stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: fs.Stats) => any): void; - readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void - readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void + readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; + readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; readlink(path: string, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; } @@ -92,8 +92,8 @@ declare namespace Resolve { stat: CommonFileSystemMethod; readdir: CommonFileSystemMethod; - readFile(path: string, encoding?: string, callback?: (err: NodeJS.ErrnoException, result: Buffer) => void): void - readFile(path: string, callback?: (err: NodeJS.ErrnoException, result: Buffer) => void): void + readFile(path: string, encoding?: string, callback?: (err: NodeJS.ErrnoException, result: Buffer) => void): void; + readFile(path: string, callback?: (err: NodeJS.ErrnoException, result: Buffer) => void): void; readlink: CommonFileSystemMethod; } diff --git a/enhanced-resolve/lib/Resolver.d.ts b/enhanced-resolve/lib/Resolver.d.ts index 0fe815ba3a..4d2f3ee477 100644 --- a/enhanced-resolve/lib/Resolver.d.ts +++ b/enhanced-resolve/lib/Resolver.d.ts @@ -1,7 +1,7 @@ /// import Tapable = require('tapable'); -import { ResolveParseResult, ResolverRequest, LoggingCallbackWrapper, BaseFileSystem } from './common-types' -import { Context } from './concord' +import { ResolveParseResult, ResolverRequest, LoggingCallbackWrapper, BaseFileSystem } from './common-types'; +import { Context } from './concord'; declare class Resolver extends Tapable { fileSystem: BaseFileSystem; diff --git a/enhanced-resolve/lib/Storage.d.ts b/enhanced-resolve/lib/Storage.d.ts index 97dd9febcc..17557d61a7 100644 --- a/enhanced-resolve/lib/Storage.d.ts +++ b/enhanced-resolve/lib/Storage.d.ts @@ -1,5 +1,5 @@ /// -import { CommonFileSystemMethod } from './common-types' +import { CommonFileSystemMethod } from './common-types'; declare class Storage { duration: number; diff --git a/enhanced-resolve/lib/UnsafeCachePlugin.d.ts b/enhanced-resolve/lib/UnsafeCachePlugin.d.ts index 274838b071..7c7ed55ea6 100644 --- a/enhanced-resolve/lib/UnsafeCachePlugin.d.ts +++ b/enhanced-resolve/lib/UnsafeCachePlugin.d.ts @@ -1,5 +1,5 @@ import Resolver = require('./Resolver'); -import { ResolverRequest } from './common-types' +import { ResolverRequest } from './common-types'; declare class UnsafeCachePlugin { source: string; filterPredicate: (str: ResolverRequest) => boolean; diff --git a/enhanced-resolve/lib/common-types.d.ts b/enhanced-resolve/lib/common-types.d.ts index 68655feb3b..30c39d1210 100644 --- a/enhanced-resolve/lib/common-types.d.ts +++ b/enhanced-resolve/lib/common-types.d.ts @@ -1,12 +1,11 @@ -import { Context } from './concord' -/** - * Created by cloud on 16-11-4. - */ +import { Context } from './concord'; + export interface ResolveError extends Error { details: string; missing: string[]; recursion: boolean; } + export interface ResolveParseResult { request: string; query: string; @@ -14,10 +13,12 @@ export interface ResolveParseResult { directory: boolean; file: boolean; } + export interface ResolveResult { path: boolean | string; query: string; } + export interface ResolverRequest { request: string; relativePath?: string; @@ -30,6 +31,7 @@ export interface ResolverRequest { directory?: boolean; module?: boolean; } + export interface LoggingCallbackTools { log?(msg: string): void; stack?: string[]; @@ -37,26 +39,25 @@ export interface LoggingCallbackTools { push: (item: string) => void; }; } + export interface LoggingCallbackWrapper extends LoggingCallbackTools { - (...args: any[]): any; + (err?: Error | null, ...args: any[]): any; } export interface ErrorCallback { - (err: Error | null, ...args: any[]): any + (err: Error | null, ...args: any[]): any; } export interface CommonFileSystemMethod { - (name: string, callback: (err: Error | null, ...args: any[]) => void): void + (name: string, callback: (err: Error | null, ...args: any[]) => void): void; } export interface BaseFileSystem { - stat: CommonFileSystemMethod - readdir?: CommonFileSystemMethod - readFile?(path: string, encoding: string, callback: any): void - readFile?(path: string, callback: any): void - readJson?: CommonFileSystemMethod - readlink?: CommonFileSystemMethod - isSync: () => boolean + stat: CommonFileSystemMethod; + readdir?: CommonFileSystemMethod; + readFile?(path: string, encoding: string, callback: ErrorCallback): void; + readFile?(path: string, callback: ErrorCallback): void; + readJson?: CommonFileSystemMethod; + readlink?: CommonFileSystemMethod; + isSync: () => boolean; } - - diff --git a/enhanced-resolve/lib/concord.d.ts b/enhanced-resolve/lib/concord.d.ts index c26958a5ef..d11f1047df 100644 --- a/enhanced-resolve/lib/concord.d.ts +++ b/enhanced-resolve/lib/concord.d.ts @@ -2,11 +2,13 @@ export interface Type { type: string | null | undefined; features: string[]; } + export interface Context { supportedResourceTypes?: string[]; environments?: string[]; referrer: string; } + declare function parseType(type: string): Type; declare function isTypeMatched(baseType: string | Type, testedType: string | Type): boolean; declare function isResourceTypeSupported(context: Context, type: string): boolean | undefined; @@ -19,6 +21,7 @@ declare function getMain(context: Context, configuration: any): undefined; declare function getExtensions(context: Context, configuration: any): undefined; declare function matchModule(context: Context, configuration: any, request: string): any; declare function matchType(context: Context, configuration: any, relativePath: string): undefined; + export { parseType, isTypeMatched, diff --git a/enhanced-resolve/lib/lib-tests.ts b/enhanced-resolve/lib/lib-tests.ts new file mode 100644 index 0000000000..9a7c043cca --- /dev/null +++ b/enhanced-resolve/lib/lib-tests.ts @@ -0,0 +1,137 @@ +import AliasFieldPlugin = require('./AliasFieldPlugin'); + +import AliasPlugin = require('./AliasPlugin'); + +import AppendPlugin = require('./AppendPlugin'); + +import CloneBasenamePlugin = require('./CloneBasenamePlugin'); + +import ConcordExtensionsPlugin = require('./ConcordExtensionsPlugin'); + +import ConcordMainPlugin = require('./ConcordMainPlugin'); + +import ConcordModulesPlugin = require('./ConcordModulesPlugin'); + +import DescriptionFilePlugin = require('./DescriptionFilePlugin'); + +import DescriptionFileUtils = require('./DescriptionFileUtils'); + +import DirectoryExistsPlugin = require('./DirectoryExistsPlugin'); + +import FileExistsPlugin = require('./FileExistsPlugin'); + +import FileKindPlugin = require('./FileKindPlugin'); + +import getPaths, { basename } from './getPaths'; + +import { globToRegExp } from './globToRegExp'; + +import JoinRequestPlugin = require('./JoinRequestPlugin'); + +import LogInfoPlugin = require('./LogInfoPlugin'); + +import MainFieldPlugin = require('./MainFieldPlugin'); + +import ModuleAppendPlugin = require('./ModuleAppendPlugin'); + +import ModuleKindPlugin = require('./ModuleKindPlugin'); + +import ModulesInHierachicDirectoriesPlugin = require('./ModulesInHierachicDirectoriesPlugin'); + +import ModulesInRootPlugin = require('./ModulesInRootPlugin'); + +import NextPlugin = require('./NextPlugin'); + +import ParsePlugin = require('./ParsePlugin'); + +import Resolver = require('./Resolver'); + +import ResultPlugin = require('./ResultPlugin'); + +import Storage from './Storage' + +import SymlinkPlugin = require('./SymlinkPlugin'); + +import TryNextPlugin = require('./TryNextPlugin'); + +import UnsafeCachePlugin = require('./UnsafeCachePlugin'); + +import UseFilePlugin = require('./UseFilePlugin'); + +import resolve = require('../'); + +import { BaseFileSystem } from './common-types' + +const aplugin = new AliasFieldPlugin('a', 'b', 'c'); + +const aplugin2 = new AliasPlugin('a', { + onlyModule: false, + name: 'a', + alias: 'b' +}, 'string') + +const aplugin3 = new AppendPlugin('a', 'b', 'c'); + +const cplugin = new CloneBasenamePlugin('a', 'c'); + +const cplugin2 = new ConcordExtensionsPlugin('a', {}, 'b'); + +const cplugin3 = new ConcordMainPlugin('string', {}, 'string'); + +const cplugin4 = new ConcordModulesPlugin('string', {}, 'string'); + +const dplugin = new DescriptionFilePlugin('string', 'string', 'string'); + +DescriptionFileUtils.cdUp('./lib'); +DescriptionFileUtils.getField({}, 'hi'); +DescriptionFileUtils.loadDescriptionFile(resolve.ResolverFactory.createResolver({ + extensions: [''], + fileSystem: {} +}), './lib', ['file'], function () { }); + +const dplugin1 = new DirectoryExistsPlugin('string', 'string'); + +const fplugin = new FileExistsPlugin('string', 's'); + +const fplugin2 = new FileKindPlugin('string', 's'); + +getPaths('./lib'); + +basename('./lib'); + +globToRegExp('lib/**'); + +const jplugin = new JoinRequestPlugin('string', 's'); + +const lplugin = new LogInfoPlugin('string'); + +const mplugin = new MainFieldPlugin('string', { + name: 'hi', + forceRelative: false +}, 's'); + +const mplugin2 = new ModuleAppendPlugin('string', 'ap', 's'); + +const mplugin3 = new ModuleKindPlugin('string', 's'); + +const mplugin4 = new ModulesInHierachicDirectoriesPlugin('string', ['arr'], 's'); + +const mplugin5 = new ModulesInRootPlugin('string', 'ap', 's'); + +const nplugin = new NextPlugin('string', 'ap'); + +const pplugin = new ParsePlugin('string', 'ap'); + +const resolver = new Resolver({} as BaseFileSystem); + +const rplugin = new ResultPlugin('string'); + +const splugin = new SymlinkPlugin('string', 's'); + +const tplugin = new TryNextPlugin('string', 'ap', 's'); + +const uplugin = new UnsafeCachePlugin('string', function (e) { return false }, {}, 's'); + +const uplugin2 = new UseFilePlugin('string', 'ap', 's'); + +const s = new Storage(4); diff --git a/enhanced-resolve/tsconfig.json b/enhanced-resolve/tsconfig.json index b08f2792f0..96a70f3bf2 100644 --- a/enhanced-resolve/tsconfig.json +++ b/enhanced-resolve/tsconfig.json @@ -1,18 +1,20 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "noImplicitAny": true, - "strictNullChecks": true, - "baseUrl": "../", - "typeRoots": [ - "../" - ], - "types": [], - "noEmit": true, - "forceConsistentCasingInFileNames": true - }, - "include": [ - "**/*.ts" - ] + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "include": [ + "index.d.ts", + "enhanced-resolve-tests.ts", + "lib/*.ts" + ] }