diff options
| author | Andrej Mihajlov <and@codeispoetry.ru> | 2017-02-14 10:54:45 +0000 |
|---|---|---|
| committer | Andrej Mihajlov <and@codeispoetry.ru> | 2017-02-14 10:54:45 +0000 |
| commit | e79042f606ca9c2850cf57f533a98049990df19e (patch) | |
| tree | 56c8871a8ca2496425f8bcac5fc74dcf6985f886 | |
| parent | d0ddbfcfed224f97048bd615a91f7fd607b644a8 (diff) | |
| download | mullvadvpn-e79042f606ca9c2850cf57f533a98049990df19e.tar.xz mullvadvpn-e79042f606ca9c2850cf57f533a98049990df19e.zip | |
Add enum.isValid
| -rw-r--r-- | app/lib/enum.js | 9 | ||||
| -rw-r--r-- | test/lib/enum.spec.js | 8 |
2 files changed, 15 insertions, 2 deletions
diff --git a/app/lib/enum.js b/app/lib/enum.js index 4359c3bfb3..c2042c07fa 100644 --- a/app/lib/enum.js +++ b/app/lib/enum.js @@ -2,15 +2,20 @@ * Creates enum object with keys provided as arguments */ export default function Enum() { - let object = {}; + let object = Object.create({}); + const keys = [...arguments]; - for(const key of arguments) { + for(const key of keys) { Object.defineProperty(object, key, { enumerable: true, value: key, writable: false }); } + + Object.defineProperty(object, 'isValid', { + value: (e) => keys.includes(e) + }); Object.freeze(object); diff --git a/test/lib/enum.spec.js b/test/lib/enum.spec.js index 04e1015f42..0f5d6ee4d1 100644 --- a/test/lib/enum.spec.js +++ b/test/lib/enum.spec.js @@ -13,4 +13,12 @@ describe('enum', () => { expect(() => e.ANYWHERE = 'ANYWHERE').to.throw(); }); + it('should be able to validate enum keys', () => { + let e = Enum('NORTH', 'SOUTH', 'WEST', 'EAST'); + expect(e.isValid('SOUTH')).to.be.true; + expect(e.isValid('ANYWHERE')).to.be.false; + expect(e.isValid()).to.be.false; + expect(e.isValid(null)).to.be.false; + }) + }); |
