/
getPropertyName-test.js
95 lines (71 loc) · 2.55 KB
/
getPropertyName-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
* Copyright (c) 2015, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
import { parse, expression } from '../../../tests/utils';
describe('getPropertyName', () => {
let getPropertyName;
function parsePath(src) {
const root = parse(src.trim());
return root.get('body', root.node.body.length - 1, 'expression');
}
beforeEach(() => {
getPropertyName = require('../getPropertyName').default;
});
it('returns the name for a normal property', () => {
const def = expression('{ foo: 1 }');
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe('foo');
});
it('returns the name of a object type spread property', () => {
const def = expression('(a: { ...foo })');
const param = def.get('typeAnnotation', 'typeAnnotation', 'properties', 0);
expect(getPropertyName(param)).toBe('foo');
});
it('creates name for computed properties', () => {
const def = expression('{ [foo]: 21 }');
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe('@computed#foo');
});
it('creates name for computed properties from string', () => {
const def = expression('{ ["foo"]: 21 }');
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe('foo');
});
it('creates name for computed properties from int', () => {
const def = expression('{ [31]: 21 }');
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe('31');
});
it('returns null for computed properties from regex', () => {
const def = expression('{ [/31/]: 21 }');
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe(null);
});
it('returns null for to complex computed properties', () => {
const def = expression('{ [() => {}]: 21 }');
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe(null);
});
it('resolves simple variables', () => {
const def = parsePath(`
const foo = "name";
({ [foo]: 21 });
`);
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe('name');
});
it('resolves simple member expressions', () => {
const def = parsePath(`
const a = { foo: "name" };
({ [a.foo]: 21 });
`);
const param = def.get('properties', 0);
expect(getPropertyName(param)).toBe('name');
});
});