UNPKG

antler

Version:
137 lines (113 loc) 4.48 kB
import { Rule } from '../src/rule'; import { Node } from '../src/types'; describe('Rule', () => { class NoDirectories extends Rule { public run(node: Node) { if (!node.isDirectory) { this.report(`File ${node.path} is not a directory`); } } protected getName() { return 'NoDirectories'; } } describe('creation', () => { it('should create an instance', () => { const instance = new NoDirectories('error'); expect(instance instanceof Rule).toBe(true); }); it('should throw invalid config', () => { function createInstance() { // eslint-disable-next-line @typescript-eslint/no-explicit-any return new NoDirectories(null as any); } expect(createInstance).toThrow( 'NoDirectories: Invalid config - must be a string or object' ); }); }); describe('report', () => { it('should create errors from error or string', () => { const instance = new NoDirectories('error'); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).report('error')).toThrow( 'ERROR NoDirectories: error' ); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).report(new Error('error'))).toThrow( 'ERROR NoDirectories: error' ); }); it('should create warnings from error or string', () => { const instance = new NoDirectories('warning'); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).report('warning')).toThrow( 'WARNING NoDirectories: warning' ); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).report(new Error('warning'))).toThrow( 'WARNING NoDirectories: warning' ); }); it('should not report if rule is disabled', () => { const instance = new NoDirectories('off'); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).report('error')).not.toThrow( 'ERROR NoDirectories: error' ); }); }); describe('error', () => { it('should create errors from error or string', () => { const instance = new NoDirectories('error'); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).error('error')).toThrow( 'NoDirectories: error' ); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => (instance as any).error(new Error('error'))).toThrow( 'NoDirectories: error' ); }); }); describe('setLevel', () => { it('should error if level is not a string', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => new NoDirectories({ level: 5 } as any)).toThrow( 'Error level must be' ); }); it('should error if level is not a know level', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(() => new NoDirectories({ level: 'wat' } as any)).toThrow( 'Error level must be' ); }); it('should set the error level from a string', () => { const instance = new NoDirectories('warning'); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect((instance as any).level).toBe('warning'); }); it('should set the error level from a config object', () => { const instance = new NoDirectories({ level: 'error' }); // eslint-disable-next-line @typescript-eslint/no-explicit-any expect((instance as any).level).toBe('error'); }); }); describe('setOptions', () => { it('should error if options are not an object', () => { expect( // eslint-disable-next-line @typescript-eslint/no-explicit-any () => new NoDirectories({ level: 'error', options: null } as any) ).toThrow('Invalid options - must be an object'); expect( // eslint-disable-next-line @typescript-eslint/no-explicit-any () => new NoDirectories({ level: 'error', options: [] } as any) ).toThrow('Invalid options - must be an object'); expect( // eslint-disable-next-line @typescript-eslint/no-explicit-any () => new NoDirectories({ level: 'error', options: 1 } as any) ).toThrow('Invalid options - must be an object'); }); }); });