import 'jasmine' ; import * as ts from 'typescript' ; import * as diagnostics from './diagnostics' ; import { BazelOptions } from './tsconfig' ; describe ( 'diagnostics' , ( ) => { describe ( 'expected diagnostics' , ( ) => { const file = ts . createSourceFile ( 'test.ts' , '/* used for testing */' , ts . ScriptTarget . Latest ) ; function diag ( code , messageText ) { const category = ts . DiagnosticCategory . Error ; return { file , code , messageText , start : 0 , length : 0 , category } ; } function filter ( expectedDiagnostics , diags ) { const opts = { target : '//javascript/typescript/fake:target' , expectedDiagnostics } as BazelOptions ; return diagnostics . filterExpected ( opts , diags ) . map ( d => `TS${ d . code }:${ d . messageText }` ) ; } it ( 'filters expected diagnostics' , ( ) => { expect ( filter ( [ 'TS1234:very.*borked' ] , [ diag ( 1234 , 'the target is very badly borked' ) , diag ( 1234 , 'the target is very sadly borked' ) , ] ) ) . toEqual ( [ ] ) ; } ) ; it ( 'returns unmatched expected diagnostics' , ( ) => { expect ( filter ( [ 'TS1234:very.*borked' , 'TS1234:not matching' , 'TS1235:very' ] , [ diag ( 1234 , 'the target is very badly borked' ) ] ) ) . toEqual ( [ 'TS1234:Expected a compilation error matching "TS1234:not matching"' , 'TS1235:Expected a compilation error matching "TS1235:very"' , ] ) ; } ) ; it ( 'returns unmatched diagnostics' , ( ) => { expect ( filter ( [ 'TS1234:very.*borked' ] , [ diag ( 1234 , 'the target is very badly borked' ) , diag ( 5678 , 'the target is very badly borked' ) , diag ( 1234 , 'text not matching' ) , ] ) ) . toEqual ( [ 'TS5678:the target is very badly borked' , 'TS1234:text not matching' , ] ) ; } ) ; it ( 'throws when a charater is not escaped' , ( ) => { expect ( ( ) => filter ( [ 'TS1234:unescaped \n newline' ] , [ ] ) ) . toThrowError ( 'Incorrect expected error, did you forget character escapes in ' + 'TS1234:unescaped \n newline' ) ; } ) ; it ( 'handle negative diagnostic codes' , ( ) => { expect ( filter ( [ 'TS-999:custom error' ] , [ diag ( - 999 , 'custom error' ) ] ) ) . toEqual ( [ ] ) ; } ) ; } ) ; } ) ;