Increase branch coverage: Array.prototype functions (#2796)
Added new test cases to improve branch coverage in Array.prototype routines. The following script is made for testing branch coverage with all the test suites (--jerry-test-suite --test262 --unittests --jerry-tests), or with only one .js file. https://github.com/matedabis/jerryscript/blob/gcov_coverage_tester/tests/gcov-tests/gcovtester.py While measuring the branch coverage we dont count JERRY_ASSERT s. The results are measured by running all the test scripts, with the modifications in the PRs. Branch coverage including pando-project#2682 and pando-project#2674: -before: 399 / 476 -after: 472 / 476 There are 28 functions in ecma-builtin-array-prototype.c, we hit 14 from them. The other 14 functions are either already covered, or we could not improve the coverage of it. More information about the coverage improvement and the branches not reached: https://gist.github.com/matedabis/d7b9fc0690aa2f4be6aa160fdf482e0e While improving the coverage we found an unnecessary condition check, which can not be false in any cases. Co-authored-by: Csaba Repasi repasics@inf.u-szeged.hu JerryScript-DCO-1.0-Signed-off-by: Csaba Repasi repasics@inf.u-szeged.hu JerryScript-DCO-1.0-Signed-off-by: Mate Dabis mdabis@inf.u-szeged.hu
This commit is contained in:
committed by
Dániel Bátyai
parent
48cec485e1
commit
09d8793e30
@@ -43,3 +43,77 @@ try {
|
||||
assert(e.message === "foo");
|
||||
assert(e instanceof ReferenceError);
|
||||
}
|
||||
|
||||
/* ES v5.1 15.4.4.8.6.e.
|
||||
Checking behavior when unable to get the last element */
|
||||
var obj = { reverse : Array.prototype.reverse, length : 4 };
|
||||
Object.defineProperty(obj, '3', { 'get' : function () {throw new ReferenceError ("foo"); } });
|
||||
|
||||
try {
|
||||
obj.reverse();
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert(e.message === "foo");
|
||||
assert(e instanceof ReferenceError);
|
||||
}
|
||||
|
||||
/* ES v5.1 15.4.4.8.6.h.i.
|
||||
Checking behavior when first 3 elements are not writable */
|
||||
try {
|
||||
var arr = [,,, 3, 4, 5, 6,,,,,,,,,0, 1, 2, 3, 4, 5, 6];
|
||||
Object.defineProperty(arr, '0', {});
|
||||
Object.defineProperty(arr, '1', {});
|
||||
Object.defineProperty(arr, '2', {});
|
||||
Array.prototype.reverse.call(arr);
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert(e instanceof TypeError);
|
||||
}
|
||||
|
||||
/* ES v5.1 15.4.4.8.6.h.ii.
|
||||
Checking behavior when last 3 elements are not writable */
|
||||
try {
|
||||
var arr = [0, 1, 2, 3, 4, 5, 6,,,,,,,,,0, 1, 2, 3,,,];
|
||||
Object.defineProperty(arr, '19', {});
|
||||
Object.defineProperty(arr, '20', {});
|
||||
Object.defineProperty(arr, '21', {});
|
||||
Array.prototype.reverse.call(arr);
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert(e instanceof TypeError);
|
||||
}
|
||||
|
||||
/* ES v5.1 15.4.4.8.6.i.i.
|
||||
Checking behavior when first elements do not exist and the array is freezed */
|
||||
try {
|
||||
var arr = [,,,,,,,,,,,,,,,,0, 1, 2, 3, 4, 5, 6];
|
||||
arr = Object.freeze(arr);
|
||||
Array.prototype.reverse.call(arr);
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert(e instanceof TypeError);
|
||||
}
|
||||
|
||||
/* ES v5.1 15.4.4.8.6.i.ii.
|
||||
Checking behavior when unable to get the first 2 elements */
|
||||
var obj = { reverse : Array.prototype.reverse, length : 4 };
|
||||
Object.defineProperty(obj, '2', { value : 0 });
|
||||
Object.defineProperty(obj, '3', { value : 0 });
|
||||
try {
|
||||
obj.reverse();
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert(e instanceof TypeError);
|
||||
}
|
||||
|
||||
/* ES v5.1 15.4.4.8.6.j.i.
|
||||
Checking behavior when unable to get the last 2 elements */
|
||||
var obj = { reverse : Array.prototype.reverse, length : 4 };
|
||||
Object.defineProperty(obj, '0', { value : 0 });
|
||||
Object.defineProperty(obj, '1', { value : 0 });
|
||||
try {
|
||||
obj.reverse();
|
||||
assert(false);
|
||||
} catch (e) {
|
||||
assert(e instanceof TypeError);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user