From 39b7573af1e98d16755a5b766829fe59c1ad710d Mon Sep 17 00:00:00 2001 From: Sami Vaarala Date: Tue, 2 Sep 2014 16:47:01 +0300 Subject: [PATCH] Improve Array filter() test case Add test for trailing non-existent elements to demonstrate that they don't have a non-standard real world behavior like map() and concat(). --- .../test-bi-array-proto-filter.js | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/ecmascript-testcases/test-bi-array-proto-filter.js b/ecmascript-testcases/test-bi-array-proto-filter.js index 3bbd5ab3..0dec223b 100644 --- a/ecmascript-testcases/test-bi-array-proto-filter.js +++ b/ecmascript-testcases/test-bi-array-proto-filter.js @@ -1,4 +1,4 @@ -function retEven(val, key, obj) { +function retEvenIndices(val, key, obj) { print(typeof this, this, typeof val, val, typeof key, key, typeof obj, obj); return (Number(key) % 2) == 0; } @@ -39,6 +39,11 @@ object [object global] number 3 number 51 object 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, object [object global] number 4 number 52 object 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,3,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5 object [object global] number 5 number 100 object 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,3,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5 object 1,2,4,5 +object [object global] number 1 number 0 object 1,2,,,3,4,, +object [object global] number 2 number 1 object 1,2,,,3,4,, +object [object global] number 3 number 4 object 1,2,,,3,4,, +object [object global] number 4 number 5 object 1,2,,,3,4,, +object 1,3 object [object global] string foo number 0 object [object Object] object [object global] string bar number 5 object [object Object] object [object global] string quux number 20 object [object Object] @@ -78,13 +83,13 @@ function basicTest() { // simple cases - test([], [ retEven ]); - test([1], [ retEven ]); - test([1,2], [ retEven ]); + test([], [ retEvenIndices ]); + test([1], [ retEvenIndices ]); + test([1,2], [ retEvenIndices ]); // dense - test([1,2,3,4,5], [ retEven ]); + test([1,2,3,4,5], [ retEvenIndices ]); // sparse @@ -93,12 +98,17 @@ function basicTest() { obj[50] = 2; obj[51] = 3; obj[52] = 4; - test(obj, [ retEven ]); + test(obj, [ retEvenIndices ]); + + // trailing non-existent elements + + obj = [ 1, 2, , , 3, 4 , , , ]; + test(obj, [ retEvenIndices ]); // non-array obj = { '0': 'foo', '5': 'bar', '20': 'quux', '100': 'baz', length: 35 }; - test(obj, [ retEven ]); + test(obj, [ retEvenIndices ]); // error in callback propagates outwards @@ -254,6 +264,7 @@ object [object global] string quux number 2 object [object Object] object foo,bar,quux length valueOf TypeError +TypeError callback 1 0 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 callback 2 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 callback 3 2 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 @@ -279,14 +290,14 @@ function coercionTest() { // this - test(undefined, [ retEven ]); - test(null, [ retEven ]); - test(true, [ retEven ]); - test(false, [ retEven ]); - test(123, [ retEven ]); - test('foo', [ retEven ]); - test([1,2,3], [ retEven ]); - test({ foo: 1, bar: 2 }, [ retEven ]); + test(undefined, [ retEvenIndices ]); + test(null, [ retEvenIndices ]); + test(true, [ retEvenIndices ]); + test(false, [ retEvenIndices ]); + test(123, [ retEvenIndices ]); + test('foo', [ retEvenIndices ]); + test([1,2,3], [ retEvenIndices ]); + test({ foo: 1, bar: 2 }, [ retEvenIndices ]); // length @@ -323,6 +334,9 @@ function coercionTest() { }}; test(obj, [ null ]); + // callable check is done even with no elements to process + test([], [ null ]); + // return value of callback is ToBoolean() coerced; this has no // side effects, but test each Ecmascript type @@ -338,4 +352,3 @@ try { } catch (e) { print(e); } -