UNPKG

eslint-plugin-ember

Version:
188 lines (182 loc) 6.14 kB
// ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ const rule = require('../../../lib/rules/avoid-leaking-state-in-ember-objects'); const RuleTester = require('eslint').RuleTester; // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ describe('imports', () => { it('should expose the default ignored properties', () => { expect(rule.DEFAULT_IGNORED_PROPERTIES).toEqual([ 'classNames', 'classNameBindings', 'actions', 'concatenatedProperties', 'mergedProperties', 'positionalParams', 'attributeBindings', 'queryParams', 'attrs', ]); }); }); const eslintTester = new RuleTester({ parserOptions: { ecmaVersion: 6, sourceType: 'module' } }); eslintTester.run('avoid-leaking-state-in-ember-objects', rule, { valid: [ { code: 'export default Foo.extend();', }, { code: 'export default Foo.extend({ someProp: "example", init() { this.set("anotherProp", []) } });', }, { code: 'export default Foo.extend({ someProp: "example", init() { this.set("anotherProp", {}) } });', }, { code: 'export default Foo.extend({ someProp: "example", init() { this.set("anotherProp", new Ember.A()) } });', }, { code: 'export default Foo.extend({ someProp: "example", init() { this.set("anotherProp", new A()) } });', }, { code: 'export default Foo.extend({ someProp: "example", init() { this.set("anotherProp", new Ember.Object()) } });', }, { code: 'export default Foo.extend({ someProp: "example", init() { this.set("anotherProp", new Object()) } });', }, { code: 'export default Foo.extend({ classNames: [], classNameBindings: [], actions: {}, concatenatedProperties: [], mergedProperties: [], positionalParams: [] });', }, { code: 'export default Foo.extend(someMixin, { classNames: [], classNameBindings: [], actions: {}, concatenatedProperties: [], mergedProperties: [], positionalParams: [] });' }, { code: 'export default Foo.extend({ someProp: "example",});', }, { code: 'export default Foo.extend({ someProp: function() {},});', }, { code: 'export default Foo.extend({ someProp: 5,});', }, { code: 'export default Foo.extend({ someProp: Symbol(),});', }, { code: 'export default Foo.extend({ someProp: undefined,});', }, { code: 'export default Foo.extend({ someProp: null,});', }, { code: 'export default Foo.extend({ doStuff() { }});' }, { code: 'export default Foo.extend({ derp: importedThing });' }, { code: 'export default Foo.extend({ derp });' }, { code: 'export default Foo.extend(SomeMixin, { simple: "string" });' }, { code: 'export default Foo.extend(SomeMixin, OtherMixin, { derp: null });' }, { code: 'export default Foo.extend({ doStuff: task(function* () {}) });' }, { code: 'export default Foo.extend({ fullName: computed(function() {}) });' }, { code: 'export default Foo.extend({ fullName: inject.service() });' }, { code: "export default Foo.extend({ fullName: 'a' + 'b' });" }, { code: 'export default Foo.extend({ test: hbs`lorem ipsum` });' }, { code: 'export default Foo.extend({ test: `lorem ipsum` });' }, { code: 'export default Foo.extend({ fullName: abc.dgc });' }, { code: 'export default Foo.extend({ foo: abc.something() });' }, { code: 'export default Foo.extend({ foo: !true });' }, ], invalid: [ { code: 'export default Foo.extend({someProp: []});', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend({someProp: new Ember.A()});', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend({someProp: new A()});', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend({someProp: {}});', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend({someProp: new Ember.Object()});', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend({someProp: new Object()});', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend(SomeMixin, { derp: [] });', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.extend({ badThing: new Set() });', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: "export default Foo['extend']({ otherThing: {} });", errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, { code: 'export default Foo.reopen({ otherThing: {} });', errors: [{ message: 'Only string, number, symbol, boolean, null, undefined, and function are allowed as default properties', }], }, ], });