getProp-test.js
4.22 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* eslint-env mocha */
import assert from 'assert';
import { getOpeningElement, setParserName } from '../helper';
import getProp from '../../src/getProp';
describe('getProp', () => {
beforeEach(() => {
setParserName('babel');
});
it('should export a function', () => {
const expected = 'function';
const actual = typeof getProp;
assert.equal(actual, expected);
});
it('should return undefined if no arguments are provided', () => {
const expected = undefined;
const actual = getProp();
assert.equal(actual, expected);
});
it('should return undefined if the attribute is absent', () => {
const code = '<div />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
const expected = undefined;
const actual = getProp(props, prop);
assert.equal(actual, expected);
});
it('should return the correct attribute if the attribute exists', () => {
const code = '<div id="foo" />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
const expected = 'id';
const actual = getProp(props, prop).name.name;
assert.equal(actual, expected);
});
it('should return the correct attribute if the attribute exists in spread', () => {
const code = '<div {...{ id: "foo" }} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'ID';
const expected = 'id';
const actual = getProp(props, prop).name.name;
assert.equal(actual, expected);
});
it('should return the correct attribute if the attribute exists in spread as an expression', () => {
const code = '<div {...{ id }} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
const expected = 'id';
const actual = getProp(props, prop);
const actualName = actual.name.name;
const actualValue = actual.value.expression.name;
assert.equal(actualName, expected);
assert.equal(actualValue, expected);
});
it('should return the correct attribute if the attribute exists in spread (case sensitive)', () => {
const code = '<div {...{ id: "foo" }} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
const options = { ignoreCase: false };
const expected = 'id';
const actual = getProp(props, prop, options).name.name;
assert.equal(actual, expected);
});
it('should return undefined if the attribute does not exist in spread (case sensitive)', () => {
const code = '<div {...{ id: "foo" }} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'ID';
const options = { ignoreCase: false };
const expected = undefined;
const actual = getProp(props, prop, options);
assert.equal(actual, expected);
});
it('should return undefined for key in spread', () => {
// https://github.com/reactjs/rfcs/pull/107
const code = '<div {...{ key }} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'key';
const expected = undefined;
const actual = getProp(props, prop);
assert.equal(actual, expected);
});
it('should return undefined if the attribute may exist in spread', () => {
const code = '<div {...props} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
const expected = undefined;
const actual = getProp(props, prop);
assert.equal(actual, expected);
});
it('should not crash if the spread contains a spread', () => {
const code = '<div {...{ ...props }} />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
getProp(props, prop);
});
it('should return undefined if the attribute is considered absent in case-sensitive mode', () => {
const code = '<div ID="foo" />';
const node = getOpeningElement(code);
const { attributes: props } = node;
const prop = 'id';
const options = {
ignoreCase: false,
};
const expected = undefined;
const actual = getProp(props, prop, options);
assert.equal(actual, expected);
});
});