Skip to content
This repository was archived by the owner on Feb 9, 2018. It is now read-only.

Commit a763a2b

Browse files
authored
Merge pull request #123 from wilddamon/iteration-transform
Add iteration to CSSTransformValue
2 parents c1f7ee0 + 647d82e commit a763a2b

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

src/css-transform-value.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,34 @@
5757
}
5858
internal.inherit(CSSTransformValue, CSSStyleValue);
5959

60+
CSSTransformValue.prototype[Symbol.iterator] = function() {
61+
return this.entries();
62+
};
63+
64+
CSSTransformValue.prototype.entries = function() {
65+
function entriesCallback(index) {
66+
return [index, this.transformComponents[index]];
67+
}
68+
return internal.objects.arrayIterator(
69+
this.transformComponents.length,
70+
entriesCallback.bind(this));
71+
};
72+
73+
CSSTransformValue.prototype.keys = function() {
74+
return internal.objects.arrayIterator(
75+
this.transformComponents.length,
76+
function(index) { return index; });
77+
};
78+
79+
CSSTransformValue.prototype.values = function() {
80+
function valuesCallback(index) {
81+
return this.transformComponents[index];
82+
}
83+
return internal.objects.arrayIterator(
84+
this.transformComponents.length,
85+
valuesCallback.bind(this));
86+
};
87+
6088
scope.CSSTransformValue = CSSTransformValue;
6189

6290
})(typedOM.internal, window);

test/js/css-transform-value.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,55 @@ suite('CSSTransformValue', function() {
134134
assert.isNull(consumeTransformValue('bananas'));
135135
assert.isNull(consumeTransformValue('5px'));
136136
});
137+
138+
test('Using spread operator on CSSTransformValue results in correct values', function() {
139+
var inputComponents = [new CSSScale(2, 4)];
140+
var expectedEntries = [[0, inputComponents[0]]];
141+
var transform = new CSSTransformValue(inputComponents);
142+
assert.deepEqual([...transform], expectedEntries);
143+
});
144+
145+
test('Using iterator operations on entries() gets correct values', function() {
146+
var inputComponents = [new CSSScale(2, 4)];
147+
var expectedEntries = [[0, inputComponents[0]]];
148+
var transform = new CSSTransformValue(inputComponents);
149+
150+
// One by one
151+
assert.deepEqual(
152+
iteratorExpansionUsingNext(transform.entries()), expectedEntries);
153+
// for..of
154+
assert.deepEqual(
155+
iteratorExpansionUsingForOf(transform.entries()), expectedEntries);
156+
// Spread operator
157+
assert.deepEqual([...transform.entries()], expectedEntries);
158+
});
159+
160+
test('Using iterator operations on keys() gets correct values', function() {
161+
var inputComponents = [new CSSScale(2, 4)];
162+
var expectedKeys = [0];
163+
var transform = new CSSTransformValue(inputComponents);
164+
165+
// One by one
166+
assert.deepEqual(
167+
iteratorExpansionUsingNext(transform.keys()), expectedKeys);
168+
// for..of
169+
assert.deepEqual(
170+
iteratorExpansionUsingForOf(transform.keys()), expectedKeys);
171+
// Spread operator
172+
assert.deepEqual([...transform.keys()], expectedKeys);
173+
});
174+
175+
test('Using iterator operations on values() gets correct values', function() {
176+
var inputComponents = [new CSSScale(2, 4)];
177+
var transform = new CSSTransformValue(inputComponents);
178+
179+
// One by one
180+
assert.deepEqual(
181+
iteratorExpansionUsingNext(transform.values()), inputComponents);
182+
// for..of
183+
assert.deepEqual(
184+
iteratorExpansionUsingForOf(transform.values()), inputComponents);
185+
// Spread operator
186+
assert.deepEqual([...transform.values()], inputComponents);
187+
});
137188
});

0 commit comments

Comments
 (0)