blob: 4e8609ce74502a2c40c657b4a4a5938286c645eb [file] [log] [blame]
import 'jasmine';
import {ConformancePatternRule, PatternKind} from '../../rules/conformance_pattern_rule';
import {compileAndCheck, customMatchers} from '../../util/testing/test_support';
describe('BANNED_NAME', () => {
it('matches simple example of globals', () => {
const config = {
errorMessage: 'no Infinity',
kind: PatternKind.BANNED_NAME,
values: ['Infinity']
};
const source = `Infinity; 1+1;`;
const results = compileAndCheck(new ConformancePatternRule(config), source);
expect(results).toHaveFailuresMatching(
{matchedCode: `Infinity`, messageText: 'no Infinity'});
});
it('matches namespaced globals', () => {
const config = {
errorMessage: 'no blob url',
kind: PatternKind.BANNED_NAME,
values: ['URL.createObjectURL']
};
const source = `URL.createObjectURL({});`;
const results = compileAndCheck(new ConformancePatternRule(config), source);
expect(results).toHaveFailuresMatching(
{matchedCode: `createObjectURL`, messageText: 'no blob url'});
});
it('does not choke on type aliases', () => {
// This test case checks that we do not regress on the AbsoluteMatcher's
// handling of type aliases. In dealias, from utils/ast_tools.ts, the
// typechecker's getAliasedSymbol function should only be called with
// Symbols that verify ts.SymbolFlags.Alias, and ts.SymbolFlags.TypeAlias is
// not acceptable (the typechecker will throw).
const config = {
errorMessage: 'should not trigger',
kind: PatternKind.BANNED_NAME,
values: ['whatever']
};
const sources = [
`export type Foo = {bar: number, baz: (x:string)=>void}`,
`import {Foo} from './file_0';
export const c: Foo["baz"] = (x:string)=>{};`,
`import {c} from './file_1'; c(window.name);`
];
const results =
compileAndCheck(new ConformancePatternRule(config), ...sources);
expect(results).toHaveNoFailures();
});
});
beforeEach(() => {
jasmine.addMatchers(customMatchers);
});