feat(limitTo): ignore limit when undefined #10510

Closed
wants to merge 1 commit into
from

Projects

None yet

3 participants

@marcin-wosinek
Contributor

BREAKING CHANGE: limitTo changed behavoir when limit value is undefined.
Instead of returning empty object/array it returns non-changed input.

Closes #10484

@googlebot

We found a Contributor License Agreement for you (the sender of this pull request), but were unable to find agreements for the commit author(s). If you authored these, maybe you used a different email address in the git commits than was used to sign the CLA (login here to double check)? If these were authored by someone else, then they will need to sign a CLA as well, and confirm that they're okay with these being contributed to Google.

@googlebot googlebot added the cla: no label Dec 17, 2014
@googlebot

CLAs look good, thanks!

@googlebot googlebot added cla: yes and removed cla: no labels Dec 17, 2014
@gkalpak gkalpak commented on an outdated diff Dec 18, 2014
src/ng/filter/limitTo.js
@@ -15,7 +15,8 @@
* @param {string|number} limit The length of the returned array or string. If the `limit` number
* is positive, `limit` number of items from the beginning of the source array/string are copied.
* If the number is negative, `limit` number of items from the end of the source array/string
- * are copied. The `limit` will be trimmed if it exceeds `array.length`
+ * are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined,
+ * the input will be left unchanged.
@gkalpak
gkalpak Dec 18, 2014 Member

IMO, "returned" is more appropriate than "left" (since the input is left unchanged in any case).

@gkalpak gkalpak commented on an outdated diff Dec 18, 2014
src/ng/filter/limitTo.js
} else {
// zero and NaN check on limit - return empty array
- if (!limit) return [];
+ if (!limit) return input.slice();
@gkalpak
gkalpak Dec 18, 2014 Member

This will never evaluate to true with the current implementation.

@gkalpak gkalpak commented on the diff Dec 18, 2014
test/ng/filter/limitToSpec.js
@@ -34,20 +34,20 @@ describe('Filter: limitTo', function() {
});
- it('should return an empty array when X cannot be parsed', function() {
- expect(limitTo(items, 'bogus')).toEqual([]);
- expect(limitTo(items, 'null')).toEqual([]);
- expect(limitTo(items, 'undefined')).toEqual([]);
- expect(limitTo(items, null)).toEqual([]);
- expect(limitTo(items, undefined)).toEqual([]);
+ it('should return entire array when X cannot be parsed', function() {
+ expect(limitTo(items, 'bogus')).toEqual(items);
+ expect(limitTo(items, 'null')).toEqual(items);
+ expect(limitTo(items, 'undefined')).toEqual(items);
+ expect(limitTo(items, null)).toEqual(items);
+ expect(limitTo(items, undefined)).toEqual(items);
@gkalpak
gkalpak Dec 18, 2014 Member

There should also be a test with 0 (to ensure it works as expected).

UPDATE: Has been added.

@gkalpak gkalpak commented on the diff Dec 18, 2014
test/ng/filter/limitToSpec.js
});
- it('should return an empty string when X cannot be parsed', function() {
- expect(limitTo(str, 'bogus')).toEqual("");
- expect(limitTo(str, 'null')).toEqual("");
- expect(limitTo(str, 'undefined')).toEqual("");
- expect(limitTo(str, null)).toEqual("");
- expect(limitTo(str, undefined)).toEqual("");
+ it('should return entire string when X cannot be parsed', function() {
+ expect(limitTo(str, 'bogus')).toEqual(str);
+ expect(limitTo(str, 'null')).toEqual(str);
+ expect(limitTo(str, 'undefined')).toEqual(str);
+ expect(limitTo(str, null)).toEqual(str);
+ expect(limitTo(str, undefined)).toEqual(str);
@gkalpak
gkalpak Dec 18, 2014 Member

There should also be a test with 0 (to ensure it works as expected).

UPDATE: Has been added.

@gkalpak
Member
gkalpak commented Dec 18, 2014

I have left a couple of minor comments inline.

Additionally, I believe a little refactoring is in place: it would be better (i.e. more maintainable/performant) to do the NaN check sooner in the code (and return the input itself), so we can (1) "fail fast" and (2) avoid some of the else blocks further down.

But "functionality-wise" it should be OK.

BTW, the commit message and breaking change notice are slightly inaccurate: It is not only undefined but any invalid value, right ?

@marcin-wosinek
Contributor

@gkalpak thanks for the review

@marcin-wosinek
Contributor

I'm lost with the build result. I get:

No output has been received in the last 10 minutes, this potentially indicates 
a stalled build or something wrong with the build itself.

The build has been terminated

from job 1.

@gkalpak gkalpak commented on the diff Dec 18, 2014
test/ng/filter/limitToSpec.js
@@ -34,20 +34,28 @@ describe('Filter: limitTo', function() {
});
- it('should return an empty array when X cannot be parsed', function() {
- expect(limitTo(items, 'bogus')).toEqual([]);
- expect(limitTo(items, 'null')).toEqual([]);
- expect(limitTo(items, 'undefined')).toEqual([]);
- expect(limitTo(items, null)).toEqual([]);
- expect(limitTo(items, undefined)).toEqual([]);
+ it('should return an empty array when X = 0', function() {
+ expect(limitTo(items, 0)).toEqual([]);
@gkalpak
gkalpak Dec 18, 2014 Member

Nit picking: Could add a test for '0' (string) as well.

@gkalpak gkalpak commented on the diff Dec 18, 2014
test/ng/filter/limitToSpec.js
- it('should return an empty string when X cannot be parsed', function() {
- expect(limitTo(str, 'bogus')).toEqual("");
- expect(limitTo(str, 'null')).toEqual("");
- expect(limitTo(str, 'undefined')).toEqual("");
- expect(limitTo(str, null)).toEqual("");
- expect(limitTo(str, undefined)).toEqual("");
+ it('should return entire array when X cannot be parsed', function() {
+ expect(limitTo(items, 'bogus')).toEqual(items);
+ expect(limitTo(items, 'null')).toEqual(items);
+ expect(limitTo(items, 'undefined')).toEqual(items);
+ expect(limitTo(items, null)).toEqual(items);
+ expect(limitTo(items, undefined)).toEqual(items);
+ });
+
+ it('should return an empty string when X = 0', function() {
+ expect(limitTo(str, 0)).toEqual("");
@gkalpak
gkalpak Dec 18, 2014 Member

Nit picking: Could add a test for '0' (string) as well.
(I know it was like this before, but single-quotes would also be preferable to double-quotes for consistency.)

@gkalpak
Member
gkalpak commented Dec 18, 2014

@marcin-wosinek: It is a flake (not related to the build) on SauseLabs only. I restarted the job, but since the tests passed on BrowserStack, it should be OK.

I left two "nit-picky" comments on the tests, but other than that it looks good to me.

(There's a typo in the BREAKING CHANGE notice btw: behavoir --> behavio[u]r)

@gkalpak
Member
gkalpak commented Dec 18, 2014

LGTM

@marcin-wosinek marcin-wosinek feat(limitTo): ignore limit when invalid
BREAKING CHANGE: limitTo changed behavior when limit value is invalid.
Instead of returning empty object/array it returns unchanged input.

Closes #10484
ea5085c
@petebacondarwin petebacondarwin added a commit that closed this pull request Dec 21, 2014
@petebacondarwin petebacondarwin feat(limitTo): ignore limit when invalid
BREAKING CHANGE: limitTo changed behavior when limit value is invalid.
Instead of returning empty object/array it returns unchanged input.

Closes #10510
a3c3bf3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment