forked from intel/appframework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prop.test.js
131 lines (97 loc) · 4.47 KB
/
prop.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
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
require("./chai.helper");
var domHelper = require("./dom.helper");
describe("prop", function () {
var collection;
var emptyCollection;
beforeEach(function () {
domHelper(
"<div id=\"foo\" bar=\"xomba\"></div>" +
"<div id=\"foo2\" bar=\"xomba\"></div>"
);
collection = $("[bar]");
collection.length.should.equal(2);
emptyCollection = $("bingo");
emptyCollection.length.should.equal(0);
});
it("should set multiple properties on members if first arg is an object", function () {
collection.prop({ "bingo": "masters", "break": "out" });
$(collection[0]).prop("bingo").should.equal("masters");
$(collection[1]).prop("bingo").should.equal("masters");
$(collection[0]).prop("break").should.equal("out");
$(collection[1]).prop("break").should.equal("out");
});
it("should set the property of a single member to the specified value", function () {
collection = $("#foo");
collection.length.should.equal(1);
collection.prop("bleep", "booster");
collection.prop("bleep").should.equal("booster");
// check that the other div doesn't have the property
expect($("#foo2").prop("bleep")).to.be.undefined;
});
it("should set the property of each member to the specified value", function () {
collection.prop("bar", "hoopla");
$(collection[0]).prop("bar").should.equal("hoopla");
$(collection[1]).prop("bar").should.equal("hoopla");
});
it("should remove the property from each member if the value is null", function () {
collection.prop("bar", "hoopla");
// remove the property
collection.prop("bar", null);
expect($(collection[0]).prop("bar")).to.be.undefined;
expect($(collection[1]).prop("bar")).to.be.undefined;
});
it("should remove the property from the member and from the cache if value is null", function () {
collection.prop("bar", { "i": "theobject" });
// remove the property
collection.prop("bar", null);
expect($(collection[0]).prop("bar")).to.be.undefined;
expect($(collection[1]).prop("bar")).to.be.undefined;
});
it("should return the property value of the first member", function () {
// properties are separate from attributes, but we set one
// with the same name as an attribute to maximise the possibility
// of overlap/confusion
collection.prop("bar", "hoopla");
collection.prop("bar").should.equal("hoopla");
});
it("should return undefined for an unset property", function () {
expect(collection.prop("definitelynotsetproperty")).to.be.undefined;
});
it("should cache the value when it is an object, array or function", function () {
// object
var value = { a: 1, b: 2 };
collection.prop("underTest", value);
$(collection[0]).prop("underTest").should.equal(value);
$(collection[1]).prop("underTest").should.equal(value);
// array
value = [1, 2, 3];
collection.prop("underTest", value);
$(collection[0]).prop("underTest").should.equal(value);
$(collection[1]).prop("underTest").should.equal(value);
// function
value = function () {
return "hurray!";
};
collection.prop("underTest", value);
$(collection[0]).prop("underTest").should.equal(value);
$(collection[1]).prop("underTest").should.equal(value);
});
it("should reset cached value when set again so cache doesn't go stale", function () {
// set an object so the cache is used
var value = { x: 10, y: 20 };
collection.prop("splendidObject", value);
$(collection[0]).prop("splendidObject").should.equal(value);
$(collection[1]).prop("splendidObject").should.equal(value);
// reset the property value to a different object
var value2 = { z: 28, p: 38 };
collection.prop("splendidObject", value2);
$(collection[0]).prop("splendidObject").should.equal(value2);
$(collection[1]).prop("splendidObject").should.equal(value2);
});
it("should return undefined for an empty collection", function () {
expect(emptyCollection.prop("master")).to.be.undefined;
});
it("should return the empty collection if setting a value on an empty collection", function () {
expect(emptyCollection.prop("master", "hoho")).to.equal(emptyCollection);
});
});